From cf01215aef09b70dd1ae7d9bb264f072a30e1dad Mon Sep 17 00:00:00 2001 From: Colin Lienard Date: Wed, 12 Aug 2026 15:32:20 +0200 Subject: [PATCH 001/215] vendor/sdl3: wasm foreign import library configurable --- vendor/sdl3/sdl3__foreign.odin | 6 +++++- vendor/sdl3/ttf/sdl3_ttf.odin | 6 +++++- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/vendor/sdl3/sdl3__foreign.odin b/vendor/sdl3/sdl3__foreign.odin index 16ccdd9ec..844b1a318 100644 --- a/vendor/sdl3/sdl3__foreign.odin +++ b/vendor/sdl3/sdl3__foreign.odin @@ -1,6 +1,10 @@ package sdl3 -when ODIN_OS == .Windows { +SDL3_WASM_LIB :: #config(SDL3_WASM_LIB, "env.o") + +when ODIN_ARCH == .wasm32 || ODIN_ARCH == .wasm64p32 { + @(export) foreign import lib { SDL3_WASM_LIB } +} else when ODIN_OS == .Windows { @(export) foreign import lib { "SDL3.lib" } } else { @(export) foreign import lib { "system:SDL3" } diff --git a/vendor/sdl3/ttf/sdl3_ttf.odin b/vendor/sdl3/ttf/sdl3_ttf.odin index 10d313fbb..511d527c4 100644 --- a/vendor/sdl3/ttf/sdl3_ttf.odin +++ b/vendor/sdl3/ttf/sdl3_ttf.odin @@ -4,7 +4,11 @@ package sdl3_ttf import "core:c" import SDL "vendor:sdl3" -when ODIN_OS == .Windows { +SDL3_TTF_WASM_LIB :: #config(SDL3_TTF_WASM_LIB, "env.o") + +when ODIN_ARCH == .wasm32 || ODIN_ARCH == .wasm64p32 { + foreign import lib { SDL3_TTF_WASM_LIB } +} else when ODIN_OS == .Windows { foreign import lib "SDL3_ttf.lib" } else { foreign import lib "system:SDL3_ttf" From 7e6d9359d1361a0eff07a821e01658d7f445999b Mon Sep 17 00:00:00 2001 From: Jan Go Date: Sun, 30 Aug 2026 19:42:31 +0800 Subject: [PATCH 002/215] Document all public procs in core:sort --- core/sort/sort.odin | 750 +++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 748 insertions(+), 2 deletions(-) diff --git a/core/sort/sort.odin b/core/sort/sort.odin index 30abc5336..69f5484ba 100644 --- a/core/sort/sort.odin +++ b/core/sort/sort.odin @@ -7,6 +7,17 @@ import "base:intrinsics" _ :: intrinsics ORD :: intrinsics.type_is_ordered +/* +A generic interface describing a sequence of elements that can be sorted. + +It provides the operations the sorting procedures use to inspect and reorder +the elements: `len` reports the number of elements, `less` compares two +elements, and `swap` exchanges two elements. The underlying data lives in +`collection`. + +Use `slice_interface` to obtain an `Interface` for a slice, or +`reverse_interface` to wrap an `Interface` so that it is ordered in reverse. +*/ Interface :: struct { len: proc(it: Interface) -> int, less: proc(it: Interface, i, j: int) -> bool, @@ -14,8 +25,30 @@ Interface :: struct { collection: rawptr, } -// sort sorts an Interface -// This sort is not guaranteed to be stable +/* +Sorts the elements of an `Interface` in place. + +This sort is not guaranteed to be stable. + +Inputs: +- it: The `Interface` to sort. + +Example: + + import "core:fmt" + import "core:sort" + + sort_example :: proc() { + data := []int{5, 2, 8, 1, 9} + sort.sort(sort.slice_interface(&data)) + fmt.println(data) + } + +Output: + + [1, 2, 5, 8, 9] + +*/ sort :: proc(it: Interface) { max_depth :: proc(n: int) -> int { // 2*ceil(log2(n+1)) depth: int @@ -29,6 +62,38 @@ sort :: proc(it: Interface) { _quick_sort(it, 0, n, max_depth(n)) } +/* +Creates an `Interface` over the given slice of ordered elements, for use with +the sorting procedures. + +The elements are compared with the `<` operator, so the resulting sort is in +ascending order. + +Inputs: +- s: A pointer to the slice to wrap. + +Returns: +- An `Interface` that describes the elements of `s`. + +Example: + + import "core:fmt" + import "core:sort" + + slice_interface_example :: proc() { + data := []int{3, 1, 2} + it := sort.slice_interface(&data) + fmt.println(sort.is_sorted(it)) + sort.sort(it) + fmt.println(data) + } + +Output: + + false + [1, 2, 3] + +*/ slice_interface :: proc(s: ^$T/[]$E) -> Interface where ORD(E) { return Interface{ collection = rawptr(s), @@ -47,6 +112,33 @@ slice_interface :: proc(s: ^$T/[]$E) -> Interface where ORD(E) { } } +/* +Wraps an `Interface` so that the ordering is reversed, making the sorting +procedures sort the elements in descending order. + +Inputs: +- it: A pointer to the `Interface` to reverse. + +Returns: +- A new `Interface` that reverses the ordering of `it`. + +Example: + + import "core:fmt" + import "core:sort" + + reverse_interface_example :: proc() { + data := []int{5, 2, 8} + s := sort.slice_interface(&data) + sort.sort(sort.reverse_interface(&s)) + fmt.println(data) + } + +Output: + + [8, 5, 2] + +*/ reverse_interface :: proc(it: ^Interface) -> Interface { return Interface{ collection = it, @@ -66,11 +158,62 @@ reverse_interface :: proc(it: ^Interface) -> Interface { } } +/* +Sorts the elements of an `Interface` in descending order, in place. + +This sort is not guaranteed to be stable. + +Inputs: +- it: The `Interface` to sort. + +Example: + + import "core:fmt" + import "core:sort" + + reverse_sort_example :: proc() { + data := []int{5, 2, 8, 1} + sort.reverse_sort(sort.slice_interface(&data)) + fmt.println(data) + } + +Output: + + [8, 5, 2, 1] + +*/ reverse_sort :: proc(it: Interface) { it := it sort(reverse_interface(&it)) } +/* +Reports whether the elements of an `Interface` are in ascending order. + +Inputs: +- it: The `Interface` to check. + +Returns: +- `true` if the elements are sorted in ascending order, `false` otherwise. + +Example: + + import "core:fmt" + import "core:sort" + + is_sorted_example :: proc() { + a := []int{1, 2, 3} + b := []int{3, 1, 2} + fmt.println(sort.is_sorted(sort.slice_interface(&a))) + fmt.println(sort.is_sorted(sort.slice_interface(&b))) + } + +Output: + + true + false + +*/ is_sorted :: proc(it: Interface) -> bool { n := it->len() for i := n-1; i > 0; i -= 1 { @@ -82,12 +225,64 @@ is_sorted :: proc(it: Interface) -> bool { } +/* +Swaps `n` elements beginning at index `a` with the `n` elements beginning at +index `b`. + +Inputs: +- it: The `Interface`. +- a: Start index of the first range to swap. +- b: Start index of the second range to swap. +- n: The number of elements to swap. + +Example: + + import "core:fmt" + import "core:sort" + + swap_range_example :: proc() { + data := []int{1, 2, 3, 4} + sort.swap_range(sort.slice_interface(&data), 0, 2, 2) + fmt.println(data) + } + +Output: + + [3, 4, 1, 2] + +*/ swap_range :: proc(it: Interface, a, b, n: int) { for i in 0..swap(a+i, b+i) } } +/* +Rotates the elements of an `Interface` in the range `[a, b)` so that the +element at index `m` becomes the first element of the range. + +Inputs: +- it: The `Interface`. +- a: Start index of the range. +- m: The index whose element becomes first after the rotation. +- b: Exclusive end index of the range. + +Example: + + import "core:fmt" + import "core:sort" + + rotate_example :: proc() { + data := []int{0, 1, 2, 3} + sort.rotate(sort.slice_interface(&data), 0, 2, 4) + fmt.println(data) + } + +Output: + + [2, 3, 0, 1] + +*/ rotate :: proc(it: Interface, a, m, b: int) { i := m - a j := b - m @@ -260,6 +455,33 @@ _insertion_sort :: proc(it: Interface, a, b: int) { } } +/* +Sorts a slice in place using bubble sort, ordered by the given comparator. + +The comparator `f` is called with two elements and must return a negative +number if the first is less than the second, `0` if they are equal, and a +positive number otherwise. + +Inputs: +- array: The slice to sort. +- f: The comparator used to order the elements. + +Example: + + import "core:fmt" + import "core:sort" + + bubble_sort_proc_example :: proc() { + data := []int{5, 3, 8, 1} + sort.bubble_sort_proc(data, sort.compare_ints) + fmt.println(data) + } + +Output: + + [1, 3, 5, 8] + +*/ bubble_sort_proc :: proc(array: $A/[]$T, f: proc(T, T) -> int) { assert(f != nil) count := len(array) @@ -288,6 +510,29 @@ bubble_sort_proc :: proc(array: $A/[]$T, f: proc(T, T) -> int) { } } +/* +Sorts a slice of ordered elements in place using bubble sort, in ascending +order. + +Inputs: +- array: The slice to sort. + +Example: + + import "core:fmt" + import "core:sort" + + bubble_sort_example :: proc() { + data := []int{5, 3, 8, 1} + sort.bubble_sort(data) + fmt.println(data) + } + +Output: + + [1, 3, 5, 8] + +*/ bubble_sort :: proc(array: $A/[]$T) where intrinsics.type_is_ordered(T) { count := len(array) @@ -315,6 +560,33 @@ bubble_sort :: proc(array: $A/[]$T) where intrinsics.type_is_ordered(T) { } } +/* +Sorts a slice in place using quick sort, ordered by the given comparator. + +The comparator `f` is called with two elements and must return a negative +number if the first is less than the second, `0` if they are equal, and a +positive number otherwise. + +Inputs: +- array: The slice to sort. +- f: The comparator used to order the elements. + +Example: + + import "core:fmt" + import "core:sort" + + quick_sort_proc_example :: proc() { + data := []int{5, 3, 8, 1} + sort.quick_sort_proc(data, sort.compare_ints) + fmt.println(data) + } + +Output: + + [1, 3, 5, 8] + +*/ quick_sort_proc :: proc(array: $A/[]$T, f: proc(T, T) -> int) { assert(f != nil) a := array @@ -343,6 +615,29 @@ quick_sort_proc :: proc(array: $A/[]$T, f: proc(T, T) -> int) { quick_sort_proc(a[i:n], f) } +/* +Sorts a slice of ordered elements in place using quick sort, in ascending +order. + +Inputs: +- array: The slice to sort. + +Example: + + import "core:fmt" + import "core:sort" + + quick_sort_example :: proc() { + data := []int{5, 3, 8, 1} + sort.quick_sort(data) + fmt.println(data) + } + +Output: + + [1, 3, 5, 8] + +*/ quick_sort :: proc(array: $A/[]$T) where intrinsics.type_is_ordered(T) { a := array n := len(a) @@ -378,6 +673,33 @@ _log2 :: proc(x: int) -> int { return res } +/* +Sorts a slice in place using merge sort, ordered by the given comparator. + +The comparator `f` is called with two elements and must return a negative +number if the first is less than the second, `0` if they are equal, and a +positive number otherwise. + +Inputs: +- array: The slice to sort. +- f: The comparator used to order the elements. + +Example: + + import "core:fmt" + import "core:sort" + + merge_sort_proc_example :: proc() { + data := []int{5, 3, 8, 1} + sort.merge_sort_proc(data, sort.compare_ints) + fmt.println(data) + } + +Output: + + [1, 3, 5, 8] + +*/ merge_sort_proc :: proc(array: $A/[]$T, f: proc(T, T) -> int) { merge :: proc(a: A, start, mid, end: int, f: proc(T, T) -> int) { s, m := start, mid @@ -419,6 +741,29 @@ merge_sort_proc :: proc(array: $A/[]$T, f: proc(T, T) -> int) { internal_sort(array, 0, len(array)-1, f) } +/* +Sorts a slice of ordered elements in place using merge sort, in ascending +order. + +Inputs: +- array: The slice to sort. + +Example: + + import "core:fmt" + import "core:sort" + + merge_sort_example :: proc() { + data := []int{5, 3, 8, 1} + sort.merge_sort(data) + fmt.println(data) + } + +Output: + + [1, 3, 5, 8] + +*/ merge_sort :: proc(array: $A/[]$T) where intrinsics.type_is_ordered(T) { merge :: proc(a: A, start, mid, end: int) { s, m := start, mid @@ -460,6 +805,33 @@ merge_sort :: proc(array: $A/[]$T) where intrinsics.type_is_ordered(T) { internal_sort(array, 0, len(array)-1) } +/* +Sorts a slice in place using heap sort, ordered by the given comparator. + +The comparator `f` is called with two elements and must return a negative +number if the first is less than the second, `0` if they are equal, and a +positive number otherwise. + +Inputs: +- array: The slice to sort. +- f: The comparator used to order the elements. + +Example: + + import "core:fmt" + import "core:sort" + + heap_sort_proc_example :: proc() { + data := []int{5, 3, 8, 1} + sort.heap_sort_proc(data, sort.compare_ints) + fmt.println(data) + } + +Output: + + [1, 3, 5, 8] + +*/ heap_sort_proc :: proc(array: $A/[]$T, f: proc(T, T) -> int) { sift_proc :: proc(a: A, pi: int, n: int, f: proc(T, T) -> int) #no_bounds_check { p := pi @@ -494,6 +866,29 @@ heap_sort_proc :: proc(array: $A/[]$T, f: proc(T, T) -> int) { } } +/* +Sorts a slice of ordered elements in place using heap sort, in ascending +order. + +Inputs: +- array: The slice to sort. + +Example: + + import "core:fmt" + import "core:sort" + + heap_sort_example :: proc() { + data := []int{5, 3, 8, 1} + sort.heap_sort(data) + fmt.println(data) + } + +Output: + + [1, 3, 5, 8] + +*/ heap_sort :: proc(array: $A/[]$T) where intrinsics.type_is_ordered(T) { sift :: proc(a: A, pi: int, n: int) #no_bounds_check { p := pi @@ -528,6 +923,32 @@ heap_sort :: proc(array: $A/[]$T) where intrinsics.type_is_ordered(T) { } } +/* +Compares two booleans for ordering, where `false` is considered less than +`true`. + +Returns: +- A negative number if `a` is less than `b`, `0` if they are equal, and a + positive number otherwise. + +Example: + + import "core:fmt" + import "core:sort" + + compare_bools_example :: proc() { + fmt.println(sort.compare_bools(false, true)) + fmt.println(sort.compare_bools(true, true)) + fmt.println(sort.compare_bools(true, false)) + } + +Output: + + -1 + 0 + 1 + +*/ compare_bools :: proc(a, b: bool) -> int { switch { case !a && b: return -1 @@ -537,6 +958,31 @@ compare_bools :: proc(a, b: bool) -> int { } +/* +Compares two `int` values for ordering. + +Returns: +- A negative number if `a` is less than `b`, `0` if they are equal, and a + positive number otherwise. + +Example: + + import "core:fmt" + import "core:sort" + + compare_ints_example :: proc() { + fmt.println(sort.compare_ints(1, 2)) + fmt.println(sort.compare_ints(2, 2)) + fmt.println(sort.compare_ints(3, 2)) + } + +Output: + + -1 + 0 + 1 + +*/ compare_ints :: proc(a, b: int) -> int { switch delta := a - b; { case delta < 0: return -1 @@ -545,6 +991,31 @@ compare_ints :: proc(a, b: int) -> int { return 0 } +/* +Compares two `uint` values for ordering. + +Returns: +- A negative number if `a` is less than `b`, `0` if they are equal, and a + positive number otherwise. + +Example: + + import "core:fmt" + import "core:sort" + + compare_uints_example :: proc() { + fmt.println(sort.compare_uints(1, 2)) + fmt.println(sort.compare_uints(2, 2)) + fmt.println(sort.compare_uints(3, 2)) + } + +Output: + + -1 + 0 + 1 + +*/ compare_uints :: proc(a, b: uint) -> int { switch { case a < b: return -1 @@ -553,6 +1024,31 @@ compare_uints :: proc(a, b: uint) -> int { return 0 } +/* +Compares two `u8` values for ordering. + +Returns: +- A negative number if `a` is less than `b`, `0` if they are equal, and a + positive number otherwise. + +Example: + + import "core:fmt" + import "core:sort" + + compare_u8s_example :: proc() { + fmt.println(sort.compare_u8s(1, 2)) + fmt.println(sort.compare_u8s(2, 2)) + fmt.println(sort.compare_u8s(3, 2)) + } + +Output: + + -1 + 0 + 1 + +*/ compare_u8s :: proc(a, b: u8) -> int { switch { case a < b: return -1 @@ -561,6 +1057,31 @@ compare_u8s :: proc(a, b: u8) -> int { return 0 } +/* +Compares two `u16` values for ordering. + +Returns: +- A negative number if `a` is less than `b`, `0` if they are equal, and a + positive number otherwise. + +Example: + + import "core:fmt" + import "core:sort" + + compare_u16s_example :: proc() { + fmt.println(sort.compare_u16s(1, 2)) + fmt.println(sort.compare_u16s(2, 2)) + fmt.println(sort.compare_u16s(3, 2)) + } + +Output: + + -1 + 0 + 1 + +*/ compare_u16s :: proc(a, b: u16) -> int { switch { case a < b: return -1 @@ -569,6 +1090,31 @@ compare_u16s :: proc(a, b: u16) -> int { return 0 } +/* +Compares two `u32` values for ordering. + +Returns: +- A negative number if `a` is less than `b`, `0` if they are equal, and a + positive number otherwise. + +Example: + + import "core:fmt" + import "core:sort" + + compare_u32s_example :: proc() { + fmt.println(sort.compare_u32s(1, 2)) + fmt.println(sort.compare_u32s(2, 2)) + fmt.println(sort.compare_u32s(3, 2)) + } + +Output: + + -1 + 0 + 1 + +*/ compare_u32s :: proc(a, b: u32) -> int { switch { case a < b: return -1 @@ -577,6 +1123,31 @@ compare_u32s :: proc(a, b: u32) -> int { return 0 } +/* +Compares two `u64` values for ordering. + +Returns: +- A negative number if `a` is less than `b`, `0` if they are equal, and a + positive number otherwise. + +Example: + + import "core:fmt" + import "core:sort" + + compare_u64s_example :: proc() { + fmt.println(sort.compare_u64s(1, 2)) + fmt.println(sort.compare_u64s(2, 2)) + fmt.println(sort.compare_u64s(3, 2)) + } + +Output: + + -1 + 0 + 1 + +*/ compare_u64s :: proc(a, b: u64) -> int { switch { case a < b: return -1 @@ -585,6 +1156,31 @@ compare_u64s :: proc(a, b: u64) -> int { return 0 } +/* +Compares two `i8` values for ordering. + +Returns: +- A negative number if `a` is less than `b`, `0` if they are equal, and a + positive number otherwise. + +Example: + + import "core:fmt" + import "core:sort" + + compare_i8s_example :: proc() { + fmt.println(sort.compare_i8s(-1, 2)) + fmt.println(sort.compare_i8s(2, 2)) + fmt.println(sort.compare_i8s(3, 2)) + } + +Output: + + -1 + 0 + 1 + +*/ compare_i8s :: proc(a, b: i8) -> int { switch { case a < b: return -1 @@ -593,6 +1189,31 @@ compare_i8s :: proc(a, b: i8) -> int { return 0 } +/* +Compares two `i16` values for ordering. + +Returns: +- A negative number if `a` is less than `b`, `0` if they are equal, and a + positive number otherwise. + +Example: + + import "core:fmt" + import "core:sort" + + compare_i16s_example :: proc() { + fmt.println(sort.compare_i16s(-1, 2)) + fmt.println(sort.compare_i16s(2, 2)) + fmt.println(sort.compare_i16s(3, 2)) + } + +Output: + + -1 + 0 + 1 + +*/ compare_i16s :: proc(a, b: i16) -> int { switch { case a < b: return -1 @@ -601,6 +1222,31 @@ compare_i16s :: proc(a, b: i16) -> int { return 0 } +/* +Compares two `i32` values for ordering. + +Returns: +- A negative number if `a` is less than `b`, `0` if they are equal, and a + positive number otherwise. + +Example: + + import "core:fmt" + import "core:sort" + + compare_i32s_example :: proc() { + fmt.println(sort.compare_i32s(-1, 2)) + fmt.println(sort.compare_i32s(2, 2)) + fmt.println(sort.compare_i32s(3, 2)) + } + +Output: + + -1 + 0 + 1 + +*/ compare_i32s :: proc(a, b: i32) -> int { switch { case a < b: return -1 @@ -609,6 +1255,31 @@ compare_i32s :: proc(a, b: i32) -> int { return 0 } +/* +Compares two `i64` values for ordering. + +Returns: +- A negative number if `a` is less than `b`, `0` if they are equal, and a + positive number otherwise. + +Example: + + import "core:fmt" + import "core:sort" + + compare_i64s_example :: proc() { + fmt.println(sort.compare_i64s(-1, 2)) + fmt.println(sort.compare_i64s(2, 2)) + fmt.println(sort.compare_i64s(3, 2)) + } + +Output: + + -1 + 0 + 1 + +*/ compare_i64s :: proc(a, b: i64) -> int { switch { case a < b: return -1 @@ -620,6 +1291,31 @@ compare_i64s :: proc(a, b: i64) -> int { +/* +Compares two `f32` values for ordering. + +Returns: +- A negative number if `a` is less than `b`, `0` if they are equal, and a + positive number otherwise. + +Example: + + import "core:fmt" + import "core:sort" + + compare_f32s_example :: proc() { + fmt.println(sort.compare_f32s(1.0, 2.0)) + fmt.println(sort.compare_f32s(2.0, 2.0)) + fmt.println(sort.compare_f32s(3.0, 2.0)) + } + +Output: + + -1 + 0 + 1 + +*/ compare_f32s :: proc(a, b: f32) -> int { switch delta := a - b; { case delta < 0: return -1 @@ -627,6 +1323,31 @@ compare_f32s :: proc(a, b: f32) -> int { } return 0 } +/* +Compares two `f64` values for ordering. + +Returns: +- A negative number if `a` is less than `b`, `0` if they are equal, and a + positive number otherwise. + +Example: + + import "core:fmt" + import "core:sort" + + compare_f64s_example :: proc() { + fmt.println(sort.compare_f64s(1.0, 2.0)) + fmt.println(sort.compare_f64s(2.0, 2.0)) + fmt.println(sort.compare_f64s(3.0, 2.0)) + } + +Output: + + -1 + 0 + 1 + +*/ compare_f64s :: proc(a, b: f64) -> int { switch delta := a - b; { case delta < 0: return -1 @@ -634,6 +1355,31 @@ compare_f64s :: proc(a, b: f64) -> int { } return 0 } +/* +Compares two strings lexicographically (byte-wise) for ordering. + +Returns: +- A negative number if `a` is less than `b`, `0` if they are equal, and a + positive number otherwise. + +Example: + + import "core:fmt" + import "core:sort" + + compare_strings_example :: proc() { + fmt.println(sort.compare_strings("apple", "banana")) + fmt.println(sort.compare_strings("apple", "apple")) + fmt.println(sort.compare_strings("banana", "apple")) + } + +Output: + + -1 + 0 + 1 + +*/ compare_strings :: proc(a, b: string) -> int { x := transmute(mem.Raw_String)a y := transmute(mem.Raw_String)b From 4839f20da9852045a6f7c626a0793e92b20b5bd4 Mon Sep 17 00:00:00 2001 From: Kriday Kini Date: Sun, 6 Sep 2026 10:00:30 +0530 Subject: [PATCH 003/215] Fix #soa pointer field access through using (#7513). lb_emit_deep_field_gep treated an #soa pointer as a one-shot field grab and never updated the current type, so using paths with extra selection indices ICE'd. --- src/llvm_backend_utility.cpp | 18 ++++---- tests/core/runtime/test_core_runtime.odin | 53 +++++++++++++++++++++++ 2 files changed, 61 insertions(+), 10 deletions(-) diff --git a/src/llvm_backend_utility.cpp b/src/llvm_backend_utility.cpp index 430677aa3..75e5c2711 100644 --- a/src/llvm_backend_utility.cpp +++ b/src/llvm_backend_utility.cpp @@ -1557,27 +1557,25 @@ gb_internal lbValue lb_emit_deep_field_gep(lbProcedure *p, lbValue e, Selection type = core_type(type); if (type->kind == Type_SoaPointer) { + // #soa pointer is {^container, index}; index into the selected + // column, then keep walking remaining selection indices (e.g. `using`) lbValue addr = lb_emit_struct_ep(p, e, 0); - lbValue index = lb_emit_struct_ep(p, e, 1); + lbValue soa_index = lb_emit_struct_ep(p, e, 1); addr = lb_emit_load(p, addr); - index = lb_emit_load(p, index); + soa_index = lb_emit_load(p, soa_index); - i32 first_index = sel.index[0]; - Selection sub_sel = sel; - sub_sel.index.data += 1; - sub_sel.index.count -= 1; - - lbValue arr = lb_emit_struct_ep(p, addr, first_index); + lbValue arr = lb_emit_struct_ep(p, addr, index); Type *t = base_type(type_deref(addr.type)); GB_ASSERT(is_type_soa_struct(t)); if (t->Struct.soa_kind == StructSoa_Fixed) { - e = lb_emit_array_ep(p, arr, index); + e = lb_emit_array_ep(p, arr, soa_index); } else { - e = lb_emit_ptr_offset(p, lb_emit_load(p, arr), index); + e = lb_emit_ptr_offset(p, lb_emit_load(p, arr), soa_index); } e.type = alloc_type_multi_pointer_to_pointer(e.type); + type = type_deref(e.type); } else if (is_type_quaternion(type)) { e = lb_emit_struct_ep(p, e, index); diff --git a/tests/core/runtime/test_core_runtime.odin b/tests/core/runtime/test_core_runtime.odin index 13b0f02a0..abdb340f0 100644 --- a/tests/core/runtime/test_core_runtime.odin +++ b/tests/core/runtime/test_core_runtime.odin @@ -884,6 +884,59 @@ test_soa_for_in_addr :: proc(t: ^testing.T) { testing.expect_value(t, arr.y[1], 20) } +// field access through an #soa pointer when the field is reached via `using` +@(test) +test_soa_pointer_using_field :: proc(t: ^testing.T) { + fixed: #soa[3]struct { + using foo: struct { + bar: int, + }, + } + fixed[1].bar = 2 + testing.expect_value(t, fixed.foo[1].bar, 2) + + p := &fixed[1] + testing.expect_value(t, p.bar, 2) + p.bar = 3 + testing.expect_value(t, fixed[1].bar, 3) + testing.expect_value(t, p^.bar, 3) + testing.expect_value(t, p.foo.bar, 3) + + // nested using + nested: #soa[2]struct { + using inner: struct { + using mid: struct { + x: int, + }, + y: int, + }, + z: int, + } + nested[0] = {x = 1, y = 2, z = 3} + np := &nested[0] + testing.expect_value(t, np.x, 1) + testing.expect_value(t, np.y, 2) + testing.expect_value(t, np.z, 3) + np.x = 10 + np.y = 20 + np.z = 30 + testing.expect_value(t, nested.inner[0].mid.x, 10) + testing.expect_value(t, nested.inner[0].y, 20) + testing.expect_value(t, nested.z[0], 30) + + // slice / dynamic kinds use a different column representation + dyn := make(#soa[dynamic]struct { + using foo: struct { + bar: int, + }, + }, 2) + defer delete(dyn) + dp := &dyn[1] + dp.bar = 7 + testing.expect_value(t, dyn[1].bar, 7) + testing.expect_value(t, dyn.foo[1].bar, 7) +} + @(test) test_soa_array_allocator_resize :: proc(t: ^testing.T) { From d5100c434145118b7c271981f28fa5f60af2b268 Mon Sep 17 00:00:00 2001 From: Kriday Kini Date: Tue, 8 Sep 2026 07:29:13 +0530 Subject: [PATCH 004/215] Lower #soa pointer field access through SoaVariable. p.bar on an #soa pointer now unpacks like p^.bar, so using paths do not deep-GEP the fat pointer. --- src/llvm_backend_expr.cpp | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/src/llvm_backend_expr.cpp b/src/llvm_backend_expr.cpp index dbca83803..9afdd8383 100644 --- a/src/llvm_backend_expr.cpp +++ b/src/llvm_backend_expr.cpp @@ -6659,7 +6659,15 @@ gb_internal lbAddr lb_build_addr_internal(lbProcedure *p, Ast *expr) { return lb_addr(lb_find_value_from_entity(p->module, e)); } - lbAddr addr = lb_build_addr(p, se->expr); + lbAddr addr = {}; + if (is_type_soa_pointer(tav.type)) { + // auto-deref p.bar, where p is an #soa pointer; + // same lowering as an explicit p^.bar so `using` paths + // go through lbAddr_SoaVariable instead of deep-GEP on the fat pointer + addr = lb_addr_soa_variable_from_soa_ptr(p, lb_build_expr(p, se->expr)); + } else { + addr = lb_build_addr(p, se->expr); + } // NOTE(harold): Only allow ivar pseudo field access on indirect selectors. // It is incoherent otherwise as Objective-C objects are zero-sized. From c1ec54290cdc6a97192364fbc7364d91d50dad56 Mon Sep 17 00:00:00 2001 From: bplu4t2f Date: Thu, 17 Sep 2026 12:58:38 +0200 Subject: [PATCH 005/215] Fix and add bindings for common win32 dialogs --- core/sys/windows/comdlg32.odin | 368 ++++++++++++++++++++++++-- core/sys/windows/window_messages.odin | 7 - 2 files changed, 347 insertions(+), 28 deletions(-) diff --git a/core/sys/windows/comdlg32.odin b/core/sys/windows/comdlg32.odin index a9800b47a..fabcc8c31 100644 --- a/core/sys/windows/comdlg32.odin +++ b/core/sys/windows/comdlg32.odin @@ -1,31 +1,37 @@ #+build windows package sys_windows +// Bindings for the various common Win32 dialogs. +// See: https://learn.microsoft.com/en-us/windows/win32/dlgbox/using-common-dialog-boxes +// Corresponds to Commdlg.h + foreign import "system:Comdlg32.lib" +// OpenFile/SaveFile dialogs + LPOFNHOOKPROC :: #type proc "system" (hdlg: HWND, msg: u32, wparam: WPARAM, lparam: LPARAM) -> UINT_PTR OPENFILENAMEW :: struct { - lStructSize: DWORD, - hwndOwner: HWND, - hInstance: HINSTANCE, - lpstrFilter: wstring, - lpstrCustomFilter: wstring, - nMaxCustFilter: DWORD, - nFilterIndex: DWORD, - lpstrFile: wstring, - nMaxFile: DWORD, - lpstrFileTitle: wstring, - nMaxFileTitle: DWORD, - lpstrInitialDir: wstring, - lpstrTitle: wstring, - Flags: DWORD, - nFileOffset: WORD, - nFileExtension: WORD, - lpstrDefExt: wstring, - lCustData: LPARAM, - lpfnHook: LPOFNHOOKPROC, - lpTemplateName: wstring, + lStructSize: DWORD, + hwndOwner: HWND, + hInstance: HINSTANCE, + lpstrFilter: LPCWSTR, + lpstrCustomFilter: LPWSTR, + nMaxCustFilter: DWORD, + nFilterIndex: DWORD, + lpstrFile: LPWSTR, + nMaxFile: DWORD, + lpstrFileTitle: LPWSTR, + nMaxFileTitle: DWORD, + lpstrInitialDir: LPCWSTR, + lpstrTitle: LPCWSTR, + Flags: DWORD, + nFileOffset: WORD, + nFileExtension: WORD, + lpstrDefExt: LPCWSTR, + lCustData: LPARAM, + lpfnHook: LPOFNHOOKPROC, + lpTemplateName: LPCWSTR, pvReserved: rawptr, dwReserved: DWORD, FlagsEx: DWORD, @@ -35,7 +41,8 @@ OPENFILENAMEW :: struct { foreign Comdlg32 { GetOpenFileNameW :: proc(arg1: ^OPENFILENAMEW) -> BOOL --- GetSaveFileNameW :: proc(arg1: ^OPENFILENAMEW) -> BOOL --- - CommDlgExtendedError :: proc() -> u32 --- + + GetFileTitleW :: proc(s: LPCWSTR, Buf: LPWSTR, cchSize: WORD) -> c_short --- } OPEN_TITLE :: "Select file to open" @@ -153,6 +160,325 @@ OFN_READONLY :: 0x00000001 OFN_SHAREAWARE :: 0x00004000 OFN_SHOWHELP :: 0x00000010 +// Choose Color dialog + +LPCCHOOKPROC :: #type proc "system" (hwnd: HWND, msg: UINT, wParam: WPARAM, lParam: LPARAM) -> UINT_PTR + +CHOOSECOLORW :: struct { + lStructSize: DWORD, + hwndOwner: HWND, + hInstance: HWND, + rgbResult: COLORREF, + lpCustColors: ^COLORREF, + Flags: DWORD, + lCustData: LPARAM, + lpfnHook: LPCCHOOKPROC, + lpTemplateName: LPCWSTR, +} + +@(default_calling_convention="system") +foreign Comdlg32 { + ChooseColorW :: proc(lpcc: ^CHOOSECOLORW) -> BOOL --- +} + +// Flags for CHOOSECOLORW +CC_RGBINIT :: 0x00000001 +CC_FULLOPEN :: 0x00000002 +CC_PREVENTFULLOPEN :: 0x00000004 +CC_SHOWHELP :: 0x00000008 +CC_ENABLEHOOK :: 0x00000010 +CC_ENABLETEMPLATE :: 0x00000020 +CC_ENABLETEMPLATEHANDLE :: 0x00000040 +CC_SOLIDCOLOR :: 0x00000080 +CC_ANYCOLOR :: 0x00000100 + +// Find and replace dialog + +LPFRHOOKPROC :: #type proc "system" (hwnd: HWND, msg: UINT, wparam: WPARAM, lparam: LPARAM) -> UINT_PTR + +FINDREPLACEW :: struct { + lStructSize: DWORD, // size of this struct 0x20 + hwndOwner: HWND, // handle to owner's window + hInstance: HINSTANCE, // instance handle of.EXE that contains cust. dlg. template + Flags: DWORD, // one or more of the FR_?? + lpstrFindWhat: LPWSTR, // ptr. to search string + lpstrReplaceWith: LPWSTR, // ptr. to replace string + wFindWhatLen: WORD, // size of find buffer + wReplaceWithLen: WORD, // size of replace buffer + lCustData: LPARAM, // data passed to hook fn. + lpfnHook: LPFRHOOKPROC, // ptr. to hook fn. or NULL + lpTemplateName: LPCWSTR, // custom template name +} + +// Flags for FINDREPLACEW +FR_DOWN :: 0x00000001 +FR_WHOLEWORD :: 0x00000002 +FR_MATCHCASE :: 0x00000004 +FR_FINDNEXT :: 0x00000008 +FR_REPLACE :: 0x00000010 +FR_REPLACEALL :: 0x00000020 +FR_DIALOGTERM :: 0x00000040 +FR_SHOWHELP :: 0x00000080 +FR_ENABLEHOOK :: 0x00000100 +FR_ENABLETEMPLATE :: 0x00000200 +FR_NOUPDOWN :: 0x00000400 +FR_NOMATCHCASE :: 0x00000800 +FR_NOWHOLEWORD :: 0x00001000 +FR_ENABLETEMPLATEHANDLE :: 0x00002000 +FR_HIDEUPDOWN :: 0x00004000 +FR_HIDEMATCHCASE :: 0x00008000 +FR_HIDEWHOLEWORD :: 0x00010000 +FR_RAW :: 0x00020000 +FR_SHOWWRAPAROUND :: 0x00040000 +FR_NOWRAPAROUND :: 0x00080000 +FR_WRAPAROUND :: 0x00100000 +FR_MATCHDIAC :: 0x20000000 +FR_MATCHKASHIDA :: 0x40000000 +FR_MATCHALEFHAMZA :: 0x80000000 + +@(default_calling_convention="system") +foreign Comdlg32 { + FindTextW :: proc(lpcc: ^FINDREPLACEW) -> HWND --- + ReplaceTextW :: proc(lpcc: ^FINDREPLACEW) -> HWND --- +} + +FINDMSGSTRINGW :: wstring("commdlg_FindReplace") + +// Choose Font dialog + +LPCFHOOKPROC :: #type proc "system" (hwnd: HWND, msg: UINT, wparam: WPARAM, lparam: LPARAM) -> UINT_PTR + +CHOOSEFONTW :: struct { + lStructSize: DWORD, + hwndOwner: HWND, // caller's window handle + hDC: HDC, // printer DC/IC or NULL + lpLogFont: LPLOGFONTW, // ptr. to a LOGFONT struct + iPointSize: INT, // 10 * size in points of selected font + Flags: DWORD, // enum. type flags + rgbColors: COLORREF, // returned text color + lCustData: LPARAM, // data passed to hook fn. + lpfnHook: LPCFHOOKPROC, // ptr. to hook function + lpTemplateName: LPCWSTR, // custom template name + hInstance: HINSTANCE, // instance handle of.EXE that contains cust. dlg. template + lpszStyle: LPWSTR, // return the style field here + // must be LF_FACESIZE or bigger + nFontType: WORD, // same value reported to the EnumFonts call back with the extra FONTTYPE_ bits added + ___MISSING_ALIGNMENT__: WORD, + nSizeMin: INT, // minimum pt size allowed & + nSizeMax: INT, // max pt size allowed if CF_LIMITSIZE is used +} + +@(default_calling_convention="system") +foreign Comdlg32 { + ChooseFontW :: proc(lpcc: ^CHOOSEFONTW) -> BOOL --- +} + +// Flags for CHOOSEFONTW +CF_SCREENFONTS :: 0x00000001 +CF_PRINTERFONTS :: 0x00000002 +CF_BOTH :: (CF_SCREENFONTS | CF_PRINTERFONTS) +CF_SHOWHELP :: 0x00000004 +CF_ENABLEHOOK :: 0x00000008 +CF_ENABLETEMPLATE :: 0x00000010 +CF_ENABLETEMPLATEHANDLE :: 0x00000020 +CF_INITTOLOGFONTSTRUCT :: 0x00000040 +CF_USESTYLE :: 0x00000080 +CF_EFFECTS :: 0x00000100 +CF_APPLY :: 0x00000200 +CF_ANSIONLY :: 0x00000400 +CF_SCRIPTSONLY :: CF_ANSIONLY +CF_NOVECTORFONTS :: 0x00000800 +CF_NOOEMFONTS :: CF_NOVECTORFONTS +CF_NOSIMULATIONS :: 0x00001000 +CF_LIMITSIZE :: 0x00002000 +CF_FIXEDPITCHONLY :: 0x00004000 +CF_WYSIWYG :: 0x00008000 // must also have CF_SCREENFONTS & CF_PRINTERFONTS +CF_FORCEFONTEXIST :: 0x00010000 +CF_SCALABLEONLY :: 0x00020000 +CF_TTONLY :: 0x00040000 +CF_NOFACESEL :: 0x00080000 +CF_NOSTYLESEL :: 0x00100000 +CF_NOSIZESEL :: 0x00200000 +CF_SELECTSCRIPT :: 0x00400000 +CF_NOSCRIPTSEL :: 0x00800000 +CF_NOVERTFONTS :: 0x01000000 +CF_INACTIVEFONTS :: 0x02000000 + +// Print dialog + +LPPRINTHOOKPROC :: #type proc "system" (hwnd: HWND, msg: UINT, wparam: WPARAM, lparam: LPARAM) -> UINT_PTR +LPSETUPHOOKPROC :: #type proc "system" (hwnd: HWND, msg: UINT, wparam: WPARAM, lparam: LPARAM) -> UINT_PTR + +PRINTDLGW :: struct { + lStructSize: DWORD, + hwndOwner: HWND, + hDevMode: HGLOBAL, + hDevNames: HGLOBAL, + hDC: HDC, + Flags: DWORD, + nFromPage: WORD, + nToPage: WORD, + nMinPage: WORD, + nMaxPage: WORD, + nCopies: WORD, + hInstance: HINSTANCE, + lCustData: LPARAM, + lpfnPrintHook: LPPRINTHOOKPROC, + lpfnSetupHook: LPSETUPHOOKPROC, + lpPrintTemplateName: LPCWSTR, + lpSetupTemplateName: LPCWSTR, + hPrintTemplate: HGLOBAL, + hSetupTemplate: HGLOBAL, +} + +PRINTPAGERANGE :: struct { + nFromPage: DWORD, + nToPage: DWORD, +} + +LPPRINTPAGERANGE :: #type ^PRINTPAGERANGE +HPROPSHEETPAGE :: distinct LPVOID + +PRINTDLGEXW :: struct { + lStructSize: DWORD, // size of structure in bytes + hwndOwner: HWND, // caller's window handle + hDevMode: HGLOBAL, // handle to DevMode + hDevNames: HGLOBAL, // handle to DevNames + hDC: HDC, // printer DC/IC or NULL + Flags: DWORD, // PD_ flags + Flags2: DWORD, // reserved + ExclusionFlags: DWORD, // items to exclude from driver pages + nPageRanges: DWORD, // number of page ranges + nMaxPageRanges: DWORD, // max number of page ranges + lpPageRanges: LPPRINTPAGERANGE, // array of page ranges + nMinPage: DWORD, // min page number + nMaxPage: DWORD, // max page number + nCopies: DWORD, // number of copies + hInstance: HINSTANCE, // instance handle + lpPrintTemplateName: LPCWSTR, // template name for app specific area + lpCallback: LPUNKNOWN, // app callback interface + nPropertyPages: DWORD, // number of app property pages in lphPropertyPages + lphPropertyPages: ^HPROPSHEETPAGE, // array of app property page handles + nStartPage: DWORD, // start page id + dwResultAction: DWORD, // result action if S_OK is returned +} + +// Device Names structure for PrintDlg and PrintDlgEx. +DEVNAMES :: struct { + wDriverOffset: WORD, + wDeviceOffset: WORD, + wOutputOffset: WORD, + wDefault: WORD, +} + +@(default_calling_convention="system") +foreign Comdlg32 { + PrintDlgW :: proc(lpcc: ^PRINTDLGW) -> BOOL --- + PrintDlgExW :: proc(lpcc: ^PRINTDLGEXW) -> HRESULT --- +} + +// Flags for PRINTDLGW and PRINTDLGEXW +PD_ALLPAGES :: 0x00000000 +PD_SELECTION :: 0x00000001 +PD_PAGENUMS :: 0x00000002 +PD_NOSELECTION :: 0x00000004 +PD_NOPAGENUMS :: 0x00000008 +PD_COLLATE :: 0x00000010 +PD_PRINTTOFILE :: 0x00000020 +PD_PRINTSETUP :: 0x00000040 +PD_NOWARNING :: 0x00000080 +PD_RETURNDC :: 0x00000100 +PD_RETURNIC :: 0x00000200 +PD_RETURNDEFAULT :: 0x00000400 +PD_SHOWHELP :: 0x00000800 +PD_ENABLEPRINTHOOK :: 0x00001000 +PD_ENABLESETUPHOOK :: 0x00002000 +PD_ENABLEPRINTTEMPLATE :: 0x00004000 +PD_ENABLESETUPTEMPLATE :: 0x00008000 +PD_ENABLEPRINTTEMPLATEHANDLE :: 0x00010000 +PD_ENABLESETUPTEMPLATEHANDLE :: 0x00020000 +PD_USEDEVMODECOPIES :: 0x00040000 +PD_USEDEVMODECOPIESANDCOLLATE :: 0x00040000 +PD_DISABLEPRINTTOFILE :: 0x00080000 +PD_HIDEPRINTTOFILE :: 0x00100000 +PD_NONETWORKBUTTON :: 0x00200000 +PD_CURRENTPAGE :: 0x00400000 +PD_NOCURRENTPAGE :: 0x00800000 +PD_EXCLUSIONFLAGS :: 0x01000000 +PD_USELARGETEMPLATE :: 0x10000000 + +// Define the start page for the print dialog when using PrintDlgEx. +START_PAGE_GENERAL :: 0xffffffff + +// Result action ids for PrintDlgEx. +PD_RESULT_CANCEL :: 0 +PD_RESULT_PRINT :: 1 +PD_RESULT_APPLY :: 2 + +// Page Setup dialog + +// Window Message IDs for the LPPAGEPAINTHOOK +WM_PSD_PAGESETUPDLG :: (WM_USER ) +WM_PSD_FULLPAGERECT :: (WM_USER+1) +WM_PSD_MINMARGINRECT :: (WM_USER+2) +WM_PSD_MARGINRECT :: (WM_USER+3) +WM_PSD_GREEKTEXTRECT :: (WM_USER+4) +WM_PSD_ENVSTAMPRECT :: (WM_USER+5) +WM_PSD_YAFULLPAGERECT :: (WM_USER+6) + +LPPAGEPAINTHOOK :: #type proc "system" (hwnd: HWND, msg: UINT, wparam: WPARAM, lparam: LPARAM) -> UINT_PTR +LPPAGESETUPHOOK :: #type proc "system" (hwnd: HWND, msg: UINT, wparam: WPARAM, lparam: LPARAM) -> UINT_PTR + +PAGESETUPDLGW :: struct { + lStructSize: DWORD, + hwndOwner: HWND, + hDevMode: HGLOBAL, + hDevNames: HGLOBAL, + Flags: DWORD, + ptPaperSize: POINT, + rtMinMargin: RECT, + rtMargin: RECT, + hInstance: HINSTANCE, + lCustData: LPARAM, + lpfnPageSetupHook: LPPAGESETUPHOOK, + lpfnPagePaintHook: LPPAGEPAINTHOOK, + lpPageSetupTemplateName: LPCWSTR, + hPageSetupTemplate: HGLOBAL, +} + +@(default_calling_convention="system") +foreign Comdlg32 { + PageSetupDlgW :: proc(lpcc: ^PAGESETUPDLGW) -> BOOL --- +} + +PSD_DEFAULTMINMARGINS :: 0x00000000 // default (printer's) +PSD_INWININIINTLMEASURE :: 0x00000000 // 1st of 4 possible + +PSD_MINMARGINS :: 0x00000001 // use caller's +PSD_MARGINS :: 0x00000002 // use caller's +PSD_INTHOUSANDTHSOFINCHES :: 0x00000004 // 2nd of 4 possible +PSD_INHUNDREDTHSOFMILLIMETERS :: 0x00000008 // 3rd of 4 possible +PSD_DISABLEMARGINS :: 0x00000010 +PSD_DISABLEPRINTER :: 0x00000020 +PSD_NOWARNING :: 0x00000080 // must be same as PD_* +PSD_DISABLEORIENTATION :: 0x00000100 +PSD_RETURNDEFAULT :: 0x00000400 // must be same as PD_* +PSD_DISABLEPAPER :: 0x00000200 +PSD_SHOWHELP :: 0x00000800 // must be same as PD_* +PSD_ENABLEPAGESETUPHOOK :: 0x00002000 // must be same as PD_* +PSD_ENABLEPAGESETUPTEMPLATE :: 0x00008000 // must be same as PD_* +PSD_ENABLEPAGESETUPTEMPLATEHANDLE :: 0x00020000 // must be same as PD_* +PSD_ENABLEPAGEPAINTHOOK :: 0x00040000 +PSD_DISABLEPAGEPAINTING :: 0x00080000 +PSD_NONETWORKBUTTON :: 0x00200000 // must be same as PD_* + +// Common error codes for all comdlg32 dialogs (CommDlgExtendedError) + +@(default_calling_convention="system") +foreign Comdlg32 { + CommDlgExtendedError :: proc() -> u32 --- +} + CDERR_DIALOGFAILURE :: 0x0000FFFF CDERR_GENERALCODES :: 0x00000000 CDERR_STRUCTSIZE :: 0x00000001 diff --git a/core/sys/windows/window_messages.odin b/core/sys/windows/window_messages.odin index 0901ee696..90ecbda4a 100644 --- a/core/sys/windows/window_messages.odin +++ b/core/sys/windows/window_messages.odin @@ -376,7 +376,6 @@ DDM_SETFMT :: 0x0400 DM_GETDEFID :: 0x0400 NIN_SELECT :: 0x0400 TBM_GETPOS :: 0x0400 -WM_PSD_PAGESETUPDLG :: 0x0400 WM_USER :: 0x0400 CBEM_INSERTITEMA :: 0x0401 DDM_DRAW :: 0x0401 @@ -389,7 +388,6 @@ TB_ENABLEBUTTON :: 0x0401 TBM_GETRANGEMIN :: 0x0401 TTM_ACTIVATE :: 0x0401 WM_CHOOSEFONT_GETLOGFONT :: 0x0401 -WM_PSD_FULLPAGERECT :: 0x0401 CBEM_SETIMAGELIST :: 0x0402 DDM_CLOSE :: 0x0402 DM_REPOSITION :: 0x0402 @@ -399,7 +397,6 @@ RB_DELETEBAND :: 0x0402 SB_GETTEXTA :: 0x0402 TB_CHECKBUTTON :: 0x0402 TBM_GETRANGEMAX :: 0x0402 -WM_PSD_MINMARGINRECT :: 0x0402 CBEM_GETIMAGELIST :: 0x0403 DDM_BEGIN :: 0x0403 HKM_SETRULES :: 0x0403 @@ -409,7 +406,6 @@ SB_GETTEXTLENGTHA :: 0x0403 TBM_GETTIC :: 0x0403 TB_PRESSBUTTON :: 0x0403 TTM_SETDELAYTIME :: 0x0403 -WM_PSD_MARGINRECT :: 0x0403 CBEM_GETITEMA :: 0x0404 DDM_END :: 0x0404 PBM_SETSTEP :: 0x0404 @@ -418,13 +414,11 @@ SB_SETPARTS :: 0x0404 TB_HIDEBUTTON :: 0x0404 TBM_SETTIC :: 0x0404 TTM_ADDTOOLA :: 0x0404 -WM_PSD_GREEKTEXTRECT :: 0x0404 CBEM_SETITEMA :: 0x0405 PBM_STEPIT :: 0x0405 TB_INDETERMINATE :: 0x0405 TBM_SETPOS :: 0x0405 TTM_DELTOOLA :: 0x0405 -WM_PSD_ENVSTAMPRECT :: 0x0405 CBEM_GETCOMBOCONTROL :: 0x0406 PBM_SETRANGE32 :: 0x0406 RB_SETBANDINFOA :: 0x0406 @@ -432,7 +426,6 @@ SB_GETPARTS :: 0x0406 TB_MARKBUTTON :: 0x0406 TBM_SETRANGE :: 0x0406 TTM_NEWTOOLRECTA :: 0x0406 -WM_PSD_YAFULLPAGERECT :: 0x0406 CBEM_GETEDITCONTROL :: 0x0407 PBM_GETRANGE :: 0x0407 RB_SETPARENT :: 0x0407 From be72d9f6cc79ea8311beb8fd454baed4d9655276 Mon Sep 17 00:00:00 2001 From: bplu4t2f Date: Thu, 17 Sep 2026 13:01:34 +0200 Subject: [PATCH 006/215] Add API doc to wstring related utils, and make N default value consistent within procedure group utf8_to_wstring --- core/sys/windows/util.odin | 37 +++++++++++++++++++++++++++++++++++-- 1 file changed, 35 insertions(+), 2 deletions(-) diff --git a/core/sys/windows/util.odin b/core/sys/windows/util.odin index fc2b61033..7990e5a59 100644 --- a/core/sys/windows/util.odin +++ b/core/sys/windows/util.odin @@ -236,8 +236,25 @@ utf8_to_wstring_buf :: proc(buf: []u16, s: string) -> wstring { // An empty string is valid, and results in a value distinct from `nil`. utf8_to_wstring :: proc{utf8_to_wstring_alloc, utf8_to_wstring_buf} +/* +Converts a UTF-16 `wstring` into a regular UTF-8 `string` and allocates the result. +The procedure can either assume a null-terminated input string, or convert +a fixed number of characters. + +*Allocates Using Provided Allocator* + +Inputs: +- s: The string to be converted +- N: The number of characters in `s` that should be converted. A value of `-1` indicates that the + procedure should keep going until it finds a terminating null character in `s`. +- allocator: (default: context.temp_allocator) + +Returns: +- res: A cloned and converted string +- err: An optional allocator error if one occured, `nil` otherwise +*/ @(require_results) -wstring_to_utf8_alloc :: proc(s: wstring, N: int, allocator := context.temp_allocator) -> (res: string, err: runtime.Allocator_Error) { +wstring_to_utf8_alloc :: proc(s: wstring, N := -1, allocator := context.temp_allocator) -> (res: string, err: runtime.Allocator_Error) { context.allocator = allocator if N == 0 { @@ -271,6 +288,22 @@ wstring_to_utf8_alloc :: proc(s: wstring, N: int, allocator := context.temp_allo return string(text[:n]), nil } +/* +Converts a UTF-16 `wstring` into a regular UTF-8 `string`, using `buf` as its backing buffer. +The procedure can either assume a null-terminated input string, or convert +a fixed number of characters. + +*Uses `buf` for backing* + +Inputs: +- buf: Backing buffer for result string +- s: The string to be converted +- N: The number of characters in `s` that should be converted. A value of `-1` indicates that the + procedure should keep going until it finds a terminating null character in `s`. + +Returns: +- res: A cloned and converted string +*/ @(require_results) wstring_to_utf8_buf :: proc(buf: []u8, s: wstring, N := -1) -> (res: string) { n := WideCharToMultiByte(CP_UTF8, WC_ERR_INVALID_CHARS, s, c_int(N), nil, 0, nil, nil) @@ -307,7 +340,7 @@ to it will be converted. Inputs: - s: The string to be converted -- allocator: (default: context.allocator) +- allocator: (default: context.temp_allocator) Returns: - res: A cloned and converted string From 04577f42c11d1518be19ad27a6e2ab8d8fce8ae9 Mon Sep 17 00:00:00 2001 From: bplu4t2f Date: Thu, 17 Sep 2026 16:53:13 +0200 Subject: [PATCH 007/215] Removed outdated comment/example code (replacement in examples repo) --- core/sys/windows/comdlg32.odin | 80 ---------------------------------- 1 file changed, 80 deletions(-) diff --git a/core/sys/windows/comdlg32.odin b/core/sys/windows/comdlg32.odin index fabcc8c31..853238208 100644 --- a/core/sys/windows/comdlg32.odin +++ b/core/sys/windows/comdlg32.odin @@ -53,86 +53,6 @@ SAVE_TITLE :: "Select file to save" SAVE_FLAGS :: u32(OFN_OVERWRITEPROMPT | OFN_EXPLORER) SAVE_EXT :: "txt" -/* -import "core:strings" - -Open_Save_Mode :: enum { - Open = 0, - Save = 1, -} - -_open_file_dialog :: proc(title: string, dir: string, - filters: []string, default_filter: u32, - flags: u32, default_ext: string, - mode: Open_Save_Mode, allocator := context.temp_allocator) -> (path: string, ok: bool = true) { - context.allocator = allocator - file_buf := make([]u16, MAX_PATH_WIDE) - defer if !ok { - delete(file_buf) - } - - // Filters need to be passed as a pair of strings (title, filter) - filter_len := u32(len(filters)) - if filter_len % 2 != 0 { - return "", false - } - - filter: string - filter = strings.join(filters, "\u0000", context.temp_allocator) - filter = strings.concatenate({filter, "\u0000"}, context.temp_allocator) - - ofn := OPENFILENAMEW{ - lStructSize = size_of(OPENFILENAMEW), - lpstrFile = wstring(&file_buf[0]), - nMaxFile = MAX_PATH_WIDE, - lpstrTitle = utf8_to_wstring(title, context.temp_allocator), - lpstrFilter = utf8_to_wstring(filter, context.temp_allocator), - lpstrInitialDir = utf8_to_wstring(dir, context.temp_allocator), - nFilterIndex = u32(clamp(default_filter, 1, filter_len / 2)), - lpstrDefExt = utf8_to_wstring(default_ext, context.temp_allocator), - Flags = u32(flags), - } - - switch mode { - case .Open: - ok = bool(GetOpenFileNameW(&ofn)) - case .Save: - ok = bool(GetSaveFileNameW(&ofn)) - case: - ok = false - } - - if !ok { - return - } - - - file_name, _ := utf16_to_utf8(file_buf[:], allocator) - path = strings.trim_right_null(file_name) - return -} - -select_file_to_open :: proc(title := OPEN_TITLE, dir := ".", - filters := []string{"All Files", "*.*"}, default_filter := u32(1), - flags := OPEN_FLAGS, allocator := context.temp_allocator) -> (path: string, ok: bool) { - - path, ok = _open_file_dialog(title, dir, filters, default_filter, flags, "", Open_Save_Mode.Open, allocator) - return -} - -select_file_to_save :: proc(title := SAVE_TITLE, dir := ".", - filters := []string{"All Files", "*.*"}, default_filter := u32(1), - flags := SAVE_FLAGS, default_ext := SAVE_EXT, - allocator := context.temp_allocator) -> (path: string, ok: bool) { - - path, ok = _open_file_dialog(title, dir, filters, default_filter, flags, default_ext, Open_Save_Mode.Save, allocator) - return -} -*/ - -// TODO: Implement convenience function for select_file_to_open with ALLOW_MULTI_SELECT that takes -// it output of the form "path\u0000\file1u\0000file2" and turns it into []string with the path + file pre-concatenated for you. - OFN_ALLOWMULTISELECT :: 0x00000200 // NOTE(Jeroen): Without OFN_EXPLORER it uses the Win3 dialog. OFN_CREATEPROMPT :: 0x00002000 OFN_DONTADDTORECENT :: 0x02000000 From 02c14865ad3b38ab580b512bfc9a52f532f0a14b Mon Sep 17 00:00:00 2001 From: Abderrahim Indjaren Date: Fri, 18 Sep 2026 01:58:49 +0100 Subject: [PATCH 008/215] fix: out of bounds init tuple element in CompoundLit reported as error --- src/check_expr.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/check_expr.cpp b/src/check_expr.cpp index aa62a6114..d0acc0744 100644 --- a/src/check_expr.cpp +++ b/src/check_expr.cpp @@ -11203,6 +11203,9 @@ gb_internal ExprKind check_compound_literal(CheckerContext *c, Operand *o, Ast * } max += tt->variables.count-1; + if (0 <= max_type_count && max_type_count <= max) { + error(e, "Expansion reaches index %lld which goes out of bounds (>= %lld) for %.*s", cast(long long)max, cast(long long)max_type_count, LIT(context_name)); + } } else { check_assignment(c, &operand, elem_type, context_name); From 09c81c8a7fd885c44fa9fff18cb3af2c04678843 Mon Sep 17 00:00:00 2001 From: Abderrahim Indjaren Date: Fri, 18 Sep 2026 02:50:18 +0100 Subject: [PATCH 009/215] fix: prevent struct crashing from tuple expansion overflow --- src/check_expr.cpp | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/src/check_expr.cpp b/src/check_expr.cpp index d0acc0744..d35231b91 100644 --- a/src/check_expr.cpp +++ b/src/check_expr.cpp @@ -10959,6 +10959,8 @@ gb_internal ExprKind check_compound_literal(CheckerContext *c, Operand *o, Ast * Operand src_o = o; src_o.type = src_field->type; + if (index + jj >= field_count) + continue ; field = t->Struct.fields[index + (jj++)]; check_assignment(c, &src_o, field->type, str_lit("structure literal")); @@ -10981,15 +10983,18 @@ gb_internal ExprKind check_compound_literal(CheckerContext *c, Operand *o, Ast * handled_elem_count += 1; } - + if (handled_elem_count > field_count) { + error(o.expr, "Expansion overflows structure literal, expected %td, got %td", field_count, handled_elem_count); + break ; + } } if (cl->elems.count < field_count) { if (min_field_count < field_count) { if (cl->elems.count < min_field_count) { - error(cl->close, "Too few values in structure literal, expected at least %td, got %td", min_field_count, cl->elems.count); + error(cl->close, "Too few values in structure literal, expected at least %td, got %td", min_field_count, handled_elem_count); } } else if (handled_elem_count != field_count) { - error(cl->close, "Too few values in structure literal, expected %td, got %td", field_count, cl->elems.count); + error(cl->close, "Too few values in structure literal, expected %td, got %td", field_count, handled_elem_count); } } } From d32bbfd7be7f40c6335dc4833b72839c96ae8b8a Mon Sep 17 00:00:00 2001 From: Abderrahim Indjaren Date: Fri, 18 Sep 2026 03:04:18 +0100 Subject: [PATCH 010/215] fix: oversight during underflow condition fix: incorrect message format argument for index overflow --- src/check_expr.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/check_expr.cpp b/src/check_expr.cpp index d35231b91..1ee44831b 100644 --- a/src/check_expr.cpp +++ b/src/check_expr.cpp @@ -10940,7 +10940,7 @@ gb_internal ExprKind check_compound_literal(CheckerContext *c, Operand *o, Ast * continue; } if (index >= field_count) { - error(elem, "Too many values in structure literal, expected %td, got %td", field_count, cl->elems.count); + error(elem, "Too many values in structure literal, expected %td, got %td", field_count, index + 1); break; } @@ -10988,9 +10988,9 @@ gb_internal ExprKind check_compound_literal(CheckerContext *c, Operand *o, Ast * break ; } } - if (cl->elems.count < field_count) { + if (handled_elem_count < field_count) { if (min_field_count < field_count) { - if (cl->elems.count < min_field_count) { + if (handled_elem_count < min_field_count) { error(cl->close, "Too few values in structure literal, expected at least %td, got %td", min_field_count, handled_elem_count); } } else if (handled_elem_count != field_count) { From 4aa73f6c10f62ed6c53cdeb90d0984addf930ed8 Mon Sep 17 00:00:00 2001 From: Artur Leite Date: Fri, 18 Sep 2026 10:52:14 +0200 Subject: [PATCH 011/215] core/os: allocate the long-path buffer in the caller's allocator `_fix_long_path_internal` built the `\\?\` prefixed path in an arena it guarded itself, so `TEMP_ALLOCATOR_GUARD`'s deferred end rewound that arena as the proc returned and `_fix_long_path`/`_fix_long_path_slice` converted memory that had already been reclaimed. Paths of 248 bytes or more reached the conversion as released storage whenever long path support was unavailable. Take the scratch allocator as a parameter and let the two callers guard it, as they already receive the destination allocator and can exclude it from the collision list. --- core/os/path_windows.odin | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/core/os/path_windows.odin b/core/os/path_windows.odin index 753f1665f..671b50865 100644 --- a/core/os/path_windows.odin +++ b/core/os/path_windows.odin @@ -213,16 +213,18 @@ has_long_path_support :: proc "contextless" () -> bool { @(require_results) _fix_long_path_slice :: proc(path: string, allocator: runtime.Allocator) -> ([]u16, runtime.Allocator_Error) { - return win32_utf8_to_utf16(_fix_long_path_internal(path), allocator) + temp_allocator := TEMP_ALLOCATOR_GUARD({allocator}) + return win32_utf8_to_utf16(_fix_long_path_internal(path, temp_allocator), allocator) } @(require_results) _fix_long_path :: proc(path: string, allocator: runtime.Allocator) -> (win32.wstring, runtime.Allocator_Error) { - return win32_utf8_to_wstring(_fix_long_path_internal(path), allocator) + temp_allocator := TEMP_ALLOCATOR_GUARD({allocator}) + return win32_utf8_to_wstring(_fix_long_path_internal(path, temp_allocator), allocator) } @(require_results) -_fix_long_path_internal :: proc(path: string) -> string { +_fix_long_path_internal :: proc(path: string, allocator: runtime.Allocator) -> string { if has_long_path_support() { return path } @@ -244,10 +246,8 @@ _fix_long_path_internal :: proc(path: string) -> string { return path } - temp_allocator := TEMP_ALLOCATOR_GUARD({}) - PREFIX :: `\\?` - path_buf := make([]byte, len(PREFIX)+len(path)+1, temp_allocator) + path_buf := make([]byte, len(PREFIX)+len(path)+1, allocator) copy(path_buf, PREFIX) n := len(path) r, w := 0, len(PREFIX) From a7b67e44732592d669ea45052ec8b6e85b430fe8 Mon Sep 17 00:00:00 2001 From: bplu4t2f Date: Sat, 19 Sep 2026 12:16:55 +0200 Subject: [PATCH 012/215] -strict-style requires comma before newline after proc parameters which have a default value (#7583) --- core/crypto/_mldsa/dsa_internal.odin | 2 +- core/mem/alloc.odin | 10 +++++----- core/mem/allocators.odin | 18 +++++++++--------- core/nbio/ops.odin | 16 ++++++++-------- src/parser.cpp | 10 ++++++++++ 5 files changed, 33 insertions(+), 23 deletions(-) diff --git a/core/crypto/_mldsa/dsa_internal.odin b/core/crypto/_mldsa/dsa_internal.odin index bfb6b7508..a4c88a263 100644 --- a/core/crypto/_mldsa/dsa_internal.odin +++ b/core/crypto/_mldsa/dsa_internal.odin @@ -162,7 +162,7 @@ dsa_sign_internal :: proc( ctx: []byte, rnd: []byte, priv_key: ^Private_Key, - external_mu: []byte = nil + external_mu: []byte = nil, ) -> bool { params := priv_key.params switch params { diff --git a/core/mem/alloc.odin b/core/mem/alloc.odin index 282c8d0b4..86ea82bf3 100644 --- a/core/mem/alloc.odin +++ b/core/mem/alloc.odin @@ -1024,7 +1024,7 @@ make_multi_pointer :: proc( $T: typeid/[^]$E, #any_int len: int, allocator := context.allocator, - loc := #caller_location + loc := #caller_location, ) -> (mp: T, err: Allocator_Error) { return runtime.make_multi_pointer(T, len, allocator, loc) } @@ -1040,7 +1040,7 @@ make_soa_slice :: proc( $T: typeid/#soa[]$E, #any_int len: int, allocator := context.allocator, - loc := #caller_location + loc := #caller_location, ) -> (array: T, err: Allocator_Error) { return runtime.make_soa_slice(T, len, allocator, loc) } @@ -1055,7 +1055,7 @@ its backing allocator, and initial length and capacity of `0`. make_soa_dynamic_array :: proc( $T: typeid/#soa[dynamic]$E, allocator := context.allocator, - loc := #caller_location + loc := #caller_location, ) -> (array: T, err: Allocator_Error) { return runtime.make_soa_dynamic_array(T, allocator, loc) } @@ -1071,7 +1071,7 @@ make_soa_dynamic_array_len :: proc( $T: typeid/#soa[dynamic]$E, #any_int len: int, allocator := context.allocator, - loc := #caller_location + loc := #caller_location, ) -> (array: T, err: Allocator_Error) { return runtime.make_soa_dynamic_array_len(T, len, allocator, loc) } @@ -1089,7 +1089,7 @@ make_soa_dynamic_array_len_cap :: proc( #any_int len: int, #any_int cap: int, allocator := context.allocator, - loc := #caller_location + loc := #caller_location, ) -> (array: T, err: Allocator_Error) { return runtime.make_soa_dynamic_array_len_cap(T, len, cap, allocator, loc) } diff --git a/core/mem/allocators.odin b/core/mem/allocators.odin index db5806876..57a360464 100644 --- a/core/mem/allocators.odin +++ b/core/mem/allocators.odin @@ -262,7 +262,7 @@ arena_alloc_bytes_non_zeroed :: proc( a: ^Arena, size: int, alignment := DEFAULT_ALIGNMENT, - loc := #caller_location + loc := #caller_location, ) -> ([]byte, Allocator_Error) { if a.data == nil { panic("Allocation on uninitialized Arena allocator.", loc) @@ -654,7 +654,7 @@ scratch_resize :: proc( old_size: int, size: int, alignment := DEFAULT_ALIGNMENT, - loc := #caller_location + loc := #caller_location, ) -> (rawptr, Allocator_Error) { bytes, err := scratch_resize_bytes(s, byte_slice(old_memory, old_size), size, alignment, loc) return raw_data(bytes), err @@ -682,7 +682,7 @@ scratch_resize_bytes :: proc( old_data: []byte, size: int, alignment := DEFAULT_ALIGNMENT, - loc := #caller_location + loc := #caller_location, ) -> ([]byte, Allocator_Error) { bytes, err := scratch_resize_bytes_non_zeroed(s, old_data, size, alignment, loc) if bytes != nil && size > len(old_data) { @@ -714,7 +714,7 @@ scratch_resize_non_zeroed :: proc( old_size: int, size: int, alignment := DEFAULT_ALIGNMENT, - loc := #caller_location + loc := #caller_location, ) -> (rawptr, Allocator_Error) { bytes, err := scratch_resize_bytes_non_zeroed(s, byte_slice(old_memory, old_size), size, alignment, loc) return raw_data(bytes), err @@ -742,7 +742,7 @@ scratch_resize_bytes_non_zeroed :: proc( old_data: []byte, size: int, alignment := DEFAULT_ALIGNMENT, - loc := #caller_location + loc := #caller_location, ) -> ([]byte, Allocator_Error) { old_memory := raw_data(old_data) old_size := len(old_data) @@ -883,7 +883,7 @@ stack_alloc :: proc( s: ^Stack, size: int, alignment := DEFAULT_ALIGNMENT, - loc := #caller_location + loc := #caller_location, ) -> (rawptr, Allocator_Error) { bytes, err := stack_alloc_bytes(s, size, alignment, loc) return raw_data(bytes), err @@ -901,7 +901,7 @@ stack_alloc_bytes :: proc( s: ^Stack, size: int, alignment := DEFAULT_ALIGNMENT, - loc := #caller_location + loc := #caller_location, ) -> ([]byte, Allocator_Error) { bytes, err := stack_alloc_bytes_non_zeroed(s, size, alignment, loc) if bytes != nil { @@ -922,7 +922,7 @@ stack_alloc_non_zeroed :: proc( s: ^Stack, size: int, alignment := DEFAULT_ALIGNMENT, - loc := #caller_location + loc := #caller_location, ) -> (rawptr, Allocator_Error) { bytes, err := stack_alloc_bytes_non_zeroed(s, size, alignment, loc) return raw_data(bytes), err @@ -940,7 +940,7 @@ stack_alloc_bytes_non_zeroed :: proc( s: ^Stack, size: int, alignment := DEFAULT_ALIGNMENT, - loc := #caller_location + loc := #caller_location, ) -> ([]byte, Allocator_Error) { if s.data == nil { panic("Allocation on an uninitialized Stack allocator.", loc) diff --git a/core/nbio/ops.odin b/core/nbio/ops.odin index 6af266e72..7d1b92e46 100644 --- a/core/nbio/ops.odin +++ b/core/nbio/ops.odin @@ -100,7 +100,7 @@ accept_poly :: #force_inline proc( p: $T, cb: $C/proc(op: ^Operation, p: T), timeout: time.Duration = NO_TIMEOUT, - l: ^Event_Loop = nil + l: ^Event_Loop = nil, ) -> ^Operation where size_of(T) <= size_of(rawptr) * MAX_USER_ARGUMENTS { op := prep_accept(socket, _poly_cb(C, T), timeout, l) @@ -582,7 +582,7 @@ recv :: #force_inline proc( cb: Callback, all := false, timeout: time.Duration = NO_TIMEOUT, - l: ^Event_Loop = nil + l: ^Event_Loop = nil, ) -> ^Operation { op := prep_recv(socket, bufs, cb, all, timeout, l) exec(op) @@ -1053,7 +1053,7 @@ read_poly :: #force_inline proc( cb: $C/proc(op: ^Operation, p: T), all := false, timeout: time.Duration = NO_TIMEOUT, - l: ^Event_Loop = nil + l: ^Event_Loop = nil, ) -> ^Operation where size_of(T) <= size_of(rawptr) * MAX_USER_ARGUMENTS { op := prep_read(handle, offset, buf, _poly_cb(C, T), all=all, timeout=timeout, l=l) @@ -1092,7 +1092,7 @@ read_poly2 :: #force_inline proc( cb: $C/proc(op: ^Operation, p: T, p2: T2), all := false, timeout: time.Duration = NO_TIMEOUT, - l: ^Event_Loop = nil + l: ^Event_Loop = nil, ) -> ^Operation where size_of(T) + size_of(T2) <= size_of(rawptr) * MAX_USER_ARGUMENTS { op := prep_read(handle, offset, buf, _poly_cb2(C, T, T2), all, timeout, l) @@ -1132,7 +1132,7 @@ read_poly3 :: #force_inline proc( cb: $C/proc(op: ^Operation, p: T, p2: T2, p3: T3), all := false, timeout: time.Duration = NO_TIMEOUT, - l: ^Event_Loop = nil + l: ^Event_Loop = nil, ) -> ^Operation where size_of(T) + size_of(T2) + size_of(T3) <= size_of(rawptr) * MAX_USER_ARGUMENTS { op := prep_read(handle, offset, buf, _poly_cb3(C, T, T2, T3), all, timeout, l) @@ -1270,7 +1270,7 @@ write_poly :: #force_inline proc( cb: $C/proc(op: ^Operation, p: T), all := true, timeout: time.Duration = NO_TIMEOUT, - l: ^Event_Loop = nil + l: ^Event_Loop = nil, ) -> ^Operation where size_of(T) <= size_of(rawptr) * MAX_USER_ARGUMENTS { op := prep_write(handle, offset, buf, _poly_cb(C, T), all=all, timeout=timeout, l=l) @@ -1309,7 +1309,7 @@ write_poly2 :: #force_inline proc( cb: $C/proc(op: ^Operation, p: T, p2: T2), all := true, timeout: time.Duration = NO_TIMEOUT, - l: ^Event_Loop = nil + l: ^Event_Loop = nil, ) -> ^Operation where size_of(T) + size_of(T2) <= size_of(rawptr) * MAX_USER_ARGUMENTS { op := prep_write(handle, offset, buf, _poly_cb2(C, T, T2), all, timeout, l) @@ -1349,7 +1349,7 @@ write_poly3 :: #force_inline proc( cb: $C/proc(op: ^Operation, p: T, p2: T2, p3: T3), all := true, timeout: time.Duration = NO_TIMEOUT, - l: ^Event_Loop = nil + l: ^Event_Loop = nil, ) -> ^Operation where size_of(T) + size_of(T2) + size_of(T3) <= size_of(rawptr) * MAX_USER_ARGUMENTS { op := prep_write(handle, offset, buf, _poly_cb3(C, T, T2, T3), all, timeout, l) diff --git a/src/parser.cpp b/src/parser.cpp index e3688d91d..2ec24fb96 100644 --- a/src/parser.cpp +++ b/src/parser.cpp @@ -5188,7 +5188,12 @@ gb_internal Ast *parse_field_list(AstFile *f, isize *name_count_, u32 allowed_fl } if (allow_token(f, Token_Eq)) { + // NOTE(bplu4t2f): We're usually at expr_level == 1 here, but the default value expr needs to be self-contained to ensure correct newline behavior after it. + isize previous_expr_level = f->expr_level; + f->expr_level = 0; default_value = parse_expr(f, false); + GB_ASSERT(f->expr_level == 0); + f->expr_level = previous_expr_level; if (!allow_default_parameters) { syntax_error(f->curr_token, "Default parameters are only allowed for procedures"); default_value = nullptr; @@ -5263,7 +5268,12 @@ gb_internal Ast *parse_field_list(AstFile *f, isize *name_count_, u32 allowed_fl } if (allow_token(f, Token_Eq)) { + // NOTE(bplu4t2f): We're usually at expr_level == 1 here, but the default value expr needs to be self-contained to ensure correct newline behavior after it. + isize previous_expr_level = f->expr_level; + f->expr_level = 0; default_value = parse_expr(f, false); + GB_ASSERT(f->expr_level == 0); + f->expr_level = previous_expr_level; if (!allow_default_parameters) { syntax_error(f->curr_token, "Default parameters are only allowed for procedures"); default_value = nullptr; From 7f546546f7c2a878be4dc6e95ce73922863c0220 Mon Sep 17 00:00:00 2001 From: bplu4t2f Date: Sat, 19 Sep 2026 12:43:24 +0200 Subject: [PATCH 013/215] Fix missing comma before newline --- tests/core/io/test_core_io.odin | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/core/io/test_core_io.odin b/tests/core/io/test_core_io.odin index 728771b1b..cb40f4728 100644 --- a/tests/core/io/test_core_io.odin +++ b/tests/core/io/test_core_io.odin @@ -19,7 +19,7 @@ _test_stream :: proc( resets_on_empty: bool = false, do_destroy: bool = true, - loc := #caller_location + loc := #caller_location, ) -> (passed: Passed_Tests, ok: bool) { // We only test what the stream reports to support. From bac6130710a237c576ba7d12e6b9d5d383a46773 Mon Sep 17 00:00:00 2001 From: corley <28909106+corleypc@users.noreply.github.com> Date: Sun, 20 Sep 2026 15:55:26 +0300 Subject: [PATCH 014/215] lifetime markers for named locals --- src/build_settings.cpp | 1 + src/llvm_backend.hpp | 15 ++ src/llvm_backend_general.cpp | 150 ++++++++++++++++++++ src/llvm_backend_proc.cpp | 4 + src/llvm_backend_stmt.cpp | 24 +++- src/main.cpp | 13 ++ tests/issues/run.bat | 2 + tests/issues/run.sh | 3 + tests/issues/test_lifetime_markers.odin | 178 ++++++++++++++++++++++++ 9 files changed, 384 insertions(+), 6 deletions(-) create mode 100644 tests/issues/test_lifetime_markers.odin diff --git a/src/build_settings.cpp b/src/build_settings.cpp index 9b60c8765..745943744 100644 --- a/src/build_settings.cpp +++ b/src/build_settings.cpp @@ -546,6 +546,7 @@ struct BuildContext { bool ignore_unknown_attributes; bool no_bounds_check; bool no_type_assert; + bool lifetime_markers; // Opt-in to llvm.lifetime.* markers on scoped locals. bool dynamic_literals; // Opt-in to `#+feature dynamic-literals` project-wide. bool no_output_files; bool no_crt; diff --git a/src/llvm_backend.hpp b/src/llvm_backend.hpp index 6e933d152..f0ac0e6c3 100644 --- a/src/llvm_backend.hpp +++ b/src/llvm_backend.hpp @@ -279,6 +279,12 @@ struct lbDefer { }; }; +struct lbLifetimeLocal { + LLVMValueRef ptr; + i64 size; + isize scope_index; +}; + struct lbTargetList { lbTargetList *prev; bool is_block; @@ -375,6 +381,11 @@ struct lbProcedure { Array asan_stack_locals; + Array lifetime_locals; + // matches scope_stack (count == scope_index); + // whether that scope's named locals may be lifetime marked + Array lifetime_scopes; + void (*generate_body)(lbModule *m, lbProcedure *p); Array *global_variables; lbProcedure *objc_names; @@ -487,6 +498,10 @@ gb_internal lbAddr lb_add_global_generated_from_procedure(lbProcedure *p, Type * gb_internal lbAddr lb_add_global_generated_with_name(lbModule *m, Type *type, lbValue value, String name, Entity **entity_=nullptr); gb_internal lbAddr lb_add_local(lbProcedure *p, Type *type, Entity *e=nullptr, bool zero_init=true, bool force_no_init=false); +gb_internal bool lb_lifetime_markers_enabled(void); +gb_internal void lb_add_lifetime_local(lbProcedure *p, LLVMValueRef ptr, Type *type); +gb_internal void lb_emit_lifetime_ends(lbProcedure *p, lbDeferExitKind kind, lbBlock *block); + gb_internal void lb_add_foreign_library_path(lbModule *m, Entity *e); gb_internal lbValue lb_typeid(lbModule *m, Type *type); diff --git a/src/llvm_backend_general.cpp b/src/llvm_backend_general.cpp index 17b41cfad..5e5d58e71 100644 --- a/src/llvm_backend_general.cpp +++ b/src/llvm_backend_general.cpp @@ -3911,6 +3911,147 @@ gb_internal lbValue lb_build_cond(lbProcedure *p, Ast *cond, lbBlock *true_block } + +// only named user locals are marked, and only where the innermost open +// scope opted in with lb_open_scope(..., lifetime_scope=true); +// these include blocks (proc body, loop/if/else bodies, do, {}) and switch cases +// +// notably excluded: +// 1) params and named results; +// 2) locals declared by a statement outside its body (e.g. for i:=0; ..., or if x := f()), +// see comment on lb_open_scope; +// 3) temps made by lb_add_local_generated (these have no syntactic scope); +// 4) a constant literal that needs backing storage (slice, or a struct containing a slice) +// gets it from lb_const_value, not lb_add_local, so v := []i8{...} gets no markers +// (TODO: this can be handled in lb_const_value) +// +// opt in with the -lifetime-markers compiler flag; +// code that uses an address of a local past the local's scope should NOT use the flag; +// (this is not hypothetical, core:crypto does it in a few places) +gb_internal bool lb_lifetime_markers_enabled(void) { + if (!build_context.lifetime_markers) { + return false; + } + if (build_context.optimization_level < OptimizationLevel_Size) { + // the StackColoring pass only runs at opt levels >= Size + return false; + } + if (build_context.sanitizer_flags & SanitizerFlag_Address) { + // this is conservative, so that markers don't interfere with + // the manual unpoisoning currently done in lb_emit_defer_stmts + return false; + } + return true; +} + +gb_internal bool lb_can_emit_at_curr_block(lbProcedure *p) { + if (p->curr_block == nullptr) { + return false; + } + return !lb_is_instr_terminating(LLVMGetLastInstruction(p->curr_block->block)); +} + +// ptr must be an alloca +gb_internal void lb_emit_lifetime_marker(lbProcedure *p, char const *name, LLVMValueRef ptr, i64 size) { + LLVMTypeRef types[1] = { LLVMTypeOf(ptr) }; +#if LLVM_VERSION_MAJOR >= 22 + // the size operand was removed in LLVM 22 + gb_unused(size); + LLVMValueRef args[1] = { + ptr, + }; +#else + LLVMValueRef args[2] = { + LLVMConstInt(LLVMInt64TypeInContext(p->module->ctx), cast(u64)size, false), + ptr, + }; +#endif + lb_call_intrinsic(p, name, args, gb_count_of(args), types, gb_count_of(types)); +} + +gb_internal bool lb_lifetime_scope_is_markable(lbProcedure *p) { + GB_ASSERT(p->lifetime_scopes.count == p->scope_index); + if (p->scope_index < 1) { + // scope 0 is lb_begin_procedure_body (params, named results); + // proc body block is scope 1 + return false; + } + return p->lifetime_scopes[p->lifetime_scopes.count-1]; +} + +gb_internal void lb_add_lifetime_local(lbProcedure *p, LLVMValueRef ptr, Type *type) { + if (!lb_lifetime_markers_enabled()) { + return; + } + if (!lb_lifetime_scope_is_markable(p)) { + return; + } + i64 size = type_size_of(type); + if (size <= 0) { + return; + } + GB_ASSERT(lb_can_emit_at_curr_block(p)); + + lb_emit_lifetime_marker(p, "llvm.lifetime.start", ptr, size); + + lbLifetimeLocal l = {}; + l.ptr = ptr; + l.size = size; + l.scope_index = p->scope_index; + array_add(&p->lifetime_locals, l); +} + +// this mirrors what lb_emit_defer_stmts does over p->defer_stmts; +// must run after the defer bodies, because a defer may reference the locals +gb_internal void lb_emit_lifetime_ends(lbProcedure *p, lbDeferExitKind kind, lbBlock *block) { + if (p->lifetime_locals.count == 0) { + return; + } + bool can_emit = lb_can_emit_at_curr_block(p); + if (kind == lbDeferExit_Branch) { + GB_ASSERT(block != nullptr); + } + if (!can_emit && kind != lbDeferExit_Default) { + // only a default close has stuff to do when no end can be emitted + return; + } + + isize i = p->lifetime_locals.count; + while (i --> 0) { + lbLifetimeLocal const &l = p->lifetime_locals[i]; + + if (kind == lbDeferExit_Default) { + // p->scope_index is the scope ending and only its own locals are done; + // everything with a smaller index belongs to scopes that are still open, + // so stop on the first non-matching one + if (l.scope_index != p->scope_index) { + GB_ASSERT(l.scope_index < p->scope_index); + return; + } + if (can_emit) { + lb_emit_lifetime_marker(p, "llvm.lifetime.end", l.ptr, l.size); + } + // always pop no matter whether lifetime.end was emitted above + array_pop(&p->lifetime_locals); + } else if (kind == lbDeferExit_Return) { + lb_emit_lifetime_marker(p, "llvm.lifetime.end", l.ptr, l.size); + // don't pop here, + // ended lifetimes will be popped in their owning scope default close + } else if (kind == lbDeferExit_Branch) { + // block->scope_index is the depth we land back at + // and everything deeper is being unwound; + // end all lifetimes (innermost first) up to this level + if (l.scope_index <= block->scope_index) { + return; + } + lb_emit_lifetime_marker(p, "llvm.lifetime.end", l.ptr, l.size); + // don't pop here, + // ended lifetimes will be popped in their owning scope default close + } + } +} + + gb_internal lbAddr lb_add_local(lbProcedure *p, Type *type, Entity *e, bool zero_init, bool force_no_init) { GB_ASSERT(p->decl_block != p->curr_block); LLVMPositionBuilderAtEnd(p->builder, p->decl_block->block); @@ -3930,6 +4071,15 @@ gb_internal lbAddr lb_add_local(lbProcedure *p, Type *type, Entity *e, bool zero LLVMValueRef ptr = llvm_alloca(p, llvm_type, alignment, name); + if (e != nullptr) { + // only named user locals get lifetime markers; + // + // the alloca itself sits in p->decl_block, but llvm_alloca moves the builder back + // to p->curr_block, which is where the declaration actually runs and the slot becomes live; + // emitting lifetime.start here keeps it before any stores to the local (zero init included) + lb_add_lifetime_local(p, ptr, type); + } + if (!zero_init && !force_no_init) { // If there is any padding of any kind, just zero init regardless of zero_init parameter LLVMTypeKind kind = LLVMGetTypeKind(llvm_type); diff --git a/src/llvm_backend_proc.cpp b/src/llvm_backend_proc.cpp index d904270fa..67beeca18 100644 --- a/src/llvm_backend_proc.cpp +++ b/src/llvm_backend_proc.cpp @@ -136,6 +136,8 @@ gb_internal lbProcedure *lb_create_procedure(lbModule *m, Entity *entity, bool i p->context_stack.allocator = a; p->scope_stack.allocator = a; p->asan_stack_locals.allocator = a; + p->lifetime_locals.allocator = a; + p->lifetime_scopes.allocator = a; // map_init(&p->selector_values, 0); // map_init(&p->selector_addr, 0); // map_init(&p->tuple_fix_map, 0); @@ -462,6 +464,8 @@ gb_internal lbProcedure *lb_create_dummy_procedure(lbModule *m, String link_name p->branch_blocks.allocator = a; p->context_stack.allocator = a; p->asan_stack_locals.allocator = a; + p->lifetime_locals.allocator = a; + p->lifetime_scopes.allocator = a; map_init(&p->tuple_fix_map, 0); diff --git a/src/llvm_backend_stmt.cpp b/src/llvm_backend_stmt.cpp index a0f0f48a3..9ad012dce 100644 --- a/src/llvm_backend_stmt.cpp +++ b/src/llvm_backend_stmt.cpp @@ -292,7 +292,11 @@ gb_internal void lb_pop_target_list(lbProcedure *p) { p->target_list = p->target_list->prev; } -gb_internal void lb_open_scope(lbProcedure *p, Scope *s) { +// NOTE: lifetime_scope=true means that this scope ends exactly where +// lb_close_scope is called for it, which is what makes it safe to mark +// named locals with llvm.lifetime.start/llvm.lifetime.end; +// (it is NOT true for the scope a loop statement opens for its own variables) +gb_internal void lb_open_scope(lbProcedure *p, Scope *s, bool lifetime_scope=false) { lbModule *m = p->module; if (m->debug_builder) { LLVMMetadataRef curr_metadata = lb_get_llvm_metadata(m, s); @@ -328,10 +332,11 @@ gb_internal void lb_open_scope(lbProcedure *p, Scope *s) { p->curr_scope = s; p->scope_index += 1; array_add(&p->scope_stack, s); - + array_add(&p->lifetime_scopes, lifetime_scope); } gb_internal void lb_close_scope(lbProcedure *p, lbDeferExitKind kind, lbBlock *block, Ast *node, bool pop_stack=true) { + GB_ASSERT(p->scope_stack.count == p->lifetime_scopes.count); lb_emit_defer_stmts(p, kind, block, node); GB_ASSERT(p->scope_index > 0); @@ -352,6 +357,7 @@ gb_internal void lb_close_scope(lbProcedure *p, lbDeferExitKind kind, lbBlock *b p->scope_index -= 1; array_pop(&p->scope_stack); + array_pop(&p->lifetime_scopes); } gb_internal void lb_build_when_stmt(lbProcedure *p, AstWhenStmt *ws) { @@ -2102,7 +2108,7 @@ gb_internal void lb_build_switch_stmt(lbProcedure *p, AstSwitchStmt *ss, Scope * lb_start_block(p, body); lb_push_target_list(p, ss->label, done, nullptr, fall); - lb_open_scope(p, body->scope); + lb_open_scope(p, body->scope, true); lb_build_stmt_list(p, cc->stmts); lb_close_scope(p, lbDeferExit_Default, body, clause); lb_pop_target_list(p); @@ -2120,7 +2126,7 @@ gb_internal void lb_build_switch_stmt(lbProcedure *p, AstSwitchStmt *ss, Scope * lb_start_block(p, default_block); lb_push_target_list(p, ss->label, done, nullptr, default_fall); - lb_open_scope(p, default_block->scope); + lb_open_scope(p, default_block->scope, true); lb_build_stmt_list(p, default_stmts); lb_close_scope(p, lbDeferExit_Default, default_block, default_clause); lb_pop_target_list(p); @@ -2308,7 +2314,7 @@ gb_internal void lb_build_type_switch_stmt(lbProcedure *p, AstTypeSwitchStmt *ss ast_node(cc, CaseClause, clause); Entity *case_entity = implicit_entity_of_node(clause); - lb_open_scope(p, cc->scope); + lb_open_scope(p, cc->scope, true); if (cc->list.count == 0) { lb_start_block(p, default_block); @@ -2661,6 +2667,9 @@ gb_internal void lb_build_return_stmt(lbProcedure *p, Slice const &return rw_mutex_shared_unlock(&p->module->values_mutex); lb_emit_store(p, found, lb_emit_conv(p, res, e->type)); } + // lifetime ends are emitted in lb_emit_defer_stmts, + // but no defers run on this path, so call it explicitly + lb_emit_lifetime_ends(p, lbDeferExit_Return, nullptr); LLVMBuildRetVoid(p->builder); return; } @@ -3300,7 +3309,7 @@ gb_internal void lb_build_stmt(lbProcedure *p, Ast *node) { tl->is_block = true; } - lb_open_scope(p, bs->scope); + lb_open_scope(p, bs->scope, true); lb_build_stmt_list(p, bs->stmts); lb_close_scope(p, lbDeferExit_Default, nullptr, node); @@ -3579,6 +3588,9 @@ gb_internal void lb_emit_defer_stmts(lbProcedure *p, lbDeferExitKind kind, lbBlo } } } + + // end lifetimes after the defer bodies, a defer may reference the locals + lb_emit_lifetime_ends(p, kind, block); } gb_internal void lb_emit_defer_stmts(lbProcedure *p, lbDeferExitKind kind, lbBlock *block, Ast *node) { diff --git a/src/main.cpp b/src/main.cpp index 3605717e7..d69b00259 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -430,6 +430,7 @@ enum BuildFlagKind { BuildFlag_NoBoundsCheck, BuildFlag_WebkitSwitchWorkaround, BuildFlag_NoTypeAssert, + BuildFlag_LifetimeMarkers, BuildFlag_NoDynamicLiterals, BuildFlag_DynamicLiterals, BuildFlag_NoCRT, @@ -691,6 +692,7 @@ gb_internal bool parse_build_flags(Array args) { add_flag(&build_flags, BuildFlag_NoBoundsCheck, str_lit("no-bounds-check"), BuildFlagParam_None, Command__does_check); add_flag(&build_flags, BuildFlag_WebkitSwitchWorkaround, str_lit("webkit-switch-workaround"), BuildFlagParam_None, Command__does_check); add_flag(&build_flags, BuildFlag_NoTypeAssert, str_lit("no-type-assert"), BuildFlagParam_None, Command__does_check); + add_flag(&build_flags, BuildFlag_LifetimeMarkers, str_lit("lifetime-markers"), BuildFlagParam_None, Command__does_build); add_flag(&build_flags, BuildFlag_NoThreadLocal, str_lit("no-thread-local"), BuildFlagParam_None, Command__does_check); add_flag(&build_flags, BuildFlag_NoDynamicLiterals, str_lit("no-dynamic-literals"), BuildFlagParam_None, Command__does_check); add_flag(&build_flags, BuildFlag_DynamicLiterals, str_lit("dynamic-literals"), BuildFlagParam_None, Command__does_check); @@ -1392,6 +1394,9 @@ gb_internal bool parse_build_flags(Array args) { case BuildFlag_NoTypeAssert: build_context.no_type_assert = true; break; + case BuildFlag_LifetimeMarkers: + build_context.lifetime_markers = true; + break; case BuildFlag_NoDynamicLiterals: gb_printf_err("Warning: Use of -no-dynamic-literals is now redundant\n"); break; @@ -3055,6 +3060,14 @@ gb_internal int print_show_help(String const arg0, String command, String option } if (run_or_build) { + if (print_flag("-lifetime-markers")) { + print_usage_line(2, "Emits lifetime markers for named locals, so that locals from"); + print_usage_line(2, "non-overlapping scopes may reuse stack."); + print_usage_line(2, "Requires '-o:size' or above; no effect with '-sanitize:address'."); + print_usage_line(2, "Warning: this applies to every package in the build; using the address"); + print_usage_line(2, "of a local after the local's declaring scope ended can miscompile."); + } + if (print_flag("-linker:")) { print_usage_line(2, "Specify the linker to use."); print_usage_line(2, "Choices:"); diff --git a/tests/issues/run.bat b/tests/issues/run.bat index ff09d0275..ac25b4066 100644 --- a/tests/issues/run.bat +++ b/tests/issues/run.bat @@ -58,6 +58,8 @@ clang -c ..\test_issue_sysv_abi.c -o test_issue_sysv_abi_c.o || exit /b ..\..\..\odin test ..\test_issue_sysv_abi.odin %COMMON% || exit /b ..\..\..\odin build ..\test_issue_7073-1.odin %COMMON% 2>&1 | find /c "Error:" | findstr /x "2" || exit /b ..\..\..\odin test ..\test_issue_swizzle_multi_assign.odin %COMMON% || exit /b +..\..\..\odin test ..\test_lifetime_markers.odin %COMMON% -o:size -lifetime-markers || exit /b +..\..\..\odin test ..\test_lifetime_markers.odin %COMMON% -o:speed -lifetime-markers || exit /b @echo off diff --git a/tests/issues/run.sh b/tests/issues/run.sh index 565528ed8..42605abf4 100755 --- a/tests/issues/run.sh +++ b/tests/issues/run.sh @@ -171,6 +171,9 @@ else $ODIN test ../test_issue_5640.odin -o:none $COMMON fi +$ODIN test ../test_lifetime_markers.odin $COMMON -o:size -lifetime-markers +$ODIN test ../test_lifetime_markers.odin $COMMON -o:speed -lifetime-markers + set +x popd diff --git a/tests/issues/test_lifetime_markers.odin b/tests/issues/test_lifetime_markers.odin new file mode 100644 index 000000000..ba272d69a --- /dev/null +++ b/tests/issues/test_lifetime_markers.odin @@ -0,0 +1,178 @@ +package test_issues + +import "core:testing" + +// tests the -lifetime-markers compiler flag + + +peek :: #force_no_inline proc(buf: ^[8]int, i: int) -> int { + return buf[i] +} + +@(test) +test_defer_reads_local :: proc(t: ^testing.T) { + v := 0 + { + buf: [8]int + defer v = peek(&buf, 3) + buf[3] = 42 + } + testing.expect_value(t, v, 42) +} + +@(test) +test_return_from_nested :: proc(t: ^testing.T) { + + early_return :: proc(out: ^int, early_out: bool) { + buf: [8]int + defer out^ = peek(&buf, 5) + { + buf[5] = 42 + if early_out { + return + } + } + buf[5] = 43 + } + + r := 0 + early_return(&r, true) + testing.expect_value(t, r, 42) + early_return(&r, false) + testing.expect_value(t, r, 43) +} + +@(test) +test_break_out_of_nested :: proc(t: ^testing.T) { + total := 0 + outer: for i in 0 ..< 4 { + for j in 0 ..< 4 { + buf: [8]int + defer total += peek(&buf, 0) + buf[0] = i*10 + j + if j == 2 { + break outer + } + } + } + // i == 0, j == 0, 1, 2 + testing.expect_value(t, total, 3) +} + +@(test) +test_continue_defer :: proc(t: ^testing.T) { + total := 0 + for i in 0 ..< 4 { + buf: [8]int + defer total += peek(&buf, 4) + buf[4] = i + if i % 2 == 0 { + continue + } + buf[4] = 100 + i + } + // 0 + 101 + 2 + 103 + testing.expect_value(t, total, 206) +} + +@(test) +test_switch_cases :: proc(t: ^testing.T) { + + switch_cases :: proc(x: int) -> int { + r := 0 + switch x { + case 1: + a: [8]int + defer r += peek(&a, 0) + a[0] = 5 + fallthrough + case 2: + b: [8]int + defer r += peek(&b, 1) + b[1] = 7 + } + return r + } + + testing.expect_value(t, switch_cases(1), 12) + testing.expect_value(t, switch_cases(2), 7) + testing.expect_value(t, switch_cases(3), 0) +} + + +@(test) +test_type_switch_cases :: proc(t: ^testing.T) { + + Value :: union { + int, + [8]int, + } + + type_switch_cases :: proc(v: Value) -> int { + r := 0 + switch x in v { + case [8]int: + copied := x + defer r = peek(&copied, 2) + copied[2] += 1 + case int: + r = x + } + return r + } + + v: Value = [8]int{2 = 9} + testing.expect_value(t, type_switch_cases(v), 10) + v = 3 + testing.expect_value(t, type_switch_cases(v), 3) +} + +@(test) +test_or_return_runs_defer :: proc(t: ^testing.T) { + + or_return_helper :: proc(out: ^int, ok: bool) -> bool { + + f :: #force_no_inline proc(b: bool) -> bool { + return b + } + + buf: [8]int + defer out^ = peek(&buf, 2) + buf[2] = 31 + f(ok) or_return + buf[2] = 32 + return true + } + + r := 0 + testing.expect_value(t, or_return_helper(&r, false), false) + testing.expect_value(t, r, 31) + testing.expect_value(t, or_return_helper(&r, true), true) + testing.expect_value(t, r, 32) +} + +@(test) +test_sret_forwarding :: proc(t: ^testing.T) { + + Big :: struct { + data: [32]int, + } + + make_big :: #force_no_inline proc(src: ^[32]int) -> (b: Big) { + b.data = src^ + return + } + + init_big :: proc() -> Big { + tmp: [32]int + for i in 0 ..< 32 { + tmp[i] = i * 3 + } + tmp[7] = 1234 + return make_big(&tmp) + } + + b := init_big() + testing.expect_value(t, b.data[7], 1234) + testing.expect_value(t, b.data[31], 93) +} From 36c1173df6440098364998af12a23d01ffe8997c Mon Sep 17 00:00:00 2001 From: bplu4t2f Date: Mon, 21 Sep 2026 16:52:33 +0200 Subject: [PATCH 015/215] Fix #7547 --- core/os/file_windows.odin | 33 ++++++ core/os/path_windows.odin | 8 +- core/sys/windows/types.odin | 2 + tests/issues/run.bat | 1 + tests/issues/run.sh | 2 + tests/issues/test_issue_7547.odin | 169 ++++++++++++++++++++++++++++++ 6 files changed, 211 insertions(+), 4 deletions(-) create mode 100644 tests/issues/test_issue_7547.odin diff --git a/core/os/file_windows.odin b/core/os/file_windows.odin index ab1209c5b..ead220a77 100644 --- a/core/os/file_windows.odin +++ b/core/os/file_windows.odin @@ -913,6 +913,39 @@ win32_utf8_to_utf16 :: proc(s: string, allocator: runtime.Allocator) -> (ws: []u return } +// Used for `SHFILEOPSTRUCTW`, which requires double-null-terminated strings (`PCZZWSTR`). +@(private="package", require_results) +win32_utf8_to_pczzwstr :: proc(s: string, allocator: runtime.Allocator) -> (ws: win32.PCZZWSTR, err: Error) { + if len(s) < 1 { + // We still need to provide a double-null-terminated empty string. + t := make([]u16, 2, allocator) or_return + ws = cast(win32.PCZZWSTR)raw_data(t) + return + } + + b := transmute([]byte)s + cstr := raw_data(b) + n := win32.MultiByteToWideChar(win32.CP_UTF8, win32.MB_ERR_INVALID_CHARS, cstr, i32(len(s)), nil, 0) + if n == 0 { + err = _get_platform_error() + return + } + + text := make([]u16, n+2, allocator) or_return + + n1 := win32.MultiByteToWideChar(win32.CP_UTF8, win32.MB_ERR_INVALID_CHARS, cstr, i32(len(s)), raw_data(text), n) + if n1 == 0 { + err = _get_platform_error() + delete(text, allocator) + return + } + + text[n+1] = 0 + text[n] = 0 + ws = cast(win32.PCZZWSTR)raw_data(text) + return +} + @(private="package", require_results) win32_wstring_to_utf8 :: proc(s: cstring16, allocator: runtime.Allocator) -> (res: string, err: runtime.Allocator_Error) { if s == nil || s == "" { diff --git a/core/os/path_windows.odin b/core/os/path_windows.odin index 753f1665f..1e98d704e 100644 --- a/core/os/path_windows.odin +++ b/core/os/path_windows.odin @@ -90,19 +90,19 @@ _remove_all :: proc(path: string) -> Error { if !_is_absolute_path(path) { abs_path = _get_absolute_path(path, temp_allocator) or_return } - dir := win32_utf8_to_wstring(abs_path, temp_allocator) or_return - empty: [1]u16 + // NOTE: The path `dir` must be double-null-terminated (`PCZZWSTR`). + dir := win32_utf8_to_pczzwstr(abs_path, temp_allocator) or_return file_op := win32.SHFILEOPSTRUCTW { nil, win32.FO_DELETE, dir, - cstring16(&empty[0]), + nil, win32.FOF_NOCONFIRMATION | win32.FOF_NOERRORUI | win32.FOF_SILENT, false, nil, - cstring16(&empty[0]), + nil, } res := win32.SHFileOperationW(&file_op) if res != 0 { diff --git a/core/sys/windows/types.odin b/core/sys/windows/types.odin index c3d47ef95..00586e240 100644 --- a/core/sys/windows/types.odin +++ b/core/sys/windows/types.odin @@ -1724,6 +1724,8 @@ NM_FONTCHANGED :: NM_OUTOFMEMORY-22 NM_CUSTOMTEXT :: NM_OUTOFMEMORY-23 // uses NMCUSTOMTEXT struct NM_TVSTATEIMAGECHANGING :: NM_OUTOFMEMORY-23 // uses NMTVSTATEIMAGECHANGING struct, defined after HTREEITEM +// Pointer to a double-null-terminated string. +// Special care must be taken when converting to this type. PCZZWSTR :: cstring16 SHFILEOPSTRUCTW :: struct { diff --git a/tests/issues/run.bat b/tests/issues/run.bat index ff09d0275..3da3c8174 100644 --- a/tests/issues/run.bat +++ b/tests/issues/run.bat @@ -58,6 +58,7 @@ clang -c ..\test_issue_sysv_abi.c -o test_issue_sysv_abi_c.o || exit /b ..\..\..\odin test ..\test_issue_sysv_abi.odin %COMMON% || exit /b ..\..\..\odin build ..\test_issue_7073-1.odin %COMMON% 2>&1 | find /c "Error:" | findstr /x "2" || exit /b ..\..\..\odin test ..\test_issue_swizzle_multi_assign.odin %COMMON% || exit /b +..\..\..\odin test ..\test_issue_7547.odin %COMMON% || exit /b @echo off diff --git a/tests/issues/run.sh b/tests/issues/run.sh index 7cd74fcda..0a381eb56 100755 --- a/tests/issues/run.sh +++ b/tests/issues/run.sh @@ -180,6 +180,8 @@ else $ODIN test ../test_issue_5640.odin -o:none $COMMON fi +$ODIN test ../test_issue_7547.odin $COMMON + set +x popd diff --git a/tests/issues/test_issue_7547.odin b/tests/issues/test_issue_7547.odin new file mode 100644 index 000000000..d33de64b1 --- /dev/null +++ b/tests/issues/test_issue_7547.odin @@ -0,0 +1,169 @@ +// Tests issue #7547 https://github.com/odin-lang/Odin/issues/7547 (win32 implementation of `os.remove_all`) +#+build windows +package test_issues + +import runtime "base:runtime" +import testing "core:testing" +import filepath "core:path/filepath" +import fmt "core:fmt" +import slice "core:slice" +import os "core:os" +import win32 "core:sys/windows" + +@(test) +test_issue_7547 :: proc(t: ^testing.T) { + // Test first that `os.remove_all` works at all to avoid false positives. + root, root_error := os.make_directory_temp("", "odin-issue-7547-*", context.temp_allocator) + if root_error != nil { + testing.fail_now(t, "could not create temporary directory") + } + nested, nested_error := filepath.join({root, "nested"}, context.temp_allocator) + if nested_error != nil { + testing.fail_now(t, "could not construct nested directory path") + } + if directory_error := os.make_directory_all(nested); directory_error != nil { + testing.fail_now(t, "could not create nested directory") + } + leaf, leaf_error := filepath.join({nested, "file.txt"}, context.temp_allocator) + if leaf_error != nil { + testing.fail_now(t, "could not construct leaf file path") + } + if write_error := os.write_entire_file(leaf, "issue 7547\n"); write_error != nil { + testing.fail_now(t, "could not create leaf file") + } + + { + err := os.remove(root) + testing.expect(t, err != nil, fmt.aprintf("os.remove should not have been able to delete a non-empty directory.", allocator = context.temp_allocator)) + } + + { + remove_error := os.remove_all(root) + testing.expect(t, remove_error == nil, fmt.aprintf("os.remove_all failed to remove non-empty directory.", allocator = context.temp_allocator)) + testing.expect(t, !os.exists(root), fmt.aprintf("os.remove_all left the tree behind", allocator = context.temp_allocator)) + } +} + +// On Windows, os.remove_all hands its converted path to SHFileOperationW, +// which reads a double-NUL-terminated path list. The conversion produced a +// single terminator, so the shell operation scanned past the buffer until it +// found a zero u16 somewhere behind it — undefined behaviour that surfaces as +// a returned error, a fatal access violation, or a livelock once the scan +// leaves the arena block. Fresh arena memory is zero-filled, which hides the +// scan from small isolated programs; this test drives the thread's core:os +// temporary arena and the heap through enough churn, on the test runner's +// worker thread, to place the converted path in front of recycled non-zero +// bytes, which is how the crash manifests in real test suites. +@(test) +test_issue_7547_dirty :: proc(t: ^testing.T) { + pointers := make_dynamic_array_len_cap([dynamic]string, 0, 2000, context.allocator) + defer { + for p in pointers { + delete(p, context.allocator) + } + delete(pointers) + } + + for iteration in 0..<64 { + root, root_error := os.make_directory_temp("", "odin-issue-7547-*", context.allocator) + if root_error != nil { + testing.fail_now(t, "could not create temporary directory") + } + append(&pointers, root) + nested, nested_error := filepath.join({root, "nested"}, context.allocator) + if nested_error != nil { + testing.fail_now(t, "could not construct nested directory path") + } + append(&pointers, nested) + if directory_error := os.make_directory_all(nested); directory_error != nil { + testing.fail_now(t, "could not create nested directory") + } + leaf, leaf_error := filepath.join({nested, "file.txt"}, context.allocator) + if leaf_error != nil { + testing.fail_now(t, "could not construct leaf file path") + } + append(&pointers, leaf) + if write_error := os.write_entire_file(leaf, "issue 7547\n"); write_error != nil { + testing.fail_now(t, "could not create leaf file") + } + + // Grow and recycle both allocators with path-shaped data so the + // temporary arena has handed back, and the heap has reused, + // non-zero memory behind the arena's current position. + for scale in 0..<8 { + garbage := fmt.aprintf("C:\\%s\\%d", root, scale*iteration, allocator=context.allocator) + _, _ = os.lstat(garbage, context.allocator) + delete(garbage, context.allocator) + } + + remove_error := os.remove_all(root) + testing.expect(t, remove_error == nil, fmt.aprintf("os.remove_all failed on iteration %d", iteration, allocator=context.temp_allocator)) + testing.expect(t, !os.exists(root), fmt.aprintf("os.remove_all left the tree behind on iteration %d", iteration, allocator=context.temp_allocator)) + } +} + +@(test) +test_issue_7547_internal :: proc(t: ^testing.T) { + { + dir, err := win32_utf8_to_pczzwstr_core("PATH") + testing.expect_value(t, err, nil) + testing.expect_value(t, len(dir), 6) + testing.expect(t, slice.equal(dir, []u16{'P', 'A', 'T', 'H', 0, 0})) + } + + { + dir, err := win32_utf8_to_pczzwstr_core("") + testing.expect_value(t, err, nil) + testing.expect_value(t, len(dir), 2) + testing.expect(t, slice.equal(dir, []u16{0, 0})) + } + + { + chinese_text := "你好" + testing.expect(t, len(transmute([]u8)chinese_text) != 2) + dir, err := win32_utf8_to_pczzwstr_core(chinese_text) + testing.expect_value(t, err, nil) + testing.expect_value(t, len(dir), 4) + testing.expect(t, slice.equal(dir, []u16{'你', '好', 0, 0})) + } + + { + invalid_utf8 := transmute(string)[]u8 { 0xC0, 0xAF } // overlong "/" + dir, err := win32_utf8_to_pczzwstr_core(invalid_utf8) + testing.expect(t, err != nil) + testing.expect_value(t, len(dir), 0) + } + +} + +// Used for `SHFILEOPSTRUCTW`, which requires double-null-terminated strings (`PCZZWSTR`). +@(private="package", require_results) +win32_utf8_to_pczzwstr_core :: proc(s: string, allocator: runtime.Allocator = context.temp_allocator) -> (ws: []u16, err: os.Error) { + if len(s) < 1 { + // We still need to provide a double-null-terminated empty string. + t := make([]u16, 2, allocator) or_return + ws = t + return + } + + b := transmute([]byte)s + cstr := raw_data(b) + n := win32.MultiByteToWideChar(win32.CP_UTF8, win32.MB_ERR_INVALID_CHARS, cstr, i32(len(s)), nil, 0) + if n == 0 { + err = os.Platform_Error.GEN_FAILURE + return + } + + text := make([]u16, n+2, allocator) or_return + + n1 := win32.MultiByteToWideChar(win32.CP_UTF8, win32.MB_ERR_INVALID_CHARS, cstr, i32(len(s)), raw_data(text), n) + if n1 == 0 { + err = os.Platform_Error.GEN_FAILURE + delete(text, allocator) + return + } + + text[n+1] = 0 + text[n] = 0 + return text, nil +} From ba3ddfadccd261d62830a2ea561e144b1ecc7ee7 Mon Sep 17 00:00:00 2001 From: jack gleeson Date: Wed, 16 Sep 2026 15:27:31 -0600 Subject: [PATCH 016/215] [core/c] Fix size of fastX int types per different archs/OSes --- core/c/c.odin | 115 +++++++++++++++++++++++++++++++++++++++++--------- 1 file changed, 96 insertions(+), 19 deletions(-) diff --git a/core/c/c.odin b/core/c/c.odin index cbff10e66..70a5b172f 100644 --- a/core/c/c.odin +++ b/core/c/c.odin @@ -49,32 +49,109 @@ uint_least32_t :: builtin.u32 int_least64_t :: builtin.i64 uint_least64_t :: builtin.u64 -// Same on Windows, Linux, and FreeBSD +// 7.18.1.3 Fastest minimum-width integer types +// Linux (glibc only, musl matches BSD spec) +// https://sourceware.org/cgit/glibc/tree/stdlib/stdint.h +// *BSD +// https://cgit.freebsd.org/src/tree/sys/x86/include/_types.h +// https://cgit.freebsd.org/src/tree/sys/i386/include/_types.h +// Darwin +// https://github.com/apple-oss-distributions/Libc/blob/main/include/stdint.h +// when ODIN_ARCH == .i386 { - int_fast8_t :: builtin.i8 - uint_fast8_t :: builtin.u8 - int_fast16_t :: builtin.i32 - uint_fast16_t :: builtin.u32 - int_fast32_t :: builtin.i32 - uint_fast32_t :: builtin.u32 + when ODIN_OS == .FreeBSD || ODIN_OS == .OpenBSD || ODIN_OS == .NetBSD { // https://cgit.freebsd.org/src/tree/sys/i386/include/_types.h + int_fast8_t :: builtin.i32 + uint_fast8_t :: builtin.u32 + int_fast16_t :: builtin.i32 + uint_fast16_t :: builtin.u32 + int_fast32_t :: builtin.i32 + uint_fast32_t :: builtin.u32 + } else when ODIN_OS == .Darwin { // https://github.com/apple-oss-distributions/Libc/blob/main/include/stdint.h#L39 + int_fast8_t :: builtin.i8 + uint_fast8_t :: builtin.u8 + int_fast16_t :: builtin.i16 + uint_fast16_t :: builtin.u16 + int_fast32_t :: builtin.i32 + uint_fast32_t :: builtin.u32 + } else { + int_fast8_t :: builtin.i8 + uint_fast8_t :: builtin.u8 + int_fast16_t :: builtin.i32 + uint_fast16_t :: builtin.u32 + int_fast32_t :: builtin.i32 + uint_fast32_t :: builtin.u32 + } int_fast64_t :: builtin.i64 uint_fast64_t :: builtin.u64 } else when ODIN_ARCH == .amd64 { - int_fast8_t :: builtin.i8 - uint_fast8_t :: builtin.u8 - int_fast16_t :: long - uint_fast16_t :: ulong - int_fast32_t :: long - uint_fast32_t :: ulong + when ODIN_OS == .FreeBSD || ODIN_OS == .OpenBSD || ODIN_OS == .NetBSD { // https://cgit.freebsd.org/src/tree/sys/x86/include/_types.h#n66 + int_fast8_t :: builtin.i32 + uint_fast8_t :: builtin.u32 + int_fast16_t :: builtin.i32 + uint_fast16_t :: builtin.u32 + int_fast32_t :: builtin.i32 + uint_fast32_t :: builtin.u32 + } else when ODIN_OS == .Darwin { + int_fast8_t :: builtin.i8 + uint_fast8_t :: builtin.u8 + int_fast16_t :: builtin.i16 + uint_fast16_t :: builtin.u16 + int_fast32_t :: builtin.i32 + uint_fast32_t :: builtin.u32 + } else when ODIN_OS == .Windows { + int_fast8_t :: builtin.i8 + uint_fast8_t :: builtin.u8 + int_fast16_t :: builtin.i32 + uint_fast16_t :: builtin.u32 + int_fast32_t :: builtin.i32 + uint_fast32_t :: builtin.u32 + } else when ODIN_OS == .Linux { + int_fast8_t :: builtin.i8 + uint_fast8_t :: builtin.u8 + int_fast16_t :: long // todo: musl is i32 to match BSD spec. No way to target it yet + uint_fast16_t :: ulong + int_fast32_t :: long + uint_fast32_t :: ulong + } else { + int_fast8_t :: builtin.i8 + uint_fast8_t :: builtin.u8 + int_fast16_t :: builtin.i32 + uint_fast16_t :: builtin.u32 + int_fast32_t :: builtin.i32 + uint_fast32_t :: builtin.u32 + } int_fast64_t :: builtin.i64 uint_fast64_t :: builtin.u64 } else { - int_fast8_t :: builtin.i8 - uint_fast8_t :: builtin.u8 - int_fast16_t :: builtin.i16 - uint_fast16_t :: builtin.u16 - int_fast32_t :: builtin.i32 - uint_fast32_t :: builtin.u32 + when ODIN_OS == .FreeBSD || ODIN_OS == .OpenBSD || ODIN_OS == .NetBSD { + int_fast8_t :: builtin.i32 + uint_fast8_t :: builtin.u32 + int_fast16_t :: builtin.i32 + uint_fast16_t :: builtin.u32 + int_fast32_t :: builtin.i32 + uint_fast32_t :: builtin.u32 + } else when ODIN_OS == .Darwin { + int_fast8_t :: builtin.i8 + uint_fast8_t :: builtin.u8 + int_fast16_t :: builtin.i16 + uint_fast16_t :: builtin.u16 + int_fast32_t :: builtin.i32 + uint_fast32_t :: builtin.u32 + } else when ODIN_OS == .Linux { + int_fast8_t :: builtin.i8 + uint_fast8_t :: builtin.u8 + int_fast16_t :: long // todo: musl is i32 to match BSD spec. No way to target it yet + uint_fast16_t :: ulong + int_fast32_t :: long + uint_fast32_t :: ulong + } else { + int_fast8_t :: builtin.i8 + uint_fast8_t :: builtin.u8 + int_fast16_t :: builtin.i32 + uint_fast16_t :: builtin.u32 + int_fast32_t :: builtin.i32 + uint_fast32_t :: builtin.u32 + } int_fast64_t :: builtin.i64 uint_fast64_t :: builtin.u64 } From f9ea2407b8ca2787e8f142f07f68e185eeda523c Mon Sep 17 00:00:00 2001 From: jack gleeson Date: Wed, 16 Sep 2026 15:41:12 -0600 Subject: [PATCH 017/215] Add tests for fastint widths - essentially just asserts but helpful for regression --- .../c/libc/test_core_libc_fastint_width.odin | 53 +++++++++++++++++++ 1 file changed, 53 insertions(+) create mode 100644 tests/core/c/libc/test_core_libc_fastint_width.odin diff --git a/tests/core/c/libc/test_core_libc_fastint_width.odin b/tests/core/c/libc/test_core_libc_fastint_width.odin new file mode 100644 index 000000000..9d4146c63 --- /dev/null +++ b/tests/core/c/libc/test_core_libc_fastint_width.odin @@ -0,0 +1,53 @@ +package test_core_libc + +import "core:c" +import "core:testing" + +@test +test_libc_fastint_width :: proc(t: ^testing.T) { + when ODIN_OS == .FreeBSD || ODIN_OS == .OpenBSD || ODIN_OS == .NetBSD { + testing.expect_value(t, size_of(c.int_fast8_t), 4) + testing.expect_value(t, size_of(c.uint_fast8_t), 4) + testing.expect_value(t, size_of(c.int_fast16_t), 4) + testing.expect_value(t, size_of(c.uint_fast16_t), 4) + testing.expect_value(t, size_of(c.int_fast32_t), 4) + testing.expect_value(t, size_of(c.uint_fast32_t), 4) + } else when ODIN_OS == .Darwin { + testing.expect_value(t, size_of(c.int_fast8_t), 1) + testing.expect_value(t, size_of(c.uint_fast8_t), 1) + testing.expect_value(t, size_of(c.int_fast16_t), 2) + testing.expect_value(t, size_of(c.uint_fast16_t), 2) + testing.expect_value(t, size_of(c.int_fast32_t), 4) + testing.expect_value(t, size_of(c.uint_fast32_t), 4) + } else when ODIN_OS == .Linux { + testing.expect_value(t, size_of(c.int_fast8_t), 1) + testing.expect_value(t, size_of(c.uint_fast8_t), 1) + when size_of(rawptr) == 8 { // glibc only - broken for musl + testing.expect_value(t, size_of(c.int_fast16_t), 8) + testing.expect_value(t, size_of(c.uint_fast16_t), 8) + testing.expect_value(t, size_of(c.int_fast32_t), 8) + testing.expect_value(t, size_of(c.uint_fast32_t), 8) + } else { + testing.expect_value(t, size_of(c.int_fast16_t), 4) + testing.expect_value(t, size_of(c.uint_fast16_t), 4) + testing.expect_value(t, size_of(c.int_fast32_t), 4) + testing.expect_value(t, size_of(c.uint_fast32_t), 4) + } + } else when ODIN_OS == .Windows { + testing.expect_value(t, size_of(c.int_fast8_t), 1) + testing.expect_value(t, size_of(c.uint_fast8_t), 1) + testing.expect_value(t, size_of(c.int_fast16_t), 4) + testing.expect_value(t, size_of(c.uint_fast16_t), 4) + testing.expect_value(t, size_of(c.int_fast32_t), 4) + testing.expect_value(t, size_of(c.uint_fast32_t), 4) + } else { + testing.expect_value(t, size_of(c.int_fast8_t), 1) + testing.expect_value(t, size_of(c.uint_fast8_t), 1) + testing.expect_value(t, size_of(c.int_fast16_t), 4) + testing.expect_value(t, size_of(c.uint_fast16_t), 4) + testing.expect_value(t, size_of(c.int_fast32_t), 4) + testing.expect_value(t, size_of(c.uint_fast32_t), 4) + } + testing.expect_value(t, size_of(c.int_fast64_t), 8) + testing.expect_value(t, size_of(c.uint_fast64_t), 8) +} From 9f9d7f7f55b4a67295398e0d6d6a53364f7d8cc0 Mon Sep 17 00:00:00 2001 From: Matthias Huerbe Date: Fri, 25 Sep 2026 11:55:36 +0200 Subject: [PATCH 018/215] ported Eisel-Lemire's fast float algorithm to odin also fixed string the float conversion producing wrong results. --- core/strconv/LICENSE_fast_float | 31 + core/strconv/fast_float.odin | 784 ++++++++++++++++++++++ core/strconv/strconv.odin | 112 +++- tests/core/strconv/test_core_strconv.odin | 111 ++- 4 files changed, 1003 insertions(+), 35 deletions(-) create mode 100644 core/strconv/LICENSE_fast_float create mode 100644 core/strconv/fast_float.odin diff --git a/core/strconv/LICENSE_fast_float b/core/strconv/LICENSE_fast_float new file mode 100644 index 000000000..8ddef69e7 --- /dev/null +++ b/core/strconv/LICENSE_fast_float @@ -0,0 +1,31 @@ +This license applies to the Eisel-Lemire code and the _POW5_128 table in +fast_float.odin, which are ported from ffc.h and fast_float. + + ffc.h: https://github.com/kolemannix/ffc.h + fast_float: https://github.com/fastfloat/fast_float + +Copyright (c) 2021 The fast_float authors + +Boost Software License - Version 1.0 - August 17th, 2003 + +Permission is hereby granted, free of charge, to any person or organization +obtaining a copy of the software and accompanying documentation covered by +this license (the "Software") to use, reproduce, display, distribute, +execute, and transmit the Software, and to prepare derivative works of the +Software, and to permit third-parties to whom the Software is furnished to +do so, all subject to the following: + +The copyright notices in the Software and this entire statement, including +the above license grant, this restriction and the following disclaimer, +must be included in all copies of the Software, in whole or in part, and +all derivative works of the Software, unless such copies or derivative +works are solely in the form of machine-executable object code generated by +a source language processor. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT +SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE +FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE, +ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. diff --git a/core/strconv/fast_float.odin b/core/strconv/fast_float.odin new file mode 100644 index 000000000..a68184cad --- /dev/null +++ b/core/strconv/fast_float.odin @@ -0,0 +1,784 @@ +package strconv + +import "core:math/bits" + +/* + Eisel-Lemire decimal to binary conversion. + + Ported from ffc.h (https://github.com/kolemannix/ffc.h) + Made available under the Boost Software License 1.0, + see LICENSE_fast_float in this package. + + List of contributors: + Daniel Lemire, João Paulo Magalhaes: Original fast_float implementation + Koleman Nix: C port (ffc.h) +*/ + +/* + References: + - Daniel Lemire, "Number Parsing at a Gigabyte per Second", + Software: Practice and Experience 51 (8), 2021. https://arxiv.org/abs/2101.11408 + - Noble Mushtak, Daniel Lemire, "Fast Number Parsing Without Fallback", + Software: Practice and Experience 53 (7), 2023. https://arxiv.org/abs/2212.06644 +*/ + +@(private="file") +_POW5_128_MIN_EXP :: -342 + +/* +Computes the `T` closest to `w * 10^q`, rounding ties to even. + +`w` must be the exact decimal significand. When the input had more digits than fit +in a `u64`, call this with both the truncated significand `w` and `w + 1`: if both +calls return the same bits, the result is correct. Otherwise, use a slow path. + +**Inputs** +- T: `f32` or `f64` +- q: The decimal exponent +- w: The decimal significand + +**Returns** +- The IEEE-754 bit pattern of the result, without the sign bit. An overflow gives the bit pattern of infinity. +*/ +fast_float_compute_float :: proc "contextless" ($T: typeid, q: int, w: u64) -> u64 where T == f32 || T == f64 #no_bounds_check { + when T == f64 { + MANT_BITS :: 52 + MIN_EXPONENT :: -1023 + INFINITE_POWER :: 0x7ff + SMALLEST_POW10 :: -342 + LARGEST_POW10 :: 308 + MIN_EXP_ROUND_EVEN :: -4 + MAX_EXP_ROUND_EVEN :: 23 + } else { + MANT_BITS :: 23 + MIN_EXPONENT :: -127 + INFINITE_POWER :: 0xff + SMALLEST_POW10 :: -64 + LARGEST_POW10 :: 38 + MIN_EXP_ROUND_EVEN :: -17 + MAX_EXP_ROUND_EVEN :: 10 + } + + // w <= max(u64) and q < SMALLEST_POW10 always rounds to zero. + if w == 0 || q < SMALLEST_POW10 { + return 0 + } + if q > LARGEST_POW10 { + return INFINITE_POWER << MANT_BITS + } + + lz := bits.count_leading_zeros(w) + wn := w << lz // normalized so the top bit is set + + // Compute a 128-bit approximation of wn * 5^q. We need the product to be accurate + // to MANT_BITS+3 bits. If the lower bits of the high word are all ones, the error + // in the first product could affect them, so we refine the result with the lower + // half of the power of five. + PRECISION_MASK :: max(u64) >> (MANT_BITS + 3) + pow5 := &_POW5_128[q - _POW5_128_MIN_EXP] + hi, lo := bits.mul_u64(wn, pow5[0]) + if hi & PRECISION_MASK == PRECISION_MASK { + hi2, _ := bits.mul_u64(wn, pow5[1]) + lo += hi2 + if hi2 > lo { + hi += 1 + } + } + // Mushtak & Lemire (2023) prove that this product is always accurate enough. + + upperbit := int(hi >> 63) + shift := uint(upperbit + 64 - MANT_BITS - 3) + mantissa := hi >> shift + // ((152170 + 65536) * q) >> 16 is floor(q * log2(10)) for |q| < 1650. + power2 := (((152170 + 65536) * q) >> 16) + 63 + upperbit - int(lz) - MIN_EXPONENT + + if power2 <= 0 { + // Subnormal result. + if -power2 + 1 >= 64 { + return 0 + } + mantissa >>= uint(-power2 + 1) + mantissa += mantissa & 1 // round up + mantissa >>= 1 + // Rounding up can give the smallest normal number. Then the hidden bit + // is set, and it is also the lowest bit of the exponent. + return mantissa + } + + // We usually round up. If the value is exactly halfway between two floats, + // and the lower float is even, we must round down. An exact halfway value is + // possible only for a small range of exponents. + if lo <= 1 && q >= MIN_EXP_ROUND_EVEN && q <= MAX_EXP_ROUND_EVEN && mantissa & 3 == 1 { + if mantissa << shift == hi { + mantissa &~= 1 + } + } + mantissa += mantissa & 1 // round up + mantissa >>= 1 + if mantissa >= 2 << MANT_BITS { + mantissa = 1 << MANT_BITS + power2 += 1 + } + mantissa &~= 1 << MANT_BITS + if power2 >= INFINITE_POWER { + return INFINITE_POWER << MANT_BITS + } + return mantissa | u64(power2) << MANT_BITS +} + +// 128-bit truncated mantissas of 5^-342 to 5^308, with the most significant +// bit set. Generated by fast_float script/table_generation.py. +@(private="file", rodata) +_POW5_128 := [651][2]u64{ + {0xeef453d6923bd65a, 0x113faa2906a13b3f}, // 5^-342 + {0x9558b4661b6565f8, 0x4ac7ca59a424c507}, // 5^-341 + {0xbaaee17fa23ebf76, 0x5d79bcf00d2df649}, // 5^-340 + {0xe95a99df8ace6f53, 0xf4d82c2c107973dc}, // 5^-339 + {0x91d8a02bb6c10594, 0x79071b9b8a4be869}, // 5^-338 + {0xb64ec836a47146f9, 0x9748e2826cdee284}, // 5^-337 + {0xe3e27a444d8d98b7, 0xfd1b1b2308169b25}, // 5^-336 + {0x8e6d8c6ab0787f72, 0xfe30f0f5e50e20f7}, // 5^-335 + {0xb208ef855c969f4f, 0xbdbd2d335e51a935}, // 5^-334 + {0xde8b2b66b3bc4723, 0xad2c788035e61382}, // 5^-333 + {0x8b16fb203055ac76, 0x4c3bcb5021afcc31}, // 5^-332 + {0xaddcb9e83c6b1793, 0xdf4abe242a1bbf3d}, // 5^-331 + {0xd953e8624b85dd78, 0xd71d6dad34a2af0d}, // 5^-330 + {0x87d4713d6f33aa6b, 0x8672648c40e5ad68}, // 5^-329 + {0xa9c98d8ccb009506, 0x680efdaf511f18c2}, // 5^-328 + {0xd43bf0effdc0ba48, 0x0212bd1b2566def2}, // 5^-327 + {0x84a57695fe98746d, 0x014bb630f7604b57}, // 5^-326 + {0xa5ced43b7e3e9188, 0x419ea3bd35385e2d}, // 5^-325 + {0xcf42894a5dce35ea, 0x52064cac828675b9}, // 5^-324 + {0x818995ce7aa0e1b2, 0x7343efebd1940993}, // 5^-323 + {0xa1ebfb4219491a1f, 0x1014ebe6c5f90bf8}, // 5^-322 + {0xca66fa129f9b60a6, 0xd41a26e077774ef6}, // 5^-321 + {0xfd00b897478238d0, 0x8920b098955522b4}, // 5^-320 + {0x9e20735e8cb16382, 0x55b46e5f5d5535b0}, // 5^-319 + {0xc5a890362fddbc62, 0xeb2189f734aa831d}, // 5^-318 + {0xf712b443bbd52b7b, 0xa5e9ec7501d523e4}, // 5^-317 + {0x9a6bb0aa55653b2d, 0x47b233c92125366e}, // 5^-316 + {0xc1069cd4eabe89f8, 0x999ec0bb696e840a}, // 5^-315 + {0xf148440a256e2c76, 0xc00670ea43ca250d}, // 5^-314 + {0x96cd2a865764dbca, 0x380406926a5e5728}, // 5^-313 + {0xbc807527ed3e12bc, 0xc605083704f5ecf2}, // 5^-312 + {0xeba09271e88d976b, 0xf7864a44c633682e}, // 5^-311 + {0x93445b8731587ea3, 0x7ab3ee6afbe0211d}, // 5^-310 + {0xb8157268fdae9e4c, 0x5960ea05bad82964}, // 5^-309 + {0xe61acf033d1a45df, 0x6fb92487298e33bd}, // 5^-308 + {0x8fd0c16206306bab, 0xa5d3b6d479f8e056}, // 5^-307 + {0xb3c4f1ba87bc8696, 0x8f48a4899877186c}, // 5^-306 + {0xe0b62e2929aba83c, 0x331acdabfe94de87}, // 5^-305 + {0x8c71dcd9ba0b4925, 0x9ff0c08b7f1d0b14}, // 5^-304 + {0xaf8e5410288e1b6f, 0x07ecf0ae5ee44dd9}, // 5^-303 + {0xdb71e91432b1a24a, 0xc9e82cd9f69d6150}, // 5^-302 + {0x892731ac9faf056e, 0xbe311c083a225cd2}, // 5^-301 + {0xab70fe17c79ac6ca, 0x6dbd630a48aaf406}, // 5^-300 + {0xd64d3d9db981787d, 0x092cbbccdad5b108}, // 5^-299 + {0x85f0468293f0eb4e, 0x25bbf56008c58ea5}, // 5^-298 + {0xa76c582338ed2621, 0xaf2af2b80af6f24e}, // 5^-297 + {0xd1476e2c07286faa, 0x1af5af660db4aee1}, // 5^-296 + {0x82cca4db847945ca, 0x50d98d9fc890ed4d}, // 5^-295 + {0xa37fce126597973c, 0xe50ff107bab528a0}, // 5^-294 + {0xcc5fc196fefd7d0c, 0x1e53ed49a96272c8}, // 5^-293 + {0xff77b1fcbebcdc4f, 0x25e8e89c13bb0f7a}, // 5^-292 + {0x9faacf3df73609b1, 0x77b191618c54e9ac}, // 5^-291 + {0xc795830d75038c1d, 0xd59df5b9ef6a2417}, // 5^-290 + {0xf97ae3d0d2446f25, 0x4b0573286b44ad1d}, // 5^-289 + {0x9becce62836ac577, 0x4ee367f9430aec32}, // 5^-288 + {0xc2e801fb244576d5, 0x229c41f793cda73f}, // 5^-287 + {0xf3a20279ed56d48a, 0x6b43527578c1110f}, // 5^-286 + {0x9845418c345644d6, 0x830a13896b78aaa9}, // 5^-285 + {0xbe5691ef416bd60c, 0x23cc986bc656d553}, // 5^-284 + {0xedec366b11c6cb8f, 0x2cbfbe86b7ec8aa8}, // 5^-283 + {0x94b3a202eb1c3f39, 0x7bf7d71432f3d6a9}, // 5^-282 + {0xb9e08a83a5e34f07, 0xdaf5ccd93fb0cc53}, // 5^-281 + {0xe858ad248f5c22c9, 0xd1b3400f8f9cff68}, // 5^-280 + {0x91376c36d99995be, 0x23100809b9c21fa1}, // 5^-279 + {0xb58547448ffffb2d, 0xabd40a0c2832a78a}, // 5^-278 + {0xe2e69915b3fff9f9, 0x16c90c8f323f516c}, // 5^-277 + {0x8dd01fad907ffc3b, 0xae3da7d97f6792e3}, // 5^-276 + {0xb1442798f49ffb4a, 0x99cd11cfdf41779c}, // 5^-275 + {0xdd95317f31c7fa1d, 0x40405643d711d583}, // 5^-274 + {0x8a7d3eef7f1cfc52, 0x482835ea666b2572}, // 5^-273 + {0xad1c8eab5ee43b66, 0xda3243650005eecf}, // 5^-272 + {0xd863b256369d4a40, 0x90bed43e40076a82}, // 5^-271 + {0x873e4f75e2224e68, 0x5a7744a6e804a291}, // 5^-270 + {0xa90de3535aaae202, 0x711515d0a205cb36}, // 5^-269 + {0xd3515c2831559a83, 0x0d5a5b44ca873e03}, // 5^-268 + {0x8412d9991ed58091, 0xe858790afe9486c2}, // 5^-267 + {0xa5178fff668ae0b6, 0x626e974dbe39a872}, // 5^-266 + {0xce5d73ff402d98e3, 0xfb0a3d212dc8128f}, // 5^-265 + {0x80fa687f881c7f8e, 0x7ce66634bc9d0b99}, // 5^-264 + {0xa139029f6a239f72, 0x1c1fffc1ebc44e80}, // 5^-263 + {0xc987434744ac874e, 0xa327ffb266b56220}, // 5^-262 + {0xfbe9141915d7a922, 0x4bf1ff9f0062baa8}, // 5^-261 + {0x9d71ac8fada6c9b5, 0x6f773fc3603db4a9}, // 5^-260 + {0xc4ce17b399107c22, 0xcb550fb4384d21d3}, // 5^-259 + {0xf6019da07f549b2b, 0x7e2a53a146606a48}, // 5^-258 + {0x99c102844f94e0fb, 0x2eda7444cbfc426d}, // 5^-257 + {0xc0314325637a1939, 0xfa911155fefb5308}, // 5^-256 + {0xf03d93eebc589f88, 0x793555ab7eba27ca}, // 5^-255 + {0x96267c7535b763b5, 0x4bc1558b2f3458de}, // 5^-254 + {0xbbb01b9283253ca2, 0x9eb1aaedfb016f16}, // 5^-253 + {0xea9c227723ee8bcb, 0x465e15a979c1cadc}, // 5^-252 + {0x92a1958a7675175f, 0x0bfacd89ec191ec9}, // 5^-251 + {0xb749faed14125d36, 0xcef980ec671f667b}, // 5^-250 + {0xe51c79a85916f484, 0x82b7e12780e7401a}, // 5^-249 + {0x8f31cc0937ae58d2, 0xd1b2ecb8b0908810}, // 5^-248 + {0xb2fe3f0b8599ef07, 0x861fa7e6dcb4aa15}, // 5^-247 + {0xdfbdcece67006ac9, 0x67a791e093e1d49a}, // 5^-246 + {0x8bd6a141006042bd, 0xe0c8bb2c5c6d24e0}, // 5^-245 + {0xaecc49914078536d, 0x58fae9f773886e18}, // 5^-244 + {0xda7f5bf590966848, 0xaf39a475506a899e}, // 5^-243 + {0x888f99797a5e012d, 0x6d8406c952429603}, // 5^-242 + {0xaab37fd7d8f58178, 0xc8e5087ba6d33b83}, // 5^-241 + {0xd5605fcdcf32e1d6, 0xfb1e4a9a90880a64}, // 5^-240 + {0x855c3be0a17fcd26, 0x5cf2eea09a55067f}, // 5^-239 + {0xa6b34ad8c9dfc06f, 0xf42faa48c0ea481e}, // 5^-238 + {0xd0601d8efc57b08b, 0xf13b94daf124da26}, // 5^-237 + {0x823c12795db6ce57, 0x76c53d08d6b70858}, // 5^-236 + {0xa2cb1717b52481ed, 0x54768c4b0c64ca6e}, // 5^-235 + {0xcb7ddcdda26da268, 0xa9942f5dcf7dfd09}, // 5^-234 + {0xfe5d54150b090b02, 0xd3f93b35435d7c4c}, // 5^-233 + {0x9efa548d26e5a6e1, 0xc47bc5014a1a6daf}, // 5^-232 + {0xc6b8e9b0709f109a, 0x359ab6419ca1091b}, // 5^-231 + {0xf867241c8cc6d4c0, 0xc30163d203c94b62}, // 5^-230 + {0x9b407691d7fc44f8, 0x79e0de63425dcf1d}, // 5^-229 + {0xc21094364dfb5636, 0x985915fc12f542e4}, // 5^-228 + {0xf294b943e17a2bc4, 0x3e6f5b7b17b2939d}, // 5^-227 + {0x979cf3ca6cec5b5a, 0xa705992ceecf9c42}, // 5^-226 + {0xbd8430bd08277231, 0x50c6ff782a838353}, // 5^-225 + {0xece53cec4a314ebd, 0xa4f8bf5635246428}, // 5^-224 + {0x940f4613ae5ed136, 0x871b7795e136be99}, // 5^-223 + {0xb913179899f68584, 0x28e2557b59846e3f}, // 5^-222 + {0xe757dd7ec07426e5, 0x331aeada2fe589cf}, // 5^-221 + {0x9096ea6f3848984f, 0x3ff0d2c85def7621}, // 5^-220 + {0xb4bca50b065abe63, 0x0fed077a756b53a9}, // 5^-219 + {0xe1ebce4dc7f16dfb, 0xd3e8495912c62894}, // 5^-218 + {0x8d3360f09cf6e4bd, 0x64712dd7abbbd95c}, // 5^-217 + {0xb080392cc4349dec, 0xbd8d794d96aacfb3}, // 5^-216 + {0xdca04777f541c567, 0xecf0d7a0fc5583a0}, // 5^-215 + {0x89e42caaf9491b60, 0xf41686c49db57244}, // 5^-214 + {0xac5d37d5b79b6239, 0x311c2875c522ced5}, // 5^-213 + {0xd77485cb25823ac7, 0x7d633293366b828b}, // 5^-212 + {0x86a8d39ef77164bc, 0xae5dff9c02033197}, // 5^-211 + {0xa8530886b54dbdeb, 0xd9f57f830283fdfc}, // 5^-210 + {0xd267caa862a12d66, 0xd072df63c324fd7b}, // 5^-209 + {0x8380dea93da4bc60, 0x4247cb9e59f71e6d}, // 5^-208 + {0xa46116538d0deb78, 0x52d9be85f074e608}, // 5^-207 + {0xcd795be870516656, 0x67902e276c921f8b}, // 5^-206 + {0x806bd9714632dff6, 0x00ba1cd8a3db53b6}, // 5^-205 + {0xa086cfcd97bf97f3, 0x80e8a40eccd228a4}, // 5^-204 + {0xc8a883c0fdaf7df0, 0x6122cd128006b2cd}, // 5^-203 + {0xfad2a4b13d1b5d6c, 0x796b805720085f81}, // 5^-202 + {0x9cc3a6eec6311a63, 0xcbe3303674053bb0}, // 5^-201 + {0xc3f490aa77bd60fc, 0xbedbfc4411068a9c}, // 5^-200 + {0xf4f1b4d515acb93b, 0xee92fb5515482d44}, // 5^-199 + {0x991711052d8bf3c5, 0x751bdd152d4d1c4a}, // 5^-198 + {0xbf5cd54678eef0b6, 0xd262d45a78a0635d}, // 5^-197 + {0xef340a98172aace4, 0x86fb897116c87c34}, // 5^-196 + {0x9580869f0e7aac0e, 0xd45d35e6ae3d4da0}, // 5^-195 + {0xbae0a846d2195712, 0x8974836059cca109}, // 5^-194 + {0xe998d258869facd7, 0x2bd1a438703fc94b}, // 5^-193 + {0x91ff83775423cc06, 0x7b6306a34627ddcf}, // 5^-192 + {0xb67f6455292cbf08, 0x1a3bc84c17b1d542}, // 5^-191 + {0xe41f3d6a7377eeca, 0x20caba5f1d9e4a93}, // 5^-190 + {0x8e938662882af53e, 0x547eb47b7282ee9c}, // 5^-189 + {0xb23867fb2a35b28d, 0xe99e619a4f23aa43}, // 5^-188 + {0xdec681f9f4c31f31, 0x6405fa00e2ec94d4}, // 5^-187 + {0x8b3c113c38f9f37e, 0xde83bc408dd3dd04}, // 5^-186 + {0xae0b158b4738705e, 0x9624ab50b148d445}, // 5^-185 + {0xd98ddaee19068c76, 0x3badd624dd9b0957}, // 5^-184 + {0x87f8a8d4cfa417c9, 0xe54ca5d70a80e5d6}, // 5^-183 + {0xa9f6d30a038d1dbc, 0x5e9fcf4ccd211f4c}, // 5^-182 + {0xd47487cc8470652b, 0x7647c3200069671f}, // 5^-181 + {0x84c8d4dfd2c63f3b, 0x29ecd9f40041e073}, // 5^-180 + {0xa5fb0a17c777cf09, 0xf468107100525890}, // 5^-179 + {0xcf79cc9db955c2cc, 0x7182148d4066eeb4}, // 5^-178 + {0x81ac1fe293d599bf, 0xc6f14cd848405530}, // 5^-177 + {0xa21727db38cb002f, 0xb8ada00e5a506a7c}, // 5^-176 + {0xca9cf1d206fdc03b, 0xa6d90811f0e4851c}, // 5^-175 + {0xfd442e4688bd304a, 0x908f4a166d1da663}, // 5^-174 + {0x9e4a9cec15763e2e, 0x9a598e4e043287fe}, // 5^-173 + {0xc5dd44271ad3cdba, 0x40eff1e1853f29fd}, // 5^-172 + {0xf7549530e188c128, 0xd12bee59e68ef47c}, // 5^-171 + {0x9a94dd3e8cf578b9, 0x82bb74f8301958ce}, // 5^-170 + {0xc13a148e3032d6e7, 0xe36a52363c1faf01}, // 5^-169 + {0xf18899b1bc3f8ca1, 0xdc44e6c3cb279ac1}, // 5^-168 + {0x96f5600f15a7b7e5, 0x29ab103a5ef8c0b9}, // 5^-167 + {0xbcb2b812db11a5de, 0x7415d448f6b6f0e7}, // 5^-166 + {0xebdf661791d60f56, 0x111b495b3464ad21}, // 5^-165 + {0x936b9fcebb25c995, 0xcab10dd900beec34}, // 5^-164 + {0xb84687c269ef3bfb, 0x3d5d514f40eea742}, // 5^-163 + {0xe65829b3046b0afa, 0x0cb4a5a3112a5112}, // 5^-162 + {0x8ff71a0fe2c2e6dc, 0x47f0e785eaba72ab}, // 5^-161 + {0xb3f4e093db73a093, 0x59ed216765690f56}, // 5^-160 + {0xe0f218b8d25088b8, 0x306869c13ec3532c}, // 5^-159 + {0x8c974f7383725573, 0x1e414218c73a13fb}, // 5^-158 + {0xafbd2350644eeacf, 0xe5d1929ef90898fa}, // 5^-157 + {0xdbac6c247d62a583, 0xdf45f746b74abf39}, // 5^-156 + {0x894bc396ce5da772, 0x6b8bba8c328eb783}, // 5^-155 + {0xab9eb47c81f5114f, 0x066ea92f3f326564}, // 5^-154 + {0xd686619ba27255a2, 0xc80a537b0efefebd}, // 5^-153 + {0x8613fd0145877585, 0xbd06742ce95f5f36}, // 5^-152 + {0xa798fc4196e952e7, 0x2c48113823b73704}, // 5^-151 + {0xd17f3b51fca3a7a0, 0xf75a15862ca504c5}, // 5^-150 + {0x82ef85133de648c4, 0x9a984d73dbe722fb}, // 5^-149 + {0xa3ab66580d5fdaf5, 0xc13e60d0d2e0ebba}, // 5^-148 + {0xcc963fee10b7d1b3, 0x318df905079926a8}, // 5^-147 + {0xffbbcfe994e5c61f, 0xfdf17746497f7052}, // 5^-146 + {0x9fd561f1fd0f9bd3, 0xfeb6ea8bedefa633}, // 5^-145 + {0xc7caba6e7c5382c8, 0xfe64a52ee96b8fc0}, // 5^-144 + {0xf9bd690a1b68637b, 0x3dfdce7aa3c673b0}, // 5^-143 + {0x9c1661a651213e2d, 0x06bea10ca65c084e}, // 5^-142 + {0xc31bfa0fe5698db8, 0x486e494fcff30a62}, // 5^-141 + {0xf3e2f893dec3f126, 0x5a89dba3c3efccfa}, // 5^-140 + {0x986ddb5c6b3a76b7, 0xf89629465a75e01c}, // 5^-139 + {0xbe89523386091465, 0xf6bbb397f1135823}, // 5^-138 + {0xee2ba6c0678b597f, 0x746aa07ded582e2c}, // 5^-137 + {0x94db483840b717ef, 0xa8c2a44eb4571cdc}, // 5^-136 + {0xba121a4650e4ddeb, 0x92f34d62616ce413}, // 5^-135 + {0xe896a0d7e51e1566, 0x77b020baf9c81d17}, // 5^-134 + {0x915e2486ef32cd60, 0x0ace1474dc1d122e}, // 5^-133 + {0xb5b5ada8aaff80b8, 0x0d819992132456ba}, // 5^-132 + {0xe3231912d5bf60e6, 0x10e1fff697ed6c69}, // 5^-131 + {0x8df5efabc5979c8f, 0xca8d3ffa1ef463c1}, // 5^-130 + {0xb1736b96b6fd83b3, 0xbd308ff8a6b17cb2}, // 5^-129 + {0xddd0467c64bce4a0, 0xac7cb3f6d05ddbde}, // 5^-128 + {0x8aa22c0dbef60ee4, 0x6bcdf07a423aa96b}, // 5^-127 + {0xad4ab7112eb3929d, 0x86c16c98d2c953c6}, // 5^-126 + {0xd89d64d57a607744, 0xe871c7bf077ba8b7}, // 5^-125 + {0x87625f056c7c4a8b, 0x11471cd764ad4972}, // 5^-124 + {0xa93af6c6c79b5d2d, 0xd598e40d3dd89bcf}, // 5^-123 + {0xd389b47879823479, 0x4aff1d108d4ec2c3}, // 5^-122 + {0x843610cb4bf160cb, 0xcedf722a585139ba}, // 5^-121 + {0xa54394fe1eedb8fe, 0xc2974eb4ee658828}, // 5^-120 + {0xce947a3da6a9273e, 0x733d226229feea32}, // 5^-119 + {0x811ccc668829b887, 0x0806357d5a3f525f}, // 5^-118 + {0xa163ff802a3426a8, 0xca07c2dcb0cf26f7}, // 5^-117 + {0xc9bcff6034c13052, 0xfc89b393dd02f0b5}, // 5^-116 + {0xfc2c3f3841f17c67, 0xbbac2078d443ace2}, // 5^-115 + {0x9d9ba7832936edc0, 0xd54b944b84aa4c0d}, // 5^-114 + {0xc5029163f384a931, 0x0a9e795e65d4df11}, // 5^-113 + {0xf64335bcf065d37d, 0x4d4617b5ff4a16d5}, // 5^-112 + {0x99ea0196163fa42e, 0x504bced1bf8e4e45}, // 5^-111 + {0xc06481fb9bcf8d39, 0xe45ec2862f71e1d6}, // 5^-110 + {0xf07da27a82c37088, 0x5d767327bb4e5a4c}, // 5^-109 + {0x964e858c91ba2655, 0x3a6a07f8d510f86f}, // 5^-108 + {0xbbe226efb628afea, 0x890489f70a55368b}, // 5^-107 + {0xeadab0aba3b2dbe5, 0x2b45ac74ccea842e}, // 5^-106 + {0x92c8ae6b464fc96f, 0x3b0b8bc90012929d}, // 5^-105 + {0xb77ada0617e3bbcb, 0x09ce6ebb40173744}, // 5^-104 + {0xe55990879ddcaabd, 0xcc420a6a101d0515}, // 5^-103 + {0x8f57fa54c2a9eab6, 0x9fa946824a12232d}, // 5^-102 + {0xb32df8e9f3546564, 0x47939822dc96abf9}, // 5^-101 + {0xdff9772470297ebd, 0x59787e2b93bc56f7}, // 5^-100 + {0x8bfbea76c619ef36, 0x57eb4edb3c55b65a}, // 5^-99 + {0xaefae51477a06b03, 0xede622920b6b23f1}, // 5^-98 + {0xdab99e59958885c4, 0xe95fab368e45eced}, // 5^-97 + {0x88b402f7fd75539b, 0x11dbcb0218ebb414}, // 5^-96 + {0xaae103b5fcd2a881, 0xd652bdc29f26a119}, // 5^-95 + {0xd59944a37c0752a2, 0x4be76d3346f0495f}, // 5^-94 + {0x857fcae62d8493a5, 0x6f70a4400c562ddb}, // 5^-93 + {0xa6dfbd9fb8e5b88e, 0xcb4ccd500f6bb952}, // 5^-92 + {0xd097ad07a71f26b2, 0x7e2000a41346a7a7}, // 5^-91 + {0x825ecc24c873782f, 0x8ed400668c0c28c8}, // 5^-90 + {0xa2f67f2dfa90563b, 0x728900802f0f32fa}, // 5^-89 + {0xcbb41ef979346bca, 0x4f2b40a03ad2ffb9}, // 5^-88 + {0xfea126b7d78186bc, 0xe2f610c84987bfa8}, // 5^-87 + {0x9f24b832e6b0f436, 0x0dd9ca7d2df4d7c9}, // 5^-86 + {0xc6ede63fa05d3143, 0x91503d1c79720dbb}, // 5^-85 + {0xf8a95fcf88747d94, 0x75a44c6397ce912a}, // 5^-84 + {0x9b69dbe1b548ce7c, 0xc986afbe3ee11aba}, // 5^-83 + {0xc24452da229b021b, 0xfbe85badce996168}, // 5^-82 + {0xf2d56790ab41c2a2, 0xfae27299423fb9c3}, // 5^-81 + {0x97c560ba6b0919a5, 0xdccd879fc967d41a}, // 5^-80 + {0xbdb6b8e905cb600f, 0x5400e987bbc1c920}, // 5^-79 + {0xed246723473e3813, 0x290123e9aab23b68}, // 5^-78 + {0x9436c0760c86e30b, 0xf9a0b6720aaf6521}, // 5^-77 + {0xb94470938fa89bce, 0xf808e40e8d5b3e69}, // 5^-76 + {0xe7958cb87392c2c2, 0xb60b1d1230b20e04}, // 5^-75 + {0x90bd77f3483bb9b9, 0xb1c6f22b5e6f48c2}, // 5^-74 + {0xb4ecd5f01a4aa828, 0x1e38aeb6360b1af3}, // 5^-73 + {0xe2280b6c20dd5232, 0x25c6da63c38de1b0}, // 5^-72 + {0x8d590723948a535f, 0x579c487e5a38ad0e}, // 5^-71 + {0xb0af48ec79ace837, 0x2d835a9df0c6d851}, // 5^-70 + {0xdcdb1b2798182244, 0xf8e431456cf88e65}, // 5^-69 + {0x8a08f0f8bf0f156b, 0x1b8e9ecb641b58ff}, // 5^-68 + {0xac8b2d36eed2dac5, 0xe272467e3d222f3f}, // 5^-67 + {0xd7adf884aa879177, 0x5b0ed81dcc6abb0f}, // 5^-66 + {0x86ccbb52ea94baea, 0x98e947129fc2b4e9}, // 5^-65 + {0xa87fea27a539e9a5, 0x3f2398d747b36224}, // 5^-64 + {0xd29fe4b18e88640e, 0x8eec7f0d19a03aad}, // 5^-63 + {0x83a3eeeef9153e89, 0x1953cf68300424ac}, // 5^-62 + {0xa48ceaaab75a8e2b, 0x5fa8c3423c052dd7}, // 5^-61 + {0xcdb02555653131b6, 0x3792f412cb06794d}, // 5^-60 + {0x808e17555f3ebf11, 0xe2bbd88bbee40bd0}, // 5^-59 + {0xa0b19d2ab70e6ed6, 0x5b6aceaeae9d0ec4}, // 5^-58 + {0xc8de047564d20a8b, 0xf245825a5a445275}, // 5^-57 + {0xfb158592be068d2e, 0xeed6e2f0f0d56712}, // 5^-56 + {0x9ced737bb6c4183d, 0x55464dd69685606b}, // 5^-55 + {0xc428d05aa4751e4c, 0xaa97e14c3c26b886}, // 5^-54 + {0xf53304714d9265df, 0xd53dd99f4b3066a8}, // 5^-53 + {0x993fe2c6d07b7fab, 0xe546a8038efe4029}, // 5^-52 + {0xbf8fdb78849a5f96, 0xde98520472bdd033}, // 5^-51 + {0xef73d256a5c0f77c, 0x963e66858f6d4440}, // 5^-50 + {0x95a8637627989aad, 0xdde7001379a44aa8}, // 5^-49 + {0xbb127c53b17ec159, 0x5560c018580d5d52}, // 5^-48 + {0xe9d71b689dde71af, 0xaab8f01e6e10b4a6}, // 5^-47 + {0x9226712162ab070d, 0xcab3961304ca70e8}, // 5^-46 + {0xb6b00d69bb55c8d1, 0x3d607b97c5fd0d22}, // 5^-45 + {0xe45c10c42a2b3b05, 0x8cb89a7db77c506a}, // 5^-44 + {0x8eb98a7a9a5b04e3, 0x77f3608e92adb242}, // 5^-43 + {0xb267ed1940f1c61c, 0x55f038b237591ed3}, // 5^-42 + {0xdf01e85f912e37a3, 0x6b6c46dec52f6688}, // 5^-41 + {0x8b61313bbabce2c6, 0x2323ac4b3b3da015}, // 5^-40 + {0xae397d8aa96c1b77, 0xabec975e0a0d081a}, // 5^-39 + {0xd9c7dced53c72255, 0x96e7bd358c904a21}, // 5^-38 + {0x881cea14545c7575, 0x7e50d64177da2e54}, // 5^-37 + {0xaa242499697392d2, 0xdde50bd1d5d0b9e9}, // 5^-36 + {0xd4ad2dbfc3d07787, 0x955e4ec64b44e864}, // 5^-35 + {0x84ec3c97da624ab4, 0xbd5af13bef0b113e}, // 5^-34 + {0xa6274bbdd0fadd61, 0xecb1ad8aeacdd58e}, // 5^-33 + {0xcfb11ead453994ba, 0x67de18eda5814af2}, // 5^-32 + {0x81ceb32c4b43fcf4, 0x80eacf948770ced7}, // 5^-31 + {0xa2425ff75e14fc31, 0xa1258379a94d028d}, // 5^-30 + {0xcad2f7f5359a3b3e, 0x096ee45813a04330}, // 5^-29 + {0xfd87b5f28300ca0d, 0x8bca9d6e188853fc}, // 5^-28 + {0x9e74d1b791e07e48, 0x775ea264cf55347e}, // 5^-27 + {0xc612062576589dda, 0x95364afe032a819e}, // 5^-26 + {0xf79687aed3eec551, 0x3a83ddbd83f52205}, // 5^-25 + {0x9abe14cd44753b52, 0xc4926a9672793543}, // 5^-24 + {0xc16d9a0095928a27, 0x75b7053c0f178294}, // 5^-23 + {0xf1c90080baf72cb1, 0x5324c68b12dd6339}, // 5^-22 + {0x971da05074da7bee, 0xd3f6fc16ebca5e04}, // 5^-21 + {0xbce5086492111aea, 0x88f4bb1ca6bcf585}, // 5^-20 + {0xec1e4a7db69561a5, 0x2b31e9e3d06c32e6}, // 5^-19 + {0x9392ee8e921d5d07, 0x3aff322e62439fd0}, // 5^-18 + {0xb877aa3236a4b449, 0x09befeb9fad487c3}, // 5^-17 + {0xe69594bec44de15b, 0x4c2ebe687989a9b4}, // 5^-16 + {0x901d7cf73ab0acd9, 0x0f9d37014bf60a11}, // 5^-15 + {0xb424dc35095cd80f, 0x538484c19ef38c95}, // 5^-14 + {0xe12e13424bb40e13, 0x2865a5f206b06fba}, // 5^-13 + {0x8cbccc096f5088cb, 0xf93f87b7442e45d4}, // 5^-12 + {0xafebff0bcb24aafe, 0xf78f69a51539d749}, // 5^-11 + {0xdbe6fecebdedd5be, 0xb573440e5a884d1c}, // 5^-10 + {0x89705f4136b4a597, 0x31680a88f8953031}, // 5^-9 + {0xabcc77118461cefc, 0xfdc20d2b36ba7c3e}, // 5^-8 + {0xd6bf94d5e57a42bc, 0x3d32907604691b4d}, // 5^-7 + {0x8637bd05af6c69b5, 0xa63f9a49c2c1b110}, // 5^-6 + {0xa7c5ac471b478423, 0x0fcf80dc33721d54}, // 5^-5 + {0xd1b71758e219652b, 0xd3c36113404ea4a9}, // 5^-4 + {0x83126e978d4fdf3b, 0x645a1cac083126ea}, // 5^-3 + {0xa3d70a3d70a3d70a, 0x3d70a3d70a3d70a4}, // 5^-2 + {0xcccccccccccccccc, 0xcccccccccccccccd}, // 5^-1 + {0x8000000000000000, 0x0000000000000000}, // 5^0 + {0xa000000000000000, 0x0000000000000000}, // 5^1 + {0xc800000000000000, 0x0000000000000000}, // 5^2 + {0xfa00000000000000, 0x0000000000000000}, // 5^3 + {0x9c40000000000000, 0x0000000000000000}, // 5^4 + {0xc350000000000000, 0x0000000000000000}, // 5^5 + {0xf424000000000000, 0x0000000000000000}, // 5^6 + {0x9896800000000000, 0x0000000000000000}, // 5^7 + {0xbebc200000000000, 0x0000000000000000}, // 5^8 + {0xee6b280000000000, 0x0000000000000000}, // 5^9 + {0x9502f90000000000, 0x0000000000000000}, // 5^10 + {0xba43b74000000000, 0x0000000000000000}, // 5^11 + {0xe8d4a51000000000, 0x0000000000000000}, // 5^12 + {0x9184e72a00000000, 0x0000000000000000}, // 5^13 + {0xb5e620f480000000, 0x0000000000000000}, // 5^14 + {0xe35fa931a0000000, 0x0000000000000000}, // 5^15 + {0x8e1bc9bf04000000, 0x0000000000000000}, // 5^16 + {0xb1a2bc2ec5000000, 0x0000000000000000}, // 5^17 + {0xde0b6b3a76400000, 0x0000000000000000}, // 5^18 + {0x8ac7230489e80000, 0x0000000000000000}, // 5^19 + {0xad78ebc5ac620000, 0x0000000000000000}, // 5^20 + {0xd8d726b7177a8000, 0x0000000000000000}, // 5^21 + {0x878678326eac9000, 0x0000000000000000}, // 5^22 + {0xa968163f0a57b400, 0x0000000000000000}, // 5^23 + {0xd3c21bcecceda100, 0x0000000000000000}, // 5^24 + {0x84595161401484a0, 0x0000000000000000}, // 5^25 + {0xa56fa5b99019a5c8, 0x0000000000000000}, // 5^26 + {0xcecb8f27f4200f3a, 0x0000000000000000}, // 5^27 + {0x813f3978f8940984, 0x4000000000000000}, // 5^28 + {0xa18f07d736b90be5, 0x5000000000000000}, // 5^29 + {0xc9f2c9cd04674ede, 0xa400000000000000}, // 5^30 + {0xfc6f7c4045812296, 0x4d00000000000000}, // 5^31 + {0x9dc5ada82b70b59d, 0xf020000000000000}, // 5^32 + {0xc5371912364ce305, 0x6c28000000000000}, // 5^33 + {0xf684df56c3e01bc6, 0xc732000000000000}, // 5^34 + {0x9a130b963a6c115c, 0x3c7f400000000000}, // 5^35 + {0xc097ce7bc90715b3, 0x4b9f100000000000}, // 5^36 + {0xf0bdc21abb48db20, 0x1e86d40000000000}, // 5^37 + {0x96769950b50d88f4, 0x1314448000000000}, // 5^38 + {0xbc143fa4e250eb31, 0x17d955a000000000}, // 5^39 + {0xeb194f8e1ae525fd, 0x5dcfab0800000000}, // 5^40 + {0x92efd1b8d0cf37be, 0x5aa1cae500000000}, // 5^41 + {0xb7abc627050305ad, 0xf14a3d9e40000000}, // 5^42 + {0xe596b7b0c643c719, 0x6d9ccd05d0000000}, // 5^43 + {0x8f7e32ce7bea5c6f, 0xe4820023a2000000}, // 5^44 + {0xb35dbf821ae4f38b, 0xdda2802c8a800000}, // 5^45 + {0xe0352f62a19e306e, 0xd50b2037ad200000}, // 5^46 + {0x8c213d9da502de45, 0x4526f422cc340000}, // 5^47 + {0xaf298d050e4395d6, 0x9670b12b7f410000}, // 5^48 + {0xdaf3f04651d47b4c, 0x3c0cdd765f114000}, // 5^49 + {0x88d8762bf324cd0f, 0xa5880a69fb6ac800}, // 5^50 + {0xab0e93b6efee0053, 0x8eea0d047a457a00}, // 5^51 + {0xd5d238a4abe98068, 0x72a4904598d6d880}, // 5^52 + {0x85a36366eb71f041, 0x47a6da2b7f864750}, // 5^53 + {0xa70c3c40a64e6c51, 0x999090b65f67d924}, // 5^54 + {0xd0cf4b50cfe20765, 0xfff4b4e3f741cf6d}, // 5^55 + {0x82818f1281ed449f, 0xbff8f10e7a8921a4}, // 5^56 + {0xa321f2d7226895c7, 0xaff72d52192b6a0d}, // 5^57 + {0xcbea6f8ceb02bb39, 0x9bf4f8a69f764490}, // 5^58 + {0xfee50b7025c36a08, 0x02f236d04753d5b4}, // 5^59 + {0x9f4f2726179a2245, 0x01d762422c946590}, // 5^60 + {0xc722f0ef9d80aad6, 0x424d3ad2b7b97ef5}, // 5^61 + {0xf8ebad2b84e0d58b, 0xd2e0898765a7deb2}, // 5^62 + {0x9b934c3b330c8577, 0x63cc55f49f88eb2f}, // 5^63 + {0xc2781f49ffcfa6d5, 0x3cbf6b71c76b25fb}, // 5^64 + {0xf316271c7fc3908a, 0x8bef464e3945ef7a}, // 5^65 + {0x97edd871cfda3a56, 0x97758bf0e3cbb5ac}, // 5^66 + {0xbde94e8e43d0c8ec, 0x3d52eeed1cbea317}, // 5^67 + {0xed63a231d4c4fb27, 0x4ca7aaa863ee4bdd}, // 5^68 + {0x945e455f24fb1cf8, 0x8fe8caa93e74ef6a}, // 5^69 + {0xb975d6b6ee39e436, 0xb3e2fd538e122b44}, // 5^70 + {0xe7d34c64a9c85d44, 0x60dbbca87196b616}, // 5^71 + {0x90e40fbeea1d3a4a, 0xbc8955e946fe31cd}, // 5^72 + {0xb51d13aea4a488dd, 0x6babab6398bdbe41}, // 5^73 + {0xe264589a4dcdab14, 0xc696963c7eed2dd1}, // 5^74 + {0x8d7eb76070a08aec, 0xfc1e1de5cf543ca2}, // 5^75 + {0xb0de65388cc8ada8, 0x3b25a55f43294bcb}, // 5^76 + {0xdd15fe86affad912, 0x49ef0eb713f39ebe}, // 5^77 + {0x8a2dbf142dfcc7ab, 0x6e3569326c784337}, // 5^78 + {0xacb92ed9397bf996, 0x49c2c37f07965404}, // 5^79 + {0xd7e77a8f87daf7fb, 0xdc33745ec97be906}, // 5^80 + {0x86f0ac99b4e8dafd, 0x69a028bb3ded71a3}, // 5^81 + {0xa8acd7c0222311bc, 0xc40832ea0d68ce0c}, // 5^82 + {0xd2d80db02aabd62b, 0xf50a3fa490c30190}, // 5^83 + {0x83c7088e1aab65db, 0x792667c6da79e0fa}, // 5^84 + {0xa4b8cab1a1563f52, 0x577001b891185938}, // 5^85 + {0xcde6fd5e09abcf26, 0xed4c0226b55e6f86}, // 5^86 + {0x80b05e5ac60b6178, 0x544f8158315b05b4}, // 5^87 + {0xa0dc75f1778e39d6, 0x696361ae3db1c721}, // 5^88 + {0xc913936dd571c84c, 0x03bc3a19cd1e38e9}, // 5^89 + {0xfb5878494ace3a5f, 0x04ab48a04065c723}, // 5^90 + {0x9d174b2dcec0e47b, 0x62eb0d64283f9c76}, // 5^91 + {0xc45d1df942711d9a, 0x3ba5d0bd324f8394}, // 5^92 + {0xf5746577930d6500, 0xca8f44ec7ee36479}, // 5^93 + {0x9968bf6abbe85f20, 0x7e998b13cf4e1ecb}, // 5^94 + {0xbfc2ef456ae276e8, 0x9e3fedd8c321a67e}, // 5^95 + {0xefb3ab16c59b14a2, 0xc5cfe94ef3ea101e}, // 5^96 + {0x95d04aee3b80ece5, 0xbba1f1d158724a12}, // 5^97 + {0xbb445da9ca61281f, 0x2a8a6e45ae8edc97}, // 5^98 + {0xea1575143cf97226, 0xf52d09d71a3293bd}, // 5^99 + {0x924d692ca61be758, 0x593c2626705f9c56}, // 5^100 + {0xb6e0c377cfa2e12e, 0x6f8b2fb00c77836c}, // 5^101 + {0xe498f455c38b997a, 0x0b6dfb9c0f956447}, // 5^102 + {0x8edf98b59a373fec, 0x4724bd4189bd5eac}, // 5^103 + {0xb2977ee300c50fe7, 0x58edec91ec2cb657}, // 5^104 + {0xdf3d5e9bc0f653e1, 0x2f2967b66737e3ed}, // 5^105 + {0x8b865b215899f46c, 0xbd79e0d20082ee74}, // 5^106 + {0xae67f1e9aec07187, 0xecd8590680a3aa11}, // 5^107 + {0xda01ee641a708de9, 0xe80e6f4820cc9495}, // 5^108 + {0x884134fe908658b2, 0x3109058d147fdcdd}, // 5^109 + {0xaa51823e34a7eede, 0xbd4b46f0599fd415}, // 5^110 + {0xd4e5e2cdc1d1ea96, 0x6c9e18ac7007c91a}, // 5^111 + {0x850fadc09923329e, 0x03e2cf6bc604ddb0}, // 5^112 + {0xa6539930bf6bff45, 0x84db8346b786151c}, // 5^113 + {0xcfe87f7cef46ff16, 0xe612641865679a63}, // 5^114 + {0x81f14fae158c5f6e, 0x4fcb7e8f3f60c07e}, // 5^115 + {0xa26da3999aef7749, 0xe3be5e330f38f09d}, // 5^116 + {0xcb090c8001ab551c, 0x5cadf5bfd3072cc5}, // 5^117 + {0xfdcb4fa002162a63, 0x73d9732fc7c8f7f6}, // 5^118 + {0x9e9f11c4014dda7e, 0x2867e7fddcdd9afa}, // 5^119 + {0xc646d63501a1511d, 0xb281e1fd541501b8}, // 5^120 + {0xf7d88bc24209a565, 0x1f225a7ca91a4226}, // 5^121 + {0x9ae757596946075f, 0x3375788de9b06958}, // 5^122 + {0xc1a12d2fc3978937, 0x0052d6b1641c83ae}, // 5^123 + {0xf209787bb47d6b84, 0xc0678c5dbd23a49a}, // 5^124 + {0x9745eb4d50ce6332, 0xf840b7ba963646e0}, // 5^125 + {0xbd176620a501fbff, 0xb650e5a93bc3d898}, // 5^126 + {0xec5d3fa8ce427aff, 0xa3e51f138ab4cebe}, // 5^127 + {0x93ba47c980e98cdf, 0xc66f336c36b10137}, // 5^128 + {0xb8a8d9bbe123f017, 0xb80b0047445d4184}, // 5^129 + {0xe6d3102ad96cec1d, 0xa60dc059157491e5}, // 5^130 + {0x9043ea1ac7e41392, 0x87c89837ad68db2f}, // 5^131 + {0xb454e4a179dd1877, 0x29babe4598c311fb}, // 5^132 + {0xe16a1dc9d8545e94, 0xf4296dd6fef3d67a}, // 5^133 + {0x8ce2529e2734bb1d, 0x1899e4a65f58660c}, // 5^134 + {0xb01ae745b101e9e4, 0x5ec05dcff72e7f8f}, // 5^135 + {0xdc21a1171d42645d, 0x76707543f4fa1f73}, // 5^136 + {0x899504ae72497eba, 0x6a06494a791c53a8}, // 5^137 + {0xabfa45da0edbde69, 0x0487db9d17636892}, // 5^138 + {0xd6f8d7509292d603, 0x45a9d2845d3c42b6}, // 5^139 + {0x865b86925b9bc5c2, 0x0b8a2392ba45a9b2}, // 5^140 + {0xa7f26836f282b732, 0x8e6cac7768d7141e}, // 5^141 + {0xd1ef0244af2364ff, 0x3207d795430cd926}, // 5^142 + {0x8335616aed761f1f, 0x7f44e6bd49e807b8}, // 5^143 + {0xa402b9c5a8d3a6e7, 0x5f16206c9c6209a6}, // 5^144 + {0xcd036837130890a1, 0x36dba887c37a8c0f}, // 5^145 + {0x802221226be55a64, 0xc2494954da2c9789}, // 5^146 + {0xa02aa96b06deb0fd, 0xf2db9baa10b7bd6c}, // 5^147 + {0xc83553c5c8965d3d, 0x6f92829494e5acc7}, // 5^148 + {0xfa42a8b73abbf48c, 0xcb772339ba1f17f9}, // 5^149 + {0x9c69a97284b578d7, 0xff2a760414536efb}, // 5^150 + {0xc38413cf25e2d70d, 0xfef5138519684aba}, // 5^151 + {0xf46518c2ef5b8cd1, 0x7eb258665fc25d69}, // 5^152 + {0x98bf2f79d5993802, 0xef2f773ffbd97a61}, // 5^153 + {0xbeeefb584aff8603, 0xaafb550ffacfd8fa}, // 5^154 + {0xeeaaba2e5dbf6784, 0x95ba2a53f983cf38}, // 5^155 + {0x952ab45cfa97a0b2, 0xdd945a747bf26183}, // 5^156 + {0xba756174393d88df, 0x94f971119aeef9e4}, // 5^157 + {0xe912b9d1478ceb17, 0x7a37cd5601aab85d}, // 5^158 + {0x91abb422ccb812ee, 0xac62e055c10ab33a}, // 5^159 + {0xb616a12b7fe617aa, 0x577b986b314d6009}, // 5^160 + {0xe39c49765fdf9d94, 0xed5a7e85fda0b80b}, // 5^161 + {0x8e41ade9fbebc27d, 0x14588f13be847307}, // 5^162 + {0xb1d219647ae6b31c, 0x596eb2d8ae258fc8}, // 5^163 + {0xde469fbd99a05fe3, 0x6fca5f8ed9aef3bb}, // 5^164 + {0x8aec23d680043bee, 0x25de7bb9480d5854}, // 5^165 + {0xada72ccc20054ae9, 0xaf561aa79a10ae6a}, // 5^166 + {0xd910f7ff28069da4, 0x1b2ba1518094da04}, // 5^167 + {0x87aa9aff79042286, 0x90fb44d2f05d0842}, // 5^168 + {0xa99541bf57452b28, 0x353a1607ac744a53}, // 5^169 + {0xd3fa922f2d1675f2, 0x42889b8997915ce8}, // 5^170 + {0x847c9b5d7c2e09b7, 0x69956135febada11}, // 5^171 + {0xa59bc234db398c25, 0x43fab9837e699095}, // 5^172 + {0xcf02b2c21207ef2e, 0x94f967e45e03f4bb}, // 5^173 + {0x8161afb94b44f57d, 0x1d1be0eebac278f5}, // 5^174 + {0xa1ba1ba79e1632dc, 0x6462d92a69731732}, // 5^175 + {0xca28a291859bbf93, 0x7d7b8f7503cfdcfe}, // 5^176 + {0xfcb2cb35e702af78, 0x5cda735244c3d43e}, // 5^177 + {0x9defbf01b061adab, 0x3a0888136afa64a7}, // 5^178 + {0xc56baec21c7a1916, 0x088aaa1845b8fdd0}, // 5^179 + {0xf6c69a72a3989f5b, 0x8aad549e57273d45}, // 5^180 + {0x9a3c2087a63f6399, 0x36ac54e2f678864b}, // 5^181 + {0xc0cb28a98fcf3c7f, 0x84576a1bb416a7dd}, // 5^182 + {0xf0fdf2d3f3c30b9f, 0x656d44a2a11c51d5}, // 5^183 + {0x969eb7c47859e743, 0x9f644ae5a4b1b325}, // 5^184 + {0xbc4665b596706114, 0x873d5d9f0dde1fee}, // 5^185 + {0xeb57ff22fc0c7959, 0xa90cb506d155a7ea}, // 5^186 + {0x9316ff75dd87cbd8, 0x09a7f12442d588f2}, // 5^187 + {0xb7dcbf5354e9bece, 0x0c11ed6d538aeb2f}, // 5^188 + {0xe5d3ef282a242e81, 0x8f1668c8a86da5fa}, // 5^189 + {0x8fa475791a569d10, 0xf96e017d694487bc}, // 5^190 + {0xb38d92d760ec4455, 0x37c981dcc395a9ac}, // 5^191 + {0xe070f78d3927556a, 0x85bbe253f47b1417}, // 5^192 + {0x8c469ab843b89562, 0x93956d7478ccec8e}, // 5^193 + {0xaf58416654a6babb, 0x387ac8d1970027b2}, // 5^194 + {0xdb2e51bfe9d0696a, 0x06997b05fcc0319e}, // 5^195 + {0x88fcf317f22241e2, 0x441fece3bdf81f03}, // 5^196 + {0xab3c2fddeeaad25a, 0xd527e81cad7626c3}, // 5^197 + {0xd60b3bd56a5586f1, 0x8a71e223d8d3b074}, // 5^198 + {0x85c7056562757456, 0xf6872d5667844e49}, // 5^199 + {0xa738c6bebb12d16c, 0xb428f8ac016561db}, // 5^200 + {0xd106f86e69d785c7, 0xe13336d701beba52}, // 5^201 + {0x82a45b450226b39c, 0xecc0024661173473}, // 5^202 + {0xa34d721642b06084, 0x27f002d7f95d0190}, // 5^203 + {0xcc20ce9bd35c78a5, 0x31ec038df7b441f4}, // 5^204 + {0xff290242c83396ce, 0x7e67047175a15271}, // 5^205 + {0x9f79a169bd203e41, 0x0f0062c6e984d386}, // 5^206 + {0xc75809c42c684dd1, 0x52c07b78a3e60868}, // 5^207 + {0xf92e0c3537826145, 0xa7709a56ccdf8a82}, // 5^208 + {0x9bbcc7a142b17ccb, 0x88a66076400bb691}, // 5^209 + {0xc2abf989935ddbfe, 0x6acff893d00ea435}, // 5^210 + {0xf356f7ebf83552fe, 0x0583f6b8c4124d43}, // 5^211 + {0x98165af37b2153de, 0xc3727a337a8b704a}, // 5^212 + {0xbe1bf1b059e9a8d6, 0x744f18c0592e4c5c}, // 5^213 + {0xeda2ee1c7064130c, 0x1162def06f79df73}, // 5^214 + {0x9485d4d1c63e8be7, 0x8addcb5645ac2ba8}, // 5^215 + {0xb9a74a0637ce2ee1, 0x6d953e2bd7173692}, // 5^216 + {0xe8111c87c5c1ba99, 0xc8fa8db6ccdd0437}, // 5^217 + {0x910ab1d4db9914a0, 0x1d9c9892400a22a2}, // 5^218 + {0xb54d5e4a127f59c8, 0x2503beb6d00cab4b}, // 5^219 + {0xe2a0b5dc971f303a, 0x2e44ae64840fd61d}, // 5^220 + {0x8da471a9de737e24, 0x5ceaecfed289e5d2}, // 5^221 + {0xb10d8e1456105dad, 0x7425a83e872c5f47}, // 5^222 + {0xdd50f1996b947518, 0xd12f124e28f77719}, // 5^223 + {0x8a5296ffe33cc92f, 0x82bd6b70d99aaa6f}, // 5^224 + {0xace73cbfdc0bfb7b, 0x636cc64d1001550b}, // 5^225 + {0xd8210befd30efa5a, 0x3c47f7e05401aa4e}, // 5^226 + {0x8714a775e3e95c78, 0x65acfaec34810a71}, // 5^227 + {0xa8d9d1535ce3b396, 0x7f1839a741a14d0d}, // 5^228 + {0xd31045a8341ca07c, 0x1ede48111209a050}, // 5^229 + {0x83ea2b892091e44d, 0x934aed0aab460432}, // 5^230 + {0xa4e4b66b68b65d60, 0xf81da84d5617853f}, // 5^231 + {0xce1de40642e3f4b9, 0x36251260ab9d668e}, // 5^232 + {0x80d2ae83e9ce78f3, 0xc1d72b7c6b426019}, // 5^233 + {0xa1075a24e4421730, 0xb24cf65b8612f81f}, // 5^234 + {0xc94930ae1d529cfc, 0xdee033f26797b627}, // 5^235 + {0xfb9b7cd9a4a7443c, 0x169840ef017da3b1}, // 5^236 + {0x9d412e0806e88aa5, 0x8e1f289560ee864e}, // 5^237 + {0xc491798a08a2ad4e, 0xf1a6f2bab92a27e2}, // 5^238 + {0xf5b5d7ec8acb58a2, 0xae10af696774b1db}, // 5^239 + {0x9991a6f3d6bf1765, 0xacca6da1e0a8ef29}, // 5^240 + {0xbff610b0cc6edd3f, 0x17fd090a58d32af3}, // 5^241 + {0xeff394dcff8a948e, 0xddfc4b4cef07f5b0}, // 5^242 + {0x95f83d0a1fb69cd9, 0x4abdaf101564f98e}, // 5^243 + {0xbb764c4ca7a4440f, 0x9d6d1ad41abe37f1}, // 5^244 + {0xea53df5fd18d5513, 0x84c86189216dc5ed}, // 5^245 + {0x92746b9be2f8552c, 0x32fd3cf5b4e49bb4}, // 5^246 + {0xb7118682dbb66a77, 0x3fbc8c33221dc2a1}, // 5^247 + {0xe4d5e82392a40515, 0x0fabaf3feaa5334a}, // 5^248 + {0x8f05b1163ba6832d, 0x29cb4d87f2a7400e}, // 5^249 + {0xb2c71d5bca9023f8, 0x743e20e9ef511012}, // 5^250 + {0xdf78e4b2bd342cf6, 0x914da9246b255416}, // 5^251 + {0x8bab8eefb6409c1a, 0x1ad089b6c2f7548e}, // 5^252 + {0xae9672aba3d0c320, 0xa184ac2473b529b1}, // 5^253 + {0xda3c0f568cc4f3e8, 0xc9e5d72d90a2741e}, // 5^254 + {0x8865899617fb1871, 0x7e2fa67c7a658892}, // 5^255 + {0xaa7eebfb9df9de8d, 0xddbb901b98feeab7}, // 5^256 + {0xd51ea6fa85785631, 0x552a74227f3ea565}, // 5^257 + {0x8533285c936b35de, 0xd53a88958f87275f}, // 5^258 + {0xa67ff273b8460356, 0x8a892abaf368f137}, // 5^259 + {0xd01fef10a657842c, 0x2d2b7569b0432d85}, // 5^260 + {0x8213f56a67f6b29b, 0x9c3b29620e29fc73}, // 5^261 + {0xa298f2c501f45f42, 0x8349f3ba91b47b8f}, // 5^262 + {0xcb3f2f7642717713, 0x241c70a936219a73}, // 5^263 + {0xfe0efb53d30dd4d7, 0xed238cd383aa0110}, // 5^264 + {0x9ec95d1463e8a506, 0xf4363804324a40aa}, // 5^265 + {0xc67bb4597ce2ce48, 0xb143c6053edcd0d5}, // 5^266 + {0xf81aa16fdc1b81da, 0xdd94b7868e94050a}, // 5^267 + {0x9b10a4e5e9913128, 0xca7cf2b4191c8326}, // 5^268 + {0xc1d4ce1f63f57d72, 0xfd1c2f611f63a3f0}, // 5^269 + {0xf24a01a73cf2dccf, 0xbc633b39673c8cec}, // 5^270 + {0x976e41088617ca01, 0xd5be0503e085d813}, // 5^271 + {0xbd49d14aa79dbc82, 0x4b2d8644d8a74e18}, // 5^272 + {0xec9c459d51852ba2, 0xddf8e7d60ed1219e}, // 5^273 + {0x93e1ab8252f33b45, 0xcabb90e5c942b503}, // 5^274 + {0xb8da1662e7b00a17, 0x3d6a751f3b936243}, // 5^275 + {0xe7109bfba19c0c9d, 0x0cc512670a783ad4}, // 5^276 + {0x906a617d450187e2, 0x27fb2b80668b24c5}, // 5^277 + {0xb484f9dc9641e9da, 0xb1f9f660802dedf6}, // 5^278 + {0xe1a63853bbd26451, 0x5e7873f8a0396973}, // 5^279 + {0x8d07e33455637eb2, 0xdb0b487b6423e1e8}, // 5^280 + {0xb049dc016abc5e5f, 0x91ce1a9a3d2cda62}, // 5^281 + {0xdc5c5301c56b75f7, 0x7641a140cc7810fb}, // 5^282 + {0x89b9b3e11b6329ba, 0xa9e904c87fcb0a9d}, // 5^283 + {0xac2820d9623bf429, 0x546345fa9fbdcd44}, // 5^284 + {0xd732290fbacaf133, 0xa97c177947ad4095}, // 5^285 + {0x867f59a9d4bed6c0, 0x49ed8eabcccc485d}, // 5^286 + {0xa81f301449ee8c70, 0x5c68f256bfff5a74}, // 5^287 + {0xd226fc195c6a2f8c, 0x73832eec6fff3111}, // 5^288 + {0x83585d8fd9c25db7, 0xc831fd53c5ff7eab}, // 5^289 + {0xa42e74f3d032f525, 0xba3e7ca8b77f5e55}, // 5^290 + {0xcd3a1230c43fb26f, 0x28ce1bd2e55f35eb}, // 5^291 + {0x80444b5e7aa7cf85, 0x7980d163cf5b81b3}, // 5^292 + {0xa0555e361951c366, 0xd7e105bcc332621f}, // 5^293 + {0xc86ab5c39fa63440, 0x8dd9472bf3fefaa7}, // 5^294 + {0xfa856334878fc150, 0xb14f98f6f0feb951}, // 5^295 + {0x9c935e00d4b9d8d2, 0x6ed1bf9a569f33d3}, // 5^296 + {0xc3b8358109e84f07, 0x0a862f80ec4700c8}, // 5^297 + {0xf4a642e14c6262c8, 0xcd27bb612758c0fa}, // 5^298 + {0x98e7e9cccfbd7dbd, 0x8038d51cb897789c}, // 5^299 + {0xbf21e44003acdd2c, 0xe0470a63e6bd56c3}, // 5^300 + {0xeeea5d5004981478, 0x1858ccfce06cac74}, // 5^301 + {0x95527a5202df0ccb, 0x0f37801e0c43ebc8}, // 5^302 + {0xbaa718e68396cffd, 0xd30560258f54e6ba}, // 5^303 + {0xe950df20247c83fd, 0x47c6b82ef32a2069}, // 5^304 + {0x91d28b7416cdd27e, 0x4cdc331d57fa5441}, // 5^305 + {0xb6472e511c81471d, 0xe0133fe4adf8e952}, // 5^306 + {0xe3d8f9e563a198e5, 0x58180fddd97723a6}, // 5^307 + {0x8e679c2f5e44ff8f, 0x570f09eaa7ea7648}, // 5^308 +} diff --git a/core/strconv/strconv.odin b/core/strconv/strconv.odin index f2450dcbd..f6fe48e8d 100644 --- a/core/strconv/strconv.odin +++ b/core/strconv/strconv.odin @@ -746,9 +746,13 @@ Output: - ok: `false` if a base 10 float could not be found, or if the input string contained more than just the number. */ parse_f32 :: proc(s: string, n: ^int = nil) -> (value: f32, ok: bool) { - v: f64 = --- - v, ok = parse_f64(s, n) - return f32(v), ok + nr: int + value, nr, ok = parse_f32_prefix(s) + if ok && len(s) != nr { + ok = false + } + if n != nil { n^ = nr } + return } /* Parses a 64-bit floating point number from a string @@ -817,10 +821,7 @@ Output: - ok: A boolean indicating whether the parsing was successful. */ parse_f32_prefix :: proc(str: string) -> (value: f32, nr: int, ok: bool) { - f: f64 - f, nr, ok = parse_f64_prefix(str) - value = f32(f) - return + return parse_float_prefix_generic(f32, str) } /* Parses a 64-bit floating point number from a string and returns the parsed number, the length of the parsed substring, and a boolean indicating whether the parsing was successful @@ -855,6 +856,11 @@ Output: - ok: `false` if a base 10 float could not be found */ parse_f64_prefix :: proc(str: string) -> (value: f64, nr: int, ok: bool) { + return parse_float_prefix_generic(f64, str) +} + +// Parses directly to `T`, so the result is correctly rounded for both `f32` and `f64`. +parse_float_prefix_generic :: proc($T: typeid, str: string) -> (value: T, nr: int, ok: bool) where T == f32 || T == f64 { common_prefix_len_ignore_case :: proc "contextless" (s, prefix: string) -> int { n := len(prefix) if n > len(s) { @@ -1122,19 +1128,27 @@ parse_f64_prefix :: proc(str: string) -> (value: f64, nr: int, ok: bool) { switch digits { case 4: - value = cast(f64)transmute(f16)cast(u16)as_int + value = cast(T)transmute(f16)cast(u16)as_int case 8: - value = cast(f64)transmute(f32)cast(u32)as_int + value = cast(T)transmute(f32)cast(u32)as_int case 16: - value = transmute(f64)as_int + value = cast(T)transmute(f64)as_int case: ok = false } return } - if value, nr, ok = check_special(str); ok { - return + if f, n, special := check_special(str); special { + return T(f), n, true + } + + when T == f64 { + Bits :: u64 + info := &_f64_info + } else { + Bits :: u32 + info := &_f32_info } mantissa: u64 @@ -1143,11 +1157,18 @@ parse_f64_prefix :: proc(str: string) -> (value: f64, nr: int, ok: bool) { mantissa, exp, neg, trunc, hex, nr = parse_components(str) or_return if hex { - value, ok = parse_hex(str, mantissa, exp, neg, trunc) + f: f64 + f, ok = parse_hex(str, mantissa, exp, neg, trunc) + value = T(f) + when T == f32 { + // A finite f64 can be too large for f32. + ok = ok && transmute(u32)value & 0x7f80_0000 != 0x7f80_0000 + } return } - trunc_block: if !trunc { + // Clinger's fast path algorithm + clinger_fast_path: if !trunc && !(ODIN_ARCH == .i386 && ODIN_OS != .Windows) { @(static, rodata) pow10 := [?]f64{ 1e0, 1e1, 1e2, 1e3, 1e4, 1e5, 1e6, 1e7, 1e8, 1e9, 1e10, 1e11, 1e12, 1e13, 1e14, 1e15, 1e16, 1e17, 1e18, 1e19, @@ -1155,33 +1176,58 @@ parse_f64_prefix :: proc(str: string) -> (value: f64, nr: int, ok: bool) { } if mantissa>>_f64_info.mantbits != 0 { - break trunc_block + break clinger_fast_path } f := f64(mantissa) - f_abs := f + switch { + case exp == 0: + case exp > 0 && exp <= 15+22: + e := exp + if e > 22 { + f *= pow10[e-22] + e = 22 + if f > 1e15 { + break clinger_fast_path + } + } + f *= pow10[e] + case -22 <= exp && exp < 0: + f /= pow10[-exp] + case: + break clinger_fast_path + } + when T == f32 { + // Every f32 midpoint is an f64 value, so rounding to f64 cannot + // move the result past a midpoint. The conversion to f32 is then + // correct, unless the f64 result is exactly a midpoint. + if transmute(u64)f & (1<<29 - 1) == 1<<28 { + break clinger_fast_path + } + } if neg { f = -f } - switch { - case exp == 0: - return f, nr, true - case exp > 0 && exp <= 15+22: - if exp > 22 { - f *= pow10[exp-22] - exp = 22 - } - if f_abs > 1e15 || f_abs < 1e-15 { - break trunc_block - } - return f * pow10[exp], nr, true - case -22 <= exp && exp < 0: - return f / pow10[-exp], nr, true - } + return T(f), nr, true } + + // Eisel-Lemire's fast float algorithm + fast_float: { + b := fast_float_compute_float(T, exp, mantissa) + if trunc && b != fast_float_compute_float(T, exp, mantissa+1) { + break fast_float + } + ok = b >> info.mantbits != 1< Date: Fri, 25 Sep 2026 19:41:42 +0300 Subject: [PATCH 019/215] Impl simd arm neon transpose reverse set1 --- core/simd/arm/aes.odin | 12 + core/simd/arm/neon.odin | 686 +++++++++++++++++++++++++++++++++++++++ core/simd/arm/pmull.odin | 220 +++++++++++++ 3 files changed, 918 insertions(+) diff --git a/core/simd/arm/aes.odin b/core/simd/arm/aes.odin index b1f44e52c..49090de68 100644 --- a/core/simd/arm/aes.odin +++ b/core/simd/arm/aes.odin @@ -1,21 +1,33 @@ #+build arm64,arm32 package simd_arm +// AES single round encryption. +// +// [Arm's documentation](https://developer.arm.com/architectures/instruction-sets/intrinsics/vaeseq_u8) @(require_results, enable_target_feature = "aes") vaeseq_u8 :: #force_inline proc "c" (data, key: uint8x16_t) -> uint8x16_t { return _vaeseq_u8(data, key) } +// AES single round decryption. +// +// [Arm's documentation](https://developer.arm.com/architectures/instruction-sets/intrinsics/vaesdq_u8) @(require_results, enable_target_feature = "aes") vaesdq_u8 :: #force_inline proc "c" (data, key: uint8x16_t) -> uint8x16_t { return _vaesdq_u8(data, key) } +// AES mix columns. +// +// [Arm's documentation](https://developer.arm.com/architectures/instruction-sets/intrinsics/vaesmcq_u8) @(require_results, enable_target_feature = "aes") vaesmcq_u8 :: #force_inline proc "c" (data: uint8x16_t) -> uint8x16_t { return _vaesmcq_u8(data) } +// AES inverse mix columns. +// +// [Arm's documentation](https://developer.arm.com/architectures/instruction-sets/intrinsics/vaesimcq_u8) @(require_results,enable_target_feature = "aes") vaesimcq_u8 :: #force_inline proc "c" (data: uint8x16_t) -> uint8x16_t { return _vaesimcq_u8(data) diff --git a/core/simd/arm/neon.odin b/core/simd/arm/neon.odin index 82cb0930b..d6f76d10b 100644 --- a/core/simd/arm/neon.odin +++ b/core/simd/arm/neon.odin @@ -5282,6 +5282,692 @@ vuzpq_u32 :: #force_inline proc "c" (a, b: uint32x4_t) -> uint32x4x2_t { } } +// Duplicate vector element to vector or scalar +// +// [Arm's documentation](https://developer.arm.com/architectures/instruction-sets/intrinsics/vget_low_s8) +@(require_results, enable_target_feature = "neon") +vget_low_s8 :: #force_inline proc "c" (a: int8x16_t) -> int8x8_t { + when ODIN_ENDIAN == .Little { + return simd.shuffle(a, a, 0, 1, 2, 3, 4, 5, 6, 7) + } else { + a := simd.shuffle(a, a, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0) + b := simd.shuffle(a, a, 0, 1, 2, 3, 4, 5, 6, 7) + return simd.shuffle(b, b, 7, 6, 5, 4, 3, 2, 1, 0) + } +} + +// Duplicate vector element to vector or scalar +// +// [Arm's documentation](https://developer.arm.com/architectures/instruction-sets/intrinsics/vget_low_u8) +@(require_results, enable_target_feature = "neon") +vget_low_u8 :: #force_inline proc "c" (a: uint8x16_t) -> uint8x8_t { + when ODIN_ENDIAN == .Little { + return simd.shuffle(a, a, 0, 1, 2, 3, 4, 5, 6, 7) + } else { + a := simd.shuffle(a, a, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0) + b := simd.shuffle(a, a, 0, 1, 2, 3, 4, 5, 6, 7) + return simd.shuffle(b, b, 7, 6, 5, 4, 3, 2, 1, 0) + } +} + +// Duplicate vector element to vector or scalar +// +// [Arm's documentation](https://developer.arm.com/architectures/instruction-sets/intrinsics/vget_low_s16) +@(require_results, enable_target_feature = "neon") +vget_low_s16 :: #force_inline proc "c" (a: int16x8_t) -> int16x4_t { + when ODIN_ENDIAN == .Little { + return simd.shuffle(a, a, 0, 1, 2, 3) + } else { + a := simd.shuffle(a, a, 7, 6, 5, 4, 3, 2, 1, 0) + b := simd.shuffle(a, a, 0, 1, 2, 3) + return simd.shuffle(b, b, 3, 2, 1, 0) + } +} + +// Duplicate vector element to vector or scalar +// +// [Arm's documentation](https://developer.arm.com/architectures/instruction-sets/intrinsics/vget_low_u16) +@(require_results, enable_target_feature = "neon") +vget_low_u16 :: #force_inline proc "c" (a: uint16x8_t) -> uint16x4_t { + when ODIN_ENDIAN == .Little { + return simd.shuffle(a, a, 0, 1, 2, 3) + } else { + a := simd.shuffle(a, a, 7, 6, 5, 4, 3, 2, 1, 0) + b := simd.shuffle(a, a, 0, 1, 2, 3) + return simd.shuffle(b, b, 3, 2, 1, 0) + } +} + +// Duplicate vector element to vector or scalar +// +// [Arm's documentation](https://developer.arm.com/architectures/instruction-sets/intrinsics/vget_low_s32) +@(require_results, enable_target_feature = "neon") +vget_low_s32 :: #force_inline proc "c" (a: int32x4_t) -> int32x2_t { + when ODIN_ENDIAN == .Little { + return simd.shuffle(a, a, 0, 1) + } else { + a := simd.shuffle(a, a, 3, 2, 1, 0) + b := simd.shuffle(a, a, 0, 1) + return simd.shuffle(b, b, 1, 0) + } +} + +// Duplicate vector element to vector or scalar +// +// [Arm's documentation](https://developer.arm.com/architectures/instruction-sets/intrinsics/vget_low_u32) +@(require_results, enable_target_feature = "neon") +vget_low_u32 :: #force_inline proc "c" (a: uint32x4_t) -> uint32x2_t { + when ODIN_ENDIAN == .Little { + return simd.shuffle(a, a, 0, 1) + } else { + a := simd.shuffle(a, a, 3, 2, 1, 0) + b := simd.shuffle(a, a, 0, 1) + return simd.shuffle(b, b, 1, 0) + } +} + +// Duplicate vector element to vector or scalar +// +// [Arm's documentation](https://developer.arm.com/architectures/instruction-sets/intrinsics/vget_low_s64) +@(require_results, enable_target_feature = "neon") +vget_low_s64 :: #force_inline proc "c" (a: int64x2_t) -> int64x1_t { + when ODIN_ENDIAN == .Little { + return transmute(int64x1_t)simd.extract(a, 0) + } else { + a := simd.shuffle(a, a, 1, 0) + return transmute(int64x1_t)simd.extract(a, 0) + } +} + +// Duplicate vector element to vector or scalar +// +// [Arm's documentation](https://developer.arm.com/architectures/instruction-sets/intrinsics/vget_low_u64) +@(require_results, enable_target_feature = "neon") +vget_low_u64 :: #force_inline proc "c" (a: uint64x2_t) -> uint64x1_t { + when ODIN_ENDIAN == .Little { + return transmute(uint64x1_t)simd.extract(a, 0) + } else { + a := simd.shuffle(a, a, 1, 0) + return transmute(uint64x1_t)simd.extract(a, 0) + } +} + +// Reverse elements in 16-bit halfwords. +// +// [Arm's documentation](https://developer.arm.com/architectures/instruction-sets/intrinsics/vrev16_s8) +@(require_results, enable_target_feature = "neon") +vrev16_s8 :: #force_inline proc "c" (a: int8x8_t) -> int8x8_t { + when ODIN_ENDIAN == .Little { + return simd.shuffle(a, a, 1, 0, 3, 2, 5, 4, 7, 6) + } else { + a := simd.shuffle(a, a, 7, 6, 5, 4, 3, 2, 1, 0) + b := simd.shuffle(a, a, 1, 0, 3, 2, 5, 4, 7, 6) + return simd.shuffle(b, b, 7, 6, 5, 4, 3, 2, 1, 0) + } +} + +// Reverse elements in 16-bit halfwords. +// +// [Arm's documentation](https://developer.arm.com/architectures/instruction-sets/intrinsics/vrev16_u8) +@(require_results, enable_target_feature = "neon") +vrev16_u8 :: #force_inline proc "c" (a: uint8x8_t) -> uint8x8_t { + when ODIN_ENDIAN == .Little { + return simd.shuffle(a, a, 1, 0, 3, 2, 5, 4, 7, 6) + } else { + a := simd.shuffle(a, a, 7, 6, 5, 4, 3, 2, 1, 0) + b := simd.shuffle(a, a, 1, 0, 3, 2, 5, 4, 7, 6) + return simd.shuffle(b, b, 7, 6, 5, 4, 3, 2, 1, 0) + } +} + +// Reverse elements in 16-bit halfwords. +// +// [Arm's documentation](https://developer.arm.com/architectures/instruction-sets/intrinsics/vrev16q_s8) +@(require_results, enable_target_feature = "neon") +vrev16q_s8 :: #force_inline proc "c" (a: int8x16_t) -> int8x16_t { + when ODIN_ENDIAN == .Little { + return simd.shuffle(a, a, 1, 0, 3, 2, 5, 4, 7, 6, 9, 8, 11, 10, 13, 12, 15, 14) + } else { + a := simd.shuffle(a, a, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0) + b := simd.shuffle(a, a, 1, 0, 3, 2, 5, 4, 7, 6, 9, 8, 11, 10, 13, 12, 15, 14) + return simd.shuffle(b, b, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0) + } +} + +// Reverse elements in 16-bit halfwords. +// +// [Arm's documentation](https://developer.arm.com/architectures/instruction-sets/intrinsics/vrev16q_u8) +@(require_results, enable_target_feature = "neon") +vrev16q_u8 :: #force_inline proc "c" (a: uint8x16_t) -> uint8x16_t { + when ODIN_ENDIAN == .Little { + return simd.shuffle(a, a, 1, 0, 3, 2, 5, 4, 7, 6, 9, 8, 11, 10, 13, 12, 15, 14) + } else { + a := simd.shuffle(a, a, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0) + b := simd.shuffle(a, a, 1, 0, 3, 2, 5, 4, 7, 6, 9, 8, 11, 10, 13, 12, 15, 14) + return simd.shuffle(b, b, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0) + } +} + +// Reverse elements in 32-bit words. +// +// [Arm's documentation](https://developer.arm.com/architectures/instruction-sets/intrinsics/vrev32_s8) +@(require_results, enable_target_feature = "neon") +vrev32_s8 :: #force_inline proc "c" (a: int8x8_t) -> int8x8_t { + when ODIN_ENDIAN == .Little { + return simd.shuffle(a, a, 3, 2, 1, 0, 7, 6, 5, 4) + } else { + a := simd.shuffle(a, a, 7, 6, 5, 4, 3, 2, 1, 0) + b := simd.shuffle(a, a, 3, 2, 1, 0, 7, 6, 5, 4) + return simd.shuffle(b, b, 7, 6, 5, 4, 3, 2, 1, 0) + } +} + +// Reverse elements in 32-bit words. +// +// [Arm's documentation](https://developer.arm.com/architectures/instruction-sets/intrinsics/vrev32_u8) +@(require_results, enable_target_feature = "neon") +vrev32_u8 :: #force_inline proc "c" (a: uint8x8_t) -> uint8x8_t { + when ODIN_ENDIAN == .Little { + return simd.shuffle(a, a, 3, 2, 1, 0, 7, 6, 5, 4) + } else { + a := simd.shuffle(a, a, 7, 6, 5, 4, 3, 2, 1, 0) + b := simd.shuffle(a, a, 3, 2, 1, 0, 7, 6, 5, 4) + return simd.shuffle(b, b, 7, 6, 5, 4, 3, 2, 1, 0) + } +} + +// Reverse elements in 32-bit words. +// +// [Arm's documentation](https://developer.arm.com/architectures/instruction-sets/intrinsics/vrev32_s16) +@(require_results, enable_target_feature = "neon") +vrev32_s16 :: #force_inline proc "c" (a: int16x4_t) -> int16x4_t { + when ODIN_ENDIAN == .Little { + return simd.shuffle(a, a, 1, 0, 3, 2) + } else { + a := simd.shuffle(a, a, 3, 2, 1, 0) + b := simd.shuffle(a, a, 1, 0, 3, 2) + return simd.shuffle(b, b, 3, 2, 1, 0) + } +} + +// Reverse elements in 32-bit words. +// +// [Arm's documentation](https://developer.arm.com/architectures/instruction-sets/intrinsics/vrev32_u16) +@(require_results, enable_target_feature = "neon") +vrev32_u16 :: #force_inline proc "c" (a: uint16x4_t) -> uint16x4_t { + when ODIN_ENDIAN == .Little { + return simd.shuffle(a, a, 1, 0, 3, 2) + } else { + a := simd.shuffle(a, a, 3, 2, 1, 0) + b := simd.shuffle(a, a, 1, 0, 3, 2) + return simd.shuffle(b, b, 3, 2, 1, 0) + } +} + +// Reverse elements in 32-bit words. +// +// [Arm's documentation](https://developer.arm.com/architectures/instruction-sets/intrinsics/vrev32q_s8) +@(require_results, enable_target_feature = "neon") +vrev32q_s8 :: #force_inline proc "c" (a: int8x16_t) -> int8x16_t { + when ODIN_ENDIAN == .Little { + return simd.shuffle(a, a, 3, 2, 1, 0, 7, 6, 5, 4, 11, 10, 9, 8, 15, 14, 13, 12) + } else { + a := simd.shuffle(a, a, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0) + b := simd.shuffle(a, a, 3, 2, 1, 0, 7, 6, 5, 4, 11, 10, 9, 8, 15, 14, 13, 12) + return simd.shuffle(b, b, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0) + } +} + +// Reverse elements in 32-bit words. +// +// [Arm's documentation](https://developer.arm.com/architectures/instruction-sets/intrinsics/vrev32q_u8) +@(require_results, enable_target_feature = "neon") +vrev32q_u8 :: #force_inline proc "c" (a: uint8x16_t) -> uint8x16_t { + when ODIN_ENDIAN == .Little { + return simd.shuffle(a, a, 3, 2, 1, 0, 7, 6, 5, 4, 11, 10, 9, 8, 15, 14, 13, 12) + } else { + a := simd.shuffle(a, a, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0) + b := simd.shuffle(a, a, 3, 2, 1, 0, 7, 6, 5, 4, 11, 10, 9, 8, 15, 14, 13, 12) + return simd.shuffle(b, b, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0) + } +} + +// Reverse elements in 32-bit words. +// +// [Arm's documentation](https://developer.arm.com/architectures/instruction-sets/intrinsics/vrev32q_s16) +@(require_results, enable_target_feature = "neon") +vrev32q_s16 :: #force_inline proc "c" (a: int16x8_t) -> int16x8_t { + when ODIN_ENDIAN == .Little { + return simd.shuffle(a, a, 1, 0, 3, 2, 5, 4, 7, 6) + } else { + a := simd.shuffle(a, a, 7, 6, 5, 4, 3, 2, 1, 0) + b := simd.shuffle(a, a, 1, 0, 3, 2, 5, 4, 7, 6) + return simd.shuffle(b, b, 7, 6, 5, 4, 3, 2, 1, 0) + } +} + +// Reverse elements in 32-bit words. +// +// [Arm's documentation](https://developer.arm.com/architectures/instruction-sets/intrinsics/vrev32q_u16) +@(require_results, enable_target_feature = "neon") +vrev32q_u16 :: #force_inline proc "c" (a: uint16x8_t) -> uint16x8_t { + when ODIN_ENDIAN == .Little { + return simd.shuffle(a, a, 1, 0, 3, 2, 5, 4, 7, 6) + } else { + a := simd.shuffle(a, a, 7, 6, 5, 4, 3, 2, 1, 0) + b := simd.shuffle(a, a, 1, 0, 3, 2, 5, 4, 7, 6) + return simd.shuffle(b, b, 7, 6, 5, 4, 3, 2, 1, 0) + } +} + +// Reverse elements in 64-bit doublewords. +// +// [Arm's documentation](https://developer.arm.com/architectures/instruction-sets/intrinsics/vrev64_s8) +@(require_results, enable_target_feature = "neon") +vrev64_s8 :: #force_inline proc "c" (a: int8x8_t) -> int8x8_t { + when ODIN_ENDIAN == .Little { + return simd.shuffle(a, a, 7, 6, 5, 4, 3, 2, 1, 0) + } else { + a := simd.shuffle(a, a, 7, 6, 5, 4, 3, 2, 1, 0) + b := simd.shuffle(a, a, 7, 6, 5, 4, 3, 2, 1, 0) + return simd.shuffle(b, b, 7, 6, 5, 4, 3, 2, 1, 0) + } +} + +// Reverse elements in 64-bit doublewords. +// +// [Arm's documentation](https://developer.arm.com/architectures/instruction-sets/intrinsics/vrev64_u8) +@(require_results, enable_target_feature = "neon") +vrev64_u8 :: #force_inline proc "c" (a: uint8x8_t) -> uint8x8_t { + when ODIN_ENDIAN == .Little { + return simd.shuffle(a, a, 7, 6, 5, 4, 3, 2, 1, 0) + } else { + a := simd.shuffle(a, a, 7, 6, 5, 4, 3, 2, 1, 0) + b := simd.shuffle(a, a, 7, 6, 5, 4, 3, 2, 1, 0) + return simd.shuffle(b, b, 7, 6, 5, 4, 3, 2, 1, 0) + } +} + +// Reverse elements in 64-bit doublewords. +// +// [Arm's documentation](https://developer.arm.com/architectures/instruction-sets/intrinsics/vrev64_s16) +@(require_results, enable_target_feature = "neon") +vrev64_s16 :: #force_inline proc "c" (a: int16x4_t) -> int16x4_t { + when ODIN_ENDIAN == .Little { + return simd.shuffle(a, a, 3, 2, 1, 0) + } else { + a := simd.shuffle(a, a, 3, 2, 1, 0) + b := simd.shuffle(a, a, 3, 2, 1, 0) + return simd.shuffle(b, b, 3, 2, 1, 0) + } +} + +// Reverse elements in 64-bit doublewords. +// +// [Arm's documentation](https://developer.arm.com/architectures/instruction-sets/intrinsics/vrev64_u16) +@(require_results, enable_target_feature = "neon") +vrev64_u16 :: #force_inline proc "c" (a: uint16x4_t) -> uint16x4_t { + when ODIN_ENDIAN == .Little { + return simd.shuffle(a, a, 3, 2, 1, 0) + } else { + a := simd.shuffle(a, a, 3, 2, 1, 0) + b := simd.shuffle(a, a, 3, 2, 1, 0) + return simd.shuffle(b, b, 3, 2, 1, 0) + } +} + +// Reverse elements in 64-bit doublewords. +// +// [Arm's documentation](https://developer.arm.com/architectures/instruction-sets/intrinsics/vrev64_s32) +@(require_results, enable_target_feature = "neon") +vrev64_s32 :: #force_inline proc "c" (a: int32x2_t) -> int32x2_t { + when ODIN_ENDIAN == .Little { + return simd.shuffle(a, a, 1, 0) + } else { + a := simd.shuffle(a, a, 1, 0) + b := simd.shuffle(a, a, 1, 0) + return simd.shuffle(b, b, 1, 0) + } +} + +// Reverse elements in 64-bit doublewords. +// +// [Arm's documentation](https://developer.arm.com/architectures/instruction-sets/intrinsics/vrev64_u32) +@(require_results, enable_target_feature = "neon") +vrev64_u32 :: #force_inline proc "c" (a: uint32x2_t) -> uint32x2_t { + when ODIN_ENDIAN == .Little { + return simd.shuffle(a, a, 1, 0) + } else { + a := simd.shuffle(a, a, 1, 0) + b := simd.shuffle(a, a, 1, 0) + return simd.shuffle(b, b, 1, 0) + } +} + +// Reverse elements in 64-bit doublewords. +// +// [Arm's documentation](https://developer.arm.com/architectures/instruction-sets/intrinsics/vrev64q_s8) +@(require_results, enable_target_feature = "neon") +vrev64q_s8 :: #force_inline proc "c" (a: int8x16_t) -> int8x16_t { + when ODIN_ENDIAN == .Little { + return simd.shuffle(a, a, 7, 6, 5, 4, 3, 2, 1, 0, 15, 14, 13, 12, 11, 10, 9, 8) + } else { + a := simd.shuffle(a, a, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0) + b := simd.shuffle(a, a, 7, 6, 5, 4, 3, 2, 1, 0, 15, 14, 13, 12, 11, 10, 9, 8) + return simd.shuffle(b, b, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0) + } +} + +// Reverse elements in 64-bit doublewords. +// +// [Arm's documentation](https://developer.arm.com/architectures/instruction-sets/intrinsics/vrev64q_u8) +@(require_results, enable_target_feature = "neon") +vrev64q_u8 :: #force_inline proc "c" (a: uint8x16_t) -> uint8x16_t { + when ODIN_ENDIAN == .Little { + return simd.shuffle(a, a, 7, 6, 5, 4, 3, 2, 1, 0, 15, 14, 13, 12, 11, 10, 9, 8) + } else { + a := simd.shuffle(a, a, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0) + b := simd.shuffle(a, a, 7, 6, 5, 4, 3, 2, 1, 0, 15, 14, 13, 12, 11, 10, 9, 8) + return simd.shuffle(b, b, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0) + } +} + +// Reverse elements in 64-bit doublewords. +// +// [Arm's documentation](https://developer.arm.com/architectures/instruction-sets/intrinsics/vrev64q_s16) +@(require_results, enable_target_feature = "neon") +vrev64q_s16 :: #force_inline proc "c" (a: int16x8_t) -> int16x8_t { + when ODIN_ENDIAN == .Little { + return simd.shuffle(a, a, 3, 2, 1, 0, 7, 6, 5, 4) + } else { + a := simd.shuffle(a, a, 7, 6, 5, 4, 3, 2, 1, 0) + b := simd.shuffle(a, a, 3, 2, 1, 0, 7, 6, 5, 4) + return simd.shuffle(b, b, 7, 6, 5, 4, 3, 2, 1, 0) + } +} + +// Reverse elements in 64-bit doublewords. +// +// [Arm's documentation](https://developer.arm.com/architectures/instruction-sets/intrinsics/vrev64q_u16) +@(require_results, enable_target_feature = "neon") +vrev64q_u16 :: #force_inline proc "c" (a: uint16x8_t) -> uint16x8_t { + when ODIN_ENDIAN == .Little { + return simd.shuffle(a, a, 3, 2, 1, 0, 7, 6, 5, 4) + } else { + a := simd.shuffle(a, a, 7, 6, 5, 4, 3, 2, 1, 0) + b := simd.shuffle(a, a, 3, 2, 1, 0, 7, 6, 5, 4) + return simd.shuffle(b, b, 7, 6, 5, 4, 3, 2, 1, 0) + } +} + +// Reverse elements in 64-bit doublewords. +// +// [Arm's documentation](https://developer.arm.com/architectures/instruction-sets/intrinsics/vrev64q_s32) +@(require_results, enable_target_feature = "neon") +vrev64q_s32 :: #force_inline proc "c" (a: int32x4_t) -> int32x4_t { + when ODIN_ENDIAN == .Little { + return simd.shuffle(a, a, 1, 0, 3, 2) + } else { + a := simd.shuffle(a, a, 3, 2, 1, 0) + b := simd.shuffle(a, a, 1, 0, 3, 2) + return simd.shuffle(b, b, 3, 2, 1, 0) + } +} + +// Reverse elements in 64-bit doublewords. +// +// [Arm's documentation](https://developer.arm.com/architectures/instruction-sets/intrinsics/vrev64q_u32) +@(require_results, enable_target_feature = "neon") +vrev64q_u32 :: #force_inline proc "c" (a: uint32x4_t) -> uint32x4_t { + when ODIN_ENDIAN == .Little { + return simd.shuffle(a, a, 1, 0, 3, 2) + } else { + a := simd.shuffle(a, a, 3, 2, 1, 0) + b := simd.shuffle(a, a, 1, 0, 3, 2) + return simd.shuffle(b, b, 3, 2, 1, 0) + } +} + +// Transpose vectors. +// +// [Arm's documentation](https://developer.arm.com/architectures/instruction-sets/intrinsics/vtrn_s8) +@(require_results, enable_target_feature = "neon") +vtrn_s8 :: #force_inline proc "c" (a, b: int8x8_t) -> int8x8x2_t { + when ODIN_ENDIAN == .Little { + c := simd.shuffle(a, b, 0, 8, 2, 10, 4, 12, 6, 14) + d := simd.shuffle(a, b, 1, 9, 3, 11, 5, 13, 7, 15) + return int8x8x2_t {c, d} + } else { + a := simd.shuffle(a, a, 7, 6, 5, 4, 3, 2, 1, 0) + b := simd.shuffle(b, b, 7, 6, 5, 4, 3, 2, 1, 0) + c := simd.shuffle(a, b, 0, 8, 2, 10, 4, 12, 6, 14) + d := simd.shuffle(a, b, 1, 9, 3, 11, 5, 13, 7, 15) + c = simd.shuffle(c, c, 7, 6, 5, 4, 3, 2, 1, 0) + d = simd.shuffle(d, d, 7, 6, 5, 4, 3, 2, 1, 0) + return int8x8x2_t {c, d} + } +} + +// Transpose vectors. +// +// [Arm's documentation](https://developer.arm.com/architectures/instruction-sets/intrinsics/vtrn_u8) +@(require_results, enable_target_feature = "neon") +vtrn_u8 :: #force_inline proc "c" (a, b: uint8x8_t) -> uint8x8x2_t { + when ODIN_ENDIAN == .Little { + c := simd.shuffle(a, b, 0, 8, 2, 10, 4, 12, 6, 14) + d := simd.shuffle(a, b, 1, 9, 3, 11, 5, 13, 7, 15) + return uint8x8x2_t {c, d} + } else { + a := simd.shuffle(a, a, 7, 6, 5, 4, 3, 2, 1, 0) + b := simd.shuffle(b, b, 7, 6, 5, 4, 3, 2, 1, 0) + c := simd.shuffle(a, b, 0, 8, 2, 10, 4, 12, 6, 14) + d := simd.shuffle(a, b, 1, 9, 3, 11, 5, 13, 7, 15) + c = simd.shuffle(c, c, 7, 6, 5, 4, 3, 2, 1, 0) + d = simd.shuffle(d, d, 7, 6, 5, 4, 3, 2, 1, 0) + return uint8x8x2_t {c, d} + } +} + +// Transpose vectors. +// +// [Arm's documentation](https://developer.arm.com/architectures/instruction-sets/intrinsics/vtrn_s16) +@(require_results, enable_target_feature = "neon") +vtrn_s16 :: #force_inline proc "c" (a, b: int16x4_t) -> int16x4x2_t { + when ODIN_ENDIAN == .Little { + c := simd.shuffle(a, b, 0, 4, 2, 6) + d := simd.shuffle(a, b, 1, 5, 3, 7) + return int16x4x2_t {c, d} + } else { + a := simd.shuffle(a, a, 3, 2, 1, 0) + b := simd.shuffle(b, b, 3, 2, 1, 0) + c := simd.shuffle(a, b, 0, 4, 2, 6) + d := simd.shuffle(a, b, 1, 5, 3, 7) + c = simd.shuffle(c, c, 3, 2, 1, 0) + d = simd.shuffle(d, d, 3, 2, 1, 0) + return int16x4x2_t {c, d} + } +} + +// Transpose vectors. +// +// [Arm's documentation](https://developer.arm.com/architectures/instruction-sets/intrinsics/vtrn_u16) +@(require_results, enable_target_feature = "neon") +vtrn_u16 :: #force_inline proc "c" (a, b: uint16x4_t) -> uint16x4x2_t { + when ODIN_ENDIAN == .Little { + c := simd.shuffle(a, b, 0, 4, 2, 6) + d := simd.shuffle(a, b, 1, 5, 3, 7) + return uint16x4x2_t {c, d} + } else { + a := simd.shuffle(a, a, 3, 2, 1, 0) + b := simd.shuffle(b, b, 3, 2, 1, 0) + c := simd.shuffle(a, b, 0, 4, 2, 6) + d := simd.shuffle(a, b, 1, 5, 3, 7) + c = simd.shuffle(c, c, 3, 2, 1, 0) + d = simd.shuffle(d, d, 3, 2, 1, 0) + return uint16x4x2_t {c, d} + } +} + +// Transpose vectors. +// +// [Arm's documentation](https://developer.arm.com/architectures/instruction-sets/intrinsics/vtrn_s32) +@(require_results, enable_target_feature = "neon") +vtrn_s32 :: #force_inline proc "c" (a, b: int32x2_t) -> int32x2x2_t { + when ODIN_ENDIAN == .Little { + c := simd.shuffle(a, b, 0, 2) + d := simd.shuffle(a, b, 1, 3) + return int32x2x2_t {c, d} + } else { + a := simd.shuffle(a, a, 1, 0) + b := simd.shuffle(b, b, 1, 0) + c := simd.shuffle(a, b, 0, 2) + d := simd.shuffle(a, b, 1, 3) + c = simd.shuffle(c, c, 1, 0) + d = simd.shuffle(d, d, 1, 0) + return int32x2x2_t {c, d} + } +} + +// Transpose vectors. +// +// [Arm's documentation](https://developer.arm.com/architectures/instruction-sets/intrinsics/vtrn_u32) +@(require_results, enable_target_feature = "neon") +vtrn_u32 :: #force_inline proc "c" (a, b: uint32x2_t) -> uint32x2x2_t { + when ODIN_ENDIAN == .Little { + c := simd.shuffle(a, b, 0, 2) + d := simd.shuffle(a, b, 1, 3) + return uint32x2x2_t {c, d} + } else { + a := simd.shuffle(a, a, 1, 0) + b := simd.shuffle(b, b, 1, 0) + c := simd.shuffle(a, b, 0, 2) + d := simd.shuffle(a, b, 1, 3) + c = simd.shuffle(c, c, 1, 0) + d = simd.shuffle(d, d, 1, 0) + return uint32x2x2_t {c, d} + } +} + +// Transpose vectors. +// +// [Arm's documentation](https://developer.arm.com/architectures/instruction-sets/intrinsics/vtrnq_s8) +@(require_results, enable_target_feature = "neon") +vtrnq_s8 :: #force_inline proc "c" (a, b: int8x16_t) -> int8x16x2_t { + when ODIN_ENDIAN == .Little { + c := simd.shuffle(a, b, 0, 16, 2, 18, 4, 20, 6, 22, 8, 24, 10, 26, 12, 28, 14, 30) + d := simd.shuffle(a, b, 1, 17, 3, 19, 5, 21, 7, 23, 9, 25, 11, 27, 13, 29, 15, 31) + return int8x16x2_t {c, d} + } else { + a := simd.shuffle(a, a, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0) + b := simd.shuffle(b, b, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0) + c := simd.shuffle(a, b, 0, 16, 2, 18, 4, 20, 6, 22, 8, 24, 10, 26, 12, 28, 14, 30) + d := simd.shuffle(a, b, 1, 17, 3, 19, 5, 21, 7, 23, 9, 25, 11, 27, 13, 29, 15, 31) + c = simd.shuffle(c, c, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0) + d = simd.shuffle(d, d, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0) + return int8x16x2_t {c, d} + } +} + +// Transpose vectors. +// +// [Arm's documentation](https://developer.arm.com/architectures/instruction-sets/intrinsics/vtrnq_u8) +@(require_results, enable_target_feature = "neon") +vtrnq_u8 :: #force_inline proc "c" (a, b: uint8x16_t) -> uint8x16x2_t { + when ODIN_ENDIAN == .Little { + c := simd.shuffle(a, b, 0, 16, 2, 18, 4, 20, 6, 22, 8, 24, 10, 26, 12, 28, 14, 30) + d := simd.shuffle(a, b, 1, 17, 3, 19, 5, 21, 7, 23, 9, 25, 11, 27, 13, 29, 15, 31) + return uint8x16x2_t {c, d} + } else { + a := simd.shuffle(a, a, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0) + b := simd.shuffle(b, b, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0) + c := simd.shuffle(a, b, 0, 16, 2, 18, 4, 20, 6, 22, 8, 24, 10, 26, 12, 28, 14, 30) + d := simd.shuffle(a, b, 1, 17, 3, 19, 5, 21, 7, 23, 9, 25, 11, 27, 13, 29, 15, 31) + c = simd.shuffle(c, c, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0) + d = simd.shuffle(d, d, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0) + return uint8x16x2_t {c, d} + } +} + +// Transpose vectors. +// +// [Arm's documentation](https://developer.arm.com/architectures/instruction-sets/intrinsics/vtrnq_s16) +@(require_results, enable_target_feature = "neon") +vtrnq_s16 :: #force_inline proc "c" (a, b: int16x8_t) -> int16x8x2_t { + when ODIN_ENDIAN == .Little { + c := simd.shuffle(a, b, 0, 8, 2, 10, 4, 12, 6, 14) + d := simd.shuffle(a, b, 1, 9, 3, 11, 5, 13, 7, 15) + return int16x8x2_t {c, d} + } else { + a := simd.shuffle(a, a, 7, 6, 5, 4, 3, 2, 1, 0) + b := simd.shuffle(b, b, 7, 6, 5, 4, 3, 2, 1, 0) + c := simd.shuffle(a, b, 0, 8, 2, 10, 4, 12, 6, 14) + d := simd.shuffle(a, b, 1, 9, 3, 11, 5, 13, 7, 15) + c = simd.shuffle(c, c, 7, 6, 5, 4, 3, 2, 1, 0) + d = simd.shuffle(d, d, 7, 6, 5, 4, 3, 2, 1, 0) + return int16x8x2_t {c, d} + } +} + +// Transpose vectors. +// +// [Arm's documentation](https://developer.arm.com/architectures/instruction-sets/intrinsics/vtrnq_u16) +@(require_results, enable_target_feature = "neon") +vtrnq_u16 :: #force_inline proc "c" (a, b: uint16x8_t) -> uint16x8x2_t { + when ODIN_ENDIAN == .Little { + c := simd.shuffle(a, b, 0, 8, 2, 10, 4, 12, 6, 14) + d := simd.shuffle(a, b, 1, 9, 3, 11, 5, 13, 7, 15) + return uint16x8x2_t {c, d} + } else { + a := simd.shuffle(a, a, 7, 6, 5, 4, 3, 2, 1, 0) + b := simd.shuffle(b, b, 7, 6, 5, 4, 3, 2, 1, 0) + c := simd.shuffle(a, b, 0, 8, 2, 10, 4, 12, 6, 14) + d := simd.shuffle(a, b, 1, 9, 3, 11, 5, 13, 7, 15) + c = simd.shuffle(c, c, 7, 6, 5, 4, 3, 2, 1, 0) + d = simd.shuffle(d, d, 7, 6, 5, 4, 3, 2, 1, 0) + return uint16x8x2_t {c, d} + } +} + +// Transpose vectors. +// +// [Arm's documentation](https://developer.arm.com/architectures/instruction-sets/intrinsics/vtrnq_s32) +@(require_results, enable_target_feature = "neon") +vtrnq_s32 :: #force_inline proc "c" (a, b: int32x4_t) -> int32x4x2_t { + when ODIN_ENDIAN == .Little { + c := simd.shuffle(a, b, 0, 4, 2, 6) + d := simd.shuffle(a, b, 1, 5, 3, 7) + return int32x4x2_t {c, d} + } else { + a := simd.shuffle(a, a, 3, 2, 1, 0) + b := simd.shuffle(b, b, 3, 2, 1, 0) + c := simd.shuffle(a, b, 0, 4, 2, 6) + d := simd.shuffle(a, b, 1, 5, 3, 7) + c = simd.shuffle(c, c, 3, 2, 1, 0) + d = simd.shuffle(d, d, 3, 2, 1, 0) + return int32x4x2_t {c, d} + } +} + +// Transpose vectors. +// +// [Arm's documentation](https://developer.arm.com/architectures/instruction-sets/intrinsics/vtrnq_u32) +@(require_results, enable_target_feature = "neon") +vtrnq_u32 :: #force_inline proc "c" (a, b: uint32x4_t) -> uint32x4x2_t { + when ODIN_ENDIAN == .Little { + c := simd.shuffle(a, b, 0, 4, 2, 6) + d := simd.shuffle(a, b, 1, 5, 3, 7) + return uint32x4x2_t {c, d} + } else { + a := simd.shuffle(a, a, 3, 2, 1, 0) + b := simd.shuffle(b, b, 3, 2, 1, 0) + c := simd.shuffle(a, b, 0, 4, 2, 6) + d := simd.shuffle(a, b, 1, 5, 3, 7) + c = simd.shuffle(c, c, 3, 2, 1, 0) + d = simd.shuffle(d, d, 3, 2, 1, 0) + return uint32x4x2_t {c, d} + } +} + when ODIN_ARCH == .arm64 { // Table Lookup. // diff --git a/core/simd/arm/pmull.odin b/core/simd/arm/pmull.odin index 4ea88f776..a05301ac3 100644 --- a/core/simd/arm/pmull.odin +++ b/core/simd/arm/pmull.odin @@ -1243,6 +1243,226 @@ vuzpq_p16 :: #force_inline proc "c" (a, b: poly16x8_t) -> poly16x8x2_t { } } +// Reverse elements in 16-bit halfwords. +// +// [Arm's documentation](https://developer.arm.com/architectures/instruction-sets/intrinsics/vrev16_p8) +@(require_results, enable_target_feature = "neon") +vrev16_p8 :: #force_inline proc "c" (a: poly8x8_t) -> poly8x8_t { + when ODIN_ENDIAN == .Little { + return simd.shuffle(a, a, 1, 0, 3, 2, 5, 4, 7, 6) + } else { + a := simd.shuffle(a, a, 7, 6, 5, 4, 3, 2, 1, 0) + b := simd.shuffle(a, a, 1, 0, 3, 2, 5, 4, 7, 6) + return simd.shuffle(b, b, 7, 6, 5, 4, 3, 2, 1, 0) + } +} + +// Reverse elements in 16-bit halfwords. +// +// [Arm's documentation](https://developer.arm.com/architectures/instruction-sets/intrinsics/vrev16q_p8) +@(require_results, enable_target_feature = "neon") +vrev16q_p8 :: #force_inline proc "c" (a: poly8x16_t) -> poly8x16_t { + when ODIN_ENDIAN == .Little { + return simd.shuffle(a, a, 1, 0, 3, 2, 5, 4, 7, 6, 9, 8, 11, 10, 13, 12, 15, 14) + } else { + a := simd.shuffle(a, a, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0) + b := simd.shuffle(a, a, 1, 0, 3, 2, 5, 4, 7, 6, 9, 8, 11, 10, 13, 12, 15, 14) + return simd.shuffle(b, b, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0) + } +} + +// Reverse elements in 32-bit words. +// +// [Arm's documentation](https://developer.arm.com/architectures/instruction-sets/intrinsics/vrev32_p8) +@(require_results, enable_target_feature = "neon") +vrev32_p8 :: #force_inline proc "c" (a: poly8x8_t) -> poly8x8_t { + when ODIN_ENDIAN == .Little { + return simd.shuffle(a, a, 3, 2, 1, 0, 7, 6, 5, 4) + } else { + a := simd.shuffle(a, a, 7, 6, 5, 4, 3, 2, 1, 0) + b := simd.shuffle(a, a, 3, 2, 1, 0, 7, 6, 5, 4) + return simd.shuffle(b, b, 7, 6, 5, 4, 3, 2, 1, 0) + } +} + +// Reverse elements in 32-bit words. +// +// [Arm's documentation](https://developer.arm.com/architectures/instruction-sets/intrinsics/vrev32_p16) +@(require_results, enable_target_feature = "neon") +vrev32_p16 :: #force_inline proc "c" (a: poly16x4_t) -> poly16x4_t { + when ODIN_ENDIAN == .Little { + return simd.shuffle(a, a, 1, 0, 3, 2) + } else { + a := simd.shuffle(a, a, 3, 2, 1, 0) + b := simd.shuffle(a, a, 1, 0, 3, 2) + return simd.shuffle(b, b, 3, 2, 1, 0) + } +} + +// Reverse elements in 32-bit words. +// +// [Arm's documentation](https://developer.arm.com/architectures/instruction-sets/intrinsics/vrev32q_p8) +@(require_results, enable_target_feature = "neon") +vrev32q_p8 :: #force_inline proc "c" (a: poly8x16_t) -> poly8x16_t { + when ODIN_ENDIAN == .Little { + return simd.shuffle(a, a, 3, 2, 1, 0, 7, 6, 5, 4, 11, 10, 9, 8, 15, 14, 13, 12) + } else { + a := simd.shuffle(a, a, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0) + b := simd.shuffle(a, a, 3, 2, 1, 0, 7, 6, 5, 4, 11, 10, 9, 8, 15, 14, 13, 12) + return simd.shuffle(b, b, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0) + } +} + +// Reverse elements in 32-bit words. +// +// [Arm's documentation](https://developer.arm.com/architectures/instruction-sets/intrinsics/vrev32q_p16) +@(require_results, enable_target_feature = "neon") +vrev32q_p16 :: #force_inline proc "c" (a: poly16x8_t) -> poly16x8_t { + when ODIN_ENDIAN == .Little { + return simd.shuffle(a, a, 1, 0, 3, 2, 5, 4, 7, 6) + } else { + a := simd.shuffle(a, a, 7, 6, 5, 4, 3, 2, 1, 0) + b := simd.shuffle(a, a, 1, 0, 3, 2, 5, 4, 7, 6) + return simd.shuffle(b, b, 7, 6, 5, 4, 3, 2, 1, 0) + } +} + +// Reverse elements in 64-bit doublewords. +// +// [Arm's documentation](https://developer.arm.com/architectures/instruction-sets/intrinsics/vrev64_p8) +@(require_results, enable_target_feature = "neon") +vrev64_p8 :: #force_inline proc "c" (a: poly8x8_t) -> poly8x8_t { + when ODIN_ENDIAN == .Little { + return simd.shuffle(a, a, 7, 6, 5, 4, 3, 2, 1, 0) + } else { + a := simd.shuffle(a, a, 7, 6, 5, 4, 3, 2, 1, 0) + b := simd.shuffle(a, a, 7, 6, 5, 4, 3, 2, 1, 0) + return simd.shuffle(b, b, 7, 6, 5, 4, 3, 2, 1, 0) + } +} + +// Reverse elements in 64-bit doublewords. +// +// [Arm's documentation](https://developer.arm.com/architectures/instruction-sets/intrinsics/vrev64_p16) +@(require_results, enable_target_feature = "neon") +vrev64_p16 :: #force_inline proc "c" (a: poly16x4_t) -> poly16x4_t { + when ODIN_ENDIAN == .Little { + return simd.shuffle(a, a, 3, 2, 1, 0) + } else { + a := simd.shuffle(a, a, 3, 2, 1, 0) + b := simd.shuffle(a, a, 3, 2, 1, 0) + return simd.shuffle(b, b, 3, 2, 1, 0) + } +} + +// Reverse elements in 64-bit doublewords. +// +// [Arm's documentation](https://developer.arm.com/architectures/instruction-sets/intrinsics/vrev64q_p8) +@(require_results, enable_target_feature = "neon") +vrev64q_p8 :: #force_inline proc "c" (a: poly8x16_t) -> poly8x16_t { + when ODIN_ENDIAN == .Little { + return simd.shuffle(a, a, 7, 6, 5, 4, 3, 2, 1, 0, 15, 14, 13, 12, 11, 10, 9, 8) + } else { + a := simd.shuffle(a, a, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0) + b := simd.shuffle(a, a, 7, 6, 5, 4, 3, 2, 1, 0, 15, 14, 13, 12, 11, 10, 9, 8) + return simd.shuffle(b, b, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0) + } +} + +// Reverse elements in 64-bit doublewords. +// +// [Arm's documentation](https://developer.arm.com/architectures/instruction-sets/intrinsics/vrev64q_p16) +@(require_results, enable_target_feature = "neon") +vrev64q_p16 :: #force_inline proc "c" (a: poly16x8_t) -> poly16x8_t { + when ODIN_ENDIAN == .Little { + return simd.shuffle(a, a, 3, 2, 1, 0, 7, 6, 5, 4) + } else { + a := simd.shuffle(a, a, 7, 6, 5, 4, 3, 2, 1, 0) + b := simd.shuffle(a, a, 3, 2, 1, 0, 7, 6, 5, 4) + return simd.shuffle(b, b, 7, 6, 5, 4, 3, 2, 1, 0) + } +} + +// Transpose vectors. +// +// [Arm's documentation](https://developer.arm.com/architectures/instruction-sets/intrinsics/vtrn_p8) +@(require_results, enable_target_feature = "neon") +vtrn_p8 :: #force_inline proc "c" (a, b: poly8x8_t) -> poly8x8x2_t { + when ODIN_ENDIAN == .Little { + c := simd.shuffle(a, b, 0, 8, 2, 10, 4, 12, 6, 14) + d := simd.shuffle(a, b, 1, 9, 3, 11, 5, 13, 7, 15) + return poly8x8x2_t {c, d} + } else { + a := simd.shuffle(a, a, 7, 6, 5, 4, 3, 2, 1, 0) + b := simd.shuffle(b, b, 7, 6, 5, 4, 3, 2, 1, 0) + c := simd.shuffle(a, b, 0, 8, 2, 10, 4, 12, 6, 14) + d := simd.shuffle(a, b, 1, 9, 3, 11, 5, 13, 7, 15) + c = simd.shuffle(c, c, 7, 6, 5, 4, 3, 2, 1, 0) + d = simd.shuffle(d, d, 7, 6, 5, 4, 3, 2, 1, 0) + return poly8x8x2_t {c, d} + } +} + +// Transpose vectors. +// +// [Arm's documentation](https://developer.arm.com/architectures/instruction-sets/intrinsics/vtrn_p16) +@(require_results, enable_target_feature = "neon") +vtrn_p16 :: #force_inline proc "c" (a, b: poly16x4_t) -> poly16x4x2_t { + when ODIN_ENDIAN == .Little { + c := simd.shuffle(a, b, 0, 4, 2, 6) + d := simd.shuffle(a, b, 1, 5, 3, 7) + return poly16x4x2_t {c, d} + } else { + a := simd.shuffle(a, a, 3, 2, 1, 0) + b := simd.shuffle(b, b, 3, 2, 1, 0) + c := simd.shuffle(a, b, 0, 4, 2, 6) + d := simd.shuffle(a, b, 1, 5, 3, 7) + c = simd.shuffle(c, c, 3, 2, 1, 0) + d = simd.shuffle(d, d, 3, 2, 1, 0) + return poly16x4x2_t {c, d} + } +} + +// Transpose vectors. +// +// [Arm's documentation](https://developer.arm.com/architectures/instruction-sets/intrinsics/vtrnq_p8) +@(require_results, enable_target_feature = "neon") +vtrnq_p8 :: #force_inline proc "c" (a, b: poly8x16_t) -> poly8x16x2_t { + when ODIN_ENDIAN == .Little { + c := simd.shuffle(a, b, 0, 16, 2, 18, 4, 20, 6, 22, 8, 24, 10, 26, 12, 28, 14, 30) + d := simd.shuffle(a, b, 1, 17, 3, 19, 5, 21, 7, 23, 9, 25, 11, 27, 13, 29, 15, 31) + return poly8x16x2_t {c, d} + } else { + a := simd.shuffle(a, a, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0) + b := simd.shuffle(b, b, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0) + c := simd.shuffle(a, b, 0, 16, 2, 18, 4, 20, 6, 22, 8, 24, 10, 26, 12, 28, 14, 30) + d := simd.shuffle(a, b, 1, 17, 3, 19, 5, 21, 7, 23, 9, 25, 11, 27, 13, 29, 15, 31) + c = simd.shuffle(c, c, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0) + d = simd.shuffle(d, d, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0) + return poly8x16x2_t {c, d} + } +} + +// Transpose vectors. +// +// [Arm's documentation](https://developer.arm.com/architectures/instruction-sets/intrinsics/vtrnq_p16) +@(require_results, enable_target_feature = "neon") +vtrnq_p16 :: #force_inline proc "c" (a, b: poly16x8_t) -> poly16x8x2_t { + when ODIN_ENDIAN == .Little { + c := simd.shuffle(a, b, 0, 8, 2, 10, 4, 12, 6, 14) + d := simd.shuffle(a, b, 1, 9, 3, 11, 5, 13, 7, 15) + return poly16x8x2_t {c, d} + } else { + a := simd.shuffle(a, a, 7, 6, 5, 4, 3, 2, 1, 0) + b := simd.shuffle(b, b, 7, 6, 5, 4, 3, 2, 1, 0) + c := simd.shuffle(a, b, 0, 8, 2, 10, 4, 12, 6, 14) + d := simd.shuffle(a, b, 1, 9, 3, 11, 5, 13, 7, 15) + c = simd.shuffle(c, c, 7, 6, 5, 4, 3, 2, 1, 0) + d = simd.shuffle(d, d, 7, 6, 5, 4, 3, 2, 1, 0) + return poly16x8x2_t {c, d} + } +} + when ODIN_ARCH == .arm64 { // Polynomial multiply long // From da2c46aaee3a8ab8094cd3d18fdada819280d88f Mon Sep 17 00:00:00 2001 From: Alexander Zhura Date: Fri, 25 Sep 2026 19:49:39 +0300 Subject: [PATCH 020/215] Impl simd arm neon transpose reverse set2 --- core/simd/arm/neon.odin | 452 +++++++++++++++++++++++++++++++++++++++ core/simd/arm/pmull.odin | 166 ++++++++++++++ 2 files changed, 618 insertions(+) diff --git a/core/simd/arm/neon.odin b/core/simd/arm/neon.odin index d6f76d10b..caf6066a4 100644 --- a/core/simd/arm/neon.odin +++ b/core/simd/arm/neon.odin @@ -8451,6 +8451,458 @@ when ODIN_ARCH == .arm64 { return simd.shuffle(c, c, 1, 0) } } + + // Reverse bit order. + // + // [Arm's documentation](https://developer.arm.com/architectures/instruction-sets/intrinsics/vrbit_s8) + @(require_results, enable_target_feature = "neon") + vrbit_s8 :: #force_inline proc "c" (a: int8x8_t) -> int8x8_t { + return simd.reverse_bits(a) + } + + // Reverse bit order. + // + // [Arm's documentation](https://developer.arm.com/architectures/instruction-sets/intrinsics/vrbit_u8) + @(require_results, enable_target_feature = "neon") + vrbit_u8 :: #force_inline proc "c" (a: uint8x8_t) -> uint8x8_t { + return simd.reverse_bits(a) + } + + // Reverse bit order. + // + // [Arm's documentation](https://developer.arm.com/architectures/instruction-sets/intrinsics/vrbitq_s8) + @(require_results, enable_target_feature = "neon") + vrbitq_s8 :: #force_inline proc "c" (a: int8x16_t) -> int8x16_t { + return simd.reverse_bits(a) + } + + // Reverse bit order. + // + // [Arm's documentation](https://developer.arm.com/architectures/instruction-sets/intrinsics/vrbitq_u8) + @(require_results, enable_target_feature = "neon") + vrbitq_u8 :: #force_inline proc "c" (a: uint8x16_t) -> uint8x16_t { + return simd.reverse_bits(a) + } + + // Transpose vectors (primary). + // + // [Arm's documentation](https://developer.arm.com/architectures/instruction-sets/intrinsics/vtrn1_s8) + @(require_results, enable_target_feature = "neon") + vtrn1_s8 :: #force_inline proc "c" (a, b: int8x8_t) -> int8x8_t { + when ODIN_ENDIAN == .Little { + return simd.shuffle(a, b, 0, 8, 2, 10, 4, 12, 6, 14) + } else { + a := simd.shuffle(a, a, 7, 6, 5, 4, 3, 2, 1, 0) + b := simd.shuffle(b, b, 7, 6, 5, 4, 3, 2, 1, 0) + c := simd.shuffle(a, b, 0, 8, 2, 10, 4, 12, 6, 14) + return simd.shuffle(c, c, 7, 6, 5, 4, 3, 2, 1, 0) + } + } + + // Transpose vectors (primary). + // + // [Arm's documentation](https://developer.arm.com/architectures/instruction-sets/intrinsics/vtrn1_u8) + @(require_results, enable_target_feature = "neon") + vtrn1_u8 :: #force_inline proc "c" (a, b: uint8x8_t) -> uint8x8_t { + when ODIN_ENDIAN == .Little { + return simd.shuffle(a, b, 0, 8, 2, 10, 4, 12, 6, 14) + } else { + a := simd.shuffle(a, a, 7, 6, 5, 4, 3, 2, 1, 0) + b := simd.shuffle(b, b, 7, 6, 5, 4, 3, 2, 1, 0) + c := simd.shuffle(a, b, 0, 8, 2, 10, 4, 12, 6, 14) + return simd.shuffle(c, c, 7, 6, 5, 4, 3, 2, 1, 0) + } + } + + // Transpose vectors (primary). + // + // [Arm's documentation](https://developer.arm.com/architectures/instruction-sets/intrinsics/vtrn1_s16) + @(require_results, enable_target_feature = "neon") + vtrn1_s16 :: #force_inline proc "c" (a, b: int16x4_t) -> int16x4_t { + when ODIN_ENDIAN == .Little { + return simd.shuffle(a, b, 0, 4, 2, 6) + } else { + a := simd.shuffle(a, a, 3, 2, 1, 0) + b := simd.shuffle(b, b, 3, 2, 1, 0) + c := simd.shuffle(a, b, 0, 4, 2, 6) + return simd.shuffle(c, c, 3, 2, 1, 0) + } + } + + // Transpose vectors (primary). + // + // [Arm's documentation](https://developer.arm.com/architectures/instruction-sets/intrinsics/vtrn1_u16) + @(require_results, enable_target_feature = "neon") + vtrn1_u16 :: #force_inline proc "c" (a, b: uint16x4_t) -> uint16x4_t { + when ODIN_ENDIAN == .Little { + return simd.shuffle(a, b, 0, 4, 2, 6) + } else { + a := simd.shuffle(a, a, 3, 2, 1, 0) + b := simd.shuffle(b, b, 3, 2, 1, 0) + c := simd.shuffle(a, b, 0, 4, 2, 6) + return simd.shuffle(c, c, 3, 2, 1, 0) + } + } + + // Transpose vectors (primary). + // + // [Arm's documentation](https://developer.arm.com/architectures/instruction-sets/intrinsics/vtrn1_s32) + @(require_results, enable_target_feature = "neon") + vtrn1_s32 :: #force_inline proc "c" (a, b: int32x2_t) -> int32x2_t { + when ODIN_ENDIAN == .Little { + return simd.shuffle(a, b, 0, 2) + } else { + a := simd.shuffle(a, a, 1, 0) + b := simd.shuffle(b, b, 1, 0) + c := simd.shuffle(a, b, 0, 2) + return simd.shuffle(c, c, 1, 0) + } + } + + // Transpose vectors (primary). + // + // [Arm's documentation](https://developer.arm.com/architectures/instruction-sets/intrinsics/vtrn1_u32) + @(require_results, enable_target_feature = "neon") + vtrn1_u32 :: #force_inline proc "c" (a, b: uint32x2_t) -> uint32x2_t { + when ODIN_ENDIAN == .Little { + return simd.shuffle(a, b, 0, 2) + } else { + a := simd.shuffle(a, a, 1, 0) + b := simd.shuffle(b, b, 1, 0) + c := simd.shuffle(a, b, 0, 2) + return simd.shuffle(c, c, 1, 0) + } + } + + // Transpose vectors (primary). + // + // [Arm's documentation](https://developer.arm.com/architectures/instruction-sets/intrinsics/vtrn1q_s8) + @(require_results, enable_target_feature = "neon") + vtrn1q_s8 :: #force_inline proc "c" (a, b: int8x16_t) -> int8x16_t { + when ODIN_ENDIAN == .Little { + return simd.shuffle(a, b, 0, 16, 2, 18, 4, 20, 6, 22, 8, 24, 10, 26, 12, 28, 14, 30) + } else { + a := simd.shuffle(a, a, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0) + b := simd.shuffle(b, b, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0) + c := simd.shuffle(a, b, 0, 16, 2, 18, 4, 20, 6, 22, 8, 24, 10, 26, 12, 28, 14, 30) + return simd.shuffle(c, c, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0) + } + } + + // Transpose vectors (primary). + // + // [Arm's documentation](https://developer.arm.com/architectures/instruction-sets/intrinsics/vtrn1q_u8) + @(require_results, enable_target_feature = "neon") + vtrn1q_u8 :: #force_inline proc "c" (a, b: uint8x16_t) -> uint8x16_t { + when ODIN_ENDIAN == .Little { + return simd.shuffle(a, b, 0, 16, 2, 18, 4, 20, 6, 22, 8, 24, 10, 26, 12, 28, 14, 30) + } else { + a := simd.shuffle(a, a, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0) + b := simd.shuffle(b, b, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0) + c := simd.shuffle(a, b, 0, 16, 2, 18, 4, 20, 6, 22, 8, 24, 10, 26, 12, 28, 14, 30) + return simd.shuffle(c, c, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0) + } + } + + // Transpose vectors (primary). + // + // [Arm's documentation](https://developer.arm.com/architectures/instruction-sets/intrinsics/vtrn1q_s16) + @(require_results, enable_target_feature = "neon") + vtrn1q_s16 :: #force_inline proc "c" (a, b: int16x8_t) -> int16x8_t { + when ODIN_ENDIAN == .Little { + return simd.shuffle(a, b, 0, 8, 2, 10, 4, 12, 6, 14) + } else { + a := simd.shuffle(a, a, 7, 6, 5, 4, 3, 2, 1, 0) + b := simd.shuffle(b, b, 7, 6, 5, 4, 3, 2, 1, 0) + c := simd.shuffle(a, b, 0, 8, 2, 10, 4, 12, 6, 14) + return simd.shuffle(c, c, 7, 6, 5, 4, 3, 2, 1, 0) + } + } + + // Transpose vectors (primary). + // + // [Arm's documentation](https://developer.arm.com/architectures/instruction-sets/intrinsics/vtrn1q_u16) + @(require_results, enable_target_feature = "neon") + vtrn1q_u16 :: #force_inline proc "c" (a, b: uint16x8_t) -> uint16x8_t { + when ODIN_ENDIAN == .Little { + return simd.shuffle(a, b, 0, 8, 2, 10, 4, 12, 6, 14) + } else { + a := simd.shuffle(a, a, 7, 6, 5, 4, 3, 2, 1, 0) + b := simd.shuffle(b, b, 7, 6, 5, 4, 3, 2, 1, 0) + c := simd.shuffle(a, b, 0, 8, 2, 10, 4, 12, 6, 14) + return simd.shuffle(c, c, 7, 6, 5, 4, 3, 2, 1, 0) + } + } + + // Transpose vectors (primary). + // + // [Arm's documentation](https://developer.arm.com/architectures/instruction-sets/intrinsics/vtrn1q_s32) + @(require_results, enable_target_feature = "neon") + vtrn1q_s32 :: #force_inline proc "c" (a, b: int32x4_t) -> int32x4_t { + when ODIN_ENDIAN == .Little { + return simd.shuffle(a, b, 0, 4, 2, 6) + } else { + a := simd.shuffle(a, a, 3, 2, 1, 0) + b := simd.shuffle(b, b, 3, 2, 1, 0) + c := simd.shuffle(a, b, 0, 4, 2, 6) + return simd.shuffle(c, c, 3, 2, 1, 0) + } + } + + // Transpose vectors (primary). + // + // [Arm's documentation](https://developer.arm.com/architectures/instruction-sets/intrinsics/vtrn1q_u32) + @(require_results, enable_target_feature = "neon") + vtrn1q_u32 :: #force_inline proc "c" (a, b: uint32x4_t) -> uint32x4_t { + when ODIN_ENDIAN == .Little { + return simd.shuffle(a, b, 0, 4, 2, 6) + } else { + a := simd.shuffle(a, a, 3, 2, 1, 0) + b := simd.shuffle(b, b, 3, 2, 1, 0) + c := simd.shuffle(a, b, 0, 4, 2, 6) + return simd.shuffle(c, c, 3, 2, 1, 0) + } + } + + // Transpose vectors (primary). + // + // [Arm's documentation](https://developer.arm.com/architectures/instruction-sets/intrinsics/vtrn1q_s64) + @(require_results, enable_target_feature = "neon") + vtrn1q_s64 :: #force_inline proc "c" (a, b: int64x2_t) -> int64x2_t { + when ODIN_ENDIAN == .Little { + return simd.shuffle(a, b, 0, 2) + } else { + a := simd.shuffle(a, a, 1, 0) + b := simd.shuffle(b, b, 1, 0) + c := simd.shuffle(a, b, 0, 2) + return simd.shuffle(c, c, 1, 0) + } + } + + // Transpose vectors (primary). + // + // [Arm's documentation](https://developer.arm.com/architectures/instruction-sets/intrinsics/vtrn1q_u64) + @(require_results, enable_target_feature = "neon") + vtrn1q_u64 :: #force_inline proc "c" (a, b: uint64x2_t) -> uint64x2_t { + when ODIN_ENDIAN == .Little { + return simd.shuffle(a, b, 0, 2) + } else { + a := simd.shuffle(a, a, 1, 0) + b := simd.shuffle(b, b, 1, 0) + c := simd.shuffle(a, b, 0, 2) + return simd.shuffle(c, c, 1, 0) + } + } + + // Transpose vectors (secondary). + // + // [Arm's documentation](https://developer.arm.com/architectures/instruction-sets/intrinsics/vtrn2_s8) + @(require_results, enable_target_feature = "neon") + vtrn2_s8 :: #force_inline proc "c" (a, b: int8x8_t) -> int8x8_t { + when ODIN_ENDIAN == .Little { + return simd.shuffle(a, b, 1, 9, 3, 11, 5, 13, 7, 15) + } else { + a := simd.shuffle(a, a, 7, 6, 5, 4, 3, 2, 1, 0) + b := simd.shuffle(b, b, 7, 6, 5, 4, 3, 2, 1, 0) + c := simd.shuffle(a, b, 1, 9, 3, 11, 5, 13, 7, 15) + return simd.shuffle(c, c, 7, 6, 5, 4, 3, 2, 1, 0) + } + } + + // Transpose vectors (secondary). + // + // [Arm's documentation](https://developer.arm.com/architectures/instruction-sets/intrinsics/vtrn2_u8) + @(require_results, enable_target_feature = "neon") + vtrn2_u8 :: #force_inline proc "c" (a, b: uint8x8_t) -> uint8x8_t { + when ODIN_ENDIAN == .Little { + return simd.shuffle(a, b, 1, 9, 3, 11, 5, 13, 7, 15) + } else { + a := simd.shuffle(a, a, 7, 6, 5, 4, 3, 2, 1, 0) + b := simd.shuffle(b, b, 7, 6, 5, 4, 3, 2, 1, 0) + c := simd.shuffle(a, b, 1, 9, 3, 11, 5, 13, 7, 15) + return simd.shuffle(c, c, 7, 6, 5, 4, 3, 2, 1, 0) + } + } + + // Transpose vectors (secondary). + // + // [Arm's documentation](https://developer.arm.com/architectures/instruction-sets/intrinsics/vtrn2_s16) + @(require_results, enable_target_feature = "neon") + vtrn2_s16 :: #force_inline proc "c" (a, b: int16x4_t) -> int16x4_t { + when ODIN_ENDIAN == .Little { + return simd.shuffle(a, b, 1, 5, 3, 7) + } else { + a := simd.shuffle(a, a, 3, 2, 1, 0) + b := simd.shuffle(b, b, 3, 2, 1, 0) + c := simd.shuffle(a, b, 1, 5, 3, 7) + return simd.shuffle(c, c, 3, 2, 1, 0) + } + } + + // Transpose vectors (secondary). + // + // [Arm's documentation](https://developer.arm.com/architectures/instruction-sets/intrinsics/vtrn2_u16) + @(require_results, enable_target_feature = "neon") + vtrn2_u16 :: #force_inline proc "c" (a, b: uint16x4_t) -> uint16x4_t { + when ODIN_ENDIAN == .Little { + return simd.shuffle(a, b, 1, 5, 3, 7) + } else { + a := simd.shuffle(a, a, 3, 2, 1, 0) + b := simd.shuffle(b, b, 3, 2, 1, 0) + c := simd.shuffle(a, b, 1, 5, 3, 7) + return simd.shuffle(c, c, 3, 2, 1, 0) + } + } + + // Transpose vectors (secondary). + // + // [Arm's documentation](https://developer.arm.com/architectures/instruction-sets/intrinsics/vtrn2_s32) + @(require_results, enable_target_feature = "neon") + vtrn2_s32 :: #force_inline proc "c" (a, b: int32x2_t) -> int32x2_t { + when ODIN_ENDIAN == .Little { + return simd.shuffle(a, b, 1, 3) + } else { + a := simd.shuffle(a, a, 1, 0) + b := simd.shuffle(b, b, 1, 0) + c := simd.shuffle(a, b, 1, 3) + return simd.shuffle(c, c, 1, 0) + } + } + + // Transpose vectors (secondary). + // + // [Arm's documentation](https://developer.arm.com/architectures/instruction-sets/intrinsics/vtrn2_u32) + @(require_results, enable_target_feature = "neon") + vtrn2_u32 :: #force_inline proc "c" (a, b: uint32x2_t) -> uint32x2_t { + when ODIN_ENDIAN == .Little { + return simd.shuffle(a, b, 1, 3) + } else { + a := simd.shuffle(a, a, 1, 0) + b := simd.shuffle(b, b, 1, 0) + c := simd.shuffle(a, b, 1, 3) + return simd.shuffle(c, c, 1, 0) + } + } + + // Transpose vectors (secondary). + // + // [Arm's documentation](https://developer.arm.com/architectures/instruction-sets/intrinsics/vtrn2q_s8) + @(require_results, enable_target_feature = "neon") + vtrn2q_s8 :: #force_inline proc "c" (a, b: int8x16_t) -> int8x16_t { + when ODIN_ENDIAN == .Little { + return simd.shuffle(a, b, 1, 17, 3, 19, 5, 21, 7, 23, 9, 25, 11, 27, 13, 29, 15, 31) + } else { + a := simd.shuffle(a, a, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0) + b := simd.shuffle(b, b, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0) + c := simd.shuffle(a, b, 1, 17, 3, 19, 5, 21, 7, 23, 9, 25, 11, 27, 13, 29, 15, 31) + return simd.shuffle(c, c, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0) + } + } + + // Transpose vectors (secondary). + // + // [Arm's documentation](https://developer.arm.com/architectures/instruction-sets/intrinsics/vtrn2q_u8) + @(require_results, enable_target_feature = "neon") + vtrn2q_u8 :: #force_inline proc "c" (a, b: uint8x16_t) -> uint8x16_t { + when ODIN_ENDIAN == .Little { + return simd.shuffle(a, b, 1, 17, 3, 19, 5, 21, 7, 23, 9, 25, 11, 27, 13, 29, 15, 31) + } else { + a := simd.shuffle(a, a, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0) + b := simd.shuffle(b, b, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0) + c := simd.shuffle(a, b, 1, 17, 3, 19, 5, 21, 7, 23, 9, 25, 11, 27, 13, 29, 15, 31) + return simd.shuffle(c, c, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0) + } + } + + // Transpose vectors (secondary). + // + // [Arm's documentation](https://developer.arm.com/architectures/instruction-sets/intrinsics/vtrn2q_s16) + @(require_results, enable_target_feature = "neon") + vtrn2q_s16 :: #force_inline proc "c" (a, b: int16x8_t) -> int16x8_t { + when ODIN_ENDIAN == .Little { + return simd.shuffle(a, b, 1, 9, 3, 11, 5, 13, 7, 15) + } else { + a := simd.shuffle(a, a, 7, 6, 5, 4, 3, 2, 1, 0) + b := simd.shuffle(b, b, 7, 6, 5, 4, 3, 2, 1, 0) + c := simd.shuffle(a, b, 1, 9, 3, 11, 5, 13, 7, 15) + return simd.shuffle(c, c, 7, 6, 5, 4, 3, 2, 1, 0) + } + } + + // Transpose vectors (secondary). + // + // [Arm's documentation](https://developer.arm.com/architectures/instruction-sets/intrinsics/vtrn2q_u16) + @(require_results, enable_target_feature = "neon") + vtrn2q_u16 :: #force_inline proc "c" (a, b: uint16x8_t) -> uint16x8_t { + when ODIN_ENDIAN == .Little { + return simd.shuffle(a, b, 1, 9, 3, 11, 5, 13, 7, 15) + } else { + a := simd.shuffle(a, a, 7, 6, 5, 4, 3, 2, 1, 0) + b := simd.shuffle(b, b, 7, 6, 5, 4, 3, 2, 1, 0) + c := simd.shuffle(a, b, 1, 9, 3, 11, 5, 13, 7, 15) + return simd.shuffle(c, c, 7, 6, 5, 4, 3, 2, 1, 0) + } + } + + // Transpose vectors (secondary). + // + // [Arm's documentation](https://developer.arm.com/architectures/instruction-sets/intrinsics/vtrn2q_s32) + @(require_results, enable_target_feature = "neon") + vtrn2q_s32 :: #force_inline proc "c" (a, b: int32x4_t) -> int32x4_t { + when ODIN_ENDIAN == .Little { + return simd.shuffle(a, b, 1, 5, 3, 7) + } else { + a := simd.shuffle(a, a, 3, 2, 1, 0) + b := simd.shuffle(b, b, 3, 2, 1, 0) + c := simd.shuffle(a, b, 1, 5, 3, 7) + return simd.shuffle(c, c, 3, 2, 1, 0) + } + } + + // Transpose vectors (secondary). + // + // [Arm's documentation](https://developer.arm.com/architectures/instruction-sets/intrinsics/vtrn2q_u32) + @(require_results, enable_target_feature = "neon") + vtrn2q_u32 :: #force_inline proc "c" (a, b: uint32x4_t) -> uint32x4_t { + when ODIN_ENDIAN == .Little { + return simd.shuffle(a, b, 1, 5, 3, 7) + } else { + a := simd.shuffle(a, a, 3, 2, 1, 0) + b := simd.shuffle(b, b, 3, 2, 1, 0) + c := simd.shuffle(a, b, 1, 5, 3, 7) + return simd.shuffle(c, c, 3, 2, 1, 0) + } + } + + // Transpose vectors (secondary). + // + // [Arm's documentation](https://developer.arm.com/architectures/instruction-sets/intrinsics/vtrn2q_s64) + @(require_results, enable_target_feature = "neon") + vtrn2q_s64 :: #force_inline proc "c" (a, b: int64x2_t) -> int64x2_t { + when ODIN_ENDIAN == .Little { + return simd.shuffle(a, b, 1, 3) + } else { + a := simd.shuffle(a, a, 1, 0) + b := simd.shuffle(b, b, 1, 0) + c := simd.shuffle(a, b, 1, 3) + return simd.shuffle(c, c, 1, 0) + } + } + + // Transpose vectors (secondary). + // + // [Arm's documentation](https://developer.arm.com/architectures/instruction-sets/intrinsics/vtrn2q_u64) + @(require_results, enable_target_feature = "neon") + vtrn2q_u64 :: #force_inline proc "c" (a, b: uint64x2_t) -> uint64x2_t { + when ODIN_ENDIAN == .Little { + return simd.shuffle(a, b, 1, 3) + } else { + a := simd.shuffle(a, a, 1, 0) + b := simd.shuffle(b, b, 1, 0) + c := simd.shuffle(a, b, 1, 3) + return simd.shuffle(c, c, 1, 0) + } + } } @(private, default_calling_convention = "none") diff --git a/core/simd/arm/pmull.odin b/core/simd/arm/pmull.odin index a05301ac3..a65e06630 100644 --- a/core/simd/arm/pmull.odin +++ b/core/simd/arm/pmull.odin @@ -2233,6 +2233,172 @@ when ODIN_ARCH == .arm64 { return simd.shuffle(c, c, 1, 0) } } + + // Reverse bit order. + // + // [Arm's documentation](https://developer.arm.com/architectures/instruction-sets/intrinsics/vrbit_p8) + @(require_results, enable_target_feature = "neon") + vrbit_p8 :: #force_inline proc "c" (a: poly8x8_t) -> poly8x8_t { + return simd.reverse_bits(a) + } + + // Reverse bit order. + // + // [Arm's documentation](https://developer.arm.com/architectures/instruction-sets/intrinsics/vrbitq_p8) + @(require_results, enable_target_feature = "neon") + vrbitq_p8 :: #force_inline proc "c" (a: poly8x16_t) -> poly8x16_t { + return simd.reverse_bits(a) + } + + // Transpose vectors (primary). + // + // [Arm's documentation](https://developer.arm.com/architectures/instruction-sets/intrinsics/vtrn1_p8) + @(require_results, enable_target_feature = "neon") + vtrn1_p8 :: #force_inline proc "c" (a, b: poly8x8_t) -> poly8x8_t { + when ODIN_ENDIAN == .Little { + return simd.shuffle(a, b, 0, 8, 2, 10, 4, 12, 6, 14) + } else { + a := simd.shuffle(a, a, 7, 6, 5, 4, 3, 2, 1, 0) + b := simd.shuffle(b, b, 7, 6, 5, 4, 3, 2, 1, 0) + c := simd.shuffle(a, b, 0, 8, 2, 10, 4, 12, 6, 14) + return simd.shuffle(c, c, 7, 6, 5, 4, 3, 2, 1, 0) + } + } + + // Transpose vectors (primary). + // + // [Arm's documentation](https://developer.arm.com/architectures/instruction-sets/intrinsics/vtrn1_p16) + @(require_results, enable_target_feature = "neon") + vtrn1_p16 :: #force_inline proc "c" (a, b: poly16x4_t) -> poly16x4_t { + when ODIN_ENDIAN == .Little { + return simd.shuffle(a, b, 0, 4, 2, 6) + } else { + a := simd.shuffle(a, a, 3, 2, 1, 0) + b := simd.shuffle(b, b, 3, 2, 1, 0) + c := simd.shuffle(a, b, 0, 4, 2, 6) + return simd.shuffle(c, c, 3, 2, 1, 0) + } + } + + // Transpose vectors (primary). + // + // [Arm's documentation](https://developer.arm.com/architectures/instruction-sets/intrinsics/vtrn1q_p8) + @(require_results, enable_target_feature = "neon") + vtrn1q_p8 :: #force_inline proc "c" (a, b: poly8x16_t) -> poly8x16_t { + when ODIN_ENDIAN == .Little { + return simd.shuffle(a, b, 0, 16, 2, 18, 4, 20, 6, 22, 8, 24, 10, 26, 12, 28, 14, 30) + } else { + a := simd.shuffle(a, a, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0) + b := simd.shuffle(b, b, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0) + c := simd.shuffle(a, b, 0, 16, 2, 18, 4, 20, 6, 22, 8, 24, 10, 26, 12, 28, 14, 30) + return simd.shuffle(c, c, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0) + } + } + + // Transpose vectors (primary). + // + // [Arm's documentation](https://developer.arm.com/architectures/instruction-sets/intrinsics/vtrn1q_p16) + @(require_results, enable_target_feature = "neon") + vtrn1q_p16 :: #force_inline proc "c" (a, b: poly16x8_t) -> poly16x8_t { + when ODIN_ENDIAN == .Little { + return simd.shuffle(a, b, 0, 8, 2, 10, 4, 12, 6, 14) + } else { + a := simd.shuffle(a, a, 7, 6, 5, 4, 3, 2, 1, 0) + b := simd.shuffle(b, b, 7, 6, 5, 4, 3, 2, 1, 0) + c := simd.shuffle(a, b, 0, 8, 2, 10, 4, 12, 6, 14) + return simd.shuffle(c, c, 7, 6, 5, 4, 3, 2, 1, 0) + } + } + + // Transpose vectors (primary). + // + // [Arm's documentation](https://developer.arm.com/architectures/instruction-sets/intrinsics/vtrn1q_p64) + @(require_results, enable_target_feature = "neon") + vtrn1q_p64 :: #force_inline proc "c" (a, b: poly64x2_t) -> poly64x2_t { + when ODIN_ENDIAN == .Little { + return simd.shuffle(a, b, 0, 2) + } else { + a := simd.shuffle(a, a, 1, 0) + b := simd.shuffle(b, b, 1, 0) + c := simd.shuffle(a, b, 0, 2) + return simd.shuffle(c, c, 1, 0) + } + } + + // Transpose vectors (secondary). + // + // [Arm's documentation](https://developer.arm.com/architectures/instruction-sets/intrinsics/vtrn2_p8) + @(require_results, enable_target_feature = "neon") + vtrn2_p8 :: #force_inline proc "c" (a, b: poly8x8_t) -> poly8x8_t { + when ODIN_ENDIAN == .Little { + return simd.shuffle(a, b, 1, 9, 3, 11, 5, 13, 7, 15) + } else { + a := simd.shuffle(a, a, 7, 6, 5, 4, 3, 2, 1, 0) + b := simd.shuffle(b, b, 7, 6, 5, 4, 3, 2, 1, 0) + c := simd.shuffle(a, b, 1, 9, 3, 11, 5, 13, 7, 15) + return simd.shuffle(c, c, 7, 6, 5, 4, 3, 2, 1, 0) + } + } + + // Transpose vectors (secondary). + // + // [Arm's documentation](https://developer.arm.com/architectures/instruction-sets/intrinsics/vtrn2_p16) + @(require_results, enable_target_feature = "neon") + vtrn2_p16 :: #force_inline proc "c" (a, b: poly16x4_t) -> poly16x4_t { + when ODIN_ENDIAN == .Little { + return simd.shuffle(a, b, 1, 5, 3, 7) + } else { + a := simd.shuffle(a, a, 3, 2, 1, 0) + b := simd.shuffle(b, b, 3, 2, 1, 0) + c := simd.shuffle(a, b, 1, 5, 3, 7) + return simd.shuffle(c, c, 3, 2, 1, 0) + } + } + + // Transpose vectors (secondary). + // + // [Arm's documentation](https://developer.arm.com/architectures/instruction-sets/intrinsics/vtrn2q_p8) + @(require_results, enable_target_feature = "neon") + vtrn2q_p8 :: #force_inline proc "c" (a, b: poly8x16_t) -> poly8x16_t { + when ODIN_ENDIAN == .Little { + return simd.shuffle(a, b, 1, 17, 3, 19, 5, 21, 7, 23, 9, 25, 11, 27, 13, 29, 15, 31) + } else { + a := simd.shuffle(a, a, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0) + b := simd.shuffle(b, b, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0) + c := simd.shuffle(a, b, 1, 17, 3, 19, 5, 21, 7, 23, 9, 25, 11, 27, 13, 29, 15, 31) + return simd.shuffle(c, c, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0) + } + } + + // Transpose vectors (secondary). + // + // [Arm's documentation](https://developer.arm.com/architectures/instruction-sets/intrinsics/vtrn2q_p16) + @(require_results, enable_target_feature = "neon") + vtrn2q_p16 :: #force_inline proc "c" (a, b: poly16x8_t) -> poly16x8_t { + when ODIN_ENDIAN == .Little { + return simd.shuffle(a, b, 1, 9, 3, 11, 5, 13, 7, 15) + } else { + a := simd.shuffle(a, a, 7, 6, 5, 4, 3, 2, 1, 0) + b := simd.shuffle(b, b, 7, 6, 5, 4, 3, 2, 1, 0) + c := simd.shuffle(a, b, 1, 9, 3, 11, 5, 13, 7, 15) + return simd.shuffle(c, c, 7, 6, 5, 4, 3, 2, 1, 0) + } + } + + // Transpose vectors (secondary). + // + // [Arm's documentation](https://developer.arm.com/architectures/instruction-sets/intrinsics/vtrn2q_p64) + @(require_results, enable_target_feature = "neon") + vtrn2q_p64 :: #force_inline proc "c" (a, b: poly64x2_t) -> poly64x2_t { + when ODIN_ENDIAN == .Little { + return simd.shuffle(a, b, 1, 3) + } else { + a := simd.shuffle(a, a, 1, 0) + b := simd.shuffle(b, b, 1, 0) + c := simd.shuffle(a, b, 1, 3) + return simd.shuffle(c, c, 1, 0) + } + } } @(private, default_calling_convention = "none") From 9453e0e75eb0a43e580c63cdab6f19381be3a474 Mon Sep 17 00:00:00 2001 From: Louis Novy <101842021+louisnovy@users.noreply.github.com> Date: Sat, 26 Sep 2026 19:39:53 -0400 Subject: [PATCH 021/215] Fix broadcasting arrays of matrices and matrices --- src/llvm_backend_expr.cpp | 7 ++++++ src/llvm_backend_stmt.cpp | 2 +- tests/issues/run.bat | 1 + tests/issues/run.sh | 1 + tests/issues/test_issue_6302.odin | 39 +++++++++++++++++++++++++++++++ 5 files changed, 49 insertions(+), 1 deletion(-) create mode 100644 tests/issues/test_issue_6302.odin diff --git a/src/llvm_backend_expr.cpp b/src/llvm_backend_expr.cpp index dbca83803..8b9f41750 100644 --- a/src/llvm_backend_expr.cpp +++ b/src/llvm_backend_expr.cpp @@ -1412,6 +1412,13 @@ gb_internal lbValue lb_emit_vector_mul_matrix(lbProcedure *p, lbValue lhs, lbVal gb_internal lbValue lb_emit_arith_matrix(lbProcedure *p, TokenKind op, lbValue lhs, lbValue rhs, Type *type, bool component_wise) { GB_ASSERT(is_type_matrix(lhs.type) || is_type_matrix(rhs.type)); + // NOTE: Only an array of the matrix's element type is a vector. Any other array is array programming. (See #6302) + Type *elem = base_array_type(is_type_matrix(lhs.type) ? lhs.type : rhs.type); + if ((is_type_array_like(lhs.type) && !are_types_identical(base_array_type(lhs.type), elem)) || + (is_type_array_like(rhs.type) && !are_types_identical(base_array_type(rhs.type), elem))) { + return lb_emit_arith_array(p, op, lhs, rhs, type); + } + if (op == Token_Mul && !component_wise) { Type *xt = base_type(lhs.type); Type *yt = base_type(rhs.type); diff --git a/src/llvm_backend_stmt.cpp b/src/llvm_backend_stmt.cpp index a0f0f48a3..74ffdaf82 100644 --- a/src/llvm_backend_stmt.cpp +++ b/src/llvm_backend_stmt.cpp @@ -3207,7 +3207,7 @@ gb_internal void lb_build_assign_stmt(lbProcedure *p, AstAssignStmt *as) { if (op == Token_Mul && is_type_matrix(value.type) && is_type_array(lhs_type)) { lbValue old_value = lb_addr_load(p, lhs); Type *type = old_value.type; - lbValue new_value = lb_emit_vector_mul_matrix(p, old_value, value, type); + lbValue new_value = lb_emit_arith_matrix(p, op, old_value, value, type, false); lb_addr_store(p, lhs, new_value); return; } diff --git a/tests/issues/run.bat b/tests/issues/run.bat index 0a3127946..b10f6d786 100644 --- a/tests/issues/run.bat +++ b/tests/issues/run.bat @@ -30,6 +30,7 @@ set COMMON=-define:ODIN_TEST_FANCY=false -file -vet -strict-style -ignore-unused ..\..\..\odin test ..\test_issue_5699.odin %COMMON% || exit /b ..\..\..\odin test ..\test_issue_6068.odin %COMMON% || exit /b ..\..\..\odin test ..\test_issue_6165.odin %COMMON% || exit /b +..\..\..\odin test ..\test_issue_6302.odin %COMMON% || exit /b ..\..\..\odin build ..\test_issue_6240.odin %COMMON% 2>&1 | find /c "Error:" | findstr /x "3" || exit /b ..\..\..\odin build ..\test_issue_6401.odin %COMMON% 2>&1 | find /c "Error:" | findstr /x "3" || exit /b ..\..\..\odin test ..\test_issue_6419.odin %COMMON% || exit /b diff --git a/tests/issues/run.sh b/tests/issues/run.sh index 08d2db369..cf1f81a01 100755 --- a/tests/issues/run.sh +++ b/tests/issues/run.sh @@ -42,6 +42,7 @@ fi $ODIN test ../test_issue_5699.odin $COMMON $ODIN test ../test_issue_6068.odin $COMMON $ODIN test ../test_issue_6165.odin $COMMON +$ODIN test ../test_issue_6302.odin $COMMON $ODIN test ../test_issue_6344.odin $COMMON $ODIN test ../test_issue_6344.odin $COMMON -o:speed $ODIN test ../test_issue_6396.odin $COMMON diff --git a/tests/issues/test_issue_6302.odin b/tests/issues/test_issue_6302.odin new file mode 100644 index 000000000..89e6e61af --- /dev/null +++ b/tests/issues/test_issue_6302.odin @@ -0,0 +1,39 @@ +// Tests issue #6302 https://github.com/odin-lang/Odin/issues/6302 +package test_issues + +import "core:testing" + +@(test) +test_issue_6302 :: proc(t: ^testing.T) { + a := [2]matrix[2, 2]f32{{0, 1, 2, 3}, {4, 5, 6, 7}} + b := matrix[2, 2]f32{10, 10, 10, 10} + + ab_plus := a + b + testing.expect(t, ab_plus[0] == {10, 11, 12, 13}) + testing.expect(t, ab_plus[1] == {14, 15, 16, 17}) + + ba_minus := b - a + testing.expect(t, ba_minus[0] == {10, 9, 8, 7}) + testing.expect(t, ba_minus[1] == {6, 5, 4, 3}) + + ab_mult := a * b + testing.expect(t, ab_mult[0] == {10, 10, 50, 50}) + testing.expect(t, ab_mult[1] == {90, 90, 130, 130}) + + ba_mult := b * a + testing.expect(t, ba_mult[0] == {20, 40, 20, 40}) + testing.expect(t, ba_mult[1] == {100, 120, 100, 120}) + + aa_mult := a * a + testing.expect(t, aa_mult[0] == {2, 3, 6, 11}) + testing.expect(t, aa_mult[1] == {46, 55, 66, 79}) + + n := [2][2]matrix[2, 2]f32{{a[0], a[1]}, {a[1], a[0]}} + nb_mult := n * b + testing.expect(t, nb_mult[0][1] == {90, 90, 130, 130}) + testing.expect(t, nb_mult[1][1] == {10, 10, 50, 50}) + + a *= b + testing.expect(t, a[0] == {10, 10, 50, 50}) + testing.expect(t, a[1] == {90, 90, 130, 130}) +} From 13988d863a0922847a2b8a4ebd82f395a78d9647 Mon Sep 17 00:00:00 2001 From: Louis Novy <101842021+louisnovy@users.noreply.github.com> Date: Sat, 26 Sep 2026 21:46:20 -0400 Subject: [PATCH 022/215] Fix forwarded `$` procedure parameters reusing the first instantiation --- src/check_type.cpp | 2 +- tests/issues/run.bat | 1 + tests/issues/run.sh | 1 + .../test_issue_forwarded_poly_proc.odin | 24 +++++++++++++++++++ 4 files changed, 27 insertions(+), 1 deletion(-) create mode 100644 tests/issues/test_issue_forwarded_poly_proc.odin diff --git a/src/check_type.cpp b/src/check_type.cpp index cb99bb4d9..3f2084909 100644 --- a/src/check_type.cpp +++ b/src/check_type.cpp @@ -2208,7 +2208,7 @@ gb_internal Type *check_get_params(CheckerContext *ctx, Scope *scope, Ast *_para bool valid = false; if (is_type_proc(op.type)) { Ast *expr = unparen_expr(op.expr); - Entity *proc_entity = entity_from_expr(expr); + Entity *proc_entity = strip_entity_wrapping(expr); if (proc_entity) { poly_const = exact_value_procedure(proc_entity->identifier.load() ? proc_entity->identifier.load() : op.expr); valid = true; diff --git a/tests/issues/run.bat b/tests/issues/run.bat index 0a3127946..db165a28e 100644 --- a/tests/issues/run.bat +++ b/tests/issues/run.bat @@ -45,6 +45,7 @@ set COMMON=-define:ODIN_TEST_FANCY=false -file -vet -strict-style -ignore-unused ..\..\..\odin test ..\test_issue_bool_to_be_conversion.odin %COMMON% || exit /b ..\..\..\odin test ..\test_issue_bool_comparison_truthiness.odin %COMMON% || exit /b ..\..\..\odin test ..\test_issue_const_array_broadcast.odin %COMMON% || exit /b +..\..\..\odin test ..\test_issue_forwarded_poly_proc.odin %COMMON% || exit /b ..\..\..\odin check ..\test_issue_7336.odin -no-entry-point %COMMON% || exit /b ..\..\..\odin check ..\test_issue_ellipsis_type_call.odin -no-entry-point %COMMON% 2>&1 | find /c "Error:" | findstr /x "10" || exit /b ..\..\..\odin check ..\test_issue_foreign_redeclaration.odin -no-entry-point %COMMON% || exit /b diff --git a/tests/issues/run.sh b/tests/issues/run.sh index 08d2db369..a528fa5df 100755 --- a/tests/issues/run.sh +++ b/tests/issues/run.sh @@ -108,6 +108,7 @@ $ODIN check ../test_issue_7260.odin -no-entry-point $COMMON_CHECK $ODIN test ../test_issue_bool_to_be_conversion.odin $COMMON $ODIN test ../test_issue_bool_comparison_truthiness.odin $COMMON $ODIN test ../test_issue_const_array_broadcast.odin $COMMON +$ODIN test ../test_issue_forwarded_poly_proc.odin $COMMON $ODIN test ../test_issue_swizzle_multi_assign.odin $COMMON $ODIN check ../test_issue_foreign_redeclaration.odin -no-entry-point $COMMON_CHECK diff --git a/tests/issues/test_issue_forwarded_poly_proc.odin b/tests/issues/test_issue_forwarded_poly_proc.odin new file mode 100644 index 000000000..56b3c3d89 --- /dev/null +++ b/tests/issues/test_issue_forwarded_poly_proc.odin @@ -0,0 +1,24 @@ +package test_issues + +import "core:testing" + +// Passing a `$` proc parameter to another `$` parameter used to reuse the first instantiation, +// making every forwarding call run the procedure given to the first one. + +apply :: proc(v: ^int, $f: proc(^int)) { f(v) } +forward :: proc(v: ^int, $f: proc(^int)) { apply(v, f) } +twice :: proc(v: ^int, $f: proc(^int)) { forward(v, f) } +one :: proc(v: ^int) { v^ += 1 } +hundred :: proc(v: ^int) { v^ += 100 } + +@(test) +forwarded_poly_proc :: proc(t: ^testing.T) { + x := 0 + forward(&x, one) + forward(&x, hundred) + twice(&x, one) + twice(&x, hundred) + forward(&x, proc(v: ^int) { v^ += 1 }) + forward(&x, proc(v: ^int) { v^ += 100 }) + testing.expect_value(t, x, 303) +} From d65d743ab71fc5da9f23ea519e64f0a10da9f912 Mon Sep 17 00:00:00 2001 From: Louis Novy <101842021+louisnovy@users.noreply.github.com> Date: Sat, 26 Sep 2026 22:22:42 -0400 Subject: [PATCH 023/215] Fix full length swizzles through a pointer keeping the pointer type --- src/check_expr.cpp | 4 ++-- tests/issues/run.bat | 1 + tests/issues/run.sh | 1 + tests/issues/test_issue_7587.odin | 16 ++++++++++++++++ 4 files changed, 20 insertions(+), 2 deletions(-) create mode 100644 tests/issues/test_issue_7587.odin diff --git a/src/check_expr.cpp b/src/check_expr.cpp index 758d7a5fd..fade7a46c 100644 --- a/src/check_expr.cpp +++ b/src/check_expr.cpp @@ -5830,7 +5830,7 @@ gb_internal Type *determine_swizzle_array_type(Type *original_type, Type *type_h Type *elem_type = array_type->Array.elem; Type *swizzle_array_type = nullptr; - Type *bth = base_type(type_deref(type_hint)); + Type *bth = base_type(type_hint); if (bth != nullptr && bth->kind == Type_Array && bth->Array.count == new_count && are_types_identical(bth->Array.elem, elem_type)) { @@ -5838,7 +5838,7 @@ gb_internal Type *determine_swizzle_array_type(Type *original_type, Type *type_h } else { i64 max_count = array_type->Array.count; if (new_count == max_count) { - swizzle_array_type = original_type; + swizzle_array_type = type_deref(original_type); } else { swizzle_array_type = alloc_type_array(elem_type, new_count); } diff --git a/tests/issues/run.bat b/tests/issues/run.bat index 0a3127946..f19e17313 100644 --- a/tests/issues/run.bat +++ b/tests/issues/run.bat @@ -61,6 +61,7 @@ clang -c ..\test_issue_sysv_abi.c -o test_issue_sysv_abi_c.o || exit /b ..\..\..\odin run ..\test_issue_7482.odin %COMMON% || exit /b ..\..\..\odin run ..\test_issue_7562.odin %COMMON% -no-crt -no-thread-local || exit /b ..\..\..\odin run ..\test_issue_7562.odin %COMMON% -no-crt -no-thread-local -o:speed || exit /b +..\..\..\odin test ..\test_issue_7587.odin %COMMON% || exit /b @echo off diff --git a/tests/issues/run.sh b/tests/issues/run.sh index 08d2db369..eb889fa41 100755 --- a/tests/issues/run.sh +++ b/tests/issues/run.sh @@ -92,6 +92,7 @@ $ODIN check ../test_issue_7012.odin -no-entry-point $COMMON_CHECK $ODIN build ../test_issue_7037.odin $COMMON -o:none $ODIN run ../test_issue_7482.odin $COMMON $ODIN run ../test_issue_7564.odin $COMMON +$ODIN test ../test_issue_7587.odin $COMMON $ODIN test ../test_issue_7421.odin $COMMON if [[ $($ODIN check ../test_issue_7421_tagged_duplicate.odin $COMMON_CHECK 2>&1 >/dev/null | grep -c "Error: Duplicate case") -eq 1 ]]; then echo "SUCCESSFUL 1/1" diff --git a/tests/issues/test_issue_7587.odin b/tests/issues/test_issue_7587.odin new file mode 100644 index 000000000..c6458a9a7 --- /dev/null +++ b/tests/issues/test_issue_7587.odin @@ -0,0 +1,16 @@ +// Tests issue #7587 https://github.com/odin-lang/Odin/issues/7587 +package test_issues + +import "core:testing" + +@(test) +test_issue_7587 :: proc(t: ^testing.T) { + v := [4]f32{1, 2, 3, 4} + p := &v + + w := p.wzyx + testing.expect_value(t, w, [4]f32{4, 3, 2, 1}) + + p.wzyx = {1, 2, 3, 4} + testing.expect_value(t, v, [4]f32{4, 3, 2, 1}) +} From 11c3c339702c533f6a26d50905247f5b6e67fbb4 Mon Sep 17 00:00:00 2001 From: Matthias Huerbe Date: Sun, 27 Sep 2026 13:56:41 +0200 Subject: [PATCH 024/215] changed variable names to be more descriptive --- core/strconv/LICENSE_fast_float | 2 +- core/strconv/fast_float.odin | 93 +++++++++++++++++---------------- 2 files changed, 48 insertions(+), 47 deletions(-) diff --git a/core/strconv/LICENSE_fast_float b/core/strconv/LICENSE_fast_float index 8ddef69e7..70afbb92d 100644 --- a/core/strconv/LICENSE_fast_float +++ b/core/strconv/LICENSE_fast_float @@ -1,4 +1,4 @@ -This license applies to the Eisel-Lemire code and the _POW5_128 table in +This license applies to the Eisel-Lemire code and the _POWER_OF_FIVE_128 table in fast_float.odin, which are ported from ffc.h and fast_float. ffc.h: https://github.com/kolemannix/ffc.h diff --git a/core/strconv/fast_float.odin b/core/strconv/fast_float.odin index a68184cad..568766e72 100644 --- a/core/strconv/fast_float.odin +++ b/core/strconv/fast_float.odin @@ -22,8 +22,7 @@ import "core:math/bits" Software: Practice and Experience 53 (7), 2023. https://arxiv.org/abs/2212.06644 */ -@(private="file") -_POW5_128_MIN_EXP :: -342 +_SMALLEST_POWER_OF_FIVE :: -342 /* Computes the `T` closest to `w * 10^q`, rounding ties to even. @@ -42,55 +41,57 @@ calls return the same bits, the result is correct. Otherwise, use a slow path. */ fast_float_compute_float :: proc "contextless" ($T: typeid, q: int, w: u64) -> u64 where T == f32 || T == f64 #no_bounds_check { when T == f64 { - MANT_BITS :: 52 - MIN_EXPONENT :: -1023 - INFINITE_POWER :: 0x7ff - SMALLEST_POW10 :: -342 - LARGEST_POW10 :: 308 - MIN_EXP_ROUND_EVEN :: -4 - MAX_EXP_ROUND_EVEN :: 23 + MANTISSA_EXPLICIT_BITS :: 52 + MINIMUM_EXPONENT :: -1023 + INFINITE_POWER :: 0x7ff + SMALLEST_POWER_OF_TEN :: -342 + LARGEST_POWER_OF_TEN :: 308 + MIN_EXPONENT_ROUND_TO_EVEN :: -4 + MAX_EXPONENT_ROUND_TO_EVEN :: 23 } else { - MANT_BITS :: 23 - MIN_EXPONENT :: -127 - INFINITE_POWER :: 0xff - SMALLEST_POW10 :: -64 - LARGEST_POW10 :: 38 - MIN_EXP_ROUND_EVEN :: -17 - MAX_EXP_ROUND_EVEN :: 10 + MANTISSA_EXPLICIT_BITS :: 23 + MINIMUM_EXPONENT :: -127 + INFINITE_POWER :: 0xff + SMALLEST_POWER_OF_TEN :: -64 + LARGEST_POWER_OF_TEN :: 38 + MIN_EXPONENT_ROUND_TO_EVEN :: -17 + MAX_EXPONENT_ROUND_TO_EVEN :: 10 } - // w <= max(u64) and q < SMALLEST_POW10 always rounds to zero. - if w == 0 || q < SMALLEST_POW10 { + // w <= max(u64) and q < SMALLEST_POWER_OF_TEN always rounds to zero. + if w == 0 || q < SMALLEST_POWER_OF_TEN { return 0 } - if q > LARGEST_POW10 { - return INFINITE_POWER << MANT_BITS + if q > LARGEST_POWER_OF_TEN { + return INFINITE_POWER << MANTISSA_EXPLICIT_BITS } + // Set the most significant bit of w. lz := bits.count_leading_zeros(w) - wn := w << lz // normalized so the top bit is set + w := w + w <<= lz - // Compute a 128-bit approximation of wn * 5^q. We need the product to be accurate - // to MANT_BITS+3 bits. If the lower bits of the high word are all ones, the error - // in the first product could affect them, so we refine the result with the lower - // half of the power of five. - PRECISION_MASK :: max(u64) >> (MANT_BITS + 3) - pow5 := &_POW5_128[q - _POW5_128_MIN_EXP] - hi, lo := bits.mul_u64(wn, pow5[0]) - if hi & PRECISION_MASK == PRECISION_MASK { - hi2, _ := bits.mul_u64(wn, pow5[1]) - lo += hi2 - if hi2 > lo { - hi += 1 + // Compute a 128-bit approximation of w * 5^q. We need the product to be accurate + // to MANTISSA_EXPLICIT_BITS+3 bits. If the lower bits of the high word are all ones, + // the error in the first product could affect them, so we refine the result with + // the lower half of the power of five. + PRECISION_MASK :: max(u64) >> (MANTISSA_EXPLICIT_BITS + 3) + pow5 := &_POWER_OF_FIVE_128[q - _SMALLEST_POWER_OF_FIVE] + high, low := bits.mul_u64(w, pow5[0]) + if high & PRECISION_MASK == PRECISION_MASK { + second_high, _ := bits.mul_u64(w, pow5[1]) + low += second_high + if second_high > low { + high += 1 } } // Mushtak & Lemire (2023) prove that this product is always accurate enough. - upperbit := int(hi >> 63) - shift := uint(upperbit + 64 - MANT_BITS - 3) - mantissa := hi >> shift + upperbit := int(high >> 63) + shift := uint(upperbit + 64 - MANTISSA_EXPLICIT_BITS - 3) + mantissa := high >> shift // ((152170 + 65536) * q) >> 16 is floor(q * log2(10)) for |q| < 1650. - power2 := (((152170 + 65536) * q) >> 16) + 63 + upperbit - int(lz) - MIN_EXPONENT + power2 := (((152170 + 65536) * q) >> 16) + 63 + upperbit - int(lz) - MINIMUM_EXPONENT if power2 <= 0 { // Subnormal result. @@ -108,28 +109,28 @@ fast_float_compute_float :: proc "contextless" ($T: typeid, q: int, w: u64) -> u // We usually round up. If the value is exactly halfway between two floats, // and the lower float is even, we must round down. An exact halfway value is // possible only for a small range of exponents. - if lo <= 1 && q >= MIN_EXP_ROUND_EVEN && q <= MAX_EXP_ROUND_EVEN && mantissa & 3 == 1 { - if mantissa << shift == hi { + if low <= 1 && q >= MIN_EXPONENT_ROUND_TO_EVEN && q <= MAX_EXPONENT_ROUND_TO_EVEN && mantissa & 3 == 1 { + if mantissa << shift == high { mantissa &~= 1 } } mantissa += mantissa & 1 // round up mantissa >>= 1 - if mantissa >= 2 << MANT_BITS { - mantissa = 1 << MANT_BITS + if mantissa >= 2 << MANTISSA_EXPLICIT_BITS { + mantissa = 1 << MANTISSA_EXPLICIT_BITS power2 += 1 } - mantissa &~= 1 << MANT_BITS + mantissa &~= 1 << MANTISSA_EXPLICIT_BITS if power2 >= INFINITE_POWER { - return INFINITE_POWER << MANT_BITS + return INFINITE_POWER << MANTISSA_EXPLICIT_BITS } - return mantissa | u64(power2) << MANT_BITS + return mantissa | u64(power2) << MANTISSA_EXPLICIT_BITS } // 128-bit truncated mantissas of 5^-342 to 5^308, with the most significant // bit set. Generated by fast_float script/table_generation.py. -@(private="file", rodata) -_POW5_128 := [651][2]u64{ +@(rodata) +_POWER_OF_FIVE_128 := [651][2]u64{ {0xeef453d6923bd65a, 0x113faa2906a13b3f}, // 5^-342 {0x9558b4661b6565f8, 0x4ac7ca59a424c507}, // 5^-341 {0xbaaee17fa23ebf76, 0x5d79bcf00d2df649}, // 5^-340 From fc8b49f5f50b86dcdad5fb2bd9f3fbf9f20b8eba Mon Sep 17 00:00:00 2001 From: Louis Novy <101842021+louisnovy@users.noreply.github.com> Date: Sun, 27 Sep 2026 10:39:39 -0400 Subject: [PATCH 025/215] Fix the same `$` procedure argument generating duplicate instantiations --- src/checker.cpp | 4 +++- tests/issues/run.bat | 1 + tests/issues/run.sh | 1 + .../test_issue_proc_constant_instantiation.odin | 17 +++++++++++++++++ 4 files changed, 22 insertions(+), 1 deletion(-) create mode 100644 tests/issues/test_issue_proc_constant_instantiation.odin diff --git a/src/checker.cpp b/src/checker.cpp index f9e1f523f..fa65098a8 100644 --- a/src/checker.cpp +++ b/src/checker.cpp @@ -2153,7 +2153,9 @@ gb_internal void add_entity_use(CheckerContext *c, Ast *identifier, Entity *enti if (identifier == nullptr || identifier->kind != Ast_Ident) { return; } - entity->identifier.store(identifier); + // NOTE: only set it once, as `$` procedure arguments are matched by this identifier + Ast *empty_ident = nullptr; + entity->identifier.compare_exchange_strong(empty_ident, identifier); identifier->Ident.entity = entity; diff --git a/tests/issues/run.bat b/tests/issues/run.bat index db165a28e..21286575a 100644 --- a/tests/issues/run.bat +++ b/tests/issues/run.bat @@ -46,6 +46,7 @@ set COMMON=-define:ODIN_TEST_FANCY=false -file -vet -strict-style -ignore-unused ..\..\..\odin test ..\test_issue_bool_comparison_truthiness.odin %COMMON% || exit /b ..\..\..\odin test ..\test_issue_const_array_broadcast.odin %COMMON% || exit /b ..\..\..\odin test ..\test_issue_forwarded_poly_proc.odin %COMMON% || exit /b +..\..\..\odin test ..\test_issue_proc_constant_instantiation.odin %COMMON% || exit /b ..\..\..\odin check ..\test_issue_7336.odin -no-entry-point %COMMON% || exit /b ..\..\..\odin check ..\test_issue_ellipsis_type_call.odin -no-entry-point %COMMON% 2>&1 | find /c "Error:" | findstr /x "10" || exit /b ..\..\..\odin check ..\test_issue_foreign_redeclaration.odin -no-entry-point %COMMON% || exit /b diff --git a/tests/issues/run.sh b/tests/issues/run.sh index a528fa5df..0d049886e 100755 --- a/tests/issues/run.sh +++ b/tests/issues/run.sh @@ -109,6 +109,7 @@ $ODIN test ../test_issue_bool_to_be_conversion.odin $COMMON $ODIN test ../test_issue_bool_comparison_truthiness.odin $COMMON $ODIN test ../test_issue_const_array_broadcast.odin $COMMON $ODIN test ../test_issue_forwarded_poly_proc.odin $COMMON +$ODIN test ../test_issue_proc_constant_instantiation.odin $COMMON $ODIN test ../test_issue_swizzle_multi_assign.odin $COMMON $ODIN check ../test_issue_foreign_redeclaration.odin -no-entry-point $COMMON_CHECK diff --git a/tests/issues/test_issue_proc_constant_instantiation.odin b/tests/issues/test_issue_proc_constant_instantiation.odin new file mode 100644 index 000000000..718f6d06b --- /dev/null +++ b/tests/issues/test_issue_proc_constant_instantiation.odin @@ -0,0 +1,17 @@ +package test_issues + +import "core:testing" + +// Passing the same procedure to a `$` parameter from two calls used to generate two instantiations, +// each with its own `Box` crashing the compiler. + +box_of :: proc($f: proc() -> int) -> typeid { + Box :: struct {} + return Box +} +one :: proc() -> int { return 1 } + +@(test) +proc_constant_instantiation :: proc(t: ^testing.T) { + testing.expect_value(t, box_of(one), box_of(one)) +} From cfff95749b1f0698d27d95ac49cb093da16958c2 Mon Sep 17 00:00:00 2001 From: Matthias Huerbe Date: Sun, 27 Sep 2026 18:01:26 +0200 Subject: [PATCH 026/215] Ported SWAR based string parsing from fast_float to Odin --- core/strconv/LICENSE_fast_float | 4 +- core/strconv/fast_float.odin | 346 +++++++++++++++++++++++++++++++- 2 files changed, 346 insertions(+), 4 deletions(-) diff --git a/core/strconv/LICENSE_fast_float b/core/strconv/LICENSE_fast_float index 70afbb92d..f37596968 100644 --- a/core/strconv/LICENSE_fast_float +++ b/core/strconv/LICENSE_fast_float @@ -1,5 +1,5 @@ -This license applies to the Eisel-Lemire code and the _POWER_OF_FIVE_128 table in -fast_float.odin, which are ported from ffc.h and fast_float. +This license applies to the code in fast_float.odin, which is ported from +ffc.h and fast_float. ffc.h: https://github.com/kolemannix/ffc.h fast_float: https://github.com/fastfloat/fast_float diff --git a/core/strconv/fast_float.odin b/core/strconv/fast_float.odin index 568766e72..f65992e6a 100644 --- a/core/strconv/fast_float.odin +++ b/core/strconv/fast_float.odin @@ -1,9 +1,11 @@ package strconv +import "base:intrinsics" import "core:math/bits" /* - Eisel-Lemire decimal to binary conversion. + Decimal to binary float conversion: a fast scanner for decimal floats + and the Eisel-Lemire algorithm. Ported from ffc.h (https://github.com/kolemannix/ffc.h) Made available under the Boost Software License 1.0, @@ -76,7 +78,7 @@ fast_float_compute_float :: proc "contextless" ($T: typeid, q: int, w: u64) -> u // the error in the first product could affect them, so we refine the result with // the lower half of the power of five. PRECISION_MASK :: max(u64) >> (MANTISSA_EXPLICIT_BITS + 3) - pow5 := &_POWER_OF_FIVE_128[q - _SMALLEST_POWER_OF_FIVE] + pow5 := _POWER_OF_FIVE_128[q - _SMALLEST_POWER_OF_FIVE] high, low := bits.mul_u64(w, pow5[0]) if high & PRECISION_MASK == PRECISION_MASK { second_high, _ := bits.mul_u64(w, pow5[1]) @@ -127,6 +129,346 @@ fast_float_compute_float :: proc "contextless" ($T: typeid, q: int, w: u64) -> u return mantissa | u64(power2) << MANTISSA_EXPLICIT_BITS } +// A fast scanner for the common decimal float syntax, `[+-] digits [. digits] [(e|E) [+-] digits]`. +// It reads 8 digits at a time with SWAR ("SIMD within a register") integer arithmetic. +// +// It skips a `_` between digits, and a second `.` ends the number. +// It returns `ok = false` for a hex float, "inf", "nan", and a string that is not a number. +// Then the caller tries `check_special` and `scan_hex_float`. + +@(private) +MAX_SIG_DIGITS :: 19 // 10^19 - 1 < 2^64 + +/* +Scans a decimal floating-point number at the start of `s`. + +**Returns** +- mantissa, exp: The value is `mantissa * 10^exp`. If `trunc` is true, the significant digits after the first 19 were dropped, and at least one of them was not zero. +- neg: The number has a minus sign. +- nr: The number of bytes in the number. +- ok: `false` if `s` does not start with a decimal number. +*/ +parse_number_string :: #force_inline proc "contextless" (s: string) -> (mantissa: u64, exp: int, neg, trunc: bool, nr: int, ok: bool) #no_bounds_check { + n := len(s) + if n == 0 { + return + } + // Written without branches, because the sign of the input is often unpredictable. + neg = s[0] == '-' + i := int(neg || s[0] == '+') + if i+2 < n && s[i] == '0' && lower(s[i+1]) == 'x' { + return // a hex float + } + + // Integer part + int_start := i + for i < n && s[i] - '0' <= 9 { + mantissa = mantissa*10 + u64(s[i] - '0') + i += 1 + } + digits := i - int_start + if i < n && s[i] == '_' { + more: int + i, mantissa, more = parse_digits_with_separators(s, i, mantissa) + digits += more + } + + // Fraction part + if i < n && s[i] == '.' { + i += 1 + frac_start := i + i, mantissa = loop_parse_if_eight_digits(s, i, mantissa) + for i < n && s[i] - '0' <= 9 { + mantissa = mantissa*10 + u64(s[i] - '0') + i += 1 + } + frac_digits := i - frac_start + if i < n && s[i] == '_' { + more: int + i, mantissa, more = parse_digits_with_separators(s, i, mantissa) + frac_digits += more + } + exp = -frac_digits + digits += frac_digits + } + if digits == 0 { + return + } + if digits > MAX_SIG_DIGITS { + // The mantissa may have overflowed (unless most digits are leading zeros). + return scan_decimal_exact(s) + } + + // Exponent part. The first byte after `e` and the sign must be a digit. + if i < n && lower(s[i]) == 'e' { + i += 1 + exp_neg := false + if i < n && (s[i] == '+' || s[i] == '-') { + exp_neg = s[i] == '-' + i += 1 + } + if i >= n || s[i] - '0' > 9 { + return // not a valid exponent, so not a number + } + x := 0 + for i < n && s[i] - '0' <= 9 { + if x < 100_000 { // larger exponents overflow or underflow anyway + x = x*10 + int(s[i] - '0') + } + i += 1 + } + if i < n && s[i] == '_' { + i, x = parse_exponent_with_separators(s, i, x) + } + exp += -x if exp_neg else x + } + + if mantissa == 0 { + exp = 0 + } + nr, ok = i, true + return +} + + +// Returns the new position, the mantissa and the number of digits. +@(cold) +parse_digits_with_separators :: proc "contextless" (s: string, i: int, mantissa: u64) -> (int, u64, int) #no_bounds_check { + i, mantissa := i, mantissa + digits := 0 + for i < len(s) { + if s[i] - '0' <= 9 { + mantissa = mantissa*10 + u64(s[i] - '0') + digits += 1 + } else if s[i] != '_' { + break + } + i += 1 + } + return i, mantissa, digits +} + +@(cold) +parse_exponent_with_separators :: proc "contextless" (s: string, i: int, x: int) -> (int, int) #no_bounds_check { + i, x := i, x + for i < len(s) { + if s[i] - '0' <= 9 { + if x < 100_000 { // larger exponents overflow or underflow anyway + x = x*10 + int(s[i] - '0') + } + } else if s[i] != '_' { + break + } + i += 1 + } + return i, x +} + +// It is only used for numbers with more than 19 digits +scan_decimal_exact :: proc "contextless" (s: string) -> (mantissa: u64, exp: int, neg, trunc: bool, nr: int, ok: bool) #no_bounds_check { + n := len(s) + if n == 0 { + return + } + neg = s[0] == '-' + i := int(neg || s[0] == '+') + if i+2 < n && s[i] == '0' && lower(s[i+1]) == 'x' { + return // a hex float + } + + m: u64 // significant digits + nd: int // number of significant digits in m + e: int // decimal exponent + saw_digits := false + + // Integer part. Leading zeros do not count as significant digits, and `_` is skipped + for i+8 <= n && read8_to_u64(s, i) == 0x3030_3030_3030_3030 { + i += 8 + saw_digits = true + } + for i < n && (s[i] == '0' || s[i] == '_') { + saw_digits ||= s[i] == '0' + i += 1 + } + for i+8 <= n && nd+8 <= MAX_SIG_DIGITS { + v := read8_to_u64(s, i) + if !is_made_of_eight_digits_fast(v) { + break + } + m = m*100_000_000 + parse_eight_digits_unrolled(v) + nd += 8 + i += 8 + saw_digits = true + } + for i < n { + d := s[i] - '0' + if d > 9 { + if s[i] != '_' { + break + } + } else if nd < MAX_SIG_DIGITS { + m = m*10 + u64(d) + nd += 1 + saw_digits = true + } else { + e += 1 // dropped digit + trunc ||= d != 0 + } + i += 1 + } + + // Fraction part + if i < n && s[i] == '.' { + i += 1 + if m == 0 { + // Leading zeros of the fraction change only the exponent + for i+8 <= n && read8_to_u64(s, i) == 0x3030_3030_3030_3030 { + e -= 8 + i += 8 + saw_digits = true + } + for i < n && (s[i] == '0' || s[i] == '_') { + if s[i] == '0' { + e -= 1 + saw_digits = true + } + i += 1 + } + } + for i+8 <= n && nd+8 <= MAX_SIG_DIGITS { + v := read8_to_u64(s, i) + if !is_made_of_eight_digits_fast(v) { + break + } + m = m*100_000_000 + parse_eight_digits_unrolled(v) + nd += 8 + e -= 8 + i += 8 + saw_digits = true + } + if i+4 <= n && nd+4 <= MAX_SIG_DIGITS { + v := read4_to_u32(s, i) + if is_made_of_four_digits_fast(v) { + m = m*10_000 + parse_four_digits_unrolled(v) + nd += 4 + e -= 4 + i += 4 + saw_digits = true + } + } + for i < n { + d := s[i] - '0' + if d > 9 { + if s[i] != '_' { + break + } + } else if m == 0 && d == 0 { + e -= 1 // a leading zero of the fraction + saw_digits = true + } else if nd < MAX_SIG_DIGITS { + m = m*10 + u64(d) + nd += 1 + e -= 1 + saw_digits = true + } else { + trunc ||= d != 0 // dropped digit + saw_digits = true + } + i += 1 + } + } + if !saw_digits { + return + } + + // Exponent part. The first byte after `e` and the sign must be a digit + if i < n && lower(s[i]) == 'e' { + i += 1 + exp_neg := false + if i < n && (s[i] == '+' || s[i] == '-') { + exp_neg = s[i] == '-' + i += 1 + } + if i >= n || s[i] - '0' > 9 { + return // not a valid exponent, so not a number + } + x := 0 + for i < n { + d := s[i] - '0' + if d > 9 { + if s[i] != '_' { + break + } + } else if x < 100_000 { // larger exponents overflow or underflow anyway + x = x*10 + int(d) + } + i += 1 + } + e += -x if exp_neg else x + } + + if m == 0 { + e = 0 + trunc = false + } + return m, e, neg, trunc, i, true +} + +// Loads 8 bytes starting at `s[i]` in little-endian order. The caller checks that `i+8 <= len(s)`. +read8_to_u64 :: #force_inline proc "contextless" (s: string, i: int) -> u64 { + return u64(intrinsics.unaligned_load((^u64le)(&raw_data(s)[i]))) +} + +read4_to_u32 :: #force_inline proc "contextless" (s: string, i: int) -> u32 { + return u32(intrinsics.unaligned_load((^u32le)(&raw_data(s)[i]))) +} + +// Reports if all 8 bytes of `v` are ASCII digits. +is_made_of_eight_digits_fast :: #force_inline proc "contextless" (v: u64) -> bool { + return ((v + 0x4646_4646_4646_4646) | (v - 0x3030_3030_3030_3030)) & 0x8080_8080_8080_8080 == 0 +} + +is_made_of_four_digits_fast :: #force_inline proc "contextless" (v: u32) -> bool { + return ((v + 0x4646_4646) | (v - 0x3030_3030)) & 0x8080_8080 == 0 +} + +// Returns the new position and mantissa. +loop_parse_if_eight_digits :: #force_inline proc "contextless" (s: string, i: int, m: u64) -> (int, u64) #no_bounds_check { + i, m := i, m + for i+8 <= len(s) { + v := read8_to_u64(s, i) + if !is_made_of_eight_digits_fast(v) { + break + } + m = m*100_000_000 + parse_eight_digits_unrolled(v) + i += 8 + } + if i+4 <= len(s) { + v := read4_to_u32(s, i) + if is_made_of_four_digits_fast(v) { + m = m*10_000 + parse_four_digits_unrolled(v) + i += 4 + } + } + return i, m +} + +// Converts 8 ASCII digits (the first digit in the lowest byte) to their value +parse_eight_digits_unrolled :: #force_inline proc "contextless" (chars: u64) -> u64 { + MASK :: 0x0000_00ff_0000_00ff + MUL1 :: 0x000f_4240_0000_0064 // 100 + (1000000 << 32) + MUL2 :: 0x0000_2710_0000_0001 // 1 + (10000 << 32) + v := chars - 0x3030_3030_3030_3030 + v = v*10 + v>>8 + return u64(u32(((v & MASK)*MUL1 + ((v>>16) & MASK)*MUL2) >> 32)) +} + +parse_four_digits_unrolled :: #force_inline proc "contextless" (chars: u32) -> u64 { + v := chars - 0x3030_3030 + v = v*10 + v>>8 + return u64(((v & 0x00ff_00ff) * 0x0064_0001) >> 16) +} + // 128-bit truncated mantissas of 5^-342 to 5^308, with the most significant // bit set. Generated by fast_float script/table_generation.py. @(rodata) From 432ca38c54daf43f3ad2470e7b1b835f2c7598fc Mon Sep 17 00:00:00 2001 From: dogue Date: Sun, 27 Sep 2026 18:20:47 -0400 Subject: [PATCH 027/215] [vendor:sdl2/sdl_render.odin]: add `RenderSetVSync` binding --- vendor/sdl2/sdl_render.odin | 1 + 1 file changed, 1 insertion(+) diff --git a/vendor/sdl2/sdl_render.odin b/vendor/sdl2/sdl_render.odin index 5e913e5a3..0bec18d7d 100644 --- a/vendor/sdl2/sdl_render.odin +++ b/vendor/sdl2/sdl_render.odin @@ -143,4 +143,5 @@ foreign lib { GL_UnbindTexture :: proc(texture: ^Texture) -> c.int --- RenderGetMetalLayer :: proc(renderer: ^Renderer) -> rawptr --- RenderGetMetalCommandEncoder :: proc(renderer: ^Renderer) -> rawptr --- + RenderSetVSync :: proc(renderer: ^Renderer, vsync: bool) -> c.int --- } From 7b10b43f082018ec9d318bc4e425128f835ba782 Mon Sep 17 00:00:00 2001 From: Louis Novy <101842021+louisnovy@users.noreply.github.com> Date: Mon, 28 Sep 2026 09:47:53 -0400 Subject: [PATCH 028/215] Rename the forwarded `$` procedure test after #6951 --- tests/issues/run.bat | 2 +- tests/issues/run.sh | 2 +- ...test_issue_forwarded_poly_proc.odin => test_issue_6951.odin} | 1 + 3 files changed, 3 insertions(+), 2 deletions(-) rename tests/issues/{test_issue_forwarded_poly_proc.odin => test_issue_6951.odin} (91%) diff --git a/tests/issues/run.bat b/tests/issues/run.bat index 3f8139e7d..ba8bc7819 100644 --- a/tests/issues/run.bat +++ b/tests/issues/run.bat @@ -38,6 +38,7 @@ set COMMON=-define:ODIN_TEST_FANCY=false -file -vet -strict-style -ignore-unused ..\..\..\odin check ..\test_issue_6484.odin -no-entry-point %COMMON% || exit /b ..\..\..\odin test ..\test_issue_6753.odin %COMMON% || exit /b ..\..\..\odin check ..\test_issue_6874.odin %COMMON% 2>&1 | find /c "Error:" | findstr /x "1" || exit /b +..\..\..\odin test ..\test_issue_6951.odin %COMMON% || exit /b ..\..\..\odin check ..\test_issue_6979.odin -no-entry-point %COMMON% || exit /b ..\..\..\odin test ..\test_issue_7008.odin %COMMON% || exit /b ..\..\..\odin check ..\test_issue_7012.odin -no-entry-point %COMMON% || exit /b @@ -45,7 +46,6 @@ set COMMON=-define:ODIN_TEST_FANCY=false -file -vet -strict-style -ignore-unused ..\..\..\odin test ..\test_issue_bool_to_be_conversion.odin %COMMON% || exit /b ..\..\..\odin test ..\test_issue_bool_comparison_truthiness.odin %COMMON% || exit /b ..\..\..\odin test ..\test_issue_const_array_broadcast.odin %COMMON% || exit /b -..\..\..\odin test ..\test_issue_forwarded_poly_proc.odin %COMMON% || exit /b ..\..\..\odin test ..\test_issue_proc_constant_instantiation.odin %COMMON% || exit /b ..\..\..\odin check ..\test_issue_7336.odin -no-entry-point %COMMON% || exit /b ..\..\..\odin check ..\test_issue_ellipsis_type_call.odin -no-entry-point %COMMON% 2>&1 | find /c "Error:" | findstr /x "10" || exit /b diff --git a/tests/issues/run.sh b/tests/issues/run.sh index 0c518136e..02d9e740c 100755 --- a/tests/issues/run.sh +++ b/tests/issues/run.sh @@ -86,6 +86,7 @@ else echo "SUCCESSFUL 0/1" exit 1 fi +$ODIN test ../test_issue_6951.odin $COMMON $ODIN check ../test_issue_6979.odin -no-entry-point $COMMON_CHECK $ODIN test ../test_issue_7008.odin $COMMON $ODIN check ../test_issue_7012.odin -no-entry-point $COMMON_CHECK @@ -109,7 +110,6 @@ $ODIN check ../test_issue_7260.odin -no-entry-point $COMMON_CHECK $ODIN test ../test_issue_bool_to_be_conversion.odin $COMMON $ODIN test ../test_issue_bool_comparison_truthiness.odin $COMMON $ODIN test ../test_issue_const_array_broadcast.odin $COMMON -$ODIN test ../test_issue_forwarded_poly_proc.odin $COMMON $ODIN test ../test_issue_proc_constant_instantiation.odin $COMMON $ODIN test ../test_issue_swizzle_multi_assign.odin $COMMON diff --git a/tests/issues/test_issue_forwarded_poly_proc.odin b/tests/issues/test_issue_6951.odin similarity index 91% rename from tests/issues/test_issue_forwarded_poly_proc.odin rename to tests/issues/test_issue_6951.odin index 56b3c3d89..327bb738c 100644 --- a/tests/issues/test_issue_forwarded_poly_proc.odin +++ b/tests/issues/test_issue_6951.odin @@ -1,3 +1,4 @@ +// Tests issue #6951 https://github.com/odin-lang/Odin/issues/6951 package test_issues import "core:testing" From e9657d17b686cba5afadeca79e42ef62e7162840 Mon Sep 17 00:00:00 2001 From: Louis Novy <101842021+louisnovy@users.noreply.github.com> Date: Mon, 28 Sep 2026 09:58:32 -0400 Subject: [PATCH 029/215] Cover #5214 in the forwarded `$` procedure test --- tests/issues/run.bat | 2 +- tests/issues/run.sh | 2 +- tests/issues/test_issue_6951.odin | 25 --------------------- tests/issues/test_issue_6951_5214.odin | 31 ++++++++++++++++++++++++++ 4 files changed, 33 insertions(+), 27 deletions(-) delete mode 100644 tests/issues/test_issue_6951.odin create mode 100644 tests/issues/test_issue_6951_5214.odin diff --git a/tests/issues/run.bat b/tests/issues/run.bat index ba8bc7819..a13032c6c 100644 --- a/tests/issues/run.bat +++ b/tests/issues/run.bat @@ -38,7 +38,7 @@ set COMMON=-define:ODIN_TEST_FANCY=false -file -vet -strict-style -ignore-unused ..\..\..\odin check ..\test_issue_6484.odin -no-entry-point %COMMON% || exit /b ..\..\..\odin test ..\test_issue_6753.odin %COMMON% || exit /b ..\..\..\odin check ..\test_issue_6874.odin %COMMON% 2>&1 | find /c "Error:" | findstr /x "1" || exit /b -..\..\..\odin test ..\test_issue_6951.odin %COMMON% || exit /b +..\..\..\odin test ..\test_issue_6951_5214.odin %COMMON% || exit /b ..\..\..\odin check ..\test_issue_6979.odin -no-entry-point %COMMON% || exit /b ..\..\..\odin test ..\test_issue_7008.odin %COMMON% || exit /b ..\..\..\odin check ..\test_issue_7012.odin -no-entry-point %COMMON% || exit /b diff --git a/tests/issues/run.sh b/tests/issues/run.sh index 02d9e740c..f84672838 100755 --- a/tests/issues/run.sh +++ b/tests/issues/run.sh @@ -86,7 +86,7 @@ else echo "SUCCESSFUL 0/1" exit 1 fi -$ODIN test ../test_issue_6951.odin $COMMON +$ODIN test ../test_issue_6951_5214.odin $COMMON $ODIN check ../test_issue_6979.odin -no-entry-point $COMMON_CHECK $ODIN test ../test_issue_7008.odin $COMMON $ODIN check ../test_issue_7012.odin -no-entry-point $COMMON_CHECK diff --git a/tests/issues/test_issue_6951.odin b/tests/issues/test_issue_6951.odin deleted file mode 100644 index 327bb738c..000000000 --- a/tests/issues/test_issue_6951.odin +++ /dev/null @@ -1,25 +0,0 @@ -// Tests issue #6951 https://github.com/odin-lang/Odin/issues/6951 -package test_issues - -import "core:testing" - -// Passing a `$` proc parameter to another `$` parameter used to reuse the first instantiation, -// making every forwarding call run the procedure given to the first one. - -apply :: proc(v: ^int, $f: proc(^int)) { f(v) } -forward :: proc(v: ^int, $f: proc(^int)) { apply(v, f) } -twice :: proc(v: ^int, $f: proc(^int)) { forward(v, f) } -one :: proc(v: ^int) { v^ += 1 } -hundred :: proc(v: ^int) { v^ += 100 } - -@(test) -forwarded_poly_proc :: proc(t: ^testing.T) { - x := 0 - forward(&x, one) - forward(&x, hundred) - twice(&x, one) - twice(&x, hundred) - forward(&x, proc(v: ^int) { v^ += 1 }) - forward(&x, proc(v: ^int) { v^ += 100 }) - testing.expect_value(t, x, 303) -} diff --git a/tests/issues/test_issue_6951_5214.odin b/tests/issues/test_issue_6951_5214.odin new file mode 100644 index 000000000..66a065237 --- /dev/null +++ b/tests/issues/test_issue_6951_5214.odin @@ -0,0 +1,31 @@ +// Tests issues #6951 https://github.com/odin-lang/Odin/issues/6951 +// and #5214 https://github.com/odin-lang/Odin/issues/5214 +package test_issues + +import "core:testing" + +// Passing a `$` proc parameter to another `$` parameter used to reuse the first instantiation, +// making every forwarding call run the procedure given to the first one. + +apply :: proc(v: ^int, $f: proc(^int)) { f(v) } +forward :: proc(v: ^int, $f: proc(^int)) { apply(v, f) } +twice :: proc(v: ^int, $f: proc(^int)) { forward(v, f) } +apply_any :: proc(v: ^int, $f: $F) { f(v) } +forward_any :: proc(v: ^int, $f: $F) { apply_any(v, f) } +one :: proc(v: ^int) { v^ += 1 } +ten :: proc "contextless" (v: ^int) { v^ += 10 } +hundred :: proc(v: ^int) { v^ += 100 } + +@(test) +forwarded_poly_proc :: proc(t: ^testing.T) { + x := 0 + forward(&x, one) + forward(&x, hundred) + twice(&x, one) + twice(&x, hundred) + forward(&x, proc(v: ^int) { v^ += 1 }) + forward(&x, proc(v: ^int) { v^ += 100 }) + forward_any(&x, one) + forward_any(&x, ten) + testing.expect_value(t, x, 314) +} From 4269f09236cbcf46531998045edf2495802a58ff Mon Sep 17 00:00:00 2001 From: Matthias Huerbe Date: Mon, 28 Sep 2026 16:00:01 +0200 Subject: [PATCH 030/215] moved license notice into fast_float.odin --- core/strconv/LICENSE_fast_float | 31 ------------------------------- core/strconv/fast_float.odin | 33 +++++++++++++++++++++++++++++++++ 2 files changed, 33 insertions(+), 31 deletions(-) delete mode 100644 core/strconv/LICENSE_fast_float diff --git a/core/strconv/LICENSE_fast_float b/core/strconv/LICENSE_fast_float deleted file mode 100644 index 70afbb92d..000000000 --- a/core/strconv/LICENSE_fast_float +++ /dev/null @@ -1,31 +0,0 @@ -This license applies to the Eisel-Lemire code and the _POWER_OF_FIVE_128 table in -fast_float.odin, which are ported from ffc.h and fast_float. - - ffc.h: https://github.com/kolemannix/ffc.h - fast_float: https://github.com/fastfloat/fast_float - -Copyright (c) 2021 The fast_float authors - -Boost Software License - Version 1.0 - August 17th, 2003 - -Permission is hereby granted, free of charge, to any person or organization -obtaining a copy of the software and accompanying documentation covered by -this license (the "Software") to use, reproduce, display, distribute, -execute, and transmit the Software, and to prepare derivative works of the -Software, and to permit third-parties to whom the Software is furnished to -do so, all subject to the following: - -The copyright notices in the Software and this entire statement, including -the above license grant, this restriction and the following disclaimer, -must be included in all copies of the Software, in whole or in part, and -all derivative works of the Software, unless such copies or derivative -works are solely in the form of machine-executable object code generated by -a source language processor. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT -SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE -FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE, -ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -DEALINGS IN THE SOFTWARE. diff --git a/core/strconv/fast_float.odin b/core/strconv/fast_float.odin index 568766e72..83e63b2a5 100644 --- a/core/strconv/fast_float.odin +++ b/core/strconv/fast_float.odin @@ -783,3 +783,36 @@ _POWER_OF_FIVE_128 := [651][2]u64{ {0xe3d8f9e563a198e5, 0x58180fddd97723a6}, // 5^307 {0x8e679c2f5e44ff8f, 0x570f09eaa7ea7648}, // 5^308 } + +/* +Ported from ffc.h and fast_float. + + ffc.h: https://github.com/kolemannix/ffc.h + fast_float: https://github.com/fastfloat/fast_float + +Copyright (c) 2021 The fast_float authors + +Boost Software License - Version 1.0 - August 17th, 2003 + +Permission is hereby granted, free of charge, to any person or organization +obtaining a copy of the software and accompanying documentation covered by +this license (the "Software") to use, reproduce, display, distribute, +execute, and transmit the Software, and to prepare derivative works of the +Software, and to permit third-parties to whom the Software is furnished to +do so, all subject to the following: + +The copyright notices in the Software and this entire statement, including +the above license grant, this restriction and the following disclaimer, +must be included in all copies of the Software, in whole or in part, and +all derivative works of the Software, unless such copies or derivative +works are solely in the form of machine-executable object code generated by +a source language processor. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT +SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE +FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE, +ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. +*/ From b9c4067f7874507a2d05eae774d5c2ced7140c12 Mon Sep 17 00:00:00 2001 From: alyekypo Date: Mon, 28 Sep 2026 19:32:04 +0000 Subject: [PATCH 031/215] fix(llvm): emit union constants for non-constantable unions MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit `constant: U : value` produced a constant of the wrong type: lb_const_value took its union-lowering branch only when `is_type_union_constantable(type)` held, so for a union with a variant that whitelist rejects (`union{bool, ^int}`) the value fell through to the scalar branch and reached `LLVMConstInt(lb_type(m, union_type), ...)`. The constant emitted there does not match the union's type: bytes that change between runs for `true`, a compiler crash for `1.0`, an `is_type_string` assertion for a string literal. The checker already resolves which variant a constant represents and records it in `ExactValue::variant_type` - the variant type, tag index, payload and padding the union branch needs - so that branch is now also taken when the value pins a variant this backend can build as a constant. The type-level whitelist was re-guessing information the value already carries; variant types this backend cannot build as constants (`any`) stay excluded. lb_build_static_variables had the same defect in another place: it lowered an initializer with the expression's type instead of the declared type, so `@(static) s: U` emitted a payload-only constant and LLVM rejected the module with “Global variable initializer type does not match global variable type!”. It now passes the declared type and gives the global the constant's layout-compatible type, the way the file-scope path already does. Blast radius: every union-typed constant, i.e. typed constants, global static initializers, @(static)/@(thread_local)/@(rodata), default parameters and constant aggregate elements. Unions whose variants are all constantable keep the previous path. --- src/llvm_backend_const.cpp | 6 +- src/llvm_backend_stmt.cpp | 18 +- .../test_union_const_nonconstantable.odin | 196 ++++++++++++++++++ 3 files changed, 218 insertions(+), 2 deletions(-) create mode 100644 tests/internal/test_union_const_nonconstantable.odin diff --git a/src/llvm_backend_const.cpp b/src/llvm_backend_const.cpp index 31d1e16fb..01e049544 100644 --- a/src/llvm_backend_const.cpp +++ b/src/llvm_backend_const.cpp @@ -830,7 +830,11 @@ gb_internal lbValue lb_const_value(lbModule *m, Type *type, ExactValue value, lb bool is_local = cc.allow_local && m->curr_procedure != nullptr; - if (is_type_union(type) && is_type_union_constantable(type)) { + // A union constant needs a payload this backend can build, and the checker pins + // `variant_type` even for variants it cannot (`any` needs a backing global and a typeid), + // so ask the same question the aggregate constant paths ask. + if (is_type_union(type) && (is_type_union_constantable(type) || + (value.variant_type != nullptr && elem_type_can_be_constant(value.variant_type)))) { Type *bt = base_type(type); GB_ASSERT(bt->kind == Type_Union); if (bt->Union.variants.count == 0) { diff --git a/src/llvm_backend_stmt.cpp b/src/llvm_backend_stmt.cpp index a0f0f48a3..b888d86bd 100644 --- a/src/llvm_backend_stmt.cpp +++ b/src/llvm_backend_stmt.cpp @@ -2434,7 +2434,7 @@ gb_internal void lb_build_static_variables(lbProcedure *p, AstValueDecl *vd) { if (e->Variable.is_rodata) { cc.is_rodata = true; } - value = lb_const_value(p->module, ast_value->tav.type, ast_value->tav.value, cc); + value = lb_const_value(p->module, is_type_any(e->type) ? ast_value->tav.type : e->type, ast_value->tav.value, cc); } String mangled_name = {}; @@ -2488,6 +2488,22 @@ gb_internal void lb_build_static_variables(lbProcedure *p, AstValueDecl *vd) { LLVMValueRef init = llvm_const_named_struct(p->module, e->type, vals.data, vals.count); LLVMSetInitializer(global, init); } else { + LLVMTypeRef expected_type = lb_type(p->module, e->type); + LLVMTypeRef actual_type = LLVMTypeOf(value.value); + GB_ASSERT_MSG(lb_sizeof(actual_type) == lb_sizeof(expected_type), + "size mismatch for @(static) initializer of %.*s", + LIT(name)); + if (actual_type != expected_type) { + LLVMDeleteGlobal(global); + global = LLVMAddGlobal(p->module->mod, actual_type, c_name); + LLVMSetAlignment(global, cast(u32)type_align_of(e->type)); + if (e->Variable.is_rodata) { + LLVMSetGlobalConstant(global, true); + } + if (!lb_apply_thread_local_model(global, e->Variable.thread_local_model)) { + LLVMSetLinkage(global, LLVMInternalLinkage); + } + } LLVMSetInitializer(global, value.value); } } diff --git a/tests/internal/test_union_const_nonconstantable.odin b/tests/internal/test_union_const_nonconstantable.odin new file mode 100644 index 000000000..c6ca58b78 --- /dev/null +++ b/tests/internal/test_union_const_nonconstantable.odin @@ -0,0 +1,196 @@ +package test_internal + +import "core:testing" + +// A union constant must be byte-identical to the same value built at run time, +// whatever the variant. These unions are not `is_type_union_constantable`, so +// lb_const_value used to skip its union branch for them and lower the value as +// a scalar of the union's LLVM type. + +V :: union { bool, f64, ^int } +SP :: struct { p: ^int, n: int } +VI :: union { SP, int } +VE :: enum { A, B } +VES :: union { VE, ^int } +VA :: union { bool, [4]^int } +VAOK :: struct { a: int, b: int } +VC :: union { VAOK, int } + +@(private="file") +expect_same_bytes :: proc(t: ^testing.T, constant, variable: $T, what: string) { + testing.expectf(t, + transmute([size_of(T)]u8)constant == transmute([size_of(T)]u8)variable, + "%s: constant %v vs variable %v", what, + transmute([size_of(T)]u8)constant, transmute([size_of(T)]u8)variable) +} + +// typed constant in a procedure body (the report's program) +@(test) +union_typed_constant_local :: proc(t: ^testing.T) { + { + c: V : true + v: V = true + expect_same_bytes(t, c, v, "bool") + } + { + c: V : f64(1.5) + v: V = f64(1.5) + expect_same_bytes(t, c, v, "f64") + } + { + c: V : f64(2) + v: V = f64(2) + expect_same_bytes(t, c, v, "f64 from integer literal") + } +} + +// file-scope typed constants and global variables with constant initializers +@(private="file") FC_BOOL: V = true +@(private="file") FC_F64: V = f64(2.718) +@(private="file") FC_INT: VI = 7 + +@(test) +union_typed_constant_file_scope :: proc(t: ^testing.T) { + c0: V = true + c1: V = f64(2.718) + c2: VI = 7 + expect_same_bytes(t, FC_BOOL, c0, "file-scope bool constant") + expect_same_bytes(t, FC_F64, c1, "file-scope f64 constant") + expect_same_bytes(t, FC_INT, c2, "file-scope int constant") +} + +@(test) +union_global_initializer :: proc(t: ^testing.T) { + c0: V = true + c1: V = f64(1.25) + expect_same_bytes(t, GB, c0, "global bool") + expect_same_bytes(t, GF, c1, "global f64") +} + +@(private="file") GB: V = true +@(private="file") GF: V = f64(1.25) + +// every variant kind, including the ones the constant whitelist rejects +@(test) +union_variant_kinds :: proc(t: ^testing.T) { + { + c: VE : .B + v: VE = .B + expect_same_bytes(t, c, v, "enum-variant union") + } + { + c: VI : SP{n=7} + v: VI = SP{n=7} + expect_same_bytes(t, c, v, "struct-with-pointer variant") + } + { + c: VI : 42 + v: VI = 42 + expect_same_bytes(t, c, v, "other variant of the same union") + } + { + c: VA : true + v: VA = true + expect_same_bytes(t, c, v, "large-payload variant") + } + { + c: VES : VE.A + v: VES = VE.A + expect_same_bytes(t, c, v, "enum payload with pointer variant present") + } +} + +// a union with only constantable variants keeps working +@(test) +union_constantable_control :: proc(t: ^testing.T) { + c: VC : VAOK{1, 2} + v: VC = VAOK{1, 2} + expect_same_bytes(t, c, v, "constantable union") +} + +// default parameter values are materialized through the same constant path +union_default :: proc(x: V = true) -> V { return x } + +@(test) +union_default_parameter :: proc(t: ^testing.T) { + v: V = true + expect_same_bytes(t, union_default(), v, "default parameter") +} + +// @(static) / @(thread_local) / @(rodata): the initializer used to be lowered +// with the expression's type instead of the declared type, so the global was +// sized to the payload while every access used the union layout. +VS :: union { int, bool } +VSS :: union { string, int } + +@(test) +union_static_and_rodata :: proc(t: ^testing.T) { + @(static) s_int: VS = 1 + @(static) s_str: VSS = "xy" + @(static) s_bool: V = true + @(static) s_f64: V = f64(1.5) + @(thread_local) th: V = true + @(static) @(rodata) ro: V = true + + i: VS = 1 + s: VSS = "xy" + b: V = true + f: V = f64(1.5) + expect_same_bytes(t, s_int, i, "@(static) int") + expect_same_bytes(t, s_str, s, "@(static) string") + expect_same_bytes(t, s_bool, b, "@(static) bool") + expect_same_bytes(t, s_f64, f, "@(static) f64") + expect_same_bytes(t, th, b, "@(thread_local)") + expect_same_bytes(t, ro, b, "@(rodata) static") + expect_same_bytes(t, RO_GLOBAL, b, "@(rodata) global") + + // the tag must be in the right place, not past the end of the global + if v, ok := s_int.(int); ok { + testing.expect_value(t, v, 1) + } else { + testing.expectf(t, false, "@(static) int variant not resolved") + } + if v, ok := s_str.(string); ok { + testing.expect_value(t, v, "xy") + } else { + testing.expectf(t, false, "@(static) string variant not resolved") + } + if v, ok := s_bool.(bool); ok { + testing.expect(t, v, "@(static) bool variant not resolved") + } else { + testing.expectf(t, false, "@(static) bool variant not resolved") + } + if v, ok := s_f64.(f64); ok { + testing.expect_value(t, v, 1.5) + } else { + testing.expectf(t, false, "@(static) f64 variant not resolved") + } + if v, ok := th.(bool); ok { + testing.expect(t, v, "@(thread_local) bool variant not resolved") + } else { + testing.expectf(t, false, "@(thread_local) bool variant not resolved") + } + if v, ok := ro.(bool); ok { + testing.expect(t, v, "@(rodata) bool variant not resolved") + } else { + testing.expectf(t, false, "@(rodata) bool variant not resolved") + } +} + +@(rodata) +RO_GLOBAL: V = true + +// statics of non-union types must be unaffected +@(test) +static_non_union_unaffected :: proc(t: ^testing.T) { + @(static) i: int = 42 + @(static) f: f64 = 2.5 + @(static) s: string = "hey" + @(static) a: [3]int = {1, 2, 3} + @(static) e: VE = .B + testing.expect_value(t, i, 42) + testing.expect_value(t, f, 2.5) + testing.expect_value(t, s, "hey") + testing.expect_value(t, a, [3]int{1, 2, 3}) + testing.expect_value(t, e, VE.B) +} \ No newline at end of file From a931018a2464b2857db7f7f1f9322c2042e4b6e0 Mon Sep 17 00:00:00 2001 From: corley <28909106+corleypc@users.noreply.github.com> Date: Tue, 29 Sep 2026 01:57:49 +0300 Subject: [PATCH 032/215] fixes #must_tail on wasm targets --- src/check_expr.cpp | 3 +++ src/llvm_abi.cpp | 17 ++++++++++------- src/llvm_backend.hpp | 2 ++ src/llvm_backend_proc.cpp | 14 ++------------ 4 files changed, 17 insertions(+), 19 deletions(-) diff --git a/src/check_expr.cpp b/src/check_expr.cpp index a159df6a6..1c9a3f412 100644 --- a/src/check_expr.cpp +++ b/src/check_expr.cpp @@ -9161,6 +9161,9 @@ gb_internal ExprKind check_call_expr(CheckerContext *c, Operand *operand, Ast *c gb_string_free(b); gb_string_free(a); } + if (is_arch_wasm() && !check_target_feature_is_enabled(str_lit("tail-call"), nullptr)) { + error(call, "'#must_tail' on a WebAssembly target requires the 'tail-call' target feature, e.g. '-target-features:tail-call'"); + } break; } diff --git a/src/llvm_abi.cpp b/src/llvm_abi.cpp index 4af0fed0f..02da1c835 100644 --- a/src/llvm_abi.cpp +++ b/src/llvm_abi.cpp @@ -150,6 +150,15 @@ gb_internal LLVMTypeRef lb_function_type_to_llvm_raw(lbFunctionType *ft, bool is // return LLVMPointerType(func_type, 0); // } +gb_internal lbCallingConventionKind lb_calling_convention_kind(ProcCallingConvention cc) { + if (selected_subtarget == Subtarget_Playdate) { + return lbCallingConvention_ARM_AAPCS_VFP; + } + if (is_arch_wasm()) { + return lbCallingConvention_C; + } + return lb_calling_convention_map[cc]; +} gb_internal void lb_add_function_type_attributes(LLVMValueRef fn, lbFunctionType *ft, ProcCallingConvention calling_convention) { if (ft == nullptr) { @@ -204,13 +213,7 @@ gb_internal void lb_add_function_type_attributes(LLVMValueRef fn, lbFunctionType LLVMAddAttributeAtIndex(fn, offset, noalias_attr); } - lbCallingConventionKind cc_kind = lbCallingConvention_C; - // TODO(bill): Clean up this logic - if (selected_subtarget == Subtarget_Playdate) { - cc_kind = lbCallingConvention_ARM_AAPCS_VFP; - } else if (!is_arch_wasm()) { - cc_kind = lb_calling_convention_map[calling_convention]; - } + lbCallingConventionKind cc_kind = lb_calling_convention_kind(calling_convention); // if (build_context.metrics.arch == TargetArch_amd64) { // if (build_context.metrics.os == TargetOs_windows) { // if (cc_kind == lbCallingConvention_C) { diff --git a/src/llvm_backend.hpp b/src/llvm_backend.hpp index 6e933d152..828566c38 100644 --- a/src/llvm_backend.hpp +++ b/src/llvm_backend.hpp @@ -718,6 +718,8 @@ lbCallingConventionKind const lb_calling_convention_map[ProcCC_MAX] = { }; +gb_internal lbCallingConventionKind lb_calling_convention_kind(ProcCallingConvention cc); + enum : LLVMDWARFTypeEncoding { LLVMDWARFTypeEncoding_Address = 1, LLVMDWARFTypeEncoding_Boolean = 2, diff --git a/src/llvm_backend_proc.cpp b/src/llvm_backend_proc.cpp index 5b55bbf14..d5c066eb2 100644 --- a/src/llvm_backend_proc.cpp +++ b/src/llvm_backend_proc.cpp @@ -471,13 +471,7 @@ gb_internal lbProcedure *lb_create_dummy_procedure(lbModule *m, String link_name p->value = LLVMAddFunction(m->mod, c_link_name, func_type); Type *pt = p->type; - lbCallingConventionKind cc_kind = lbCallingConvention_C; - if (selected_subtarget == Subtarget_Playdate) { - cc_kind = lbCallingConvention_ARM_AAPCS_VFP; - } else if (!is_arch_wasm()) { - cc_kind = lb_calling_convention_map[pt->Proc.calling_convention]; - } - LLVMSetFunctionCallConv(p->value, cc_kind); + LLVMSetFunctionCallConv(p->value, lb_calling_convention_kind(pt->Proc.calling_convention)); lbValue proc_value = {p->value, p->type}; lb_add_member(m, p->name, proc_value); lb_add_procedure_value(m, p); @@ -1074,11 +1068,7 @@ gb_internal lbValue lb_emit_call_internal(lbProcedure *p, lbValue value, lbValue LLVMValueRef ret = LLVMBuildCall2(p->builder, fnp, fn, args, arg_count, ""); - auto llvm_cc = lb_calling_convention_map[proc_type->Proc.calling_convention]; - if (selected_subtarget == Subtarget_Playdate) { - llvm_cc = lbCallingConvention_ARM_AAPCS_VFP; - } - LLVMSetInstructionCallConv(ret, llvm_cc); + LLVMSetInstructionCallConv(ret, lb_calling_convention_kind(proc_type->Proc.calling_convention)); LLVMAttributeIndex param_offset = LLVMAttributeIndex_FirstArgIndex; if (return_ptr.value != nullptr) { From 2109ba8fbdfb7393029bbd0b0190910d58f05914 Mon Sep 17 00:00:00 2001 From: Ihor Antonov Date: Mon, 28 Sep 2026 19:58:17 -0700 Subject: [PATCH 033/215] core: add strict base64 decoding core:encoding/base64 currently decodes leniently: it infers padding from the last one or two bytes, accepts missing/extra/interior padding, and does not check the trailing padding bits required by RFC 4648 Section 3.5. Go exposes canonical decoding as `Encoding.Strict()`; Odin has no equivalent, so downstream ports (e.g. age) have to reimplement base64 from scratch. This adds opt-in strict decoding through a `Decode_Options` bit set. Existing calls and behavior are unchanged. --- core/encoding/base64/base64.odin | 125 ++++++++++++++++++- tests/core/encoding/base64/base64.odin | 161 +++++++++++++++++++++++++ 2 files changed, 283 insertions(+), 3 deletions(-) diff --git a/core/encoding/base64/base64.odin b/core/encoding/base64/base64.odin index e97652cd4..ecfe1adba 100644 --- a/core/encoding/base64/base64.odin +++ b/core/encoding/base64/base64.odin @@ -6,6 +6,12 @@ A secondary param can be used to supply a custom alphabet to `encode` and a matc If none is supplied it just uses the standard Base64 alphabet. In case your specific version does not use padding, you may truncate it from the encoded output. + +By default `decode` is lenient, accepting padded and unpadded input and not +checking the trailing padding bits. Decode options can enable strict +(RFC 4648 section 3.5) canonical decoding: `{.Strict}` requires correct +padding and zero trailing bits, while `{.Strict, .No_Padding}` accepts only +canonical unpadded input. */ package encoding_base64 @@ -122,8 +128,23 @@ Error :: union #shared_nil { Decode_Error :: enum { None, Invalid_Character, + Invalid_Padding, + Non_Canonical, } +// Decode_Option selects optional validation performed by the decode routines. +Decode_Option :: enum { + // Strict requires canonical input as described in RFC 4648 section 3.5: + // trailing padding bits must be zero, padding must be exact, and padding + // characters may only appear at the end. + Strict, + // No_Padding rejects the padding character, requiring unpadded input. + No_Padding, +} + +// Decode_Options is a set of Decode_Option values. +Decode_Options :: bit_set[Decode_Option; u8] + encode :: proc(data: []byte, ENC_TBL := ENC_TABLE, allocator := context.allocator) -> (encoded: string, err: runtime.Allocator_Error) #optional_allocator_error { out_length := encoded_len(data) if out_length == 0 { @@ -211,7 +232,97 @@ encoded_len :: proc(data: []byte) -> int { return ((4 * length / 3) + 3) &~ 3 } -decode :: proc(data: string, DEC_TBL := DEC_TABLE, dst: []byte = nil, allocator := context.allocator) -> (decoded: []byte, err: Error) { +@(private) +validate_strict_decode :: proc(data: string, dec_tbl: [256]i8, options: Decode_Options) -> Decode_Error { + if options == {} { + return .None + } + + n := len(data) + if n == 0 { + return .None + } + + si := n + pad: int + if .No_Padding in options { + for i in 0 ..< n { + if data[i] == PADDING { + return .Invalid_Padding + } + } + } else { + for si > 0 && data[si - 1] == PADDING { + si -= 1 + pad += 1 + } + if pad > 2 { + return .Invalid_Padding + } + for j in 0 ..< si { + if data[j] == PADDING { + return .Invalid_Padding + } + } + } + + rem := si % 4 + if .No_Padding in options && rem == 1 { + return .Invalid_Padding + } + + if .Strict in options { + if .No_Padding not_in options { + if n % 4 != 0 { + return .Invalid_Padding + } + + switch rem { + case 0: + if pad != 0 { + return .Invalid_Padding + } + case 2: + if pad != 2 { + return .Invalid_Padding + } + case 3: + if pad != 1 { + return .Invalid_Padding + } + case: + return .Invalid_Padding + } + } + + switch rem { + case 2: + c := dec_tbl[data[si - 1]] + if c < 0 { + return .Invalid_Character + } + if (c & 0x0f) != 0 { + return .Non_Canonical + } + case 3: + c := dec_tbl[data[si - 1]] + if c < 0 { + return .Invalid_Character + } + if (c & 0x03) != 0 { + return .Non_Canonical + } + } + } + + return .None +} + +decode :: proc(data: string, DEC_TBL := DEC_TABLE, dst: []byte = nil, allocator := context.allocator, options := Decode_Options{}) -> (decoded: []byte, err: Error) { + if derr := validate_strict_decode(data, DEC_TBL, options); derr != .None { + return nil, derr + } + out_length := decoded_len(data) if out_length == 0 { return nil, nil @@ -231,7 +342,11 @@ decode :: proc(data: string, DEC_TBL := DEC_TABLE, dst: []byte = nil, allocator return } -decode_into_buf :: proc(dst: []byte, data: string, DEC_TBL := DEC_TABLE) -> (decoded: []byte, err: Error) { +decode_into_buf :: proc(dst: []byte, data: string, DEC_TBL := DEC_TABLE, options := Decode_Options{}) -> (decoded: []byte, err: Error) { + if derr := validate_strict_decode(data, DEC_TBL, options); derr != .None { + return nil, derr + } + out_length := decoded_len(data) if out_length == 0 { return @@ -240,7 +355,11 @@ decode_into_buf :: proc(dst: []byte, data: string, DEC_TBL := DEC_TABLE) -> (dec return decode_impl(dst, data, DEC_TBL) } -decode_into :: proc(w: io.Writer, data: string, DEC_TBL := DEC_TABLE) -> Error { +decode_into :: proc(w: io.Writer, data: string, DEC_TBL := DEC_TABLE, options := Decode_Options{}) -> Error { + if derr := validate_strict_decode(data, DEC_TBL, options); derr != .None { + return derr + } + _, err := decode_impl(w, data, DEC_TBL) return err } diff --git a/tests/core/encoding/base64/base64.odin b/tests/core/encoding/base64/base64.odin index ba7572139..0ef1e61cc 100644 --- a/tests/core/encoding/base64/base64.odin +++ b/tests/core/encoding/base64/base64.odin @@ -2,6 +2,7 @@ package test_encoding_base64 import "base:intrinsics" import "core:encoding/base64" +import "core:strings" import "core:testing" Test :: struct { @@ -84,3 +85,163 @@ test_base64url :: proc(t: ^testing.T) { defer delete(decoded) testing.expect_value(t, string(decoded), plain) } + +@(test) +test_strict_known :: proc(t: ^testing.T) { + cases := []struct { + src: string, + options: base64.Decode_Options, + exp: string, + } { + {"", {.Strict}, ""}, + {"", {.Strict, .No_Padding}, ""}, + {"Zg==", {.Strict}, "f"}, + {"Zm8=", {.Strict}, "fo"}, + {"Zm9v", {.Strict}, "foo"}, + {"Zm9vYg==", {.Strict}, "foob"}, + {"Zm9vYmE=", {.Strict}, "fooba"}, + {"Zm9vYmFy", {.Strict}, "foobar"}, + {"Zg", {.Strict, .No_Padding}, "f"}, + {"Zm8", {.Strict, .No_Padding}, "fo"}, + {"Zm9v", {.Strict, .No_Padding}, "foo"}, + {"Zm9vYg", {.Strict, .No_Padding}, "foob"}, + {"Zm9vYmE", {.Strict, .No_Padding}, "fooba"}, + {"Zm9vYmFy", {.Strict, .No_Padding}, "foobar"}, + } + for c in cases { + decoded, err := base64.decode(c.src, options = c.options) + if !testing.expectf(t, err == nil, "decode(%q, %v): %v", c.src, c.options, err) { + continue + } + testing.expectf(t, string(decoded) == c.exp, "decode(%q): got %q, want %q", c.src, decoded, c.exp) + delete(decoded) + } +} + +@(test) +test_strict_reject :: proc(t: ^testing.T) { + cases := []struct { + src: string, + options: base64.Decode_Options, + err: base64.Decode_Error, + } { + {"A", {.Strict}, .Invalid_Padding}, + {"AA", {.Strict}, .Invalid_Padding}, + {"Zg", {.Strict}, .Invalid_Padding}, + {"Zm8", {.Strict}, .Invalid_Padding}, + {"Zg=", {.Strict}, .Invalid_Padding}, + {"Zg===", {.Strict}, .Invalid_Padding}, + {"=Zg=", {.Strict}, .Invalid_Padding}, + {"Zm=8", {.Strict}, .Invalid_Padding}, + {"AAAAAA=", {.Strict}, .Invalid_Padding}, + {"Zh==", {.Strict}, .Non_Canonical}, + {"QR==", {.Strict}, .Non_Canonical}, + {"WvLTlMrX9NpYDQlEIFlnDB==", {.Strict}, .Non_Canonical}, + {"Zg==", {.Strict, .No_Padding}, .Invalid_Padding}, + {"Zm8=", {.Strict, .No_Padding}, .Invalid_Padding}, + {"Z", {.Strict, .No_Padding}, .Invalid_Padding}, + {"QR", {.Strict, .No_Padding}, .Non_Canonical}, + {"!!!!", {.Strict}, .Invalid_Character}, + {"Zm9!", {.Strict}, .Invalid_Character}, + } + for c in cases { + decoded, err := base64.decode(c.src, options = c.options) + testing.expectf(t, err == c.err, "decode(%q, %v): got %v, want %v", c.src, c.options, err, c.err) + delete(decoded) + } +} + +@(test) +test_strict_trailing_bits :: proc(t: ^testing.T) { + // The pair from Go's TestDecoderIssue15656. + decoded, err := base64.decode("WvLTlMrX9NpYDQlEIFlnDA==", options = {.Strict}) + if testing.expect_value(t, err, nil) { + delete(decoded) + } + + decoded, err = base64.decode("WvLTlMrX9NpYDQlEIFlnDB==", options = {.Strict}) + testing.expect(t, err == base64.Decode_Error.Non_Canonical) + testing.expect(t, decoded == nil) +} + +@(test) +test_strict_base64url :: proc(t: ^testing.T) { + // '>>>' encodes to 'Pj4-' (raw) in the URL alphabet. + decoded, err := base64.decode("Pj4-", base64.DEC_URL_TABLE, options = {.Strict, .No_Padding}) + if testing.expect_value(t, err, nil) { + testing.expect_value(t, string(decoded), ">>>") + delete(decoded) + } + + // URL alphabet characters are invalid in the standard alphabet. + _, err = base64.decode("Pj4-", options = {.Strict, .No_Padding}) + testing.expect(t, err == base64.Decode_Error.Invalid_Character) + + // Padded URL alphabet: {0xFB, 0xEF} encodes to '--8='. + decoded, err = base64.decode("--8=", base64.DEC_URL_TABLE, options = {.Strict}) + if testing.expect_value(t, err, nil) { + testing.expect_value(t, string(decoded), "\xFB\xEF") + delete(decoded) + } +} + +@(test) +test_strict_roundtrip :: proc(t: ^testing.T) { + values: [1024]u8 + for &v, i in values[:] { + v = u8(i) + } + + for n in 0 ..= len(values) { + data := values[:n] + + padded := base64.encode(data) + defer delete(padded) + + decoded, err := base64.decode(padded, options = {.Strict}) + if testing.expectf(t, err == nil, "strict padded decode n=%d: %v", n, err) { + testing.expectf(t, string(decoded) == string(data), "strict padded roundtrip mismatch n=%d", n) + delete(decoded) + } + + raw := strings.trim_right(padded, "=") + decoded, err = base64.decode(raw, options = {.Strict, .No_Padding}) + if testing.expectf(t, err == nil, "strict raw decode n=%d: %v", n, err) { + testing.expectf(t, string(decoded) == string(data), "strict raw roundtrip mismatch n=%d", n) + delete(decoded) + } + } +} + +@(test) +test_strict_decode_into :: proc(t: ^testing.T) { + builder: strings.Builder + strings.builder_init(&builder) + defer strings.builder_destroy(&builder) + + err := base64.decode_into(strings.to_writer(&builder), "Zm9v", options = {.Strict}) + testing.expect_value(t, err, nil) + testing.expect_value(t, strings.to_string(builder), "foo") + + err = base64.decode_into(strings.to_writer(&builder), "Zh==", options = {.Strict}) + testing.expect(t, err == base64.Decode_Error.Non_Canonical) + + buf: [8]byte + decoded, derr := base64.decode_into_buf(buf[:], "Zm8", options = {.Strict, .No_Padding}) + testing.expect_value(t, derr, nil) + testing.expect_value(t, string(decoded), "fo") + + _, derr = base64.decode_into_buf(buf[:], "Zm8=", options = {.Strict, .No_Padding}) + testing.expect(t, derr == base64.Decode_Error.Invalid_Padding) +} + +@(test) +test_strict_is_optional :: proc(t: ^testing.T) { + // Without options, the historical lenient behavior is preserved. + lenient := []string{"Zg", "Zh=="} + for src in lenient { + decoded, err := base64.decode(src) + testing.expectf(t, err == nil, "lenient decode(%q): %v", src, err) + delete(decoded) + } +} From f3dff6da4b21a412908e7ff035d47cfed8a9d8d1 Mon Sep 17 00:00:00 2001 From: Alexander Zhura Date: Tue, 29 Sep 2026 13:21:03 +0300 Subject: [PATCH 034/215] Impl simd x86 avx2 avx512 shift logical --- core/simd/x86/avx2.odin | 125 ++++++++++++++++++++++++++++++++++++ core/simd/x86/avx512bw.odin | 70 ++++++++++++++++++++ core/simd/x86/avx512f.odin | 81 +++++++++++++++++++++++ 3 files changed, 276 insertions(+) create mode 100644 core/simd/x86/avx2.odin create mode 100644 core/simd/x86/avx512bw.odin create mode 100644 core/simd/x86/avx512f.odin diff --git a/core/simd/x86/avx2.odin b/core/simd/x86/avx2.odin new file mode 100644 index 000000000..c1afb7e50 --- /dev/null +++ b/core/simd/x86/avx2.odin @@ -0,0 +1,125 @@ +#+build i386, amd64 +package simd_x86 + +import "core:simd" + +// Shift packed 32-bit integers in `a` right by the amount specified by +// the corresponding element in `count` while shifting in zeros, and store the results in `dst`. +// +// [Intel's documentation](https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_srlv_epi32) +@(require_results, enable_target_feature="avx2") +_mm_srlv_epi32 :: #force_inline proc "c" (a: __m128i, count: __m128i) -> __m128i { + b := simd.lanes_lt(transmute(simd.u32x4)count, simd.u32x4(8 * size_of(u32))) + c := simd.select(b, transmute(simd.u32x4)count, simd.u32x4(0)) + return transmute(__m128i)simd.select(b, simd.shr(transmute(simd.u32x4)a, c), simd.u32x4(0)) +} + +// Shift packed 64-bit integers in `a` right by the amount specified by +// the corresponding element in `count` while shifting in zeros, and store the results in `dst`. +// +// [Intel's documentation](https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_srlv_epi64) +@(require_results, enable_target_feature="avx2") +_mm_srlv_epi64 :: #force_inline proc "c" (a: __m128i, count: __m128i) -> __m128i { + b := simd.lanes_lt(transmute(simd.u64x2)count, simd.u64x2(8 * size_of(u64))) + c := simd.select(b, transmute(simd.u64x2)count, simd.u64x2(0)) + return transmute(__m128i)simd.select(b, simd.shr(transmute(simd.u64x2)a, c), simd.u64x2(0)) +} + +// Shift packed 32-bit integers in `a` right by the amount specified by +// the corresponding element in `count` while shifting in zeros, and store the results in `dst`. +// +// [Intel's documentation](https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm256_srlv_epi32) +@(require_results, enable_target_feature="avx2") +_mm256_srlv_epi32 :: #force_inline proc "c" (a: __m256i, count: __m256i) -> __m256i { + b := simd.lanes_lt(transmute(simd.u32x8)count, simd.u32x8(8 * size_of(u32))) + c := simd.select(b, transmute(simd.u32x8)count, simd.u32x8(0)) + return transmute(__m256i)simd.select(b, simd.shr(transmute(simd.u32x8)a, c), simd.u32x8(0)) +} + +// Shift packed 64-bit integers in `a` right by the amount specified by +// the corresponding element in `count` while shifting in zeros, and store the results in `dst`. +// +// [Intel's documentation](https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm256_srlv_epi64) +@(require_results, enable_target_feature="avx2") +_mm256_srlv_epi64 :: #force_inline proc "c" (a: __m256i, count: __m256i) -> __m256i { + b := simd.lanes_lt(transmute(simd.u64x4)count, simd.u64x4(8 * size_of(u64))) + c := simd.select(b, transmute(simd.u64x4)count, simd.u64x4(0)) + return transmute(__m256i)simd.select(b, simd.shr(transmute(simd.u64x4)a, c), simd.u64x4(0)) +} + +// Shift packed 32-bit integers in `a` left by the amount specified by +// the corresponding element in `count` while shifting in zeros, and store the results in `dst`. +// +// [Intel's documentation](https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_sllv_epi32) +@(require_results, enable_target_feature="avx2") +_mm_sllv_epi32 :: #force_inline proc "c" (a: __m128i, count: __m128i) -> __m128i { + b := simd.lanes_lt(transmute(simd.u32x4)count, simd.u32x4(8 * size_of(u32))) + c := simd.select(b, transmute(simd.u32x4)count, simd.u32x4(0)) + return transmute(__m128i)simd.select(b, simd.shl(transmute(simd.u32x4)a, c), simd.u32x4(0)) +} + +// Shift packed 64-bit integers in `a` left by the amount specified by +// the corresponding element in `count` while shifting in zeros, and store the results in `dst`. +// +// [Intel's documentation](https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_sllv_epi64) +@(require_results, enable_target_feature="avx2") +_mm_sllv_epi64 :: #force_inline proc "c" (a: __m128i, count: __m128i) -> __m128i { + b := simd.lanes_lt(transmute(simd.u64x2)count, simd.u64x2(8 * size_of(u64))) + c := simd.select(b, transmute(simd.u64x2)count, simd.u64x2(0)) + return transmute(__m128i)simd.select(b, simd.shl(transmute(simd.u64x2)a, c), simd.u64x2(0)) +} + +// Shift packed 32-bit integers in `a` left by the amount specified by +// the corresponding element in `count` while shifting in zeros, and store the results in `dst`. +// +// [Intel's documentation](https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm256_sllv_epi32) +@(require_results, enable_target_feature="avx2") +_mm256_sllv_epi32 :: #force_inline proc "c" (a: __m256i, count: __m256i) -> __m256i { + b := simd.lanes_lt(transmute(simd.u32x8)count, simd.u32x8(8 * size_of(u32))) + c := simd.select(b, transmute(simd.u32x8)count, simd.u32x8(0)) + return transmute(__m256i)simd.select(b, simd.shl(transmute(simd.u32x8)a, c), simd.u32x8(0)) +} + +// Shift packed 64-bit integers in `a` left by the amount specified by +// the corresponding element in `count` while shifting in zeros, and store the results in `dst`. +// +// [Intel's documentation](https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm256_sllv_epi64) +@(require_results, enable_target_feature="avx2") +_mm256_sllv_epi64 :: #force_inline proc "c" (a: __m256i, count: __m256i) -> __m256i { + b := simd.lanes_lt(transmute(simd.u64x4)count, simd.u64x4(8 * size_of(u64))) + c := simd.select(b, transmute(simd.u64x4)count, simd.u64x4(0)) + return transmute(__m256i)simd.select(b, simd.shl(transmute(simd.u64x4)a, c), simd.u64x4(0)) +} + +// Compute the bitwise AND of 256 bits (representing integer data) in `a` and `b`, and store the result in `dst`. +// +// [Intel's documentation](https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm256_and_si256) +@(require_results, enable_target_feature="avx2") +_mm256_and_si256 :: #force_inline proc "c" (a, b: __m256i) -> __m256i { + return simd.bit_and(a, b) +} + +// Compute the bitwise NOT of 256 bits (representing integer data) in `a` and then AND with `b`, and store the result in `dst`. +// +// [Intel's documentation](https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm256_andnot_si256) +@(require_results, enable_target_feature="avx2") +_mm256_andnot_si256 :: #force_inline proc "c" (a, b: __m256i) -> __m256i { + c := __m256i(-1) + return simd.bit_and(simd.bit_xor(a, c), b) +} + +// Compute the bitwise OR of 256 bits (representing integer data) in `a` and `b`, and store the result in `dst`. +// +// [Intel's documentation](https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm256_or_si256) +@(require_results, enable_target_feature="avx2") +_mm256_or_si256 :: #force_inline proc "c" (a, b: __m256i) -> __m256i { + return simd.bit_or(a, b) +} + +// Compute the bitwise XOR of 256 bits (representing integer data) in `a` and `b`, and store the result in `dst`. +// +// [Intel's documentation](https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm256_xor_si256) +@(require_results, enable_target_feature="avx2") +_mm256_xor_si256 :: #force_inline proc "c" (a, b: __m256i) -> __m256i { + return simd.bit_xor(a, b) +} diff --git a/core/simd/x86/avx512bw.odin b/core/simd/x86/avx512bw.odin new file mode 100644 index 000000000..861b6af6e --- /dev/null +++ b/core/simd/x86/avx512bw.odin @@ -0,0 +1,70 @@ +#+build i386, amd64 +package simd_x86 + +import "core:simd" + +// Shift packed 16-bit integers in `a` right by the amount specified by +// the corresponding element in `count` while shifting in zeros, and store the results in `dst`. +// +// [Intel's documentation](https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_srlv_epi16) +@(require_results, enable_target_feature="avx512bw,avx512vl") +_mm_srlv_epi16 :: #force_inline proc "c" (a: __m128i, count: __m128i) -> __m128i { + b := simd.lanes_lt(transmute(simd.u16x8)count, simd.u16x8(8 * size_of(u16))) + c := simd.select(b, transmute(simd.u16x8)count, simd.u16x8(0)) + return transmute(__m128i)simd.select(b, simd.shr(transmute(simd.u16x8)a, c), simd.u16x8(0)) +} + +// Shift packed 16-bit integers in `a` right by the amount specified by +// the corresponding element in `count` while shifting in zeros, and store the results in `dst`. +// +// [Intel's documentation](https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm256_srlv_epi16) +@(require_results, enable_target_feature="avx512bw,avx512vl") +_mm256_srlv_epi16 :: #force_inline proc "c" (a: __m256i, count: __m256i) -> __m256i { + b := simd.lanes_lt(transmute(simd.u16x16)count, simd.u16x16(8 * size_of(u16))) + c := simd.select(b, transmute(simd.u16x16)count, simd.u16x16(0)) + return transmute(__m256i)simd.select(b, simd.shr(transmute(simd.u16x16)a, c), simd.u16x16(0)) +} + +// Shift packed 16-bit integers in `a` right by the amount specified by +// the corresponding element in `count` while shifting in zeros, and store the results in `dst`. +// +// [Intel's documentation](https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm512_srlv_epi16) +@(require_results, enable_target_feature="avx512bw") +_mm512_srlv_epi16 :: #force_inline proc "c" (a: __m512i, count: __m512i) -> __m512i { + b := simd.lanes_lt(transmute(simd.u16x32)count, simd.u16x32(8 * size_of(u16))) + c := simd.select(b, transmute(simd.u16x32)count, simd.u16x32(0)) + return transmute(__m512i)simd.select(b, simd.shr(transmute(simd.u16x32)a, c), simd.u16x32(0)) +} + +// Shift packed 16-bit integers in `a` left by the amount specified by +// the corresponding element in `count` while shifting in zeros, and store the results in `dst`. +// +// [Intel's documentation](https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_sllv_epi16) +@(require_results, enable_target_feature="avx512bw,avx512vl") +_mm_sllv_epi16 :: #force_inline proc "c" (a: __m128i, count: __m128i) -> __m128i { + b := simd.lanes_lt(transmute(simd.u16x8)count, simd.u16x8(8 * size_of(u16))) + c := simd.select(b, transmute(simd.u16x8)count, simd.u16x8(0)) + return transmute(__m128i)simd.select(b, simd.shl(transmute(simd.u16x8)a, c), simd.u16x8(0)) +} + +// Shift packed 16-bit integers in `a` left by the amount specified by +// the corresponding element in `count` while shifting in zeros, and store the results in `dst`. +// +// [Intel's documentation](https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm256_sllv_epi16) +@(require_results, enable_target_feature="avx512bw,avx512vl") +_mm256_sllv_epi16 :: #force_inline proc "c" (a: __m256i, count: __m256i) -> __m256i { + b := simd.lanes_lt(transmute(simd.u16x16)count, simd.u16x16(8 * size_of(u16))) + c := simd.select(b, transmute(simd.u16x16)count, simd.u16x16(0)) + return transmute(__m256i)simd.select(b, simd.shl(transmute(simd.u16x16)a, c), simd.u16x16(0)) +} + +// Shift packed 16-bit integers in `a` left by the amount specified by +// the corresponding element in `count` while shifting in zeros, and store the results in `dst`. +// +// [Intel's documentation](https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm512_sllv_epi16) +@(require_results, enable_target_feature="avx512bw") +_mm512_sllv_epi16 :: #force_inline proc "c" (a: __m512i, count: __m512i) -> __m512i { + b := simd.lanes_lt(transmute(simd.u16x32)count, simd.u16x32(8 * size_of(u16))) + c := simd.select(b, transmute(simd.u16x32)count, simd.u16x32(0)) + return transmute(__m512i)simd.select(b, simd.shl(transmute(simd.u16x32)a, c), simd.u16x32(0)) +} diff --git a/core/simd/x86/avx512f.odin b/core/simd/x86/avx512f.odin new file mode 100644 index 000000000..8053abe87 --- /dev/null +++ b/core/simd/x86/avx512f.odin @@ -0,0 +1,81 @@ +#+build i386, amd64 +package simd_x86 + +import "core:simd" + +// Shift packed 32-bit integers in `a` right by the amount specified by +// the corresponding element in `count` while shifting in zeros, and store the results in `dst`. +// +// [Intel's documentation](https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm512_srlv_epi32) +@(require_results, enable_target_feature="avx512f") +_mm512_srlv_epi32 :: #force_inline proc "c" (a: __m512i, count: __m512i) -> __m512i { + b := simd.lanes_lt(transmute(simd.u32x16)count, simd.u32x16(8 * size_of(u32))) + c := simd.select(b, transmute(simd.u32x16)count, simd.u32x16(0)) + return transmute(__m512i)simd.select(b, simd.shr(transmute(simd.u32x16)a, c), simd.u32x16(0)) +} + +// Shift packed 64-bit integers in `a` right by the amount specified by +// the corresponding element in `count` while shifting in zeros, and store the results in `dst`. +// +// [Intel's documentation](https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm512_srlv_epi64) +@(require_results, enable_target_feature="avx512f") +_mm512_srlv_epi64 :: #force_inline proc "c" (a: __m512i, count: __m512i) -> __m512i { + b := simd.lanes_lt(transmute(simd.u64x8)count, simd.u64x8(8 * size_of(u64))) + c := simd.select(b, transmute(simd.u64x8)count, simd.u64x8(0)) + return transmute(__m512i)simd.select(b, simd.shr(transmute(simd.u64x8)a, c), simd.u64x8(0)) +} + +// Shift packed 32-bit integers in `a` left by the amount specified by +// the corresponding element in `count` while shifting in zeros, and store the results in `dst`. +// +// [Intel's documentation](https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm512_sllv_epi32) +@(require_results, enable_target_feature="avx512f") +_mm512_sllv_epi32 :: #force_inline proc "c" (a: __m512i, count: __m512i) -> __m512i { + b := simd.lanes_lt(transmute(simd.u32x16)count, simd.u32x16(8 * size_of(u32))) + c := simd.select(b, transmute(simd.u32x16)count, simd.u32x16(0)) + return transmute(__m512i)simd.select(b, simd.shl(transmute(simd.u32x16)a, c), simd.u32x16(0)) +} + +// Shift packed 64-bit integers in `a` left by the amount specified by +// the corresponding element in `count` while shifting in zeros, and store the results in `dst`. +// +// [Intel's documentation](https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm512_sllv_epi64) +@(require_results, enable_target_feature="avx512f") +_mm512_sllv_epi64 :: #force_inline proc "c" (a: __m512i, count: __m512i) -> __m512i { + b := simd.lanes_lt(transmute(simd.u64x8)count, simd.u64x8(8 * size_of(u64))) + c := simd.select(b, transmute(simd.u64x8)count, simd.u64x8(0)) + return transmute(__m512i)simd.select(b, simd.shl(transmute(simd.u64x8)a, c), simd.u64x8(0)) +} + +// Compute the bitwise AND of 512 bits (representing integer data) in `a` and `b`, and store the result in `dst`. +// +// [Intel's documentation](https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm512_and_si512) +@(require_results, enable_target_feature="avx512f") +_mm512_and_si512 :: #force_inline proc "c" (a, b: __m512i) -> __m512i { + return simd.bit_and(a, b) +} + +// Compute the bitwise NOT of 512 bits (representing integer data) in `a` and then AND with `b`, and store the result in `dst`. +// +// [Intel's documentation](https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm512_andnot_si512) +@(require_results, enable_target_feature="avx512f") +_mm512_andnot_si512 :: #force_inline proc "c" (a, b: __m512i) -> __m512i { + c := __m512i(-1) + return simd.bit_and(simd.bit_xor(a, c), b) +} + +// Compute the bitwise OR of 512 bits (representing integer data) in `a` and `b`, and store the result in `dst`. +// +// [Intel's documentation](https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm512_or_si512) +@(require_results, enable_target_feature="avx512f") +_mm512_or_si512 :: #force_inline proc "c" (a, b: __m512i) -> __m512i { + return simd.bit_or(a, b) +} + +// Compute the bitwise XOR of 512 bits (representing integer data) in `a` and `b`, and store the result in `dst`. +// +// [Intel's documentation](https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm512_xor_si512) +@(require_results, enable_target_feature="avx512f") +_mm512_xor_si512 :: #force_inline proc "c" (a, b: __m256i) -> __m256i { + return simd.bit_xor(a, b) +} From ae63a4a4c603082987e9ce8e48b5e93e2896bed6 Mon Sep 17 00:00:00 2001 From: gingerBill Date: Tue, 29 Sep 2026 11:41:50 +0100 Subject: [PATCH 035/215] Fix big integer representation of large numbers such as `98765.0e309` --- src/big_int.cpp | 7 +-- src/check_expr.cpp | 26 +++++++++++ src/exact_value.cpp | 110 ++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 138 insertions(+), 5 deletions(-) diff --git a/src/big_int.cpp b/src/big_int.cpp index 0d38f0ab1..9db4a8d55 100644 --- a/src/big_int.cpp +++ b/src/big_int.cpp @@ -300,11 +300,8 @@ gb_internal void big_int_from_string(BigInt *dst, String const &s, bool *success return; } - // NOTE(Jeroen): A valid integer can never have an exponent larger than 308 (per `max(f64)`). - // As an integer, not even larger than `max(u128)` which has a base 10 exponent of 38. - // But we also use this path to parse float literals like those in `core:math.pow10_f64`, - // so we have to stick with 1e308. - if (exp > 308) { + // NOTE(bill): Just limit the maximum exponent to bigger than the actual maximum to allow for keeping overflows + if (exp > 512) { *success = false; return; } diff --git a/src/check_expr.cpp b/src/check_expr.cpp index a159df6a6..ec812bac1 100644 --- a/src/check_expr.cpp +++ b/src/check_expr.cpp @@ -2516,6 +2516,28 @@ gb_internal bool check_representable_as_constant(CheckerContext *c, ExactValue i return false; } check_update_float_precision(&v, type); + + if (in_value.kind == ExactValue_Integer) { + bool overflowed = isinf(v.value_float) || isnan(v.value_float); + if (!overflowed) { + switch (type->Basic.kind) { + case Basic_f16: + case Basic_f16le: + case Basic_f16be: + // `check_update_float_precision` only rounds `f16` to `f32` precision, so a value + // that is finite as `f32` but out of range for `f16` must be caught explicitly. + if (isinf(cast(f64)f16_to_f32(f32_to_f16(cast(f32)v.value_float)))) { + overflowed = true; + } + break; + } + } + if (overflowed) { + // Leave `out_value` unset so the diagnostic reports the exact (finite) source value. + return false; + } + } + if (out_value) *out_value = v; switch (type->Basic.kind) { @@ -12607,6 +12629,10 @@ gb_internal ExprKind check_expr_base_internal(CheckerContext *c, Operand *o, Ast t = t_untyped_integer; if (bl->token.kind == Token_Rune) { t = t_untyped_rune; + } else if (string_contains_char(bl->token.string, '.')) { + // NOTE(bill): A floating-point literal whose value happens to be an integer (e.g. `98765.0e309`) keeps + // its exact value as an integer, but still defaults to untyped float because it was written in floating-point form. + t = t_untyped_float; } break; default: diff --git a/src/exact_value.cpp b/src/exact_value.cpp index d768525ad..6e5b84bad 100644 --- a/src/exact_value.cpp +++ b/src/exact_value.cpp @@ -349,6 +349,106 @@ gb_internal f64 float_from_string(String const &string, bool *success = nullptr) */ } +gb_internal ExactValue exact_value_integer_from_decimal_float_string(String const &string, bool *is_integral) { + *is_integral = false; + + BigInt mantissa = {}; + big_int_from_u64(&mantissa, 0); + defer (big_int_dealloc(&mantissa)); + BigInt ten = {}; + big_int_from_u64(&ten, 10); + defer (big_int_dealloc(&ten)); + BigInt digit = {}; + defer (big_int_dealloc(&digit)); + + isize i = 0; + i64 frac_digits = 0; + bool seen_dot = false; + for (; i < string.len; i++) { + u8 c = string.text[i]; + if (c == '_') { + continue; + } + if (c == '.') { + if (seen_dot) { + return {ExactValue_Invalid}; + } + seen_dot = true; + continue; + } + if (c == 'e' || c == 'E') { + break; + } + if (!gb_char_is_digit(cast(char)c)) { + // NOTE(bill): Not a plain base-10 float literal (the tokenizer should have prevented this). + return {ExactValue_Invalid}; + } + big_int_from_u64(&digit, u64_digit_value(cast(Rune)c)); + big_int_mul_eq(&mantissa, &ten); + big_int_add_eq(&mantissa, &digit); + if (seen_dot) { + frac_digits += 1; + } + } + + i64 exp = 0; + bool exp_negative = false; + if (i < string.len && (string.text[i] == 'e' || string.text[i] == 'E')) { + i += 1; + if (i < string.len && (string.text[i] == '+' || string.text[i] == '-')) { + exp_negative = string.text[i] == '-'; + i += 1; + } + isize exp_digits = 0; + for (; i < string.len; i++) { + u8 c = string.text[i]; + if (c == '_') { + continue; + } + if (!gb_char_is_digit(cast(char)c)) { + return {ExactValue_Invalid}; + } + if (exp <= 512) { + // NOTE(bill): clamp so it cannot overflow; anything past the cap is rejected below + exp = exp*10 + cast(i64)u64_digit_value(cast(Rune)c); + } + exp_digits += 1; + } + if (exp_digits == 0) { + return {ExactValue_Invalid}; + } + } + + i64 signed_exp = exp_negative ? -exp : exp; + i64 effective_exp = signed_exp - frac_digits; + if (effective_exp < 0) { + // NOTE(bill): The value has a fractional part, so it is not an integer; let the caller parse it as a float. + return {ExactValue_Invalid}; + } + + *is_integral = true; + + // NOTE(bill): Guard against pathological allocations; kept consistent with `big_int_from_string`. + if (signed_exp > 512) { + return {ExactValue_Invalid}; + } + + bool success = true; + BigInt scale = {}; + mp_init(&scale); + defer (big_int_dealloc(&scale)); + big_int_exp_u64(&scale, &ten, cast(u64)effective_exp, &success); + if (!success) { + return {ExactValue_Invalid}; + } + + ExactValue result = {ExactValue_Integer}; + result.value_integer = {0}; + mp_init(&result.value_integer); + big_int_mul(&result.value_integer, &mantissa, &scale); + return result; +} + gb_internal ExactValue exact_value_float_from_string(String string) { if (string.len > 2 && string[0] == '0' && string[1] == 'h') { @@ -383,6 +483,16 @@ gb_internal ExactValue exact_value_float_from_string(String string) { return exact_value_integer_from_string(string); } + { + // NOTE(bill): A decimal literal whose value is an integer (e.g. `98765.0e309`) is kept + // as an exact arbitrary-precision integer so it is not silently rounded to `+Inf` by `strtod` + bool is_integral = false; + ExactValue v = exact_value_integer_from_decimal_float_string(string, &is_integral); + if (is_integral) { + return v; + } + } + bool success; f64 f = float_from_string(string, &success); if (!success) { From b153d6071cfd8a881fcbe6c1c16e12f1cb4bf5e2 Mon Sep 17 00:00:00 2001 From: gingerBill Date: Tue, 29 Sep 2026 12:17:02 +0100 Subject: [PATCH 036/215] Support `bit_set[E; [4]u64]` style types --- base/runtime/core_builtin.odin | 13 +++- core/fmt/fmt.odin | 60 ++++++++++++++++ src/check_expr.cpp | 4 -- src/check_type.cpp | 13 ++-- src/llvm_backend_const.cpp | 40 ++++++++++- src/llvm_backend_expr.cpp | 127 +++++++++++++++++++++++++++++++-- 6 files changed, 236 insertions(+), 21 deletions(-) diff --git a/base/runtime/core_builtin.odin b/base/runtime/core_builtin.odin index fccc8b1df..df8a36ff6 100644 --- a/base/runtime/core_builtin.odin +++ b/base/runtime/core_builtin.odin @@ -1652,7 +1652,18 @@ when MAP_ENABLED { // `card` returns the number of bits that are set in a bit_set—its cardinality @builtin card :: proc "contextless" (s: $S/bit_set[$E; $U]) -> int { - return int(intrinsics.count_ones(transmute(intrinsics.type_bit_set_underlying_type(S))s)) + Backing :: intrinsics.type_bit_set_underlying_type(S) + when intrinsics.type_is_array(Backing) { + // bit_set backed by an array of integers: sum the population count of each element + backing := transmute(Backing)s + count := 0 + for elem in backing { + count += int(intrinsics.count_ones(elem)) + } + return count + } else { + return int(intrinsics.count_ones(transmute(Backing)s)) + } } diff --git a/core/fmt/fmt.odin b/core/fmt/fmt.odin index 53cda51f4..a2e6d2247 100644 --- a/core/fmt/fmt.odin +++ b/core/fmt/fmt.odin @@ -1815,6 +1815,14 @@ fmt_bit_set :: proc(fi: ^Info, v: any, name: string = "", verb: rune = 'v') { fmt_bit_set(fi, val, info.name, verb) case runtime.Type_Info_Bit_Set: + if info.underlying != nil { + #partial switch _ in runtime.type_info_base(info.underlying).variant { + case runtime.Type_Info_Array: + fmt_bit_set_array(fi, v, type_info, name, verb) + return + } + } + bits: u128 bit_size := u128(8*type_info.size) @@ -1914,6 +1922,58 @@ fmt_bit_set :: proc(fi: ^Info, v: any, name: string = "", verb: rune = 'v') { } } +// Formats an array-of-integers backed bit_set (e.g. `bit_set[E; [4]u64]`). +// The bits are stored as a little-endian sequence in memory (bit `b` is bit `b%8` of byte `b/8`), +// so they can be scanned directly regardless of how many array elements back the set. +fmt_bit_set_array :: proc(fi: ^Info, v: any, type_info: ^runtime.Type_Info, name: string, verb: rune) { + info := type_info.variant.(runtime.Type_Info_Bit_Set) + bit_size := int(8*type_info.size) + + et := runtime.type_info_base(info.elem) + e, is_enum := et.variant.(runtime.Type_Info_Enum) + + if verb != 'w' { + if name != "" { + io.write_string(fi.writer, name, &fi.n) + } else { + reflect.write_type(fi.writer, type_info, &fi.n) + } + } + io.write_byte(fi.writer, '{', &fi.n) + defer io.write_byte(fi.writer, '}', &fi.n) + + bytes := ([^]u8)(v.data) + commas := 0 + loop: for bit_index in 0..> uint(bit_index & 7)) & 1 == 0 { + continue + } + i := i64(bit_index) + info.lower + if commas > 0 { + io.write_string(fi.writer, ", ", &fi.n) + } + if is_enum { + enum_name: string + if ti_named, is_named := info.elem.variant.(runtime.Type_Info_Named); is_named { + enum_name = ti_named.name + } + for ev, evi in e.values { + if u64(ev) == u64(i) { + if verb == 'w' { + io.write_string(fi.writer, enum_name, &fi.n) + io.write_byte(fi.writer, '.', &fi.n) + } + io.write_string(fi.writer, e.names[evi], &fi.n) + commas += 1 + continue loop + } + } + } + io.write_i64(fi.writer, i, 10, &fi.n) + commas += 1 + } +} + // Writes the specified number of indents to the provided Info structure // // Inputs: diff --git a/src/check_expr.cpp b/src/check_expr.cpp index ec812bac1..5d0c3df13 100644 --- a/src/check_expr.cpp +++ b/src/check_expr.cpp @@ -11707,10 +11707,6 @@ gb_internal ExprKind check_compound_literal(CheckerContext *c, Operand *o, Ast * field_count = et->Enum.fields.count; } - if (is_type_array(bit_set_to_int(t))) { - is_constant = false; - } - for (Ast *elem : cl->elems) { if (elem->kind == Ast_FieldValue) { error(elem, "'field = value' in a bit_set literal is not allowed"); diff --git a/src/check_type.cpp b/src/check_type.cpp index cb99bb4d9..696ae21ab 100644 --- a/src/check_type.cpp +++ b/src/check_type.cpp @@ -1384,14 +1384,11 @@ gb_internal void check_bit_set_type(CheckerContext *c, Type *type, Type *named_t Type *t = default_type(lhs.type); if (bs->underlying != nullptr) { Type *u = check_type(c, bs->underlying); - // if (!is_valid_bit_field_backing_type(u)) { - if (!is_type_integer(u)) { + if (!is_valid_bit_field_backing_type(u)) { gbString ts = type_to_string(u); - error(bs->underlying, "Expected an underlying integer for the bit set, got %s", ts); + error(bs->underlying, "Expected an underlying integer or array of integers for the bit set, got %s", ts); gb_string_free(ts); - if (!is_valid_bit_field_backing_type(u)) { - return; - } + return; } type->BitSet.underlying = u; } @@ -1502,9 +1499,9 @@ gb_internal void check_bit_set_type(CheckerContext *c, Type *type, Type *named_t i64 bits = MAX_BITS ; if (bs->underlying != nullptr) { Type *u = check_type(c, bs->underlying); - if (!is_type_integer(u)) { + if (!is_valid_bit_field_backing_type(u)) { gbString ts = type_to_string(u); - error(bs->underlying, "Expected an underlying integer for the bit set, got %s", ts); + error(bs->underlying, "Expected an underlying integer or array of integers for the bit set, got %s", ts); gb_string_free(ts); return; } diff --git a/src/llvm_backend_const.cpp b/src/llvm_backend_const.cpp index 31d1e16fb..d9f7d51be 100644 --- a/src/llvm_backend_const.cpp +++ b/src/llvm_backend_const.cpp @@ -500,7 +500,45 @@ gb_internal LLVMValueRef lb_big_int_to_llvm(lbModule *m, Type *original_type, Bi if (big_int_is_zero(a)) { return LLVMConstNull(lb_type(m, original_type)); } - + + // NOTE(bill): a bit_set backed by an array of integers (e.g. `bit_set[E; [4]u64]`) is represented as an LLVM array. + // There for its constant value is the same bit mask as an integer-backed bit_set, split into element-sized + // little-endian chunks (element `i` holds bits `[i*elem_bits, (i+1)*elem_bits)`), which matches how membership + // and literals index into the array. + if (is_type_bit_set(original_type)) { + Type *backing = bit_set_to_int(original_type); + if (is_type_array(backing)) { + Type *elem = backing->Array.elem; + i64 n = backing->Array.count; + i64 elem_bits = 8*type_size_of(elem); + + BigInt v = {}; + big_int_init(&v, a); + defer (big_int_dealloc(&v)); + + BigInt shift = {}; + big_int_from_u64(&shift, cast(u64)elem_bits); + defer (big_int_dealloc(&shift)); + + BigInt mask = {}; // (1 << elem_bits) - 1 + big_int_from_u64(&mask, 1); + big_int_shl(&mask, &mask, &shift); + mp_decr(&mask); + defer (big_int_dealloc(&mask)); + + LLVMTypeRef elem_llvm = lb_type(m, elem); + LLVMValueRef *elems = gb_alloc_array(temporary_allocator(), LLVMValueRef, cast(isize)n); + for (i64 i = 0; i < n; i++) { + BigInt chunk = {}; + big_int_and(&chunk, &v, &mask); + elems[i] = lb_big_int_to_llvm(m, elem, &chunk); + big_int_dealloc(&chunk); + big_int_shr_eq(&v, &shift); + } + return LLVMConstArray(elem_llvm, elems, cast(unsigned)n); + } + } + BigInt val = {}; big_int_init(&val, a); diff --git a/src/llvm_backend_expr.cpp b/src/llvm_backend_expr.cpp index 8348041b4..19bcefc5e 100644 --- a/src/llvm_backend_expr.cpp +++ b/src/llvm_backend_expr.cpp @@ -187,6 +187,10 @@ gb_internal lbValue lb_emit_unary_arith(lbProcedure *p, TokenKind op, lbValue x, if (is_type_bit_set(x.type)) { ExactValue ev_mask = exact_bit_set_all_set_mask(x.type); lbValue mask = lb_const_value(p->module, x.type, ev_mask); + if (is_type_array(bit_set_to_int(x.type))) { + lbValue res = lb_emit_arith(p, Token_Xor, x, mask, x.type); + return lb_emit_conv(p, res, type); + } cmp.value = LLVMBuildXor(p->builder, x.value, mask.value, ""); } else { cmp.value = LLVMBuildNot(p->builder, x.value, ""); @@ -2116,6 +2120,36 @@ gb_internal lbValue lb_build_binary_in(lbProcedure *p, lbValue left, lbValue rig Type *it = bit_set_to_int(rt); + if (is_type_array(it)) { + Type *elem = base_array_type(it); + i64 elem_bits = 8*type_size_of(elem); + + lbValue key = lb_emit_conv(p, left, t_int); + lbValue lower_v = lb_const_int(p->module, t_int, rt->BitSet.lower); + key = lb_emit_arith(p, Token_Sub, key, lower_v, t_int); + + lbValue ebits = lb_const_int(p->module, t_int, elem_bits); + lbValue elem_idx = lb_emit_arith(p, Token_Quo, key, ebits, t_int); + lbValue bit_idx = lb_emit_arith(p, Token_Mod, key, ebits, t_int); + + lbValue arr = lb_emit_transmute(p, right, it); + lbValue arr_ptr = lb_address_from_load_or_generate_local(p, arr); + arr_ptr.type = alloc_type_pointer(it); + + lbValue e_ptr = lb_emit_array_ep(p, arr_ptr, elem_idx); + lbValue e_val = lb_emit_load(p, e_ptr); + + lbValue shifted = lb_emit_arith(p, Token_Shr, e_val, lb_emit_conv(p, bit_idx, elem), elem); + lbValue masked = lb_emit_arith(p, Token_And, shifted, lb_const_int(p->module, elem, 1), elem); + lbValue zero = lb_const_int(p->module, elem, 0); + + if (op == Token_in) { + return lb_emit_conv(p, lb_emit_comp(p, Token_NotEq, masked, zero), t_bool); + } else { + return lb_emit_conv(p, lb_emit_comp(p, Token_CmpEq, masked, zero), t_bool); + } + } + left = lb_emit_conv(p, left, it); if (is_type_different_to_arch_endianness(it)) { left = lb_emit_byte_swap(p, left, integer_endian_type_to_platform_type(it)); @@ -3429,6 +3463,29 @@ gb_internal lbValue lb_compare_records(lbProcedure *p, TokenKind op_kind, lbValu +gb_internal lbValue lb_bit_set_array_is_zero(lbProcedure *p, lbValue arr) { + Type *at = base_type(arr.type); + GB_ASSERT(at->kind == Type_Array); + Type *elem = at->Array.elem; + i64 n = at->Array.count; + + lbValue acc = {}; + acc.type = elem; + acc.value = LLVMBuildExtractValue(p->builder, arr.value, 0, ""); + for (i64 i = 1; i < n; i++) { + lbValue e = {}; + e.type = elem; + e.value = LLVMBuildExtractValue(p->builder, arr.value, cast(unsigned)i, ""); + + acc = lb_emit_arith(p, Token_Or, acc, e, elem); + } + + lbValue res = {}; + res.type = t_llvm_bool; + res.value = LLVMBuildICmp(p->builder, LLVMIntEQ, acc.value, lb_const_int(p->module, elem, 0).value, ""); + return res; +} + gb_internal lbValue lb_emit_comp(lbProcedure *p, TokenKind op_kind, lbValue left, lbValue right) { Type *a = core_type(left.type); Type *b = core_type(right.type); @@ -3753,6 +3810,52 @@ gb_internal lbValue lb_emit_comp(lbProcedure *p, TokenKind op_kind, lbValue left } if (is_type_bit_set(a)) { + Type *it_backing = bit_set_to_int(a); + if (is_type_array(it_backing)) { + lbValue lhs = lb_emit_transmute(p, left, it_backing); + lbValue rhs = lb_emit_transmute(p, right, it_backing); + switch (op_kind) { + case Token_CmpEq: + case Token_NotEq: + { + lbValue diff = lb_emit_arith(p, Token_Xor, lhs, rhs, it_backing); + lbValue equal = lb_bit_set_array_is_zero(p, diff); + if (op_kind == Token_NotEq) { + lbValue res = {}; + res.type = t_llvm_bool; + res.value = LLVMBuildNot(p->builder, equal.value, ""); + return res; + } + return equal; + } + case Token_Lt: + case Token_LtEq: + { + // subset: (lhs &~ rhs) == {}; strict also requires lhs != rhs + lbValue d = lb_emit_arith(p, Token_AndNot, lhs, rhs, it_backing); + lbValue res = lb_bit_set_array_is_zero(p, d); + if (op_kind == Token_Lt) { + lbValue diff = lb_emit_arith(p, Token_Xor, lhs, rhs, it_backing); + lbValue equal = lb_bit_set_array_is_zero(p, diff); + res = lb_emit_arith(p, Token_AndNot, res, equal, t_llvm_bool); + } + return res; + } + case Token_Gt: + case Token_GtEq: + { + // superset: (rhs &~ lhs) == {}; strict also requires lhs != rhs + lbValue d = lb_emit_arith(p, Token_AndNot, rhs, lhs, it_backing); + lbValue res = lb_bit_set_array_is_zero(p, d); + if (op_kind == Token_Gt) { + lbValue diff = lb_emit_arith(p, Token_Xor, lhs, rhs, it_backing); + lbValue equal = lb_bit_set_array_is_zero(p, diff); + res = lb_emit_arith(p, Token_AndNot, res, equal, t_llvm_bool); + } + return res; + } + } + } switch (op_kind) { case Token_Lt: case Token_LtEq: @@ -6461,20 +6564,30 @@ gb_internal lbAddr lb_build_addr_compound_lit(lbProcedure *p, Ast *expr) { Type *backing = bit_set_to_int(type); if (is_type_array(backing)) { - GB_PANIC("TODO: bit_set [N]T"); Type *base_it = core_array_type(backing); i64 bits_per_elem = 8*type_size_of(base_it); - gb_unused(bits_per_elem); - lbValue one = lb_const_value(p->module, t_i64, exact_value_i64(1)); + lbValue ebits = lb_const_value(p->module, t_int, exact_value_i64(bits_per_elem)); + lbValue one = lb_const_value(p->module, base_it, exact_value_i64(1)); + + lbValue arr_ptr = lb_addr_get_ptr(p, v); + arr_ptr.type = alloc_type_pointer(backing); + for (Ast *elem : cl->elems) { GB_ASSERT(elem->kind != Ast_FieldValue); lbValue expr = lb_build_expr(p, elem); GB_ASSERT(expr.type->kind != Type_Tuple); - lbValue e = lb_emit_conv(p, expr, t_i64); - e = lb_emit_arith(p, Token_Sub, e, lower, t_i64); - // lbValue idx = lb_emit_arith(p, Token_Div, e, bits_per_elem, t_i64); - // lbValue val = lb_emit_arith(p, Token_Div, e, bits_per_elem, t_i64); + lbValue e = lb_emit_conv(p, expr, t_int); + e = lb_emit_arith(p, Token_Sub, e, lower, t_int); + + lbValue elem_idx = lb_emit_arith(p, Token_Quo, e, ebits, t_int); + lbValue bit_idx = lb_emit_arith(p, Token_Mod, e, ebits, t_int); + + lbValue e_ptr = lb_emit_array_ep(p, arr_ptr, elem_idx); + lbValue bit = lb_emit_arith(p, Token_Shl, one, lb_emit_conv(p, bit_idx, base_it), base_it); + lbValue old_value = lb_emit_load(p, e_ptr); + lbValue new_value = lb_emit_arith(p, Token_Or, old_value, bit, base_it); + lb_emit_store(p, e_ptr, new_value); } } else { Type *it = bit_set_to_int(bt); From bd87143db78b485b6831f47cf21d278b3ffae7a0 Mon Sep 17 00:00:00 2001 From: gingerBill Date: Tue, 29 Sep 2026 12:20:52 +0100 Subject: [PATCH 037/215] Add some regression tests for `bit_set` backed by arrays --- tests/internal/test_bit_set_array.odin | 189 +++++++++++++++++++++++++ 1 file changed, 189 insertions(+) create mode 100644 tests/internal/test_bit_set_array.odin diff --git a/tests/internal/test_bit_set_array.odin b/tests/internal/test_bit_set_array.odin new file mode 100644 index 000000000..465095bd8 --- /dev/null +++ b/tests/internal/test_bit_set_array.odin @@ -0,0 +1,189 @@ +package test_internal + +import "core:fmt" +import "core:testing" + +// Regression tests for `bit_set` types backed by an array of integers, e.g. `bit_set[E; [4]u64]`. +// The interesting cases are the set relations (`<`, `<=`, `>`, `>=`) with their subset/superset +// semantics, which must agree between the compile-time constant folding and the generated code, and +// must match an ordinary integer-backed bit_set. An array backing also lets a bit_set exceed the +// 128-bit limit of the integer backings. + +@(private="file") +Bsa_E :: enum u8 { A, B, C, D, E, F, G, H } + +@(private="file") +Bsa_Arr :: bit_set[Bsa_E; [4]u64] // array backed (256 bits) + +@(private="file") +Bsa_Int :: bit_set[Bsa_E; u16] // integer backed, for cross-checking + +@(private="file") +bsa_arr_from :: proc(m: u8) -> (s: Bsa_Arr) { + for i in 0..<8 { + if (m >> uint(i)) & 1 == 1 { + s += {Bsa_E(i)} + } + } + return +} + +@(private="file") +bsa_int_from :: proc(m: u8) -> (s: Bsa_Int) { + for i in 0..<8 { + if (m >> uint(i)) & 1 == 1 { + s += {Bsa_E(i)} + } + } + return +} + +@(test) +bit_set_array_membership :: proc(t: ^testing.T) { + s := Bsa_Arr{.A, .C, .E} + testing.expect(t, .A in s, ".A should be in s") + testing.expect(t, .E in s, ".E should be in s") + testing.expect(t, .B not_in s, ".B should not be in s") + testing.expect(t, .H not_in s, ".H should not be in s") + + // runtime (non-constant) key + k := Bsa_E.E + testing.expect(t, k in s, "runtime key .E should be in s") + k = .F + testing.expect(t, k not_in s, "runtime key .F should not be in s") + + // constant folding of `in` + C :: Bsa_Arr{.A, .C} + #assert(.A in C) + #assert(.B not_in C) +} + +@(test) +bit_set_array_algebra :: proc(t: ^testing.T) { + a := Bsa_Arr{.A, .C, .E} + b := Bsa_Arr{.C, .E, .G} + + testing.expect_value(t, a | b, Bsa_Arr{.A, .C, .E, .G}) + testing.expect_value(t, a & b, Bsa_Arr{.C, .E}) + testing.expect_value(t, a &~ b, Bsa_Arr{.A}) + testing.expect_value(t, a + b, a | b) // `+` aliases `|` + testing.expect_value(t, a - b, a &~ b) // `-` aliases `&~` + + // complement + full := ~Bsa_Arr{} + testing.expect_value(t, card(full), 8) + testing.expect_value(t, ~a, full &~ a) + + // assignment operators + s := Bsa_Arr{.A} + s += {.C} + s |= {.E} + testing.expect_value(t, s, Bsa_Arr{.A, .C, .E}) + s -= {.A} + s &~= {.C} + testing.expect_value(t, s, Bsa_Arr{.E}) + s = Bsa_Arr{.A, .B, .C} + s &= {.B, .C, .D} + testing.expect_value(t, s, Bsa_Arr{.B, .C}) +} + +@(test) +bit_set_array_subset :: proc(t: ^testing.T) { + sup := Bsa_Arr{.A, .B, .C, .D} + sub := Bsa_Arr{.B, .C} + dis := Bsa_Arr{.E, .F} + + testing.expect(t, sub <= sup, "sub is a subset") + testing.expect(t, sub < sup, "sub is a strict subset") + testing.expect(t, sup >= sub, "sup is a superset") + testing.expect(t, sup > sub, "sup is a strict superset") + + testing.expect(t, sup <= sup, "reflexive <=") + testing.expect(t, sup >= sup, "reflexive >=") + testing.expect(t, !(sup < sup), "not a strict subset of itself") + testing.expect(t, !(sup > sup), "not a strict superset of itself") + + testing.expect(t, !(dis <= sup), "disjoint set is not a subset") + testing.expect(t, !(sup <= dis), "superset is not a subset of a disjoint set") + + // the same relations must fold at compile time + CSUP :: Bsa_Arr{.A, .B, .C, .D} + CSUB :: Bsa_Arr{.B, .C} + #assert(CSUB <= CSUP) + #assert(CSUB < CSUP) + #assert(CSUP >= CSUB) + #assert(CSUP > CSUB) + #assert(CSUP <= CSUP) + #assert(!(CSUP < CSUP)) + #assert(CSUP == CSUP) + #assert(CSUB != CSUP) +} + +@(test) +bit_set_array_card :: proc(t: ^testing.T) { + testing.expect_value(t, card(Bsa_Arr{}), 0) + testing.expect_value(t, card(Bsa_Arr{.A}), 1) + testing.expect_value(t, card(Bsa_Arr{.A, .C, .E, .G}), 4) + testing.expect_value(t, card(~Bsa_Arr{}), 8) +} + +@(test) +bit_set_array_over_128_bits :: proc(t: ^testing.T) { + Big :: enum { V0 = 0, V64 = 64, V127 = 127, V128 = 128, V200 = 200 } + BS :: bit_set[Big; [4]u64] // 256 bits, cannot be an integer backing + + testing.expect_value(t, size_of(BS), 32) + + s := BS{.V0, .V128, .V200} + testing.expect(t, .V0 in s, ".V0 in s") + testing.expect(t, .V128 in s, ".V128 in s (past 128 bits)") + testing.expect(t, .V200 in s, ".V200 in s (past 128 bits)") + testing.expect(t, .V64 not_in s, ".V64 not in s") + testing.expect(t, .V127 not_in s, ".V127 not in s") + testing.expect_value(t, card(s), 3) + + // bits beyond 128 must participate in the set relations + testing.expect(t, BS{.V200} <= s, "high bit subset") + testing.expect(t, !(BS{.V64} <= s), "absent high bit is not a subset") + testing.expect_value(t, s & BS{.V128}, BS{.V128}) +} + +@(test) +bit_set_array_matches_integer_backing :: proc(t: ^testing.T) { + // Exhaustively compare an array-backed and an integer-backed bit_set over the same 8-bit masks + // for every relation and set operation. + mismatches := 0 + for a in u16(0)..<256 { + for b in u16(0)..<256 { + aa, ab := bsa_arr_from(u8(a)), bsa_arr_from(u8(b)) + ia, ib := bsa_int_from(u8(a)), bsa_int_from(u8(b)) + + if (aa < ab) != (ia < ib) { mismatches += 1 } + if (aa <= ab) != (ia <= ib) { mismatches += 1 } + if (aa > ab) != (ia > ib) { mismatches += 1 } + if (aa >= ab) != (ia >= ib) { mismatches += 1 } + if (aa == ab) != (ia == ib) { mismatches += 1 } + if (aa != ab) != (ia != ib) { mismatches += 1 } + + if card(aa) != card(ia) { mismatches += 1 } + if card(aa | ab) != card(ia | ib) { mismatches += 1 } + if card(aa & ab) != card(ia & ib) { mismatches += 1 } + if card(aa &~ ab) != card(ia &~ ib) { mismatches += 1 } + if card(~aa) != card(~ia) { mismatches += 1 } + } + } + testing.expect_value(t, mismatches, 0) +} + +@(test) +bit_set_array_formatting :: proc(t: ^testing.T) { + a := Bsa_Arr{.A, .C, .H} + i := Bsa_Int{.A, .C, .H} + + // The `%w` verb lists the members without the surrounding bit_set type name, so an array-backed + // set and an integer-backed set with the same members format identically. + sa := fmt.tprintf("%w", a) + si := fmt.tprintf("%w", i) + testing.expect_value(t, sa, si) + testing.expect_value(t, sa, "{Bsa_E.A, Bsa_E.C, Bsa_E.H}") +} From 0af5fd70ffb9f9c2ec5c5ef5dce12453f6e0c68b Mon Sep 17 00:00:00 2001 From: gingerBill Date: Tue, 29 Sep 2026 12:33:43 +0100 Subject: [PATCH 038/215] Correct for finite decimal literals --- src/exact_value.cpp | 24 ++++++++++++++---------- 1 file changed, 14 insertions(+), 10 deletions(-) diff --git a/src/exact_value.cpp b/src/exact_value.cpp index 6e5b84bad..7f757ec0b 100644 --- a/src/exact_value.cpp +++ b/src/exact_value.cpp @@ -483,21 +483,25 @@ gb_internal ExactValue exact_value_float_from_string(String string) { return exact_value_integer_from_string(string); } - { - // NOTE(bill): A decimal literal whose value is an integer (e.g. `98765.0e309`) is kept - // as an exact arbitrary-precision integer so it is not silently rounded to `+Inf` by `strtod` - bool is_integral = false; - ExactValue v = exact_value_integer_from_decimal_float_string(string, &is_integral); - if (is_integral) { - return v; - } - } - bool success; f64 f = float_from_string(string, &success); if (!success) { return {ExactValue_Invalid}; } + + // NOTE: A finite decimal literal is kept as a floating-point value so that ordinary + // floating-point constant arithmetic behaves as expected (e.g. `1.0 / 16.0` is `0.0625`, not + // integer division). Only when the literal overflows `f64` to an infinity is it re-parsed as an + // exact arbitrary-precision integer (every such literal is integer-valued, e.g. `98765.0e309`), + // so that it is not silently turned into `+Inf` and its representability can be checked exactly. + if (isinf(f)) { + bool is_integral = false; + ExactValue v = exact_value_integer_from_decimal_float_string(string, &is_integral); + if (is_integral) { + // This is the exact integer value, or Invalid if it exceeds the exponent cap. + return v; + } + } return exact_value_float(f); } From db10c6ba3fda60ec061530b8d307bbb769259c71 Mon Sep 17 00:00:00 2001 From: gingerBill Date: Tue, 29 Sep 2026 14:01:08 +0100 Subject: [PATCH 039/215] Implement the basics for a big rational library in the compiler --- src/big_rat.cpp | 189 ++++++++++++++++++++++++++++++++++++++++++++++++ src/main.cpp | 1 + 2 files changed, 190 insertions(+) create mode 100644 src/big_rat.cpp diff --git a/src/big_rat.cpp b/src/big_rat.cpp new file mode 100644 index 000000000..087f5398e --- /dev/null +++ b/src/big_rat.cpp @@ -0,0 +1,189 @@ +gb_internal bool big_rat_from_decimal_string(String const &s, mp_int *num, mp_int *den) { + TEMPORARY_ALLOCATOR_GUARD(); + char *digits = gb_alloc_array(temporary_allocator(), char, s.len + 2); + isize dlen = 0; + + isize i = 0; + bool neg = false; + if (i < s.len && (s[i] == '+' || s[i] == '-')) { + neg = s[i] == '-'; + i += 1; + } + + i64 frac_digits = 0; + bool seen_dot = false; + for (; i < s.len; i++) { + u8 c = s[i]; + if (c == '_') { + continue; + } + if (c == '.') { + if (seen_dot) return false; + seen_dot = true; + continue; + } + if (c == 'e' || c == 'E') { + break; + } + if (!gb_char_is_digit(cast(char)c)) return false; + digits[dlen++] = cast(char)c; + if (seen_dot) frac_digits += 1; + } + if (dlen == 0) { + digits[dlen++] = '0'; + } + digits[dlen] = 0; + + i64 exp = 0; + bool exp_neg = false; + if (i < s.len && (s[i] == 'e' || s[i] == 'E')) { + i += 1; + if (i < s.len && (s[i] == '+' || s[i] == '-')) { + exp_neg = s[i] == '-'; + i += 1; + } + isize exp_digits = 0; + for (; i < s.len; i++) { + u8 c = s[i]; + if (c == '_') continue; + if (!gb_char_is_digit(cast(char)c)) return false; + exp = exp*10 + cast(i64)(c - '0'); + exp_digits += 1; + } + if (exp_digits == 0) return false; + } + + i64 signed_exp = exp_neg ? -exp : exp; + i64 net = signed_exp - frac_digits; // value = mantissa * 10^net + + mp_init(num); + mp_init(den); + mp_read_radix(num, digits, 10); + mp_set_u64(den, 1); + + if (net != 0) { + mp_int ten; mp_init(&ten); defer (mp_clear(&ten)); mp_set_u64(&ten, 10); + mp_int p; mp_init(&p); defer (mp_clear(&p)); + mp_expt_n(&ten, cast(int)(net < 0 ? -net : net), &p); + if (net > 0) { + mp_mul(num, &p, num); + } else { + mp_copy(&p, den); + } + } + if (neg) { + mp_neg(num, num); + } + return true; +} + +// Convert the exact rational `a/b` (b != 0) to the nearest f64 (round-to-nearest, ties-to-even). +// NOTE(bill): Ported from core:math/big `internal_rat_to_float`. +gb_internal f64 big_rat_to_f64(mp_int const *a_in, mp_int const *b_in) { + int const MSIZE = 52; // explicit mantissa bits + int const MSIZE1 = MSIZE + 1; // 53, incl. the implicit bit + int const MSIZE2 = MSIZE + 2; // 54, one guard bit + int const EBIAS = 1023; + int const EMIN = 1 - EBIAS; // -1022 + + int alen = mp_count_bits(a_in); + if (alen == 0) { + return big_int_is_neg(a_in) ? -0.0 : 0.0; + } + bool has_sign = big_int_is_neg(a_in) != big_int_is_neg(b_in); + + int exp = alen - mp_count_bits(b_in); + + mp_int a2, b2, q, r; + mp_init(&a2); mp_init(&b2); mp_init(&q); mp_init(&r); + defer (mp_clear(&a2)); defer (mp_clear(&b2)); defer (mp_clear(&q)); defer (mp_clear(&r)); + mp_abs(a_in, &a2); + mp_abs(b_in, &b2); + + int shift = MSIZE2 - exp; + if (shift > 0) { + mp_mul_2d(&a2, shift, &a2); + } else if (shift < 0) { + mp_mul_2d(&b2, -shift, &b2); + } + + mp_div(&a2, &b2, &q, &r); + bool has_rem = !mp_iszero(&r); + u64 mantissa = mp_get_mag_u64(&q); + + if ((mantissa >> MSIZE2) == 1) { + if (mantissa & 1) has_rem = true; + mantissa >>= 1; + exp += 1; + } + // mantissa is now in [2^53, 2^54): 53 significant bits plus one guard bit. + + if (EMIN - MSIZE <= exp && exp <= EMIN) { + // Denormalise: fold the bits that fall below the subnormal grid into the guard/sticky. + unsigned sh = cast(unsigned)(EMIN - (exp - 1)); + u64 lost = mantissa & ((cast(u64)1 << sh) - 1); + has_rem = has_rem || (lost != 0); + mantissa >>= sh; + exp = 2 - EBIAS; + } + + if (mantissa & 1) { + if (has_rem || (mantissa & 2)) { // round half to even + mantissa += 1; + if (mantissa >= (cast(u64)1 << MSIZE2)) { + mantissa >>= 1; + exp += 1; + } + } + } + mantissa >>= 1; // drop the guard bit + + f64 f = ldexp(cast(f64)mantissa, exp - MSIZE1); + if (has_sign) { + f = -f; + } + return f; +} + +/* +gb_internal void big_rat_selftest(void) { + char const *lits[] = { + "0.1", "0.2", "0.3", "0.5", "1.5", + "3.14159265358979323846", + "1e10", "1e100", "1e308", + "1.7976931348623157e308", // ~max normal + "2.2250738585072014e-308", // min normal + "5e-324", // smallest subnormal + "2.5e-324", "7.5e-324", // subnormal ties + "1e-324", "4e-324", // below the smallest subnormal (round to 0 / to 1 ulp) + "9007199254740993", // 2^53 + 1 + "98765.0e309", // overflow -> +Inf + "-0.1", "-2.5e-324", + "0.1000000000000000055511151231257827021181583404541015625", // exact f64(0.1) + }; + int total = 0, diffs = 0; + for (isize k = 0; k < cast(isize)(gb_size_of(lits)/gb_size_of(lits[0])); k++) { + char const *lit = lits[k]; + mp_int num, den; + if (!big_rat_from_decimal_string(make_string_c(lit), &num, &den)) { + gb_printf_err(" PARSE FAIL: %s\n", lit); + continue; + } + f64 mine = big_rat_to_f64(&num, &den); + mp_clear(&num); mp_clear(&den); + + char *end = nullptr; + f64 ref = strtod(lit, &end); + + union { f64 f; u64 u; } mb, rb; + mb.f = mine; rb.f = ref; + bool ok = mb.u == rb.u; + if (!ok) diffs += 1; + total += 1; + gb_printf(" %-56s mine=%016llx ref=%016llx %s\n", + lit, cast(unsigned long long)mb.u, cast(unsigned long long)rb.u, ok ? "OK" : "DIFF"); + } + gb_printf("big_rat_selftest: %d/%d correctly rounded vs strtod (%d diffs)\n", total-diffs, total, diffs); +} + +*/ \ No newline at end of file diff --git a/src/main.cpp b/src/main.cpp index 3605717e7..2f506b501 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -7,6 +7,7 @@ #pragma warning(disable: 4505) #endif #include "big_int.cpp" +#include "big_rat.cpp" #if defined(GB_SYSTEM_WINDOWS) #pragma warning(pop) #endif From e23e01510eb95df0007ffabaf06e2a241463e4fd Mon Sep 17 00:00:00 2001 From: gingerBill Date: Tue, 29 Sep 2026 14:17:21 +0100 Subject: [PATCH 040/215] Add `ExactValue_Rational`; Start adding some tests for big rat --- src/big_rat.cpp | 26 +++++++ src/exact_value.cpp | 182 ++++++++++++++++++++++++++++++++++++++++++-- src/main.cpp | 6 ++ 3 files changed, 209 insertions(+), 5 deletions(-) diff --git a/src/big_rat.cpp b/src/big_rat.cpp index 087f5398e..afff7edc0 100644 --- a/src/big_rat.cpp +++ b/src/big_rat.cpp @@ -1,3 +1,29 @@ +// An exact rational value: num/den with den > 0, kept in lowest terms. +struct BigRat { + mp_int num; // signed + mp_int den; // > 0 +}; + +// Reduce num/den to lowest terms with den > 0 (0 becomes 0/1). +gb_internal void big_rat_normalize(mp_int *num, mp_int *den) { + if (mp_iszero(num)) { + mp_set_u64(den, 1); + return; + } + if (big_int_is_neg(den)) { + mp_neg(num, num); + mp_neg(den, den); + } + mp_int g; mp_init(&g); defer (mp_clear(&g)); + mp_int one; mp_init(&one); defer (mp_clear(&one)); mp_set_u64(&one, 1); + mp_gcd(num, den, &g); + if (!mp_iszero(&g) && mp_cmp(&g, &one) != MP_EQ) { + mp_int q, r; mp_init(&q); mp_init(&r); defer (mp_clear(&q)); defer (mp_clear(&r)); + mp_div(num, &g, &q, &r); mp_copy(&q, num); + mp_div(den, &g, &q, &r); mp_copy(&q, den); + } +} + gb_internal bool big_rat_from_decimal_string(String const &s, mp_int *num, mp_int *den) { TEMPORARY_ALLOCATOR_GUARD(); char *digits = gb_alloc_array(temporary_allocator(), char, s.len + 2); diff --git a/src/exact_value.cpp b/src/exact_value.cpp index 7f757ec0b..ff5731140 100644 --- a/src/exact_value.cpp +++ b/src/exact_value.cpp @@ -30,6 +30,7 @@ enum ExactValueKind { ExactValue_String16 = 11, ExactValue_AsmTemplate = 12, ExactValue_Variant = 13, + ExactValue_Rational = 14, // exact num/den for untyped float constants ExactValue_Count, }; @@ -50,6 +51,7 @@ gb_global char const *exact_value_kind_string[ExactValue_Count] = { "String16", "AsmTemplate", "Variant", + "Rational", }; struct ExactValue { @@ -59,6 +61,7 @@ struct ExactValue { String value_string; BigInt value_integer; f64 value_float; + BigRat * value_rational; i64 value_pointer; // NOTE(bill): This must be an integer and not a pointer Complex128 *value_complex; Quaternion256 *value_quaternion; @@ -99,6 +102,15 @@ gb_internal uintptr hash_exact_value(ExactValue v) { case ExactValue_Float: res = gb_fnv32a(&v.value_float, gb_size_of(v.value_float)); break; + case ExactValue_Rational: + { + BigInt const &n = v.value_rational->num; + BigInt const &d = v.value_rational->den; + u32 kn = gb_fnv32a(n.dp, gb_size_of(*n.dp) * n.used); + u32 kd = gb_fnv32a(d.dp, gb_size_of(*d.dp) * d.used); + res = ((kn ^ (u8)n.sign) * 0x01000193) ^ kd; + break; + } case ExactValue_Pointer: res = ptr_map_hash_key(v.value_pointer); break; @@ -173,6 +185,25 @@ gb_internal ExactValue exact_value_float(f64 f) { return result; } +// Make an exact-rational value from num/den (copied and reduced to lowest terms, den > 0). +gb_internal ExactValue exact_value_rational_from_ints(mp_int const *num, mp_int const *den) { + BigRat *br = permanent_alloc_item(); + mp_init(&br->num); + mp_init(&br->den); + mp_copy(num, &br->num); + mp_copy(den, &br->den); + big_rat_normalize(&br->num, &br->den); + + ExactValue result = {ExactValue_Rational}; + result.value_rational = br; + return result; +} + +gb_internal ExactValue exact_value_rational_from_integer(BigInt const *i) { + mp_int one; mp_init(&one); defer (mp_clear(&one)); mp_set_u64(&one, 1); + return exact_value_rational_from_ints(i, &one); +} + gb_internal ExactValue exact_value_complex(f64 real, f64 imag) { ExactValue result = {ExactValue_Complex}; result.value_complex = permanent_alloc_item(); @@ -567,6 +598,17 @@ gb_internal ExactValue exact_value_to_integer(ExactValue v) { case ExactValue_Pointer: return exact_value_i64(cast(i64)cast(intptr)v.value_pointer); + + case ExactValue_Rational: + // Only an exact integer (den == 1 after reduction) converts to an integer. + if (mp_cmp_d(&v.value_rational->den, 1) == MP_EQ) { + ExactValue r = {ExactValue_Integer}; + r.value_integer = {0}; + mp_init(&r.value_integer); + mp_copy(&v.value_rational->num, &r.value_integer); + return r; + } + break; } ExactValue r = {ExactValue_Invalid}; return r; @@ -578,6 +620,8 @@ gb_internal ExactValue exact_value_to_float(ExactValue v) { return exact_value_float(big_int_to_f64(&v.value_integer)); case ExactValue_Float: return v; + case ExactValue_Rational: + return exact_value_float(big_rat_to_f64(&v.value_rational->num, &v.value_rational->den)); } ExactValue r = {ExactValue_Invalid}; return r; @@ -589,6 +633,8 @@ gb_internal ExactValue exact_value_to_complex(ExactValue v) { return exact_value_complex(big_int_to_f64(&v.value_integer), 0); case ExactValue_Float: return exact_value_complex(v.value_float, 0); + case ExactValue_Rational: + return exact_value_complex(big_rat_to_f64(&v.value_rational->num, &v.value_rational->den), 0); case ExactValue_Complex: return v; // case ExactValue_Quaternion: @@ -604,6 +650,8 @@ gb_internal ExactValue exact_value_to_quaternion(ExactValue v) { return exact_value_quaternion(big_int_to_f64(&v.value_integer), 0, 0, 0); case ExactValue_Float: return exact_value_quaternion(v.value_float, 0, 0, 0); + case ExactValue_Rational: + return exact_value_quaternion(big_rat_to_f64(&v.value_rational->num, &v.value_rational->den), 0, 0, 0); case ExactValue_Complex: return exact_value_quaternion(v.value_complex->real, v.value_complex->imag, 0, 0); case ExactValue_Quaternion: @@ -618,6 +666,7 @@ gb_internal ExactValue exact_value_real(ExactValue v) { switch (v.kind) { case ExactValue_Integer: case ExactValue_Float: + case ExactValue_Rational: return v; case ExactValue_Complex: return exact_value_float(v.value_complex->real); @@ -632,6 +681,7 @@ gb_internal ExactValue exact_value_imag(ExactValue v) { switch (v.kind) { case ExactValue_Integer: case ExactValue_Float: + case ExactValue_Rational: return exact_value_i64(0); case ExactValue_Complex: return exact_value_float(v.value_complex->imag); @@ -646,6 +696,7 @@ gb_internal ExactValue exact_value_jmag(ExactValue v) { switch (v.kind) { case ExactValue_Integer: case ExactValue_Float: + case ExactValue_Rational: case ExactValue_Complex: return exact_value_i64(0); case ExactValue_Quaternion: @@ -659,6 +710,7 @@ gb_internal ExactValue exact_value_kmag(ExactValue v) { switch (v.kind) { case ExactValue_Integer: case ExactValue_Float: + case ExactValue_Rational: case ExactValue_Complex: return exact_value_i64(0); case ExactValue_Quaternion: @@ -740,6 +792,7 @@ gb_internal ExactValue exact_unary_operator_value(TokenKind op, ExactValue v, i3 switch (v.kind) { case ExactValue_Invalid: case ExactValue_Integer: + case ExactValue_Rational: case ExactValue_Float: case ExactValue_Complex: case ExactValue_Quaternion: @@ -763,6 +816,11 @@ gb_internal ExactValue exact_unary_operator_value(TokenKind op, ExactValue v, i3 i.value_float = -i.value_float; return i; } + case ExactValue_Rational: { + mp_int n; mp_init(&n); defer (mp_clear(&n)); + big_int_neg(&n, &v.value_rational->num); + return exact_value_rational_from_ints(&n, &v.value_rational->den); + } case ExactValue_Complex: { f64 real = v.value_complex->real; f64 imag = v.value_complex->imag; @@ -823,16 +881,18 @@ gb_internal i32 exact_value_order(ExactValue const &v) { return 1; case ExactValue_Integer: return 2; - case ExactValue_Float: + case ExactValue_Rational: // exact; between integer and (lossy) float return 3; - case ExactValue_Complex: + case ExactValue_Float: return 4; - case ExactValue_Quaternion: + case ExactValue_Complex: return 5; - case ExactValue_Pointer: + case ExactValue_Quaternion: return 6; - case ExactValue_Procedure: + case ExactValue_Pointer: return 7; + case ExactValue_Procedure: + return 8; default: GB_PANIC("How'd you get here? Invalid Value.kind %d", v.kind); @@ -867,6 +927,10 @@ gb_internal void match_exact_values(ExactValue *x, ExactValue *y) { switch (y->kind) { case ExactValue_Integer: return; + case ExactValue_Rational: + // Promote the integer to an exact rational so folding stays exact. + *x = exact_value_rational_from_integer(&x->value_integer); + return; case ExactValue_Float: // TODO(bill): Is this good enough? *x = exact_value_float(big_int_to_f64(&x->value_integer)); @@ -880,6 +944,22 @@ gb_internal void match_exact_values(ExactValue *x, ExactValue *y) { } break; + case ExactValue_Rational: + switch (y->kind) { + case ExactValue_Rational: + return; + case ExactValue_Float: + *x = exact_value_to_float(*x); + return; + case ExactValue_Complex: + *x = exact_value_to_complex(*x); + return; + case ExactValue_Quaternion: + *x = exact_value_to_quaternion(*x); + return; + } + break; + case ExactValue_Float: switch (y->kind) { case ExactValue_Float: @@ -955,6 +1035,27 @@ gb_internal ExactValue exact_binary_operator_value(TokenKind op, ExactValue x, E return res; } + case ExactValue_Rational: { + // Exact rational arithmetic: a/b (op) c/d, result reduced to lowest terms. + mp_int const *an = &x.value_rational->num, *ad = &x.value_rational->den; + mp_int const *bn = &y.value_rational->num, *bd = &y.value_rational->den; + mp_int nn, nd, t1, t2; + mp_init(&nn); mp_init(&nd); mp_init(&t1); mp_init(&t2); + defer (mp_clear(&nn)); defer (mp_clear(&nd)); defer (mp_clear(&t1)); defer (mp_clear(&t2)); + switch (op) { + case Token_Add: // (an*bd + bn*ad) / (ad*bd) + big_int_mul(&t1, an, bd); big_int_mul(&t2, bn, ad); big_int_add(&nn, &t1, &t2); big_int_mul(&nd, ad, bd); break; + case Token_Sub: + big_int_mul(&t1, an, bd); big_int_mul(&t2, bn, ad); big_int_sub(&nn, &t1, &t2); big_int_mul(&nd, ad, bd); break; + case Token_Mul: + big_int_mul(&nn, an, bn); big_int_mul(&nd, ad, bd); break; + case Token_Quo: // (an/ad) / (bn/bd) = (an*bd) / (ad*bn) + big_int_mul(&nn, an, bd); big_int_mul(&nd, ad, bn); break; + default: goto error; + } + return exact_value_rational_from_ints(&nn, &nd); + } + case ExactValue_Float: { f64 a = x.value_float; f64 b = y.value_float; @@ -1136,6 +1237,23 @@ gb_internal bool compare_exact_values(TokenKind op, ExactValue x, ExactValue y) break; } + case ExactValue_Rational: { + // a/b (op) c/d with b,d > 0 <=> a*d (op) c*b + mp_int lhs, rhs; mp_init(&lhs); mp_init(&rhs); defer (mp_clear(&lhs)); defer (mp_clear(&rhs)); + big_int_mul(&lhs, &x.value_rational->num, &y.value_rational->den); + big_int_mul(&rhs, &y.value_rational->num, &x.value_rational->den); + i32 cmp = big_int_cmp(&lhs, &rhs); + switch (op) { + case Token_CmpEq: return cmp == 0; + case Token_NotEq: return cmp != 0; + case Token_Lt: return cmp < 0; + case Token_LtEq: return cmp <= 0; + case Token_Gt: return cmp > 0; + case Token_GtEq: return cmp >= 0; + } + break; + } + case ExactValue_Float: { f64 a = x.value_float; f64 b = y.value_float; @@ -1318,6 +1436,8 @@ gb_internal gbString write_exact_value_to_string(gbString str, ExactValue const // NOTE(tf2spi): %.17g is specific enough to canonically serialize f64 case ExactValue_Float: return gb_string_append_fmt(str, "%.17g", v.value_float); + case ExactValue_Rational: + return gb_string_append_fmt(str, "%.17g", big_rat_to_f64(&v.value_rational->num, &v.value_rational->den)); case ExactValue_Complex: return gb_string_append_fmt(str, "%.17g+%.17gi", v.value_complex->real, v.value_complex->imag); case ExactValue_Quaternion: @@ -1338,3 +1458,55 @@ gb_internal gbString write_exact_value_to_string(gbString str, ExactValue const gb_internal gbString exact_value_to_string(ExactValue const &v, isize string_limit=36) { return write_exact_value_to_string(gb_string_make(heap_allocator(), ""), v, string_limit); } + +// TEMPORARY(bill): exercise ExactValue_Rational arithmetic/compare/convert +gb_internal ExactValue exact_value_rational_from_decimal(char const *lit) { + mp_int num, den; + big_rat_from_decimal_string(make_string_c(lit), &num, &den); + ExactValue r = exact_value_rational_from_ints(&num, &den); + mp_clear(&num); + mp_clear(&den); + return r; +} + +gb_internal void exact_value_rational_selftest(void) { + int total = 0, diffs = 0; + #define RAT(s) exact_value_rational_from_decimal(s) + #define BIN(a, op, b) exact_binary_operator_value(op, a, b) + #define TOF(v) exact_value_to_float(v).value_float + #define CHK(label, gotf, wantstr) do { \ + f64 g_ = (gotf); \ + f64 w_ = strtod((wantstr), nullptr); \ + union { f64 f; u64 u; } gg, ww; \ + gg.f = g_; \ + ww.f = w_; \ + bool ok_ = gg.u == ww.u; \ + total += 1; \ + if (!ok_) { diffs += 1; } \ + gb_printf(" %-24s got=%-24.17g want=%-24.17g %s\n", label, g_, w_, ok_ ? "OK" : "DIFF"); \ + } while (0) + + CHK("0.1 + 0.2", TOF(BIN(RAT("0.1"), Token_Add, RAT("0.2"))), "0.3"); + CHK("1.0 / 16.0", TOF(BIN(RAT("1.0"), Token_Quo, RAT("16.0"))), "0.0625"); + CHK("3.0 / 2.0", TOF(BIN(RAT("3.0"), Token_Quo, RAT("2.0"))), "1.5"); + CHK("2/3 + 1/3", TOF(BIN(BIN(RAT("2.0"), Token_Quo, RAT("3.0")), Token_Add, BIN(RAT("1.0"), Token_Quo, RAT("3.0")))), "1.0"); + CHK("0.3 - 0.2 - 0.1", TOF(BIN(BIN(RAT("0.3"), Token_Sub, RAT("0.2")), Token_Sub, RAT("0.1"))), "0.0"); + + // mixed integer + rational (exercises match_exact_values Integer -> Rational) + { + ExactValue one = exact_value_i64(1); + CHK("1 + 0.5 (int+rat)", TOF(BIN(one, Token_Add, RAT("0.5"))), "1.5"); + } + // comparison folding: (0.1 + 0.2) == 0.3 is exactly true with rationals + { + bool eq = compare_exact_values(Token_CmpEq, BIN(RAT("0.1"), Token_Add, RAT("0.2")), RAT("0.3")); + total += 1; if (!eq) diffs += 1; + gb_printf(" %-24s got=%-5s %s\n", "(0.1+0.2) == 0.3", eq ? "true" : "false", eq ? "OK" : "DIFF"); + } + + #undef RAT + #undef BIN + #undef TOF + #undef CHK + gb_printf("exact_value_rational_selftest: %d/%d ok (%d diffs)\n", total-diffs, total, diffs); +} diff --git a/src/main.cpp b/src/main.cpp index 2f506b501..0bf759573 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -3860,6 +3860,12 @@ int main(int arg_count, char const **arg_ptr) { init_keyword_hash_table(); init_terminal(); + // TEMPORARY(bill): validate the exact-rational core in-tree. + if (gb_get_env("ODIN_BIGRAT_SELFTEST", heap_allocator()) != nullptr) { + exact_value_rational_selftest(); + return 0; + } + if (!check_env()) { return 1; } From 7b19697dcf266a42f16e5ead4ed6a875b32ddeba Mon Sep 17 00:00:00 2001 From: gingerBill Date: Tue, 29 Sep 2026 14:38:08 +0100 Subject: [PATCH 041/215] Integrate `ExactValue_Rational` throughout the codebase --- src/big_rat.cpp | 56 +++-------- src/check_asm.cpp | 2 +- src/check_builtin.cpp | 3 + src/check_expr.cpp | 9 +- src/check_type.cpp | 4 +- src/exact_value.cpp | 190 ++++--------------------------------- src/llvm_backend_const.cpp | 4 + src/main.cpp | 8 +- 8 files changed, 49 insertions(+), 227 deletions(-) diff --git a/src/big_rat.cpp b/src/big_rat.cpp index afff7edc0..8f4383a72 100644 --- a/src/big_rat.cpp +++ b/src/big_rat.cpp @@ -4,6 +4,10 @@ struct BigRat { mp_int den; // > 0 }; +// Guards against a tiny literal requesting an enormous 10^N (e.g. `1.0e999999999`). Far beyond any +// representable float (f64 range is ~1e+-324); a literal past this is rejected as malformed. +i64 const BIG_RAT_MAX_DECIMAL_EXP = 65536; + // Reduce num/den to lowest terms with den > 0 (0 becomes 0/1). gb_internal void big_rat_normalize(mp_int *num, mp_int *den) { if (mp_iszero(num)) { @@ -73,7 +77,9 @@ gb_internal bool big_rat_from_decimal_string(String const &s, mp_int *num, mp_in u8 c = s[i]; if (c == '_') continue; if (!gb_char_is_digit(cast(char)c)) return false; - exp = exp*10 + cast(i64)(c - '0'); + if (exp <= BIG_RAT_MAX_DECIMAL_EXP) { // clamp so it cannot overflow; rejected below + exp = exp*10 + cast(i64)(c - '0'); + } exp_digits += 1; } if (exp_digits == 0) return false; @@ -81,6 +87,9 @@ gb_internal bool big_rat_from_decimal_string(String const &s, mp_int *num, mp_in i64 signed_exp = exp_neg ? -exp : exp; i64 net = signed_exp - frac_digits; // value = mantissa * 10^net + if (net > BIG_RAT_MAX_DECIMAL_EXP || net < -BIG_RAT_MAX_DECIMAL_EXP) { + return false; + } mp_init(num); mp_init(den); @@ -169,47 +178,4 @@ gb_internal f64 big_rat_to_f64(mp_int const *a_in, mp_int const *b_in) { f = -f; } return f; -} - -/* -gb_internal void big_rat_selftest(void) { - char const *lits[] = { - "0.1", "0.2", "0.3", "0.5", "1.5", - "3.14159265358979323846", - "1e10", "1e100", "1e308", - "1.7976931348623157e308", // ~max normal - "2.2250738585072014e-308", // min normal - "5e-324", // smallest subnormal - "2.5e-324", "7.5e-324", // subnormal ties - "1e-324", "4e-324", // below the smallest subnormal (round to 0 / to 1 ulp) - "9007199254740993", // 2^53 + 1 - "98765.0e309", // overflow -> +Inf - "-0.1", "-2.5e-324", - "0.1000000000000000055511151231257827021181583404541015625", // exact f64(0.1) - }; - int total = 0, diffs = 0; - for (isize k = 0; k < cast(isize)(gb_size_of(lits)/gb_size_of(lits[0])); k++) { - char const *lit = lits[k]; - mp_int num, den; - if (!big_rat_from_decimal_string(make_string_c(lit), &num, &den)) { - gb_printf_err(" PARSE FAIL: %s\n", lit); - continue; - } - f64 mine = big_rat_to_f64(&num, &den); - mp_clear(&num); mp_clear(&den); - - char *end = nullptr; - f64 ref = strtod(lit, &end); - - union { f64 f; u64 u; } mb, rb; - mb.f = mine; rb.f = ref; - bool ok = mb.u == rb.u; - if (!ok) diffs += 1; - total += 1; - gb_printf(" %-56s mine=%016llx ref=%016llx %s\n", - lit, cast(unsigned long long)mb.u, cast(unsigned long long)rb.u, ok ? "OK" : "DIFF"); - } - gb_printf("big_rat_selftest: %d/%d correctly rounded vs strtod (%d diffs)\n", total-diffs, total, diffs); -} - -*/ \ No newline at end of file +} \ No newline at end of file diff --git a/src/check_asm.cpp b/src/check_asm.cpp index 83ad8125d..dc050f1f0 100644 --- a/src/check_asm.cpp +++ b/src/check_asm.cpp @@ -217,7 +217,7 @@ enum AsmMismatch : u8 { // Accepts either a signed or an unsigned interpretation of the bit pattern, which // matches how the assembler treats imm fields (e.g. both 200 and -56 fit imm8). gb_internal bool check_asm_immediate_value_fits(ExactValue ev, i32 bits, i32 *needed_, AsmMismatch *mismatch_) { - if (ev.kind == ExactValue_Float) { + if (ev.kind == ExactValue_Float || ev.kind == ExactValue_Rational) { // Try to convert it if possible to an integer ev = exact_value_to_integer(ev); } diff --git a/src/check_builtin.cpp b/src/check_builtin.cpp index 187ddf43c..9a3013e8e 100644 --- a/src/check_builtin.cpp +++ b/src/check_builtin.cpp @@ -5202,6 +5202,9 @@ gb_internal bool check_builtin_procedure(CheckerContext *c, Operand *operand, As operand->type = o.type; ExactValue value = o.value; + if (value.kind == ExactValue_Rational) { + value = exact_value_to_float(value); // constant floor/ceil/round operate on the f64 + } if (value.kind == ExactValue_Integer) { // do nothing } else if (value.kind == ExactValue_Float) { diff --git a/src/check_expr.cpp b/src/check_expr.cpp index 248e9f146..45f5c504a 100644 --- a/src/check_expr.cpp +++ b/src/check_expr.cpp @@ -2517,7 +2517,9 @@ gb_internal bool check_representable_as_constant(CheckerContext *c, ExactValue i } check_update_float_precision(&v, type); - if (in_value.kind == ExactValue_Integer) { + // An exact finite constant (integer or rational) that overflows the target float's range is not + // representable by it; without this it would silently become +/-Inf (e.g. `x: f64 = 1.0e400`). + if (in_value.kind == ExactValue_Integer || in_value.kind == ExactValue_Rational) { bool overflowed = isinf(v.value_float) || isnan(v.value_float); if (!overflowed) { switch (type->Basic.kind) { @@ -2738,7 +2740,7 @@ gb_internal bool check_integer_exceed_suggestion(CheckerContext *c, Operand *o, // Returns how the empty value of `type` should be spelled when a numeric zero was written, // or nullptr if there is nothing worth suggesting. gb_internal char const *zero_value_suggestion(Operand *o, Type *type) { - if (o->value.kind != ExactValue_Integer && o->value.kind != ExactValue_Float) { + if (o->value.kind != ExactValue_Integer && o->value.kind != ExactValue_Float && o->value.kind != ExactValue_Rational) { return nullptr; } if (!is_exact_value_zero(o->value)) { @@ -12630,6 +12632,7 @@ gb_internal ExprKind check_expr_base_internal(CheckerContext *c, Operand *o, Ast case ExactValue_String: t = t_untyped_string; break; case ExactValue_String16: t = t_string16; break; // TODO(bill): determine this correctly case ExactValue_Float: t = t_untyped_float; break; + case ExactValue_Rational: t = t_untyped_float; break; // exact decimal float literal case ExactValue_Complex: t = t_untyped_complex; break; case ExactValue_Quaternion: t = t_untyped_quaternion; break; case ExactValue_Integer: @@ -13064,6 +13067,8 @@ gb_internal bool is_exact_value_zero(ExactValue const &v) { return big_int_is_zero(&v.value_integer); case ExactValue_Float: return v.value_float == 0.0; + case ExactValue_Rational: + return big_int_is_zero(&v.value_rational->num); case ExactValue_Complex: if (v.value_complex) { return v.value_complex->real == 0.0 && v.value_complex->imag == 0.0; diff --git a/src/check_type.cpp b/src/check_type.cpp index a5a8e64a4..b48a6c8ae 100644 --- a/src/check_type.cpp +++ b/src/check_type.cpp @@ -1139,7 +1139,7 @@ gb_internal void check_bit_field_type(CheckerContext *ctx, Type *bit_field_type, error(f->bit_size, "A bit_field's specified bit size must be a constant"); o.mode = Addressing_Invalid; } - if (o.value.kind == ExactValue_Float) { + if (o.value.kind == ExactValue_Float || o.value.kind == ExactValue_Rational) { o.value = exact_value_to_integer(o.value); } if (f->bit_size->kind == Ast_BinaryExpr && f->bit_size->BinaryExpr.op.kind == Token_Or) { @@ -2882,7 +2882,7 @@ gb_internal i64 check_array_count(CheckerContext *ctx, Operand *o, Ast *e) { Type *type = core_type(o->type); if (is_type_untyped(type) || is_type_integer(type)) { ExactValue value = o->value; - if (value.kind == ExactValue_Float) { + if (value.kind == ExactValue_Float || value.kind == ExactValue_Rational) { // NOTE: an integral float is a valid count, but it must be range checked as an integer value = exact_value_to_integer(value); } diff --git a/src/exact_value.cpp b/src/exact_value.cpp index ff5731140..60126a401 100644 --- a/src/exact_value.cpp +++ b/src/exact_value.cpp @@ -380,106 +380,6 @@ gb_internal f64 float_from_string(String const &string, bool *success = nullptr) */ } -gb_internal ExactValue exact_value_integer_from_decimal_float_string(String const &string, bool *is_integral) { - *is_integral = false; - - BigInt mantissa = {}; - big_int_from_u64(&mantissa, 0); - defer (big_int_dealloc(&mantissa)); - BigInt ten = {}; - big_int_from_u64(&ten, 10); - defer (big_int_dealloc(&ten)); - BigInt digit = {}; - defer (big_int_dealloc(&digit)); - - isize i = 0; - i64 frac_digits = 0; - bool seen_dot = false; - for (; i < string.len; i++) { - u8 c = string.text[i]; - if (c == '_') { - continue; - } - if (c == '.') { - if (seen_dot) { - return {ExactValue_Invalid}; - } - seen_dot = true; - continue; - } - if (c == 'e' || c == 'E') { - break; - } - if (!gb_char_is_digit(cast(char)c)) { - // NOTE(bill): Not a plain base-10 float literal (the tokenizer should have prevented this). - return {ExactValue_Invalid}; - } - big_int_from_u64(&digit, u64_digit_value(cast(Rune)c)); - big_int_mul_eq(&mantissa, &ten); - big_int_add_eq(&mantissa, &digit); - if (seen_dot) { - frac_digits += 1; - } - } - - i64 exp = 0; - bool exp_negative = false; - if (i < string.len && (string.text[i] == 'e' || string.text[i] == 'E')) { - i += 1; - if (i < string.len && (string.text[i] == '+' || string.text[i] == '-')) { - exp_negative = string.text[i] == '-'; - i += 1; - } - isize exp_digits = 0; - for (; i < string.len; i++) { - u8 c = string.text[i]; - if (c == '_') { - continue; - } - if (!gb_char_is_digit(cast(char)c)) { - return {ExactValue_Invalid}; - } - if (exp <= 512) { - // NOTE(bill): clamp so it cannot overflow; anything past the cap is rejected below - exp = exp*10 + cast(i64)u64_digit_value(cast(Rune)c); - } - exp_digits += 1; - } - if (exp_digits == 0) { - return {ExactValue_Invalid}; - } - } - - i64 signed_exp = exp_negative ? -exp : exp; - i64 effective_exp = signed_exp - frac_digits; - if (effective_exp < 0) { - // NOTE(bill): The value has a fractional part, so it is not an integer; let the caller parse it as a float. - return {ExactValue_Invalid}; - } - - *is_integral = true; - - // NOTE(bill): Guard against pathological allocations; kept consistent with `big_int_from_string`. - if (signed_exp > 512) { - return {ExactValue_Invalid}; - } - - bool success = true; - BigInt scale = {}; - mp_init(&scale); - defer (big_int_dealloc(&scale)); - big_int_exp_u64(&scale, &ten, cast(u64)effective_exp, &success); - if (!success) { - return {ExactValue_Invalid}; - } - - ExactValue result = {ExactValue_Integer}; - result.value_integer = {0}; - mp_init(&result.value_integer); - big_int_mul(&result.value_integer, &mantissa, &scale); - return result; -} - gb_internal ExactValue exact_value_float_from_string(String string) { if (string.len > 2 && string[0] == '0' && string[1] == 'h') { @@ -514,26 +414,28 @@ gb_internal ExactValue exact_value_float_from_string(String string) { return exact_value_integer_from_string(string); } - bool success; - f64 f = float_from_string(string, &success); - if (!success) { - return {ExactValue_Invalid}; - } - - // NOTE: A finite decimal literal is kept as a floating-point value so that ordinary - // floating-point constant arithmetic behaves as expected (e.g. `1.0 / 16.0` is `0.0625`, not - // integer division). Only when the literal overflows `f64` to an infinity is it re-parsed as an - // exact arbitrary-precision integer (every such literal is integer-valued, e.g. `98765.0e309`), - // so that it is not silently turned into `+Inf` and its representability can be checked exactly. - if (isinf(f)) { - bool is_integral = false; - ExactValue v = exact_value_integer_from_decimal_float_string(string, &is_integral); - if (is_integral) { - // This is the exact integer value, or Invalid if it exceeds the exponent cap. - return v; + // A finite base-10 floating-point literal is kept as an EXACT rational so that constant folding is + // exact and only rounds once, when the constant is finally given a concrete type (see + // `exact_value_to_float` and `check_representable_as_constant`). This mirrors Go's `go/constant`, + // where small values are held as `big.Rat`. The `0h...` hexadecimal-float path above keeps its + // exact bit pattern as an `f64`; that is also the side channel for the +/-Inf and NaN values that a + // rational cannot represent. + mp_int num, den; + if (big_rat_from_decimal_string(string, &num, &den)) { + // A zero-valued literal stays an f64 so that signed zero survives: a rational 0/1 has no sign, + // but `-0.0` (unary minus applied to this `0.0`) must keep its sign bit. + bool is_zero = mp_iszero(&num); + if (is_zero) { + mp_clear(&num); + mp_clear(&den); + return exact_value_float(0.0); } + ExactValue r = exact_value_rational_from_ints(&num, &den); + mp_clear(&num); + mp_clear(&den); + return r; } - return exact_value_float(f); + return {ExactValue_Invalid}; } @@ -1458,55 +1360,3 @@ gb_internal gbString write_exact_value_to_string(gbString str, ExactValue const gb_internal gbString exact_value_to_string(ExactValue const &v, isize string_limit=36) { return write_exact_value_to_string(gb_string_make(heap_allocator(), ""), v, string_limit); } - -// TEMPORARY(bill): exercise ExactValue_Rational arithmetic/compare/convert -gb_internal ExactValue exact_value_rational_from_decimal(char const *lit) { - mp_int num, den; - big_rat_from_decimal_string(make_string_c(lit), &num, &den); - ExactValue r = exact_value_rational_from_ints(&num, &den); - mp_clear(&num); - mp_clear(&den); - return r; -} - -gb_internal void exact_value_rational_selftest(void) { - int total = 0, diffs = 0; - #define RAT(s) exact_value_rational_from_decimal(s) - #define BIN(a, op, b) exact_binary_operator_value(op, a, b) - #define TOF(v) exact_value_to_float(v).value_float - #define CHK(label, gotf, wantstr) do { \ - f64 g_ = (gotf); \ - f64 w_ = strtod((wantstr), nullptr); \ - union { f64 f; u64 u; } gg, ww; \ - gg.f = g_; \ - ww.f = w_; \ - bool ok_ = gg.u == ww.u; \ - total += 1; \ - if (!ok_) { diffs += 1; } \ - gb_printf(" %-24s got=%-24.17g want=%-24.17g %s\n", label, g_, w_, ok_ ? "OK" : "DIFF"); \ - } while (0) - - CHK("0.1 + 0.2", TOF(BIN(RAT("0.1"), Token_Add, RAT("0.2"))), "0.3"); - CHK("1.0 / 16.0", TOF(BIN(RAT("1.0"), Token_Quo, RAT("16.0"))), "0.0625"); - CHK("3.0 / 2.0", TOF(BIN(RAT("3.0"), Token_Quo, RAT("2.0"))), "1.5"); - CHK("2/3 + 1/3", TOF(BIN(BIN(RAT("2.0"), Token_Quo, RAT("3.0")), Token_Add, BIN(RAT("1.0"), Token_Quo, RAT("3.0")))), "1.0"); - CHK("0.3 - 0.2 - 0.1", TOF(BIN(BIN(RAT("0.3"), Token_Sub, RAT("0.2")), Token_Sub, RAT("0.1"))), "0.0"); - - // mixed integer + rational (exercises match_exact_values Integer -> Rational) - { - ExactValue one = exact_value_i64(1); - CHK("1 + 0.5 (int+rat)", TOF(BIN(one, Token_Add, RAT("0.5"))), "1.5"); - } - // comparison folding: (0.1 + 0.2) == 0.3 is exactly true with rationals - { - bool eq = compare_exact_values(Token_CmpEq, BIN(RAT("0.1"), Token_Add, RAT("0.2")), RAT("0.3")); - total += 1; if (!eq) diffs += 1; - gb_printf(" %-24s got=%-5s %s\n", "(0.1+0.2) == 0.3", eq ? "true" : "false", eq ? "OK" : "DIFF"); - } - - #undef RAT - #undef BIN - #undef TOF - #undef CHK - gb_printf("exact_value_rational_selftest: %d/%d ok (%d diffs)\n", total-diffs, total, diffs); -} diff --git a/src/llvm_backend_const.cpp b/src/llvm_backend_const.cpp index 2f3a5d3e9..f86678727 100644 --- a/src/llvm_backend_const.cpp +++ b/src/llvm_backend_const.cpp @@ -1323,6 +1323,10 @@ gb_internal lbValue lb_const_value(lbModule *m, Type *type, ExactValue value, lb res.value = lb_big_int_to_llvm(m, original_type, &value.value_integer); } return res; + case ExactValue_Rational: + // Round the exact rational to the target float once, then emit as a float constant. + value = exact_value_to_float(value); + /*fallthrough*/ case ExactValue_Float: if (is_type_different_to_arch_endianness(type)) { if (type->Basic.kind == Basic_f32le || type->Basic.kind == Basic_f32be) { diff --git a/src/main.cpp b/src/main.cpp index 0bf759573..34b69894e 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -937,7 +937,7 @@ gb_internal bool parse_build_flags(Array args) { } break; case BuildFlagParam_Float: - if (value.kind != ExactValue_Float) { + if (value.kind != ExactValue_Float && value.kind != ExactValue_Rational) { gb_printf_err("%.*s expected a floating pointer number, got %.*s\n", LIT(name), LIT(param)); bad_flags = true; ok = false; @@ -3860,12 +3860,6 @@ int main(int arg_count, char const **arg_ptr) { init_keyword_hash_table(); init_terminal(); - // TEMPORARY(bill): validate the exact-rational core in-tree. - if (gb_get_env("ODIN_BIGRAT_SELFTEST", heap_allocator()) != nullptr) { - exact_value_rational_selftest(); - return 0; - } - if (!check_env()) { return 1; } From a910a0794d7055cf9f221755f3ca4a1337e28873 Mon Sep 17 00:00:00 2001 From: gingerBill Date: Tue, 29 Sep 2026 14:39:15 +0100 Subject: [PATCH 042/215] Add test_number_literals.odin --- tests/internal/test_number_literals.odin | 58 ++++++++++++++++++++++++ 1 file changed, 58 insertions(+) create mode 100644 tests/internal/test_number_literals.odin diff --git a/tests/internal/test_number_literals.odin b/tests/internal/test_number_literals.odin new file mode 100644 index 000000000..98f221933 --- /dev/null +++ b/tests/internal/test_number_literals.odin @@ -0,0 +1,58 @@ +package test_internal + +import "core:testing" + +// Regression tests for numeric literal parsing and constant folding: +// * an integer literal with a large exponent (e.g. `98765e309`) is an exact arbitrary-precision +// integer rather than being rejected, +// * a decimal literal that overflows `f64` (e.g. `98765.0e309`) keeps that exact integer value so +// it is not silently turned into `+Inf`, +// * an ordinary finite decimal literal still behaves as a floating-point value, so float constant +// arithmetic like `1.0 / 16.0` folds to `0.0625` and never to integer division. + +@(test) +float_literal_arithmetic :: proc(t: ^testing.T) { + // Trailing-dot and `.0` decimal literals must divide as floats, not integers. These are all + // constant expressions, so they exercise the compiler's constant folding. + testing.expect_value(t, 1.0/16.0, 0.0625) + testing.expect_value(t, 1./16., 0.0625) + testing.expect_value(t, 1/16., 0.0625) + testing.expect_value(t, 3./2., 1.5) + testing.expect_value(t, 1.0e2, 100.0) + testing.expect_value(t, 2.5 + 0.5, 3.0) + + // With exact-rational constant folding, `0.1 + 0.2` folds to exactly 0.3 (Go-style: the untyped + // float constants are exact until rounded once to the target type). The same expression evaluated + // at runtime on f64 variables still exhibits the usual binary floating-point rounding. + testing.expect(t, 0.1 + 0.2 == 0.3, "exact constant folding: 0.1 + 0.2 == 0.3") + { + ra, rb := 0.1, 0.2 + testing.expect(t, ra + rb != 0.3, "runtime f64 arithmetic still rounds") + } + + // Runtime values exercise the backend division path as well. + a := 1. + b := 16. + testing.expect_value(t, a/b, 0.0625) + + // Signed zero must survive (a `0.0` literal is a float, not an integer `0`). + nz := -0.0 + testing.expect_value(t, transmute(u64)nz, 0x8000_0000_0000_0000) +} + +@(test) +large_integer_literals :: proc(t: ^testing.T) { + // A large exponent denotes an exact big integer, and the three spellings of the same number all + // fold to the same value (previously `98765e309` was an "Invalid integer literal"). + #assert(98765e309 == 987650e308) + #assert(98765.0e309 == 98765e309) + #assert(1e38 / 1e19 == 1e19) // exact, well beyond the range of any integer type + + // Large but representable values still behave as ordinary `f64` constants. + testing.expect_value(t, f64(1e300), 1e300) + testing.expect(t, 1e308 > 1e307, "ordering of large f64 constants") + + // A large-exponent integer literal that fits a wide integer type is exact. + testing.expect(t, u128(1e38) > u128(1e37), "1e38 > 1e37 as u128") + testing.expect_value(t, u128(1e38) / u128(1e19), u128(1e19)) +} From 19f7b5e2e2760f45592d735090bdad78d5d5eefa Mon Sep 17 00:00:00 2001 From: gingerBill Date: Tue, 29 Sep 2026 14:53:28 +0100 Subject: [PATCH 043/215] Add f16/f32 precision checks; Fix macOS `MSIZE` macro collision --- src/big_rat.cpp | 49 +++++++++++++++--------- src/check_expr.cpp | 29 ++++++++++++-- tests/internal/test_number_literals.odin | 37 ++++++++++++++++++ 3 files changed, 93 insertions(+), 22 deletions(-) diff --git a/src/big_rat.cpp b/src/big_rat.cpp index 8f4383a72..0acf64d70 100644 --- a/src/big_rat.cpp +++ b/src/big_rat.cpp @@ -1,11 +1,8 @@ -// An exact rational value: num/den with den > 0, kept in lowest terms. struct BigRat { mp_int num; // signed mp_int den; // > 0 }; -// Guards against a tiny literal requesting an enormous 10^N (e.g. `1.0e999999999`). Far beyond any -// representable float (f64 range is ~1e+-324); a literal past this is rejected as malformed. i64 const BIG_RAT_MAX_DECIMAL_EXP = 65536; // Reduce num/den to lowest terms with den > 0 (0 becomes 0/1). @@ -112,14 +109,18 @@ gb_internal bool big_rat_from_decimal_string(String const &s, mp_int *num, mp_in return true; } -// Convert the exact rational `a/b` (b != 0) to the nearest f64 (round-to-nearest, ties-to-even). +// Convert the exact rational `a/b` (b != 0) to the nearest value of a target IEEE-754 binary float, +// with round-to-nearest, ties-to-even. `mantissa_bits`/`ebias` select the target format: +// f16: 10 / 15, f32: 23 / 127, f64: 52 / 1023. +// The result is returned as an f64 that exactly equals that target value (target subnormals and +// overflow-to-infinity included), so it can be stored in an f64 and re-emitted losslessly. // NOTE(bill): Ported from core:math/big `internal_rat_to_float`. -gb_internal f64 big_rat_to_f64(mp_int const *a_in, mp_int const *b_in) { - int const MSIZE = 52; // explicit mantissa bits - int const MSIZE1 = MSIZE + 1; // 53, incl. the implicit bit - int const MSIZE2 = MSIZE + 2; // 54, one guard bit - int const EBIAS = 1023; - int const EMIN = 1 - EBIAS; // -1022 +gb_internal f64 big_rat_to_float(mp_int const *a_in, mp_int const *b_in, int mantissa_bits, int ebias) { + // NOTE: lowercase locals on purpose: `MSIZE` is a system macro on some platforms (arm/param.h). + int const msize = mantissa_bits; // explicit mantissa bits + int const msize1 = msize + 1; // incl. the implicit bit + int const msize2 = msize + 2; // one guard bit + int const emin = 1 - ebias; int alen = mp_count_bits(a_in); if (alen == 0) { @@ -135,7 +136,7 @@ gb_internal f64 big_rat_to_f64(mp_int const *a_in, mp_int const *b_in) { mp_abs(a_in, &a2); mp_abs(b_in, &b2); - int shift = MSIZE2 - exp; + int shift = msize2 - exp; if (shift > 0) { mp_mul_2d(&a2, shift, &a2); } else if (shift < 0) { @@ -146,26 +147,26 @@ gb_internal f64 big_rat_to_f64(mp_int const *a_in, mp_int const *b_in) { bool has_rem = !mp_iszero(&r); u64 mantissa = mp_get_mag_u64(&q); - if ((mantissa >> MSIZE2) == 1) { + if ((mantissa >> msize2) == 1) { if (mantissa & 1) has_rem = true; mantissa >>= 1; exp += 1; } - // mantissa is now in [2^53, 2^54): 53 significant bits plus one guard bit. + // mantissa is now in [2^msize1, 2^msize2): msize1 significant bits plus one guard bit. - if (EMIN - MSIZE <= exp && exp <= EMIN) { + if (emin - msize <= exp && exp <= emin) { // Denormalise: fold the bits that fall below the subnormal grid into the guard/sticky. - unsigned sh = cast(unsigned)(EMIN - (exp - 1)); + unsigned sh = cast(unsigned)(emin - (exp - 1)); u64 lost = mantissa & ((cast(u64)1 << sh) - 1); has_rem = has_rem || (lost != 0); mantissa >>= sh; - exp = 2 - EBIAS; + exp = 2 - ebias; } if (mantissa & 1) { if (has_rem || (mantissa & 2)) { // round half to even mantissa += 1; - if (mantissa >= (cast(u64)1 << MSIZE2)) { + if (mantissa >= (cast(u64)1 << msize2)) { mantissa >>= 1; exp += 1; } @@ -173,9 +174,21 @@ gb_internal f64 big_rat_to_f64(mp_int const *a_in, mp_int const *b_in) { } mantissa >>= 1; // drop the guard bit - f64 f = ldexp(cast(f64)mantissa, exp - MSIZE1); + f64 f = ldexp(cast(f64)mantissa, exp - msize1); + // Materialise the target format's overflow-to-infinity (exact otherwise: `f` already has the + // target's mantissa width and exponent, so the narrowing cast does not round). + if (msize == 23) { + f = cast(f64)cast(f32)f; + } else if (msize == 10) { + f = cast(f64)f16_to_f32(f32_to_f16(cast(f32)f)); + } if (has_sign) { f = -f; } return f; +} + +// Convert the exact rational `a/b` (b != 0) to the nearest f64 (round-to-nearest, ties-to-even). +gb_internal f64 big_rat_to_f64(mp_int const *a_in, mp_int const *b_in) { + return big_rat_to_float(a_in, b_in, 52, 1023); } \ No newline at end of file diff --git a/src/check_expr.cpp b/src/check_expr.cpp index 45f5c504a..8c75dd8c0 100644 --- a/src/check_expr.cpp +++ b/src/check_expr.cpp @@ -2511,11 +2511,32 @@ gb_internal bool check_representable_as_constant(CheckerContext *c, ExactValue i default: GB_PANIC("Compiler error: Unknown integer type!"); break; } } else if (is_type_float(type)) { - ExactValue v = exact_value_to_float(in_value); - if (v.kind != ExactValue_Float) { - return false; + ExactValue v; + if (in_value.kind == ExactValue_Rational) { + // Round the exact rational directly to the target format (single rounding, ties-to-even), + // rather than rational -> f64 -> f16/f32 which would round twice. + + + int mantissa_bits = 52; + int ebias = 1023; + switch (type->Basic.kind) { + case Basic_f16: case Basic_f16le: case Basic_f16be: + mantissa_bits = 10; + ebias = 15; + break; + case Basic_f32: case Basic_f32le: case Basic_f32be: + mantissa_bits = 23; + ebias = 127; + break; + } + v = exact_value_float(big_rat_to_float(&in_value.value_rational->num, &in_value.value_rational->den, mantissa_bits, ebias)); + } else { + v = exact_value_to_float(in_value); + if (v.kind != ExactValue_Float) { + return false; + } + check_update_float_precision(&v, type); } - check_update_float_precision(&v, type); // An exact finite constant (integer or rational) that overflows the target float's range is not // representable by it; without this it would silently become +/-Inf (e.g. `x: f64 = 1.0e400`). diff --git a/tests/internal/test_number_literals.odin b/tests/internal/test_number_literals.odin index 98f221933..415b4227f 100644 --- a/tests/internal/test_number_literals.odin +++ b/tests/internal/test_number_literals.odin @@ -1,6 +1,7 @@ package test_internal import "core:testing" +import "core:strconv" // Regression tests for numeric literal parsing and constant folding: // * an integer literal with a large exponent (e.g. `98765e309`) is an exact arbitrary-precision @@ -56,3 +57,39 @@ large_integer_literals :: proc(t: ^testing.T) { testing.expect(t, u128(1e38) > u128(1e37), "1e38 > 1e37 as u128") testing.expect_value(t, u128(1e38) / u128(1e19), u128(1e19)) } + +@(test) +float_literal_f16_f32_precision :: proc(t: ^testing.T) { + // f16/f32 constants are rounded once, directly from the exact value, so a constant-folded literal + // matches the correctly-rounded runtime parse (rather than double-rounding via f64). + c32 :: proc(t: ^testing.T, got: f32, lit: string) { + want, _ := strconv.parse_f32(lit) + testing.expectf(t, transmute(u32)got == transmute(u32)want, + "f32 %s: got %08x, want %08x", lit, transmute(u32)got, transmute(u32)want) + } + c32(t, 0.1, "0.1") + c32(t, 0.2, "0.2") + c32(t, 0.3, "0.3") + c32(t, f32(1.0/3.0), "0.3333333333333333") + c32(t, 3.14159265358979323846, "3.14159265358979323846") + c32(t, 1.1, "1.1") + c32(t, 1e-40, "1e-40") // subnormal f32 + c32(t, 1.5e-45, "1.5e-45") + c32(t, 8388609.0, "8388609.0") // 2^23 + 1 + + // f16 spot checks against an f64-parsed reference (53 bits is exact relative to f16's 11). + c16 :: proc(t: ^testing.T, got: f16, lit: string) { + w64, _ := strconv.parse_f64(lit) + want := f16(w64) + testing.expectf(t, transmute(u16)got == transmute(u16)want, + "f16 %s: got %04x, want %04x", lit, transmute(u16)got, transmute(u16)want) + } + c16(t, 0.1, "0.1") + c16(t, f16(1.0/3.0), "0.3333333333333333") + c16(t, 3.14159265358979323846, "3.14159265358979323846") + c16(t, 6e-8, "6e-8") // subnormal f16 + + // f16/f32 overflow of an exact constant is rejected, not silently +Inf (compile-time #assert + // can't test a reject, but these confirm large finite values still fold correctly). + testing.expect_value(t, f32(1e38), strconv.parse_f32("1e38") or_else 0) +} From da7371404e36f104d059c2e66bf4fe7603867ea2 Mon Sep 17 00:00:00 2001 From: Jeroen van Rijn Date: Tue, 29 Sep 2026 06:54:42 -0700 Subject: [PATCH 044/215] Improve `bit_array` (#7665) Fix `index: uint` -> `index: int`, examples. Add `create_from_enum` helper. --- core/container/bit_array/bit_array.odin | 140 +++++++++++++++--------- core/container/bit_array/doc.odin | 35 +++--- 2 files changed, 105 insertions(+), 70 deletions(-) diff --git a/core/container/bit_array/bit_array.odin b/core/container/bit_array/bit_array.odin index 7d74d9ba7..8ff569319 100644 --- a/core/container/bit_array/bit_array.odin +++ b/core/container/bit_array/bit_array.odin @@ -3,9 +3,7 @@ package container_dynamic_bit_array import "base:builtin" import "base:intrinsics" -/* - Note that these constants are dependent on the backing being a u64. -*/ +// Note that these constants are dependent on the backing being a u64. @(private="file") INDEX_SHIFT :: 6 @@ -27,27 +25,29 @@ Bit_Array_Iterator :: struct { word_idx: int, bit_idx: uint, } + /* -Wraps a `Bit_Array` into an Iterator +Wraps a `Bit_Array` into an `Bit_Array_Iterator`. Inputs: -- ba: Pointer to the Bit_Array +- ba: Pointer to the `Bit_Array` Returns: -- it: Iterator struct +- it: `Bit_Array_Iterator` */ make_iterator :: proc (ba: ^Bit_Array) -> (it: Bit_Array_Iterator) { return Bit_Array_Iterator { array = ba } } + /* -Returns the next bit, including its set-state. ok=false once exhausted +Returns the next bit, including its set-state. ok=false once exhausted. Inputs: - it: The iterator that holds the state. Returns: - set: `true` if the bit at `index` is set. -- index: The next bit of the Bit_Array referenced by `it`. +- index: The next bit of the `Bit_Array` referenced by `it`. - ok: `true` if the iterator can continue, `false` if the iterator is done */ iterate_by_all :: proc (it: ^Bit_Array_Iterator) -> (set: bool, index: int, ok: bool) { @@ -65,34 +65,37 @@ iterate_by_all :: proc (it: ^Bit_Array_Iterator) -> (set: bool, index: int, ok: return set, index, true } + /* -Returns the next Set Bit, for example if `0b1010`, then the iterator will return index={1, 3} over two calls. +Returns the next *set* bit, for example if `0b1010`, then the iterator will return index={1, 3} over two calls. Inputs: - it: The iterator that holds the state. Returns: -- index: The next *set* bit of the Bit_Array referenced by `it`. +- index: The next *set* bit of the `Bit_Array` referenced by `it`. - ok: `true` if the iterator can continue, `false` if the iterator is done */ iterate_by_set :: proc (it: ^Bit_Array_Iterator) -> (index: int, ok: bool) { - return iterate_internal_(it, true) + return iterate_internal(it, true) } + /* -Returns the next Unset Bit, for example if `0b1010`, then the iterator will return index={0, 2} over two calls. +Returns the next *unset* bit, for example if `0b1010`, then the iterator will return index={0, 2} over two calls. Inputs: - it: The iterator that holds the state. Returns: -- index: The next *unset* bit of the Bit_Array referenced by `it`. +- index: The next *unset* bit of the `Bit_Array` referenced by `it`. - ok: `true` if the iterator can continue, `false` if the iterator is done */ iterate_by_unset:: proc (it: ^Bit_Array_Iterator) -> (index: int, ok: bool) { - return iterate_internal_(it, false) + return iterate_internal(it, false) } + /* -Iterates through set/unset bits +Iterates through set/unset bits. *Private* @@ -101,11 +104,11 @@ Inputs: - ITERATE_SET_BITS: `true` for returning only set bits, false for returning only unset bits Returns: -- index: The next *unset* bit of the Bit_Array referenced by `it`. +- index: The next *unset* bit of the `Bit_Array` referenced by `it`. - ok: `true` if the iterator can continue, `false` if the iterator is done */ @(private="file") -iterate_internal_ :: proc (it: ^Bit_Array_Iterator, $ITERATE_SET_BITS: bool) -> (index: int, ok: bool) { +iterate_internal :: proc (it: ^Bit_Array_Iterator, $ITERATE_SET_BITS: bool) -> (index: int, ok: bool) { word := it.array.bits[it.word_idx] if builtin.len(it.array.bits) > it.word_idx else 0 when ! ITERATE_SET_BITS { word = ~word } @@ -137,19 +140,20 @@ iterate_internal_ :: proc (it: ^Bit_Array_Iterator, $ITERATE_SET_BITS: bool) -> } return index, index < it.array.length + it.array.bias } + /* -Gets the state of a bit in the bit-array +Gets the state of a bit in the `Bit_Array`. Inputs: -- ba: Pointer to the Bit_Array +- ba: Pointer to the `Bit_Array` - index: Which bit in the array Returns: - res: `true` if the bit at `index` is set. - ok: Whether the index was valid. Returns `false` if the index is smaller than the bias. */ -get :: proc(ba: ^Bit_Array, #any_int index: uint) -> (res: bool, ok: bool) #optional_ok { - idx := int(index) - ba.bias +get :: proc(ba: ^Bit_Array, #any_int index: int) -> (res: bool, ok: bool) #optional_ok { + idx := index - ba.bias if ba == nil || int(index) < ba.bias { return false, false } @@ -167,28 +171,30 @@ get :: proc(ba: ^Bit_Array, #any_int index: uint) -> (res: bool, ok: bool) #opti return res, true } + /* -Gets the state of a bit in the bit-array +Gets the state of a bit in the `Bit_Array`. *Bypasses all Checks* Inputs: -- ba: Pointer to the Bit_Array +- ba: Pointer to the `Bit_Array` - index: Which bit in the array Returns: - `true` if bit is set */ -unsafe_get :: #force_inline proc(ba: ^Bit_Array, #any_int index: uint) -> bool #no_bounds_check { - return bool((ba.bits[index >> INDEX_SHIFT] >> uint(index & INDEX_MASK)) & 1) +unsafe_get :: #force_inline proc(ba: ^Bit_Array, #any_int index: int) -> bool #no_bounds_check { + return bool((ba.bits[index >> INDEX_SHIFT] >> (uint(index) & INDEX_MASK)) & 1) } + /* -Sets the state of a bit in the bit-array +Sets the state of a bit in the `Bit_Array`. *Conditionally Allocates (Resizes backing data when `index > len(ba.bits)`)* Inputs: -- ba: Pointer to the Bit_Array +- ba: Pointer to the `Bit_Array` - index: Which bit in the array - set_to: `true` sets the bit on, `false` to turn it off - allocator: (default is context.allocator) @@ -196,9 +202,9 @@ Inputs: Returns: - ok: Whether the set was successful, `false` on allocation failure or bad index */ -set :: proc(ba: ^Bit_Array, #any_int index: uint, set_to: bool = true, allocator := context.allocator) -> (ok: bool) { +set :: proc(ba: ^Bit_Array, #any_int index: int, set_to: bool = true, allocator := context.allocator) -> (ok: bool) { - idx := int(index) - ba.bias + idx := index - ba.bias if ba == nil || int(index) < ba.bias { return false } context.allocator = allocator @@ -218,41 +224,44 @@ set :: proc(ba: ^Bit_Array, #any_int index: uint, set_to: bool = true, allocator return true } + /* -Sets the state of a bit in the bit-array +Sets the state of a bit in the `Bit_Array`. *Bypasses all checks* Inputs: -- ba: Pointer to the Bit_Array +- ba: Pointer to the `Bit_Array` - index: Which bit in the array */ unsafe_set :: proc(ba: ^Bit_Array, bit: int) #no_bounds_check { ba.bits[bit >> INDEX_SHIFT] |= 1 << uint(bit & INDEX_MASK) } + /* -Unsets the state of a bit in the bit-array. (Convienence wrapper for `set`) +Unsets the state of a bit in the `Bit_Array`. (Convienence wrapper for `set`) *Conditionally Allocates (Resizes backing data when `index > len(ba.bits)`)* Inputs: -- ba: Pointer to the Bit_Array +- ba: Pointer to the `Bit_Array` - index: Which bit in the array - allocator: (default is context.allocator) Returns: - ok: Whether the unset was successful, `false` on allocation failure or bad index */ -unset :: #force_inline proc(ba: ^Bit_Array, #any_int index: uint, allocator := context.allocator) -> (ok: bool) { +unset :: #force_inline proc(ba: ^Bit_Array, #any_int index: int, allocator := context.allocator) -> (ok: bool) { return set(ba, index, false, allocator) } -/* -Unsets the state of a bit in the bit-array -*Bypasses all Checks* +/* +Unsets the state of a bit in the `Bit_Array`. + +*Bypasses all checks* Inputs: -- ba: Pointer to the Bit_Array +- ba: Pointer to the `Bit_Array` - index: Which bit in the array */ unsafe_unset :: proc(b: ^Bit_Array, bit: int) #no_bounds_check { @@ -260,7 +269,7 @@ unsafe_unset :: proc(b: ^Bit_Array, bit: int) #no_bounds_check { } /* -A helper function to create a Bit Array with optional bias, in case your smallest index is non-zero (including negative). +A helper function to create a `Bit_Array` with optional bias, in case your smallest index is non-zero (including negative). The range of bits created by this procedure is `min_index.. (res: ^Bit_Array, ok: bool) #optional_ok { +create :: proc(max_index: int, min_index: int = 0, allocator := context.allocator, loc := #caller_location) -> (res: ^Bit_Array, ok: bool) #optional_ok { size_in_bits := max_index - min_index + assert(max_index >= min_index, loc=loc) if size_in_bits < 0 { return {}, false } @@ -290,7 +300,27 @@ create :: proc(max_index: int, min_index: int = 0, allocator := context.allocato } /* -A helper function to initialize a Bit Array with optional bias, in case your smallest index is non-zero (including negative). +A helper function to create a `Bit_Array` from an enum `E`. + +The range of bits created by this procedure is `min(E).. (res: ^Bit_Array, ok: bool) where intrinsics.type_is_enum(T) #optional_ok { + return create(int(max(T)), int(min(T)), allocator) +} + +/* +A helper function to initialize a `Bit_Array` with optional bias, in case your smallest index is non-zero (including negative). The range of bits created by this procedure is `min_index.. (length: int) { if ba == nil { return } return ba.length } + /* -Shrinks the Bit_Array's backing storage to the smallest possible size. +Shrinks the `Bit_Array`'s backing storage to the smallest possible size. Inputs: -- ba: The target Bit_Array +- ba: The target `Bit_Array` */ shrink :: proc(ba: ^Bit_Array) #no_bounds_check { if ba == nil { return } @@ -372,22 +404,24 @@ shrink :: proc(ba: ^Bit_Array) #no_bounds_check { resize(&ba.bits, legs_needed) builtin.shrink(&ba.bits) } + /* -Deallocates the Bit_Array and its backing storage +Deallocates the `Bit_Array` and its backing storage Inputs: -- ba: The target Bit_Array +- ba: The target `Bit_Array` */ destroy :: proc(ba: ^Bit_Array) { if ba == nil { return } delete(ba.bits) - if ba.free_pointer { // Only free if this Bit_Array was created using `create`, not when on the stack. + if ba.free_pointer { // Only free if this `Bit_Array` was created using `create`, not when on the stack. free(ba) } } + /* - Resizes the Bit Array. For internal use. Provisions needed capacity+1 - If you want to reserve the memory for a given-sized Bit Array up front, you can use `create`. + Resizes the `Bit_Array`. For internal use. Provisions needed capacity+1 + If you want to reserve the memory for a given-sized `Bit_Array` up front, you can use `create`. */ @(private="file") resize_if_needed :: proc(ba: ^Bit_Array, legs: int, allocator := context.allocator) -> (ok: bool) { diff --git a/core/container/bit_array/doc.odin b/core/container/bit_array/doc.odin index e86059ecd..de7ba22a4 100644 --- a/core/container/bit_array/doc.odin +++ b/core/container/bit_array/doc.odin @@ -8,20 +8,18 @@ Example: package test import "core:fmt" - import "core:container/bit_array" + import ba "core:container/bit_array" main :: proc() { - using bit_array - - bits: Bit_Array + bits: ba.Bit_Array // returns `true` - fmt.println(set(&bits, 42)) + fmt.println(ba.set(&bits, 42)) // returns `false`, `false`, because this Bit Array wasn't created to allow negative indices. - was_set, was_retrieved := get(&bits, -1) + was_set, was_retrieved := ba.get(&bits, -1) fmt.println(was_set, was_retrieved) - destroy(&bits) + ba.destroy(&bits) } A `Bit_Array` can optionally allow for negative indices, if the minimum value was given during creation. @@ -29,7 +27,7 @@ Example: package test import "core:fmt" - import "core:container/bit_array" + import ba "core:container/bit_array" main :: proc() { Foo :: enum int { @@ -38,17 +36,20 @@ Example: Leaves = 69105, } - using bit_array + bits := ba.create_from_enum(Foo) + defer ba.destroy(bits) - bits := create(int(max(Foo)), int(min(Foo))) - defer destroy(bits) + assert(bits.bias == int(Foo.Negative_Test)) + assert(bits.length == abs(int(min(Foo))) + int(max(Foo))) - fmt.printf("Set(Bar): %v\n", set(bits, Foo.Bar)) - fmt.printf("Get(Bar): %v, %v\n", get(bits, Foo.Bar)) - fmt.printf("Set(Negative_Test): %v\n", set(bits, Foo.Negative_Test)) - fmt.printf("Get(Leaves): %v, %v\n", get(bits, Foo.Leaves)) - fmt.printf("Get(Negative_Test): %v, %v\n", get(bits, Foo.Negative_Test)) - fmt.printf("Freed.\n") + fmt.printfln("Set(Bar): %v", ba.set(bits, Foo.Bar)) + fmt.printfln("Get(Bar): %v", ba.get(bits, Foo.Bar)) + fmt.printfln("Set(Negative_Test): %v", ba.set(bits, Foo.Negative_Test)) + fmt.printfln("Get(Leaves): %v", ba.get(bits, Foo.Leaves)) + fmt.printfln("Get(Leaves): %v", ba.unsafe_get(bits, Foo.Leaves)) + fmt.printfln("Get(Negative_Test): %v", ba.get(bits, Foo.Negative_Test)) + fmt.printfln("Unset(Negative_Test): %v", ba.unset(bits, Foo.Negative_Test)) + assert(ba.get(bits, Foo.Negative_Test) == false) } */ package container_dynamic_bit_array \ No newline at end of file From 29b681b43d3fc3e79c07be1008cedee2a93a9176 Mon Sep 17 00:00:00 2001 From: gingerBill Date: Tue, 29 Sep 2026 15:21:00 +0100 Subject: [PATCH 045/215] Handle more cases where `ExactValue_Float` was being handled but not for `ExactValue_Rational` --- src/check_builtin.cpp | 7 +++++++ src/check_expr.cpp | 5 +++++ src/checker.cpp | 1 + src/exact_value.cpp | 10 +++++++++- 4 files changed, 22 insertions(+), 1 deletion(-) diff --git a/src/check_builtin.cpp b/src/check_builtin.cpp index 9a3013e8e..92ee2299f 100644 --- a/src/check_builtin.cpp +++ b/src/check_builtin.cpp @@ -4594,6 +4594,13 @@ gb_internal bool check_builtin_procedure(CheckerContext *c, Operand *operand, As operand->value.value_float = bit_cast(abs); break; } + case ExactValue_Rational: { + mp_int n; mp_init(&n); + defer (mp_clear(&n)); + mp_abs(&operand->value.value_rational->num, &n); + operand->value = exact_value_rational_from_ints(&n, &operand->value.value_rational->den); + break; + } case ExactValue_Complex: { f64 r = operand->value.value_complex->real; f64 i = operand->value.value_complex->imag; diff --git a/src/check_expr.cpp b/src/check_expr.cpp index 8c75dd8c0..9de4d8859 100644 --- a/src/check_expr.cpp +++ b/src/check_expr.cpp @@ -4873,6 +4873,11 @@ gb_internal void check_binary_expr(CheckerContext *c, Operand *x, Ast *node, Typ fail = true; } break; + case ExactValue_Rational: + if (big_int_is_zero(&y->value.value_rational->num)) { + fail = true; + } + break; } if (fail) { diff --git a/src/checker.cpp b/src/checker.cpp index fa65098a8..59f1c9c25 100644 --- a/src/checker.cpp +++ b/src/checker.cpp @@ -1480,6 +1480,7 @@ gb_internal void init_universal(void) { type = t_untyped_integer; break; case ExactValue_Float: + case ExactValue_Rational: type = t_untyped_float; break; } diff --git a/src/exact_value.cpp b/src/exact_value.cpp index 60126a401..1cd282c2a 100644 --- a/src/exact_value.cpp +++ b/src/exact_value.cpp @@ -502,7 +502,7 @@ gb_internal ExactValue exact_value_to_integer(ExactValue v) { return exact_value_i64(cast(i64)cast(intptr)v.value_pointer); case ExactValue_Rational: - // Only an exact integer (den == 1 after reduction) converts to an integer. + // NOTE(bill): Only an exact integer (den == 1 after reduction) converts to an integer if (mp_cmp_d(&v.value_rational->den, 1) == MP_EQ) { ExactValue r = {ExactValue_Integer}; r.value_integer = {0}; @@ -1339,6 +1339,14 @@ gb_internal gbString write_exact_value_to_string(gbString str, ExactValue const case ExactValue_Float: return gb_string_append_fmt(str, "%.17g", v.value_float); case ExactValue_Rational: + // Integer-valued (den == 1, e.g. an overflowing literal like `1.0e400`) prints its exact decimal, + // so a diagnostic shows the real magnitude rather than an f64 that has rounded to +Inf. + if (mp_cmp_d(&v.value_rational->den, 1) == MP_EQ) { + String s = big_int_to_string(heap_allocator(), &v.value_rational->num); + str = gb_string_append_length(str, s.text, s.len); + gb_free(heap_allocator(), s.text); + return str; + } return gb_string_append_fmt(str, "%.17g", big_rat_to_f64(&v.value_rational->num, &v.value_rational->den)); case ExactValue_Complex: return gb_string_append_fmt(str, "%.17g+%.17gi", v.value_complex->real, v.value_complex->imag); From 41d3f37fba762498bc6af8a02b58e79c44b37c0a Mon Sep 17 00:00:00 2001 From: Louis Novy <101842021+louisnovy@users.noreply.github.com> Date: Tue, 29 Sep 2026 10:21:08 -0400 Subject: [PATCH 046/215] Fix #5318: procedures passed to `$` parameters share an instantiation's name --- src/name_canonicalization.cpp | 16 ++++++++++++++ tests/issues/run.bat | 1 + tests/issues/run.sh | 1 + tests/issues/test_issue_5318.odin | 35 +++++++++++++++++++++++++++++++ 4 files changed, 53 insertions(+) create mode 100644 tests/issues/test_issue_5318.odin diff --git a/src/name_canonicalization.cpp b/src/name_canonicalization.cpp index f6243025a..0a4f60fec 100644 --- a/src/name_canonicalization.cpp +++ b/src/name_canonicalization.cpp @@ -494,6 +494,22 @@ gb_internal void write_canonical_params(TypeWriter *w, Type *params) { case Entity_Constant: { type_writer_appendc(w, CANONICAL_PARAM_CONST); + if (v->Constant.value.kind == ExactValue_Procedure) { + // NOTE: a procedure is named by its declaration, as different procedures can be spelt the same (See #5318) + Ast *expr = unparen_expr(v->Constant.value.value_procedure); + Entity *proc = strip_entity_wrapping(expr); + if (proc != nullptr) { + write_canonical_entity_name(w, proc); + break; + } + if (expr->kind == Ast_ProcLit) { + DeclInfo *parent = expr->ProcLit.decl->parent; + if (parent != nullptr && parent->entity) { + write_canonical_entity_name(w, parent->entity); + type_writer_appendc(w, CANONICAL_NAME_SEPARATOR); + } + } + } gbString s = exact_value_to_string(v->Constant.value, 1<<16); type_writer_append(w, s, gb_string_length(s)); gb_string_free(s); diff --git a/tests/issues/run.bat b/tests/issues/run.bat index aa959ff6d..a672af123 100644 --- a/tests/issues/run.bat +++ b/tests/issues/run.bat @@ -26,6 +26,7 @@ set COMMON=-define:ODIN_TEST_FANCY=false -file -vet -strict-style -ignore-unused ..\..\..\odin build ..\test_issue_5097.odin %COMMON% || exit /b ..\..\..\odin build ..\test_issue_5097-2.odin %COMMON% || exit /b ..\..\..\odin build ..\test_issue_5265.odin %COMMON% || exit /b +..\..\..\odin test ..\test_issue_5318.odin %COMMON% || exit /b ..\..\..\odin build ..\test_issue_5573.odin %COMMON% 2>&1 | find /c "Error:" | findstr /x "2" || exit /b ..\..\..\odin test ..\test_issue_5699.odin %COMMON% || exit /b ..\..\..\odin test ..\test_issue_6068.odin %COMMON% || exit /b diff --git a/tests/issues/run.sh b/tests/issues/run.sh index 9b9e5a1e3..68b10fcdc 100755 --- a/tests/issues/run.sh +++ b/tests/issues/run.sh @@ -33,6 +33,7 @@ $ODIN build ../test_issue_5043.odin $COMMON $ODIN build ../test_issue_5097.odin $COMMON $ODIN build ../test_issue_5097-2.odin $COMMON $ODIN build ../test_issue_5265.odin $COMMON +$ODIN test ../test_issue_5318.odin $COMMON if [[ $($ODIN build ../test_issue_5573.odin $COMMON 2>&1 >/dev/null | grep -c "Error:") -eq 2 ]]; then echo "SUCCESSFUL 1/1" else diff --git a/tests/issues/test_issue_5318.odin b/tests/issues/test_issue_5318.odin new file mode 100644 index 000000000..69c4fdfc4 --- /dev/null +++ b/tests/issues/test_issue_5318.odin @@ -0,0 +1,35 @@ +// Tests issue #5318 https://github.com/odin-lang/Odin/issues/5318 +package test_issues + +import "core:testing" + +common :: proc($f: proc(i64, i64) -> i64) -> i64 { return f(16, 4) } + +sum :: proc() -> i64 { + internal :: proc(l, r: i64) -> i64 { return l + r } + return common(internal) +} + +difference :: proc() -> i64 { + internal :: proc(l, r: i64) -> i64 { return l - r } + return common(internal) +} + +apply :: proc(v: ^int, $f: proc(^int)) { f(v) } + +by_amount :: proc(v: ^int, $amount: int) { + add :: proc(v: ^int) { v^ += amount } + apply(v, add) + apply(v, proc(v: ^int) { v^ += amount }) +} + +@(test) +test_issue_5318 :: proc(t: ^testing.T) { + testing.expect_value(t, sum(), 20) + testing.expect_value(t, difference(), 12) + + x := 0 + by_amount(&x, 1) + by_amount(&x, 100) + testing.expect_value(t, x, 202) +} From 28d8a790d7d0a2250f8c29404e6bec9f338e7e47 Mon Sep 17 00:00:00 2001 From: gingerBill Date: Tue, 29 Sep 2026 15:27:07 +0100 Subject: [PATCH 047/215] Add more tests for the float constant builtins --- tests/internal/test_number_literals.odin | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/tests/internal/test_number_literals.odin b/tests/internal/test_number_literals.odin index 415b4227f..8053fe080 100644 --- a/tests/internal/test_number_literals.odin +++ b/tests/internal/test_number_literals.odin @@ -93,3 +93,17 @@ float_literal_f16_f32_precision :: proc(t: ^testing.T) { // can't test a reject, but these confirm large finite values still fold correctly). testing.expect_value(t, f32(1e38), strconv.parse_f32("1e38") or_else 0) } + +@(test) +float_constant_builtins :: proc(t: ^testing.T) { + // Constant-folded builtins on decimal-float (rational) constants must not crash or mis-fold. + // `abs` in particular used to hit an unhandled ExactValue kind. + #assert(abs(-1.5) == 1.5) + #assert(abs(1.5) == 1.5) + #assert(abs(0.3 - 0.5) == 0.2) // exact: |3/10 - 5/10| == 1/5 + #assert(min(0.1, 0.2) == 0.1) + #assert(max(0.1, 0.2) == 0.2) + #assert(clamp(1.5, 0.0, 1.0) == 1.0) + testing.expect_value(t, abs(-2.5), 2.5) + testing.expect_value(t, min(1.0/3.0, 1.0/4.0), 1.0/4.0) +} From 95df4904e8f99b77b6b30f563a5704a2d241a643 Mon Sep 17 00:00:00 2001 From: gingerBill Date: Tue, 29 Sep 2026 16:00:28 +0100 Subject: [PATCH 048/215] Change `struct Complex128` and `struct Quaternion256` to use `ExactValue` elements to allow for the new `Big_Rat` benefits that floats get --- src/check_builtin.cpp | 29 ++-- src/check_expr.cpp | 69 +++++++-- src/exact_value.cpp | 300 ++++++++++++++++++++----------------- src/llvm_backend_const.cpp | 36 ++--- 4 files changed, 251 insertions(+), 183 deletions(-) diff --git a/src/check_builtin.cpp b/src/check_builtin.cpp index 92ee2299f..60a094408 100644 --- a/src/check_builtin.cpp +++ b/src/check_builtin.cpp @@ -3951,10 +3951,11 @@ gb_internal bool check_builtin_procedure(CheckerContext *c, Operand *operand, As if (is_type_complex(t)) { if (x->mode == Addressing_Constant) { + // Keep the conjugate exact: negate the imaginary component(s) as ExactValues. ExactValue v = exact_value_to_complex(x->value); - f64 r = v.value_complex->real; - f64 i = -v.value_complex->imag; - x->value = exact_value_complex(r, i); + ExactValue r = v.value_complex->real; + ExactValue i = exact_unary_operator_value(Token_Sub, v.value_complex->imag, 0, false); + x->value = exact_value_complex_ev(r, i); x->mode = Addressing_Constant; } else { x->mode = Addressing_Value; @@ -3962,11 +3963,11 @@ gb_internal bool check_builtin_procedure(CheckerContext *c, Operand *operand, As } else if (is_type_quaternion(t)) { if (x->mode == Addressing_Constant) { ExactValue v = exact_value_to_quaternion(x->value); - f64 r = +v.value_quaternion->real; - f64 i = -v.value_quaternion->imag; - f64 j = -v.value_quaternion->jmag; - f64 k = -v.value_quaternion->kmag; - x->value = exact_value_quaternion(r, i, j, k); + ExactValue r = v.value_quaternion->real; + ExactValue i = exact_unary_operator_value(Token_Sub, v.value_quaternion->imag, 0, false); + ExactValue j = exact_unary_operator_value(Token_Sub, v.value_quaternion->jmag, 0, false); + ExactValue k = exact_unary_operator_value(Token_Sub, v.value_quaternion->kmag, 0, false); + x->value = exact_value_quaternion_ev(r, i, j, k); x->mode = Addressing_Constant; } else { x->mode = Addressing_Value; @@ -4602,16 +4603,16 @@ gb_internal bool check_builtin_procedure(CheckerContext *c, Operand *operand, As break; } case ExactValue_Complex: { - f64 r = operand->value.value_complex->real; - f64 i = operand->value.value_complex->imag; + f64 r = exact_value_to_f64(operand->value.value_complex->real); + f64 i = exact_value_to_f64(operand->value.value_complex->imag); operand->value = exact_value_float(gb_sqrt(r*r + i*i)); break; } case ExactValue_Quaternion: { - f64 r = operand->value.value_quaternion->real; - f64 i = operand->value.value_quaternion->imag; - f64 j = operand->value.value_quaternion->jmag; - f64 k = operand->value.value_quaternion->kmag; + f64 r = exact_value_to_f64(operand->value.value_quaternion->real); + f64 i = exact_value_to_f64(operand->value.value_quaternion->imag); + f64 j = exact_value_to_f64(operand->value.value_quaternion->jmag); + f64 k = exact_value_to_f64(operand->value.value_quaternion->kmag); operand->value = exact_value_float(gb_sqrt(r*r + i*i + j*j + k*k)); break; } diff --git a/src/check_expr.cpp b/src/check_expr.cpp index 9de4d8859..9689d0812 100644 --- a/src/check_expr.cpp +++ b/src/check_expr.cpp @@ -2338,6 +2338,35 @@ gb_internal bool check_update_float_precision(ExactValue *value, Type *type) { } +gb_internal ExactValue exact_value_round_component_to_float(ExactValue comp, int mantissa_bits, int ebias) { + switch (comp.kind) { + case ExactValue_Rational: + return exact_value_float(big_rat_to_float(&comp.value_rational->num, &comp.value_rational->den, mantissa_bits, ebias)); + case ExactValue_Integer: { + ExactValue r = exact_value_rational_from_integer(&comp.value_integer); + return exact_value_float(big_rat_to_float(&r.value_rational->num, &r.value_rational->den, mantissa_bits, ebias)); + } + } + return exact_value_to_float(comp); +} + +gb_internal void complex_quaternion_element_float_format(Type *type, int *mantissa_bits, int *ebias) { + *mantissa_bits = 52; + *ebias = 1023; + switch (type->Basic.kind) { + case Basic_complex32: + case Basic_quaternion64: + *mantissa_bits = 10; + *ebias = 15; + break; + case Basic_complex64: + case Basic_quaternion128: + *mantissa_bits = 23; + *ebias = 127; + break; + } +} + gb_internal bool check_representable_as_constant(CheckerContext *c, ExactValue in_value, Type *type, ExactValue *out_value) { if (in_value.kind == ExactValue_Invalid) { // NOTE(bill): There's already been an error @@ -2597,7 +2626,11 @@ gb_internal bool check_representable_as_constant(CheckerContext *c, ExactValue i ExactValue imag = exact_value_imag(v); if (real.kind != ExactValue_Invalid && imag.kind != ExactValue_Invalid) { - if (out_value) *out_value = exact_value_complex(exact_value_to_f64(real), exact_value_to_f64(imag)); + int mantissa_bits, ebias; + complex_quaternion_element_float_format(type, &mantissa_bits, &ebias); + if (out_value) *out_value = exact_value_complex_ev( + exact_value_round_component_to_float(real, mantissa_bits, ebias), + exact_value_round_component_to_float(imag, mantissa_bits, ebias)); return true; } break; @@ -2625,7 +2658,13 @@ gb_internal bool check_representable_as_constant(CheckerContext *c, ExactValue i ExactValue kmag = exact_value_kmag(v); if (real.kind != ExactValue_Invalid && imag.kind != ExactValue_Invalid) { - if (out_value) *out_value = exact_value_quaternion(exact_value_to_f64(real), exact_value_to_f64(imag), exact_value_to_f64(jmag), exact_value_to_f64(kmag)); + int mantissa_bits, ebias; + complex_quaternion_element_float_format(type, &mantissa_bits, &ebias); + if (out_value) *out_value = exact_value_quaternion_ev( + exact_value_round_component_to_float(real, mantissa_bits, ebias), + exact_value_round_component_to_float(imag, mantissa_bits, ebias), + exact_value_round_component_to_float(jmag, mantissa_bits, ebias), + exact_value_round_component_to_float(kmag, mantissa_bits, ebias)); return true; } break; @@ -5824,42 +5863,42 @@ gb_internal ExactValue get_constant_field(CheckerContext *c, Operand const *oper return value; } else if (value.kind == ExactValue_Quaternion) { // @QuaternionLayout - Quaternion256 q = *value.value_quaternion; + ExactQuaternion q = *value.value_quaternion; GB_ASSERT(sel.index.count == 1); switch (sel.index[0]) { case 3: // w if (success_) *success_ = true; - return exact_value_float(q.real); + return q.real; case 0: // x if (success_) *success_ = true; - return exact_value_float(q.imag); + return q.imag; case 1: // y if (success_) *success_ = true; - return exact_value_float(q.jmag); + return q.jmag; case 2: // z if (success_) *success_ = true; - return exact_value_float(q.kmag); + return q.kmag; } if (success_) *success_ = false; return empty_exact_value; } else if (value.kind == ExactValue_Complex) { // @QuaternionLayout - Complex128 c = *value.value_complex; + ExactComplex c = *value.value_complex; GB_ASSERT(sel.index.count == 1); switch (sel.index[0]) { case 0: // real if (success_) *success_ = true; - return exact_value_float(c.real); + return c.real; case 1: // imag if (success_) *success_ = true; - return exact_value_float(c.imag); + return c.imag; } if (success_) *success_ = false; @@ -13097,15 +13136,15 @@ gb_internal bool is_exact_value_zero(ExactValue const &v) { return big_int_is_zero(&v.value_rational->num); case ExactValue_Complex: if (v.value_complex) { - return v.value_complex->real == 0.0 && v.value_complex->imag == 0.0; + return is_exact_value_zero(v.value_complex->real) && is_exact_value_zero(v.value_complex->imag); } return true; case ExactValue_Quaternion: if (v.value_quaternion) { - return v.value_quaternion->real == 0.0 && - v.value_quaternion->imag == 0.0 && - v.value_quaternion->jmag == 0.0 && - v.value_quaternion->kmag == 0.0; + return is_exact_value_zero(v.value_quaternion->real) && + is_exact_value_zero(v.value_quaternion->imag) && + is_exact_value_zero(v.value_quaternion->jmag) && + is_exact_value_zero(v.value_quaternion->kmag); } return true; case ExactValue_Pointer: diff --git a/src/exact_value.cpp b/src/exact_value.cpp index 1cd282c2a..ff7ec97e9 100644 --- a/src/exact_value.cpp +++ b/src/exact_value.cpp @@ -7,12 +7,10 @@ struct Type; struct Entity; gb_internal bool are_types_identical(Type *x, Type *y); -struct Complex128 { - f64 real, imag; -}; -struct Quaternion256 { - f64 imag, jmag, kmag, real; -}; +// NOTE(bill): Defined after ExactValue below, since their components are now exact values +// (each a Float=f64 or Rational=big_rat) so complex/quaternion constant folding stays exact. +struct ExactComplex; +struct ExactQuaternion; enum ExactValueKind { ExactValue_Invalid = 0, @@ -57,24 +55,33 @@ gb_global char const *exact_value_kind_string[ExactValue_Count] = { struct ExactValue { ExactValueKind kind; union { - bool value_bool; - String value_string; - BigInt value_integer; - f64 value_float; - BigRat * value_rational; - i64 value_pointer; // NOTE(bill): This must be an integer and not a pointer - Complex128 *value_complex; - Quaternion256 *value_quaternion; - Ast * value_compound; - Ast * value_procedure; - Type * value_typeid; - String16 value_string16; - Ast * value_asm_template; - Ast * value_variant; + bool value_bool; + String value_string; + BigInt value_integer; + f64 value_float; + BigRat * value_rational; + i64 value_pointer; // NOTE(bill): This must be an integer and not a pointer + ExactComplex *value_complex; + ExactQuaternion *value_quaternion; + Ast * value_compound; + Ast * value_procedure; + Type * value_typeid; + String16 value_string16; + Ast * value_asm_template; + Ast * value_variant; }; Type *variant_type; }; +// Complex/quaternion components are exact numeric values (Integer/Rational/Float), so their constant +// arithmetic keeps full precision until the value is rounded to a concrete type. +struct ExactComplex { + ExactValue real, imag; +}; +struct ExactQuaternion { + ExactValue imag, jmag, kmag, real; +}; + gb_global ExactValue const empty_exact_value = {}; gb_internal uintptr hash_exact_value(ExactValue v) { @@ -115,10 +122,14 @@ gb_internal uintptr hash_exact_value(ExactValue v) { res = ptr_map_hash_key(v.value_pointer); break; case ExactValue_Complex: - res = gb_fnv32a(v.value_complex, gb_size_of(Complex128)); + res = hash_exact_value(v.value_complex->real) ^ + (hash_exact_value(v.value_complex->imag) * 0x01000193); break; case ExactValue_Quaternion: - res = gb_fnv32a(v.value_quaternion, gb_size_of(Quaternion256)); + res = hash_exact_value(v.value_quaternion->real) ^ + (hash_exact_value(v.value_quaternion->imag) * 0x01000193) ^ + (hash_exact_value(v.value_quaternion->jmag) * 0x01000193) ^ + (hash_exact_value(v.value_quaternion->kmag) * 0x01000193); break; case ExactValue_Compound: res = ptr_map_hash_key(v.value_compound); @@ -204,17 +215,26 @@ gb_internal ExactValue exact_value_rational_from_integer(BigInt const *i) { return exact_value_rational_from_ints(i, &one); } -gb_internal ExactValue exact_value_complex(f64 real, f64 imag) { +// Promote an integer to an exact rational, leaving other kinds untouched. Used so complex/quaternion +// division does true rational division rather than the integer `Token_Quo` path (which is `fmod`). +gb_internal ExactValue exact_value_as_rational_if_integer(ExactValue v) { + if (v.kind == ExactValue_Integer) { + return exact_value_rational_from_integer(&v.value_integer); + } + return v; +} + +// Exact-component constructors: each component is a numeric ExactValue (Integer/Rational/Float). +gb_internal ExactValue exact_value_complex_ev(ExactValue real, ExactValue imag) { ExactValue result = {ExactValue_Complex}; - result.value_complex = permanent_alloc_item(); + result.value_complex = permanent_alloc_item(); result.value_complex->real = real; result.value_complex->imag = imag; return result; } - -gb_internal ExactValue exact_value_quaternion(f64 real, f64 imag, f64 jmag, f64 kmag) { +gb_internal ExactValue exact_value_quaternion_ev(ExactValue real, ExactValue imag, ExactValue jmag, ExactValue kmag) { ExactValue result = {ExactValue_Quaternion}; - result.value_quaternion = permanent_alloc_item(); + result.value_quaternion = permanent_alloc_item(); result.value_quaternion->real = real; result.value_quaternion->imag = imag; result.value_quaternion->jmag = jmag; @@ -222,6 +242,14 @@ gb_internal ExactValue exact_value_quaternion(f64 real, f64 imag, f64 jmag, f64 return result; } +gb_internal ExactValue exact_value_complex(f64 real, f64 imag) { + return exact_value_complex_ev(exact_value_float(real), exact_value_float(imag)); +} + +gb_internal ExactValue exact_value_quaternion(f64 real, f64 imag, f64 jmag, f64 kmag) { + return exact_value_quaternion_ev(exact_value_float(real), exact_value_float(imag), exact_value_float(jmag), exact_value_float(kmag)); +} + gb_internal ExactValue exact_value_pointer(i64 ptr) { ExactValue result = {ExactValue_Pointer}; result.value_pointer = ptr; @@ -448,12 +476,15 @@ gb_internal ExactValue exact_value_from_basic_literal(TokenKind kind, String con String str = string; Rune last_rune = cast(Rune)str[str.len-1]; str.len--; // Ignore the 'i|j|k' - f64 imag = float_from_string(str); + // Parse the magnitude with the same exact (rational) path as an ordinary float literal so the + // imaginary component keeps full precision rather than being pre-rounded to f64. + ExactValue imag = exact_value_float_from_string(str); + ExactValue zero = exact_value_i64(0); switch (last_rune) { - case 'i': return exact_value_complex(0, imag); - case 'j': return exact_value_quaternion(0, 0, imag, 0); - case 'k': return exact_value_quaternion(0, 0, 0, imag); + case 'i': return exact_value_complex_ev(zero, imag); + case 'j': return exact_value_quaternion_ev(zero, zero, imag, zero); + case 'k': return exact_value_quaternion_ev(zero, zero, zero, imag); default: GB_PANIC("Invalid imaginary basic literal"); } } @@ -532,35 +563,27 @@ gb_internal ExactValue exact_value_to_float(ExactValue v) { gb_internal ExactValue exact_value_to_complex(ExactValue v) { switch (v.kind) { case ExactValue_Integer: - return exact_value_complex(big_int_to_f64(&v.value_integer), 0); case ExactValue_Float: - return exact_value_complex(v.value_float, 0); case ExactValue_Rational: - return exact_value_complex(big_rat_to_f64(&v.value_rational->num, &v.value_rational->den), 0); + return exact_value_complex_ev(v, exact_value_i64(0)); // keep the real component exact case ExactValue_Complex: return v; - // case ExactValue_Quaternion: - // return exact_value_complex(v.value_quaternion.real, v.value_quaternion.imag); } ExactValue r = {ExactValue_Invalid}; - v.value_complex = permanent_alloc_item(); return r; } gb_internal ExactValue exact_value_to_quaternion(ExactValue v) { switch (v.kind) { case ExactValue_Integer: - return exact_value_quaternion(big_int_to_f64(&v.value_integer), 0, 0, 0); case ExactValue_Float: - return exact_value_quaternion(v.value_float, 0, 0, 0); case ExactValue_Rational: - return exact_value_quaternion(big_rat_to_f64(&v.value_rational->num, &v.value_rational->den), 0, 0, 0); + return exact_value_quaternion_ev(v, exact_value_i64(0), exact_value_i64(0), exact_value_i64(0)); case ExactValue_Complex: - return exact_value_quaternion(v.value_complex->real, v.value_complex->imag, 0, 0); + return exact_value_quaternion_ev(v.value_complex->real, v.value_complex->imag, exact_value_i64(0), exact_value_i64(0)); case ExactValue_Quaternion: return v; } ExactValue r = {ExactValue_Invalid}; - v.value_quaternion = permanent_alloc_item(); return r; } @@ -571,9 +594,9 @@ gb_internal ExactValue exact_value_real(ExactValue v) { case ExactValue_Rational: return v; case ExactValue_Complex: - return exact_value_float(v.value_complex->real); + return v.value_complex->real; case ExactValue_Quaternion: - return exact_value_float(v.value_quaternion->real); + return v.value_quaternion->real; } ExactValue r = {ExactValue_Invalid}; return r; @@ -586,9 +609,9 @@ gb_internal ExactValue exact_value_imag(ExactValue v) { case ExactValue_Rational: return exact_value_i64(0); case ExactValue_Complex: - return exact_value_float(v.value_complex->imag); + return v.value_complex->imag; case ExactValue_Quaternion: - return exact_value_float(v.value_quaternion->imag); + return v.value_quaternion->imag; } ExactValue r = {ExactValue_Invalid}; return r; @@ -602,7 +625,7 @@ gb_internal ExactValue exact_value_jmag(ExactValue v) { case ExactValue_Complex: return exact_value_i64(0); case ExactValue_Quaternion: - return exact_value_float(v.value_quaternion->jmag); + return v.value_quaternion->jmag; } ExactValue r = {ExactValue_Invalid}; return r; @@ -616,7 +639,7 @@ gb_internal ExactValue exact_value_kmag(ExactValue v) { case ExactValue_Complex: return exact_value_i64(0); case ExactValue_Quaternion: - return exact_value_float(v.value_quaternion->kmag); + return v.value_quaternion->kmag; } ExactValue r = {ExactValue_Invalid}; return r; @@ -724,16 +747,16 @@ gb_internal ExactValue exact_unary_operator_value(TokenKind op, ExactValue v, i3 return exact_value_rational_from_ints(&n, &v.value_rational->den); } case ExactValue_Complex: { - f64 real = v.value_complex->real; - f64 imag = v.value_complex->imag; - return exact_value_complex(-real, -imag); + ExactValue re = exact_unary_operator_value(Token_Sub, v.value_complex->real, precision, is_unsigned); + ExactValue im = exact_unary_operator_value(Token_Sub, v.value_complex->imag, precision, is_unsigned); + return exact_value_complex_ev(re, im); } case ExactValue_Quaternion: { - f64 real = v.value_quaternion->real; - f64 imag = v.value_quaternion->imag; - f64 jmag = v.value_quaternion->jmag; - f64 kmag = v.value_quaternion->kmag; - return exact_value_quaternion(-real, -imag, -jmag, -kmag); + ExactValue re = exact_unary_operator_value(Token_Sub, v.value_quaternion->real, precision, is_unsigned); + ExactValue im = exact_unary_operator_value(Token_Sub, v.value_quaternion->imag, precision, is_unsigned); + ExactValue jm = exact_unary_operator_value(Token_Sub, v.value_quaternion->jmag, precision, is_unsigned); + ExactValue km = exact_unary_operator_value(Token_Sub, v.value_quaternion->kmag, precision, is_unsigned); + return exact_value_quaternion_ev(re, im, jm, km); } } break; @@ -838,10 +861,10 @@ gb_internal void match_exact_values(ExactValue *x, ExactValue *y) { *x = exact_value_float(big_int_to_f64(&x->value_integer)); return; case ExactValue_Complex: - *x = exact_value_complex(big_int_to_f64(&x->value_integer), 0); + *x = exact_value_to_complex(*x); // keep the integer component exact return; case ExactValue_Quaternion: - *x = exact_value_quaternion(big_int_to_f64(&x->value_integer), 0, 0, 0); + *x = exact_value_to_quaternion(*x); // keep the integer component exact return; } break; @@ -972,86 +995,103 @@ gb_internal ExactValue exact_binary_operator_value(TokenKind op, ExactValue x, E } case ExactValue_Complex: { + // Exact per-component arithmetic (each component is an Integer/Rational/Float ExactValue). + #define EV_MUL(p, q) exact_binary_operator_value(Token_Mul, (p), (q)) + #define EV_ADD(p, q) exact_binary_operator_value(Token_Add, (p), (q)) + #define EV_SUB(p, q) exact_binary_operator_value(Token_Sub, (p), (q)) + #define EV_QUO(p, q) exact_binary_operator_value(Token_Quo, exact_value_as_rational_if_integer(p), exact_value_as_rational_if_integer(q)) y = exact_value_to_complex(y); - f64 a = x.value_complex->real; - f64 b = x.value_complex->imag; - f64 c = y.value_complex->real; - f64 d = y.value_complex->imag; - f64 real = 0; - f64 imag = 0; + ExactValue a = x.value_complex->real; + ExactValue b = x.value_complex->imag; + ExactValue c = y.value_complex->real; + ExactValue d = y.value_complex->imag; + ExactValue real = {}; + ExactValue imag = {}; switch (op) { case Token_Add: - real = a + c; - imag = b + d; + real = EV_ADD(a, c); + imag = EV_ADD(b, d); break; case Token_Sub: - real = a - c; - imag = b - d; + real = EV_SUB(a, c); + imag = EV_SUB(b, d); break; case Token_Mul: - real = (a*c - b*d); - imag = (b*c + a*d); + real = EV_SUB(EV_MUL(a, c), EV_MUL(b, d)); // a*c - b*d + imag = EV_ADD(EV_MUL(b, c), EV_MUL(a, d)); // b*c + a*d break; case Token_Quo: { - f64 s = c*c + d*d; - real = (a*c + b*d)/s; - imag = (b*c - a*d)/s; + ExactValue s = EV_ADD(EV_MUL(c, c), EV_MUL(d, d)); // c*c + d*d + real = EV_QUO(EV_ADD(EV_MUL(a, c), EV_MUL(b, d)), s); // (a*c + b*d)/s + imag = EV_QUO(EV_SUB(EV_MUL(b, c), EV_MUL(a, d)), s); // (b*c - a*d)/s break; } default: goto error; } - return exact_value_complex(real, imag); - break; + return exact_value_complex_ev(real, imag); + #undef EV_MUL + #undef EV_ADD + #undef EV_SUB + #undef EV_QUO } case ExactValue_Quaternion: { + #define EV_MUL(p, q) exact_binary_operator_value(Token_Mul, (p), (q)) + #define EV_ADD(p, q) exact_binary_operator_value(Token_Add, (p), (q)) + #define EV_SUB(p, q) exact_binary_operator_value(Token_Sub, (p), (q)) + #define EV_QUO(p, q) exact_binary_operator_value(Token_Quo, exact_value_as_rational_if_integer(p), exact_value_as_rational_if_integer(q)) + #define EV_NEG(p) exact_unary_operator_value(Token_Sub, (p), 0, false) y = exact_value_to_quaternion(y); - f64 xr = x.value_quaternion->real; - f64 xi = x.value_quaternion->imag; - f64 xj = x.value_quaternion->jmag; - f64 xk = x.value_quaternion->kmag; - f64 yr = y.value_quaternion->real; - f64 yi = y.value_quaternion->imag; - f64 yj = y.value_quaternion->jmag; - f64 yk = y.value_quaternion->kmag; + ExactValue xr = x.value_quaternion->real; + ExactValue xi = x.value_quaternion->imag; + ExactValue xj = x.value_quaternion->jmag; + ExactValue xk = x.value_quaternion->kmag; + ExactValue yr = y.value_quaternion->real; + ExactValue yi = y.value_quaternion->imag; + ExactValue yj = y.value_quaternion->jmag; + ExactValue yk = y.value_quaternion->kmag; - - f64 real = 0; - f64 imag = 0; - f64 jmag = 0; - f64 kmag = 0; + ExactValue real = {}; + ExactValue imag = {}; + ExactValue jmag = {}; + ExactValue kmag = {}; switch (op) { case Token_Add: - real = xr + yr; - imag = xi + yi; - jmag = xj + yj; - kmag = xk + yk; + real = EV_ADD(xr, yr); imag = EV_ADD(xi, yi); jmag = EV_ADD(xj, yj); kmag = EV_ADD(xk, yk); break; case Token_Sub: - real = xr - yr; - imag = xi - yi; - jmag = xj - yj; - kmag = xk - yk; + real = EV_SUB(xr, yr); imag = EV_SUB(xi, yi); jmag = EV_SUB(xj, yj); kmag = EV_SUB(xk, yk); break; case Token_Mul: - imag = xr * yi + xi * yr + xj * yk - xk * yj; - jmag = xr * yj - xi * yk + xj * yr + xk * yi; - kmag = xr * yk + xi * yj - xj * yi + xk * yr; - real = xr * yr - xi * yi - xj * yj - xk * yk; + // Hamilton product (matches the previous f64 formulas term-for-term). + imag = EV_SUB(EV_ADD(EV_ADD(EV_MUL(xr, yi), EV_MUL(xi, yr)), EV_MUL(xj, yk)), EV_MUL(xk, yj)); + jmag = EV_ADD(EV_ADD(EV_SUB(EV_MUL(xr, yj), EV_MUL(xi, yk)), EV_MUL(xj, yr)), EV_MUL(xk, yi)); + kmag = EV_ADD(EV_SUB(EV_ADD(EV_MUL(xr, yk), EV_MUL(xi, yj)), EV_MUL(xj, yi)), EV_MUL(xk, yr)); + real = EV_SUB(EV_SUB(EV_SUB(EV_MUL(xr, yr), EV_MUL(xi, yi)), EV_MUL(xj, yj)), EV_MUL(xk, yk)); break; case Token_Quo: { - f64 invmag2 = 1.0 / (yr*yr + yi*yi + yj*yj + yk*yk); - imag = (xr * -yi + xi * +yr + xj * -yk - xk * -yj) * invmag2; - jmag = (xr * -yj - xi * -yk + xj * +yr + xk * -yi) * invmag2; - kmag = (xr * -yk + xi * -yj - xj * -yi + xk * +yr) * invmag2; - real = (xr * +yr - xi * -yi - xj * -yj - xk * -yk) * invmag2; + // q1 / q2 = q1 * conj(q2) / |q2|^2 + ExactValue nyi = EV_NEG(yi), nyj = EV_NEG(yj), nyk = EV_NEG(yk); + ExactValue mag2 = EV_ADD(EV_ADD(EV_ADD(EV_MUL(yr, yr), EV_MUL(yi, yi)), EV_MUL(yj, yj)), EV_MUL(yk, yk)); + imag = EV_SUB(EV_ADD(EV_ADD(EV_MUL(xr, nyi), EV_MUL(xi, yr)), EV_MUL(xj, nyk)), EV_MUL(xk, nyj)); + jmag = EV_ADD(EV_ADD(EV_SUB(EV_MUL(xr, nyj), EV_MUL(xi, nyk)), EV_MUL(xj, yr)), EV_MUL(xk, nyi)); + kmag = EV_ADD(EV_SUB(EV_ADD(EV_MUL(xr, nyk), EV_MUL(xi, nyj)), EV_MUL(xj, nyi)), EV_MUL(xk, yr)); + real = EV_SUB(EV_SUB(EV_SUB(EV_MUL(xr, yr), EV_MUL(xi, nyi)), EV_MUL(xj, nyj)), EV_MUL(xk, nyk)); + imag = EV_QUO(imag, mag2); + jmag = EV_QUO(jmag, mag2); + kmag = EV_QUO(kmag, mag2); + real = EV_QUO(real, mag2); break; } default: goto error; } - return exact_value_quaternion(real, imag, jmag, kmag); - break; + return exact_value_quaternion_ev(real, imag, jmag, kmag); + #undef EV_MUL + #undef EV_ADD + #undef EV_SUB + #undef EV_QUO + #undef EV_NEG } case ExactValue_String: { @@ -1175,40 +1215,28 @@ gb_internal bool compare_exact_values(TokenKind op, ExactValue x, ExactValue y) } case ExactValue_Complex: { - f64 a = x.value_complex->real; - f64 b = x.value_complex->imag; - f64 c = y.value_complex->real; - f64 d = y.value_complex->imag; - if (isnan(a) || isnan(b) || isnan(c) || isnan(d)) { - return op == Token_NotEq; - } - + // Compare component-wise using exact comparisons (each component is a numeric ExactValue). + ExactComplex a = *x.value_complex; + ExactComplex b = *y.value_complex; + bool real_eq = compare_exact_values(Token_CmpEq, a.real, b.real); + bool imag_eq = compare_exact_values(Token_CmpEq, a.imag, b.imag); switch (op) { - case Token_CmpEq: return cmp_f64(a, c) == 0 && cmp_f64(b, d) == 0; - case Token_NotEq: return cmp_f64(a, c) != 0 || cmp_f64(b, d) != 0; + case Token_CmpEq: return real_eq && imag_eq; + case Token_NotEq: return !real_eq || !imag_eq; } break; } case ExactValue_Quaternion: { - Quaternion256 a = *x.value_quaternion; - Quaternion256 b = *y.value_quaternion; - if (isnan(a.real) || isnan(a.imag) || isnan(a.jmag) || isnan(a.kmag) || - isnan(b.real) || isnan(b.imag) || isnan(b.jmag) || isnan(b.kmag)) { - return op == Token_NotEq; - } - + ExactQuaternion a = *x.value_quaternion; + ExactQuaternion b = *y.value_quaternion; + bool real_eq = compare_exact_values(Token_CmpEq, a.real, b.real); + bool imag_eq = compare_exact_values(Token_CmpEq, a.imag, b.imag); + bool jmag_eq = compare_exact_values(Token_CmpEq, a.jmag, b.jmag); + bool kmag_eq = compare_exact_values(Token_CmpEq, a.kmag, b.kmag); switch (op) { - case Token_CmpEq: - return cmp_f64(a.real, b.real) == 0 && - cmp_f64(a.imag, b.imag) == 0 && - cmp_f64(a.jmag, b.jmag) == 0 && - cmp_f64(a.kmag, b.kmag) == 0; - case Token_NotEq: - return cmp_f64(a.real, b.real) != 0 || - cmp_f64(a.imag, b.imag) != 0 || - cmp_f64(a.jmag, b.jmag) != 0 || - cmp_f64(a.kmag, b.kmag) != 0; + case Token_CmpEq: return real_eq && imag_eq && jmag_eq && kmag_eq; + case Token_NotEq: return !real_eq || !imag_eq || !jmag_eq || !kmag_eq; } break; } @@ -1349,9 +1377,9 @@ gb_internal gbString write_exact_value_to_string(gbString str, ExactValue const } return gb_string_append_fmt(str, "%.17g", big_rat_to_f64(&v.value_rational->num, &v.value_rational->den)); case ExactValue_Complex: - return gb_string_append_fmt(str, "%.17g+%.17gi", v.value_complex->real, v.value_complex->imag); + return gb_string_append_fmt(str, "%.17g+%.17gi", exact_value_to_f64(v.value_complex->real), exact_value_to_f64(v.value_complex->imag)); case ExactValue_Quaternion: - return gb_string_append_fmt(str, "%.17g+%.17gi+%.17gj+%.17gk", v.value_quaternion->real, v.value_quaternion->imag, v.value_quaternion->jmag, v.value_quaternion->kmag); + return gb_string_append_fmt(str, "%.17g+%.17gi+%.17gj+%.17gk", exact_value_to_f64(v.value_quaternion->real), exact_value_to_f64(v.value_quaternion->imag), exact_value_to_f64(v.value_quaternion->jmag), exact_value_to_f64(v.value_quaternion->kmag)); case ExactValue_Pointer: return str; diff --git a/src/llvm_backend_const.cpp b/src/llvm_backend_const.cpp index f86678727..49d59d62f 100644 --- a/src/llvm_backend_const.cpp +++ b/src/llvm_backend_const.cpp @@ -1353,16 +1353,16 @@ gb_internal lbValue lb_const_value(lbModule *m, Type *type, ExactValue value, lb LLVMValueRef values[2] = {}; switch (8*type_size_of(type)) { case 32: - values[0] = lb_const_f16(m, cast(f32)value.value_complex->real); - values[1] = lb_const_f16(m, cast(f32)value.value_complex->imag); + values[0] = lb_const_f16(m, cast(f32)exact_value_to_f64(value.value_complex->real)); + values[1] = lb_const_f16(m, cast(f32)exact_value_to_f64(value.value_complex->imag)); break; case 64: - values[0] = lb_const_f32(m, cast(f32)value.value_complex->real); - values[1] = lb_const_f32(m, cast(f32)value.value_complex->imag); + values[0] = lb_const_f32(m, cast(f32)exact_value_to_f64(value.value_complex->real)); + values[1] = lb_const_f32(m, cast(f32)exact_value_to_f64(value.value_complex->imag)); break; case 128: - values[0] = LLVMConstReal(lb_type(m, t_f64), value.value_complex->real); - values[1] = LLVMConstReal(lb_type(m, t_f64), value.value_complex->imag); + values[0] = LLVMConstReal(lb_type(m, t_f64), exact_value_to_f64(value.value_complex->real)); + values[1] = LLVMConstReal(lb_type(m, t_f64), exact_value_to_f64(value.value_complex->imag)); break; } @@ -1376,24 +1376,24 @@ gb_internal lbValue lb_const_value(lbModule *m, Type *type, ExactValue value, lb switch (8*type_size_of(type)) { case 64: // @QuaternionLayout - values[3] = lb_const_f16(m, cast(f32)value.value_quaternion->real); - values[0] = lb_const_f16(m, cast(f32)value.value_quaternion->imag); - values[1] = lb_const_f16(m, cast(f32)value.value_quaternion->jmag); - values[2] = lb_const_f16(m, cast(f32)value.value_quaternion->kmag); + values[3] = lb_const_f16(m, cast(f32)exact_value_to_f64(value.value_quaternion->real)); + values[0] = lb_const_f16(m, cast(f32)exact_value_to_f64(value.value_quaternion->imag)); + values[1] = lb_const_f16(m, cast(f32)exact_value_to_f64(value.value_quaternion->jmag)); + values[2] = lb_const_f16(m, cast(f32)exact_value_to_f64(value.value_quaternion->kmag)); break; case 128: // @QuaternionLayout - values[3] = lb_const_f32(m, cast(f32)value.value_quaternion->real); - values[0] = lb_const_f32(m, cast(f32)value.value_quaternion->imag); - values[1] = lb_const_f32(m, cast(f32)value.value_quaternion->jmag); - values[2] = lb_const_f32(m, cast(f32)value.value_quaternion->kmag); + values[3] = lb_const_f32(m, cast(f32)exact_value_to_f64(value.value_quaternion->real)); + values[0] = lb_const_f32(m, cast(f32)exact_value_to_f64(value.value_quaternion->imag)); + values[1] = lb_const_f32(m, cast(f32)exact_value_to_f64(value.value_quaternion->jmag)); + values[2] = lb_const_f32(m, cast(f32)exact_value_to_f64(value.value_quaternion->kmag)); break; case 256: // @QuaternionLayout - values[3] = LLVMConstReal(lb_type(m, t_f64), value.value_quaternion->real); - values[0] = LLVMConstReal(lb_type(m, t_f64), value.value_quaternion->imag); - values[1] = LLVMConstReal(lb_type(m, t_f64), value.value_quaternion->jmag); - values[2] = LLVMConstReal(lb_type(m, t_f64), value.value_quaternion->kmag); + values[3] = LLVMConstReal(lb_type(m, t_f64), exact_value_to_f64(value.value_quaternion->real)); + values[0] = LLVMConstReal(lb_type(m, t_f64), exact_value_to_f64(value.value_quaternion->imag)); + values[1] = LLVMConstReal(lb_type(m, t_f64), exact_value_to_f64(value.value_quaternion->jmag)); + values[2] = LLVMConstReal(lb_type(m, t_f64), exact_value_to_f64(value.value_quaternion->kmag)); break; } From 17e25b0cc465044c0d7f530d3da55405814412b7 Mon Sep 17 00:00:00 2001 From: gingerBill Date: Tue, 29 Sep 2026 16:15:13 +0100 Subject: [PATCH 049/215] Check for big rat components --- src/big_rat.cpp | 20 +++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) diff --git a/src/big_rat.cpp b/src/big_rat.cpp index 0acf64d70..3b6e4378a 100644 --- a/src/big_rat.cpp +++ b/src/big_rat.cpp @@ -3,7 +3,14 @@ struct BigRat { mp_int den; // > 0 }; -i64 const BIG_RAT_MAX_DECIMAL_EXP = 65536; +gb_global i64 const BIG_RAT_MAX_DECIMAL_EXP = 65536; +gb_global i32 const BIG_RAT_MAX_COMPONENT_BITS = 65536; + +// True if either component's magnitude exceeds BIG_RAT_MAX_COMPONENT_BITS (call after normalizing). +gb_internal bool big_rat_components_too_large(mp_int const *num, mp_int const *den) { + return mp_count_bits(num) > BIG_RAT_MAX_COMPONENT_BITS || + mp_count_bits(den) > BIG_RAT_MAX_COMPONENT_BITS; +} // Reduce num/den to lowest terms with den > 0 (0 becomes 0/1). gb_internal void big_rat_normalize(mp_int *num, mp_int *den) { @@ -15,8 +22,15 @@ gb_internal void big_rat_normalize(mp_int *num, mp_int *den) { mp_neg(num, num); mp_neg(den, den); } - mp_int g; mp_init(&g); defer (mp_clear(&g)); - mp_int one; mp_init(&one); defer (mp_clear(&one)); mp_set_u64(&one, 1); + mp_int g; + mp_int one; + mp_init(&g); + mp_init(&one); + mp_set_u64(&one, 1); + + defer (mp_clear(&g)); + defer (mp_clear(&one)); + mp_gcd(num, den, &g); if (!mp_iszero(&g) && mp_cmp(&g, &one) != MP_EQ) { mp_int q, r; mp_init(&q); mp_init(&r); defer (mp_clear(&q)); defer (mp_clear(&r)); From bb2745f325edce76de8845a6eba6d30509153b60 Mon Sep 17 00:00:00 2001 From: gingerBill Date: Tue, 29 Sep 2026 16:15:40 +0100 Subject: [PATCH 050/215] Add exact rational printing to be like `1.0/3` --- src/exact_value.cpp | 26 ++++++++++++++++++++++---- 1 file changed, 22 insertions(+), 4 deletions(-) diff --git a/src/exact_value.cpp b/src/exact_value.cpp index ff7ec97e9..05e9f75c5 100644 --- a/src/exact_value.cpp +++ b/src/exact_value.cpp @@ -215,8 +215,14 @@ gb_internal ExactValue exact_value_rational_from_integer(BigInt const *i) { return exact_value_rational_from_ints(i, &one); } -// Promote an integer to an exact rational, leaving other kinds untouched. Used so complex/quaternion -// division does true rational division rather than the integer `Token_Quo` path (which is `fmod`). +gb_internal ExactValue exact_value_rational_arith_result(mp_int const *num, mp_int const *den) { + ExactValue r = exact_value_rational_from_ints(num, den); // normalizes (GCD reduce) + if (big_rat_components_too_large(&r.value_rational->num, &r.value_rational->den)) { + return exact_value_float(big_rat_to_f64(&r.value_rational->num, &r.value_rational->den)); + } + return r; +} + gb_internal ExactValue exact_value_as_rational_if_integer(ExactValue v) { if (v.kind == ExactValue_Integer) { return exact_value_rational_from_integer(&v.value_integer); @@ -978,7 +984,7 @@ gb_internal ExactValue exact_binary_operator_value(TokenKind op, ExactValue x, E big_int_mul(&nn, an, bd); big_int_mul(&nd, ad, bn); break; default: goto error; } - return exact_value_rational_from_ints(&nn, &nd); + return exact_value_rational_arith_result(&nn, &nd); } case ExactValue_Float: { @@ -1375,7 +1381,19 @@ gb_internal gbString write_exact_value_to_string(gbString str, ExactValue const gb_free(heap_allocator(), s.text); return str; } - return gb_string_append_fmt(str, "%.17g", big_rat_to_f64(&v.value_rational->num, &v.value_rational->den)); + // Non-integer: print the exact fraction as `.0/` (e.g. `1.0/3`). The `.0` on the + // numerator marks it as a decimal division, so it reads as the float `1.0/3` rather than the + // integer division `1/3` (which would be 0), and it round-trips as valid Odin source. + { + String ns = big_int_to_string(heap_allocator(), &v.value_rational->num); + String ds = big_int_to_string(heap_allocator(), &v.value_rational->den); + str = gb_string_append_length(str, ns.text, ns.len); + str = gb_string_append_fmt(str, ".0/"); + str = gb_string_append_length(str, ds.text, ds.len); + gb_free(heap_allocator(), ns.text); + gb_free(heap_allocator(), ds.text); + return str; + } case ExactValue_Complex: return gb_string_append_fmt(str, "%.17g+%.17gi", exact_value_to_f64(v.value_complex->real), exact_value_to_f64(v.value_complex->imag)); case ExactValue_Quaternion: From aaa29addf6bf38fc93954787a49f662a04ac6597 Mon Sep 17 00:00:00 2001 From: Jeroen van Rijn Date: Tue, 29 Sep 2026 17:22:52 +0200 Subject: [PATCH 051/215] NetBSD 2026Q1 -> 2026Q3 --- .github/workflows/ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 209dd20cb..0bfcce1bb 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -6,7 +6,7 @@ jobs: name: NetBSD Build, Check, and Test runs-on: ubuntu-latest env: - PKGSRC_BRANCH: 2026Q1 + PKGSRC_BRANCH: 2026Q3 steps: - uses: actions/checkout@v4 - name: Build, Check, and Test From 383a2fe1e5625df0cb0f1b68c22a97fc4c46a1f5 Mon Sep 17 00:00:00 2001 From: gingerBill Date: Tue, 29 Sep 2026 16:34:06 +0100 Subject: [PATCH 052/215] Reject complex/quaternion component overflow to match normal floats --- src/check_expr.cpp | 22 ++++++ src/exact_value.cpp | 30 +++++++- tests/internal/test_number_literals.odin | 41 +++++++++++ tests/internal/test_quat_cmplx.odin | 89 ++++++++++++++++++++++++ 4 files changed, 180 insertions(+), 2 deletions(-) diff --git a/src/check_expr.cpp b/src/check_expr.cpp index 9689d0812..cce251ddf 100644 --- a/src/check_expr.cpp +++ b/src/check_expr.cpp @@ -2367,6 +2367,14 @@ gb_internal void complex_quaternion_element_float_format(Type *type, int *mantis } } +gb_internal bool exact_value_component_overflows_float(ExactValue comp, int mantissa_bits, int ebias) { + if (comp.kind != ExactValue_Integer && comp.kind != ExactValue_Rational) { + return false; + } + ExactValue r = exact_value_round_component_to_float(comp, mantissa_bits, ebias); + return isinf(r.value_float) || isnan(r.value_float); +} + gb_internal bool check_representable_as_constant(CheckerContext *c, ExactValue in_value, Type *type, ExactValue *out_value) { if (in_value.kind == ExactValue_Invalid) { // NOTE(bill): There's already been an error @@ -2628,6 +2636,12 @@ gb_internal bool check_representable_as_constant(CheckerContext *c, ExactValue i imag.kind != ExactValue_Invalid) { int mantissa_bits, ebias; complex_quaternion_element_float_format(type, &mantissa_bits, &ebias); + // A finite component that overflows the element float is not representable (parity with + // scalar floats). Leave out_value unset so the diagnostic reports the source value. + if (exact_value_component_overflows_float(real, mantissa_bits, ebias) || + exact_value_component_overflows_float(imag, mantissa_bits, ebias)) { + return false; + } if (out_value) *out_value = exact_value_complex_ev( exact_value_round_component_to_float(real, mantissa_bits, ebias), exact_value_round_component_to_float(imag, mantissa_bits, ebias)); @@ -2660,6 +2674,14 @@ gb_internal bool check_representable_as_constant(CheckerContext *c, ExactValue i imag.kind != ExactValue_Invalid) { int mantissa_bits, ebias; complex_quaternion_element_float_format(type, &mantissa_bits, &ebias); + // A finite component that overflows the element float is not representable (parity with + // scalar floats). Leave out_value unset so the diagnostic reports the source value. + if (exact_value_component_overflows_float(real, mantissa_bits, ebias) || + exact_value_component_overflows_float(imag, mantissa_bits, ebias) || + exact_value_component_overflows_float(jmag, mantissa_bits, ebias) || + exact_value_component_overflows_float(kmag, mantissa_bits, ebias)) { + return false; + } if (out_value) *out_value = exact_value_quaternion_ev( exact_value_round_component_to_float(real, mantissa_bits, ebias), exact_value_round_component_to_float(imag, mantissa_bits, ebias), diff --git a/src/exact_value.cpp b/src/exact_value.cpp index 05e9f75c5..e1266ff01 100644 --- a/src/exact_value.cpp +++ b/src/exact_value.cpp @@ -1329,6 +1329,22 @@ gb_internal Entity *strip_entity_wrapping(Entity *e); gb_internal gbString write_expr_to_string(gbString str, Ast *node, bool shorthand); +gb_internal gbString write_exact_value_to_string(gbString str, ExactValue const &v, isize string_limit); + +gb_internal gbString write_exact_complex_component_to_string(gbString str, ExactValue comp, isize string_limit) { + f64 f = exact_value_to_f64(comp); + + // The float formatter cannot render a magnitude at or beyond 2**63 (it prints 2**63's digits on a + // loop), and that also catches Inf/NaN since the range test below is false for them. For an exact + // integer/rational component that large, print its exact form (digits, or `num.0/den`) instead. + static f64 const LIMIT = 9223372036854775808.0; // 2**63 + bool formatter_safe = (f >= -LIMIT) && (f <= LIMIT); + if (!formatter_safe && (comp.kind == ExactValue_Integer || comp.kind == ExactValue_Rational)) { + return write_exact_value_to_string(str, comp, string_limit); + } + return gb_string_append_fmt(str, "%.17g", f); +} + gb_internal gbString write_exact_value_to_string(gbString str, ExactValue const &v, isize string_limit=36) { switch (v.kind) { case ExactValue_Invalid: @@ -1395,9 +1411,19 @@ gb_internal gbString write_exact_value_to_string(gbString str, ExactValue const return str; } case ExactValue_Complex: - return gb_string_append_fmt(str, "%.17g+%.17gi", exact_value_to_f64(v.value_complex->real), exact_value_to_f64(v.value_complex->imag)); + str = write_exact_complex_component_to_string(str, v.value_complex->real, string_limit); + str = gb_string_append_fmt(str, "+"); + str = write_exact_complex_component_to_string(str, v.value_complex->imag, string_limit); + return gb_string_append_fmt(str, "i"); case ExactValue_Quaternion: - return gb_string_append_fmt(str, "%.17g+%.17gi+%.17gj+%.17gk", exact_value_to_f64(v.value_quaternion->real), exact_value_to_f64(v.value_quaternion->imag), exact_value_to_f64(v.value_quaternion->jmag), exact_value_to_f64(v.value_quaternion->kmag)); + str = write_exact_complex_component_to_string(str, v.value_quaternion->real, string_limit); + str = gb_string_append_fmt(str, "+"); + str = write_exact_complex_component_to_string(str, v.value_quaternion->imag, string_limit); + str = gb_string_append_fmt(str, "i+"); + str = write_exact_complex_component_to_string(str, v.value_quaternion->jmag, string_limit); + str = gb_string_append_fmt(str, "j+"); + str = write_exact_complex_component_to_string(str, v.value_quaternion->kmag, string_limit); + return gb_string_append_fmt(str, "k"); case ExactValue_Pointer: return str; diff --git a/tests/internal/test_number_literals.odin b/tests/internal/test_number_literals.odin index 8053fe080..8e2ff5b7f 100644 --- a/tests/internal/test_number_literals.odin +++ b/tests/internal/test_number_literals.odin @@ -94,6 +94,47 @@ float_literal_f16_f32_precision :: proc(t: ^testing.T) { testing.expect_value(t, f32(1e38), strconv.parse_f32("1e38") or_else 0) } +@(test) +rational_arithmetic_precision_cap :: proc(t: ^testing.T) { + // Exact-rational constant folding is bounded so a pathological expression cannot grow the + // numerator/denominator without limit. Repeatedly squaring a non-dyadic fraction doubles the + // denominator's bit-length at every step; past the precision cap the fold falls back to a rounded + // f64. This whole chain therefore folds in a few kilobytes; without the cap `X32` alone would need a + // denominator of ~10**(2**32) (gigabytes) to fold exactly, stalling or OOMing the compiler. The test + // passing quickly *is* the regression check — that the guard keeps runaway folding bounded. + X0 :: 0.3 + X1 :: X0*X0 + X2 :: X1*X1 + X3 :: X2*X2 + X4 :: X3*X3 + X5 :: X4*X4 + X6 :: X5*X5 + X7 :: X6*X6 + X8 :: X7*X7 + X9 :: X8*X8 + X10 :: X9*X9 + X11 :: X10*X10 + X12 :: X11*X11 + X13 :: X12*X12 + X14 :: X13*X13 + X15 :: X14*X14 + X16 :: X15*X15 + X17 :: X16*X16 + X18 :: X17*X17 + X19 :: X18*X18 + X20 :: X19*X19 + X24 :: (X20*X20)*(X20*X20) // 0.3 ** 2**24 + X28 :: (X24*X24)*(X24*X24) + X32 :: (X28*X28)*(X28*X28) // 0.3 ** 2**32 + + // 0.3 ** 2**32 is astronomically small, so once folding falls back to f64 it underflows to 0. + testing.expect(t, X32 == 0.0, "rational precision cap: deeply-squared fraction folds to a bounded f64") + testing.expect(t, !(X32 != X32), "capped value is a real number, not NaN") + + // A shallow fold is still exact: 0.3 ** 4 == 81/10000 rounds to the same f64 as the literal 0.0081. + testing.expect(t, X2 == 0.0081, "shallow rational folding stays exact") +} + @(test) float_constant_builtins :: proc(t: ^testing.T) { // Constant-folded builtins on decimal-float (rational) constants must not crash or mis-fold. diff --git a/tests/internal/test_quat_cmplx.odin b/tests/internal/test_quat_cmplx.odin index bf8df6f0d..e7cc5c22d 100644 --- a/tests/internal/test_quat_cmplx.odin +++ b/tests/internal/test_quat_cmplx.odin @@ -1,6 +1,7 @@ package test_internal import "core:testing" +import "core:strconv" // Constant folding of complex and quaternion values, against the answer the backend // produces. Every constant case is paired with the same expression on variables: the @@ -327,3 +328,91 @@ accessors_keep_their_bits_through_transmute :: proc(t: ^testing.T) { testing.expect_value(t, transmute(u64)jmag(q), transmute(u64)j) testing.expect_value(t, transmute(u64)kmag(q), transmute(u64)k) } + +// Untyped complex/quaternion constant components are now held exactly (as big rationals) and the +// arithmetic folds exactly, rounding only once when the value is finally given a concrete type. This +// is the complex/quaternion analogue of `0.1 + 0.2 == 0.3` for untyped floats: before, the components +// were pre-rounded to f64 and every lane folded in binary floating point, coming out a ULP off. + +@(test) +constant_complex_exact_folding :: proc(t: ^testing.T) { + X :: 0.1 + 0.2i + Y :: 0.2 + 0.1i + testing.expect(t, complex128(X + Y) == complex128(0.3 + 0.3i), "exact complex constant addition") + + // (1/10) * 3 == 3/10 exactly, in the real lane + testing.expect(t, complex128((0.1+0i) * 3) == complex128(0.3+0i), "exact complex constant multiplication") + + // (0.3 + 0.6i) / 3 == (0.1 + 0.2i) exactly (true rational division, not fmod) + testing.expect(t, complex128((0.3 + 0.6i) / 3) == complex128(0.1 + 0.2i), "exact complex constant division") + + // The same expression on runtime f64 variables still rounds in binary floating point, so the + // folded and runtime answers genuinely differ here. + xr, xi := 0.1, 0.2 + yr, yi := 0.2, 0.1 + runtime_sum := complex(xr, xi) + complex(yr, yi) + testing.expect(t, runtime_sum != complex128(0.3 + 0.3i), "runtime complex arithmetic still rounds") +} + +@(test) +constant_quaternion_exact_folding :: proc(t: ^testing.T) { + X :: 0.1 + 0.2i + 0.3j + 0.4k + Y :: 0.2 + 0.1i + 0.4j + 0.3k + testing.expect(t, quaternion256(X + Y) == quaternion256(0.3 + 0.3i + 0.7j + 0.7k), + "exact quaternion constant addition") + + // Multiplying by a real scalar keeps every lane exact. + testing.expect(t, quaternion256((0.1 + 0.2i + 0.3j + 0.4k) * 10) == quaternion256(1 + 2i + 3j + 4k), + "exact quaternion constant multiplication") + + q64 := quaternion(w=0.1, x=0.2, y=0.3, z=0.4) + quaternion(w=0.2, x=0.1, y=0.4, z=0.3) + testing.expect(t, q64 != quaternion256(0.3 + 0.3i + 0.7j + 0.7k), "runtime quaternion arithmetic still rounds") +} + +// A finite component that overflows the element float's range is rejected at compile time (parity with +// scalar floats), so `complex128(1.0e400)` is an error rather than a silent +Inf. The rejection itself is +// a compile error and can't be asserted here; these near-max constants guard the other side - that +// representable components are NOT falsely rejected. + +@(test) +constant_complex_representable_bounds :: proc(t: ^testing.T) { + c128 :: complex128(1e308 + 1e308i) // < f64 max (~1.8e308) + testing.expect_value(t, real(c128), 1e308) + testing.expect_value(t, imag(c128), 1e308) + + c64 :: complex64(3e38 + 3e38i) // < f32 max (~3.4e38) + testing.expect(t, real(c64) > 0 && imag(c64) > 0, "complex64 near-max components fold") + + c32 :: complex32(60000 + 60000i) // < f16 max (65504) + testing.expect(t, real(c32) > 0 && imag(c32) > 0, "complex32 near-max components fold") + + q256 :: quaternion256(1e308 + 1e308i + 1e308j + 1e308k) + testing.expect_value(t, jmag(q256), 1e308) + testing.expect_value(t, kmag(q256), 1e308) + + q64 :: quaternion64(60000 + 60000i + 60000j + 60000k) + testing.expect(t, jmag(q64) > 0 && kmag(q64) > 0, "quaternion64 near-max lanes fold") +} + +// complex64/complex32 (and quaternion128/quaternion64) components are rounded exactly once, directly +// from the exact literal to the element format, so a folded constant matches the correctly-rounded +// runtime parse instead of double-rounding through f64. + +@(test) +constant_complex_f32_rounding :: proc(t: ^testing.T) { + c32 :: proc(t: ^testing.T, got: f32, lit: string) { + want, _ := strconv.parse_f32(lit) + testing.expectf(t, transmute(u32)got == transmute(u32)want, + "f32 %s: got %08x, want %08x", lit, transmute(u32)got, transmute(u32)want) + } + rr : f32 : real(complex64(0.1 + 0.2i)) + ii : f32 : imag(complex64(0.1 + 0.2i)) + c32(t, rr, "0.1") + c32(t, ii, "0.2") + c32(t, real(complex64(3.14159265358979323846 + 2.71828182845904523536i)), "3.14159265358979323846") + c32(t, imag(complex64(3.14159265358979323846 + 2.71828182845904523536i)), "2.71828182845904523536") + + // quaternion128 lanes as well + q1 : f32 : jmag(quaternion128(0 + 0i + 0.1j + 0k)) + c32(t, q1, "0.1") +} From 6653101e6199f828cb4642d4a517a45cbe92f589 Mon Sep 17 00:00:00 2001 From: gingerBill Date: Tue, 29 Sep 2026 16:46:46 +0100 Subject: [PATCH 053/215] Fix race condition with unlocking something too early --- src/llvm_backend_general.cpp | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/src/llvm_backend_general.cpp b/src/llvm_backend_general.cpp index 17b41cfad..81de2e750 100644 --- a/src/llvm_backend_general.cpp +++ b/src/llvm_backend_general.cpp @@ -1994,14 +1994,18 @@ gb_internal LLVMTypeRef lb_type_internal_for_procedures_raw(lbModule *m, Type *t mutex_lock(&m->func_raw_types_mutex); + // NOTE: `map_get` returns an interior pointer into the map's storage, which another codegen thread's + // `map_set` (below) can free by growing/rehashing the map. Read the value out *while still holding the + // lock*; dereferencing `found` after unlocking is a data race that can return a freed/garbage type. LLVMTypeRef *found = map_get(&m->func_raw_types, type); - if (found) { - mutex_unlock(&m->func_raw_types_mutex); - return *found; - } + LLVMTypeRef found_type = found ? *found : nullptr; mutex_unlock(&m->func_raw_types_mutex); + if (found_type != nullptr) { + return found_type; + } + unsigned param_count = 0; if (type->Proc.param_count != 0) { From 1e183e4490959b1d6edfd7bdb3fa505c22652da4 Mon Sep 17 00:00:00 2001 From: gingerBill Date: Tue, 29 Sep 2026 16:57:16 +0100 Subject: [PATCH 054/215] Minor style change --- src/big_rat.cpp | 50 ++++++++++++++++++++++++++++++++++--------------- 1 file changed, 35 insertions(+), 15 deletions(-) diff --git a/src/big_rat.cpp b/src/big_rat.cpp index 3b6e4378a..2f34c7b3c 100644 --- a/src/big_rat.cpp +++ b/src/big_rat.cpp @@ -24,18 +24,22 @@ gb_internal void big_rat_normalize(mp_int *num, mp_int *den) { } mp_int g; mp_int one; - mp_init(&g); - mp_init(&one); + mp_init(&g); defer (mp_clear(&g)); + mp_init(&one); defer (mp_clear(&one)); mp_set_u64(&one, 1); - defer (mp_clear(&g)); - defer (mp_clear(&one)); mp_gcd(num, den, &g); if (!mp_iszero(&g) && mp_cmp(&g, &one) != MP_EQ) { - mp_int q, r; mp_init(&q); mp_init(&r); defer (mp_clear(&q)); defer (mp_clear(&r)); - mp_div(num, &g, &q, &r); mp_copy(&q, num); - mp_div(den, &g, &q, &r); mp_copy(&q, den); + mp_int q, r; + mp_init(&q); defer (mp_clear(&q)); + mp_init(&r); defer (mp_clear(&r)); + + mp_div(num, &g, &q, &r); + mp_copy(&q, num); + + mp_div(den, &g, &q, &r); + mp_copy(&q, den); } } @@ -59,16 +63,22 @@ gb_internal bool big_rat_from_decimal_string(String const &s, mp_int *num, mp_in continue; } if (c == '.') { - if (seen_dot) return false; + if (seen_dot) { + return false; + } seen_dot = true; continue; } if (c == 'e' || c == 'E') { break; } - if (!gb_char_is_digit(cast(char)c)) return false; + if (!gb_char_is_digit(cast(char)c)) { + return false; + } digits[dlen++] = cast(char)c; - if (seen_dot) frac_digits += 1; + if (seen_dot) { + frac_digits += 1; + } } if (dlen == 0) { digits[dlen++] = '0'; @@ -86,8 +96,12 @@ gb_internal bool big_rat_from_decimal_string(String const &s, mp_int *num, mp_in isize exp_digits = 0; for (; i < s.len; i++) { u8 c = s[i]; - if (c == '_') continue; - if (!gb_char_is_digit(cast(char)c)) return false; + if (c == '_') { + continue; + } + if (!gb_char_is_digit(cast(char)c)) { + return false; + } if (exp <= BIG_RAT_MAX_DECIMAL_EXP) { // clamp so it cannot overflow; rejected below exp = exp*10 + cast(i64)(c - '0'); } @@ -145,8 +159,12 @@ gb_internal f64 big_rat_to_float(mp_int const *a_in, mp_int const *b_in, int man int exp = alen - mp_count_bits(b_in); mp_int a2, b2, q, r; - mp_init(&a2); mp_init(&b2); mp_init(&q); mp_init(&r); - defer (mp_clear(&a2)); defer (mp_clear(&b2)); defer (mp_clear(&q)); defer (mp_clear(&r)); + + mp_init(&a2); defer (mp_clear(&a2)); + mp_init(&b2); defer (mp_clear(&b2)); + mp_init(&q); defer (mp_clear(&q)); + mp_init(&r); defer (mp_clear(&r)); + mp_abs(a_in, &a2); mp_abs(b_in, &b2); @@ -162,7 +180,9 @@ gb_internal f64 big_rat_to_float(mp_int const *a_in, mp_int const *b_in, int man u64 mantissa = mp_get_mag_u64(&q); if ((mantissa >> msize2) == 1) { - if (mantissa & 1) has_rem = true; + if (mantissa & 1) { + has_rem = true; + } mantissa >>= 1; exp += 1; } From 69b0996c61c422f6f81a02d4d7879dc8de8d4a06 Mon Sep 17 00:00:00 2001 From: Wassim Alhajomar Date: Tue, 29 Sep 2026 18:50:33 +0200 Subject: [PATCH 055/215] `core:container/xar`: fix chunk slot count capping `Array` capacity --- core/container/xar/xar.odin | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/container/xar/xar.odin b/core/container/xar/xar.odin index d2a517464..3ba1fe150 100644 --- a/core/container/xar/xar.odin +++ b/core/container/xar/xar.odin @@ -70,7 +70,7 @@ MAX_SHIFT :: PLATFORM_BITS>>1 } */ Array :: struct($T: typeid, $SHIFT: uint) where 0 < SHIFT, SHIFT <= MAX_SHIFT { - chunks: [(1 << (_LOG2_PLATFORM_BITS - intrinsics.constant_log2(SHIFT))) + 1][^]T, + chunks: [PLATFORM_BITS - SHIFT + 1][^]T, len: int, allocator: runtime.Allocator, } From 92a3d4411a45bdd80f639c108ea25657bcb8e8b4 Mon Sep 17 00:00:00 2001 From: gingerBill Date: Tue, 29 Sep 2026 17:55:45 +0100 Subject: [PATCH 056/215] Fix #7636 --- src/check_stmt.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/check_stmt.cpp b/src/check_stmt.cpp index 713c19239..1ee0e6d27 100644 --- a/src/check_stmt.cpp +++ b/src/check_stmt.cpp @@ -1187,7 +1187,7 @@ gb_internal void check_switch_stmt(CheckerContext *ctx, Ast *node, u32 mod_flags } } else { x.mode = Addressing_Constant; - x.type = t_bool; + x.type = t_untyped_bool; x.value = exact_value_bool(true); Token token = {}; From fedcc0bd5594b14847f6bc07dce77e4e4f8fae1b Mon Sep 17 00:00:00 2001 From: Matthias Huerbe Date: Sun, 27 Sep 2026 18:01:26 +0200 Subject: [PATCH 057/215] Ported SWAR based string parsing from fast_float to Odin --- core/strconv/fast_float.odin | 346 ++++++++++++++++++++++++++++++++++- 1 file changed, 344 insertions(+), 2 deletions(-) diff --git a/core/strconv/fast_float.odin b/core/strconv/fast_float.odin index 83e63b2a5..ce9ce0470 100644 --- a/core/strconv/fast_float.odin +++ b/core/strconv/fast_float.odin @@ -1,9 +1,11 @@ package strconv +import "base:intrinsics" import "core:math/bits" /* - Eisel-Lemire decimal to binary conversion. + Decimal to binary float conversion: a fast scanner for decimal floats + and the Eisel-Lemire algorithm. Ported from ffc.h (https://github.com/kolemannix/ffc.h) Made available under the Boost Software License 1.0, @@ -76,7 +78,7 @@ fast_float_compute_float :: proc "contextless" ($T: typeid, q: int, w: u64) -> u // the error in the first product could affect them, so we refine the result with // the lower half of the power of five. PRECISION_MASK :: max(u64) >> (MANTISSA_EXPLICIT_BITS + 3) - pow5 := &_POWER_OF_FIVE_128[q - _SMALLEST_POWER_OF_FIVE] + pow5 := _POWER_OF_FIVE_128[q - _SMALLEST_POWER_OF_FIVE] high, low := bits.mul_u64(w, pow5[0]) if high & PRECISION_MASK == PRECISION_MASK { second_high, _ := bits.mul_u64(w, pow5[1]) @@ -127,6 +129,346 @@ fast_float_compute_float :: proc "contextless" ($T: typeid, q: int, w: u64) -> u return mantissa | u64(power2) << MANTISSA_EXPLICIT_BITS } +// A fast scanner for the common decimal float syntax, `[+-] digits [. digits] [(e|E) [+-] digits]`. +// It reads 8 digits at a time with SWAR ("SIMD within a register") integer arithmetic. +// +// It skips a `_` between digits, and a second `.` ends the number. +// It returns `ok = false` for a hex float, "inf", "nan", and a string that is not a number. +// Then the caller tries `check_special` and `scan_hex_float`. + +@(private) +MAX_SIG_DIGITS :: 19 // 10^19 - 1 < 2^64 + +/* +Scans a decimal floating-point number at the start of `s`. + +**Returns** +- mantissa, exp: The value is `mantissa * 10^exp`. If `trunc` is true, the significant digits after the first 19 were dropped, and at least one of them was not zero. +- neg: The number has a minus sign. +- nr: The number of bytes in the number. +- ok: `false` if `s` does not start with a decimal number. +*/ +parse_number_string :: #force_inline proc "contextless" (s: string) -> (mantissa: u64, exp: int, neg, trunc: bool, nr: int, ok: bool) #no_bounds_check { + n := len(s) + if n == 0 { + return + } + // Written without branches, because the sign of the input is often unpredictable. + neg = s[0] == '-' + i := int(neg || s[0] == '+') + if i+2 < n && s[i] == '0' && lower(s[i+1]) == 'x' { + return // a hex float + } + + // Integer part + int_start := i + for i < n && s[i] - '0' <= 9 { + mantissa = mantissa*10 + u64(s[i] - '0') + i += 1 + } + digits := i - int_start + if i < n && s[i] == '_' { + more: int + i, mantissa, more = parse_digits_with_separators(s, i, mantissa) + digits += more + } + + // Fraction part + if i < n && s[i] == '.' { + i += 1 + frac_start := i + i, mantissa = loop_parse_if_eight_digits(s, i, mantissa) + for i < n && s[i] - '0' <= 9 { + mantissa = mantissa*10 + u64(s[i] - '0') + i += 1 + } + frac_digits := i - frac_start + if i < n && s[i] == '_' { + more: int + i, mantissa, more = parse_digits_with_separators(s, i, mantissa) + frac_digits += more + } + exp = -frac_digits + digits += frac_digits + } + if digits == 0 { + return + } + if digits > MAX_SIG_DIGITS { + // The mantissa may have overflowed (unless most digits are leading zeros). + return scan_decimal_exact(s) + } + + // Exponent part. The first byte after `e` and the sign must be a digit. + if i < n && lower(s[i]) == 'e' { + i += 1 + exp_neg := false + if i < n && (s[i] == '+' || s[i] == '-') { + exp_neg = s[i] == '-' + i += 1 + } + if i >= n || s[i] - '0' > 9 { + return // not a valid exponent, so not a number + } + x := 0 + for i < n && s[i] - '0' <= 9 { + if x < 100_000 { // larger exponents overflow or underflow anyway + x = x*10 + int(s[i] - '0') + } + i += 1 + } + if i < n && s[i] == '_' { + i, x = parse_exponent_with_separators(s, i, x) + } + exp += -x if exp_neg else x + } + + if mantissa == 0 { + exp = 0 + } + nr, ok = i, true + return +} + + +// Returns the new position, the mantissa and the number of digits. +@(cold) +parse_digits_with_separators :: proc "contextless" (s: string, i: int, mantissa: u64) -> (int, u64, int) #no_bounds_check { + i, mantissa := i, mantissa + digits := 0 + for i < len(s) { + if s[i] - '0' <= 9 { + mantissa = mantissa*10 + u64(s[i] - '0') + digits += 1 + } else if s[i] != '_' { + break + } + i += 1 + } + return i, mantissa, digits +} + +@(cold) +parse_exponent_with_separators :: proc "contextless" (s: string, i: int, x: int) -> (int, int) #no_bounds_check { + i, x := i, x + for i < len(s) { + if s[i] - '0' <= 9 { + if x < 100_000 { // larger exponents overflow or underflow anyway + x = x*10 + int(s[i] - '0') + } + } else if s[i] != '_' { + break + } + i += 1 + } + return i, x +} + +// It is only used for numbers with more than 19 digits +scan_decimal_exact :: proc "contextless" (s: string) -> (mantissa: u64, exp: int, neg, trunc: bool, nr: int, ok: bool) #no_bounds_check { + n := len(s) + if n == 0 { + return + } + neg = s[0] == '-' + i := int(neg || s[0] == '+') + if i+2 < n && s[i] == '0' && lower(s[i+1]) == 'x' { + return // a hex float + } + + m: u64 // significant digits + nd: int // number of significant digits in m + e: int // decimal exponent + saw_digits := false + + // Integer part. Leading zeros do not count as significant digits, and `_` is skipped + for i+8 <= n && read8_to_u64(s, i) == 0x3030_3030_3030_3030 { + i += 8 + saw_digits = true + } + for i < n && (s[i] == '0' || s[i] == '_') { + saw_digits ||= s[i] == '0' + i += 1 + } + for i+8 <= n && nd+8 <= MAX_SIG_DIGITS { + v := read8_to_u64(s, i) + if !is_made_of_eight_digits_fast(v) { + break + } + m = m*100_000_000 + parse_eight_digits_unrolled(v) + nd += 8 + i += 8 + saw_digits = true + } + for i < n { + d := s[i] - '0' + if d > 9 { + if s[i] != '_' { + break + } + } else if nd < MAX_SIG_DIGITS { + m = m*10 + u64(d) + nd += 1 + saw_digits = true + } else { + e += 1 // dropped digit + trunc ||= d != 0 + } + i += 1 + } + + // Fraction part + if i < n && s[i] == '.' { + i += 1 + if m == 0 { + // Leading zeros of the fraction change only the exponent + for i+8 <= n && read8_to_u64(s, i) == 0x3030_3030_3030_3030 { + e -= 8 + i += 8 + saw_digits = true + } + for i < n && (s[i] == '0' || s[i] == '_') { + if s[i] == '0' { + e -= 1 + saw_digits = true + } + i += 1 + } + } + for i+8 <= n && nd+8 <= MAX_SIG_DIGITS { + v := read8_to_u64(s, i) + if !is_made_of_eight_digits_fast(v) { + break + } + m = m*100_000_000 + parse_eight_digits_unrolled(v) + nd += 8 + e -= 8 + i += 8 + saw_digits = true + } + if i+4 <= n && nd+4 <= MAX_SIG_DIGITS { + v := read4_to_u32(s, i) + if is_made_of_four_digits_fast(v) { + m = m*10_000 + parse_four_digits_unrolled(v) + nd += 4 + e -= 4 + i += 4 + saw_digits = true + } + } + for i < n { + d := s[i] - '0' + if d > 9 { + if s[i] != '_' { + break + } + } else if m == 0 && d == 0 { + e -= 1 // a leading zero of the fraction + saw_digits = true + } else if nd < MAX_SIG_DIGITS { + m = m*10 + u64(d) + nd += 1 + e -= 1 + saw_digits = true + } else { + trunc ||= d != 0 // dropped digit + saw_digits = true + } + i += 1 + } + } + if !saw_digits { + return + } + + // Exponent part. The first byte after `e` and the sign must be a digit + if i < n && lower(s[i]) == 'e' { + i += 1 + exp_neg := false + if i < n && (s[i] == '+' || s[i] == '-') { + exp_neg = s[i] == '-' + i += 1 + } + if i >= n || s[i] - '0' > 9 { + return // not a valid exponent, so not a number + } + x := 0 + for i < n { + d := s[i] - '0' + if d > 9 { + if s[i] != '_' { + break + } + } else if x < 100_000 { // larger exponents overflow or underflow anyway + x = x*10 + int(d) + } + i += 1 + } + e += -x if exp_neg else x + } + + if m == 0 { + e = 0 + trunc = false + } + return m, e, neg, trunc, i, true +} + +// Loads 8 bytes starting at `s[i]` in little-endian order. The caller checks that `i+8 <= len(s)`. +read8_to_u64 :: #force_inline proc "contextless" (s: string, i: int) -> u64 { + return u64(intrinsics.unaligned_load((^u64le)(&raw_data(s)[i]))) +} + +read4_to_u32 :: #force_inline proc "contextless" (s: string, i: int) -> u32 { + return u32(intrinsics.unaligned_load((^u32le)(&raw_data(s)[i]))) +} + +// Reports if all 8 bytes of `v` are ASCII digits. +is_made_of_eight_digits_fast :: #force_inline proc "contextless" (v: u64) -> bool { + return ((v + 0x4646_4646_4646_4646) | (v - 0x3030_3030_3030_3030)) & 0x8080_8080_8080_8080 == 0 +} + +is_made_of_four_digits_fast :: #force_inline proc "contextless" (v: u32) -> bool { + return ((v + 0x4646_4646) | (v - 0x3030_3030)) & 0x8080_8080 == 0 +} + +// Returns the new position and mantissa. +loop_parse_if_eight_digits :: #force_inline proc "contextless" (s: string, i: int, m: u64) -> (int, u64) #no_bounds_check { + i, m := i, m + for i+8 <= len(s) { + v := read8_to_u64(s, i) + if !is_made_of_eight_digits_fast(v) { + break + } + m = m*100_000_000 + parse_eight_digits_unrolled(v) + i += 8 + } + if i+4 <= len(s) { + v := read4_to_u32(s, i) + if is_made_of_four_digits_fast(v) { + m = m*10_000 + parse_four_digits_unrolled(v) + i += 4 + } + } + return i, m +} + +// Converts 8 ASCII digits (the first digit in the lowest byte) to their value +parse_eight_digits_unrolled :: #force_inline proc "contextless" (chars: u64) -> u64 { + MASK :: 0x0000_00ff_0000_00ff + MUL1 :: 0x000f_4240_0000_0064 // 100 + (1000000 << 32) + MUL2 :: 0x0000_2710_0000_0001 // 1 + (10000 << 32) + v := chars - 0x3030_3030_3030_3030 + v = v*10 + v>>8 + return u64(u32(((v & MASK)*MUL1 + ((v>>16) & MASK)*MUL2) >> 32)) +} + +parse_four_digits_unrolled :: #force_inline proc "contextless" (chars: u32) -> u64 { + v := chars - 0x3030_3030 + v = v*10 + v>>8 + return u64(((v & 0x00ff_00ff) * 0x0064_0001) >> 16) +} + // 128-bit truncated mantissas of 5^-342 to 5^308, with the most significant // bit set. Generated by fast_float script/table_generation.py. @(rodata) From 9d12e2af80ef35170ba14c5f97556c902c253fd7 Mon Sep 17 00:00:00 2001 From: Matthias Huerbe Date: Tue, 29 Sep 2026 20:42:58 +0200 Subject: [PATCH 058/215] added SWAR trick for hex floats as well --- core/strconv/fast_float.odin | 25 ++-- core/strconv/hex_float.odin | 242 ++++++++++++++++++++++++++++++++ core/strconv/strconv.odin | 261 ++++++----------------------------- 3 files changed, 295 insertions(+), 233 deletions(-) create mode 100644 core/strconv/hex_float.odin diff --git a/core/strconv/fast_float.odin b/core/strconv/fast_float.odin index ce9ce0470..a1e39d61e 100644 --- a/core/strconv/fast_float.odin +++ b/core/strconv/fast_float.odin @@ -9,7 +9,7 @@ import "core:math/bits" Ported from ffc.h (https://github.com/kolemannix/ffc.h) Made available under the Boost Software License 1.0, - see LICENSE_fast_float in this package. + see LICENSE at the bottom of the file. List of contributors: Daniel Lemire, João Paulo Magalhaes: Original fast_float implementation @@ -129,24 +129,19 @@ fast_float_compute_float :: proc "contextless" ($T: typeid, q: int, w: u64) -> u return mantissa | u64(power2) << MANTISSA_EXPLICIT_BITS } -// A fast scanner for the common decimal float syntax, `[+-] digits [. digits] [(e|E) [+-] digits]`. -// It reads 8 digits at a time with SWAR ("SIMD within a register") integer arithmetic. -// -// It skips a `_` between digits, and a second `.` ends the number. -// It returns `ok = false` for a hex float, "inf", "nan", and a string that is not a number. -// Then the caller tries `check_special` and `scan_hex_float`. - @(private) MAX_SIG_DIGITS :: 19 // 10^19 - 1 < 2^64 /* Scans a decimal floating-point number at the start of `s`. +A fast scanner for the decimal float syntax: `[+-] digits [. digits] [(e|E) [+-] digits]` +It skips a `_` between digits **Returns** - mantissa, exp: The value is `mantissa * 10^exp`. If `trunc` is true, the significant digits after the first 19 were dropped, and at least one of them was not zero. - neg: The number has a minus sign. - nr: The number of bytes in the number. -- ok: `false` if `s` does not start with a decimal number. +- ok: `false` if `s` is not a number */ parse_number_string :: #force_inline proc "contextless" (s: string) -> (mantissa: u64, exp: int, neg, trunc: bool, nr: int, ok: bool) #no_bounds_check { n := len(s) @@ -168,7 +163,7 @@ parse_number_string :: #force_inline proc "contextless" (s: string) -> (mantissa } digits := i - int_start if i < n && s[i] == '_' { - more: int + more: int = --- i, mantissa, more = parse_digits_with_separators(s, i, mantissa) digits += more } @@ -184,7 +179,7 @@ parse_number_string :: #force_inline proc "contextless" (s: string) -> (mantissa } frac_digits := i - frac_start if i < n && s[i] == '_' { - more: int + more: int = --- i, mantissa, more = parse_digits_with_separators(s, i, mantissa) frac_digits += more } @@ -231,7 +226,7 @@ parse_number_string :: #force_inline proc "contextless" (s: string) -> (mantissa } -// Returns the new position, the mantissa and the number of digits. +// Returns the new position, the mantissa and the number of digits @(cold) parse_digits_with_separators :: proc "contextless" (s: string, i: int, mantissa: u64) -> (int, u64, int) #no_bounds_check { i, mantissa := i, mantissa @@ -414,7 +409,7 @@ scan_decimal_exact :: proc "contextless" (s: string) -> (mantissa: u64, exp: int return m, e, neg, trunc, i, true } -// Loads 8 bytes starting at `s[i]` in little-endian order. The caller checks that `i+8 <= len(s)`. +// Loads 8 bytes starting at `s[i]` in little-endian order read8_to_u64 :: #force_inline proc "contextless" (s: string, i: int) -> u64 { return u64(intrinsics.unaligned_load((^u64le)(&raw_data(s)[i]))) } @@ -423,7 +418,7 @@ read4_to_u32 :: #force_inline proc "contextless" (s: string, i: int) -> u32 { return u32(intrinsics.unaligned_load((^u32le)(&raw_data(s)[i]))) } -// Reports if all 8 bytes of `v` are ASCII digits. +// Reports if all 8 bytes of `v` are ASCII digits is_made_of_eight_digits_fast :: #force_inline proc "contextless" (v: u64) -> bool { return ((v + 0x4646_4646_4646_4646) | (v - 0x3030_3030_3030_3030)) & 0x8080_8080_8080_8080 == 0 } @@ -432,7 +427,7 @@ is_made_of_four_digits_fast :: #force_inline proc "contextless" (v: u32) -> bool return ((v + 0x4646_4646) | (v - 0x3030_3030)) & 0x8080_8080 == 0 } -// Returns the new position and mantissa. +// Returns the new position and mantissa loop_parse_if_eight_digits :: #force_inline proc "contextless" (s: string, i: int, m: u64) -> (int, u64) #no_bounds_check { i, m := i, m for i+8 <= len(s) { diff --git a/core/strconv/hex_float.odin b/core/strconv/hex_float.odin new file mode 100644 index 000000000..a6dffd9a3 --- /dev/null +++ b/core/strconv/hex_float.odin @@ -0,0 +1,242 @@ +package strconv + +import "base:intrinsics" + +/* +Scans a hexadecimal floating-point number at the start of `s`. +`[+-] 0x hexdigits [. hexdigits] (p|P) [+-] digits` +A `_` between digits is skipped + +**Returns** +- mantissa, exp: The value is `mantissa * 2^exp`. If `trunc` is true, the significant hex digits after the first 16 were dropped, and at least one of them was not zero. +- neg: The number has a minus sign. +- nr: The number of bytes in the number. +- ok: `false` if `s` does not start with a hexadecimal float. +*/ +scan_hex_float :: proc "contextless" (s: string) -> (mantissa: u64, exp: int, neg, trunc: bool, nr: int, ok: bool) #no_bounds_check { + MAX_HEX_DIGITS :: 16 + + n := len(s) + if n == 0 { + return + } + neg = s[0] == '-' + i := int(neg || s[0] == '+') + // "0x" is a hex prefix only if another byte follows it. + if !(i+2 < n && s[i] == '0' && lower(s[i+1]) == 'x') { + return + } + i += 2 + + nd := 0 // number of significant hex digits in the mantissa + saw_digits := false + + // Integer part. Leading zeros do not count as significant digits. + for i < n && (s[i] == '0' || s[i] == '_') { + saw_digits ||= s[i] == '0' + i += 1 + } + for i+8 <= n && nd+8 <= MAX_HEX_DIGITS { + v := read8_to_u64(s, i) + if !is_eight_hex_digits(v) { + break + } + mantissa = mantissa<<32 | parse_eight_hex_digits(v) + nd += 8 + i += 8 + saw_digits = true + } + for i < n { + d := hex_digit_table[s[i]] + if d >= 16 { + if s[i] != '_' { + break + } + } else if nd < MAX_HEX_DIGITS { + mantissa = mantissa<<4 | u64(d) + nd += 1 + saw_digits = true + } else { + exp += 4 // dropped digit + trunc ||= d != 0 + } + i += 1 + } + + // Fraction part + if i < n && s[i] == '.' { + i += 1 + if mantissa == 0 { + // Leading zeros of the fraction change only the exponent + for i < n && (s[i] == '0' || s[i] == '_') { + if s[i] == '0' { + exp -= 4 + saw_digits = true + } + i += 1 + } + } + for i+8 <= n && nd+8 <= MAX_HEX_DIGITS { + v := read8_to_u64(s, i) + if !is_eight_hex_digits(v) { + break + } + mantissa = mantissa<<32 | parse_eight_hex_digits(v) + nd += 8 + exp -= 32 + i += 8 + saw_digits = true + } + if i+4 <= n && nd+4 <= MAX_HEX_DIGITS { + // Four digits: pad them with "0000" and use the 8-digit code. + v := u64(read4_to_u32(s, i)) | 0x3030_3030 << 32 + if is_eight_hex_digits(v) { + mantissa = mantissa<<16 | parse_eight_hex_digits(v) >> 16 + nd += 4 + exp -= 16 + i += 4 + saw_digits = true + } + } + for i < n { + d := hex_digit_table[s[i]] + if d >= 16 { + if s[i] != '_' { + break + } + } else if mantissa == 0 && d == 0 { + exp -= 4 // a leading zero of the fraction + saw_digits = true + } else if nd < MAX_HEX_DIGITS { + mantissa = mantissa<<4 | u64(d) + nd += 1 + exp -= 4 + saw_digits = true + } else { + trunc ||= d != 0 // dropped digit + saw_digits = true + } + i += 1 + } + } + if !saw_digits { + return + } + + // The binary exponent is required. The first byte after `p` and the sign must be a digit. + if !(i < n && lower(s[i]) == 'p') { + return + } + i += 1 + exp_neg := false + if i < n && (s[i] == '+' || s[i] == '-') { + exp_neg = s[i] == '-' + i += 1 + } + if i >= n || s[i] - '0' > 9 { + return + } + x := 0 + for i < n && (s[i] - '0' <= 9 || s[i] == '_') { + if s[i] != '_' && x < 100_000 { // larger exponents overflow or underflow anyway + x = x*10 + int(s[i] - '0') + } + i += 1 + } + exp += -x if exp_neg else x + + if mantissa == 0 { + exp = 0 + trunc = false + } + nr, ok = i, true + return +} + +/* +Converts `mantissa * 2^exp` to the bits of the float type that `info` describes, rounded to +nearest, ties to even. `trunc` means that the exact value is a little larger than +`mantissa * 2^exp` (nonzero digits were dropped). + +**Returns** +- float_bits: The bits of the float, with the sign. +- ok: `false` if the value overflows. Then `float_bits` is infinity. +*/ +hex_float_bits :: proc "contextless" (mantissa: u64, exp: int, neg, trunc: bool, info: ^Float_Info) -> (float_bits: u64, ok: bool) { + M := int(info.mantbits) + sign := u64(neg) << info.mantbits << info.expbits + if mantissa == 0 { + return sign, true + } + + // Normalize: the top bit of m is set, so the value is in [2^(e+63), 2^(e+64)). + lz := intrinsics.count_leading_zeros(mantissa) + m := mantissa << lz + e := exp - int(lz) + + biased := e + 63 - info.bias // the biased exponent of a normal result + shift := 63 - M // keep M+1 bits for a normal result + if biased < 1 { + // Subnormal: keep fewer bits. + shift += 1 - biased + biased = 0 + } + + // Round to nearest, ties to even. `trunc` is a sticky bit below all bits of m. + kept, rest, half: u64 + switch { + case shift < 64: + kept = m >> uint(shift) + rest = m & (1< half || (rest == half && (trunc || kept & 1 == 1)) { + kept += 1 + } + + if biased == 0 { + // Subnormal + return sign | kept, true + } + if kept == 1 << uint(M+1) { + kept >>= 1 + biased += 1 + } + if biased >= 1< bool { + ONES :: 0x0101_0101_0101_0101 + HIGH :: 0x8080_8080_8080_8080 + in_range :: #force_inline proc "contextless" (v: u64, $lo, $hi: u64) -> u64 { + return (v + (0x80 - lo)*ONES) &~ (v + (0x7f - hi)*ONES) + } + digit := in_range(v, '0', '9') + letter := in_range(v | 0x20*ONES, 'a', 'f') + return (digit | letter) &~ v & HIGH == HIGH +} + +parse_eight_hex_digits :: #force_inline proc "contextless" (v: u64) -> u64 { + x := (v & 0x0f0f_0f0f_0f0f_0f0f) + ((v >> 6) & 0x0101_0101_0101_0101) * 9 + x = ((x << 4) + (x >> 8)) & 0x00ff_00ff_00ff_00ff + x = ((x << 8) + (x >> 16)) & 0x0000_ffff_0000_ffff + return ((x << 16) + (x >> 32)) & 0xffff_ffff +} diff --git a/core/strconv/strconv.odin b/core/strconv/strconv.odin index f6fe48e8d..232b703ce 100644 --- a/core/strconv/strconv.odin +++ b/core/strconv/strconv.odin @@ -915,215 +915,45 @@ parse_float_prefix_generic :: proc($T: typeid, str: string) -> (value: T, nr: in } return } - parse_components :: proc "contextless" (s: string) -> (mantissa: u64, exp: int, neg, trunc, hex: bool, i: int, ok: bool) { - if len(s) == 0 { - return - } - switch s[i] { - case '+': i += 1 - case '-': i += 1; neg = true - } - - base := u64(10) - MAX_MANT_DIGITS := 19 - exp_char := byte('e') - // support stupid 0x1.ABp100 hex floats even if Odin doesn't - if i+2 < len(s) && s[i] == '0' && lower(s[i+1]) == 'x' { - base = 16 - MAX_MANT_DIGITS = 16 - i += 2 - exp_char = 'p' - hex = true - } - - underscores := false - saw_dot, saw_digits := false, false - nd := 0 - nd_mant := 0 - decimal_point := 0 - trailing_zeroes_nd := -1 - loop: for ; i < len(s); i += 1 { - switch c := s[i]; true { - case c == '_': - underscores = true - continue loop - case c == '.': - if saw_dot { - break loop - } - saw_dot = true - decimal_point = nd - continue loop - - case '0' <= c && c <= '9': - saw_digits = true - if c == '0' { - if nd == 0 { - decimal_point -= 1 - continue loop - } - if trailing_zeroes_nd == -1 { - trailing_zeroes_nd = nd - } - } else { - trailing_zeroes_nd = -1 - } - nd += 1 - if nd_mant < MAX_MANT_DIGITS { - mantissa *= base - mantissa += u64(c - '0') - nd_mant += 1 - } else if c != '0' { - trunc = true - } - continue loop - case base == 16 && 'a' <= lower(c) && lower(c) <= 'f': - saw_digits = true - trailing_zeroes_nd = -1 - nd += 1 - if nd_mant < MAX_MANT_DIGITS { - mantissa *= 16 - mantissa += u64(lower(c) - 'a' + 10) - nd_mant += 1 - } else { - trunc = true - } - continue loop - } - break loop - } - - if !saw_digits { - return - } - if !saw_dot { - decimal_point = nd - } - if trailing_zeroes_nd > 0 { - trailing_zeroes_nd = nd_mant - trailing_zeroes_nd - } - for /**/; trailing_zeroes_nd > 0; trailing_zeroes_nd -= 1 { - mantissa /= base - nd_mant -= 1 - nd -= 1 - } - if base == 16 { - decimal_point *= 4 - nd_mant *= 4 - } - - if i < len(s) && lower(s[i]) == exp_char { - i += 1 - if i >= len(s) { return } - exp_sign := 1 - switch s[i] { - case '+': i += 1 - case '-': i += 1; exp_sign = -1 - } - if i >= len(s) || s[i] < '0' || s[i] > '9' { - return - } - e := 0 - for ; i < len(s) && ('0' <= s[i] && s[i] <= '9' || s[i] == '_'); i += 1 { - if s[i] == '_' { - underscores = true - continue - } - if e < 1e5 { - e = e*10 + int(s[i]) - '0' - } - } - decimal_point += e * exp_sign - } else if base == 16 { - return - } - - if mantissa != 0 { - exp = decimal_point - nd_mant - } - ok = true - return - } - - parse_hex :: proc "contextless" (s: string, mantissa: u64, exp: int, neg, trunc: bool) -> (f64, bool) { - info := &_f64_info - - mantissa, exp := mantissa, exp - - MAX_EXP := 1<> (info.mantbits+2) == 0 { - mantissa <<= 1 - exp -= 1 - } - if trunc { - mantissa |= 1 - } - - for mantissa >> (info.mantbits+3) != 0 { - mantissa = mantissa>>1 | mantissa&1 - exp += 1 - } - - // denormalize - for mantissa > 1 && exp < MIN_EXP-2 { - mantissa = mantissa>>1 | mantissa&1 - exp += 1 - } - - round := mantissa & 3 - mantissa >>= 2 - round |= mantissa & 1 // round to even - exp += 2 - if round == 3 { - mantissa += 1 - if mantissa == 1 << (1 + info.mantbits) { - mantissa >>= 1 - exp += 1 - } - } - if mantissa>>info.mantbits == 0 { - // zero or denormal - exp = info.bias - } - - ok := true - if exp > MAX_EXP { - // infinity or invalid - mantissa = 1< 2 && str[0] == '0' && str[1] == 'h' { - nr = 2 - as_int: u64 digits: int - for r in str[2:] { - if r == '_' { - nr += 1 - continue - } - v := u64(_digit_value(r)) - if v >= 16 { + i := 2 + // Read 8 hex digits at a time, then 4 digits at a time (like "0h3c00" or groups + // between `_` separators), then single digits and `_` separators. + for i+8 <= len(str) { + v := read8_to_u64(str, i) + if !is_eight_hex_digits(v) { break } - as_int *= 16 - as_int += v - digits += 1 + as_int = as_int<<32 | parse_eight_hex_digits(v) + digits += 8 + i += 8 } - nr += digits + for i < len(str) { + if i+4 <= len(str) { + // Four digits: pad them with "0000" and use the 8-digit code. + v := u64(read4_to_u32(str, i)) | 0x3030_3030 << 32 + if is_eight_hex_digits(v) { + as_int = as_int<<16 | parse_eight_hex_digits(v) >> 16 + digits += 4 + i += 4 + continue + } + } + if str[i] != '_' { + v := hex_digit_table[str[i]] + if v >= 16 { + break + } + as_int = as_int<<4 | u64(v) + digits += 1 + } + i += 1 + } + nr = i ok = len(str) == nr switch digits { @@ -1139,10 +969,6 @@ parse_float_prefix_generic :: proc($T: typeid, str: string) -> (value: T, nr: in return } - if f, n, special := check_special(str); special { - return T(f), n, true - } - when T == f64 { Bits :: u64 info := &_f64_info @@ -1153,18 +979,16 @@ parse_float_prefix_generic :: proc($T: typeid, str: string) -> (value: T, nr: in mantissa: u64 exp: int - neg, trunc, hex: bool - mantissa, exp, neg, trunc, hex, nr = parse_components(str) or_return - - if hex { - f: f64 - f, ok = parse_hex(str, mantissa, exp, neg, trunc) - value = T(f) - when T == f32 { - // A finite f64 can be too large for f32. - ok = ok && transmute(u32)value & 0x7f80_0000 != 0x7f80_0000 + neg, trunc: bool + mantissa, exp, neg, trunc, nr, ok = parse_number_string(str) + if !ok { + // Not a decimal number: try "inf", "nan" and a hexadecimal float. + if f, n, special := check_special(str); special { + return T(f), n, true } - return + mantissa, exp, neg, trunc, nr = scan_hex_float(str) or_return + b, in_range := hex_float_bits(mantissa, exp, neg, trunc, info) + return transmute(T)Bits(b), nr, in_range } // Clinger's fast path algorithm @@ -1175,7 +999,8 @@ parse_float_prefix_generic :: proc($T: typeid, str: string) -> (value: T, nr: in 1e20, 1e21, 1e22, } - if mantissa>>_f64_info.mantbits != 0 { + // Every integer up to 2^53 is an exact f64 value. + if mantissa > 1<<53 { break clinger_fast_path } f := f64(mantissa) From dad90e28501c7d2b8e2344cc0a8d41d4a8acd2b3 Mon Sep 17 00:00:00 2001 From: Matthias Huerbe Date: Tue, 29 Sep 2026 20:43:14 +0200 Subject: [PATCH 059/215] added unit tests for string to float conversion --- tests/core/strconv/test_core_strconv.odin | 201 ++++++++++++++++++++++ 1 file changed, 201 insertions(+) diff --git a/tests/core/strconv/test_core_strconv.odin b/tests/core/strconv/test_core_strconv.odin index cc8946483..5f6c09fbe 100644 --- a/tests/core/strconv/test_core_strconv.odin +++ b/tests/core/strconv/test_core_strconv.odin @@ -324,3 +324,204 @@ test_float_overflow :: proc(t: ^testing.T) { testing.expect_value(t, f32v, 0) testing.expect_value(t, ok32, true) } + +@(test) +test_float_scanner :: proc(t: ^testing.T) { + // Cover the fast scanner's 8-digit steps, the 19-digit limit, skipped leading zeros, + Case :: struct { s: string, bits: u64, n: int, ok: bool } + cases := []Case{ + {"12345678", 0x41678c29c0000000, 8, true}, + {"123456789", 0x419d6f3454000000, 9, true}, + {"1234567812345678", 0x43118b54df9fbd38, 16, true}, + {"12345678.12345678", 0x41678c29c3f35ba2, 17, true}, + {"0.1234567812345678", 0x3fbf9add15df3486, 18, true}, + {"1234567890123456789", 0x43b12210f47de981, 19, true}, + {"12345678901234567890", 0x43e56a95319d63e1, 20, true}, + {"123456789012345678901234567890", 0x45f8ee90ff6c373e, 30, true}, + {"0.00000000000000000000123456789", 0x3b97520105b1fbe2, 31, true}, + {"00000000000000001.5", 0x3ff8000000000000, 19, true}, + {"0000000000000000", 0x0000000000000000, 16, true}, + {"0.000000000000000000", 0x0000000000000000, 20, true}, + {"9007199254740993", 0x4340000000000000, 16, true}, + {"1.00000000000000011102230246251565404236316680908203125", 0x3ff0000000000000, 55, true}, + {"1_000_000", 0x412e848000000000, 9, true}, + {"1.000_5", 0x3ff0020c49ba5e35, 7, true}, + {"1e1_0", 0x4202a05f20000000, 5, true}, + {"_1", 0x3ff0000000000000, 2, true}, + {"1_", 0x3ff0000000000000, 2, true}, + {"1__2.5", 0x4029000000000000, 6, true}, + {".5", 0x3fe0000000000000, 2, true}, + {"-.5", 0xbfe0000000000000, 3, true}, + {"5.", 0x4014000000000000, 2, true}, + {"+1.5", 0x3ff8000000000000, 4, true}, + {"1.5 ", 0x3ff8000000000000, 3, false}, + {"1..5", 0x3ff0000000000000, 2, false}, + {"1.5.5", 0x3ff8000000000000, 3, false}, + {".", 0x0000000000000000, 0, false}, + {"-", 0x0000000000000000, 0, false}, + {"+", 0x0000000000000000, 0, false}, + {"", 0x0000000000000000, 0, false}, + {"e5", 0x0000000000000000, 0, false}, + {".e5", 0x0000000000000000, 0, false}, + {"1.5e", 0x0000000000000000, 0, false}, + {"1.5e+", 0x0000000000000000, 0, false}, + {"1.5ex", 0x0000000000000000, 0, false}, + {"1.5E-3", 0x3f589374bc6a7efa, 6, true}, + {"1e400", 0x7ff0000000000000, 5, false}, + {"1e-400", 0x0000000000000000, 6, true}, + {"1e999999999", 0x7ff0000000000000, 11, false}, + {"-0", 0x8000000000000000, 2, true}, + {"0x", 0x0000000000000000, 1, false}, + {"0x1p0", 0x3ff0000000000000, 5, true}, + {"0xg", 0x0000000000000000, 0, false}, + {"inf", 0x7ff0000000000000, 3, true}, + {"-inf", 0xfff0000000000000, 4, true}, + {"nan", 0x7ff8000000000001, 3, true}, + {"infinity", 0x7ff0000000000000, 8, true}, + } + for c in cases { + n: int + f, ok := strconv.parse_f64(c.s, &n) + testing.expectf(t, transmute(u64)f == c.bits && n == c.n && ok == c.ok, + "%q: got (%016x, n=%d, ok=%v), want (%016x, n=%d, ok=%v)", c.s, transmute(u64)f, n, ok, c.bits, c.n, c.ok) + } +} + +@(test) +test_float_underscore :: proc(t: ^testing.T) { + Case :: struct { s: string, bits: u64, n: int, ok: bool } + cases := []Case{ + // Odin literals with the same value. + {"1_000_000", 0x412e848000000000, 9, true}, + {"1_000.5", 0x408f440000000000, 7, true}, + {"1.000_5", 0x3ff0020c49ba5e35, 7, true}, + {"1e1_0", 0x4202a05f20000000, 5, true}, + {"1_", 0x3ff0000000000000, 2, true}, + {"1__2", 0x4028000000000000, 4, true}, + {"1_.5", 0x3ff8000000000000, 4, true}, + {"1._5", 0x3ff8000000000000, 4, true}, + {"1_e5", 0x40f86a0000000000, 4, true}, + {"1e5_", 0x40f86a0000000000, 4, true}, + {"1.5_", 0x3ff8000000000000, 4, true}, + {"0_1.5", 0x3ff8000000000000, 5, true}, + {"-1_000.25", 0xc08f420000000000, 9, true}, + {"+1_0", 0x4024000000000000, 4, true}, + {"1e1_0_0", 0x54b249ad2594c37d, 7, true}, + {"1.5e-0_0_3", 0x3f589374bc6a7efa, 10, true}, + // Not Odin literals, but strconv accepts them. + {"_1", 0x3ff0000000000000, 2, true}, + {"-_1.5", 0xbff8000000000000, 5, true}, + {"._5", 0x3fe0000000000000, 3, true}, + // `_` next to the 8 and 4 digit steps of the fast scanner. + {"0.12345678_12345678", 0x3fbf9add15df3486, 19, true}, + {"1234_5678.8765_4321", 0x41678c29dc0ca459, 19, true}, + {"0.1_2_3_4_5_6_7_8_9", 0x3fbf9add3739635f, 19, true}, + // `_` on each conversion path: Eisel-Lemire (17 digits), more than 19 digits + // (including leading zeros), and the arbitrary-precision slow path. + {"0.123_456_789_012_345_67", 0x3fbf9add3746f65e, 24, true}, + {"1_234.567_890_123_456e-2_0", 0x3c6c779a3f7ffdf5, 26, true}, + {"1.797_693_134_862_315_7e3_08", 0x7fefffffffffffff, 28, true}, + {"9_007_199_254_740_993", 0x4340000000000000, 21, true}, + {"0_000_000_000_000_000_000_1.5", 0x3ff8000000000000, 29, true}, + {"0.000_000_000_000_000_000_001_234_567_890_123_456_789", 0x3b97520105bbfffb, 53, true}, + {"1_234_567_890_123_456_789_012_345", 0x44f056e0f36a6444, 33, true}, + {"123_456_789_012_345_678_901_234", 0x44ba249b1f10a06d, 31, true}, + {"0.1_000_000_000_000_000_000_000_001", 0x3fb999999999999a, 35, true}, + {"9_007_199_254_740_993.000_000_000_000_000_000_1", 0x4340000000000001, 47, true}, + // The number stops at the first byte that is not a digit, `_`, `.` or an exponent. + {"1_000.5x", 0x408f440000000000, 7, false}, + {"1_000,5", 0x408f400000000000, 5, false}, + {"_", 0x0000000000000000, 0, false}, + {"__", 0x0000000000000000, 0, false}, + } + for c in cases { + n: int + f, ok := strconv.parse_f64(c.s, &n) + testing.expectf(t, transmute(u64)f == c.bits && n == c.n && ok == c.ok, + "%q: got (%016x, n=%d, ok=%v), want (%016x, n=%d, ok=%v)", c.s, transmute(u64)f, n, ok, c.bits, c.n, c.ok) + } + + Case32 :: struct { s: string, bits: u32 } + cases32 := []Case32{ + {"1_000.5", 0x447a2000}, + {"0.123_456_7", 0x3dfcd6de}, + {"3.402_823_5e3_8", 0x7f7fffff}, + {"1.175_494_701_146_903_6e-3_8", 0x00800003}, // parsing as f64 first would give 0x00800002 + } + for c in cases32 { + f, ok := strconv.parse_f32(c.s) + testing.expectf(t, ok && transmute(u32)f == c.bits, "%q: got %08x (ok=%v), want %08x", c.s, transmute(u32)f, ok, c.bits) + } +} + +@(test) +test_float_hex_scanner :: proc(t: ^testing.T) { + // Cover the fast hex scanner + Case :: struct { s: string, bits: u64, n: int, ok: bool } + cases := []Case{ + {"0x1.921fb54442d18p+1", 0x400921fb54442d18, 20, true}, + {"-0x1.921fb54442d18p+1", 0xc00921fb54442d18, 21, true}, + {"0X1.8P1", 0x4008000000000000, 7, true}, + {"0x1.8p-1", 0x3fe8000000000000, 8, true}, + {"0x123456789abcdef0p0", 0x43b23456789abcdf, 20, true}, + {"0x123456789abcdef08p0", 0x43f23456789abcdf, 21, true}, + {"0x123456789abcdef01p0", 0x43f23456789abcdf, 21, true}, + {"0x1.00000000000000001p0", 0x3ff0000000000000, 23, true}, + {"0x0.000000000000000000000001p0", 0x39f0000000000000, 30, true}, + {"0x.8p1", 0x3ff0000000000000, 6, true}, + {"0x1.p1", 0x4000000000000000, 6, true}, + {"0x00001p4", 0x4030000000000000, 9, true}, + {"0x1_000p0", 0x40b0000000000000, 9, true}, + {"0x1.8p1_0", 0x4098000000000000, 9, true}, + {"0x1.8", 0x0000000000000000, 0, false}, + {"0x1.8p", 0x0000000000000000, 0, false}, + {"0x1.8p+", 0x0000000000000000, 0, false}, + {"0x1..8p1", 0x0000000000000000, 0, false}, + {"0x", 0x0000000000000000, 1, false}, + {"0xp1", 0x0000000000000000, 0, false}, + {"0x.p1", 0x0000000000000000, 0, false}, + {"0x1.8p1 ", 0x4008000000000000, 7, false}, + {"0x1p1024", 0x7ff0000000000000, 8, false}, + {"0x1p-1074", 0x0000000000000001, 9, true}, + {"0x1p-1076", 0x0000000000000000, 9, true}, + {"0x1.8p-1075", 0x0000000000000001, 11, true}, + {"0x1p99999999", 0x7ff0000000000000, 12, false}, + } + for c in cases { + n: int + f, ok := strconv.parse_f64(c.s, &n) + testing.expectf(t, transmute(u64)f == c.bits && n == c.n && ok == c.ok, + "%q: got (%016x, n=%d, ok=%v), want (%016x, n=%d, ok=%v)", c.s, transmute(u64)f, n, ok, c.bits, c.n, c.ok) + } + + f32v, ok32 := strconv.parse_f32("0x1.000001000000000000001p0") + testing.expectf(t, ok32 && transmute(u32)f32v == 0x3f800001, "got %08x (ok=%v), want 3f800001", transmute(u32)f32v, ok32) +} + +@(test) +test_float_0h :: proc(t: ^testing.T) { + // The 0h syntax gives the exact bits of an f16, f32 or f64 + Case :: struct { s: string, bits: u64, n: int, ok: bool } + cases := [?]Case{ + {"0h9a54fdf3743fd6ab", 0x9a54fdf3743fd6ab, 18, true}, + {"0h9A54FDF3743FD6AB", 0x9a54fdf3743fd6ab, 18, true}, + {"0h28e4_8358_c264_335f", 0x28e48358c264335f, 21, true}, + {"0h3ff0_0000_0000_0000", 0x3ff0000000000000, 21, true}, + {"0h3f800000", 0x3ff0000000000000, 10, true}, + {"0h3c00", 0x3ff0000000000000, 6, true}, + {"0h3c0_0", 0x3ff0000000000000, 7, true}, + {"0h3ff00000000000001", 0x0000000000000000, 19, false}, // 17 digits + {"0h3ff0000000000000g", 0x3ff0000000000000, 18, false}, + {"0h3ff00000_", 0x3ffe000000000000, 11, true}, // 8 digits: the f32 1.875 + } + for c in cases { + n: int + f, ok := strconv.parse_f64(c.s, &n) + testing.expectf(t, transmute(u64)f == c.bits && n == c.n && ok == c.ok, + "%q: got (%016x, n=%d, ok=%v), want (%016x, n=%d, ok=%v)", c.s, transmute(u64)f, n, ok, c.bits, c.n, c.ok) + } + + // parse_f32 keeps the exact bits, also for a signaling NaN. + f32v, ok32 := strconv.parse_f32("0h7f9a7604") + testing.expectf(t, ok32 && transmute(u32)f32v == 0x7f9a7604, "got %08x (ok=%v), want 7f9a7604", transmute(u32)f32v, ok32) +} From 2796bf0fd00365ca3ef94e59d7066d587df02d9a Mon Sep 17 00:00:00 2001 From: Ben Botwin Date: Tue, 29 Sep 2026 16:58:31 -0400 Subject: [PATCH 060/215] removes private from unmarshal_value for use in user unmarshalers --- core/encoding/json/unmarshal.odin | 1 - 1 file changed, 1 deletion(-) diff --git a/core/encoding/json/unmarshal.odin b/core/encoding/json/unmarshal.odin index 0f8c19b5d..7919ac9fd 100644 --- a/core/encoding/json/unmarshal.odin +++ b/core/encoding/json/unmarshal.odin @@ -358,7 +358,6 @@ unmarshal_string_token :: proc(p: ^Parser, val: any, token: Token, ti: ^reflect. return false, nil } -@(private) unmarshal_value :: proc(p: ^Parser, v: any) -> (err: Unmarshal_Error) { UNSUPPORTED_TYPE := Unsupported_Type_Error{v.id, p.curr_token} token := p.curr_token From db46204e388ebc63df20fcb8cb3e4bc835a3f2a1 Mon Sep 17 00:00:00 2001 From: Louis Novy <101842021+louisnovy@users.noreply.github.com> Date: Tue, 29 Sep 2026 19:22:01 -0400 Subject: [PATCH 061/215] Catch calls of a deferred out proc in short circuits during check --- src/check_expr.cpp | 21 +++++++++++++++++++ src/check_stmt.cpp | 3 +++ tests/issues/run.bat | 1 + tests/issues/run.sh | 6 ++++++ tests/issues/test_issue_5105_5569.odin | 29 ++++++++++++++++++++++++++ 5 files changed, 60 insertions(+) create mode 100644 tests/issues/test_issue_5105_5569.odin diff --git a/src/check_expr.cpp b/src/check_expr.cpp index 248e9f146..dc173e8a1 100644 --- a/src/check_expr.cpp +++ b/src/check_expr.cpp @@ -9081,6 +9081,17 @@ gb_internal ExprKind check_call_expr(CheckerContext *c, Operand *operand, Ast *c gb_zero_item(operand); operand->expr = call; + if ((call->viral_state_flags & ViralStateFlag_ContainsDeferredProcedure) == 0) { + // NOTE: which procedure of a group is called is only known once its arguments are checked + Entity *e = entity_of_node(call->CallExpr.proc); + if (e != nullptr && e->kind == Entity_Procedure && e->Procedure.deferred_procedure.entity != nullptr) { + call->viral_state_flags |= ViralStateFlag_ContainsDeferredProcedure; + if (c->decl) { + c->decl->defer_used += 1; + } + } + } + if (result_type == t_invalid) { operand->mode = Addressing_Invalid; operand->type = t_invalid; @@ -10110,6 +10121,13 @@ gb_internal ExprKind check_ternary_if_expr(CheckerContext *c, Operand *o, Ast *n return kind; } + if (te->x->viral_state_flags & ViralStateFlag_ContainsDeferredProcedure) { + error(te->x, "Procedure calls that have an associated deferred procedure are not allowed within ternary expressions"); + } + if (te->y->viral_state_flags & ViralStateFlag_ContainsDeferredProcedure) { + error(te->y, "Procedure calls that have an associated deferred procedure are not allowed within ternary expressions"); + } + if (x.mode == Addressing_Type || y.mode == Addressing_Type) { Ast *type_expr = (x.mode == Addressing_Type) ? x.expr : y.expr; gbString type_string = expr_to_string(type_expr); @@ -10282,6 +10300,9 @@ gb_internal ExprKind check_or_else_expr(CheckerContext *c, Operand *o, Ast *node bool y_is_diverging = false; check_expr_base(c, &y, default_value, left_type); + if (default_value->viral_state_flags & ViralStateFlag_ContainsDeferredProcedure) { + error(default_value, "Procedure calls that have an associated deferred procedure are not allowed on the right-hand side of 'or_else'"); + } switch (y.mode) { case Addressing_NoValue: if (is_diverging_expr(y.expr)) { diff --git a/src/check_stmt.cpp b/src/check_stmt.cpp index 713c19239..ef7c02a2c 100644 --- a/src/check_stmt.cpp +++ b/src/check_stmt.cpp @@ -1315,6 +1315,9 @@ gb_internal void check_switch_stmt(CheckerContext *ctx, Ast *node, u32 mod_flags } else { check_expr_with_type_hint(ctx, &y, expr, x.type); } + if (expr->viral_state_flags & ViralStateFlag_ContainsDeferredProcedure) { + error(expr, "Procedure calls that have an associated deferred procedure are not allowed within case clauses"); + } if (x.mode == Addressing_Invalid || y.mode == Addressing_Invalid) { diff --git a/tests/issues/run.bat b/tests/issues/run.bat index a672af123..a120d2c93 100644 --- a/tests/issues/run.bat +++ b/tests/issues/run.bat @@ -25,6 +25,7 @@ set COMMON=-define:ODIN_TEST_FANCY=false -file -vet -strict-style -ignore-unused ..\..\..\odin build ..\test_issue_5043.odin %COMMON% || exit /b ..\..\..\odin build ..\test_issue_5097.odin %COMMON% || exit /b ..\..\..\odin build ..\test_issue_5097-2.odin %COMMON% || exit /b +..\..\..\odin check ..\test_issue_5105_5569.odin %COMMON% 2>&1 | find /c "Error:" | findstr /x "4" || exit /b ..\..\..\odin build ..\test_issue_5265.odin %COMMON% || exit /b ..\..\..\odin test ..\test_issue_5318.odin %COMMON% || exit /b ..\..\..\odin build ..\test_issue_5573.odin %COMMON% 2>&1 | find /c "Error:" | findstr /x "2" || exit /b diff --git a/tests/issues/run.sh b/tests/issues/run.sh index 68b10fcdc..9018f9c16 100755 --- a/tests/issues/run.sh +++ b/tests/issues/run.sh @@ -32,6 +32,12 @@ fi $ODIN build ../test_issue_5043.odin $COMMON $ODIN build ../test_issue_5097.odin $COMMON $ODIN build ../test_issue_5097-2.odin $COMMON +if [[ $($ODIN check ../test_issue_5105_5569.odin $COMMON_CHECK 2>&1 >/dev/null | grep -c "Error:") -eq 4 ]]; then + echo "SUCCESSFUL 1/1" +else + echo "SUCCESSFUL 0/1" + exit 1 +fi $ODIN build ../test_issue_5265.odin $COMMON $ODIN test ../test_issue_5318.odin $COMMON if [[ $($ODIN build ../test_issue_5573.odin $COMMON 2>&1 >/dev/null | grep -c "Error:") -eq 2 ]]; then diff --git a/tests/issues/test_issue_5105_5569.odin b/tests/issues/test_issue_5105_5569.odin new file mode 100644 index 000000000..27603183c --- /dev/null +++ b/tests/issues/test_issue_5105_5569.odin @@ -0,0 +1,29 @@ +// Tests issues #5105 https://github.com/odin-lang/Odin/issues/5105 +// and #5569 https://github.com/odin-lang/Odin/issues/5569 +package test_issues + +import "core:sync" + +// A procedure call with a deferred procedure is not allowed where it may not be evaluated. +// The associated deferred procedure would be called at the end of the scope regardless. + +@(deferred_out = finish) +start :: proc(x: int) -> int { return x } +finish :: proc(_: int) {} + +maybe :: proc(x: int) -> (int, bool) { return x, x > 0 } + +m: sync.Mutex + +main :: proc() { + flag := true + + _ = start(1) if flag else 2 // Error + _ = maybe(1) or_else start(2) // Error + switch { + case flag, start(3) > 0: // Error + } + if flag && sync.guard(&m) {} // Error, `sync.guard` is a procedure group + + _ = start(4) + 1 +} From 92bf89950c6287ace50f749b405d2afcdbeee748 Mon Sep 17 00:00:00 2001 From: Yawning Angel Date: Wed, 30 Sep 2026 11:53:54 +0900 Subject: [PATCH 062/215] examples/all: Add entries for `crypto/x509` --- examples/all/all_js.odin | 1 + examples/all/all_main.odin | 1 + 2 files changed, 2 insertions(+) diff --git a/examples/all/all_js.odin b/examples/all/all_js.odin index 10d2595a0..78cc4629f 100644 --- a/examples/all/all_js.odin +++ b/examples/all/all_js.odin @@ -57,6 +57,7 @@ package all @(require) import "core:crypto/tuplehash" @(require) import "core:crypto/x25519" @(require) import "core:crypto/x448" +@(require) import "core:crypto/x509" @(require) import "core:debug/pe" @(require) import "core:debug/trace" diff --git a/examples/all/all_main.odin b/examples/all/all_main.odin index 2275f1d7f..a931209d9 100644 --- a/examples/all/all_main.odin +++ b/examples/all/all_main.odin @@ -62,6 +62,7 @@ package all @(require) import "core:crypto/tuplehash" @(require) import "core:crypto/x25519" @(require) import "core:crypto/x448" +@(require) import "core:crypto/x509" @(require) import "core:debug/pe" @(require) import "core:debug/trace" From c25e7cb3bcd42cf0067182f6e5d2eb8f0e4fc812 Mon Sep 17 00:00:00 2001 From: Yawning Angel Date: Wed, 30 Sep 2026 11:56:30 +0900 Subject: [PATCH 063/215] core/crypto/aegis: AEGIS is RFC 10032 now --- core/crypto/aegis/aegis.odin | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/crypto/aegis/aegis.odin b/core/crypto/aegis/aegis.odin index 5aee61767..fec3483f4 100644 --- a/core/crypto/aegis/aegis.odin +++ b/core/crypto/aegis/aegis.odin @@ -4,7 +4,7 @@ Where AEAD stands for Authenticated Encryption with Additional Data. See: -- [[ https://www.ietf.org/archive/id/draft-irtf-cfrg-aegis-aead-12.txt ]] +- [[ https://www.rfc-editor.org/rfc/rfc10032 ]] */ package aegis From a9a4d11ac0eb8b2c6611068553f5dff946d8bd50 Mon Sep 17 00:00:00 2001 From: gingerBill Date: Wed, 30 Sep 2026 11:56:24 +0100 Subject: [PATCH 064/215] Add a suggestion for the bit_set backing type --- src/check_type.cpp | 95 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 95 insertions(+) diff --git a/src/check_type.cpp b/src/check_type.cpp index b48a6c8ae..cec9eb812 100644 --- a/src/check_type.cpp +++ b/src/check_type.cpp @@ -1311,6 +1311,91 @@ gb_internal bool is_type_valid_bit_set_range(Type *t) { return false; } +gb_internal Type *narrowest_integer_type_for_bits(Type *like, i64 needed_bits) { + if (needed_bits > 128) { + return nullptr; + } + + bool is_unsigned = is_type_unsigned(like); + bool little = false; + bool big = false; + + Type *bt = core_type(like); + if (bt != nullptr && bt->kind == Type_Basic) { + little = (bt->Basic.flags & BasicFlag_EndianLittle) != 0; + big = (bt->Basic.flags & BasicFlag_EndianBig) != 0; + } + + Type *native_u[] = {t_u8, t_u16, t_u32, t_u64, t_u128}; + Type *native_i[] = {t_i8, t_i16, t_i32, t_i64, t_i128}; + Type *little_u[] = { t_u16le, t_u32le, t_u64le, t_u128le}; + Type *little_i[] = { t_i16le, t_i32le, t_i64le, t_i128le}; + Type *big_u[] = { t_u16be, t_u32be, t_u64be, t_u128be}; + Type *big_i[] = { t_i16be, t_i32be, t_i64be, t_i128be}; + + Type **candidates = native_u; + isize candidate_count = gb_count_of(native_u); + if (little) { + candidates = is_unsigned ? little_u : little_i; + candidate_count = is_unsigned ? gb_count_of(little_u) : gb_count_of(little_i); + } else if (big) { + candidates = is_unsigned ? big_u : big_i; + candidate_count = is_unsigned ? gb_count_of(big_u) : gb_count_of(big_i); + } else { + candidates = is_unsigned ? native_u : native_i; + candidate_count = is_unsigned ? gb_count_of(native_u) : gb_count_of(native_i); + } + + for (isize i = 0; i < candidate_count; i++) { + if (8*type_size_of(candidates[i]) >= needed_bits) { + return candidates[i]; + } + } + return nullptr; +} + +gb_internal void suggest_bit_set_backing_type(Ast *elem, Type *underlying, i64 upper, bool note_lower_bound_forced) { + i64 const needed_bits = upper + 1; + + Type *unit = t_u64; + if (underlying != nullptr) { + Type *bt = base_type(underlying); + unit = (bt->kind == Type_Array) ? bt->Array.elem : underlying; + } + i64 const unit_bits = 8*type_size_of(unit); + i64 const count = unit_bits > 0 ? (needed_bits + unit_bits - 1) / unit_bits : 1; + + Type *scalar = narrowest_integer_type_for_bits(unit, needed_bits); + bool show_scalar = scalar != nullptr; + bool show_array = count >= 2; + + gbString es = expr_to_string(elem); + gbString us = type_to_string(unit); + + char const *lead = underlying != nullptr + ? "\tSuggestion: A larger backing type is required, e.g. " + : "\tSuggestion: An explicit backing integer or array type may be specified to allow for a larger range, e.g. "; + + if (show_scalar && show_array) { + gbString ss = type_to_string(scalar); + error_line("%s'bit_set[%s; %s]' or 'bit_set[%s; [%lld]%s]'\n", lead, es, ss, es, cast(long long)count, us); + gb_string_free(ss); + } else if (show_scalar) { + gbString ss = type_to_string(scalar); + error_line("%s'bit_set[%s; %s]'\n", lead, es, ss); + gb_string_free(ss); + } else { + error_line("%s'bit_set[%s; [%lld]%s]'\n", lead, es, cast(long long)count, us); + } + + if (note_lower_bound_forced) { + error_line("\t Note: an explicit backing type forces the lower bound of the bit_set to be 0\n"); + } + + gb_string_free(us); + gb_string_free(es); +} + gb_internal void check_bit_set_type(CheckerContext *c, Type *type, Type *named_type, Ast *node) { ast_node(bs, BitSetType, node); GB_ASSERT(type->kind == Type_BitSet); @@ -1450,10 +1535,15 @@ gb_internal void check_bit_set_type(CheckerContext *c, Type *type, Type *named_t break; } if (!is_valid) { + ERROR_BLOCK(); if (actual_lower != lower) { error(bs->elem, "bit_set range is greater than %lld bits, %lld bits are required (internally the lower bound was changed to 0 as an underlying type was set)", cast(long long)bits, cast(long long)bits_required); + suggest_bit_set_backing_type(bs->elem, type->BitSet.underlying, upper, /*note_lower_bound_forced*/false); } else { error(bs->elem, "bit_set range is greater than %lld bits, %lld bits are required", cast(long long)bits, cast(long long)bits_required); + if (lower >= 0) { + suggest_bit_set_backing_type(bs->elem, type->BitSet.underlying, upper, /*note_lower_bound_forced*/lower > 0); + } } } @@ -1519,11 +1609,16 @@ gb_internal void check_bit_set_type(CheckerContext *c, Type *type, Type *named_t } if (upper - lower >= bits) { + ERROR_BLOCK(); i64 bits_required = upper-lower+1; if (lower_changed) { error(bs->elem, "bit_set range is greater than %lld bits, %lld bits are required (internally the lower bound was changed to 0 as an underlying type was set)", cast(long long)bits, cast(long long)bits_required); + suggest_bit_set_backing_type(bs->elem, type->BitSet.underlying, upper, /*note_lower_bound_forced*/false); } else { error(bs->elem, "bit_set range is greater than %lld bits, %lld bits are required", cast(long long)bits, cast(long long)bits_required); + if (lower >= 0) { + suggest_bit_set_backing_type(bs->elem, type->BitSet.underlying, upper, /*note_lower_bound_forced*/lower > 0); + } } } From 3f60ed743ef3f1f5577d221a887df85e49c38dd9 Mon Sep 17 00:00:00 2001 From: Louis Novy <101842021+louisnovy@users.noreply.github.com> Date: Sat, 26 Sep 2026 22:13:09 -0400 Subject: [PATCH 065/215] Fix casts between nested arrays of the same depth --- src/llvm_backend_expr.cpp | 4 ++-- src/types.cpp | 9 +++++++++ tests/issues/run.bat | 1 + tests/issues/run.sh | 1 + tests/issues/test_issue_7477_7506.odin | 19 +++++++++++++++++++ 5 files changed, 32 insertions(+), 2 deletions(-) create mode 100644 tests/issues/test_issue_7477_7506.odin diff --git a/src/llvm_backend_expr.cpp b/src/llvm_backend_expr.cpp index 23a51d31a..0e90d8d74 100644 --- a/src/llvm_backend_expr.cpp +++ b/src/llvm_backend_expr.cpp @@ -3052,9 +3052,9 @@ gb_internal lbValue lb_emit_conv(lbProcedure *p, lbValue value, Type *t) { if (is_type_array(dst) && is_type_array(src)) { Type *dst_elem = base_array_type(dst); Type *src_elem = base_array_type(src); + // NOTE: only arrays nested equally deep convert element by element, a shallower one is broadcast (See #6642) if (dst->Array.count == src->Array.count && - !is_type_array_like(dst->Array.elem) && - !is_type_array_like(src->Array.elem)) { + type_array_depth(dst) == type_array_depth(src)) { if (are_types_identical(dst_elem, src_elem)) { lbValue v = value; v.type = t; diff --git a/src/types.cpp b/src/types.cpp index 2d43a07f5..d39fcb901 100644 --- a/src/types.cpp +++ b/src/types.cpp @@ -1958,6 +1958,15 @@ gb_internal Type *core_broadcastable_elem_type(Type *t) { return t; } +gb_internal i32 type_array_depth(Type *t) { + i32 depth = 0; + while (is_type_array_like(t)) { + t = base_array_type(t); + depth += 1; + } + return depth; +} + gb_internal i32 type_math_rank(Type *t) { i32 rank = 0; for (;;) { diff --git a/tests/issues/run.bat b/tests/issues/run.bat index dd101297e..1611bfecf 100644 --- a/tests/issues/run.bat +++ b/tests/issues/run.bat @@ -66,6 +66,7 @@ clang -c ..\test_issue_sysv_abi.c -o test_issue_sysv_abi_c.o || exit /b ..\..\..\odin test ..\test_lifetime_markers.odin %COMMON% -o:size -lifetime-markers || exit /b ..\..\..\odin test ..\test_lifetime_markers.odin %COMMON% -o:speed -lifetime-markers || exit /b ..\..\..\odin test ..\test_issue_7547.odin %COMMON% || exit /b +..\..\..\odin test ..\test_issue_7477_7506.odin %COMMON% || exit /b ..\..\..\odin run ..\test_issue_7482.odin %COMMON% || exit /b ..\..\..\odin run ..\test_issue_7562.odin %COMMON% -no-crt -no-thread-local || exit /b ..\..\..\odin run ..\test_issue_7562.odin %COMMON% -no-crt -no-thread-local -o:speed || exit /b diff --git a/tests/issues/run.sh b/tests/issues/run.sh index 5508b07cf..f1ab0d409 100755 --- a/tests/issues/run.sh +++ b/tests/issues/run.sh @@ -99,6 +99,7 @@ $ODIN check ../test_issue_6979.odin -no-entry-point $COMMON_CHECK $ODIN test ../test_issue_7008.odin $COMMON $ODIN check ../test_issue_7012.odin -no-entry-point $COMMON_CHECK $ODIN build ../test_issue_7037.odin $COMMON -o:none +$ODIN test ../test_issue_7477_7506.odin $COMMON $ODIN run ../test_issue_7482.odin $COMMON $ODIN run ../test_issue_7564.odin $COMMON $ODIN test ../test_issue_7587.odin $COMMON diff --git a/tests/issues/test_issue_7477_7506.odin b/tests/issues/test_issue_7477_7506.odin new file mode 100644 index 000000000..9dd9df3f9 --- /dev/null +++ b/tests/issues/test_issue_7477_7506.odin @@ -0,0 +1,19 @@ +// Tests issues #7477 https://github.com/odin-lang/Odin/issues/7477 +// and #7506 https://github.com/odin-lang/Odin/issues/7506 +package test_issues + +import "core:testing" + +@(test) +test_issue_7477_7506 :: proc(t: ^testing.T) { + a := [2][2]i32{{1, 2}, {3, 4}} + testing.expect_value(t, cast([2][2]int)a, [2][2]int{{1, 2}, {3, 4}}) + + b := [2][2]u64{{1, 2}, {3, 4}} + testing.expect_value(t, cast([2][2]f64)b, [2][2]f64{{1, 2}, {3, 4}}) + + // a shallower array is still broadcast to every element (#6642) + c := [2]f32{1, 2} + d: [2][2]f32 = c + testing.expect_value(t, d, [2][2]f32{{1, 2}, {1, 2}}) +} From 781d9cbd8b4c9556fd0fcc1ad07c7f17703881e9 Mon Sep 17 00:00:00 2001 From: gingerBill Date: Wed, 30 Sep 2026 14:39:47 +0100 Subject: [PATCH 066/215] parapoly: fix proc-cache race, record ABBA deadlock, and over-eager poly matching Three fixes to the parametric-polymorphism checker. src/check_expr.cpp - find_or_generate_polymorphic_procedure: close a check-then-act race in the generated-procedure cache. Both lookups ran under a shared lock that was released before the insert, so two threads instantiating the same specialization could both miss and each publish a distinct entity. Re-check under the exclusive lock, now held across construction and the array_add so find-then-publish is atomic. Factor the reuse path into reuse_gen_polymorphic_procedure. - is_polymorphic_type_assignable: require BOTH components to match for maps and enumerated arrays (|| -> &&). The old || accepted e.g. map[int]$V against map[string]f32 (binding $V and deferring the key mismatch to a confusing assignment error); it now fails cleanly at inference. Both sides are still evaluated, so modify_type side effects are unchanged. src/check_type.cpp, src/check_expr.cpp - check_struct_type: release the originating record's gen_types mutex right after the instantiation is published, before checking its fields. Holding it across field-checking (which instantiates other records) allowed a cross-record ABBA deadlock between mutually-recursive generic structs instantiated concurrently; concurrent finders now synchronize via the existing fields_wait_signal. Canonicalize the instantiation name before publishing (set_polymorphic_record_instantiation_name) so the early release cannot expose a torn Named.name. Unions are left unchanged: they lack a variants-ready signal, so early release is not yet safe for them. --- src/check_expr.cpp | 138 +++++++++++++++++++++++---------------------- src/check_type.cpp | 64 ++++++++++++++++++++- 2 files changed, 134 insertions(+), 68 deletions(-) diff --git a/src/check_expr.cpp b/src/check_expr.cpp index 13b578084..73c224e2b 100644 --- a/src/check_expr.cpp +++ b/src/check_expr.cpp @@ -92,7 +92,8 @@ gb_internal void check_init_constant (CheckerContext *c, Entity * gb_internal bool check_representable_as_constant(CheckerContext *c, ExactValue in_value, Type *type, ExactValue *out_value); gb_internal bool check_procedure_type (CheckerContext *c, Type *type, Ast *proc_type_node, Array const *operands = nullptr); gb_internal void check_struct_type (CheckerContext *c, Type *struct_type, Ast *node, Array *poly_operands, - Type *named_type = nullptr, Type *original_type_for_poly = nullptr); + Type *named_type = nullptr, Type *original_type_for_poly = nullptr, + GenTypesData *poly_gen_types_to_unlock = nullptr); gb_internal void check_union_type (CheckerContext *c, Type *union_type, Ast *node, Array *poly_operands, Type *named_type = nullptr, Type *original_type_for_poly = nullptr); @@ -387,6 +388,31 @@ gb_internal void check_scope_decls(CheckerContext *c, Slice const &nodes, } } +// NOTE(bill): Reuse an already-generated polymorphic procedure specialization `other`. +// Records it as the result and, if its body has not been checked yet, schedules it. +// The caller must have released `gen_procs->mutex` before calling this (it queues work). +gb_internal bool reuse_gen_polymorphic_procedure(Checker *checker, Entity *other, Ast *poly_def_node, PolyProcData *poly_proc_data) { + if (poly_proc_data) { + poly_proc_data->gen_entity = other; + } + + DeclInfo *decl = other->decl_info; + if (decl->proc_checked_state != ProcCheckedState_Checked) { + ProcInfo *proc_info = permanent_alloc_item(); + proc_info->file = other->file; + proc_info->token = other->token; + proc_info->decl = decl; + proc_info->type = other->type; + proc_info->body = decl->proc_lit->ProcLit.body; + proc_info->tags = other->Procedure.tags; + proc_info->generated_from_polymorphic = true; + proc_info->poly_def_node = poly_def_node; + + check_procedure_later(checker, proc_info); + } + return true; +} + gb_internal bool find_or_generate_polymorphic_procedure(CheckerContext *old_c, Entity *base_entity, Type *type, Array const *param_operands, Ast *poly_def_node, PolyProcData *poly_proc_data) { /////////////////////////////////////////////////////////////////////////////// @@ -551,33 +577,28 @@ gb_internal bool find_or_generate_polymorphic_procedure(CheckerContext *old_c, E Type *pt = base_type(other->type); if (are_types_identical(pt, final_proc_type)) { rw_mutex_shared_unlock(&gen_procs->mutex); // @local-mutex - - if (poly_proc_data) { - poly_proc_data->gen_entity = other; - } - - DeclInfo *decl = other->decl_info; - if (decl->proc_checked_state != ProcCheckedState_Checked) { - ProcInfo *proc_info = permanent_alloc_item(); - proc_info->file = other->file; - proc_info->token = other->token; - proc_info->decl = decl; - proc_info->type = other->type; - proc_info->body = decl->proc_lit->ProcLit.body; - proc_info->tags = other->Procedure.tags;; - proc_info->generated_from_polymorphic = true; - proc_info->poly_def_node = poly_def_node; - - check_procedure_later(nctx.checker, proc_info); - } - - return true; + return reuse_gen_polymorphic_procedure(nctx.checker, other, poly_def_node, poly_proc_data); } } rw_mutex_shared_unlock(&gen_procs->mutex); // @local-mutex } + // NOTE(bill): The two lookups above ran under a shared lock which was then released, so a + // concurrent instantiation of this same specialization could have been published in the gap. + // Acquire the exclusive lock now and hold it across the re-check below and the array_add at the + // end, so that finding-then-publishing is atomic. Without this, two threads racing on the same + // specialization could both miss and each build and enqueue a distinct entity for it. The lock + // is only released here on an early return (a late-arriving duplicate); the normal path releases + // it after publishing. (@local-mutex) + rw_mutex_lock(&gen_procs->mutex); // @local-mutex + for (Entity *other : gen_procs->procs) { + if (are_types_identical(base_type(other->type), final_proc_type)) { + rw_mutex_unlock(&gen_procs->mutex); // @local-mutex + return reuse_gen_polymorphic_procedure(nctx.checker, other, poly_def_node, poly_proc_data); + } + } + Ast *proc_lit = clone_ast(old_decl->proc_lit); ast_node(pl, ProcLit, proc_lit); // NOTE(bill): Associate the scope declared above withinth this procedure declaration's type @@ -648,8 +669,9 @@ gb_internal bool find_or_generate_polymorphic_procedure(CheckerContext *old_c, E } } - rw_mutex_lock(&gen_procs->mutex); // @local-mutex - array_add(&gen_procs->procs, entity); + // NOTE(bill): The exclusive lock has been held since just before construction (see above), + // so this publish is atomic with the re-check that preceded it. + array_add(&gen_procs->procs, entity); rw_mutex_unlock(&gen_procs->mutex); // @local-mutex ProcInfo *proc_info = permanent_alloc_item(); @@ -1604,9 +1626,13 @@ gb_internal bool is_polymorphic_type_assignable(CheckerContext *c, Type *poly, T } return is_polymorphic_type_assignable(c, poly->EnumeratedArray.index, source->EnumeratedArray.index, true, modify_type); } + // NOTE(bill): Both are evaluated (not short-circuited) so their modify_type side effects + // are applied, but both the index and the element must match for the pattern to hold. + // A previous `index || elem` here over-accepted (e.g. `[Dir]$T` vs `[Other]f32`), binding + // `$T` and leaving the index mismatch to be reported later as a confusing assignment error. bool index = is_polymorphic_type_assignable(c, poly->EnumeratedArray.index, source->EnumeratedArray.index, true, modify_type); bool elem = is_polymorphic_type_assignable(c, poly->EnumeratedArray.elem, source->EnumeratedArray.elem, true, modify_type); - return index || elem; + return index && elem; } return false; @@ -1777,9 +1803,14 @@ gb_internal bool is_polymorphic_type_assignable(CheckerContext *c, Type *poly, T return false; case Type_Map: if (source->kind == Type_Map) { + // NOTE(bill): Both are evaluated (not short-circuited) so their modify_type side effects + // are applied, but both the key and the value must match for the pattern to hold. A + // previous `key || value` here over-accepted (e.g. `map[int]$V` vs `map[string]f32`), + // binding `$V` and leaving the key mismatch to be reported later as a confusing + // assignment error, and would finalize a map that was only partially matched. bool key = is_polymorphic_type_assignable(c, poly->Map.key, source->Map.key, true, modify_type); bool value = is_polymorphic_type_assignable(c, poly->Map.value, source->Map.value, true, modify_type); - if (key || value) { + if (key && value) { if (modify_type) { poly->Map.lookup_result_type = nullptr; init_map_internal_types(poly); @@ -8730,7 +8761,13 @@ gb_internal CallArgumentError check_polymorphic_record_type(CheckerContext *c, O { GenTypesData *found_gen_types = ensure_polymorphic_record_entity_has_gen_types(c, original_type); mutex_lock(&found_gen_types->mutex); - defer (mutex_unlock(&found_gen_types->mutex)); + // NOTE(bill): For a struct instantiation, check_struct_type releases this mutex early (right + // after publishing the instantiation into gen_types, before checking its fields) to avoid a + // cross-record ABBA deadlock between mutually-recursive generic records; it signals that by + // leaving `gen_types_locked` cleared below. The union path and the cache-hit path keep the + // mutex until the end of this scope. + bool gen_types_locked = true; + defer (if (gen_types_locked) mutex_unlock(&found_gen_types->mutex)); Entity *found_entity = find_polymorphic_record_entity(found_gen_types, param_count, ordered_operands); if (found_entity) { @@ -8756,7 +8793,9 @@ gb_internal CallArgumentError check_polymorphic_record_type(CheckerContext *c, O set_base_type(named_type, struct_type); check_open_scope(&ctx, node); - check_struct_type(&ctx, struct_type, node, &ordered_operands, named_type, original_type); + check_struct_type(&ctx, struct_type, node, &ordered_operands, named_type, original_type, found_gen_types); + // check_struct_type released found_gen_types->mutex after publishing the instantiation. + gen_types_locked = false; check_close_scope(&ctx); } else if (bt->kind == Type_Union) { Ast *node = clone_ast(bt->Union.node); @@ -8772,45 +8811,10 @@ gb_internal CallArgumentError check_polymorphic_record_type(CheckerContext *c, O GB_PANIC("Unsupported parametric polymorphic record type"); } - - bt = base_type(named_type); - if (bt->kind == Type_Struct || bt->kind == Type_Union) { - GB_ASSERT(original_type->kind == Type_Named); - Entity *e = original_type->Named.type_name; - GB_ASSERT(e->kind == Entity_TypeName); - - gbString s = gb_string_make_reserve(heap_allocator(), e->token.string.len+3); - s = gb_string_append_fmt(s, "%.*s(", LIT(e->token.string)); - - TypeTuple *tuple = get_record_polymorphic_params(bt); - if (tuple != nullptr) for_array(i, tuple->variables) { - Entity *v = tuple->variables[i]; - String name = v->token.string; - if (i > 0) { - s = gb_string_append_fmt(s, ", "); - } - s = gb_string_append_fmt(s, "$%.*s", LIT(name)); - - if (v->kind == Entity_TypeName) { - if (v->type != nullptr && v->type->kind != Type_Generic) { - s = gb_string_append_fmt(s, "="); - s = write_type_to_string(s, v->type, false); - } - } else if (v->kind == Entity_Constant) { - if (v->Constant.value.kind != ExactValue_Invalid) { - s = gb_string_append_fmt(s, "="); - s = write_exact_value_to_string(s, v->Constant.value); - } - } - } - s = gb_string_append_fmt(s, ")"); - - String new_name = make_string_c(s); - named_type->Named.name = new_name; - if (named_type->Named.type_name) { - named_type->Named.type_name->token.string = new_name; - } - } + // NOTE(bill): The instantiation's canonical name is now set inside + // check_struct_type/check_union_type (before it is published into gen_types), so that a + // concurrent thread which finds the in-progress struct instantiation never observes a + // torn name. operand->mode = Addressing_Type; operand->type = named_type; diff --git a/src/check_type.cpp b/src/check_type.cpp index cec9eb812..bdc211a76 100644 --- a/src/check_type.cpp +++ b/src/check_type.cpp @@ -662,7 +662,54 @@ gb_internal Entity *find_polymorphic_record_entity(GenTypesData *found_gen_types }; -gb_internal void check_struct_type(CheckerContext *ctx, Type *struct_type, Ast *node, Array *poly_operands, Type *named_type, Type *original_type_for_poly) { +// NOTE(bill): Give a freshly-instantiated polymorphic record its canonical name +// (e.g. `Foo($T=int, $N=4)`). This depends only on the record's polymorphic parameters, so it +// must be called *before* the instantiation is published into gen_types via +// add_polymorphic_record_entity: once published, a concurrent thread may read the name, and +// mutating the `Named.name` String in place afterwards would be a torn read. +gb_internal void set_polymorphic_record_instantiation_name(Type *named_type, Type *original_type) { + Type *bt = base_type(named_type); + if (bt->kind != Type_Struct && bt->kind != Type_Union) { + return; + } + GB_ASSERT(original_type->kind == Type_Named); + Entity *e = original_type->Named.type_name; + GB_ASSERT(e->kind == Entity_TypeName); + + gbString s = gb_string_make_reserve(heap_allocator(), e->token.string.len+3); + s = gb_string_append_fmt(s, "%.*s(", LIT(e->token.string)); + + TypeTuple *tuple = get_record_polymorphic_params(bt); + if (tuple != nullptr) for_array(i, tuple->variables) { + Entity *v = tuple->variables[i]; + String name = v->token.string; + if (i > 0) { + s = gb_string_append_fmt(s, ", "); + } + s = gb_string_append_fmt(s, "$%.*s", LIT(name)); + + if (v->kind == Entity_TypeName) { + if (v->type != nullptr && v->type->kind != Type_Generic) { + s = gb_string_append_fmt(s, "="); + s = write_type_to_string(s, v->type, false); + } + } else if (v->kind == Entity_Constant) { + if (v->Constant.value.kind != ExactValue_Invalid) { + s = gb_string_append_fmt(s, "="); + s = write_exact_value_to_string(s, v->Constant.value); + } + } + } + s = gb_string_append_fmt(s, ")"); + + String new_name = make_string_c(s); + named_type->Named.name = new_name; + if (named_type->Named.type_name) { + named_type->Named.type_name->token.string = new_name; + } +} + +gb_internal void check_struct_type(CheckerContext *ctx, Type *struct_type, Ast *node, Array *poly_operands, Type *named_type, Type *original_type_for_poly, GenTypesData *poly_gen_types_to_unlock) { GB_ASSERT(is_type_struct(struct_type)); ast_node(st, StructType, node); @@ -704,7 +751,20 @@ gb_internal void check_struct_type(CheckerContext *ctx, Type *struct_type, Ast * struct_type->Struct.is_poly_specialized = check_record_poly_operand_specialization(ctx, struct_type, poly_operands, &struct_type->Struct.is_polymorphic); if (original_type_for_poly) { GB_ASSERT(named_type != nullptr); + // Finalize the name before publishing so no concurrent reader observes a torn name. + set_polymorphic_record_instantiation_name(named_type, original_type_for_poly); add_polymorphic_record_entity(ctx, node, named_type, original_type_for_poly); + + // NOTE(bill): This instantiation is now published in the originating record's gen_types + // cache (its polymorphic params are set and signalled above), so a concurrent thread can + // find it via find_polymorphic_record_entity and synchronize on the fields_wait_signal + // below when it needs the layout. Release the caller-held gen_types mutex here, *before* + // checking the fields: field checking can instantiate other polymorphic records (locking + // their gen_types mutexes), and holding this one across that is what allows a cross-record + // ABBA deadlock between two mutually-recursive generic records instantiated concurrently. + if (poly_gen_types_to_unlock != nullptr) { + mutex_unlock(&poly_gen_types_to_unlock->mutex); + } } if (!struct_type->Struct.is_polymorphic) { @@ -791,6 +851,8 @@ gb_internal void check_union_type(CheckerContext *ctx, Type *union_type, Ast *no union_type->Union.is_poly_specialized = check_record_poly_operand_specialization(ctx, union_type, poly_operands, &union_type->Union.is_polymorphic); if (original_type_for_poly) { GB_ASSERT(named_type != nullptr); + // Finalize the name before publishing (see set_polymorphic_record_instantiation_name). + set_polymorphic_record_instantiation_name(named_type, original_type_for_poly); add_polymorphic_record_entity(ctx, node, named_type, original_type_for_poly); } From 98fd36b0e7666065b4c47f4a28133148e5fd37fa Mon Sep 17 00:00:00 2001 From: gingerBill Date: Wed, 30 Sep 2026 14:49:11 +0100 Subject: [PATCH 067/215] Fix `[$E]$T` bug where you need to capture polymorphic element node before rewriting the `poly` in place --- src/check_expr.cpp | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/src/check_expr.cpp b/src/check_expr.cpp index 73c224e2b..e62e1e689 100644 --- a/src/check_expr.cpp +++ b/src/check_expr.cpp @@ -1586,12 +1586,21 @@ gb_internal bool is_polymorphic_type_assignable(CheckerContext *c, Type *poly, T return is_polymorphic_type_assignable(c, poly->Array.elem, source->EnumeratedArray.elem, true, false); } + // NOTE(bill): Capture the polymorphic element node ($T) before rewriting `poly` + // in place. Array.elem and EnumeratedArray.elem share the same union offset, so + // assigning EnumeratedArray.elem below would otherwise clobber the pointer to the + // shared $T generic node, and the element-binding recursion at the end would + // compare concrete-vs-concrete and never bind $T (leaving it unresolved in the + // procedure body). Keeping the node lets that recursion mutate it in place, just + // like the fixed-array branch above. + Type *poly_elem = poly->Array.elem; + poly->kind = Type_EnumeratedArray; poly->cached_size = -1; poly->cached_align = -1; poly->flags.exchange(source->flags); poly->failure = false; - poly->EnumeratedArray.elem = source->EnumeratedArray.elem; + poly->EnumeratedArray.elem = poly_elem; poly->EnumeratedArray.index = source->EnumeratedArray.index; poly->EnumeratedArray.min_value = source->EnumeratedArray.min_value; poly->EnumeratedArray.max_value = source->EnumeratedArray.max_value; From 8d745e828880cfd8b5ded24ccacb53195c77a471 Mon Sep 17 00:00:00 2001 From: Mihail Moskov <28909106+corleypc@users.noreply.github.com> Date: Wed, 30 Sep 2026 17:10:18 +0300 Subject: [PATCH 068/215] fixes the nocapture attribute on llvm >= 21 --- src/llvm_abi.cpp | 14 +++++++++----- src/llvm_backend_general.cpp | 6 +----- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/src/llvm_abi.cpp b/src/llvm_abi.cpp index 02da1c835..f4c91256e 100644 --- a/src/llvm_abi.cpp +++ b/src/llvm_abi.cpp @@ -160,6 +160,14 @@ gb_internal lbCallingConventionKind lb_calling_convention_kind(ProcCallingConven return lb_calling_convention_map[cc]; } +gb_internal LLVMAttributeRef lb_create_nocapture_attribute(LLVMContextRef c) { +#if LLVM_VERSION_MAJOR >= 21 + return lb_create_enum_attribute(c, "captures", 0); // 0 == CaptureInfo::none() +#else + return lb_create_enum_attribute(c, "nocapture"); +#endif +} + gb_internal void lb_add_function_type_attributes(LLVMValueRef fn, lbFunctionType *ft, ProcCallingConvention calling_convention) { if (ft == nullptr) { return; @@ -173,11 +181,7 @@ gb_internal void lb_add_function_type_attributes(LLVMValueRef fn, lbFunctionType LLVMContextRef c = ft->ctx; LLVMAttributeRef noalias_attr = lb_create_enum_attribute(c, "noalias"); LLVMAttributeRef nonnull_attr = lb_create_enum_attribute(c, "nonnull"); -#if LLVM_VERSION_MAJOR >= 21 - LLVMAttributeRef nocapture_attr = lb_create_string_attribute(c, make_string_c("captures"), make_string_c("none")); -#else - LLVMAttributeRef nocapture_attr = lb_create_enum_attribute(c, "nocapture"); -#endif + LLVMAttributeRef nocapture_attr = lb_create_nocapture_attribute(c); unsigned arg_index = offset; for (unsigned i = 0; i < arg_count; i++) { diff --git a/src/llvm_backend_general.cpp b/src/llvm_backend_general.cpp index 9a45899d4..31c8070cb 100644 --- a/src/llvm_backend_general.cpp +++ b/src/llvm_backend_general.cpp @@ -3026,11 +3026,7 @@ gb_internal void lb_add_proc_attribute_at_index_with_string(lbProcedure *p, isiz } gb_internal void lb_add_nocapture_proc_attribute_at_index(lbProcedure *p, isize index) { - #if LLVM_VERSION_MAJOR >= 21 - lb_add_proc_attribute_at_index_with_string(p, index, make_string_c("captures"), make_string_c("none")); - #else - lb_add_proc_attribute_at_index(p, index, "nocapture"); - #endif + LLVMAddAttributeAtIndex(p->value, cast(unsigned)index, lb_create_nocapture_attribute(p->module->ctx)); } gb_internal void lb_add_attribute_to_proc(lbModule *m, LLVMValueRef proc_value, char const *name, u64 value=0) { From 9d248323a4ba81e17de79dfa640610cd757b4860 Mon Sep 17 00:00:00 2001 From: gingerBill Date: Wed, 30 Sep 2026 15:19:52 +0100 Subject: [PATCH 069/215] Do not check (or add) the variant type expressions on an unspecialized polymorphic union template --- src/check_type.cpp | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/check_type.cpp b/src/check_type.cpp index bdc211a76..4ef8e2f77 100644 --- a/src/check_type.cpp +++ b/src/check_type.cpp @@ -869,11 +869,17 @@ gb_internal void check_union_type(CheckerContext *ctx, Type *union_type, Ast *no for_array(i, ut->variants) { Ast *node = ut->variants[i]; - Type *t = check_type_expr(ctx, node, nullptr); if (union_type->Union.is_polymorphic && poly_operands == nullptr) { - // NOTE(bill): don't add any variants if this is this is an unspecialized polymorphic record + // NOTE(bill): Do not check (or add) the variant type expressions of an unspecialized + // polymorphic union template. A variant can reference other polymorphic records, + // including mutually-recursive ones (`UA($T){ ^UB(T) }` / `UB($T){ ^UA(T) }`), and + // because unspecialized instantiations are never published into gen_types, checking them + // here recurses unboundedly (UA[T] -> UB[T] -> UA[T] -> ...) and overflows the stack. + // This mirrors check_struct_type, which skips field checking for a polymorphic record; + // concrete instantiations (poly_operands != nullptr) still check their variants below. continue; } + Type *t = check_type_expr(ctx, node, nullptr); if (t != nullptr && t != t_invalid) { bool ok = true; t = default_type(t); From 3b366c9e2966e40d080b1d0bc46ed5eed45feb51 Mon Sep 17 00:00:00 2001 From: gingerBill Date: Wed, 30 Sep 2026 15:32:49 +0100 Subject: [PATCH 070/215] Begin work on handling the wait signals correctly for union variants throughout --- src/check_builtin.cpp | 5 +++++ src/check_expr.cpp | 7 +++++-- src/check_type.cpp | 18 +++++++++++++++++- src/types.cpp | 1 + 4 files changed, 28 insertions(+), 3 deletions(-) diff --git a/src/check_builtin.cpp b/src/check_builtin.cpp index 60a094408..7f5e759a6 100644 --- a/src/check_builtin.cpp +++ b/src/check_builtin.cpp @@ -7004,6 +7004,9 @@ gb_internal bool check_builtin_procedure(CheckerContext *c, Operand *operand, As variants[i] = alloc_type_pointer(bt->Union.variants[i]); } new_type->Union.variants = variants; + // This union is built directly (not via check_union_type), so signal that its variants + // are ready or a wait_signal_until_available on it would block forever. + wait_signal_set(&new_type->Union.variants_wait_signal); // NOTE(bill): Is this even correct? new_type->Union.node = operand->expr; @@ -7181,6 +7184,8 @@ gb_internal bool check_builtin_procedure(CheckerContext *c, Operand *operand, As } merged_union->Union.variants = slice_from_array(variants); + // Built directly (not via check_union_type); signal that variants are ready. + wait_signal_set(&merged_union->Union.variants_wait_signal); operand->mode = Addressing_Type; operand->type = merged_union; diff --git a/src/check_expr.cpp b/src/check_expr.cpp index e62e1e689..c913bc38b 100644 --- a/src/check_expr.cpp +++ b/src/check_expr.cpp @@ -95,7 +95,8 @@ gb_internal void check_struct_type (CheckerContext *c, Type *st Type *named_type = nullptr, Type *original_type_for_poly = nullptr, GenTypesData *poly_gen_types_to_unlock = nullptr); gb_internal void check_union_type (CheckerContext *c, Type *union_type, Ast *node, Array *poly_operands, - Type *named_type = nullptr, Type *original_type_for_poly = nullptr); + Type *named_type = nullptr, Type *original_type_for_poly = nullptr, + GenTypesData *poly_gen_types_to_unlock = nullptr); gb_internal Type * check_init_variable (CheckerContext *c, Entity *e, Operand *operand, String context_name); @@ -8814,7 +8815,9 @@ gb_internal CallArgumentError check_polymorphic_record_type(CheckerContext *c, O set_base_type(named_type, union_type); check_open_scope(&ctx, node); - check_union_type(&ctx, union_type, node, &ordered_operands, named_type, original_type); + check_union_type(&ctx, union_type, node, &ordered_operands, named_type, original_type, found_gen_types); + // check_union_type released found_gen_types->mutex after publishing the instantiation. + gen_types_locked = false; check_close_scope(&ctx); } else { GB_PANIC("Unsupported parametric polymorphic record type"); diff --git a/src/check_type.cpp b/src/check_type.cpp index 4ef8e2f77..ea7c7ed27 100644 --- a/src/check_type.cpp +++ b/src/check_type.cpp @@ -834,7 +834,7 @@ gb_internal void check_struct_type(CheckerContext *ctx, Type *struct_type, Ast * #undef ST_ALIGN } -gb_internal void check_union_type(CheckerContext *ctx, Type *union_type, Ast *node, Array *poly_operands, Type *named_type, Type *original_type_for_poly) { +gb_internal void check_union_type(CheckerContext *ctx, Type *union_type, Ast *node, Array *poly_operands, Type *named_type, Type *original_type_for_poly, GenTypesData *poly_gen_types_to_unlock) { GB_ASSERT(is_type_union(union_type)); ast_node(ut, UnionType, node); @@ -854,6 +854,16 @@ gb_internal void check_union_type(CheckerContext *ctx, Type *union_type, Ast *no // Finalize the name before publishing (see set_polymorphic_record_instantiation_name). set_polymorphic_record_instantiation_name(named_type, original_type_for_poly); add_polymorphic_record_entity(ctx, node, named_type, original_type_for_poly); + + // NOTE(bill): Release the originating record's gen_types mutex now that this instantiation + // is published, before checking its variants (which can instantiate other polymorphic + // records). Holding it across variant checking is what allows a cross-record ABBA deadlock + // between mutually-recursive generic unions instantiated concurrently. Concurrent requesters + // that find this in-progress entity synchronize on variants_wait_signal (set at the end of + // this function) before reading its variants. Mirrors check_struct_type. + if (poly_gen_types_to_unlock != nullptr) { + mutex_unlock(&poly_gen_types_to_unlock->mutex); + } } if (!union_type->Union.is_polymorphic) { @@ -951,6 +961,12 @@ gb_internal void check_union_type(CheckerContext *ctx, Type *union_type, Ast *no } } } + + // NOTE(bill): `variants` is now fully populated; wake any thread that found this (possibly + // in-progress, early-released) instantiation and is waiting to read its variants. Mirrors the + // struct fields_wait_signal. Set unconditionally: an unspecialized polymorphic template has no + // variants and is never published, so no one waits on it, but setting it is harmless. + wait_signal_set(&union_type->Union.variants_wait_signal); } gb_internal void check_enum_type(CheckerContext *ctx, Type *enum_type, Type *named_type, Ast *node) { diff --git a/src/types.cpp b/src/types.cpp index 2d43a07f5..8ebd60b86 100644 --- a/src/types.cpp +++ b/src/types.cpp @@ -180,6 +180,7 @@ struct TypeUnion { Type * polymorphic_params; // Type_Tuple Type * polymorphic_parent; Wait_Signal polymorphic_wait_signal; + Wait_Signal variants_wait_signal; // signalled once `variants` is populated (mirrors TypeStruct.fields_wait_signal) std::atomic tag_size; bool is_polymorphic; From 3b9ef40fae26cadac6aa73b012acca7ad1daf4f3 Mon Sep 17 00:00:00 2001 From: gingerBill Date: Wed, 30 Sep 2026 15:53:31 +0100 Subject: [PATCH 071/215] Clean up comments and add more wait signal guards for union variants --- src/check_builtin.cpp | 7 ++---- src/check_expr.cpp | 56 ++++++++++++++----------------------------- src/check_stmt.cpp | 3 +++ src/check_type.cpp | 37 +++++++--------------------- src/checker.cpp | 2 ++ src/types.cpp | 2 ++ 6 files changed, 35 insertions(+), 72 deletions(-) diff --git a/src/check_builtin.cpp b/src/check_builtin.cpp index 7f5e759a6..5dcec083a 100644 --- a/src/check_builtin.cpp +++ b/src/check_builtin.cpp @@ -7004,9 +7004,7 @@ gb_internal bool check_builtin_procedure(CheckerContext *c, Operand *operand, As variants[i] = alloc_type_pointer(bt->Union.variants[i]); } new_type->Union.variants = variants; - // This union is built directly (not via check_union_type), so signal that its variants - // are ready or a wait_signal_until_available on it would block forever. - wait_signal_set(&new_type->Union.variants_wait_signal); + wait_signal_set(&new_type->Union.variants_wait_signal); // built directly, not via check_union_type // NOTE(bill): Is this even correct? new_type->Union.node = operand->expr; @@ -7184,8 +7182,7 @@ gb_internal bool check_builtin_procedure(CheckerContext *c, Operand *operand, As } merged_union->Union.variants = slice_from_array(variants); - // Built directly (not via check_union_type); signal that variants are ready. - wait_signal_set(&merged_union->Union.variants_wait_signal); + wait_signal_set(&merged_union->Union.variants_wait_signal); // built directly, not via check_union_type operand->mode = Addressing_Type; operand->type = merged_union; diff --git a/src/check_expr.cpp b/src/check_expr.cpp index c913bc38b..71094ff76 100644 --- a/src/check_expr.cpp +++ b/src/check_expr.cpp @@ -389,9 +389,8 @@ gb_internal void check_scope_decls(CheckerContext *c, Slice const &nodes, } } -// NOTE(bill): Reuse an already-generated polymorphic procedure specialization `other`. -// Records it as the result and, if its body has not been checked yet, schedules it. -// The caller must have released `gen_procs->mutex` before calling this (it queues work). +// Reuse an existing generated specialization `other`, scheduling its body if unchecked. +// Caller must have released gen_procs->mutex first. gb_internal bool reuse_gen_polymorphic_procedure(Checker *checker, Entity *other, Ast *poly_def_node, PolyProcData *poly_proc_data) { if (poly_proc_data) { poly_proc_data->gen_entity = other; @@ -585,13 +584,8 @@ gb_internal bool find_or_generate_polymorphic_procedure(CheckerContext *old_c, E } - // NOTE(bill): The two lookups above ran under a shared lock which was then released, so a - // concurrent instantiation of this same specialization could have been published in the gap. - // Acquire the exclusive lock now and hold it across the re-check below and the array_add at the - // end, so that finding-then-publishing is atomic. Without this, two threads racing on the same - // specialization could both miss and each build and enqueue a distinct entity for it. The lock - // is only released here on an early return (a late-arriving duplicate); the normal path releases - // it after publishing. (@local-mutex) + // Re-check under the exclusive lock (the lookups above ran under a released shared lock) and + // hold it across construction + array_add so find-then-publish is atomic. (@local-mutex) rw_mutex_lock(&gen_procs->mutex); // @local-mutex for (Entity *other : gen_procs->procs) { if (are_types_identical(base_type(other->type), final_proc_type)) { @@ -670,8 +664,6 @@ gb_internal bool find_or_generate_polymorphic_procedure(CheckerContext *old_c, E } } - // NOTE(bill): The exclusive lock has been held since just before construction (see above), - // so this publish is atomic with the re-check that preceded it. array_add(&gen_procs->procs, entity); rw_mutex_unlock(&gen_procs->mutex); // @local-mutex @@ -923,6 +915,7 @@ gb_internal i64 check_distance_between_types(CheckerContext *c, Operand *operand } if (is_type_union(dst) && allow_unions) { + wait_signal_until_available(&dst->Union.variants_wait_signal); for (Type *vt : dst->Union.variants) { if (are_types_identical(vt, s)) { return 1; @@ -1587,13 +1580,9 @@ gb_internal bool is_polymorphic_type_assignable(CheckerContext *c, Type *poly, T return is_polymorphic_type_assignable(c, poly->Array.elem, source->EnumeratedArray.elem, true, false); } - // NOTE(bill): Capture the polymorphic element node ($T) before rewriting `poly` - // in place. Array.elem and EnumeratedArray.elem share the same union offset, so - // assigning EnumeratedArray.elem below would otherwise clobber the pointer to the - // shared $T generic node, and the element-binding recursion at the end would - // compare concrete-vs-concrete and never bind $T (leaving it unresolved in the - // procedure body). Keeping the node lets that recursion mutate it in place, just - // like the fixed-array branch above. + // Capture $T before rewriting `poly`: Array.elem and EnumeratedArray.elem share a + // union offset, so the assignment below would clobber it and the elem recursion + // would never bind $T. Type *poly_elem = poly->Array.elem; poly->kind = Type_EnumeratedArray; @@ -1636,10 +1625,7 @@ gb_internal bool is_polymorphic_type_assignable(CheckerContext *c, Type *poly, T } return is_polymorphic_type_assignable(c, poly->EnumeratedArray.index, source->EnumeratedArray.index, true, modify_type); } - // NOTE(bill): Both are evaluated (not short-circuited) so their modify_type side effects - // are applied, but both the index and the element must match for the pattern to hold. - // A previous `index || elem` here over-accepted (e.g. `[Dir]$T` vs `[Other]f32`), binding - // `$T` and leaving the index mismatch to be reported later as a confusing assignment error. + // Evaluate both (for modify_type side effects) but require both to match. bool index = is_polymorphic_type_assignable(c, poly->EnumeratedArray.index, source->EnumeratedArray.index, true, modify_type); bool elem = is_polymorphic_type_assignable(c, poly->EnumeratedArray.elem, source->EnumeratedArray.elem, true, modify_type); return index && elem; @@ -1813,11 +1799,7 @@ gb_internal bool is_polymorphic_type_assignable(CheckerContext *c, Type *poly, T return false; case Type_Map: if (source->kind == Type_Map) { - // NOTE(bill): Both are evaluated (not short-circuited) so their modify_type side effects - // are applied, but both the key and the value must match for the pattern to hold. A - // previous `key || value` here over-accepted (e.g. `map[int]$V` vs `map[string]f32`), - // binding `$V` and leaving the key mismatch to be reported later as a confusing - // assignment error, and would finalize a map that was only partially matched. + // Evaluate both (for modify_type side effects) but require both to match. bool key = is_polymorphic_type_assignable(c, poly->Map.key, source->Map.key, true, modify_type); bool value = is_polymorphic_type_assignable(c, poly->Map.value, source->Map.value, true, modify_type); if (key && value) { @@ -5470,6 +5452,7 @@ gb_internal void convert_to_typed(CheckerContext *c, Operand *operand, Type *tar case Type_Union: if (!is_operand_nil(*operand) && !is_operand_uninit(*operand)) { TEMPORARY_ALLOCATOR_GUARD(); + wait_signal_until_available(&t->Union.variants_wait_signal); isize count = t->Union.variants.count; ValidIndexAndScore *valids = temporary_alloc_array(count); @@ -8771,11 +8754,9 @@ gb_internal CallArgumentError check_polymorphic_record_type(CheckerContext *c, O { GenTypesData *found_gen_types = ensure_polymorphic_record_entity_has_gen_types(c, original_type); mutex_lock(&found_gen_types->mutex); - // NOTE(bill): For a struct instantiation, check_struct_type releases this mutex early (right - // after publishing the instantiation into gen_types, before checking its fields) to avoid a - // cross-record ABBA deadlock between mutually-recursive generic records; it signals that by - // leaving `gen_types_locked` cleared below. The union path and the cache-hit path keep the - // mutex until the end of this scope. + // check_struct_type/check_union_type release this mutex early (after publishing, before + // checking members) to avoid a cross-record ABBA, clearing gen_types_locked. The cache-hit + // path keeps it until scope end. bool gen_types_locked = true; defer (if (gen_types_locked) mutex_unlock(&found_gen_types->mutex)); @@ -8823,11 +8804,6 @@ gb_internal CallArgumentError check_polymorphic_record_type(CheckerContext *c, O GB_PANIC("Unsupported parametric polymorphic record type"); } - // NOTE(bill): The instantiation's canonical name is now set inside - // check_struct_type/check_union_type (before it is published into gen_types), so that a - // concurrent thread which finds the in-progress struct instantiation never observes a - // torn name. - operand->mode = Addressing_Type; operand->type = named_type; } @@ -9711,6 +9687,7 @@ gb_internal bool attempt_implicit_selector_expr(CheckerContext *c, Operand *o, A TEMPORARY_ALLOCATOR_GUARD(); Type *union_type = base_type(th); + wait_signal_until_available(&union_type->Union.variants_wait_signal); auto operands = array_make(temporary_allocator(), 0, union_type->Union.variants.count); for (Type *vt : union_type->Union.variants) { @@ -12016,6 +11993,9 @@ gb_internal ExprKind check_type_assertion(CheckerContext *c, Operand *o, Ast *no Type *src = type_deref(o->type); Type *bsrc = base_type(src); + if (bsrc->kind == Type_Union) { + wait_signal_until_available(&bsrc->Union.variants_wait_signal); + } if (ta->type != nullptr && ta->type->kind == Ast_UnaryExpr && ta->type->UnaryExpr.op.kind == Token_Question) { diff --git a/src/check_stmt.cpp b/src/check_stmt.cpp index 0daaeec10..ffc6f4cc0 100644 --- a/src/check_stmt.cpp +++ b/src/check_stmt.cpp @@ -1539,6 +1539,9 @@ gb_internal void check_type_switch_stmt(CheckerContext *ctx, Ast *node, u32 mod_ bool saw_nil = false; // TODO(bill): Make robust Type *bt = base_type(type_deref(x.type)); + if (bt->kind == Type_Union) { + wait_signal_until_available(&bt->Union.variants_wait_signal); + } Type *case_type = nullptr; for (Ast *type_expr : cc->list) { diff --git a/src/check_type.cpp b/src/check_type.cpp index ea7c7ed27..be617cb7d 100644 --- a/src/check_type.cpp +++ b/src/check_type.cpp @@ -662,11 +662,8 @@ gb_internal Entity *find_polymorphic_record_entity(GenTypesData *found_gen_types }; -// NOTE(bill): Give a freshly-instantiated polymorphic record its canonical name -// (e.g. `Foo($T=int, $N=4)`). This depends only on the record's polymorphic parameters, so it -// must be called *before* the instantiation is published into gen_types via -// add_polymorphic_record_entity: once published, a concurrent thread may read the name, and -// mutating the `Named.name` String in place afterwards would be a torn read. +// Set the instantiation's canonical name (e.g. `Foo($T=int)`) before it is published, so a +// concurrent finder never observes a torn Named.name. gb_internal void set_polymorphic_record_instantiation_name(Type *named_type, Type *original_type) { Type *bt = base_type(named_type); if (bt->kind != Type_Struct && bt->kind != Type_Union) { @@ -755,13 +752,8 @@ gb_internal void check_struct_type(CheckerContext *ctx, Type *struct_type, Ast * set_polymorphic_record_instantiation_name(named_type, original_type_for_poly); add_polymorphic_record_entity(ctx, node, named_type, original_type_for_poly); - // NOTE(bill): This instantiation is now published in the originating record's gen_types - // cache (its polymorphic params are set and signalled above), so a concurrent thread can - // find it via find_polymorphic_record_entity and synchronize on the fields_wait_signal - // below when it needs the layout. Release the caller-held gen_types mutex here, *before* - // checking the fields: field checking can instantiate other polymorphic records (locking - // their gen_types mutexes), and holding this one across that is what allows a cross-record - // ABBA deadlock between two mutually-recursive generic records instantiated concurrently. + // Release before field checking to avoid a cross-record ABBA; finders wait on + // fields_wait_signal (set at the end). if (poly_gen_types_to_unlock != nullptr) { mutex_unlock(&poly_gen_types_to_unlock->mutex); } @@ -855,12 +847,8 @@ gb_internal void check_union_type(CheckerContext *ctx, Type *union_type, Ast *no set_polymorphic_record_instantiation_name(named_type, original_type_for_poly); add_polymorphic_record_entity(ctx, node, named_type, original_type_for_poly); - // NOTE(bill): Release the originating record's gen_types mutex now that this instantiation - // is published, before checking its variants (which can instantiate other polymorphic - // records). Holding it across variant checking is what allows a cross-record ABBA deadlock - // between mutually-recursive generic unions instantiated concurrently. Concurrent requesters - // that find this in-progress entity synchronize on variants_wait_signal (set at the end of - // this function) before reading its variants. Mirrors check_struct_type. + // Release before variant checking to avoid a cross-record ABBA; finders wait on + // variants_wait_signal (set at the end). Mirrors check_struct_type. if (poly_gen_types_to_unlock != nullptr) { mutex_unlock(&poly_gen_types_to_unlock->mutex); } @@ -880,13 +868,8 @@ gb_internal void check_union_type(CheckerContext *ctx, Type *union_type, Ast *no for_array(i, ut->variants) { Ast *node = ut->variants[i]; if (union_type->Union.is_polymorphic && poly_operands == nullptr) { - // NOTE(bill): Do not check (or add) the variant type expressions of an unspecialized - // polymorphic union template. A variant can reference other polymorphic records, - // including mutually-recursive ones (`UA($T){ ^UB(T) }` / `UB($T){ ^UA(T) }`), and - // because unspecialized instantiations are never published into gen_types, checking them - // here recurses unboundedly (UA[T] -> UB[T] -> UA[T] -> ...) and overflows the stack. - // This mirrors check_struct_type, which skips field checking for a polymorphic record; - // concrete instantiations (poly_operands != nullptr) still check their variants below. + // Skip checking variant types of an unspecialized template: a variant may reference a + // mutually-recursive polymorphic union and recurse unboundedly. Mirrors check_struct_type. continue; } Type *t = check_type_expr(ctx, node, nullptr); @@ -962,10 +945,6 @@ gb_internal void check_union_type(CheckerContext *ctx, Type *union_type, Ast *no } } - // NOTE(bill): `variants` is now fully populated; wake any thread that found this (possibly - // in-progress, early-released) instantiation and is waiting to read its variants. Mirrors the - // struct fields_wait_signal. Set unconditionally: an unspecialized polymorphic template has no - // variants and is never published, so no one waits on it, but setting it is harmless. wait_signal_set(&union_type->Union.variants_wait_signal); } diff --git a/src/checker.cpp b/src/checker.cpp index 59f1c9c25..fa95f763d 100644 --- a/src/checker.cpp +++ b/src/checker.cpp @@ -2453,6 +2453,8 @@ gb_internal void add_type_info_type_internal(CheckerContext *c, Type *t) { break; case Type_Union: + if (bt->Union.variants_wait_signal.futex.load() == 0) + return; if (union_tag_size(t) > 0) { add_type_info_type_internal(c, union_tag_type(t)); } else { diff --git a/src/types.cpp b/src/types.cpp index 8ebd60b86..69112268d 100644 --- a/src/types.cpp +++ b/src/types.cpp @@ -3537,6 +3537,7 @@ gb_internal bool union_variant_index_types_equal(Type *v, Type *vt) { gb_internal i64 union_variant_index_checked(Type *u, Type *v) { u = base_type(u); GB_ASSERT(u->kind == Type_Union); + wait_signal_until_available(&u->Union.variants_wait_signal); for_array(i, u->Union.variants) { Type *vt = u->Union.variants[i]; @@ -3555,6 +3556,7 @@ gb_internal i64 union_variant_index_checked(Type *u, Type *v) { gb_internal bool union_is_variant_of(Type *u, Type *v) { u = base_type(u); GB_ASSERT(u->kind == Type_Union); + wait_signal_until_available(&u->Union.variants_wait_signal); for_array(i, u->Union.variants) { Type *vt = u->Union.variants[i]; From c7659bb9c797fc5ee1df5c58e37e917407ef1b9e Mon Sep 17 00:00:00 2001 From: gingerBill Date: Wed, 30 Sep 2026 16:14:52 +0100 Subject: [PATCH 072/215] Resolve the matrix generics slightly better --- src/check_type.cpp | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/src/check_type.cpp b/src/check_type.cpp index be617cb7d..76c8a494c 100644 --- a/src/check_type.cpp +++ b/src/check_type.cpp @@ -3346,24 +3346,24 @@ gb_internal void check_matrix_type(CheckerContext *ctx, Type **type, Ast *node) Type *elem = check_type_expr(ctx, mt->elem, nullptr); - - if (!is_type_valid_for_matrix_elems(elem)) { - if (elem == t_typeid) { - Entity *e = entity_of_node(mt->elem); - if (e && e->kind == Entity_TypeName && e->TypeName.is_type_alias) { - // HACK TODO(bill): This is to allow polymorphic parameters for matrix elements - // proc($T: typeid) -> matrix[2, 2]T - // - // THIS IS NEEDS TO BE FIXED AND NOT USE THIS HACK - goto type_assign; - } + + // A `$T: typeid` param referenced by ident (e.g. proc($T: typeid) -> matrix[2,2]T) resolves to + // t_typeid; represent it as its Type_Generic so the element is properly polymorphic. + if (elem == t_typeid) { + Entity *e = entity_of_node(mt->elem); + if (e != nullptr && e->kind == Entity_TypeName && e->TypeName.is_type_alias) { + Type *gen = alloc_type_generic(ctx->scope, 0, entity_interned_name(e), nullptr); + gen->Generic.entity = e; + elem = gen; } + } + + if (!is_type_valid_for_matrix_elems(elem)) { gbString s = type_to_string(elem); error(column.expr, "Matrix elements types are limited to integers, floats, and complex, got %s", s); gb_string_free(s); } -type_assign:; - + *type = alloc_type_matrix(elem, row_count, column_count, generic_row, generic_column, mt->is_row_major); return; From 83bf868688e0d9cc50c1234da3385930e0ed18c2 Mon Sep 17 00:00:00 2001 From: Matthias Huerbe Date: Wed, 30 Sep 2026 17:17:51 +0200 Subject: [PATCH 073/215] cleanup of fast_float and small perf win with @(cold) tagging --- core/strconv/fast_float.odin | 187 ++++++++--------------------------- core/strconv/strconv.odin | 57 +++++++---- 2 files changed, 81 insertions(+), 163 deletions(-) diff --git a/core/strconv/fast_float.odin b/core/strconv/fast_float.odin index a1e39d61e..36f3f7558 100644 --- a/core/strconv/fast_float.odin +++ b/core/strconv/fast_float.odin @@ -138,7 +138,7 @@ A fast scanner for the decimal float syntax: `[+-] digits [. digits] [(e|E) [+-] It skips a `_` between digits **Returns** -- mantissa, exp: The value is `mantissa * 10^exp`. If `trunc` is true, the significant digits after the first 19 were dropped, and at least one of them was not zero. +- mantissa, exp: The value is `mantissa * 10^exp`. If `trunc` is true, the scanner dropped the significant digits after the first 19. Then the exact value is in the range `[mantissa, mantissa + 1) * 10^exp`. - neg: The number has a minus sign. - nr: The number of bytes in the number. - ok: `false` if `s` is not a number @@ -168,6 +168,9 @@ parse_number_string :: #force_inline proc "contextless" (s: string) -> (mantissa digits += more } + int_digits := digits + digits_end := i + // Fraction part if i < n && s[i] == '.' { i += 1 @@ -185,14 +188,11 @@ parse_number_string :: #force_inline proc "contextless" (s: string) -> (mantissa } exp = -frac_digits digits += frac_digits + digits_end = i } if digits == 0 { return } - if digits > MAX_SIG_DIGITS { - // The mantissa may have overflowed (unless most digits are leading zeros). - return scan_decimal_exact(s) - } // Exponent part. The first byte after `e` and the sign must be a digit. if i < n && lower(s[i]) == 'e' { @@ -218,6 +218,10 @@ parse_number_string :: #force_inline proc "contextless" (s: string) -> (mantissa exp += -x if exp_neg else x } + if digits > MAX_SIG_DIGITS { + mantissa, exp, trunc = read_significant_digits(s, int_start, digits_end, int_digits, exp + (digits - int_digits)) + } + if mantissa == 0 { exp = 0 } @@ -259,154 +263,45 @@ parse_exponent_with_separators :: proc "contextless" (s: string, i: int, x: int) return i, x } -// It is only used for numbers with more than 19 digits -scan_decimal_exact :: proc "contextless" (s: string) -> (mantissa: u64, exp: int, neg, trunc: bool, nr: int, ok: bool) #no_bounds_check { - n := len(s) - if n == 0 { - return - } - neg = s[0] == '-' - i := int(neg || s[0] == '+') - if i+2 < n && s[i] == '0' && lower(s[i+1]) == 'x' { - return // a hex float - } +/* +Reads the first 19 significant digits of a decimal number again. The scanner uses it only +if the number has more than 19 digits, because then the mantissa can overflow. - m: u64 // significant digits - nd: int // number of significant digits in m - e: int // decimal exponent - saw_digits := false +**Inputs** +- s, i: The input, and the position of the first digit before the `.`. +- end: The position after the last digit. +- int_digits: The number of digits before the `.`. +- e: The exponent after the `e`, or 0. - // Integer part. Leading zeros do not count as significant digits, and `_` is skipped - for i+8 <= n && read8_to_u64(s, i) == 0x3030_3030_3030_3030 { - i += 8 - saw_digits = true - } - for i < n && (s[i] == '0' || s[i] == '_') { - saw_digits ||= s[i] == '0' +**Returns** +- mantissa, exp: The value is `mantissa * 10^exp`, without the digits that were not read again. +- trunc: `true` if the procedure did not read all the digits again. +*/ +@(cold) +read_significant_digits :: proc "contextless" (s: string, i, end, int_digits, e: int) -> (mantissa: u64, exp: int, trunc: bool) #no_bounds_check { + i := i + exp = e + int_left := int_digits + nd := 0 + for i < end && nd < MAX_SIG_DIGITS { + c := s[i] i += 1 - } - for i+8 <= n && nd+8 <= MAX_SIG_DIGITS { - v := read8_to_u64(s, i) - if !is_made_of_eight_digits_fast(v) { - break + if c - '0' > 9 { + continue // a `_` or the `.` } - m = m*100_000_000 + parse_eight_digits_unrolled(v) - nd += 8 - i += 8 - saw_digits = true - } - for i < n { - d := s[i] - '0' - if d > 9 { - if s[i] != '_' { - break - } - } else if nd < MAX_SIG_DIGITS { - m = m*10 + u64(d) - nd += 1 - saw_digits = true + if int_left > 0 { + int_left -= 1 } else { - e += 1 // dropped digit - trunc ||= d != 0 + exp -= 1 } - i += 1 + if mantissa == 0 && c == '0' { + continue + } + mantissa = mantissa*10 + u64(c - '0') + nd += 1 } - - // Fraction part - if i < n && s[i] == '.' { - i += 1 - if m == 0 { - // Leading zeros of the fraction change only the exponent - for i+8 <= n && read8_to_u64(s, i) == 0x3030_3030_3030_3030 { - e -= 8 - i += 8 - saw_digits = true - } - for i < n && (s[i] == '0' || s[i] == '_') { - if s[i] == '0' { - e -= 1 - saw_digits = true - } - i += 1 - } - } - for i+8 <= n && nd+8 <= MAX_SIG_DIGITS { - v := read8_to_u64(s, i) - if !is_made_of_eight_digits_fast(v) { - break - } - m = m*100_000_000 + parse_eight_digits_unrolled(v) - nd += 8 - e -= 8 - i += 8 - saw_digits = true - } - if i+4 <= n && nd+4 <= MAX_SIG_DIGITS { - v := read4_to_u32(s, i) - if is_made_of_four_digits_fast(v) { - m = m*10_000 + parse_four_digits_unrolled(v) - nd += 4 - e -= 4 - i += 4 - saw_digits = true - } - } - for i < n { - d := s[i] - '0' - if d > 9 { - if s[i] != '_' { - break - } - } else if m == 0 && d == 0 { - e -= 1 // a leading zero of the fraction - saw_digits = true - } else if nd < MAX_SIG_DIGITS { - m = m*10 + u64(d) - nd += 1 - e -= 1 - saw_digits = true - } else { - trunc ||= d != 0 // dropped digit - saw_digits = true - } - i += 1 - } - } - if !saw_digits { - return - } - - // Exponent part. The first byte after `e` and the sign must be a digit - if i < n && lower(s[i]) == 'e' { - i += 1 - exp_neg := false - if i < n && (s[i] == '+' || s[i] == '-') { - exp_neg = s[i] == '-' - i += 1 - } - if i >= n || s[i] - '0' > 9 { - return // not a valid exponent, so not a number - } - x := 0 - for i < n { - d := s[i] - '0' - if d > 9 { - if s[i] != '_' { - break - } - } else if x < 100_000 { // larger exponents overflow or underflow anyway - x = x*10 + int(d) - } - i += 1 - } - e += -x if exp_neg else x - } - - if m == 0 { - e = 0 - trunc = false - } - return m, e, neg, trunc, i, true + exp += int_left + return mantissa, exp, i < end } // Loads 8 bytes starting at `s[i]` in little-endian order diff --git a/core/strconv/strconv.odin b/core/strconv/strconv.odin index 232b703ce..b29b9fd0e 100644 --- a/core/strconv/strconv.odin +++ b/core/strconv/strconv.odin @@ -917,7 +917,8 @@ parse_float_prefix_generic :: proc($T: typeid, str: string) -> (value: T, nr: in } // 0h string to float case - if len(str) > 2 && str[0] == '0' && str[1] == 'h' { + @(cold) + parse_0h :: proc "contextless" ($F: typeid, str: string) -> (value: F, nr: int, ok: bool) { as_int: u64 digits: int i := 2 @@ -958,17 +959,50 @@ parse_float_prefix_generic :: proc($T: typeid, str: string) -> (value: T, nr: in switch digits { case 4: - value = cast(T)transmute(f16)cast(u16)as_int + value = cast(F)transmute(f16)cast(u16)as_int case 8: - value = cast(T)transmute(f32)cast(u32)as_int + value = cast(F)transmute(f32)cast(u32)as_int case 16: - value = cast(T)transmute(f64)as_int + value = cast(F)transmute(f64)as_int case: ok = false } return } + @(cold) + parse_special_or_hex :: proc "contextless" ($F: typeid, str: string) -> (value: F, nr: int, ok: bool) { + when F == f64 { + Bits :: u64 + info := &_f64_info + } else { + Bits :: u32 + info := &_f32_info + } + if f, n, special := check_special(str); special { + return F(f), n, true + } + mantissa: u64 + exp: int + neg, trunc: bool + mantissa, exp, neg, trunc, nr = scan_hex_float(str) or_return + b, in_range := hex_float_bits(mantissa, exp, neg, trunc, info) + return transmute(F)Bits(b), nr, in_range + } + + @(cold) + parse_slow :: proc($F: typeid, str: string, info: ^Float_Info) -> (value: F, ok: bool) { + when F == f64 { Bits :: u64 } else { Bits :: u32 } + d: decimal.Decimal + decimal.set(&d, str) + b, overflow := decimal_to_float_bits(&d, info) + return transmute(F)Bits(b), !overflow + } + + if len(str) > 2 && str[0] == '0' && str[1] == 'h' { + return parse_0h(T, str) + } + when T == f64 { Bits :: u64 info := &_f64_info @@ -982,13 +1016,7 @@ parse_float_prefix_generic :: proc($T: typeid, str: string) -> (value: T, nr: in neg, trunc: bool mantissa, exp, neg, trunc, nr, ok = parse_number_string(str) if !ok { - // Not a decimal number: try "inf", "nan" and a hexadecimal float. - if f, n, special := check_special(str); special { - return T(f), n, true - } - mantissa, exp, neg, trunc, nr = scan_hex_float(str) or_return - b, in_range := hex_float_bits(mantissa, exp, neg, trunc, info) - return transmute(T)Bits(b), nr, in_range + return parse_special_or_hex(T, str) } // Clinger's fast path algorithm @@ -1048,12 +1076,7 @@ parse_float_prefix_generic :: proc($T: typeid, str: string) -> (value: T, nr: in return transmute(T)Bits(b), nr, ok } - // Slow path for arbitrary-precision decimal - d: decimal.Decimal - decimal.set(&d, str[:nr]) - b, overflow := decimal_to_float_bits(&d, info) - value = transmute(T)Bits(b) - ok = !overflow + value, ok = parse_slow(T, str[:nr], info) return } /* From d8c5c3d69a7d30c8cbadbd8180f03a056a27b2c2 Mon Sep 17 00:00:00 2001 From: Matthias Huerbe Date: Wed, 30 Sep 2026 17:30:15 +0200 Subject: [PATCH 074/215] moved hex out of special case for float parsing --- core/strconv/strconv.odin | 29 +++++++++++------------------ 1 file changed, 11 insertions(+), 18 deletions(-) diff --git a/core/strconv/strconv.odin b/core/strconv/strconv.odin index b29b9fd0e..abcef0e43 100644 --- a/core/strconv/strconv.odin +++ b/core/strconv/strconv.odin @@ -971,23 +971,10 @@ parse_float_prefix_generic :: proc($T: typeid, str: string) -> (value: T, nr: in } @(cold) - parse_special_or_hex :: proc "contextless" ($F: typeid, str: string) -> (value: F, nr: int, ok: bool) { - when F == f64 { - Bits :: u64 - info := &_f64_info - } else { - Bits :: u32 - info := &_f32_info - } - if f, n, special := check_special(str); special { - return F(f), n, true - } - mantissa: u64 - exp: int - neg, trunc: bool - mantissa, exp, neg, trunc, nr = scan_hex_float(str) or_return - b, in_range := hex_float_bits(mantissa, exp, neg, trunc, info) - return transmute(F)Bits(b), nr, in_range + parse_special :: proc "contextless" ($F: typeid, str: string) -> (value: F, nr: int, ok: bool) { + f: f64 + f, nr, ok = check_special(str) + return F(f), nr, ok } @(cold) @@ -1016,7 +1003,13 @@ parse_float_prefix_generic :: proc($T: typeid, str: string) -> (value: T, nr: in neg, trunc: bool mantissa, exp, neg, trunc, nr, ok = parse_number_string(str) if !ok { - return parse_special_or_hex(T, str) + // Not a decimal number: try a hexadecimal float, then "inf" and "nan". + mantissa, exp, neg, trunc, nr, ok = scan_hex_float(str) + if !ok { + return parse_special(T, str) + } + b, in_range := hex_float_bits(mantissa, exp, neg, trunc, info) + return transmute(T)Bits(b), nr, in_range } // Clinger's fast path algorithm From cd3570eef89096eae413b81857f44295c34444d5 Mon Sep 17 00:00:00 2001 From: Alexander Zhura Date: Wed, 30 Sep 2026 19:03:52 +0300 Subject: [PATCH 075/215] Impl simd x86 avx512 evex512 --- core/simd/x86/avx512bw.odin | 4 ++-- core/simd/x86/avx512f.odin | 16 ++++++++-------- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/core/simd/x86/avx512bw.odin b/core/simd/x86/avx512bw.odin index 861b6af6e..a5e88f568 100644 --- a/core/simd/x86/avx512bw.odin +++ b/core/simd/x86/avx512bw.odin @@ -29,7 +29,7 @@ _mm256_srlv_epi16 :: #force_inline proc "c" (a: __m256i, count: __m256i) -> __m2 // the corresponding element in `count` while shifting in zeros, and store the results in `dst`. // // [Intel's documentation](https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm512_srlv_epi16) -@(require_results, enable_target_feature="avx512bw") +@(require_results, enable_target_feature="avx512bw,evex512") _mm512_srlv_epi16 :: #force_inline proc "c" (a: __m512i, count: __m512i) -> __m512i { b := simd.lanes_lt(transmute(simd.u16x32)count, simd.u16x32(8 * size_of(u16))) c := simd.select(b, transmute(simd.u16x32)count, simd.u16x32(0)) @@ -62,7 +62,7 @@ _mm256_sllv_epi16 :: #force_inline proc "c" (a: __m256i, count: __m256i) -> __m2 // the corresponding element in `count` while shifting in zeros, and store the results in `dst`. // // [Intel's documentation](https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm512_sllv_epi16) -@(require_results, enable_target_feature="avx512bw") +@(require_results, enable_target_feature="avx512bw,evex512") _mm512_sllv_epi16 :: #force_inline proc "c" (a: __m512i, count: __m512i) -> __m512i { b := simd.lanes_lt(transmute(simd.u16x32)count, simd.u16x32(8 * size_of(u16))) c := simd.select(b, transmute(simd.u16x32)count, simd.u16x32(0)) diff --git a/core/simd/x86/avx512f.odin b/core/simd/x86/avx512f.odin index 8053abe87..279273ae0 100644 --- a/core/simd/x86/avx512f.odin +++ b/core/simd/x86/avx512f.odin @@ -7,7 +7,7 @@ import "core:simd" // the corresponding element in `count` while shifting in zeros, and store the results in `dst`. // // [Intel's documentation](https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm512_srlv_epi32) -@(require_results, enable_target_feature="avx512f") +@(require_results, enable_target_feature="avx512f,evex512") _mm512_srlv_epi32 :: #force_inline proc "c" (a: __m512i, count: __m512i) -> __m512i { b := simd.lanes_lt(transmute(simd.u32x16)count, simd.u32x16(8 * size_of(u32))) c := simd.select(b, transmute(simd.u32x16)count, simd.u32x16(0)) @@ -18,7 +18,7 @@ _mm512_srlv_epi32 :: #force_inline proc "c" (a: __m512i, count: __m512i) -> __m5 // the corresponding element in `count` while shifting in zeros, and store the results in `dst`. // // [Intel's documentation](https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm512_srlv_epi64) -@(require_results, enable_target_feature="avx512f") +@(require_results, enable_target_feature="avx512f,evex512") _mm512_srlv_epi64 :: #force_inline proc "c" (a: __m512i, count: __m512i) -> __m512i { b := simd.lanes_lt(transmute(simd.u64x8)count, simd.u64x8(8 * size_of(u64))) c := simd.select(b, transmute(simd.u64x8)count, simd.u64x8(0)) @@ -29,7 +29,7 @@ _mm512_srlv_epi64 :: #force_inline proc "c" (a: __m512i, count: __m512i) -> __m5 // the corresponding element in `count` while shifting in zeros, and store the results in `dst`. // // [Intel's documentation](https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm512_sllv_epi32) -@(require_results, enable_target_feature="avx512f") +@(require_results, enable_target_feature="avx512f,evex512") _mm512_sllv_epi32 :: #force_inline proc "c" (a: __m512i, count: __m512i) -> __m512i { b := simd.lanes_lt(transmute(simd.u32x16)count, simd.u32x16(8 * size_of(u32))) c := simd.select(b, transmute(simd.u32x16)count, simd.u32x16(0)) @@ -40,7 +40,7 @@ _mm512_sllv_epi32 :: #force_inline proc "c" (a: __m512i, count: __m512i) -> __m5 // the corresponding element in `count` while shifting in zeros, and store the results in `dst`. // // [Intel's documentation](https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm512_sllv_epi64) -@(require_results, enable_target_feature="avx512f") +@(require_results, enable_target_feature="avx512f,evex512") _mm512_sllv_epi64 :: #force_inline proc "c" (a: __m512i, count: __m512i) -> __m512i { b := simd.lanes_lt(transmute(simd.u64x8)count, simd.u64x8(8 * size_of(u64))) c := simd.select(b, transmute(simd.u64x8)count, simd.u64x8(0)) @@ -50,7 +50,7 @@ _mm512_sllv_epi64 :: #force_inline proc "c" (a: __m512i, count: __m512i) -> __m5 // Compute the bitwise AND of 512 bits (representing integer data) in `a` and `b`, and store the result in `dst`. // // [Intel's documentation](https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm512_and_si512) -@(require_results, enable_target_feature="avx512f") +@(require_results, enable_target_feature="avx512f,evex512") _mm512_and_si512 :: #force_inline proc "c" (a, b: __m512i) -> __m512i { return simd.bit_and(a, b) } @@ -58,7 +58,7 @@ _mm512_and_si512 :: #force_inline proc "c" (a, b: __m512i) -> __m512i { // Compute the bitwise NOT of 512 bits (representing integer data) in `a` and then AND with `b`, and store the result in `dst`. // // [Intel's documentation](https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm512_andnot_si512) -@(require_results, enable_target_feature="avx512f") +@(require_results, enable_target_feature="avx512f,evex512") _mm512_andnot_si512 :: #force_inline proc "c" (a, b: __m512i) -> __m512i { c := __m512i(-1) return simd.bit_and(simd.bit_xor(a, c), b) @@ -67,7 +67,7 @@ _mm512_andnot_si512 :: #force_inline proc "c" (a, b: __m512i) -> __m512i { // Compute the bitwise OR of 512 bits (representing integer data) in `a` and `b`, and store the result in `dst`. // // [Intel's documentation](https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm512_or_si512) -@(require_results, enable_target_feature="avx512f") +@(require_results, enable_target_feature="avx512f,evex512") _mm512_or_si512 :: #force_inline proc "c" (a, b: __m512i) -> __m512i { return simd.bit_or(a, b) } @@ -75,7 +75,7 @@ _mm512_or_si512 :: #force_inline proc "c" (a, b: __m512i) -> __m512i { // Compute the bitwise XOR of 512 bits (representing integer data) in `a` and `b`, and store the result in `dst`. // // [Intel's documentation](https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm512_xor_si512) -@(require_results, enable_target_feature="avx512f") +@(require_results, enable_target_feature="avx512f,evex512") _mm512_xor_si512 :: #force_inline proc "c" (a, b: __m256i) -> __m256i { return simd.bit_xor(a, b) } From 796fd261a455474353a8846badf3ae4b20b8aa5d Mon Sep 17 00:00:00 2001 From: gingerBill Date: Wed, 30 Sep 2026 17:36:14 +0100 Subject: [PATCH 076/215] Begin work on the improving the parapoly substitution engine --- src/check_expr.cpp | 23 ++-- src/check_type.cpp | 297 +++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 305 insertions(+), 15 deletions(-) diff --git a/src/check_expr.cpp b/src/check_expr.cpp index 71094ff76..b55bd5de9 100644 --- a/src/check_expr.cpp +++ b/src/check_expr.cpp @@ -1580,22 +1580,15 @@ gb_internal bool is_polymorphic_type_assignable(CheckerContext *c, Type *poly, T return is_polymorphic_type_assignable(c, poly->Array.elem, source->EnumeratedArray.elem, true, false); } - // Capture $T before rewriting `poly`: Array.elem and EnumeratedArray.elem share a - // union offset, so the assignment below would clobber it and the elem recursion - // would never bind $T. + // Resolve `[$N]$T` to an enumerated array by constructing the concrete node + // (keeping the $T element node) and finalizing poly to it, rather than rewriting + // poly's kind and fields one at a time. Type *poly_elem = poly->Array.elem; - - poly->kind = Type_EnumeratedArray; - poly->cached_size = -1; - poly->cached_align = -1; - poly->flags.exchange(source->flags); - poly->failure = false; - poly->EnumeratedArray.elem = poly_elem; - poly->EnumeratedArray.index = source->EnumeratedArray.index; - poly->EnumeratedArray.min_value = source->EnumeratedArray.min_value; - poly->EnumeratedArray.max_value = source->EnumeratedArray.max_value; - poly->EnumeratedArray.count = source->EnumeratedArray.count; - poly->EnumeratedArray.op = source->EnumeratedArray.op; + Type *ea = alloc_type_enumerated_array(poly_elem, index, + source->EnumeratedArray.min_value, source->EnumeratedArray.max_value, + source->EnumeratedArray.count, source->EnumeratedArray.op); + ea->flags.exchange(source->flags); + gb_memmove(poly, ea, gb_size_of(Type)); e->kind = Entity_TypeName; e->TypeName.is_type_alias = true; diff --git a/src/check_type.cpp b/src/check_type.cpp index 76c8a494c..df1c8aebc 100644 --- a/src/check_type.cpp +++ b/src/check_type.cpp @@ -1824,6 +1824,277 @@ gb_internal bool check_type_specialization_to(CheckerContext *ctx, Type *special } +// subst_unify matches a polymorphic pattern against a source PURELY (no node/entity mutation), +// accumulating bindings; subst_apply reconstructs the instantiated type by CONSTRUCTION. Guarded by +// PARAPOLY_VERIFY_SUBST, determine_type_from_polymorphic runs these alongside the existing in-place +// mutation and asserts the two agree, proving the constructive path before anything relies on it. +// Coverage is a slice (generic/basic/slice/dynamic-array/fixed [$N]$T); other kinds report +// Subst_Unhandled and are skipped. No behavior change. This is refactor scaffolding: it runs a +// second (constructive) match per instantiation, so set to 0 (or gate to debug) before release. +#define PARAPOLY_VERIFY_SUBST 1 + +enum SubstResult { Subst_Unhandled, Subst_NoMatch, Subst_Matched }; + +enum PolyBindKind { PolyBind_Type, PolyBind_Value, PolyBind_EnumArray }; +struct PolyBinding { + Entity *key; + PolyBindKind kind; + Type *type; // PolyBind_Type: bound type; PolyBind_EnumArray: source EnumeratedArray + i64 value; // PolyBind_Value: array count +}; +struct PolySubst { + PolyBinding items[64]; + isize count; +}; + +gb_internal Entity *poly_generic_entity(Type *g) { + GB_ASSERT(g->kind == Type_Generic); + if (g->Generic.scope == nullptr) { + return nullptr; + } + return scope_lookup(g->Generic.scope, g->Generic.interned_name, 0); +} +gb_internal PolyBinding *poly_subst_find(PolySubst *s, Entity *key) { + for (isize i = 0; i < s->count; i++) { + if (s->items[i].key == key) { + return &s->items[i]; + } + } + return nullptr; +} +gb_internal bool poly_subst_add(PolySubst *s, Entity *key, PolyBinding b) { + if (key == nullptr) { + return false; + } + PolyBinding *prev = poly_subst_find(s, key); + if (prev != nullptr) { + if (prev->kind != b.kind) { + return false; + } + switch (b.kind) { + case PolyBind_Type: return are_types_identical(prev->type, b.type); + case PolyBind_Value: return prev->value == b.value; + case PolyBind_EnumArray: return are_types_identical(prev->type, b.type); + } + return false; + } + if (s->count >= gb_count_of(s->items)) { + return false; + } + b.key = key; + s->items[s->count++] = b; + return true; +} +gb_internal bool poly_subst_bind_type(PolySubst *s, Entity *key, Type *t) { + return poly_subst_add(s, key, PolyBinding{nullptr, PolyBind_Type, t, 0}); +} +gb_internal bool poly_subst_bind_value(PolySubst *s, Entity *key, i64 v) { + return poly_subst_add(s, key, PolyBinding{nullptr, PolyBind_Value, nullptr, v}); +} +gb_internal bool poly_subst_bind_enum_array(PolySubst *s, Entity *key, Type *ea) { + return poly_subst_add(s, key, PolyBinding{nullptr, PolyBind_EnumArray, ea, 0}); +} + +gb_internal SubstResult subst_unify(CheckerContext *c, Type *pattern, Type *source, PolySubst *subst) { + if (pattern == nullptr || source == nullptr) { + return Subst_Unhandled; + } + switch (pattern->kind) { + case Type_Basic: + return are_types_identical(pattern, source) ? Subst_Matched : Subst_NoMatch; + case Type_Generic: + if (pattern->Generic.specialized != nullptr) { + return Subst_Unhandled; + } + return poly_subst_bind_type(subst, poly_generic_entity(pattern), default_type(source)) ? Subst_Matched : Subst_NoMatch; + case Type_Pointer: + // old code also allows struct subtyping and Pointer<->MultiPointer; only the plain elem match here + if (source->kind != Type_Pointer) { + return Subst_Unhandled; + } + if (base_type(pattern->Pointer.elem)->kind == Type_Struct) { + return Subst_Unhandled; + } + return subst_unify(c, pattern->Pointer.elem, source->Pointer.elem, subst); + case Type_MultiPointer: + if (source->kind != Type_MultiPointer) { + return Subst_Unhandled; + } + if (base_type(pattern->MultiPointer.elem)->kind == Type_Struct) { + return Subst_Unhandled; + } + return subst_unify(c, pattern->MultiPointer.elem, source->MultiPointer.elem, subst); + case Type_Slice: + if (source->kind != Type_Slice) { + return Subst_NoMatch; + } + return subst_unify(c, pattern->Slice.elem, source->Slice.elem, subst); + case Type_DynamicArray: + if (source->kind != Type_DynamicArray) { + return Subst_NoMatch; + } + return subst_unify(c, pattern->DynamicArray.elem, source->DynamicArray.elem, subst); + case Type_Map: { + if (source->kind != Type_Map) { + return Subst_NoMatch; + } + SubstResult k = subst_unify(c, pattern->Map.key, source->Map.key, subst); + if (k != Subst_Matched) { + return k; + } + return subst_unify(c, pattern->Map.value, source->Map.value, subst); + } + case Type_Array: + if (source->kind == Type_Array) { + if (pattern->Array.generic_count != nullptr) { + if (pattern->Array.generic_count->Generic.specialized != nullptr) { + return Subst_Unhandled; + } + Entity *ne = poly_generic_entity(pattern->Array.generic_count); + if (ne == nullptr) { + return Subst_Unhandled; + } + if (!poly_subst_bind_value(subst, ne, source->Array.count)) { + return Subst_NoMatch; + } + } else if (pattern->Array.count != source->Array.count) { + return Subst_NoMatch; + } + return subst_unify(c, pattern->Array.elem, source->Array.elem, subst); + } else if (source->kind == Type_EnumeratedArray) { + if (pattern->Array.generic_count == nullptr) { + return Subst_NoMatch; + } + if (pattern->Array.generic_count->Generic.specialized != nullptr) { + return Subst_Unhandled; + } + Entity *ne = poly_generic_entity(pattern->Array.generic_count); + if (ne == nullptr) { + return Subst_Unhandled; + } + if (ne->kind != Entity_TypeName) { // old only takes the enum branch when $N is unbound + return Subst_NoMatch; + } + if (base_type(source->EnumeratedArray.index)->kind != Type_Enum) { + return Subst_NoMatch; + } + if (!poly_subst_bind_enum_array(subst, ne, source)) { + return Subst_NoMatch; + } + return subst_unify(c, pattern->Array.elem, source->EnumeratedArray.elem, subst); + } + return Subst_Unhandled; + case Type_Matrix: { + if (source->kind != Type_Matrix) { + return Subst_Unhandled; + } + if (pattern->Matrix.generic_row_count != nullptr) { + if (pattern->Matrix.generic_row_count->Generic.specialized != nullptr) return Subst_Unhandled; + Entity *re = poly_generic_entity(pattern->Matrix.generic_row_count); + if (re == nullptr) return Subst_Unhandled; + if (!poly_subst_bind_value(subst, re, source->Matrix.row_count)) return Subst_NoMatch; + } else if (pattern->Matrix.row_count != source->Matrix.row_count) { + return Subst_NoMatch; + } + if (pattern->Matrix.generic_column_count != nullptr) { + if (pattern->Matrix.generic_column_count->Generic.specialized != nullptr) return Subst_Unhandled; + Entity *ce = poly_generic_entity(pattern->Matrix.generic_column_count); + if (ce == nullptr) return Subst_Unhandled; + if (!poly_subst_bind_value(subst, ce, source->Matrix.column_count)) return Subst_NoMatch; + } else if (pattern->Matrix.column_count != source->Matrix.column_count) { + return Subst_NoMatch; + } + return subst_unify(c, pattern->Matrix.elem, source->Matrix.elem, subst); + } + case Type_SimdVector: + if (source->kind != Type_SimdVector) { + return Subst_Unhandled; + } + if (pattern->SimdVector.generic_count != nullptr) { + if (pattern->SimdVector.generic_count->Generic.specialized != nullptr) return Subst_Unhandled; + Entity *ne = poly_generic_entity(pattern->SimdVector.generic_count); + if (ne == nullptr) return Subst_Unhandled; + if (!poly_subst_bind_value(subst, ne, source->SimdVector.count)) return Subst_NoMatch; + } else if (pattern->SimdVector.count != source->SimdVector.count) { + return Subst_NoMatch; + } + return subst_unify(c, pattern->SimdVector.elem, source->SimdVector.elem, subst); + } + return Subst_Unhandled; +} + +gb_internal Type *subst_apply(CheckerContext *c, Type *pattern, PolySubst *subst) { + switch (pattern->kind) { + case Type_Basic: + return pattern; + case Type_Generic: { + PolyBinding *b = poly_subst_find(subst, poly_generic_entity(pattern)); + GB_ASSERT(b != nullptr && b->kind == PolyBind_Type); + return b->type; + } + case Type_Pointer: + return alloc_type_pointer(subst_apply(c, pattern->Pointer.elem, subst)); + case Type_MultiPointer: + return alloc_type_multi_pointer(subst_apply(c, pattern->MultiPointer.elem, subst)); + case Type_Slice: + return alloc_type_slice(subst_apply(c, pattern->Slice.elem, subst)); + case Type_DynamicArray: + return alloc_type_dynamic_array(subst_apply(c, pattern->DynamicArray.elem, subst)); + case Type_Map: { + Type *m = alloc_type(Type_Map); + m->Map.key = subst_apply(c, pattern->Map.key, subst); + m->Map.value = subst_apply(c, pattern->Map.value, subst); + return m; + } + case Type_Array: { + Type *elem = subst_apply(c, pattern->Array.elem, subst); + if (pattern->Array.generic_count != nullptr) { + PolyBinding *b = poly_subst_find(subst, poly_generic_entity(pattern->Array.generic_count)); + GB_ASSERT(b != nullptr); + if (b->kind == PolyBind_EnumArray) { + Type *ea = b->type; + Type *r = alloc_type_enumerated_array(elem, ea->EnumeratedArray.index, + ea->EnumeratedArray.min_value, ea->EnumeratedArray.max_value, + ea->EnumeratedArray.count, ea->EnumeratedArray.op); + r->flags.exchange(ea->flags); + return r; + } + GB_ASSERT(b->kind == PolyBind_Value); + return alloc_type_array(elem, b->value, nullptr); + } + return alloc_type_array(elem, pattern->Array.count, nullptr); + } + case Type_Matrix: { + Type *elem = subst_apply(c, pattern->Matrix.elem, subst); + i64 rc = pattern->Matrix.row_count; + i64 cc = pattern->Matrix.column_count; + if (pattern->Matrix.generic_row_count != nullptr) { + PolyBinding *b = poly_subst_find(subst, poly_generic_entity(pattern->Matrix.generic_row_count)); + GB_ASSERT(b != nullptr && b->kind == PolyBind_Value); + rc = b->value; + } + if (pattern->Matrix.generic_column_count != nullptr) { + PolyBinding *b = poly_subst_find(subst, poly_generic_entity(pattern->Matrix.generic_column_count)); + GB_ASSERT(b != nullptr && b->kind == PolyBind_Value); + cc = b->value; + } + return alloc_type_matrix(elem, rc, cc, nullptr, nullptr, pattern->Matrix.is_row_major); + } + case Type_SimdVector: { + Type *elem = subst_apply(c, pattern->SimdVector.elem, subst); + i64 count = pattern->SimdVector.count; + if (pattern->SimdVector.generic_count != nullptr) { + PolyBinding *b = poly_subst_find(subst, poly_generic_entity(pattern->SimdVector.generic_count)); + GB_ASSERT(b != nullptr && b->kind == PolyBind_Value); + count = b->value; + } + return alloc_type_simd_vector(count, elem, nullptr); + } + } + GB_PANIC("subst_apply: unhandled kind"); + return nullptr; +} + gb_internal Type *determine_type_from_polymorphic(CheckerContext *ctx, Type *poly_type, Operand const &operand) { bool modify_type = !ctx->no_polymorphic_errors; bool show_error = modify_type && !ctx->hide_polymorphic_errors; @@ -1845,9 +2116,35 @@ gb_internal Type *determine_type_from_polymorphic(CheckerContext *ctx, Type *pol return t_invalid; } +#if PARAPOLY_VERIFY_SUBST + PolySubst verify_subst = {}; + SubstResult verify_ur = Subst_Unhandled; + Type *verify_applied = nullptr; + if (modify_type) { + verify_ur = subst_unify(ctx, poly_type, operand.type, &verify_subst); + if (verify_ur == Subst_Matched) { + verify_applied = subst_apply(ctx, poly_type, &verify_subst); + } + } +#endif + if (is_polymorphic_type_assignable(ctx, poly_type, operand.type, false, modify_type)) { + #if PARAPOLY_VERIFY_SUBST + if (verify_ur == Subst_Matched) { + GB_ASSERT_MSG(are_types_identical(verify_applied, poly_type), + "parapoly subst mismatch: applied '%s' vs mutated '%s'", + type_to_string(verify_applied), type_to_string(poly_type)); + } else if (verify_ur == Subst_NoMatch) { + GB_PANIC("parapoly subst reported NoMatch but in-place match succeeded (result '%s')", type_to_string(poly_type)); + } + #endif return poly_type; } +#if PARAPOLY_VERIFY_SUBST + if (verify_ur == Subst_Matched) { + GB_PANIC("parapoly subst matched but in-place match failed"); + } +#endif if (show_error) { ERROR_BLOCK(); gbString pts = type_to_string(poly_type); From 98ad032baa6c524e1488df3802070e0488bca50a Mon Sep 17 00:00:00 2001 From: Matthias Huerbe Date: Wed, 30 Sep 2026 18:53:24 +0200 Subject: [PATCH 077/215] changed append to append_elem in rexcode package for massive compile time improvements --- core/rexcode/isa/arm32/mnemonic_builders.odin | 1408 +-- .../arm32/tools/gen_mnemonic_builders.odin | 4 +- core/rexcode/isa/arm64/mnemonic_builders.odin | 4612 +++++----- .../arm64/tools/gen_mnemonic_builders.odin | 2 +- core/rexcode/isa/mips/mnemonic_builders.odin | 2056 ++--- .../isa/mips/tools/gen_mnemonic_builders.odin | 2 +- .../isa/mos6502/mnemonic_builders.odin | 326 +- .../mos6502/tools/gen_mnemonic_builders.odin | 2 +- .../isa/mos65816/mnemonic_builders.odin | 244 +- .../mos65816/tools/gen_mnemonic_builders.odin | 2 +- core/rexcode/isa/ppc/mnemonic_builders.odin | 6654 +++++++------- .../isa/ppc/tools/gen_mnemonic_builders.odin | 4 +- .../isa/ppc_vle/mnemonic_builders.odin | 444 +- .../ppc_vle/tools/gen_mnemonic_builders.odin | 2 +- core/rexcode/isa/riscv/mnemonic_builders.odin | 736 +- .../riscv/tools/gen_mnemonic_builders.odin | 2 +- core/rexcode/isa/rsp/mnemonic_builders.odin | 232 +- .../isa/rsp/tools/gen_mnemonic_builders.odin | 2 +- core/rexcode/isa/x86/mnemonic_builders.odin | 7782 ++++++++--------- .../isa/x86/tools/gen_mnemonic_builders.odin | 4 +- 20 files changed, 12448 insertions(+), 12072 deletions(-) diff --git a/core/rexcode/isa/arm32/mnemonic_builders.odin b/core/rexcode/isa/arm32/mnemonic_builders.odin index 49197bc1b..9984a4b2b 100644 --- a/core/rexcode/isa/arm32/mnemonic_builders.odin +++ b/core/rexcode/isa/arm32/mnemonic_builders.odin @@ -30,728 +30,728 @@ inst_and_r_r_immm :: #force_inline proc "contextless" (dst: Re inst_and_r_r_rsh :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register, shift: Shift_Type, amount: u8) -> Instruction { return Instruction{mnemonic = .AND, operand_count = 3, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_reg_shifted(src2, shift, amount), {}, {}, {}}} } inst_and_r_r_rsr :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register, shift: Shift_Type, rs: Register) -> Instruction { return Instruction{mnemonic = .AND, operand_count = 3, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_reg_shifted(src2, shift, u8(reg_hw(rs))), {}, {}, {}}} } inst_and_rlo_rlo :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .AND, operand_count = 2, mode = .T32, cond = 14, length = 2, ops = {op_reg(dst), op_reg(src), {}, {}, {}, {}}} } -emit_and_r_r_immm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_and_r_r_immm(dst, src, imm)) } -emit_and_r_r_rsh :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, shift: Shift_Type, amount: u8) { append(instructions, inst_and_r_r_rsh(dst, src, src2, shift, amount)) } -emit_and_r_r_rsr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, shift: Shift_Type, rs: Register) { append(instructions, inst_and_r_r_rsr(dst, src, src2, shift, rs)) } -emit_and_rlo_rlo :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_and_rlo_rlo(dst, src)) } +emit_and_r_r_immm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_and_r_r_immm(dst, src, imm)) } +emit_and_r_r_rsh :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, shift: Shift_Type, amount: u8) { append_elem(instructions, inst_and_r_r_rsh(dst, src, src2, shift, amount)) } +emit_and_r_r_rsr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, shift: Shift_Type, rs: Register) { append_elem(instructions, inst_and_r_r_rsr(dst, src, src2, shift, rs)) } +emit_and_rlo_rlo :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_and_rlo_rlo(dst, src)) } inst_eor_r_r_immm :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .EOR, operand_count = 3, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_imm(imm), {}, {}, {}}} } inst_eor_r_r_rsh :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register, shift: Shift_Type, amount: u8) -> Instruction { return Instruction{mnemonic = .EOR, operand_count = 3, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_reg_shifted(src2, shift, amount), {}, {}, {}}} } inst_eor_r_r_rsr :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register, shift: Shift_Type, rs: Register) -> Instruction { return Instruction{mnemonic = .EOR, operand_count = 3, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_reg_shifted(src2, shift, u8(reg_hw(rs))), {}, {}, {}}} } inst_eor_rlo_rlo :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .EOR, operand_count = 2, mode = .T32, cond = 14, length = 2, ops = {op_reg(dst), op_reg(src), {}, {}, {}, {}}} } -emit_eor_r_r_immm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_eor_r_r_immm(dst, src, imm)) } -emit_eor_r_r_rsh :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, shift: Shift_Type, amount: u8) { append(instructions, inst_eor_r_r_rsh(dst, src, src2, shift, amount)) } -emit_eor_r_r_rsr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, shift: Shift_Type, rs: Register) { append(instructions, inst_eor_r_r_rsr(dst, src, src2, shift, rs)) } -emit_eor_rlo_rlo :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_eor_rlo_rlo(dst, src)) } +emit_eor_r_r_immm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_eor_r_r_immm(dst, src, imm)) } +emit_eor_r_r_rsh :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, shift: Shift_Type, amount: u8) { append_elem(instructions, inst_eor_r_r_rsh(dst, src, src2, shift, amount)) } +emit_eor_r_r_rsr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, shift: Shift_Type, rs: Register) { append_elem(instructions, inst_eor_r_r_rsr(dst, src, src2, shift, rs)) } +emit_eor_rlo_rlo :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_eor_rlo_rlo(dst, src)) } inst_sub_r_r_immm :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .SUB, operand_count = 3, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_imm(imm), {}, {}, {}}} } inst_sub_r_r_rsh :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register, shift: Shift_Type, amount: u8) -> Instruction { return Instruction{mnemonic = .SUB, operand_count = 3, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_reg_shifted(src2, shift, amount), {}, {}, {}}} } inst_sub_r_r_rsr :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register, shift: Shift_Type, rs: Register) -> Instruction { return Instruction{mnemonic = .SUB, operand_count = 3, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_reg_shifted(src2, shift, u8(reg_hw(rs))), {}, {}, {}}} } inst_sub_rlo_rlo_rlo :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .SUB, operand_count = 3, mode = .T32, cond = 14, length = 2, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}, {}, {}}} } inst_sub_rlo_imm8 :: #force_inline proc "contextless" (dst: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .SUB, operand_count = 2, mode = .T32, cond = 14, length = 2, ops = {op_reg(dst), op_imm(imm), {}, {}, {}, {}}} } -emit_sub_r_r_immm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_sub_r_r_immm(dst, src, imm)) } -emit_sub_r_r_rsh :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, shift: Shift_Type, amount: u8) { append(instructions, inst_sub_r_r_rsh(dst, src, src2, shift, amount)) } -emit_sub_r_r_rsr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, shift: Shift_Type, rs: Register) { append(instructions, inst_sub_r_r_rsr(dst, src, src2, shift, rs)) } -emit_sub_rlo_rlo_rlo :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_sub_rlo_rlo_rlo(dst, src, src2)) } -emit_sub_rlo_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64) { append(instructions, inst_sub_rlo_imm8(dst, imm)) } +emit_sub_r_r_immm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_sub_r_r_immm(dst, src, imm)) } +emit_sub_r_r_rsh :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, shift: Shift_Type, amount: u8) { append_elem(instructions, inst_sub_r_r_rsh(dst, src, src2, shift, amount)) } +emit_sub_r_r_rsr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, shift: Shift_Type, rs: Register) { append_elem(instructions, inst_sub_r_r_rsr(dst, src, src2, shift, rs)) } +emit_sub_rlo_rlo_rlo :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_sub_rlo_rlo_rlo(dst, src, src2)) } +emit_sub_rlo_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64) { append_elem(instructions, inst_sub_rlo_imm8(dst, imm)) } inst_rsb_r_r_immm :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .RSB, operand_count = 3, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_imm(imm), {}, {}, {}}} } inst_rsb_r_r_rsh :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register, shift: Shift_Type, amount: u8) -> Instruction { return Instruction{mnemonic = .RSB, operand_count = 3, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_reg_shifted(src2, shift, amount), {}, {}, {}}} } inst_rsb_r_r_rsr :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register, shift: Shift_Type, rs: Register) -> Instruction { return Instruction{mnemonic = .RSB, operand_count = 3, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_reg_shifted(src2, shift, u8(reg_hw(rs))), {}, {}, {}}} } -emit_rsb_r_r_immm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_rsb_r_r_immm(dst, src, imm)) } -emit_rsb_r_r_rsh :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, shift: Shift_Type, amount: u8) { append(instructions, inst_rsb_r_r_rsh(dst, src, src2, shift, amount)) } -emit_rsb_r_r_rsr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, shift: Shift_Type, rs: Register) { append(instructions, inst_rsb_r_r_rsr(dst, src, src2, shift, rs)) } +emit_rsb_r_r_immm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_rsb_r_r_immm(dst, src, imm)) } +emit_rsb_r_r_rsh :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, shift: Shift_Type, amount: u8) { append_elem(instructions, inst_rsb_r_r_rsh(dst, src, src2, shift, amount)) } +emit_rsb_r_r_rsr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, shift: Shift_Type, rs: Register) { append_elem(instructions, inst_rsb_r_r_rsr(dst, src, src2, shift, rs)) } inst_add_r_r_immm :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .ADD, operand_count = 3, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_imm(imm), {}, {}, {}}} } inst_add_r_r_rsh :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register, shift: Shift_Type, amount: u8) -> Instruction { return Instruction{mnemonic = .ADD, operand_count = 3, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_reg_shifted(src2, shift, amount), {}, {}, {}}} } inst_add_r_r_rsr :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register, shift: Shift_Type, rs: Register) -> Instruction { return Instruction{mnemonic = .ADD, operand_count = 3, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_reg_shifted(src2, shift, u8(reg_hw(rs))), {}, {}, {}}} } inst_add_rlo_rlo_rlo :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .ADD, operand_count = 3, mode = .T32, cond = 14, length = 2, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}, {}, {}}} } inst_add_rlo_imm8 :: #force_inline proc "contextless" (dst: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .ADD, operand_count = 2, mode = .T32, cond = 14, length = 2, ops = {op_reg(dst), op_imm(imm), {}, {}, {}, {}}} } inst_add_r_r :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .ADD, operand_count = 2, mode = .T32, cond = 14, length = 2, ops = {op_reg(dst), op_reg(src), {}, {}, {}, {}}} } -emit_add_r_r_immm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_add_r_r_immm(dst, src, imm)) } -emit_add_r_r_rsh :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, shift: Shift_Type, amount: u8) { append(instructions, inst_add_r_r_rsh(dst, src, src2, shift, amount)) } -emit_add_r_r_rsr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, shift: Shift_Type, rs: Register) { append(instructions, inst_add_r_r_rsr(dst, src, src2, shift, rs)) } -emit_add_rlo_rlo_rlo :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_add_rlo_rlo_rlo(dst, src, src2)) } -emit_add_rlo_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64) { append(instructions, inst_add_rlo_imm8(dst, imm)) } -emit_add_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_add_r_r(dst, src)) } +emit_add_r_r_immm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_add_r_r_immm(dst, src, imm)) } +emit_add_r_r_rsh :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, shift: Shift_Type, amount: u8) { append_elem(instructions, inst_add_r_r_rsh(dst, src, src2, shift, amount)) } +emit_add_r_r_rsr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, shift: Shift_Type, rs: Register) { append_elem(instructions, inst_add_r_r_rsr(dst, src, src2, shift, rs)) } +emit_add_rlo_rlo_rlo :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_add_rlo_rlo_rlo(dst, src, src2)) } +emit_add_rlo_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64) { append_elem(instructions, inst_add_rlo_imm8(dst, imm)) } +emit_add_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_add_r_r(dst, src)) } inst_adc_r_r_immm :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .ADC, operand_count = 3, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_imm(imm), {}, {}, {}}} } inst_adc_r_r_rsh :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register, shift: Shift_Type, amount: u8) -> Instruction { return Instruction{mnemonic = .ADC, operand_count = 3, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_reg_shifted(src2, shift, amount), {}, {}, {}}} } inst_adc_r_r_rsr :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register, shift: Shift_Type, rs: Register) -> Instruction { return Instruction{mnemonic = .ADC, operand_count = 3, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_reg_shifted(src2, shift, u8(reg_hw(rs))), {}, {}, {}}} } inst_adc_rlo_rlo :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .ADC, operand_count = 2, mode = .T32, cond = 14, length = 2, ops = {op_reg(dst), op_reg(src), {}, {}, {}, {}}} } -emit_adc_r_r_immm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_adc_r_r_immm(dst, src, imm)) } -emit_adc_r_r_rsh :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, shift: Shift_Type, amount: u8) { append(instructions, inst_adc_r_r_rsh(dst, src, src2, shift, amount)) } -emit_adc_r_r_rsr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, shift: Shift_Type, rs: Register) { append(instructions, inst_adc_r_r_rsr(dst, src, src2, shift, rs)) } -emit_adc_rlo_rlo :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_adc_rlo_rlo(dst, src)) } +emit_adc_r_r_immm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_adc_r_r_immm(dst, src, imm)) } +emit_adc_r_r_rsh :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, shift: Shift_Type, amount: u8) { append_elem(instructions, inst_adc_r_r_rsh(dst, src, src2, shift, amount)) } +emit_adc_r_r_rsr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, shift: Shift_Type, rs: Register) { append_elem(instructions, inst_adc_r_r_rsr(dst, src, src2, shift, rs)) } +emit_adc_rlo_rlo :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_adc_rlo_rlo(dst, src)) } inst_sbc_r_r_immm :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .SBC, operand_count = 3, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_imm(imm), {}, {}, {}}} } inst_sbc_r_r_rsh :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register, shift: Shift_Type, amount: u8) -> Instruction { return Instruction{mnemonic = .SBC, operand_count = 3, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_reg_shifted(src2, shift, amount), {}, {}, {}}} } inst_sbc_r_r_rsr :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register, shift: Shift_Type, rs: Register) -> Instruction { return Instruction{mnemonic = .SBC, operand_count = 3, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_reg_shifted(src2, shift, u8(reg_hw(rs))), {}, {}, {}}} } inst_sbc_rlo_rlo :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .SBC, operand_count = 2, mode = .T32, cond = 14, length = 2, ops = {op_reg(dst), op_reg(src), {}, {}, {}, {}}} } -emit_sbc_r_r_immm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_sbc_r_r_immm(dst, src, imm)) } -emit_sbc_r_r_rsh :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, shift: Shift_Type, amount: u8) { append(instructions, inst_sbc_r_r_rsh(dst, src, src2, shift, amount)) } -emit_sbc_r_r_rsr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, shift: Shift_Type, rs: Register) { append(instructions, inst_sbc_r_r_rsr(dst, src, src2, shift, rs)) } -emit_sbc_rlo_rlo :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_sbc_rlo_rlo(dst, src)) } +emit_sbc_r_r_immm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_sbc_r_r_immm(dst, src, imm)) } +emit_sbc_r_r_rsh :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, shift: Shift_Type, amount: u8) { append_elem(instructions, inst_sbc_r_r_rsh(dst, src, src2, shift, amount)) } +emit_sbc_r_r_rsr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, shift: Shift_Type, rs: Register) { append_elem(instructions, inst_sbc_r_r_rsr(dst, src, src2, shift, rs)) } +emit_sbc_rlo_rlo :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_sbc_rlo_rlo(dst, src)) } inst_rsc_r_r_immm :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .RSC, operand_count = 3, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_imm(imm), {}, {}, {}}} } inst_rsc_r_r_rsh :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register, shift: Shift_Type, amount: u8) -> Instruction { return Instruction{mnemonic = .RSC, operand_count = 3, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_reg_shifted(src2, shift, amount), {}, {}, {}}} } inst_rsc_r_r_rsr :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register, shift: Shift_Type, rs: Register) -> Instruction { return Instruction{mnemonic = .RSC, operand_count = 3, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_reg_shifted(src2, shift, u8(reg_hw(rs))), {}, {}, {}}} } -emit_rsc_r_r_immm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_rsc_r_r_immm(dst, src, imm)) } -emit_rsc_r_r_rsh :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, shift: Shift_Type, amount: u8) { append(instructions, inst_rsc_r_r_rsh(dst, src, src2, shift, amount)) } -emit_rsc_r_r_rsr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, shift: Shift_Type, rs: Register) { append(instructions, inst_rsc_r_r_rsr(dst, src, src2, shift, rs)) } +emit_rsc_r_r_immm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_rsc_r_r_immm(dst, src, imm)) } +emit_rsc_r_r_rsh :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, shift: Shift_Type, amount: u8) { append_elem(instructions, inst_rsc_r_r_rsh(dst, src, src2, shift, amount)) } +emit_rsc_r_r_rsr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, shift: Shift_Type, rs: Register) { append_elem(instructions, inst_rsc_r_r_rsr(dst, src, src2, shift, rs)) } inst_tst_r_immm :: #force_inline proc "contextless" (dst: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .TST, operand_count = 2, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_imm(imm), {}, {}, {}, {}}} } inst_tst_r_rsh :: #force_inline proc "contextless" (dst: Register, src: Register, shift: Shift_Type, amount: u8) -> Instruction { return Instruction{mnemonic = .TST, operand_count = 2, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg_shifted(src, shift, amount), {}, {}, {}, {}}} } inst_tst_r_rsr :: #force_inline proc "contextless" (dst: Register, src: Register, shift: Shift_Type, rs: Register) -> Instruction { return Instruction{mnemonic = .TST, operand_count = 2, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg_shifted(src, shift, u8(reg_hw(rs))), {}, {}, {}, {}}} } inst_tst_rlo_rlo :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .TST, operand_count = 2, mode = .T32, cond = 14, length = 2, ops = {op_reg(dst), op_reg(src), {}, {}, {}, {}}} } -emit_tst_r_immm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64) { append(instructions, inst_tst_r_immm(dst, imm)) } -emit_tst_r_rsh :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, shift: Shift_Type, amount: u8) { append(instructions, inst_tst_r_rsh(dst, src, shift, amount)) } -emit_tst_r_rsr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, shift: Shift_Type, rs: Register) { append(instructions, inst_tst_r_rsr(dst, src, shift, rs)) } -emit_tst_rlo_rlo :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_tst_rlo_rlo(dst, src)) } +emit_tst_r_immm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64) { append_elem(instructions, inst_tst_r_immm(dst, imm)) } +emit_tst_r_rsh :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, shift: Shift_Type, amount: u8) { append_elem(instructions, inst_tst_r_rsh(dst, src, shift, amount)) } +emit_tst_r_rsr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, shift: Shift_Type, rs: Register) { append_elem(instructions, inst_tst_r_rsr(dst, src, shift, rs)) } +emit_tst_rlo_rlo :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_tst_rlo_rlo(dst, src)) } inst_teq_r_immm :: #force_inline proc "contextless" (dst: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .TEQ, operand_count = 2, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_imm(imm), {}, {}, {}, {}}} } inst_teq_r_rsh :: #force_inline proc "contextless" (dst: Register, src: Register, shift: Shift_Type, amount: u8) -> Instruction { return Instruction{mnemonic = .TEQ, operand_count = 2, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg_shifted(src, shift, amount), {}, {}, {}, {}}} } inst_teq_r_rsr :: #force_inline proc "contextless" (dst: Register, src: Register, shift: Shift_Type, rs: Register) -> Instruction { return Instruction{mnemonic = .TEQ, operand_count = 2, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg_shifted(src, shift, u8(reg_hw(rs))), {}, {}, {}, {}}} } -emit_teq_r_immm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64) { append(instructions, inst_teq_r_immm(dst, imm)) } -emit_teq_r_rsh :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, shift: Shift_Type, amount: u8) { append(instructions, inst_teq_r_rsh(dst, src, shift, amount)) } -emit_teq_r_rsr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, shift: Shift_Type, rs: Register) { append(instructions, inst_teq_r_rsr(dst, src, shift, rs)) } +emit_teq_r_immm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64) { append_elem(instructions, inst_teq_r_immm(dst, imm)) } +emit_teq_r_rsh :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, shift: Shift_Type, amount: u8) { append_elem(instructions, inst_teq_r_rsh(dst, src, shift, amount)) } +emit_teq_r_rsr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, shift: Shift_Type, rs: Register) { append_elem(instructions, inst_teq_r_rsr(dst, src, shift, rs)) } inst_cmp_r_immm :: #force_inline proc "contextless" (dst: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .CMP, operand_count = 2, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_imm(imm), {}, {}, {}, {}}} } inst_cmp_r_rsh :: #force_inline proc "contextless" (dst: Register, src: Register, shift: Shift_Type, amount: u8) -> Instruction { return Instruction{mnemonic = .CMP, operand_count = 2, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg_shifted(src, shift, amount), {}, {}, {}, {}}} } inst_cmp_r_rsr :: #force_inline proc "contextless" (dst: Register, src: Register, shift: Shift_Type, rs: Register) -> Instruction { return Instruction{mnemonic = .CMP, operand_count = 2, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg_shifted(src, shift, u8(reg_hw(rs))), {}, {}, {}, {}}} } inst_cmp_rlo_rlo :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .CMP, operand_count = 2, mode = .T32, cond = 14, length = 2, ops = {op_reg(dst), op_reg(src), {}, {}, {}, {}}} } -emit_cmp_r_immm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64) { append(instructions, inst_cmp_r_immm(dst, imm)) } -emit_cmp_r_rsh :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, shift: Shift_Type, amount: u8) { append(instructions, inst_cmp_r_rsh(dst, src, shift, amount)) } -emit_cmp_r_rsr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, shift: Shift_Type, rs: Register) { append(instructions, inst_cmp_r_rsr(dst, src, shift, rs)) } -emit_cmp_rlo_rlo :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_cmp_rlo_rlo(dst, src)) } +emit_cmp_r_immm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64) { append_elem(instructions, inst_cmp_r_immm(dst, imm)) } +emit_cmp_r_rsh :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, shift: Shift_Type, amount: u8) { append_elem(instructions, inst_cmp_r_rsh(dst, src, shift, amount)) } +emit_cmp_r_rsr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, shift: Shift_Type, rs: Register) { append_elem(instructions, inst_cmp_r_rsr(dst, src, shift, rs)) } +emit_cmp_rlo_rlo :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_cmp_rlo_rlo(dst, src)) } inst_cmn_r_immm :: #force_inline proc "contextless" (dst: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .CMN, operand_count = 2, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_imm(imm), {}, {}, {}, {}}} } inst_cmn_r_rsh :: #force_inline proc "contextless" (dst: Register, src: Register, shift: Shift_Type, amount: u8) -> Instruction { return Instruction{mnemonic = .CMN, operand_count = 2, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg_shifted(src, shift, amount), {}, {}, {}, {}}} } inst_cmn_r_rsr :: #force_inline proc "contextless" (dst: Register, src: Register, shift: Shift_Type, rs: Register) -> Instruction { return Instruction{mnemonic = .CMN, operand_count = 2, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg_shifted(src, shift, u8(reg_hw(rs))), {}, {}, {}, {}}} } inst_cmn_rlo_rlo :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .CMN, operand_count = 2, mode = .T32, cond = 14, length = 2, ops = {op_reg(dst), op_reg(src), {}, {}, {}, {}}} } -emit_cmn_r_immm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64) { append(instructions, inst_cmn_r_immm(dst, imm)) } -emit_cmn_r_rsh :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, shift: Shift_Type, amount: u8) { append(instructions, inst_cmn_r_rsh(dst, src, shift, amount)) } -emit_cmn_r_rsr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, shift: Shift_Type, rs: Register) { append(instructions, inst_cmn_r_rsr(dst, src, shift, rs)) } -emit_cmn_rlo_rlo :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_cmn_rlo_rlo(dst, src)) } +emit_cmn_r_immm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64) { append_elem(instructions, inst_cmn_r_immm(dst, imm)) } +emit_cmn_r_rsh :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, shift: Shift_Type, amount: u8) { append_elem(instructions, inst_cmn_r_rsh(dst, src, shift, amount)) } +emit_cmn_r_rsr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, shift: Shift_Type, rs: Register) { append_elem(instructions, inst_cmn_r_rsr(dst, src, shift, rs)) } +emit_cmn_rlo_rlo :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_cmn_rlo_rlo(dst, src)) } inst_orr_r_r_immm :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .ORR, operand_count = 3, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_imm(imm), {}, {}, {}}} } inst_orr_r_r_rsh :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register, shift: Shift_Type, amount: u8) -> Instruction { return Instruction{mnemonic = .ORR, operand_count = 3, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_reg_shifted(src2, shift, amount), {}, {}, {}}} } inst_orr_r_r_rsr :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register, shift: Shift_Type, rs: Register) -> Instruction { return Instruction{mnemonic = .ORR, operand_count = 3, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_reg_shifted(src2, shift, u8(reg_hw(rs))), {}, {}, {}}} } inst_orr_rlo_rlo :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .ORR, operand_count = 2, mode = .T32, cond = 14, length = 2, ops = {op_reg(dst), op_reg(src), {}, {}, {}, {}}} } -emit_orr_r_r_immm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_orr_r_r_immm(dst, src, imm)) } -emit_orr_r_r_rsh :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, shift: Shift_Type, amount: u8) { append(instructions, inst_orr_r_r_rsh(dst, src, src2, shift, amount)) } -emit_orr_r_r_rsr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, shift: Shift_Type, rs: Register) { append(instructions, inst_orr_r_r_rsr(dst, src, src2, shift, rs)) } -emit_orr_rlo_rlo :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_orr_rlo_rlo(dst, src)) } +emit_orr_r_r_immm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_orr_r_r_immm(dst, src, imm)) } +emit_orr_r_r_rsh :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, shift: Shift_Type, amount: u8) { append_elem(instructions, inst_orr_r_r_rsh(dst, src, src2, shift, amount)) } +emit_orr_r_r_rsr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, shift: Shift_Type, rs: Register) { append_elem(instructions, inst_orr_r_r_rsr(dst, src, src2, shift, rs)) } +emit_orr_rlo_rlo :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_orr_rlo_rlo(dst, src)) } inst_mov_r_immm :: #force_inline proc "contextless" (dst: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .MOV, operand_count = 2, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_imm(imm), {}, {}, {}, {}}} } inst_mov_r_rsh :: #force_inline proc "contextless" (dst: Register, src: Register, shift: Shift_Type, amount: u8) -> Instruction { return Instruction{mnemonic = .MOV, operand_count = 2, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg_shifted(src, shift, amount), {}, {}, {}, {}}} } inst_mov_r_rsr :: #force_inline proc "contextless" (dst: Register, src: Register, shift: Shift_Type, rs: Register) -> Instruction { return Instruction{mnemonic = .MOV, operand_count = 2, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg_shifted(src, shift, u8(reg_hw(rs))), {}, {}, {}, {}}} } inst_mov_r_r :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .MOV, operand_count = 2, mode = .T32, cond = 14, length = 2, ops = {op_reg(dst), op_reg(src), {}, {}, {}, {}}} } -emit_mov_r_immm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64) { append(instructions, inst_mov_r_immm(dst, imm)) } -emit_mov_r_rsh :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, shift: Shift_Type, amount: u8) { append(instructions, inst_mov_r_rsh(dst, src, shift, amount)) } -emit_mov_r_rsr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, shift: Shift_Type, rs: Register) { append(instructions, inst_mov_r_rsr(dst, src, shift, rs)) } -emit_mov_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_mov_r_r(dst, src)) } +emit_mov_r_immm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64) { append_elem(instructions, inst_mov_r_immm(dst, imm)) } +emit_mov_r_rsh :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, shift: Shift_Type, amount: u8) { append_elem(instructions, inst_mov_r_rsh(dst, src, shift, amount)) } +emit_mov_r_rsr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, shift: Shift_Type, rs: Register) { append_elem(instructions, inst_mov_r_rsr(dst, src, shift, rs)) } +emit_mov_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_mov_r_r(dst, src)) } inst_bic_r_r_immm :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .BIC, operand_count = 3, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_imm(imm), {}, {}, {}}} } inst_bic_r_r_rsh :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register, shift: Shift_Type, amount: u8) -> Instruction { return Instruction{mnemonic = .BIC, operand_count = 3, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_reg_shifted(src2, shift, amount), {}, {}, {}}} } inst_bic_r_r_rsr :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register, shift: Shift_Type, rs: Register) -> Instruction { return Instruction{mnemonic = .BIC, operand_count = 3, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_reg_shifted(src2, shift, u8(reg_hw(rs))), {}, {}, {}}} } inst_bic_rlo_rlo :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .BIC, operand_count = 2, mode = .T32, cond = 14, length = 2, ops = {op_reg(dst), op_reg(src), {}, {}, {}, {}}} } -emit_bic_r_r_immm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_bic_r_r_immm(dst, src, imm)) } -emit_bic_r_r_rsh :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, shift: Shift_Type, amount: u8) { append(instructions, inst_bic_r_r_rsh(dst, src, src2, shift, amount)) } -emit_bic_r_r_rsr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, shift: Shift_Type, rs: Register) { append(instructions, inst_bic_r_r_rsr(dst, src, src2, shift, rs)) } -emit_bic_rlo_rlo :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_bic_rlo_rlo(dst, src)) } +emit_bic_r_r_immm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_bic_r_r_immm(dst, src, imm)) } +emit_bic_r_r_rsh :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, shift: Shift_Type, amount: u8) { append_elem(instructions, inst_bic_r_r_rsh(dst, src, src2, shift, amount)) } +emit_bic_r_r_rsr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, shift: Shift_Type, rs: Register) { append_elem(instructions, inst_bic_r_r_rsr(dst, src, src2, shift, rs)) } +emit_bic_rlo_rlo :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_bic_rlo_rlo(dst, src)) } inst_mvn_r_immm :: #force_inline proc "contextless" (dst: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .MVN, operand_count = 2, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_imm(imm), {}, {}, {}, {}}} } inst_mvn_r_rsh :: #force_inline proc "contextless" (dst: Register, src: Register, shift: Shift_Type, amount: u8) -> Instruction { return Instruction{mnemonic = .MVN, operand_count = 2, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg_shifted(src, shift, amount), {}, {}, {}, {}}} } inst_mvn_r_rsr :: #force_inline proc "contextless" (dst: Register, src: Register, shift: Shift_Type, rs: Register) -> Instruction { return Instruction{mnemonic = .MVN, operand_count = 2, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg_shifted(src, shift, u8(reg_hw(rs))), {}, {}, {}, {}}} } inst_mvn_rlo_rlo :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .MVN, operand_count = 2, mode = .T32, cond = 14, length = 2, ops = {op_reg(dst), op_reg(src), {}, {}, {}, {}}} } -emit_mvn_r_immm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64) { append(instructions, inst_mvn_r_immm(dst, imm)) } -emit_mvn_r_rsh :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, shift: Shift_Type, amount: u8) { append(instructions, inst_mvn_r_rsh(dst, src, shift, amount)) } -emit_mvn_r_rsr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, shift: Shift_Type, rs: Register) { append(instructions, inst_mvn_r_rsr(dst, src, shift, rs)) } -emit_mvn_rlo_rlo :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_mvn_rlo_rlo(dst, src)) } +emit_mvn_r_immm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64) { append_elem(instructions, inst_mvn_r_immm(dst, imm)) } +emit_mvn_r_rsh :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, shift: Shift_Type, amount: u8) { append_elem(instructions, inst_mvn_r_rsh(dst, src, shift, amount)) } +emit_mvn_r_rsr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, shift: Shift_Type, rs: Register) { append_elem(instructions, inst_mvn_r_rsr(dst, src, shift, rs)) } +emit_mvn_rlo_rlo :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_mvn_rlo_rlo(dst, src)) } inst_lsl_r_r_imm5 :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .LSL, operand_count = 3, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_imm(imm), {}, {}, {}}} } inst_lsl_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .LSL, operand_count = 3, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}, {}, {}}} } inst_lsl_rlo_rlo :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .LSL, operand_count = 2, mode = .T32, cond = 14, length = 2, ops = {op_reg(dst), op_reg(src), {}, {}, {}, {}}} } -emit_lsl_r_r_imm5 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_lsl_r_r_imm5(dst, src, imm)) } -emit_lsl_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_lsl_r_r_r(dst, src, src2)) } -emit_lsl_rlo_rlo :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_lsl_rlo_rlo(dst, src)) } +emit_lsl_r_r_imm5 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_lsl_r_r_imm5(dst, src, imm)) } +emit_lsl_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_lsl_r_r_r(dst, src, src2)) } +emit_lsl_rlo_rlo :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_lsl_rlo_rlo(dst, src)) } inst_lsr_r_r_imm5 :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .LSR, operand_count = 3, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_imm(imm), {}, {}, {}}} } inst_lsr_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .LSR, operand_count = 3, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}, {}, {}}} } inst_lsr_rlo_rlo :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .LSR, operand_count = 2, mode = .T32, cond = 14, length = 2, ops = {op_reg(dst), op_reg(src), {}, {}, {}, {}}} } -emit_lsr_r_r_imm5 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_lsr_r_r_imm5(dst, src, imm)) } -emit_lsr_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_lsr_r_r_r(dst, src, src2)) } -emit_lsr_rlo_rlo :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_lsr_rlo_rlo(dst, src)) } +emit_lsr_r_r_imm5 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_lsr_r_r_imm5(dst, src, imm)) } +emit_lsr_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_lsr_r_r_r(dst, src, src2)) } +emit_lsr_rlo_rlo :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_lsr_rlo_rlo(dst, src)) } inst_asr_r_r_imm5 :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .ASR, operand_count = 3, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_imm(imm), {}, {}, {}}} } inst_asr_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .ASR, operand_count = 3, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}, {}, {}}} } inst_asr_rlo_rlo :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .ASR, operand_count = 2, mode = .T32, cond = 14, length = 2, ops = {op_reg(dst), op_reg(src), {}, {}, {}, {}}} } -emit_asr_r_r_imm5 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_asr_r_r_imm5(dst, src, imm)) } -emit_asr_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_asr_r_r_r(dst, src, src2)) } -emit_asr_rlo_rlo :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_asr_rlo_rlo(dst, src)) } +emit_asr_r_r_imm5 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_asr_r_r_imm5(dst, src, imm)) } +emit_asr_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_asr_r_r_r(dst, src, src2)) } +emit_asr_rlo_rlo :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_asr_rlo_rlo(dst, src)) } inst_ror_r_r_imm5 :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .ROR, operand_count = 3, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_imm(imm), {}, {}, {}}} } inst_ror_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .ROR, operand_count = 3, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}, {}, {}}} } inst_ror_rlo_rlo :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .ROR, operand_count = 2, mode = .T32, cond = 14, length = 2, ops = {op_reg(dst), op_reg(src), {}, {}, {}, {}}} } -emit_ror_r_r_imm5 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_ror_r_r_imm5(dst, src, imm)) } -emit_ror_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_ror_r_r_r(dst, src, src2)) } -emit_ror_rlo_rlo :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_ror_rlo_rlo(dst, src)) } +emit_ror_r_r_imm5 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_ror_r_r_imm5(dst, src, imm)) } +emit_ror_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_ror_r_r_r(dst, src, src2)) } +emit_ror_rlo_rlo :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_ror_rlo_rlo(dst, src)) } inst_rrx_r_r :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .RRX, operand_count = 2, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}, {}, {}}} } -emit_rrx_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_rrx_r_r(dst, src)) } +emit_rrx_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_rrx_r_r(dst, src)) } inst_adr_rlo_rel :: #force_inline proc "contextless" (dst: Register, offset: i64) -> Instruction { return Instruction{mnemonic = .ADR, operand_count = 2, mode = .T32, cond = 14, length = 2, ops = {op_reg(dst), op_rel_offset(offset), {}, {}, {}, {}}} } -emit_adr_rlo_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, offset: i64) { append(instructions, inst_adr_rlo_rel(dst, offset)) } +emit_adr_rlo_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, offset: i64) { append_elem(instructions, inst_adr_rlo_rel(dst, offset)) } inst_neg_rlo_rlo :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .NEG, operand_count = 2, mode = .T32, cond = 14, length = 2, ops = {op_reg(dst), op_reg(src), {}, {}, {}, {}}} } -emit_neg_rlo_rlo :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_neg_rlo_rlo(dst, src)) } +emit_neg_rlo_rlo :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_neg_rlo_rlo(dst, src)) } inst_movw_r_imm16 :: #force_inline proc "contextless" (dst: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .MOVW, operand_count = 2, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_imm(imm), {}, {}, {}, {}}} } -emit_movw_r_imm16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64) { append(instructions, inst_movw_r_imm16(dst, imm)) } +emit_movw_r_imm16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64) { append_elem(instructions, inst_movw_r_imm16(dst, imm)) } inst_movt_r_imm16 :: #force_inline proc "contextless" (dst: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .MOVT, operand_count = 2, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_imm(imm), {}, {}, {}, {}}} } -emit_movt_r_imm16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64) { append(instructions, inst_movt_r_imm16(dst, imm)) } +emit_movt_r_imm16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64) { append_elem(instructions, inst_movt_r_imm16(dst, imm)) } inst_bfc_r_imm5_imm5w :: #force_inline proc "contextless" (dst: Register, imm: i64, imm2: i64) -> Instruction { return Instruction{mnemonic = .BFC, operand_count = 3, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_imm(imm), op_imm(imm2), {}, {}, {}}} } -emit_bfc_r_imm5_imm5w :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64, imm2: i64) { append(instructions, inst_bfc_r_imm5_imm5w(dst, imm, imm2)) } +emit_bfc_r_imm5_imm5w :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64, imm2: i64) { append_elem(instructions, inst_bfc_r_imm5_imm5w(dst, imm, imm2)) } inst_bfi_r_r_imm5_imm5w :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64, imm2: i64) -> Instruction { return Instruction{mnemonic = .BFI, operand_count = 4, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_imm(imm), op_imm(imm2), {}, {}}} } -emit_bfi_r_r_imm5_imm5w :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64, imm2: i64) { append(instructions, inst_bfi_r_r_imm5_imm5w(dst, src, imm, imm2)) } +emit_bfi_r_r_imm5_imm5w :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64, imm2: i64) { append_elem(instructions, inst_bfi_r_r_imm5_imm5w(dst, src, imm, imm2)) } inst_sbfx_r_r_imm5_imm5w :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64, imm2: i64) -> Instruction { return Instruction{mnemonic = .SBFX, operand_count = 4, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_imm(imm), op_imm(imm2), {}, {}}} } -emit_sbfx_r_r_imm5_imm5w :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64, imm2: i64) { append(instructions, inst_sbfx_r_r_imm5_imm5w(dst, src, imm, imm2)) } +emit_sbfx_r_r_imm5_imm5w :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64, imm2: i64) { append_elem(instructions, inst_sbfx_r_r_imm5_imm5w(dst, src, imm, imm2)) } inst_ubfx_r_r_imm5_imm5w :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64, imm2: i64) -> Instruction { return Instruction{mnemonic = .UBFX, operand_count = 4, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_imm(imm), op_imm(imm2), {}, {}}} } -emit_ubfx_r_r_imm5_imm5w :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64, imm2: i64) { append(instructions, inst_ubfx_r_r_imm5_imm5w(dst, src, imm, imm2)) } +emit_ubfx_r_r_imm5_imm5w :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64, imm2: i64) { append_elem(instructions, inst_ubfx_r_r_imm5_imm5w(dst, src, imm, imm2)) } inst_sxtb_r_r :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .SXTB, operand_count = 2, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}, {}, {}}} } -emit_sxtb_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_sxtb_r_r(dst, src)) } +emit_sxtb_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_sxtb_r_r(dst, src)) } inst_sxtb16_r_r :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .SXTB16, operand_count = 2, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}, {}, {}}} } -emit_sxtb16_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_sxtb16_r_r(dst, src)) } +emit_sxtb16_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_sxtb16_r_r(dst, src)) } inst_sxth_r_r :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .SXTH, operand_count = 2, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}, {}, {}}} } -emit_sxth_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_sxth_r_r(dst, src)) } +emit_sxth_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_sxth_r_r(dst, src)) } inst_uxtb_r_r :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .UXTB, operand_count = 2, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}, {}, {}}} } -emit_uxtb_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_uxtb_r_r(dst, src)) } +emit_uxtb_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_uxtb_r_r(dst, src)) } inst_uxtb16_r_r :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .UXTB16, operand_count = 2, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}, {}, {}}} } -emit_uxtb16_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_uxtb16_r_r(dst, src)) } +emit_uxtb16_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_uxtb16_r_r(dst, src)) } inst_uxth_r_r :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .UXTH, operand_count = 2, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}, {}, {}}} } -emit_uxth_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_uxth_r_r(dst, src)) } +emit_uxth_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_uxth_r_r(dst, src)) } inst_sxtab_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .SXTAB, operand_count = 3, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}, {}, {}}} } -emit_sxtab_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_sxtab_r_r_r(dst, src, src2)) } +emit_sxtab_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_sxtab_r_r_r(dst, src, src2)) } inst_sxtab16_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .SXTAB16, operand_count = 3, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}, {}, {}}} } -emit_sxtab16_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_sxtab16_r_r_r(dst, src, src2)) } +emit_sxtab16_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_sxtab16_r_r_r(dst, src, src2)) } inst_sxtah_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .SXTAH, operand_count = 3, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}, {}, {}}} } -emit_sxtah_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_sxtah_r_r_r(dst, src, src2)) } +emit_sxtah_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_sxtah_r_r_r(dst, src, src2)) } inst_uxtab_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .UXTAB, operand_count = 3, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}, {}, {}}} } -emit_uxtab_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_uxtab_r_r_r(dst, src, src2)) } +emit_uxtab_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_uxtab_r_r_r(dst, src, src2)) } inst_uxtab16_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .UXTAB16, operand_count = 3, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}, {}, {}}} } -emit_uxtab16_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_uxtab16_r_r_r(dst, src, src2)) } +emit_uxtab16_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_uxtab16_r_r_r(dst, src, src2)) } inst_uxtah_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .UXTAH, operand_count = 3, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}, {}, {}}} } -emit_uxtah_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_uxtah_r_r_r(dst, src, src2)) } +emit_uxtah_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_uxtah_r_r_r(dst, src, src2)) } inst_clz_r_r :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .CLZ, operand_count = 2, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}, {}, {}}} } -emit_clz_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_clz_r_r(dst, src)) } +emit_clz_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_clz_r_r(dst, src)) } inst_rbit_r_r :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .RBIT, operand_count = 2, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}, {}, {}}} } -emit_rbit_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_rbit_r_r(dst, src)) } +emit_rbit_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_rbit_r_r(dst, src)) } inst_rev_r_r :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .REV, operand_count = 2, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}, {}, {}}} } -emit_rev_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_rev_r_r(dst, src)) } +emit_rev_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_rev_r_r(dst, src)) } inst_rev16_r_r :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .REV16, operand_count = 2, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}, {}, {}}} } -emit_rev16_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_rev16_r_r(dst, src)) } +emit_rev16_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_rev16_r_r(dst, src)) } inst_revsh_r_r :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .REVSH, operand_count = 2, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}, {}, {}}} } -emit_revsh_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_revsh_r_r(dst, src)) } +emit_revsh_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_revsh_r_r(dst, src)) } inst_sel_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .SEL, operand_count = 3, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}, {}, {}}} } -emit_sel_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_sel_r_r_r(dst, src, src2)) } +emit_sel_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_sel_r_r_r(dst, src, src2)) } inst_pkhbt_r_r_rsh :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register, shift: Shift_Type, amount: u8) -> Instruction { return Instruction{mnemonic = .PKHBT, operand_count = 3, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_reg_shifted(src2, shift, amount), {}, {}, {}}} } -emit_pkhbt_r_r_rsh :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, shift: Shift_Type, amount: u8) { append(instructions, inst_pkhbt_r_r_rsh(dst, src, src2, shift, amount)) } +emit_pkhbt_r_r_rsh :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, shift: Shift_Type, amount: u8) { append_elem(instructions, inst_pkhbt_r_r_rsh(dst, src, src2, shift, amount)) } inst_pkhtb_r_r_rsh :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register, shift: Shift_Type, amount: u8) -> Instruction { return Instruction{mnemonic = .PKHTB, operand_count = 3, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_reg_shifted(src2, shift, amount), {}, {}, {}}} } -emit_pkhtb_r_r_rsh :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, shift: Shift_Type, amount: u8) { append(instructions, inst_pkhtb_r_r_rsh(dst, src, src2, shift, amount)) } +emit_pkhtb_r_r_rsh :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, shift: Shift_Type, amount: u8) { append_elem(instructions, inst_pkhtb_r_r_rsh(dst, src, src2, shift, amount)) } inst_usad8_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .USAD8, operand_count = 3, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}, {}, {}}} } -emit_usad8_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_usad8_r_r_r(dst, src, src2)) } +emit_usad8_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_usad8_r_r_r(dst, src, src2)) } inst_usada8_r_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register, src3: Register) -> Instruction { return Instruction{mnemonic = .USADA8, operand_count = 4, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), op_reg(src3), {}, {}}} } -emit_usada8_r_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, src3: Register) { append(instructions, inst_usada8_r_r_r_r(dst, src, src2, src3)) } +emit_usada8_r_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, src3: Register) { append_elem(instructions, inst_usada8_r_r_r_r(dst, src, src2, src3)) } inst_ssat_r_imm4s_rsh :: #force_inline proc "contextless" (dst: Register, imm: i64, src: Register, shift: Shift_Type, amount: u8) -> Instruction { return Instruction{mnemonic = .SSAT, operand_count = 3, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_imm(imm), op_reg_shifted(src, shift, amount), {}, {}, {}}} } -emit_ssat_r_imm4s_rsh :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64, src: Register, shift: Shift_Type, amount: u8) { append(instructions, inst_ssat_r_imm4s_rsh(dst, imm, src, shift, amount)) } +emit_ssat_r_imm4s_rsh :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64, src: Register, shift: Shift_Type, amount: u8) { append_elem(instructions, inst_ssat_r_imm4s_rsh(dst, imm, src, shift, amount)) } inst_usat_r_imm4s_rsh :: #force_inline proc "contextless" (dst: Register, imm: i64, src: Register, shift: Shift_Type, amount: u8) -> Instruction { return Instruction{mnemonic = .USAT, operand_count = 3, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_imm(imm), op_reg_shifted(src, shift, amount), {}, {}, {}}} } -emit_usat_r_imm4s_rsh :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64, src: Register, shift: Shift_Type, amount: u8) { append(instructions, inst_usat_r_imm4s_rsh(dst, imm, src, shift, amount)) } +emit_usat_r_imm4s_rsh :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64, src: Register, shift: Shift_Type, amount: u8) { append_elem(instructions, inst_usat_r_imm4s_rsh(dst, imm, src, shift, amount)) } inst_ssat16_r_imm4s_r :: #force_inline proc "contextless" (dst: Register, imm: i64, src: Register) -> Instruction { return Instruction{mnemonic = .SSAT16, operand_count = 3, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_imm(imm), op_reg(src), {}, {}, {}}} } -emit_ssat16_r_imm4s_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64, src: Register) { append(instructions, inst_ssat16_r_imm4s_r(dst, imm, src)) } +emit_ssat16_r_imm4s_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64, src: Register) { append_elem(instructions, inst_ssat16_r_imm4s_r(dst, imm, src)) } inst_usat16_r_imm4s_r :: #force_inline proc "contextless" (dst: Register, imm: i64, src: Register) -> Instruction { return Instruction{mnemonic = .USAT16, operand_count = 3, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_imm(imm), op_reg(src), {}, {}, {}}} } -emit_usat16_r_imm4s_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64, src: Register) { append(instructions, inst_usat16_r_imm4s_r(dst, imm, src)) } +emit_usat16_r_imm4s_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64, src: Register) { append_elem(instructions, inst_usat16_r_imm4s_r(dst, imm, src)) } inst_qadd_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .QADD, operand_count = 3, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}, {}, {}}} } -emit_qadd_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_qadd_r_r_r(dst, src, src2)) } +emit_qadd_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_qadd_r_r_r(dst, src, src2)) } inst_qsub_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .QSUB, operand_count = 3, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}, {}, {}}} } -emit_qsub_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_qsub_r_r_r(dst, src, src2)) } +emit_qsub_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_qsub_r_r_r(dst, src, src2)) } inst_qdadd_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .QDADD, operand_count = 3, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}, {}, {}}} } -emit_qdadd_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_qdadd_r_r_r(dst, src, src2)) } +emit_qdadd_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_qdadd_r_r_r(dst, src, src2)) } inst_qdsub_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .QDSUB, operand_count = 3, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}, {}, {}}} } -emit_qdsub_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_qdsub_r_r_r(dst, src, src2)) } +emit_qdsub_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_qdsub_r_r_r(dst, src, src2)) } inst_sadd8_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .SADD8, operand_count = 3, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}, {}, {}}} } -emit_sadd8_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_sadd8_r_r_r(dst, src, src2)) } +emit_sadd8_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_sadd8_r_r_r(dst, src, src2)) } inst_sadd16_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .SADD16, operand_count = 3, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}, {}, {}}} } -emit_sadd16_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_sadd16_r_r_r(dst, src, src2)) } +emit_sadd16_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_sadd16_r_r_r(dst, src, src2)) } inst_sasx_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .SASX, operand_count = 3, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}, {}, {}}} } -emit_sasx_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_sasx_r_r_r(dst, src, src2)) } +emit_sasx_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_sasx_r_r_r(dst, src, src2)) } inst_ssax_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .SSAX, operand_count = 3, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}, {}, {}}} } -emit_ssax_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_ssax_r_r_r(dst, src, src2)) } +emit_ssax_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_ssax_r_r_r(dst, src, src2)) } inst_ssub8_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .SSUB8, operand_count = 3, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}, {}, {}}} } -emit_ssub8_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_ssub8_r_r_r(dst, src, src2)) } +emit_ssub8_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_ssub8_r_r_r(dst, src, src2)) } inst_ssub16_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .SSUB16, operand_count = 3, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}, {}, {}}} } -emit_ssub16_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_ssub16_r_r_r(dst, src, src2)) } +emit_ssub16_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_ssub16_r_r_r(dst, src, src2)) } inst_uadd8_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .UADD8, operand_count = 3, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}, {}, {}}} } -emit_uadd8_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_uadd8_r_r_r(dst, src, src2)) } +emit_uadd8_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_uadd8_r_r_r(dst, src, src2)) } inst_uadd16_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .UADD16, operand_count = 3, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}, {}, {}}} } -emit_uadd16_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_uadd16_r_r_r(dst, src, src2)) } +emit_uadd16_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_uadd16_r_r_r(dst, src, src2)) } inst_uasx_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .UASX, operand_count = 3, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}, {}, {}}} } -emit_uasx_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_uasx_r_r_r(dst, src, src2)) } +emit_uasx_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_uasx_r_r_r(dst, src, src2)) } inst_usax_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .USAX, operand_count = 3, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}, {}, {}}} } -emit_usax_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_usax_r_r_r(dst, src, src2)) } +emit_usax_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_usax_r_r_r(dst, src, src2)) } inst_usub8_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .USUB8, operand_count = 3, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}, {}, {}}} } -emit_usub8_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_usub8_r_r_r(dst, src, src2)) } +emit_usub8_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_usub8_r_r_r(dst, src, src2)) } inst_usub16_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .USUB16, operand_count = 3, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}, {}, {}}} } -emit_usub16_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_usub16_r_r_r(dst, src, src2)) } +emit_usub16_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_usub16_r_r_r(dst, src, src2)) } inst_qadd8_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .QADD8, operand_count = 3, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}, {}, {}}} } -emit_qadd8_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_qadd8_r_r_r(dst, src, src2)) } +emit_qadd8_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_qadd8_r_r_r(dst, src, src2)) } inst_qadd16_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .QADD16, operand_count = 3, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}, {}, {}}} } -emit_qadd16_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_qadd16_r_r_r(dst, src, src2)) } +emit_qadd16_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_qadd16_r_r_r(dst, src, src2)) } inst_qasx_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .QASX, operand_count = 3, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}, {}, {}}} } -emit_qasx_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_qasx_r_r_r(dst, src, src2)) } +emit_qasx_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_qasx_r_r_r(dst, src, src2)) } inst_qsax_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .QSAX, operand_count = 3, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}, {}, {}}} } -emit_qsax_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_qsax_r_r_r(dst, src, src2)) } +emit_qsax_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_qsax_r_r_r(dst, src, src2)) } inst_qsub8_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .QSUB8, operand_count = 3, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}, {}, {}}} } -emit_qsub8_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_qsub8_r_r_r(dst, src, src2)) } +emit_qsub8_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_qsub8_r_r_r(dst, src, src2)) } inst_qsub16_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .QSUB16, operand_count = 3, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}, {}, {}}} } -emit_qsub16_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_qsub16_r_r_r(dst, src, src2)) } +emit_qsub16_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_qsub16_r_r_r(dst, src, src2)) } inst_uqadd8_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .UQADD8, operand_count = 3, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}, {}, {}}} } -emit_uqadd8_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_uqadd8_r_r_r(dst, src, src2)) } +emit_uqadd8_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_uqadd8_r_r_r(dst, src, src2)) } inst_uqadd16_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .UQADD16, operand_count = 3, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}, {}, {}}} } -emit_uqadd16_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_uqadd16_r_r_r(dst, src, src2)) } +emit_uqadd16_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_uqadd16_r_r_r(dst, src, src2)) } inst_uqasx_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .UQASX, operand_count = 3, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}, {}, {}}} } -emit_uqasx_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_uqasx_r_r_r(dst, src, src2)) } +emit_uqasx_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_uqasx_r_r_r(dst, src, src2)) } inst_uqsax_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .UQSAX, operand_count = 3, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}, {}, {}}} } -emit_uqsax_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_uqsax_r_r_r(dst, src, src2)) } +emit_uqsax_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_uqsax_r_r_r(dst, src, src2)) } inst_uqsub8_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .UQSUB8, operand_count = 3, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}, {}, {}}} } -emit_uqsub8_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_uqsub8_r_r_r(dst, src, src2)) } +emit_uqsub8_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_uqsub8_r_r_r(dst, src, src2)) } inst_uqsub16_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .UQSUB16, operand_count = 3, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}, {}, {}}} } -emit_uqsub16_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_uqsub16_r_r_r(dst, src, src2)) } +emit_uqsub16_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_uqsub16_r_r_r(dst, src, src2)) } inst_shadd8_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .SHADD8, operand_count = 3, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}, {}, {}}} } -emit_shadd8_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_shadd8_r_r_r(dst, src, src2)) } +emit_shadd8_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_shadd8_r_r_r(dst, src, src2)) } inst_shadd16_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .SHADD16, operand_count = 3, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}, {}, {}}} } -emit_shadd16_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_shadd16_r_r_r(dst, src, src2)) } +emit_shadd16_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_shadd16_r_r_r(dst, src, src2)) } inst_shasx_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .SHASX, operand_count = 3, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}, {}, {}}} } -emit_shasx_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_shasx_r_r_r(dst, src, src2)) } +emit_shasx_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_shasx_r_r_r(dst, src, src2)) } inst_shsax_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .SHSAX, operand_count = 3, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}, {}, {}}} } -emit_shsax_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_shsax_r_r_r(dst, src, src2)) } +emit_shsax_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_shsax_r_r_r(dst, src, src2)) } inst_shsub8_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .SHSUB8, operand_count = 3, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}, {}, {}}} } -emit_shsub8_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_shsub8_r_r_r(dst, src, src2)) } +emit_shsub8_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_shsub8_r_r_r(dst, src, src2)) } inst_shsub16_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .SHSUB16, operand_count = 3, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}, {}, {}}} } -emit_shsub16_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_shsub16_r_r_r(dst, src, src2)) } +emit_shsub16_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_shsub16_r_r_r(dst, src, src2)) } inst_uhadd8_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .UHADD8, operand_count = 3, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}, {}, {}}} } -emit_uhadd8_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_uhadd8_r_r_r(dst, src, src2)) } +emit_uhadd8_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_uhadd8_r_r_r(dst, src, src2)) } inst_uhadd16_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .UHADD16, operand_count = 3, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}, {}, {}}} } -emit_uhadd16_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_uhadd16_r_r_r(dst, src, src2)) } +emit_uhadd16_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_uhadd16_r_r_r(dst, src, src2)) } inst_uhasx_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .UHASX, operand_count = 3, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}, {}, {}}} } -emit_uhasx_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_uhasx_r_r_r(dst, src, src2)) } +emit_uhasx_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_uhasx_r_r_r(dst, src, src2)) } inst_uhsax_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .UHSAX, operand_count = 3, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}, {}, {}}} } -emit_uhsax_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_uhsax_r_r_r(dst, src, src2)) } +emit_uhsax_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_uhsax_r_r_r(dst, src, src2)) } inst_uhsub8_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .UHSUB8, operand_count = 3, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}, {}, {}}} } -emit_uhsub8_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_uhsub8_r_r_r(dst, src, src2)) } +emit_uhsub8_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_uhsub8_r_r_r(dst, src, src2)) } inst_uhsub16_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .UHSUB16, operand_count = 3, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}, {}, {}}} } -emit_uhsub16_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_uhsub16_r_r_r(dst, src, src2)) } +emit_uhsub16_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_uhsub16_r_r_r(dst, src, src2)) } inst_smuad_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .SMUAD, operand_count = 3, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}, {}, {}}} } -emit_smuad_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_smuad_r_r_r(dst, src, src2)) } +emit_smuad_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_smuad_r_r_r(dst, src, src2)) } inst_smuadx_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .SMUADX, operand_count = 3, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}, {}, {}}} } -emit_smuadx_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_smuadx_r_r_r(dst, src, src2)) } +emit_smuadx_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_smuadx_r_r_r(dst, src, src2)) } inst_smusd_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .SMUSD, operand_count = 3, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}, {}, {}}} } -emit_smusd_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_smusd_r_r_r(dst, src, src2)) } +emit_smusd_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_smusd_r_r_r(dst, src, src2)) } inst_smusdx_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .SMUSDX, operand_count = 3, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}, {}, {}}} } -emit_smusdx_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_smusdx_r_r_r(dst, src, src2)) } +emit_smusdx_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_smusdx_r_r_r(dst, src, src2)) } inst_smlad_r_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register, src3: Register) -> Instruction { return Instruction{mnemonic = .SMLAD, operand_count = 4, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), op_reg(src3), {}, {}}} } -emit_smlad_r_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, src3: Register) { append(instructions, inst_smlad_r_r_r_r(dst, src, src2, src3)) } +emit_smlad_r_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, src3: Register) { append_elem(instructions, inst_smlad_r_r_r_r(dst, src, src2, src3)) } inst_smladx_r_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register, src3: Register) -> Instruction { return Instruction{mnemonic = .SMLADX, operand_count = 4, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), op_reg(src3), {}, {}}} } -emit_smladx_r_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, src3: Register) { append(instructions, inst_smladx_r_r_r_r(dst, src, src2, src3)) } +emit_smladx_r_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, src3: Register) { append_elem(instructions, inst_smladx_r_r_r_r(dst, src, src2, src3)) } inst_smlsd_r_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register, src3: Register) -> Instruction { return Instruction{mnemonic = .SMLSD, operand_count = 4, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), op_reg(src3), {}, {}}} } -emit_smlsd_r_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, src3: Register) { append(instructions, inst_smlsd_r_r_r_r(dst, src, src2, src3)) } +emit_smlsd_r_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, src3: Register) { append_elem(instructions, inst_smlsd_r_r_r_r(dst, src, src2, src3)) } inst_smlsdx_r_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register, src3: Register) -> Instruction { return Instruction{mnemonic = .SMLSDX, operand_count = 4, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), op_reg(src3), {}, {}}} } -emit_smlsdx_r_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, src3: Register) { append(instructions, inst_smlsdx_r_r_r_r(dst, src, src2, src3)) } +emit_smlsdx_r_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, src3: Register) { append_elem(instructions, inst_smlsdx_r_r_r_r(dst, src, src2, src3)) } inst_smlald_r_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register, src3: Register) -> Instruction { return Instruction{mnemonic = .SMLALD, operand_count = 4, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), op_reg(src3), {}, {}}} } -emit_smlald_r_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, src3: Register) { append(instructions, inst_smlald_r_r_r_r(dst, src, src2, src3)) } +emit_smlald_r_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, src3: Register) { append_elem(instructions, inst_smlald_r_r_r_r(dst, src, src2, src3)) } inst_smlaldx_r_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register, src3: Register) -> Instruction { return Instruction{mnemonic = .SMLALDX, operand_count = 4, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), op_reg(src3), {}, {}}} } -emit_smlaldx_r_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, src3: Register) { append(instructions, inst_smlaldx_r_r_r_r(dst, src, src2, src3)) } +emit_smlaldx_r_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, src3: Register) { append_elem(instructions, inst_smlaldx_r_r_r_r(dst, src, src2, src3)) } inst_smlsld_r_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register, src3: Register) -> Instruction { return Instruction{mnemonic = .SMLSLD, operand_count = 4, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), op_reg(src3), {}, {}}} } -emit_smlsld_r_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, src3: Register) { append(instructions, inst_smlsld_r_r_r_r(dst, src, src2, src3)) } +emit_smlsld_r_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, src3: Register) { append_elem(instructions, inst_smlsld_r_r_r_r(dst, src, src2, src3)) } inst_smlsldx_r_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register, src3: Register) -> Instruction { return Instruction{mnemonic = .SMLSLDX, operand_count = 4, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), op_reg(src3), {}, {}}} } -emit_smlsldx_r_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, src3: Register) { append(instructions, inst_smlsldx_r_r_r_r(dst, src, src2, src3)) } +emit_smlsldx_r_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, src3: Register) { append_elem(instructions, inst_smlsldx_r_r_r_r(dst, src, src2, src3)) } inst_smmul_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .SMMUL, operand_count = 3, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}, {}, {}}} } -emit_smmul_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_smmul_r_r_r(dst, src, src2)) } +emit_smmul_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_smmul_r_r_r(dst, src, src2)) } inst_smmulr_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .SMMULR, operand_count = 3, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}, {}, {}}} } -emit_smmulr_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_smmulr_r_r_r(dst, src, src2)) } +emit_smmulr_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_smmulr_r_r_r(dst, src, src2)) } inst_smmla_r_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register, src3: Register) -> Instruction { return Instruction{mnemonic = .SMMLA, operand_count = 4, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), op_reg(src3), {}, {}}} } -emit_smmla_r_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, src3: Register) { append(instructions, inst_smmla_r_r_r_r(dst, src, src2, src3)) } +emit_smmla_r_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, src3: Register) { append_elem(instructions, inst_smmla_r_r_r_r(dst, src, src2, src3)) } inst_smmlar_r_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register, src3: Register) -> Instruction { return Instruction{mnemonic = .SMMLAR, operand_count = 4, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), op_reg(src3), {}, {}}} } -emit_smmlar_r_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, src3: Register) { append(instructions, inst_smmlar_r_r_r_r(dst, src, src2, src3)) } +emit_smmlar_r_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, src3: Register) { append_elem(instructions, inst_smmlar_r_r_r_r(dst, src, src2, src3)) } inst_smmls_r_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register, src3: Register) -> Instruction { return Instruction{mnemonic = .SMMLS, operand_count = 4, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), op_reg(src3), {}, {}}} } -emit_smmls_r_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, src3: Register) { append(instructions, inst_smmls_r_r_r_r(dst, src, src2, src3)) } +emit_smmls_r_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, src3: Register) { append_elem(instructions, inst_smmls_r_r_r_r(dst, src, src2, src3)) } inst_smmlsr_r_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register, src3: Register) -> Instruction { return Instruction{mnemonic = .SMMLSR, operand_count = 4, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), op_reg(src3), {}, {}}} } -emit_smmlsr_r_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, src3: Register) { append(instructions, inst_smmlsr_r_r_r_r(dst, src, src2, src3)) } +emit_smmlsr_r_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, src3: Register) { append_elem(instructions, inst_smmlsr_r_r_r_r(dst, src, src2, src3)) } inst_mul_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .MUL, operand_count = 3, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}, {}, {}}} } inst_mul_rlo_rlo :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .MUL, operand_count = 2, mode = .T32, cond = 14, length = 2, ops = {op_reg(dst), op_reg(src), {}, {}, {}, {}}} } -emit_mul_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_mul_r_r_r(dst, src, src2)) } -emit_mul_rlo_rlo :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_mul_rlo_rlo(dst, src)) } +emit_mul_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_mul_r_r_r(dst, src, src2)) } +emit_mul_rlo_rlo :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_mul_rlo_rlo(dst, src)) } inst_mla_r_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register, src3: Register) -> Instruction { return Instruction{mnemonic = .MLA, operand_count = 4, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), op_reg(src3), {}, {}}} } -emit_mla_r_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, src3: Register) { append(instructions, inst_mla_r_r_r_r(dst, src, src2, src3)) } +emit_mla_r_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, src3: Register) { append_elem(instructions, inst_mla_r_r_r_r(dst, src, src2, src3)) } inst_mls_r_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register, src3: Register) -> Instruction { return Instruction{mnemonic = .MLS, operand_count = 4, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), op_reg(src3), {}, {}}} } -emit_mls_r_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, src3: Register) { append(instructions, inst_mls_r_r_r_r(dst, src, src2, src3)) } +emit_mls_r_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, src3: Register) { append_elem(instructions, inst_mls_r_r_r_r(dst, src, src2, src3)) } inst_umull_r_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register, src3: Register) -> Instruction { return Instruction{mnemonic = .UMULL, operand_count = 4, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), op_reg(src3), {}, {}}} } -emit_umull_r_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, src3: Register) { append(instructions, inst_umull_r_r_r_r(dst, src, src2, src3)) } +emit_umull_r_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, src3: Register) { append_elem(instructions, inst_umull_r_r_r_r(dst, src, src2, src3)) } inst_umlal_r_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register, src3: Register) -> Instruction { return Instruction{mnemonic = .UMLAL, operand_count = 4, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), op_reg(src3), {}, {}}} } -emit_umlal_r_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, src3: Register) { append(instructions, inst_umlal_r_r_r_r(dst, src, src2, src3)) } +emit_umlal_r_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, src3: Register) { append_elem(instructions, inst_umlal_r_r_r_r(dst, src, src2, src3)) } inst_smull_r_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register, src3: Register) -> Instruction { return Instruction{mnemonic = .SMULL, operand_count = 4, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), op_reg(src3), {}, {}}} } -emit_smull_r_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, src3: Register) { append(instructions, inst_smull_r_r_r_r(dst, src, src2, src3)) } +emit_smull_r_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, src3: Register) { append_elem(instructions, inst_smull_r_r_r_r(dst, src, src2, src3)) } inst_smlal_r_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register, src3: Register) -> Instruction { return Instruction{mnemonic = .SMLAL, operand_count = 4, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), op_reg(src3), {}, {}}} } -emit_smlal_r_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, src3: Register) { append(instructions, inst_smlal_r_r_r_r(dst, src, src2, src3)) } +emit_smlal_r_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, src3: Register) { append_elem(instructions, inst_smlal_r_r_r_r(dst, src, src2, src3)) } inst_umaal_r_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register, src3: Register) -> Instruction { return Instruction{mnemonic = .UMAAL, operand_count = 4, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), op_reg(src3), {}, {}}} } -emit_umaal_r_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, src3: Register) { append(instructions, inst_umaal_r_r_r_r(dst, src, src2, src3)) } +emit_umaal_r_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, src3: Register) { append_elem(instructions, inst_umaal_r_r_r_r(dst, src, src2, src3)) } inst_smlabb_r_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register, src3: Register) -> Instruction { return Instruction{mnemonic = .SMLABB, operand_count = 4, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), op_reg(src3), {}, {}}} } -emit_smlabb_r_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, src3: Register) { append(instructions, inst_smlabb_r_r_r_r(dst, src, src2, src3)) } +emit_smlabb_r_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, src3: Register) { append_elem(instructions, inst_smlabb_r_r_r_r(dst, src, src2, src3)) } inst_smlabt_r_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register, src3: Register) -> Instruction { return Instruction{mnemonic = .SMLABT, operand_count = 4, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), op_reg(src3), {}, {}}} } -emit_smlabt_r_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, src3: Register) { append(instructions, inst_smlabt_r_r_r_r(dst, src, src2, src3)) } +emit_smlabt_r_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, src3: Register) { append_elem(instructions, inst_smlabt_r_r_r_r(dst, src, src2, src3)) } inst_smlatb_r_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register, src3: Register) -> Instruction { return Instruction{mnemonic = .SMLATB, operand_count = 4, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), op_reg(src3), {}, {}}} } -emit_smlatb_r_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, src3: Register) { append(instructions, inst_smlatb_r_r_r_r(dst, src, src2, src3)) } +emit_smlatb_r_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, src3: Register) { append_elem(instructions, inst_smlatb_r_r_r_r(dst, src, src2, src3)) } inst_smlatt_r_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register, src3: Register) -> Instruction { return Instruction{mnemonic = .SMLATT, operand_count = 4, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), op_reg(src3), {}, {}}} } -emit_smlatt_r_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, src3: Register) { append(instructions, inst_smlatt_r_r_r_r(dst, src, src2, src3)) } +emit_smlatt_r_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, src3: Register) { append_elem(instructions, inst_smlatt_r_r_r_r(dst, src, src2, src3)) } inst_smlawb_r_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register, src3: Register) -> Instruction { return Instruction{mnemonic = .SMLAWB, operand_count = 4, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), op_reg(src3), {}, {}}} } -emit_smlawb_r_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, src3: Register) { append(instructions, inst_smlawb_r_r_r_r(dst, src, src2, src3)) } +emit_smlawb_r_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, src3: Register) { append_elem(instructions, inst_smlawb_r_r_r_r(dst, src, src2, src3)) } inst_smlawt_r_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register, src3: Register) -> Instruction { return Instruction{mnemonic = .SMLAWT, operand_count = 4, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), op_reg(src3), {}, {}}} } -emit_smlawt_r_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, src3: Register) { append(instructions, inst_smlawt_r_r_r_r(dst, src, src2, src3)) } +emit_smlawt_r_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, src3: Register) { append_elem(instructions, inst_smlawt_r_r_r_r(dst, src, src2, src3)) } inst_smulbb_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .SMULBB, operand_count = 3, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}, {}, {}}} } -emit_smulbb_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_smulbb_r_r_r(dst, src, src2)) } +emit_smulbb_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_smulbb_r_r_r(dst, src, src2)) } inst_smulbt_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .SMULBT, operand_count = 3, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}, {}, {}}} } -emit_smulbt_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_smulbt_r_r_r(dst, src, src2)) } +emit_smulbt_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_smulbt_r_r_r(dst, src, src2)) } inst_smultb_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .SMULTB, operand_count = 3, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}, {}, {}}} } -emit_smultb_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_smultb_r_r_r(dst, src, src2)) } +emit_smultb_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_smultb_r_r_r(dst, src, src2)) } inst_smultt_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .SMULTT, operand_count = 3, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}, {}, {}}} } -emit_smultt_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_smultt_r_r_r(dst, src, src2)) } +emit_smultt_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_smultt_r_r_r(dst, src, src2)) } inst_smulwb_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .SMULWB, operand_count = 3, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}, {}, {}}} } -emit_smulwb_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_smulwb_r_r_r(dst, src, src2)) } +emit_smulwb_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_smulwb_r_r_r(dst, src, src2)) } inst_smulwt_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .SMULWT, operand_count = 3, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}, {}, {}}} } -emit_smulwt_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_smulwt_r_r_r(dst, src, src2)) } +emit_smulwt_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_smulwt_r_r_r(dst, src, src2)) } inst_smlalbb_r_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register, src3: Register) -> Instruction { return Instruction{mnemonic = .SMLALBB, operand_count = 4, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), op_reg(src3), {}, {}}} } -emit_smlalbb_r_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, src3: Register) { append(instructions, inst_smlalbb_r_r_r_r(dst, src, src2, src3)) } +emit_smlalbb_r_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, src3: Register) { append_elem(instructions, inst_smlalbb_r_r_r_r(dst, src, src2, src3)) } inst_smlalbt_r_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register, src3: Register) -> Instruction { return Instruction{mnemonic = .SMLALBT, operand_count = 4, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), op_reg(src3), {}, {}}} } -emit_smlalbt_r_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, src3: Register) { append(instructions, inst_smlalbt_r_r_r_r(dst, src, src2, src3)) } +emit_smlalbt_r_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, src3: Register) { append_elem(instructions, inst_smlalbt_r_r_r_r(dst, src, src2, src3)) } inst_smlaltb_r_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register, src3: Register) -> Instruction { return Instruction{mnemonic = .SMLALTB, operand_count = 4, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), op_reg(src3), {}, {}}} } -emit_smlaltb_r_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, src3: Register) { append(instructions, inst_smlaltb_r_r_r_r(dst, src, src2, src3)) } +emit_smlaltb_r_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, src3: Register) { append_elem(instructions, inst_smlaltb_r_r_r_r(dst, src, src2, src3)) } inst_smlaltt_r_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register, src3: Register) -> Instruction { return Instruction{mnemonic = .SMLALTT, operand_count = 4, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), op_reg(src3), {}, {}}} } -emit_smlaltt_r_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, src3: Register) { append(instructions, inst_smlaltt_r_r_r_r(dst, src, src2, src3)) } +emit_smlaltt_r_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, src3: Register) { append_elem(instructions, inst_smlaltt_r_r_r_r(dst, src, src2, src3)) } inst_sdiv_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .SDIV, operand_count = 3, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}, {}, {}}} } -emit_sdiv_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_sdiv_r_r_r(dst, src, src2)) } +emit_sdiv_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_sdiv_r_r_r(dst, src, src2)) } inst_udiv_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .UDIV, operand_count = 3, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}, {}, {}}} } -emit_udiv_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_udiv_r_r_r(dst, src, src2)) } +emit_udiv_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_udiv_r_r_r(dst, src, src2)) } inst_b_rel :: #force_inline proc "contextless" (offset: i64) -> Instruction { return Instruction{mnemonic = .B, operand_count = 1, mode = .A32, cond = 14, length = 4, ops = {op_rel_offset(offset), {}, {}, {}, {}, {}}} } inst_b_rel_cond :: #force_inline proc "contextless" (offset: i64, imm: i64) -> Instruction { return Instruction{mnemonic = .B, operand_count = 2, mode = .T32, cond = 14, length = 2, ops = {op_rel_offset(offset), op_imm(imm), {}, {}, {}, {}}} } -emit_b_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, offset: i64) { append(instructions, inst_b_rel(offset)) } -emit_b_rel_cond :: #force_inline proc(instructions: ^[dynamic]Instruction, offset: i64, imm: i64) { append(instructions, inst_b_rel_cond(offset, imm)) } +emit_b_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, offset: i64) { append_elem(instructions, inst_b_rel(offset)) } +emit_b_rel_cond :: #force_inline proc(instructions: ^[dynamic]Instruction, offset: i64, imm: i64) { append_elem(instructions, inst_b_rel_cond(offset, imm)) } inst_bl_rel :: #force_inline proc "contextless" (offset: i64) -> Instruction { return Instruction{mnemonic = .BL, operand_count = 1, mode = .A32, cond = 14, length = 4, ops = {op_rel_offset(offset), {}, {}, {}, {}, {}}} } -emit_bl_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, offset: i64) { append(instructions, inst_bl_rel(offset)) } +emit_bl_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, offset: i64) { append_elem(instructions, inst_bl_rel(offset)) } inst_bx_r :: #force_inline proc "contextless" (dst: Register) -> Instruction { return Instruction{mnemonic = .BX, operand_count = 1, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), {}, {}, {}, {}, {}}} } -emit_bx_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register) { append(instructions, inst_bx_r(dst)) } +emit_bx_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register) { append_elem(instructions, inst_bx_r(dst)) } inst_blx_r :: #force_inline proc "contextless" (dst: Register) -> Instruction { return Instruction{mnemonic = .BLX, operand_count = 1, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), {}, {}, {}, {}, {}}} } inst_blx_rel :: #force_inline proc "contextless" (offset: i64) -> Instruction { return Instruction{mnemonic = .BLX, operand_count = 1, mode = .A32, cond = 14, length = 4, ops = {op_rel_offset(offset), {}, {}, {}, {}, {}}} } -emit_blx_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register) { append(instructions, inst_blx_r(dst)) } -emit_blx_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, offset: i64) { append(instructions, inst_blx_rel(offset)) } +emit_blx_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register) { append_elem(instructions, inst_blx_r(dst)) } +emit_blx_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, offset: i64) { append_elem(instructions, inst_blx_rel(offset)) } inst_bxj_r :: #force_inline proc "contextless" (dst: Register) -> Instruction { return Instruction{mnemonic = .BXJ, operand_count = 1, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), {}, {}, {}, {}, {}}} } -emit_bxj_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register) { append(instructions, inst_bxj_r(dst)) } +emit_bxj_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register) { append_elem(instructions, inst_bxj_r(dst)) } inst_cbz_rlo_rel :: #force_inline proc "contextless" (dst: Register, offset: i64) -> Instruction { return Instruction{mnemonic = .CBZ, operand_count = 2, mode = .T32, cond = 14, length = 2, ops = {op_reg(dst), op_rel_offset(offset), {}, {}, {}, {}}} } -emit_cbz_rlo_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, offset: i64) { append(instructions, inst_cbz_rlo_rel(dst, offset)) } +emit_cbz_rlo_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, offset: i64) { append_elem(instructions, inst_cbz_rlo_rel(dst, offset)) } inst_cbnz_rlo_rel :: #force_inline proc "contextless" (dst: Register, offset: i64) -> Instruction { return Instruction{mnemonic = .CBNZ, operand_count = 2, mode = .T32, cond = 14, length = 2, ops = {op_reg(dst), op_rel_offset(offset), {}, {}, {}, {}}} } -emit_cbnz_rlo_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, offset: i64) { append(instructions, inst_cbnz_rlo_rel(dst, offset)) } +emit_cbnz_rlo_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, offset: i64) { append_elem(instructions, inst_cbnz_rlo_rel(dst, offset)) } inst_tbb_r_r :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .TBB, operand_count = 2, mode = .T32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}, {}, {}}} } -emit_tbb_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_tbb_r_r(dst, src)) } +emit_tbb_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_tbb_r_r(dst, src)) } inst_tbh_r_r :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .TBH, operand_count = 2, mode = .T32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}, {}, {}}} } -emit_tbh_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_tbh_r_r(dst, src)) } +emit_tbh_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_tbh_r_r(dst, src)) } inst_msr_psr_immm :: #force_inline proc "contextless" (imm: i64, imm2: i64) -> Instruction { return Instruction{mnemonic = .MSR, operand_count = 2, mode = .A32, cond = 14, length = 4, ops = {op_imm(imm), op_imm(imm2), {}, {}, {}, {}}} } inst_msr_psr_r :: #force_inline proc "contextless" (imm: i64, src: Register) -> Instruction { return Instruction{mnemonic = .MSR, operand_count = 2, mode = .A32, cond = 14, length = 4, ops = {op_imm(imm), op_reg(src), {}, {}, {}, {}}} } -emit_msr_psr_immm :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, imm2: i64) { append(instructions, inst_msr_psr_immm(imm, imm2)) } -emit_msr_psr_r :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, src: Register) { append(instructions, inst_msr_psr_r(imm, src)) } +emit_msr_psr_immm :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, imm2: i64) { append_elem(instructions, inst_msr_psr_immm(imm, imm2)) } +emit_msr_psr_r :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, src: Register) { append_elem(instructions, inst_msr_psr_r(imm, src)) } inst_mrs_r_psr :: #force_inline proc "contextless" (dst: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .MRS, operand_count = 2, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_imm(imm), {}, {}, {}, {}}} } -emit_mrs_r_psr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64) { append(instructions, inst_mrs_r_psr(dst, imm)) } +emit_mrs_r_psr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64) { append_elem(instructions, inst_mrs_r_psr(dst, imm)) } inst_cps_ifl :: #force_inline proc "contextless" (imm: i64) -> Instruction { return Instruction{mnemonic = .CPS, operand_count = 1, mode = .A32, cond = 14, length = 4, ops = {op_imm(imm), {}, {}, {}, {}, {}}} } -emit_cps_ifl :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64) { append(instructions, inst_cps_ifl(imm)) } +emit_cps_ifl :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64) { append_elem(instructions, inst_cps_ifl(imm)) } inst_setend_end :: #force_inline proc "contextless" (imm: i64) -> Instruction { return Instruction{mnemonic = .SETEND, operand_count = 1, mode = .A32, cond = 14, length = 4, ops = {op_imm(imm), {}, {}, {}, {}, {}}} } -emit_setend_end :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64) { append(instructions, inst_setend_end(imm)) } +emit_setend_end :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64) { append_elem(instructions, inst_setend_end(imm)) } inst_nop_none :: #force_inline proc "contextless" () -> Instruction { return Instruction{mnemonic = .NOP, operand_count = 0, mode = .A32, cond = 14, length = 4, ops = {{}, {}, {}, {}, {}, {}}} } -emit_nop_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_nop_none()) } +emit_nop_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_nop_none()) } inst_yield_none :: #force_inline proc "contextless" () -> Instruction { return Instruction{mnemonic = .YIELD, operand_count = 0, mode = .A32, cond = 14, length = 4, ops = {{}, {}, {}, {}, {}, {}}} } -emit_yield_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_yield_none()) } +emit_yield_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_yield_none()) } inst_wfe_none :: #force_inline proc "contextless" () -> Instruction { return Instruction{mnemonic = .WFE, operand_count = 0, mode = .A32, cond = 14, length = 4, ops = {{}, {}, {}, {}, {}, {}}} } -emit_wfe_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_wfe_none()) } +emit_wfe_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_wfe_none()) } inst_wfi_none :: #force_inline proc "contextless" () -> Instruction { return Instruction{mnemonic = .WFI, operand_count = 0, mode = .A32, cond = 14, length = 4, ops = {{}, {}, {}, {}, {}, {}}} } -emit_wfi_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_wfi_none()) } +emit_wfi_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_wfi_none()) } inst_sev_none :: #force_inline proc "contextless" () -> Instruction { return Instruction{mnemonic = .SEV, operand_count = 0, mode = .A32, cond = 14, length = 4, ops = {{}, {}, {}, {}, {}, {}}} } -emit_sev_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_sev_none()) } +emit_sev_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_sev_none()) } inst_sevl_none :: #force_inline proc "contextless" () -> Instruction { return Instruction{mnemonic = .SEVL, operand_count = 0, mode = .A32, cond = 14, length = 4, ops = {{}, {}, {}, {}, {}, {}}} } -emit_sevl_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_sevl_none()) } +emit_sevl_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_sevl_none()) } inst_dbg_hint :: #force_inline proc "contextless" (imm: i64) -> Instruction { return Instruction{mnemonic = .DBG, operand_count = 1, mode = .A32, cond = 14, length = 4, ops = {op_imm(imm), {}, {}, {}, {}, {}}} } -emit_dbg_hint :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64) { append(instructions, inst_dbg_hint(imm)) } +emit_dbg_hint :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64) { append_elem(instructions, inst_dbg_hint(imm)) } inst_hint_hint :: #force_inline proc "contextless" (imm: i64) -> Instruction { return Instruction{mnemonic = .HINT, operand_count = 1, mode = .A32, cond = 14, length = 4, ops = {op_imm(imm), {}, {}, {}, {}, {}}} } -emit_hint_hint :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64) { append(instructions, inst_hint_hint(imm)) } +emit_hint_hint :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64) { append_elem(instructions, inst_hint_hint(imm)) } inst_dmb_barr :: #force_inline proc "contextless" (imm: i64) -> Instruction { return Instruction{mnemonic = .DMB, operand_count = 1, mode = .A32, cond = 14, length = 4, ops = {op_imm(imm), {}, {}, {}, {}, {}}} } -emit_dmb_barr :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64) { append(instructions, inst_dmb_barr(imm)) } +emit_dmb_barr :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64) { append_elem(instructions, inst_dmb_barr(imm)) } inst_dsb_barr :: #force_inline proc "contextless" (imm: i64) -> Instruction { return Instruction{mnemonic = .DSB, operand_count = 1, mode = .A32, cond = 14, length = 4, ops = {op_imm(imm), {}, {}, {}, {}, {}}} } -emit_dsb_barr :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64) { append(instructions, inst_dsb_barr(imm)) } +emit_dsb_barr :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64) { append_elem(instructions, inst_dsb_barr(imm)) } inst_isb_barr :: #force_inline proc "contextless" (imm: i64) -> Instruction { return Instruction{mnemonic = .ISB, operand_count = 1, mode = .A32, cond = 14, length = 4, ops = {op_imm(imm), {}, {}, {}, {}, {}}} } -emit_isb_barr :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64) { append(instructions, inst_isb_barr(imm)) } +emit_isb_barr :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64) { append_elem(instructions, inst_isb_barr(imm)) } inst_clrex_none :: #force_inline proc "contextless" () -> Instruction { return Instruction{mnemonic = .CLREX, operand_count = 0, mode = .A32, cond = 14, length = 4, ops = {{}, {}, {}, {}, {}, {}}} } -emit_clrex_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_clrex_none()) } +emit_clrex_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_clrex_none()) } inst_pld_mem :: #force_inline proc "contextless" (dst: Memory) -> Instruction { return Instruction{mnemonic = .PLD, operand_count = 1, mode = .A32, cond = 14, length = 4, ops = {op_mem(dst), {}, {}, {}, {}, {}}} } -emit_pld_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Memory) { append(instructions, inst_pld_mem(dst)) } +emit_pld_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Memory) { append_elem(instructions, inst_pld_mem(dst)) } inst_pldw_mem :: #force_inline proc "contextless" (dst: Memory) -> Instruction { return Instruction{mnemonic = .PLDW, operand_count = 1, mode = .A32, cond = 14, length = 4, ops = {op_mem(dst), {}, {}, {}, {}, {}}} } -emit_pldw_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Memory) { append(instructions, inst_pldw_mem(dst)) } +emit_pldw_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Memory) { append_elem(instructions, inst_pldw_mem(dst)) } inst_pli_mem :: #force_inline proc "contextless" (dst: Memory) -> Instruction { return Instruction{mnemonic = .PLI, operand_count = 1, mode = .A32, cond = 14, length = 4, ops = {op_mem(dst), {}, {}, {}, {}, {}}} } -emit_pli_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Memory) { append(instructions, inst_pli_mem(dst)) } +emit_pli_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Memory) { append_elem(instructions, inst_pli_mem(dst)) } inst_hlt_imm :: #force_inline proc "contextless" (imm: i64) -> Instruction { return Instruction{mnemonic = .HLT, operand_count = 1, mode = .A32, cond = 14, length = 4, ops = {op_imm(imm), {}, {}, {}, {}, {}}} } -emit_hlt_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64) { append(instructions, inst_hlt_imm(imm)) } +emit_hlt_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64) { append_elem(instructions, inst_hlt_imm(imm)) } inst_dcps1_none :: #force_inline proc "contextless" () -> Instruction { return Instruction{mnemonic = .DCPS1, operand_count = 0, mode = .T32, cond = 14, length = 4, ops = {{}, {}, {}, {}, {}, {}}} } -emit_dcps1_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_dcps1_none()) } +emit_dcps1_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_dcps1_none()) } inst_dcps2_none :: #force_inline proc "contextless" () -> Instruction { return Instruction{mnemonic = .DCPS2, operand_count = 0, mode = .T32, cond = 14, length = 4, ops = {{}, {}, {}, {}, {}, {}}} } -emit_dcps2_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_dcps2_none()) } +emit_dcps2_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_dcps2_none()) } inst_dcps3_none :: #force_inline proc "contextless" () -> Instruction { return Instruction{mnemonic = .DCPS3, operand_count = 0, mode = .T32, cond = 14, length = 4, ops = {{}, {}, {}, {}, {}, {}}} } -emit_dcps3_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_dcps3_none()) } +emit_dcps3_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_dcps3_none()) } inst_eret_none :: #force_inline proc "contextless" () -> Instruction { return Instruction{mnemonic = .ERET, operand_count = 0, mode = .A32, cond = 14, length = 4, ops = {{}, {}, {}, {}, {}, {}}} } -emit_eret_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_eret_none()) } +emit_eret_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_eret_none()) } inst_esb_none :: #force_inline proc "contextless" () -> Instruction { return Instruction{mnemonic = .ESB, operand_count = 0, mode = .A32, cond = 14, length = 4, ops = {{}, {}, {}, {}, {}, {}}} } -emit_esb_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_esb_none()) } +emit_esb_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_esb_none()) } inst_psb_csync_none :: #force_inline proc "contextless" () -> Instruction { return Instruction{mnemonic = .PSB_CSYNC, operand_count = 0, mode = .A32, cond = 14, length = 4, ops = {{}, {}, {}, {}, {}, {}}} } -emit_psb_csync_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_psb_csync_none()) } +emit_psb_csync_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_psb_csync_none()) } inst_tsb_csync_none :: #force_inline proc "contextless" () -> Instruction { return Instruction{mnemonic = .TSB_CSYNC, operand_count = 0, mode = .A32, cond = 14, length = 4, ops = {{}, {}, {}, {}, {}, {}}} } -emit_tsb_csync_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_tsb_csync_none()) } +emit_tsb_csync_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_tsb_csync_none()) } inst_csdb_none :: #force_inline proc "contextless" () -> Instruction { return Instruction{mnemonic = .CSDB, operand_count = 0, mode = .A32, cond = 14, length = 4, ops = {{}, {}, {}, {}, {}, {}}} } -emit_csdb_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_csdb_none()) } +emit_csdb_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_csdb_none()) } inst_sb_none :: #force_inline proc "contextless" () -> Instruction { return Instruction{mnemonic = .SB, operand_count = 0, mode = .A32, cond = 14, length = 4, ops = {{}, {}, {}, {}, {}, {}}} } -emit_sb_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_sb_none()) } +emit_sb_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_sb_none()) } inst_setpan_hint :: #force_inline proc "contextless" (imm: i64) -> Instruction { return Instruction{mnemonic = .SETPAN, operand_count = 1, mode = .A32, cond = 14, length = 4, ops = {op_imm(imm), {}, {}, {}, {}, {}}} } -emit_setpan_hint :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64) { append(instructions, inst_setpan_hint(imm)) } +emit_setpan_hint :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64) { append_elem(instructions, inst_setpan_hint(imm)) } inst_svc_imm :: #force_inline proc "contextless" (imm: i64) -> Instruction { return Instruction{mnemonic = .SVC, operand_count = 1, mode = .A32, cond = 14, length = 4, ops = {op_imm(imm), {}, {}, {}, {}, {}}} } -emit_svc_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64) { append(instructions, inst_svc_imm(imm)) } +emit_svc_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64) { append_elem(instructions, inst_svc_imm(imm)) } inst_bkpt_imm :: #force_inline proc "contextless" (imm: i64) -> Instruction { return Instruction{mnemonic = .BKPT, operand_count = 1, mode = .A32, cond = 14, length = 4, ops = {op_imm(imm), {}, {}, {}, {}, {}}} } -emit_bkpt_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64) { append(instructions, inst_bkpt_imm(imm)) } +emit_bkpt_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64) { append_elem(instructions, inst_bkpt_imm(imm)) } inst_hvc_imm :: #force_inline proc "contextless" (imm: i64) -> Instruction { return Instruction{mnemonic = .HVC, operand_count = 1, mode = .A32, cond = 14, length = 4, ops = {op_imm(imm), {}, {}, {}, {}, {}}} } -emit_hvc_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64) { append(instructions, inst_hvc_imm(imm)) } +emit_hvc_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64) { append_elem(instructions, inst_hvc_imm(imm)) } inst_smc_imm :: #force_inline proc "contextless" (imm: i64) -> Instruction { return Instruction{mnemonic = .SMC, operand_count = 1, mode = .A32, cond = 14, length = 4, ops = {op_imm(imm), {}, {}, {}, {}, {}}} } -emit_smc_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64) { append(instructions, inst_smc_imm(imm)) } +emit_smc_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64) { append_elem(instructions, inst_smc_imm(imm)) } inst_udf_imm :: #force_inline proc "contextless" (imm: i64) -> Instruction { return Instruction{mnemonic = .UDF, operand_count = 1, mode = .A32, cond = 14, length = 4, ops = {op_imm(imm), {}, {}, {}, {}, {}}} } -emit_udf_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64) { append(instructions, inst_udf_imm(imm)) } +emit_udf_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64) { append_elem(instructions, inst_udf_imm(imm)) } inst_ldr_r_mem :: #force_inline proc "contextless" (dst: Register, src: Memory) -> Instruction { return Instruction{mnemonic = .LDR, operand_count = 2, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_mem(src), {}, {}, {}, {}}} } -emit_ldr_r_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Memory) { append(instructions, inst_ldr_r_mem(dst, src)) } +emit_ldr_r_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Memory) { append_elem(instructions, inst_ldr_r_mem(dst, src)) } inst_str_r_mem :: #force_inline proc "contextless" (dst: Register, src: Memory) -> Instruction { return Instruction{mnemonic = .STR, operand_count = 2, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_mem(src), {}, {}, {}, {}}} } -emit_str_r_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Memory) { append(instructions, inst_str_r_mem(dst, src)) } +emit_str_r_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Memory) { append_elem(instructions, inst_str_r_mem(dst, src)) } inst_ldrb_r_mem :: #force_inline proc "contextless" (dst: Register, src: Memory) -> Instruction { return Instruction{mnemonic = .LDRB, operand_count = 2, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_mem(src), {}, {}, {}, {}}} } -emit_ldrb_r_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Memory) { append(instructions, inst_ldrb_r_mem(dst, src)) } +emit_ldrb_r_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Memory) { append_elem(instructions, inst_ldrb_r_mem(dst, src)) } inst_strb_r_mem :: #force_inline proc "contextless" (dst: Register, src: Memory) -> Instruction { return Instruction{mnemonic = .STRB, operand_count = 2, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_mem(src), {}, {}, {}, {}}} } -emit_strb_r_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Memory) { append(instructions, inst_strb_r_mem(dst, src)) } +emit_strb_r_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Memory) { append_elem(instructions, inst_strb_r_mem(dst, src)) } inst_ldrh_r_mem :: #force_inline proc "contextless" (dst: Register, src: Memory) -> Instruction { return Instruction{mnemonic = .LDRH, operand_count = 2, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_mem(src), {}, {}, {}, {}}} } -emit_ldrh_r_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Memory) { append(instructions, inst_ldrh_r_mem(dst, src)) } +emit_ldrh_r_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Memory) { append_elem(instructions, inst_ldrh_r_mem(dst, src)) } inst_strh_r_mem :: #force_inline proc "contextless" (dst: Register, src: Memory) -> Instruction { return Instruction{mnemonic = .STRH, operand_count = 2, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_mem(src), {}, {}, {}, {}}} } -emit_strh_r_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Memory) { append(instructions, inst_strh_r_mem(dst, src)) } +emit_strh_r_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Memory) { append_elem(instructions, inst_strh_r_mem(dst, src)) } inst_ldrsb_r_mem :: #force_inline proc "contextless" (dst: Register, src: Memory) -> Instruction { return Instruction{mnemonic = .LDRSB, operand_count = 2, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_mem(src), {}, {}, {}, {}}} } -emit_ldrsb_r_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Memory) { append(instructions, inst_ldrsb_r_mem(dst, src)) } +emit_ldrsb_r_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Memory) { append_elem(instructions, inst_ldrsb_r_mem(dst, src)) } inst_ldrsh_r_mem :: #force_inline proc "contextless" (dst: Register, src: Memory) -> Instruction { return Instruction{mnemonic = .LDRSH, operand_count = 2, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_mem(src), {}, {}, {}, {}}} } -emit_ldrsh_r_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Memory) { append(instructions, inst_ldrsh_r_mem(dst, src)) } +emit_ldrsh_r_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Memory) { append_elem(instructions, inst_ldrsh_r_mem(dst, src)) } inst_ldrd_r_r_mem :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Memory) -> Instruction { return Instruction{mnemonic = .LDRD, operand_count = 3, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_mem(src2), {}, {}, {}}} } -emit_ldrd_r_r_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Memory) { append(instructions, inst_ldrd_r_r_mem(dst, src, src2)) } +emit_ldrd_r_r_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Memory) { append_elem(instructions, inst_ldrd_r_r_mem(dst, src, src2)) } inst_strd_r_r_mem :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Memory) -> Instruction { return Instruction{mnemonic = .STRD, operand_count = 3, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_mem(src2), {}, {}, {}}} } -emit_strd_r_r_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Memory) { append(instructions, inst_strd_r_r_mem(dst, src, src2)) } +emit_strd_r_r_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Memory) { append_elem(instructions, inst_strd_r_r_mem(dst, src, src2)) } inst_ldrt_r_mem :: #force_inline proc "contextless" (dst: Register, src: Memory) -> Instruction { return Instruction{mnemonic = .LDRT, operand_count = 2, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_mem(src), {}, {}, {}, {}}} } -emit_ldrt_r_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Memory) { append(instructions, inst_ldrt_r_mem(dst, src)) } +emit_ldrt_r_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Memory) { append_elem(instructions, inst_ldrt_r_mem(dst, src)) } inst_strt_r_mem :: #force_inline proc "contextless" (dst: Register, src: Memory) -> Instruction { return Instruction{mnemonic = .STRT, operand_count = 2, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_mem(src), {}, {}, {}, {}}} } -emit_strt_r_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Memory) { append(instructions, inst_strt_r_mem(dst, src)) } +emit_strt_r_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Memory) { append_elem(instructions, inst_strt_r_mem(dst, src)) } inst_ldrbt_r_mem :: #force_inline proc "contextless" (dst: Register, src: Memory) -> Instruction { return Instruction{mnemonic = .LDRBT, operand_count = 2, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_mem(src), {}, {}, {}, {}}} } -emit_ldrbt_r_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Memory) { append(instructions, inst_ldrbt_r_mem(dst, src)) } +emit_ldrbt_r_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Memory) { append_elem(instructions, inst_ldrbt_r_mem(dst, src)) } inst_strbt_r_mem :: #force_inline proc "contextless" (dst: Register, src: Memory) -> Instruction { return Instruction{mnemonic = .STRBT, operand_count = 2, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_mem(src), {}, {}, {}, {}}} } -emit_strbt_r_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Memory) { append(instructions, inst_strbt_r_mem(dst, src)) } +emit_strbt_r_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Memory) { append_elem(instructions, inst_strbt_r_mem(dst, src)) } inst_ldrht_r_mem :: #force_inline proc "contextless" (dst: Register, src: Memory) -> Instruction { return Instruction{mnemonic = .LDRHT, operand_count = 2, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_mem(src), {}, {}, {}, {}}} } -emit_ldrht_r_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Memory) { append(instructions, inst_ldrht_r_mem(dst, src)) } +emit_ldrht_r_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Memory) { append_elem(instructions, inst_ldrht_r_mem(dst, src)) } inst_strht_r_mem :: #force_inline proc "contextless" (dst: Register, src: Memory) -> Instruction { return Instruction{mnemonic = .STRHT, operand_count = 2, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_mem(src), {}, {}, {}, {}}} } -emit_strht_r_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Memory) { append(instructions, inst_strht_r_mem(dst, src)) } +emit_strht_r_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Memory) { append_elem(instructions, inst_strht_r_mem(dst, src)) } inst_ldrsbt_r_mem :: #force_inline proc "contextless" (dst: Register, src: Memory) -> Instruction { return Instruction{mnemonic = .LDRSBT, operand_count = 2, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_mem(src), {}, {}, {}, {}}} } -emit_ldrsbt_r_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Memory) { append(instructions, inst_ldrsbt_r_mem(dst, src)) } +emit_ldrsbt_r_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Memory) { append_elem(instructions, inst_ldrsbt_r_mem(dst, src)) } inst_ldrsht_r_mem :: #force_inline proc "contextless" (dst: Register, src: Memory) -> Instruction { return Instruction{mnemonic = .LDRSHT, operand_count = 2, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_mem(src), {}, {}, {}, {}}} } -emit_ldrsht_r_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Memory) { append(instructions, inst_ldrsht_r_mem(dst, src)) } +emit_ldrsht_r_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Memory) { append_elem(instructions, inst_ldrsht_r_mem(dst, src)) } inst_lda_r_mem :: #force_inline proc "contextless" (dst: Register, src: Memory) -> Instruction { return Instruction{mnemonic = .LDA, operand_count = 2, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_mem(src), {}, {}, {}, {}}} } -emit_lda_r_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Memory) { append(instructions, inst_lda_r_mem(dst, src)) } +emit_lda_r_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Memory) { append_elem(instructions, inst_lda_r_mem(dst, src)) } inst_stl_r_mem :: #force_inline proc "contextless" (dst: Register, src: Memory) -> Instruction { return Instruction{mnemonic = .STL, operand_count = 2, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_mem(src), {}, {}, {}, {}}} } -emit_stl_r_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Memory) { append(instructions, inst_stl_r_mem(dst, src)) } +emit_stl_r_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Memory) { append_elem(instructions, inst_stl_r_mem(dst, src)) } inst_ldab_r_mem :: #force_inline proc "contextless" (dst: Register, src: Memory) -> Instruction { return Instruction{mnemonic = .LDAB, operand_count = 2, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_mem(src), {}, {}, {}, {}}} } -emit_ldab_r_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Memory) { append(instructions, inst_ldab_r_mem(dst, src)) } +emit_ldab_r_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Memory) { append_elem(instructions, inst_ldab_r_mem(dst, src)) } inst_stlb_r_mem :: #force_inline proc "contextless" (dst: Register, src: Memory) -> Instruction { return Instruction{mnemonic = .STLB, operand_count = 2, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_mem(src), {}, {}, {}, {}}} } -emit_stlb_r_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Memory) { append(instructions, inst_stlb_r_mem(dst, src)) } +emit_stlb_r_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Memory) { append_elem(instructions, inst_stlb_r_mem(dst, src)) } inst_ldah_r_mem :: #force_inline proc "contextless" (dst: Register, src: Memory) -> Instruction { return Instruction{mnemonic = .LDAH, operand_count = 2, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_mem(src), {}, {}, {}, {}}} } -emit_ldah_r_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Memory) { append(instructions, inst_ldah_r_mem(dst, src)) } +emit_ldah_r_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Memory) { append_elem(instructions, inst_ldah_r_mem(dst, src)) } inst_stlh_r_mem :: #force_inline proc "contextless" (dst: Register, src: Memory) -> Instruction { return Instruction{mnemonic = .STLH, operand_count = 2, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_mem(src), {}, {}, {}, {}}} } -emit_stlh_r_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Memory) { append(instructions, inst_stlh_r_mem(dst, src)) } +emit_stlh_r_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Memory) { append_elem(instructions, inst_stlh_r_mem(dst, src)) } inst_ldrex_r_mem :: #force_inline proc "contextless" (dst: Register, src: Memory) -> Instruction { return Instruction{mnemonic = .LDREX, operand_count = 2, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_mem(src), {}, {}, {}, {}}} } -emit_ldrex_r_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Memory) { append(instructions, inst_ldrex_r_mem(dst, src)) } +emit_ldrex_r_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Memory) { append_elem(instructions, inst_ldrex_r_mem(dst, src)) } inst_strex_r_r_mem :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Memory) -> Instruction { return Instruction{mnemonic = .STREX, operand_count = 3, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_mem(src2), {}, {}, {}}} } -emit_strex_r_r_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Memory) { append(instructions, inst_strex_r_r_mem(dst, src, src2)) } +emit_strex_r_r_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Memory) { append_elem(instructions, inst_strex_r_r_mem(dst, src, src2)) } inst_ldrexb_r_mem :: #force_inline proc "contextless" (dst: Register, src: Memory) -> Instruction { return Instruction{mnemonic = .LDREXB, operand_count = 2, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_mem(src), {}, {}, {}, {}}} } -emit_ldrexb_r_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Memory) { append(instructions, inst_ldrexb_r_mem(dst, src)) } +emit_ldrexb_r_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Memory) { append_elem(instructions, inst_ldrexb_r_mem(dst, src)) } inst_strexb_r_r_mem :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Memory) -> Instruction { return Instruction{mnemonic = .STREXB, operand_count = 3, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_mem(src2), {}, {}, {}}} } -emit_strexb_r_r_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Memory) { append(instructions, inst_strexb_r_r_mem(dst, src, src2)) } +emit_strexb_r_r_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Memory) { append_elem(instructions, inst_strexb_r_r_mem(dst, src, src2)) } inst_ldrexh_r_mem :: #force_inline proc "contextless" (dst: Register, src: Memory) -> Instruction { return Instruction{mnemonic = .LDREXH, operand_count = 2, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_mem(src), {}, {}, {}, {}}} } -emit_ldrexh_r_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Memory) { append(instructions, inst_ldrexh_r_mem(dst, src)) } +emit_ldrexh_r_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Memory) { append_elem(instructions, inst_ldrexh_r_mem(dst, src)) } inst_strexh_r_r_mem :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Memory) -> Instruction { return Instruction{mnemonic = .STREXH, operand_count = 3, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_mem(src2), {}, {}, {}}} } -emit_strexh_r_r_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Memory) { append(instructions, inst_strexh_r_r_mem(dst, src, src2)) } +emit_strexh_r_r_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Memory) { append_elem(instructions, inst_strexh_r_r_mem(dst, src, src2)) } inst_ldrexd_r_mem :: #force_inline proc "contextless" (dst: Register, src: Memory) -> Instruction { return Instruction{mnemonic = .LDREXD, operand_count = 2, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_mem(src), {}, {}, {}, {}}} } inst_ldrexd_r_r_mem :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Memory) -> Instruction { return Instruction{mnemonic = .LDREXD, operand_count = 3, mode = .T32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_mem(src2), {}, {}, {}}} } -emit_ldrexd_r_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Memory) { append(instructions, inst_ldrexd_r_mem(dst, src)) } -emit_ldrexd_r_r_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Memory) { append(instructions, inst_ldrexd_r_r_mem(dst, src, src2)) } +emit_ldrexd_r_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Memory) { append_elem(instructions, inst_ldrexd_r_mem(dst, src)) } +emit_ldrexd_r_r_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Memory) { append_elem(instructions, inst_ldrexd_r_r_mem(dst, src, src2)) } inst_strexd_r_r_mem :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Memory) -> Instruction { return Instruction{mnemonic = .STREXD, operand_count = 3, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_mem(src2), {}, {}, {}}} } inst_strexd_r_r_r_mem :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register, src3: Memory) -> Instruction { return Instruction{mnemonic = .STREXD, operand_count = 4, mode = .T32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), op_mem(src3), {}, {}}} } -emit_strexd_r_r_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Memory) { append(instructions, inst_strexd_r_r_mem(dst, src, src2)) } -emit_strexd_r_r_r_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, src3: Memory) { append(instructions, inst_strexd_r_r_r_mem(dst, src, src2, src3)) } +emit_strexd_r_r_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Memory) { append_elem(instructions, inst_strexd_r_r_mem(dst, src, src2)) } +emit_strexd_r_r_r_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, src3: Memory) { append_elem(instructions, inst_strexd_r_r_r_mem(dst, src, src2, src3)) } inst_ldaex_r_mem :: #force_inline proc "contextless" (dst: Register, src: Memory) -> Instruction { return Instruction{mnemonic = .LDAEX, operand_count = 2, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_mem(src), {}, {}, {}, {}}} } -emit_ldaex_r_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Memory) { append(instructions, inst_ldaex_r_mem(dst, src)) } +emit_ldaex_r_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Memory) { append_elem(instructions, inst_ldaex_r_mem(dst, src)) } inst_stlex_r_r_mem :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Memory) -> Instruction { return Instruction{mnemonic = .STLEX, operand_count = 3, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_mem(src2), {}, {}, {}}} } -emit_stlex_r_r_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Memory) { append(instructions, inst_stlex_r_r_mem(dst, src, src2)) } +emit_stlex_r_r_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Memory) { append_elem(instructions, inst_stlex_r_r_mem(dst, src, src2)) } inst_ldaexb_r_mem :: #force_inline proc "contextless" (dst: Register, src: Memory) -> Instruction { return Instruction{mnemonic = .LDAEXB, operand_count = 2, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_mem(src), {}, {}, {}, {}}} } -emit_ldaexb_r_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Memory) { append(instructions, inst_ldaexb_r_mem(dst, src)) } +emit_ldaexb_r_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Memory) { append_elem(instructions, inst_ldaexb_r_mem(dst, src)) } inst_stlexb_r_r_mem :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Memory) -> Instruction { return Instruction{mnemonic = .STLEXB, operand_count = 3, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_mem(src2), {}, {}, {}}} } -emit_stlexb_r_r_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Memory) { append(instructions, inst_stlexb_r_r_mem(dst, src, src2)) } +emit_stlexb_r_r_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Memory) { append_elem(instructions, inst_stlexb_r_r_mem(dst, src, src2)) } inst_ldaexh_r_mem :: #force_inline proc "contextless" (dst: Register, src: Memory) -> Instruction { return Instruction{mnemonic = .LDAEXH, operand_count = 2, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_mem(src), {}, {}, {}, {}}} } -emit_ldaexh_r_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Memory) { append(instructions, inst_ldaexh_r_mem(dst, src)) } +emit_ldaexh_r_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Memory) { append_elem(instructions, inst_ldaexh_r_mem(dst, src)) } inst_stlexh_r_r_mem :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Memory) -> Instruction { return Instruction{mnemonic = .STLEXH, operand_count = 3, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_mem(src2), {}, {}, {}}} } -emit_stlexh_r_r_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Memory) { append(instructions, inst_stlexh_r_r_mem(dst, src, src2)) } +emit_stlexh_r_r_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Memory) { append_elem(instructions, inst_stlexh_r_r_mem(dst, src, src2)) } inst_ldaexd_r_mem :: #force_inline proc "contextless" (dst: Register, src: Memory) -> Instruction { return Instruction{mnemonic = .LDAEXD, operand_count = 2, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_mem(src), {}, {}, {}, {}}} } -emit_ldaexd_r_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Memory) { append(instructions, inst_ldaexd_r_mem(dst, src)) } +emit_ldaexd_r_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Memory) { append_elem(instructions, inst_ldaexd_r_mem(dst, src)) } inst_stlexd_r_r_mem :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Memory) -> Instruction { return Instruction{mnemonic = .STLEXD, operand_count = 3, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_mem(src2), {}, {}, {}}} } -emit_stlexd_r_r_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Memory) { append(instructions, inst_stlexd_r_r_mem(dst, src, src2)) } +emit_stlexd_r_r_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Memory) { append_elem(instructions, inst_stlexd_r_r_mem(dst, src, src2)) } inst_ldm_r_list :: #force_inline proc "contextless" (dst: Register, regs: u16) -> Instruction { return Instruction{mnemonic = .LDM, operand_count = 2, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg_list(regs), {}, {}, {}, {}}} } -emit_ldm_r_list :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, regs: u16) { append(instructions, inst_ldm_r_list(dst, regs)) } +emit_ldm_r_list :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, regs: u16) { append_elem(instructions, inst_ldm_r_list(dst, regs)) } inst_stm_r_list :: #force_inline proc "contextless" (dst: Register, regs: u16) -> Instruction { return Instruction{mnemonic = .STM, operand_count = 2, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg_list(regs), {}, {}, {}, {}}} } -emit_stm_r_list :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, regs: u16) { append(instructions, inst_stm_r_list(dst, regs)) } +emit_stm_r_list :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, regs: u16) { append_elem(instructions, inst_stm_r_list(dst, regs)) } inst_ldmib_r_list :: #force_inline proc "contextless" (dst: Register, regs: u16) -> Instruction { return Instruction{mnemonic = .LDMIB, operand_count = 2, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg_list(regs), {}, {}, {}, {}}} } -emit_ldmib_r_list :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, regs: u16) { append(instructions, inst_ldmib_r_list(dst, regs)) } +emit_ldmib_r_list :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, regs: u16) { append_elem(instructions, inst_ldmib_r_list(dst, regs)) } inst_ldmda_r_list :: #force_inline proc "contextless" (dst: Register, regs: u16) -> Instruction { return Instruction{mnemonic = .LDMDA, operand_count = 2, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg_list(regs), {}, {}, {}, {}}} } -emit_ldmda_r_list :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, regs: u16) { append(instructions, inst_ldmda_r_list(dst, regs)) } +emit_ldmda_r_list :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, regs: u16) { append_elem(instructions, inst_ldmda_r_list(dst, regs)) } inst_ldmdb_r_list :: #force_inline proc "contextless" (dst: Register, regs: u16) -> Instruction { return Instruction{mnemonic = .LDMDB, operand_count = 2, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg_list(regs), {}, {}, {}, {}}} } -emit_ldmdb_r_list :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, regs: u16) { append(instructions, inst_ldmdb_r_list(dst, regs)) } +emit_ldmdb_r_list :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, regs: u16) { append_elem(instructions, inst_ldmdb_r_list(dst, regs)) } inst_stmib_r_list :: #force_inline proc "contextless" (dst: Register, regs: u16) -> Instruction { return Instruction{mnemonic = .STMIB, operand_count = 2, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg_list(regs), {}, {}, {}, {}}} } -emit_stmib_r_list :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, regs: u16) { append(instructions, inst_stmib_r_list(dst, regs)) } +emit_stmib_r_list :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, regs: u16) { append_elem(instructions, inst_stmib_r_list(dst, regs)) } inst_stmda_r_list :: #force_inline proc "contextless" (dst: Register, regs: u16) -> Instruction { return Instruction{mnemonic = .STMDA, operand_count = 2, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg_list(regs), {}, {}, {}, {}}} } -emit_stmda_r_list :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, regs: u16) { append(instructions, inst_stmda_r_list(dst, regs)) } +emit_stmda_r_list :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, regs: u16) { append_elem(instructions, inst_stmda_r_list(dst, regs)) } inst_stmdb_r_list :: #force_inline proc "contextless" (dst: Register, regs: u16) -> Instruction { return Instruction{mnemonic = .STMDB, operand_count = 2, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg_list(regs), {}, {}, {}, {}}} } -emit_stmdb_r_list :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, regs: u16) { append(instructions, inst_stmdb_r_list(dst, regs)) } +emit_stmdb_r_list :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, regs: u16) { append_elem(instructions, inst_stmdb_r_list(dst, regs)) } inst_push_list :: #force_inline proc "contextless" (regs: u16) -> Instruction { return Instruction{mnemonic = .PUSH, operand_count = 1, mode = .A32, cond = 14, length = 4, ops = {op_reg_list(regs), {}, {}, {}, {}, {}}} } -emit_push_list :: #force_inline proc(instructions: ^[dynamic]Instruction, regs: u16) { append(instructions, inst_push_list(regs)) } +emit_push_list :: #force_inline proc(instructions: ^[dynamic]Instruction, regs: u16) { append_elem(instructions, inst_push_list(regs)) } inst_pop_list :: #force_inline proc "contextless" (regs: u16) -> Instruction { return Instruction{mnemonic = .POP, operand_count = 1, mode = .A32, cond = 14, length = 4, ops = {op_reg_list(regs), {}, {}, {}, {}, {}}} } -emit_pop_list :: #force_inline proc(instructions: ^[dynamic]Instruction, regs: u16) { append(instructions, inst_pop_list(regs)) } +emit_pop_list :: #force_inline proc(instructions: ^[dynamic]Instruction, regs: u16) { append_elem(instructions, inst_pop_list(regs)) } inst_swp_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .SWP, operand_count = 3, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}, {}, {}}} } -emit_swp_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_swp_r_r_r(dst, src, src2)) } +emit_swp_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_swp_r_r_r(dst, src, src2)) } inst_swpb_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .SWPB, operand_count = 3, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}, {}, {}}} } -emit_swpb_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_swpb_r_r_r(dst, src, src2)) } +emit_swpb_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_swpb_r_r_r(dst, src, src2)) } inst_rfeda_r :: #force_inline proc "contextless" (dst: Register) -> Instruction { return Instruction{mnemonic = .RFEDA, operand_count = 1, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), {}, {}, {}, {}, {}}} } -emit_rfeda_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register) { append(instructions, inst_rfeda_r(dst)) } +emit_rfeda_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register) { append_elem(instructions, inst_rfeda_r(dst)) } inst_rfedb_r :: #force_inline proc "contextless" (dst: Register) -> Instruction { return Instruction{mnemonic = .RFEDB, operand_count = 1, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), {}, {}, {}, {}, {}}} } -emit_rfedb_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register) { append(instructions, inst_rfedb_r(dst)) } +emit_rfedb_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register) { append_elem(instructions, inst_rfedb_r(dst)) } inst_rfeia_r :: #force_inline proc "contextless" (dst: Register) -> Instruction { return Instruction{mnemonic = .RFEIA, operand_count = 1, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), {}, {}, {}, {}, {}}} } -emit_rfeia_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register) { append(instructions, inst_rfeia_r(dst)) } +emit_rfeia_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register) { append_elem(instructions, inst_rfeia_r(dst)) } inst_rfeib_r :: #force_inline proc "contextless" (dst: Register) -> Instruction { return Instruction{mnemonic = .RFEIB, operand_count = 1, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), {}, {}, {}, {}, {}}} } -emit_rfeib_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register) { append(instructions, inst_rfeib_r(dst)) } +emit_rfeib_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register) { append_elem(instructions, inst_rfeib_r(dst)) } inst_srsda_r_imm :: #force_inline proc "contextless" (dst: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .SRSDA, operand_count = 2, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_imm(imm), {}, {}, {}, {}}} } -emit_srsda_r_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64) { append(instructions, inst_srsda_r_imm(dst, imm)) } +emit_srsda_r_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64) { append_elem(instructions, inst_srsda_r_imm(dst, imm)) } inst_srsdb_r_imm :: #force_inline proc "contextless" (dst: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .SRSDB, operand_count = 2, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_imm(imm), {}, {}, {}, {}}} } -emit_srsdb_r_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64) { append(instructions, inst_srsdb_r_imm(dst, imm)) } +emit_srsdb_r_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64) { append_elem(instructions, inst_srsdb_r_imm(dst, imm)) } inst_srsia_r_imm :: #force_inline proc "contextless" (dst: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .SRSIA, operand_count = 2, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_imm(imm), {}, {}, {}, {}}} } -emit_srsia_r_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64) { append(instructions, inst_srsia_r_imm(dst, imm)) } +emit_srsia_r_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64) { append_elem(instructions, inst_srsia_r_imm(dst, imm)) } inst_srsib_r_imm :: #force_inline proc "contextless" (dst: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .SRSIB, operand_count = 2, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_imm(imm), {}, {}, {}, {}}} } -emit_srsib_r_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64) { append(instructions, inst_srsib_r_imm(dst, imm)) } +emit_srsib_r_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64) { append_elem(instructions, inst_srsib_r_imm(dst, imm)) } inst_cdp_cpn_cpop_crd_crd_crd_cpop :: #force_inline proc "contextless" (dst: Register, imm: i64, src: Register, src2: Register, src3: Register, imm2: i64) -> Instruction { return Instruction{mnemonic = .CDP, operand_count = 6, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_imm(imm), op_reg(src), op_reg(src2), op_reg(src3), op_imm(imm2)}} } -emit_cdp_cpn_cpop_crd_crd_crd_cpop :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64, src: Register, src2: Register, src3: Register, imm2: i64) { append(instructions, inst_cdp_cpn_cpop_crd_crd_crd_cpop(dst, imm, src, src2, src3, imm2)) } +emit_cdp_cpn_cpop_crd_crd_crd_cpop :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64, src: Register, src2: Register, src3: Register, imm2: i64) { append_elem(instructions, inst_cdp_cpn_cpop_crd_crd_crd_cpop(dst, imm, src, src2, src3, imm2)) } inst_cdp2_cpn_cpop_crd_crd_crd_cpop :: #force_inline proc "contextless" (dst: Register, imm: i64, src: Register, src2: Register, src3: Register, imm2: i64) -> Instruction { return Instruction{mnemonic = .CDP2, operand_count = 6, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_imm(imm), op_reg(src), op_reg(src2), op_reg(src3), op_imm(imm2)}} } -emit_cdp2_cpn_cpop_crd_crd_crd_cpop :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64, src: Register, src2: Register, src3: Register, imm2: i64) { append(instructions, inst_cdp2_cpn_cpop_crd_crd_crd_cpop(dst, imm, src, src2, src3, imm2)) } +emit_cdp2_cpn_cpop_crd_crd_crd_cpop :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64, src: Register, src2: Register, src3: Register, imm2: i64) { append_elem(instructions, inst_cdp2_cpn_cpop_crd_crd_crd_cpop(dst, imm, src, src2, src3, imm2)) } inst_mcr_cpn_cpop_r_crd_crd_cpop :: #force_inline proc "contextless" (dst: Register, imm: i64, src: Register, src2: Register, src3: Register, imm2: i64) -> Instruction { return Instruction{mnemonic = .MCR, operand_count = 6, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_imm(imm), op_reg(src), op_reg(src2), op_reg(src3), op_imm(imm2)}} } -emit_mcr_cpn_cpop_r_crd_crd_cpop :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64, src: Register, src2: Register, src3: Register, imm2: i64) { append(instructions, inst_mcr_cpn_cpop_r_crd_crd_cpop(dst, imm, src, src2, src3, imm2)) } +emit_mcr_cpn_cpop_r_crd_crd_cpop :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64, src: Register, src2: Register, src3: Register, imm2: i64) { append_elem(instructions, inst_mcr_cpn_cpop_r_crd_crd_cpop(dst, imm, src, src2, src3, imm2)) } inst_mcr2_cpn_cpop_r_crd_crd_cpop :: #force_inline proc "contextless" (dst: Register, imm: i64, src: Register, src2: Register, src3: Register, imm2: i64) -> Instruction { return Instruction{mnemonic = .MCR2, operand_count = 6, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_imm(imm), op_reg(src), op_reg(src2), op_reg(src3), op_imm(imm2)}} } -emit_mcr2_cpn_cpop_r_crd_crd_cpop :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64, src: Register, src2: Register, src3: Register, imm2: i64) { append(instructions, inst_mcr2_cpn_cpop_r_crd_crd_cpop(dst, imm, src, src2, src3, imm2)) } +emit_mcr2_cpn_cpop_r_crd_crd_cpop :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64, src: Register, src2: Register, src3: Register, imm2: i64) { append_elem(instructions, inst_mcr2_cpn_cpop_r_crd_crd_cpop(dst, imm, src, src2, src3, imm2)) } inst_mrc_cpn_cpop_r_crd_crd_cpop :: #force_inline proc "contextless" (dst: Register, imm: i64, src: Register, src2: Register, src3: Register, imm2: i64) -> Instruction { return Instruction{mnemonic = .MRC, operand_count = 6, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_imm(imm), op_reg(src), op_reg(src2), op_reg(src3), op_imm(imm2)}} } -emit_mrc_cpn_cpop_r_crd_crd_cpop :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64, src: Register, src2: Register, src3: Register, imm2: i64) { append(instructions, inst_mrc_cpn_cpop_r_crd_crd_cpop(dst, imm, src, src2, src3, imm2)) } +emit_mrc_cpn_cpop_r_crd_crd_cpop :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64, src: Register, src2: Register, src3: Register, imm2: i64) { append_elem(instructions, inst_mrc_cpn_cpop_r_crd_crd_cpop(dst, imm, src, src2, src3, imm2)) } inst_mrc2_cpn_cpop_r_crd_crd_cpop :: #force_inline proc "contextless" (dst: Register, imm: i64, src: Register, src2: Register, src3: Register, imm2: i64) -> Instruction { return Instruction{mnemonic = .MRC2, operand_count = 6, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_imm(imm), op_reg(src), op_reg(src2), op_reg(src3), op_imm(imm2)}} } -emit_mrc2_cpn_cpop_r_crd_crd_cpop :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64, src: Register, src2: Register, src3: Register, imm2: i64) { append(instructions, inst_mrc2_cpn_cpop_r_crd_crd_cpop(dst, imm, src, src2, src3, imm2)) } +emit_mrc2_cpn_cpop_r_crd_crd_cpop :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64, src: Register, src2: Register, src3: Register, imm2: i64) { append_elem(instructions, inst_mrc2_cpn_cpop_r_crd_crd_cpop(dst, imm, src, src2, src3, imm2)) } inst_mcrr_cpn_cpop_r_r_crd :: #force_inline proc "contextless" (dst: Register, imm: i64, src: Register, src2: Register, src3: Register) -> Instruction { return Instruction{mnemonic = .MCRR, operand_count = 5, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_imm(imm), op_reg(src), op_reg(src2), op_reg(src3), {}}} } -emit_mcrr_cpn_cpop_r_r_crd :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64, src: Register, src2: Register, src3: Register) { append(instructions, inst_mcrr_cpn_cpop_r_r_crd(dst, imm, src, src2, src3)) } +emit_mcrr_cpn_cpop_r_r_crd :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64, src: Register, src2: Register, src3: Register) { append_elem(instructions, inst_mcrr_cpn_cpop_r_r_crd(dst, imm, src, src2, src3)) } inst_mcrr2_cpn_cpop_r_r_crd :: #force_inline proc "contextless" (dst: Register, imm: i64, src: Register, src2: Register, src3: Register) -> Instruction { return Instruction{mnemonic = .MCRR2, operand_count = 5, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_imm(imm), op_reg(src), op_reg(src2), op_reg(src3), {}}} } -emit_mcrr2_cpn_cpop_r_r_crd :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64, src: Register, src2: Register, src3: Register) { append(instructions, inst_mcrr2_cpn_cpop_r_r_crd(dst, imm, src, src2, src3)) } +emit_mcrr2_cpn_cpop_r_r_crd :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64, src: Register, src2: Register, src3: Register) { append_elem(instructions, inst_mcrr2_cpn_cpop_r_r_crd(dst, imm, src, src2, src3)) } inst_mrrc_cpn_cpop_r_r_crd :: #force_inline proc "contextless" (dst: Register, imm: i64, src: Register, src2: Register, src3: Register) -> Instruction { return Instruction{mnemonic = .MRRC, operand_count = 5, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_imm(imm), op_reg(src), op_reg(src2), op_reg(src3), {}}} } -emit_mrrc_cpn_cpop_r_r_crd :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64, src: Register, src2: Register, src3: Register) { append(instructions, inst_mrrc_cpn_cpop_r_r_crd(dst, imm, src, src2, src3)) } +emit_mrrc_cpn_cpop_r_r_crd :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64, src: Register, src2: Register, src3: Register) { append_elem(instructions, inst_mrrc_cpn_cpop_r_r_crd(dst, imm, src, src2, src3)) } inst_mrrc2_cpn_cpop_r_r_crd :: #force_inline proc "contextless" (dst: Register, imm: i64, src: Register, src2: Register, src3: Register) -> Instruction { return Instruction{mnemonic = .MRRC2, operand_count = 5, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_imm(imm), op_reg(src), op_reg(src2), op_reg(src3), {}}} } -emit_mrrc2_cpn_cpop_r_r_crd :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64, src: Register, src2: Register, src3: Register) { append(instructions, inst_mrrc2_cpn_cpop_r_r_crd(dst, imm, src, src2, src3)) } +emit_mrrc2_cpn_cpop_r_r_crd :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64, src: Register, src2: Register, src3: Register) { append_elem(instructions, inst_mrrc2_cpn_cpop_r_r_crd(dst, imm, src, src2, src3)) } inst_ldc_cpn_crd_mem :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Memory) -> Instruction { return Instruction{mnemonic = .LDC, operand_count = 3, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_mem(src2), {}, {}, {}}} } -emit_ldc_cpn_crd_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Memory) { append(instructions, inst_ldc_cpn_crd_mem(dst, src, src2)) } +emit_ldc_cpn_crd_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Memory) { append_elem(instructions, inst_ldc_cpn_crd_mem(dst, src, src2)) } inst_ldc2_cpn_crd_mem :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Memory) -> Instruction { return Instruction{mnemonic = .LDC2, operand_count = 3, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_mem(src2), {}, {}, {}}} } -emit_ldc2_cpn_crd_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Memory) { append(instructions, inst_ldc2_cpn_crd_mem(dst, src, src2)) } +emit_ldc2_cpn_crd_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Memory) { append_elem(instructions, inst_ldc2_cpn_crd_mem(dst, src, src2)) } inst_stc_cpn_crd_mem :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Memory) -> Instruction { return Instruction{mnemonic = .STC, operand_count = 3, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_mem(src2), {}, {}, {}}} } -emit_stc_cpn_crd_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Memory) { append(instructions, inst_stc_cpn_crd_mem(dst, src, src2)) } +emit_stc_cpn_crd_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Memory) { append_elem(instructions, inst_stc_cpn_crd_mem(dst, src, src2)) } inst_stc2_cpn_crd_mem :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Memory) -> Instruction { return Instruction{mnemonic = .STC2, operand_count = 3, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_mem(src2), {}, {}, {}}} } -emit_stc2_cpn_crd_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Memory) { append(instructions, inst_stc2_cpn_crd_mem(dst, src, src2)) } +emit_stc2_cpn_crd_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Memory) { append_elem(instructions, inst_stc2_cpn_crd_mem(dst, src, src2)) } inst_ldcl_cpn_crd_mem :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Memory) -> Instruction { return Instruction{mnemonic = .LDCL, operand_count = 3, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_mem(src2), {}, {}, {}}} } -emit_ldcl_cpn_crd_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Memory) { append(instructions, inst_ldcl_cpn_crd_mem(dst, src, src2)) } +emit_ldcl_cpn_crd_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Memory) { append_elem(instructions, inst_ldcl_cpn_crd_mem(dst, src, src2)) } inst_ldc2l_cpn_crd_mem :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Memory) -> Instruction { return Instruction{mnemonic = .LDC2L, operand_count = 3, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_mem(src2), {}, {}, {}}} } -emit_ldc2l_cpn_crd_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Memory) { append(instructions, inst_ldc2l_cpn_crd_mem(dst, src, src2)) } +emit_ldc2l_cpn_crd_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Memory) { append_elem(instructions, inst_ldc2l_cpn_crd_mem(dst, src, src2)) } inst_stcl_cpn_crd_mem :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Memory) -> Instruction { return Instruction{mnemonic = .STCL, operand_count = 3, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_mem(src2), {}, {}, {}}} } -emit_stcl_cpn_crd_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Memory) { append(instructions, inst_stcl_cpn_crd_mem(dst, src, src2)) } +emit_stcl_cpn_crd_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Memory) { append_elem(instructions, inst_stcl_cpn_crd_mem(dst, src, src2)) } inst_stc2l_cpn_crd_mem :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Memory) -> Instruction { return Instruction{mnemonic = .STC2L, operand_count = 3, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_mem(src2), {}, {}, {}}} } -emit_stc2l_cpn_crd_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Memory) { append(instructions, inst_stc2l_cpn_crd_mem(dst, src, src2)) } +emit_stc2l_cpn_crd_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Memory) { append_elem(instructions, inst_stc2l_cpn_crd_mem(dst, src, src2)) } inst_crc32b_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .CRC32B, operand_count = 3, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}, {}, {}}} } -emit_crc32b_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_crc32b_r_r_r(dst, src, src2)) } +emit_crc32b_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_crc32b_r_r_r(dst, src, src2)) } inst_crc32h_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .CRC32H, operand_count = 3, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}, {}, {}}} } -emit_crc32h_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_crc32h_r_r_r(dst, src, src2)) } +emit_crc32h_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_crc32h_r_r_r(dst, src, src2)) } inst_crc32w_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .CRC32W, operand_count = 3, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}, {}, {}}} } -emit_crc32w_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_crc32w_r_r_r(dst, src, src2)) } +emit_crc32w_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_crc32w_r_r_r(dst, src, src2)) } inst_crc32cb_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .CRC32CB, operand_count = 3, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}, {}, {}}} } -emit_crc32cb_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_crc32cb_r_r_r(dst, src, src2)) } +emit_crc32cb_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_crc32cb_r_r_r(dst, src, src2)) } inst_crc32ch_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .CRC32CH, operand_count = 3, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}, {}, {}}} } -emit_crc32ch_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_crc32ch_r_r_r(dst, src, src2)) } +emit_crc32ch_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_crc32ch_r_r_r(dst, src, src2)) } inst_crc32cw_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .CRC32CW, operand_count = 3, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}, {}, {}}} } -emit_crc32cw_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_crc32cw_r_r_r(dst, src, src2)) } +emit_crc32cw_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_crc32cw_r_r_r(dst, src, src2)) } inst_vadd_s_s_s :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VADD, operand_count = 3, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}, {}, {}}} } -emit_vadd_s_s_s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vadd_s_s_s(dst, src, src2)) } +emit_vadd_s_s_s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vadd_s_s_s(dst, src, src2)) } inst_vsub_s_s_s :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VSUB, operand_count = 3, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}, {}, {}}} } -emit_vsub_s_s_s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vsub_s_s_s(dst, src, src2)) } +emit_vsub_s_s_s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vsub_s_s_s(dst, src, src2)) } inst_vmul_s_s_s :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VMUL, operand_count = 3, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}, {}, {}}} } inst_vmul_d_d_dlane :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register, lane: u8) -> Instruction { return Instruction{mnemonic = .VMUL, operand_count = 3, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_dpr_lane(src2, lane), {}, {}, {}}} } -emit_vmul_s_s_s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vmul_s_s_s(dst, src, src2)) } -emit_vmul_d_d_dlane :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, lane: u8) { append(instructions, inst_vmul_d_d_dlane(dst, src, src2, lane)) } +emit_vmul_s_s_s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vmul_s_s_s(dst, src, src2)) } +emit_vmul_d_d_dlane :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, lane: u8) { append_elem(instructions, inst_vmul_d_d_dlane(dst, src, src2, lane)) } inst_vdiv_s_s_s :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VDIV, operand_count = 3, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}, {}, {}}} } -emit_vdiv_s_s_s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vdiv_s_s_s(dst, src, src2)) } +emit_vdiv_s_s_s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vdiv_s_s_s(dst, src, src2)) } inst_vmla_s_s_s :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VMLA, operand_count = 3, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}, {}, {}}} } inst_vmla_d_d_dlane :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register, lane: u8) -> Instruction { return Instruction{mnemonic = .VMLA, operand_count = 3, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_dpr_lane(src2, lane), {}, {}, {}}} } -emit_vmla_s_s_s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vmla_s_s_s(dst, src, src2)) } -emit_vmla_d_d_dlane :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, lane: u8) { append(instructions, inst_vmla_d_d_dlane(dst, src, src2, lane)) } +emit_vmla_s_s_s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vmla_s_s_s(dst, src, src2)) } +emit_vmla_d_d_dlane :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, lane: u8) { append_elem(instructions, inst_vmla_d_d_dlane(dst, src, src2, lane)) } inst_vmls_s_s_s :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VMLS, operand_count = 3, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}, {}, {}}} } inst_vmls_d_d_dlane :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register, lane: u8) -> Instruction { return Instruction{mnemonic = .VMLS, operand_count = 3, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_dpr_lane(src2, lane), {}, {}, {}}} } -emit_vmls_s_s_s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vmls_s_s_s(dst, src, src2)) } -emit_vmls_d_d_dlane :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, lane: u8) { append(instructions, inst_vmls_d_d_dlane(dst, src, src2, lane)) } +emit_vmls_s_s_s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vmls_s_s_s(dst, src, src2)) } +emit_vmls_d_d_dlane :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, lane: u8) { append_elem(instructions, inst_vmls_d_d_dlane(dst, src, src2, lane)) } inst_vnmul_s_s_s :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VNMUL, operand_count = 3, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}, {}, {}}} } -emit_vnmul_s_s_s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vnmul_s_s_s(dst, src, src2)) } +emit_vnmul_s_s_s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vnmul_s_s_s(dst, src, src2)) } inst_vnmla_s_s_s :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VNMLA, operand_count = 3, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}, {}, {}}} } -emit_vnmla_s_s_s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vnmla_s_s_s(dst, src, src2)) } +emit_vnmla_s_s_s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vnmla_s_s_s(dst, src, src2)) } inst_vnmls_s_s_s :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VNMLS, operand_count = 3, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}, {}, {}}} } -emit_vnmls_s_s_s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vnmls_s_s_s(dst, src, src2)) } +emit_vnmls_s_s_s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vnmls_s_s_s(dst, src, src2)) } inst_vfma_s_s_s :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VFMA, operand_count = 3, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}, {}, {}}} } -emit_vfma_s_s_s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vfma_s_s_s(dst, src, src2)) } +emit_vfma_s_s_s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vfma_s_s_s(dst, src, src2)) } inst_vfms_s_s_s :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VFMS, operand_count = 3, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}, {}, {}}} } -emit_vfms_s_s_s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vfms_s_s_s(dst, src, src2)) } +emit_vfms_s_s_s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vfms_s_s_s(dst, src, src2)) } inst_vfnma_s_s_s :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VFNMA, operand_count = 3, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}, {}, {}}} } -emit_vfnma_s_s_s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vfnma_s_s_s(dst, src, src2)) } +emit_vfnma_s_s_s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vfnma_s_s_s(dst, src, src2)) } inst_vfnms_s_s_s :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VFNMS, operand_count = 3, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}, {}, {}}} } -emit_vfnms_s_s_s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vfnms_s_s_s(dst, src, src2)) } +emit_vfnms_s_s_s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vfnms_s_s_s(dst, src, src2)) } inst_vfmab_q_q_q :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VFMAB, operand_count = 3, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}, {}, {}}} } -emit_vfmab_q_q_q :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vfmab_q_q_q(dst, src, src2)) } +emit_vfmab_q_q_q :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vfmab_q_q_q(dst, src, src2)) } inst_vfmat_q_q_q :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VFMAT, operand_count = 3, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}, {}, {}}} } -emit_vfmat_q_q_q :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vfmat_q_q_q(dst, src, src2)) } +emit_vfmat_q_q_q :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vfmat_q_q_q(dst, src, src2)) } inst_vabs_s_s :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .VABS, operand_count = 2, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}, {}, {}}} } -emit_vabs_s_s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_vabs_s_s(dst, src)) } +emit_vabs_s_s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_vabs_s_s(dst, src)) } inst_vneg_s_s :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .VNEG, operand_count = 2, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}, {}, {}}} } -emit_vneg_s_s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_vneg_s_s(dst, src)) } +emit_vneg_s_s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_vneg_s_s(dst, src)) } inst_vsqrt_s_s :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .VSQRT, operand_count = 2, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}, {}, {}}} } -emit_vsqrt_s_s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_vsqrt_s_s(dst, src)) } +emit_vsqrt_s_s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_vsqrt_s_s(dst, src)) } inst_vcmp_s_s :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .VCMP, operand_count = 2, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}, {}, {}}} } inst_vcmp_s :: #force_inline proc "contextless" (dst: Register) -> Instruction { return Instruction{mnemonic = .VCMP, operand_count = 1, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), {}, {}, {}, {}, {}}} } -emit_vcmp_s_s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_vcmp_s_s(dst, src)) } -emit_vcmp_s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register) { append(instructions, inst_vcmp_s(dst)) } +emit_vcmp_s_s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_vcmp_s_s(dst, src)) } +emit_vcmp_s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register) { append_elem(instructions, inst_vcmp_s(dst)) } inst_vcmpe_s_s :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .VCMPE, operand_count = 2, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}, {}, {}}} } inst_vcmpe_s :: #force_inline proc "contextless" (dst: Register) -> Instruction { return Instruction{mnemonic = .VCMPE, operand_count = 1, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), {}, {}, {}, {}, {}}} } -emit_vcmpe_s_s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_vcmpe_s_s(dst, src)) } -emit_vcmpe_s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register) { append(instructions, inst_vcmpe_s(dst)) } +emit_vcmpe_s_s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_vcmpe_s_s(dst, src)) } +emit_vcmpe_s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register) { append_elem(instructions, inst_vcmpe_s(dst)) } inst_vcvt_d_s :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .VCVT, operand_count = 2, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}, {}, {}}} } inst_vcvt_s_s_imm :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .VCVT, operand_count = 3, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_imm(imm), {}, {}, {}}} } -emit_vcvt_d_s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_vcvt_d_s(dst, src)) } -emit_vcvt_s_s_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_vcvt_s_s_imm(dst, src, imm)) } +emit_vcvt_d_s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_vcvt_d_s(dst, src)) } +emit_vcvt_s_s_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_vcvt_s_s_imm(dst, src, imm)) } inst_vcvtb_s_s :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .VCVTB, operand_count = 2, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}, {}, {}}} } -emit_vcvtb_s_s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_vcvtb_s_s(dst, src)) } +emit_vcvtb_s_s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_vcvtb_s_s(dst, src)) } inst_vcvtt_s_s :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .VCVTT, operand_count = 2, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}, {}, {}}} } -emit_vcvtt_s_s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_vcvtt_s_s(dst, src)) } +emit_vcvtt_s_s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_vcvtt_s_s(dst, src)) } inst_vcvta_s_s :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .VCVTA, operand_count = 2, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}, {}, {}}} } -emit_vcvta_s_s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_vcvta_s_s(dst, src)) } +emit_vcvta_s_s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_vcvta_s_s(dst, src)) } inst_vcvtn_s_s :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .VCVTN, operand_count = 2, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}, {}, {}}} } -emit_vcvtn_s_s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_vcvtn_s_s(dst, src)) } +emit_vcvtn_s_s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_vcvtn_s_s(dst, src)) } inst_vcvtp_s_s :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .VCVTP, operand_count = 2, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}, {}, {}}} } -emit_vcvtp_s_s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_vcvtp_s_s(dst, src)) } +emit_vcvtp_s_s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_vcvtp_s_s(dst, src)) } inst_vcvtm_s_s :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .VCVTM, operand_count = 2, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}, {}, {}}} } -emit_vcvtm_s_s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_vcvtm_s_s(dst, src)) } +emit_vcvtm_s_s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_vcvtm_s_s(dst, src)) } inst_vcvtr_s_s :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .VCVTR, operand_count = 2, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}, {}, {}}} } -emit_vcvtr_s_s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_vcvtr_s_s(dst, src)) } +emit_vcvtr_s_s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_vcvtr_s_s(dst, src)) } inst_vmov_s_s :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .VMOV, operand_count = 2, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}, {}, {}}} } inst_vmov_s_imm8 :: #force_inline proc "contextless" (dst: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .VMOV, operand_count = 2, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_imm(imm), {}, {}, {}, {}}} } inst_vmov_r_r_d :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VMOV, operand_count = 3, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}, {}, {}}} } @@ -759,681 +759,681 @@ inst_vmov_r_r_s_s :: #force_inline proc "contextless" (dst: Re inst_vmov_r_dlane :: #force_inline proc "contextless" (dst: Register, src: Register, lane: u8) -> Instruction { return Instruction{mnemonic = .VMOV, operand_count = 2, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_dpr_lane(src, lane), {}, {}, {}, {}}} } inst_vmov_qlane_r :: #force_inline proc "contextless" (dst: Register, lane: u8, src: Register) -> Instruction { return Instruction{mnemonic = .VMOV, operand_count = 2, mode = .T32, cond = 14, length = 4, ops = {op_qpr_lane(dst, lane), op_reg(src), {}, {}, {}, {}}} } inst_vmov_qlane_qlane_r_r :: #force_inline proc "contextless" (dst: Register, lane: u8, src: Register, lane2: u8, src2: Register, src3: Register) -> Instruction { return Instruction{mnemonic = .VMOV, operand_count = 4, mode = .T32, cond = 14, length = 4, ops = {op_qpr_lane(dst, lane), op_qpr_lane(src, lane2), op_reg(src2), op_reg(src3), {}, {}}} } -emit_vmov_s_s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_vmov_s_s(dst, src)) } -emit_vmov_s_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64) { append(instructions, inst_vmov_s_imm8(dst, imm)) } -emit_vmov_r_r_d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vmov_r_r_d(dst, src, src2)) } -emit_vmov_r_r_s_s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, src3: Register) { append(instructions, inst_vmov_r_r_s_s(dst, src, src2, src3)) } -emit_vmov_r_dlane :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, lane: u8) { append(instructions, inst_vmov_r_dlane(dst, src, lane)) } -emit_vmov_qlane_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, lane: u8, src: Register) { append(instructions, inst_vmov_qlane_r(dst, lane, src)) } -emit_vmov_qlane_qlane_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, lane: u8, src: Register, lane2: u8, src2: Register, src3: Register) { append(instructions, inst_vmov_qlane_qlane_r_r(dst, lane, src, lane2, src2, src3)) } +emit_vmov_s_s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_vmov_s_s(dst, src)) } +emit_vmov_s_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64) { append_elem(instructions, inst_vmov_s_imm8(dst, imm)) } +emit_vmov_r_r_d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vmov_r_r_d(dst, src, src2)) } +emit_vmov_r_r_s_s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, src3: Register) { append_elem(instructions, inst_vmov_r_r_s_s(dst, src, src2, src3)) } +emit_vmov_r_dlane :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, lane: u8) { append_elem(instructions, inst_vmov_r_dlane(dst, src, lane)) } +emit_vmov_qlane_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, lane: u8, src: Register) { append_elem(instructions, inst_vmov_qlane_r(dst, lane, src)) } +emit_vmov_qlane_qlane_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, lane: u8, src: Register, lane2: u8, src2: Register, src3: Register) { append_elem(instructions, inst_vmov_qlane_qlane_r_r(dst, lane, src, lane2, src2, src3)) } inst_vmrs_r_psr :: #force_inline proc "contextless" (dst: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .VMRS, operand_count = 2, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_imm(imm), {}, {}, {}, {}}} } -emit_vmrs_r_psr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64) { append(instructions, inst_vmrs_r_psr(dst, imm)) } +emit_vmrs_r_psr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64) { append_elem(instructions, inst_vmrs_r_psr(dst, imm)) } inst_vmsr_psr_r :: #force_inline proc "contextless" (imm: i64, src: Register) -> Instruction { return Instruction{mnemonic = .VMSR, operand_count = 2, mode = .A32, cond = 14, length = 4, ops = {op_imm(imm), op_reg(src), {}, {}, {}, {}}} } -emit_vmsr_psr_r :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, src: Register) { append(instructions, inst_vmsr_psr_r(imm, src)) } +emit_vmsr_psr_r :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, src: Register) { append_elem(instructions, inst_vmsr_psr_r(imm, src)) } inst_vldr_s_mem :: #force_inline proc "contextless" (dst: Register, src: Memory) -> Instruction { return Instruction{mnemonic = .VLDR, operand_count = 2, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_mem(src), {}, {}, {}, {}}} } -emit_vldr_s_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Memory) { append(instructions, inst_vldr_s_mem(dst, src)) } +emit_vldr_s_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Memory) { append_elem(instructions, inst_vldr_s_mem(dst, src)) } inst_vstr_s_mem :: #force_inline proc "contextless" (dst: Register, src: Memory) -> Instruction { return Instruction{mnemonic = .VSTR, operand_count = 2, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_mem(src), {}, {}, {}, {}}} } -emit_vstr_s_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Memory) { append(instructions, inst_vstr_s_mem(dst, src)) } +emit_vstr_s_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Memory) { append_elem(instructions, inst_vstr_s_mem(dst, src)) } inst_vldmia_r_slist :: #force_inline proc "contextless" (dst: Register, regs: u16) -> Instruction { return Instruction{mnemonic = .VLDMIA, operand_count = 2, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg_list(regs), {}, {}, {}, {}}} } -emit_vldmia_r_slist :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, regs: u16) { append(instructions, inst_vldmia_r_slist(dst, regs)) } +emit_vldmia_r_slist :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, regs: u16) { append_elem(instructions, inst_vldmia_r_slist(dst, regs)) } inst_vldmdb_r_slist :: #force_inline proc "contextless" (dst: Register, regs: u16) -> Instruction { return Instruction{mnemonic = .VLDMDB, operand_count = 2, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg_list(regs), {}, {}, {}, {}}} } -emit_vldmdb_r_slist :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, regs: u16) { append(instructions, inst_vldmdb_r_slist(dst, regs)) } +emit_vldmdb_r_slist :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, regs: u16) { append_elem(instructions, inst_vldmdb_r_slist(dst, regs)) } inst_vstmia_r_slist :: #force_inline proc "contextless" (dst: Register, regs: u16) -> Instruction { return Instruction{mnemonic = .VSTMIA, operand_count = 2, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg_list(regs), {}, {}, {}, {}}} } -emit_vstmia_r_slist :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, regs: u16) { append(instructions, inst_vstmia_r_slist(dst, regs)) } +emit_vstmia_r_slist :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, regs: u16) { append_elem(instructions, inst_vstmia_r_slist(dst, regs)) } inst_vstmdb_r_slist :: #force_inline proc "contextless" (dst: Register, regs: u16) -> Instruction { return Instruction{mnemonic = .VSTMDB, operand_count = 2, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg_list(regs), {}, {}, {}, {}}} } -emit_vstmdb_r_slist :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, regs: u16) { append(instructions, inst_vstmdb_r_slist(dst, regs)) } +emit_vstmdb_r_slist :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, regs: u16) { append_elem(instructions, inst_vstmdb_r_slist(dst, regs)) } inst_vpush_slist :: #force_inline proc "contextless" (regs: u16) -> Instruction { return Instruction{mnemonic = .VPUSH, operand_count = 1, mode = .A32, cond = 14, length = 4, ops = {op_reg_list(regs), {}, {}, {}, {}, {}}} } -emit_vpush_slist :: #force_inline proc(instructions: ^[dynamic]Instruction, regs: u16) { append(instructions, inst_vpush_slist(regs)) } +emit_vpush_slist :: #force_inline proc(instructions: ^[dynamic]Instruction, regs: u16) { append_elem(instructions, inst_vpush_slist(regs)) } inst_vpop_slist :: #force_inline proc "contextless" (regs: u16) -> Instruction { return Instruction{mnemonic = .VPOP, operand_count = 1, mode = .A32, cond = 14, length = 4, ops = {op_reg_list(regs), {}, {}, {}, {}, {}}} } -emit_vpop_slist :: #force_inline proc(instructions: ^[dynamic]Instruction, regs: u16) { append(instructions, inst_vpop_slist(regs)) } +emit_vpop_slist :: #force_inline proc(instructions: ^[dynamic]Instruction, regs: u16) { append_elem(instructions, inst_vpop_slist(regs)) } inst_vsel_s_s_s :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VSEL, operand_count = 3, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}, {}, {}}} } -emit_vsel_s_s_s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vsel_s_s_s(dst, src, src2)) } +emit_vsel_s_s_s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vsel_s_s_s(dst, src, src2)) } inst_vmaxnm_s_s_s :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VMAXNM, operand_count = 3, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}, {}, {}}} } -emit_vmaxnm_s_s_s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vmaxnm_s_s_s(dst, src, src2)) } +emit_vmaxnm_s_s_s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vmaxnm_s_s_s(dst, src, src2)) } inst_vminnm_s_s_s :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VMINNM, operand_count = 3, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}, {}, {}}} } -emit_vminnm_s_s_s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vminnm_s_s_s(dst, src, src2)) } +emit_vminnm_s_s_s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vminnm_s_s_s(dst, src, src2)) } inst_vrinta_s_s :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .VRINTA, operand_count = 2, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}, {}, {}}} } -emit_vrinta_s_s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_vrinta_s_s(dst, src)) } +emit_vrinta_s_s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_vrinta_s_s(dst, src)) } inst_vrintn_s_s :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .VRINTN, operand_count = 2, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}, {}, {}}} } -emit_vrintn_s_s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_vrintn_s_s(dst, src)) } +emit_vrintn_s_s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_vrintn_s_s(dst, src)) } inst_vrintp_s_s :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .VRINTP, operand_count = 2, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}, {}, {}}} } -emit_vrintp_s_s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_vrintp_s_s(dst, src)) } +emit_vrintp_s_s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_vrintp_s_s(dst, src)) } inst_vrintm_s_s :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .VRINTM, operand_count = 2, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}, {}, {}}} } -emit_vrintm_s_s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_vrintm_s_s(dst, src)) } +emit_vrintm_s_s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_vrintm_s_s(dst, src)) } inst_vrintr_s_s :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .VRINTR, operand_count = 2, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}, {}, {}}} } -emit_vrintr_s_s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_vrintr_s_s(dst, src)) } +emit_vrintr_s_s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_vrintr_s_s(dst, src)) } inst_vrintz_s_s :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .VRINTZ, operand_count = 2, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}, {}, {}}} } -emit_vrintz_s_s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_vrintz_s_s(dst, src)) } +emit_vrintz_s_s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_vrintz_s_s(dst, src)) } inst_vrintx_s_s :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .VRINTX, operand_count = 2, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}, {}, {}}} } -emit_vrintx_s_s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_vrintx_s_s(dst, src)) } +emit_vrintx_s_s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_vrintx_s_s(dst, src)) } inst_vaddl_q_d_d :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VADDL, operand_count = 3, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}, {}, {}}} } -emit_vaddl_q_d_d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vaddl_q_d_d(dst, src, src2)) } +emit_vaddl_q_d_d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vaddl_q_d_d(dst, src, src2)) } inst_vaddw_q_q_d :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VADDW, operand_count = 3, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}, {}, {}}} } -emit_vaddw_q_q_d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vaddw_q_q_d(dst, src, src2)) } +emit_vaddw_q_q_d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vaddw_q_q_d(dst, src, src2)) } inst_vsubl_q_d_d :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VSUBL, operand_count = 3, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}, {}, {}}} } -emit_vsubl_q_d_d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vsubl_q_d_d(dst, src, src2)) } +emit_vsubl_q_d_d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vsubl_q_d_d(dst, src, src2)) } inst_vsubw_q_q_d :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VSUBW, operand_count = 3, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}, {}, {}}} } -emit_vsubw_q_q_d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vsubw_q_q_d(dst, src, src2)) } +emit_vsubw_q_q_d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vsubw_q_q_d(dst, src, src2)) } inst_vhadd_d_d_d :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VHADD, operand_count = 3, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}, {}, {}}} } -emit_vhadd_d_d_d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vhadd_d_d_d(dst, src, src2)) } +emit_vhadd_d_d_d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vhadd_d_d_d(dst, src, src2)) } inst_vhsub_d_d_d :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VHSUB, operand_count = 3, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}, {}, {}}} } -emit_vhsub_d_d_d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vhsub_d_d_d(dst, src, src2)) } +emit_vhsub_d_d_d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vhsub_d_d_d(dst, src, src2)) } inst_vrhadd_d_d_d :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VRHADD, operand_count = 3, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}, {}, {}}} } -emit_vrhadd_d_d_d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vrhadd_d_d_d(dst, src, src2)) } +emit_vrhadd_d_d_d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vrhadd_d_d_d(dst, src, src2)) } inst_vqadd_d_d_d :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VQADD, operand_count = 3, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}, {}, {}}} } -emit_vqadd_d_d_d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vqadd_d_d_d(dst, src, src2)) } +emit_vqadd_d_d_d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vqadd_d_d_d(dst, src, src2)) } inst_vqsub_d_d_d :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VQSUB, operand_count = 3, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}, {}, {}}} } -emit_vqsub_d_d_d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vqsub_d_d_d(dst, src, src2)) } +emit_vqsub_d_d_d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vqsub_d_d_d(dst, src, src2)) } inst_vmull_q_d_d :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VMULL, operand_count = 3, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}, {}, {}}} } inst_vmull_q_d_dlane :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register, lane: u8) -> Instruction { return Instruction{mnemonic = .VMULL, operand_count = 3, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_dpr_lane(src2, lane), {}, {}, {}}} } -emit_vmull_q_d_d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vmull_q_d_d(dst, src, src2)) } -emit_vmull_q_d_dlane :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, lane: u8) { append(instructions, inst_vmull_q_d_dlane(dst, src, src2, lane)) } +emit_vmull_q_d_d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vmull_q_d_d(dst, src, src2)) } +emit_vmull_q_d_dlane :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, lane: u8) { append_elem(instructions, inst_vmull_q_d_dlane(dst, src, src2, lane)) } inst_vmlal_q_d_d :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VMLAL, operand_count = 3, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}, {}, {}}} } inst_vmlal_q_d_dlane :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register, lane: u8) -> Instruction { return Instruction{mnemonic = .VMLAL, operand_count = 3, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_dpr_lane(src2, lane), {}, {}, {}}} } -emit_vmlal_q_d_d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vmlal_q_d_d(dst, src, src2)) } -emit_vmlal_q_d_dlane :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, lane: u8) { append(instructions, inst_vmlal_q_d_dlane(dst, src, src2, lane)) } +emit_vmlal_q_d_d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vmlal_q_d_d(dst, src, src2)) } +emit_vmlal_q_d_dlane :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, lane: u8) { append_elem(instructions, inst_vmlal_q_d_dlane(dst, src, src2, lane)) } inst_vmlsl_q_d_d :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VMLSL, operand_count = 3, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}, {}, {}}} } inst_vmlsl_q_d_dlane :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register, lane: u8) -> Instruction { return Instruction{mnemonic = .VMLSL, operand_count = 3, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_dpr_lane(src2, lane), {}, {}, {}}} } -emit_vmlsl_q_d_d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vmlsl_q_d_d(dst, src, src2)) } -emit_vmlsl_q_d_dlane :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, lane: u8) { append(instructions, inst_vmlsl_q_d_dlane(dst, src, src2, lane)) } +emit_vmlsl_q_d_d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vmlsl_q_d_d(dst, src, src2)) } +emit_vmlsl_q_d_dlane :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, lane: u8) { append_elem(instructions, inst_vmlsl_q_d_dlane(dst, src, src2, lane)) } inst_vqdmull_q_d_d :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VQDMULL, operand_count = 3, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}, {}, {}}} } inst_vqdmull_q_d_dlane :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register, lane: u8) -> Instruction { return Instruction{mnemonic = .VQDMULL, operand_count = 3, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_dpr_lane(src2, lane), {}, {}, {}}} } -emit_vqdmull_q_d_d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vqdmull_q_d_d(dst, src, src2)) } -emit_vqdmull_q_d_dlane :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, lane: u8) { append(instructions, inst_vqdmull_q_d_dlane(dst, src, src2, lane)) } +emit_vqdmull_q_d_d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vqdmull_q_d_d(dst, src, src2)) } +emit_vqdmull_q_d_dlane :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, lane: u8) { append_elem(instructions, inst_vqdmull_q_d_dlane(dst, src, src2, lane)) } inst_vqdmlal_q_d_d :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VQDMLAL, operand_count = 3, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}, {}, {}}} } inst_vqdmlal_q_d_dlane :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register, lane: u8) -> Instruction { return Instruction{mnemonic = .VQDMLAL, operand_count = 3, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_dpr_lane(src2, lane), {}, {}, {}}} } -emit_vqdmlal_q_d_d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vqdmlal_q_d_d(dst, src, src2)) } -emit_vqdmlal_q_d_dlane :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, lane: u8) { append(instructions, inst_vqdmlal_q_d_dlane(dst, src, src2, lane)) } +emit_vqdmlal_q_d_d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vqdmlal_q_d_d(dst, src, src2)) } +emit_vqdmlal_q_d_dlane :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, lane: u8) { append_elem(instructions, inst_vqdmlal_q_d_dlane(dst, src, src2, lane)) } inst_vqdmlsl_q_d_d :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VQDMLSL, operand_count = 3, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}, {}, {}}} } inst_vqdmlsl_q_d_dlane :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register, lane: u8) -> Instruction { return Instruction{mnemonic = .VQDMLSL, operand_count = 3, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_dpr_lane(src2, lane), {}, {}, {}}} } -emit_vqdmlsl_q_d_d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vqdmlsl_q_d_d(dst, src, src2)) } -emit_vqdmlsl_q_d_dlane :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, lane: u8) { append(instructions, inst_vqdmlsl_q_d_dlane(dst, src, src2, lane)) } +emit_vqdmlsl_q_d_d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vqdmlsl_q_d_d(dst, src, src2)) } +emit_vqdmlsl_q_d_dlane :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, lane: u8) { append_elem(instructions, inst_vqdmlsl_q_d_dlane(dst, src, src2, lane)) } inst_vqdmulh_d_d_d :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VQDMULH, operand_count = 3, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}, {}, {}}} } inst_vqdmulh_d_d_dlane :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register, lane: u8) -> Instruction { return Instruction{mnemonic = .VQDMULH, operand_count = 3, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_dpr_lane(src2, lane), {}, {}, {}}} } -emit_vqdmulh_d_d_d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vqdmulh_d_d_d(dst, src, src2)) } -emit_vqdmulh_d_d_dlane :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, lane: u8) { append(instructions, inst_vqdmulh_d_d_dlane(dst, src, src2, lane)) } +emit_vqdmulh_d_d_d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vqdmulh_d_d_d(dst, src, src2)) } +emit_vqdmulh_d_d_dlane :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, lane: u8) { append_elem(instructions, inst_vqdmulh_d_d_dlane(dst, src, src2, lane)) } inst_vqrdmulh_d_d_d :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VQRDMULH, operand_count = 3, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}, {}, {}}} } inst_vqrdmulh_d_d_dlane :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register, lane: u8) -> Instruction { return Instruction{mnemonic = .VQRDMULH, operand_count = 3, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_dpr_lane(src2, lane), {}, {}, {}}} } -emit_vqrdmulh_d_d_d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vqrdmulh_d_d_d(dst, src, src2)) } -emit_vqrdmulh_d_d_dlane :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, lane: u8) { append(instructions, inst_vqrdmulh_d_d_dlane(dst, src, src2, lane)) } +emit_vqrdmulh_d_d_d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vqrdmulh_d_d_d(dst, src, src2)) } +emit_vqrdmulh_d_d_dlane :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, lane: u8) { append_elem(instructions, inst_vqrdmulh_d_d_dlane(dst, src, src2, lane)) } inst_vqrdmlah_d_d_d :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VQRDMLAH, operand_count = 3, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}, {}, {}}} } inst_vqrdmlah_d_d_dlane :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register, lane: u8) -> Instruction { return Instruction{mnemonic = .VQRDMLAH, operand_count = 3, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_dpr_lane(src2, lane), {}, {}, {}}} } -emit_vqrdmlah_d_d_d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vqrdmlah_d_d_d(dst, src, src2)) } -emit_vqrdmlah_d_d_dlane :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, lane: u8) { append(instructions, inst_vqrdmlah_d_d_dlane(dst, src, src2, lane)) } +emit_vqrdmlah_d_d_d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vqrdmlah_d_d_d(dst, src, src2)) } +emit_vqrdmlah_d_d_dlane :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, lane: u8) { append_elem(instructions, inst_vqrdmlah_d_d_dlane(dst, src, src2, lane)) } inst_vqrdmlsh_d_d_d :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VQRDMLSH, operand_count = 3, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}, {}, {}}} } inst_vqrdmlsh_d_d_dlane :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register, lane: u8) -> Instruction { return Instruction{mnemonic = .VQRDMLSH, operand_count = 3, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_dpr_lane(src2, lane), {}, {}, {}}} } -emit_vqrdmlsh_d_d_d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vqrdmlsh_d_d_d(dst, src, src2)) } -emit_vqrdmlsh_d_d_dlane :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, lane: u8) { append(instructions, inst_vqrdmlsh_d_d_dlane(dst, src, src2, lane)) } +emit_vqrdmlsh_d_d_d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vqrdmlsh_d_d_d(dst, src, src2)) } +emit_vqrdmlsh_d_d_dlane :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, lane: u8) { append_elem(instructions, inst_vqrdmlsh_d_d_dlane(dst, src, src2, lane)) } inst_vaba_d_d_d :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VABA, operand_count = 3, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}, {}, {}}} } -emit_vaba_d_d_d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vaba_d_d_d(dst, src, src2)) } +emit_vaba_d_d_d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vaba_d_d_d(dst, src, src2)) } inst_vabal_q_d_d :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VABAL, operand_count = 3, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}, {}, {}}} } -emit_vabal_q_d_d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vabal_q_d_d(dst, src, src2)) } +emit_vabal_q_d_d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vabal_q_d_d(dst, src, src2)) } inst_vabd_d_d_d :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VABD, operand_count = 3, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}, {}, {}}} } -emit_vabd_d_d_d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vabd_d_d_d(dst, src, src2)) } +emit_vabd_d_d_d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vabd_d_d_d(dst, src, src2)) } inst_vabdl_q_d_d :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VABDL, operand_count = 3, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}, {}, {}}} } -emit_vabdl_q_d_d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vabdl_q_d_d(dst, src, src2)) } +emit_vabdl_q_d_d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vabdl_q_d_d(dst, src, src2)) } inst_vand_d_d_d :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VAND, operand_count = 3, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}, {}, {}}} } -emit_vand_d_d_d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vand_d_d_d(dst, src, src2)) } +emit_vand_d_d_d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vand_d_d_d(dst, src, src2)) } inst_vbic_d_imm :: #force_inline proc "contextless" (dst: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .VBIC, operand_count = 2, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_imm(imm), {}, {}, {}, {}}} } inst_vbic_d_d_d :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VBIC, operand_count = 3, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}, {}, {}}} } -emit_vbic_d_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64) { append(instructions, inst_vbic_d_imm(dst, imm)) } -emit_vbic_d_d_d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vbic_d_d_d(dst, src, src2)) } +emit_vbic_d_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64) { append_elem(instructions, inst_vbic_d_imm(dst, imm)) } +emit_vbic_d_d_d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vbic_d_d_d(dst, src, src2)) } inst_vorr_d_imm :: #force_inline proc "contextless" (dst: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .VORR, operand_count = 2, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_imm(imm), {}, {}, {}, {}}} } inst_vorr_d_d_d :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VORR, operand_count = 3, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}, {}, {}}} } -emit_vorr_d_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64) { append(instructions, inst_vorr_d_imm(dst, imm)) } -emit_vorr_d_d_d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vorr_d_d_d(dst, src, src2)) } +emit_vorr_d_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64) { append_elem(instructions, inst_vorr_d_imm(dst, imm)) } +emit_vorr_d_d_d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vorr_d_d_d(dst, src, src2)) } inst_vorn_d_d_d :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VORN, operand_count = 3, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}, {}, {}}} } -emit_vorn_d_d_d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vorn_d_d_d(dst, src, src2)) } +emit_vorn_d_d_d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vorn_d_d_d(dst, src, src2)) } inst_veor_d_d_d :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VEOR, operand_count = 3, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}, {}, {}}} } -emit_veor_d_d_d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_veor_d_d_d(dst, src, src2)) } +emit_veor_d_d_d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_veor_d_d_d(dst, src, src2)) } inst_vbsl_d_d_d :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VBSL, operand_count = 3, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}, {}, {}}} } -emit_vbsl_d_d_d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vbsl_d_d_d(dst, src, src2)) } +emit_vbsl_d_d_d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vbsl_d_d_d(dst, src, src2)) } inst_vbit_d_d_d :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VBIT, operand_count = 3, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}, {}, {}}} } -emit_vbit_d_d_d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vbit_d_d_d(dst, src, src2)) } +emit_vbit_d_d_d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vbit_d_d_d(dst, src, src2)) } inst_vbif_d_d_d :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VBIF, operand_count = 3, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}, {}, {}}} } -emit_vbif_d_d_d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vbif_d_d_d(dst, src, src2)) } +emit_vbif_d_d_d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vbif_d_d_d(dst, src, src2)) } inst_vmvn_d_d :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .VMVN, operand_count = 2, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}, {}, {}}} } inst_vmvn_d_imm :: #force_inline proc "contextless" (dst: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .VMVN, operand_count = 2, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_imm(imm), {}, {}, {}, {}}} } -emit_vmvn_d_d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_vmvn_d_d(dst, src)) } -emit_vmvn_d_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64) { append(instructions, inst_vmvn_d_imm(dst, imm)) } +emit_vmvn_d_d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_vmvn_d_d(dst, src)) } +emit_vmvn_d_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64) { append_elem(instructions, inst_vmvn_d_imm(dst, imm)) } inst_vmovn_d_q :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .VMOVN, operand_count = 2, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}, {}, {}}} } -emit_vmovn_d_q :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_vmovn_d_q(dst, src)) } +emit_vmovn_d_q :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_vmovn_d_q(dst, src)) } inst_vqmovn_d_q :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .VQMOVN, operand_count = 2, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}, {}, {}}} } -emit_vqmovn_d_q :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_vqmovn_d_q(dst, src)) } +emit_vqmovn_d_q :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_vqmovn_d_q(dst, src)) } inst_vqmovun_d_q :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .VQMOVUN, operand_count = 2, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}, {}, {}}} } -emit_vqmovun_d_q :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_vqmovun_d_q(dst, src)) } +emit_vqmovun_d_q :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_vqmovun_d_q(dst, src)) } inst_vmovl_q_d :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .VMOVL, operand_count = 2, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}, {}, {}}} } -emit_vmovl_q_d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_vmovl_q_d(dst, src)) } +emit_vmovl_q_d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_vmovl_q_d(dst, src)) } inst_vtst_d_d_d :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VTST, operand_count = 3, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}, {}, {}}} } -emit_vtst_d_d_d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vtst_d_d_d(dst, src, src2)) } +emit_vtst_d_d_d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vtst_d_d_d(dst, src, src2)) } inst_vceq_d_d_d :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VCEQ, operand_count = 3, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}, {}, {}}} } inst_vceq_d_d :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .VCEQ, operand_count = 2, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}, {}, {}}} } -emit_vceq_d_d_d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vceq_d_d_d(dst, src, src2)) } -emit_vceq_d_d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_vceq_d_d(dst, src)) } +emit_vceq_d_d_d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vceq_d_d_d(dst, src, src2)) } +emit_vceq_d_d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_vceq_d_d(dst, src)) } inst_vcge_d_d_d :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VCGE, operand_count = 3, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}, {}, {}}} } inst_vcge_d_d :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .VCGE, operand_count = 2, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}, {}, {}}} } -emit_vcge_d_d_d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vcge_d_d_d(dst, src, src2)) } -emit_vcge_d_d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_vcge_d_d(dst, src)) } +emit_vcge_d_d_d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vcge_d_d_d(dst, src, src2)) } +emit_vcge_d_d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_vcge_d_d(dst, src)) } inst_vcgt_d_d_d :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VCGT, operand_count = 3, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}, {}, {}}} } inst_vcgt_d_d :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .VCGT, operand_count = 2, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}, {}, {}}} } -emit_vcgt_d_d_d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vcgt_d_d_d(dst, src, src2)) } -emit_vcgt_d_d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_vcgt_d_d(dst, src)) } +emit_vcgt_d_d_d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vcgt_d_d_d(dst, src, src2)) } +emit_vcgt_d_d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_vcgt_d_d(dst, src)) } inst_vcle_d_d_d :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VCLE, operand_count = 3, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}, {}, {}}} } inst_vcle_d_d :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .VCLE, operand_count = 2, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}, {}, {}}} } -emit_vcle_d_d_d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vcle_d_d_d(dst, src, src2)) } -emit_vcle_d_d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_vcle_d_d(dst, src)) } +emit_vcle_d_d_d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vcle_d_d_d(dst, src, src2)) } +emit_vcle_d_d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_vcle_d_d(dst, src)) } inst_vclt_d_d_d :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VCLT, operand_count = 3, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}, {}, {}}} } inst_vclt_d_d :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .VCLT, operand_count = 2, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}, {}, {}}} } -emit_vclt_d_d_d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vclt_d_d_d(dst, src, src2)) } -emit_vclt_d_d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_vclt_d_d(dst, src)) } +emit_vclt_d_d_d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vclt_d_d_d(dst, src, src2)) } +emit_vclt_d_d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_vclt_d_d(dst, src)) } inst_vacge_d_d_d :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VACGE, operand_count = 3, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}, {}, {}}} } -emit_vacge_d_d_d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vacge_d_d_d(dst, src, src2)) } +emit_vacge_d_d_d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vacge_d_d_d(dst, src, src2)) } inst_vacgt_d_d_d :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VACGT, operand_count = 3, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}, {}, {}}} } -emit_vacgt_d_d_d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vacgt_d_d_d(dst, src, src2)) } +emit_vacgt_d_d_d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vacgt_d_d_d(dst, src, src2)) } inst_vacle_d_d_d :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VACLE, operand_count = 3, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}, {}, {}}} } -emit_vacle_d_d_d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vacle_d_d_d(dst, src, src2)) } +emit_vacle_d_d_d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vacle_d_d_d(dst, src, src2)) } inst_vaclt_d_d_d :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VACLT, operand_count = 3, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}, {}, {}}} } -emit_vaclt_d_d_d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vaclt_d_d_d(dst, src, src2)) } +emit_vaclt_d_d_d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vaclt_d_d_d(dst, src, src2)) } inst_vmax_d_d_d :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VMAX, operand_count = 3, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}, {}, {}}} } -emit_vmax_d_d_d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vmax_d_d_d(dst, src, src2)) } +emit_vmax_d_d_d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vmax_d_d_d(dst, src, src2)) } inst_vmin_d_d_d :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VMIN, operand_count = 3, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}, {}, {}}} } -emit_vmin_d_d_d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vmin_d_d_d(dst, src, src2)) } +emit_vmin_d_d_d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vmin_d_d_d(dst, src, src2)) } inst_vpmax_d_d_d :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VPMAX, operand_count = 3, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}, {}, {}}} } -emit_vpmax_d_d_d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vpmax_d_d_d(dst, src, src2)) } +emit_vpmax_d_d_d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vpmax_d_d_d(dst, src, src2)) } inst_vpmin_d_d_d :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VPMIN, operand_count = 3, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}, {}, {}}} } -emit_vpmin_d_d_d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vpmin_d_d_d(dst, src, src2)) } +emit_vpmin_d_d_d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vpmin_d_d_d(dst, src, src2)) } inst_vpadd_d_d_d :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VPADD, operand_count = 3, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}, {}, {}}} } -emit_vpadd_d_d_d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vpadd_d_d_d(dst, src, src2)) } +emit_vpadd_d_d_d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vpadd_d_d_d(dst, src, src2)) } inst_vpaddl_d_d :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .VPADDL, operand_count = 2, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}, {}, {}}} } -emit_vpaddl_d_d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_vpaddl_d_d(dst, src)) } +emit_vpaddl_d_d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_vpaddl_d_d(dst, src)) } inst_vpadal_d_d :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .VPADAL, operand_count = 2, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}, {}, {}}} } -emit_vpadal_d_d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_vpadal_d_d(dst, src)) } +emit_vpadal_d_d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_vpadal_d_d(dst, src)) } inst_vrecpe_d_d :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .VRECPE, operand_count = 2, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}, {}, {}}} } -emit_vrecpe_d_d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_vrecpe_d_d(dst, src)) } +emit_vrecpe_d_d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_vrecpe_d_d(dst, src)) } inst_vrecps_d_d_d :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VRECPS, operand_count = 3, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}, {}, {}}} } -emit_vrecps_d_d_d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vrecps_d_d_d(dst, src, src2)) } +emit_vrecps_d_d_d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vrecps_d_d_d(dst, src, src2)) } inst_vrsqrte_d_d :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .VRSQRTE, operand_count = 2, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}, {}, {}}} } -emit_vrsqrte_d_d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_vrsqrte_d_d(dst, src)) } +emit_vrsqrte_d_d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_vrsqrte_d_d(dst, src)) } inst_vrsqrts_d_d_d :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VRSQRTS, operand_count = 3, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}, {}, {}}} } -emit_vrsqrts_d_d_d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vrsqrts_d_d_d(dst, src, src2)) } +emit_vrsqrts_d_d_d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vrsqrts_d_d_d(dst, src, src2)) } inst_vshl_d_d_d :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VSHL, operand_count = 3, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}, {}, {}}} } -emit_vshl_d_d_d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vshl_d_d_d(dst, src, src2)) } +emit_vshl_d_d_d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vshl_d_d_d(dst, src, src2)) } inst_vshr_d_d_imm :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .VSHR, operand_count = 3, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_imm(imm), {}, {}, {}}} } -emit_vshr_d_d_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_vshr_d_d_imm(dst, src, imm)) } +emit_vshr_d_d_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_vshr_d_d_imm(dst, src, imm)) } inst_vsra_d_d_imm :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .VSRA, operand_count = 3, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_imm(imm), {}, {}, {}}} } -emit_vsra_d_d_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_vsra_d_d_imm(dst, src, imm)) } +emit_vsra_d_d_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_vsra_d_d_imm(dst, src, imm)) } inst_vrshl_d_d_d :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VRSHL, operand_count = 3, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}, {}, {}}} } -emit_vrshl_d_d_d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vrshl_d_d_d(dst, src, src2)) } +emit_vrshl_d_d_d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vrshl_d_d_d(dst, src, src2)) } inst_vrshr_d_d_imm :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .VRSHR, operand_count = 3, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_imm(imm), {}, {}, {}}} } -emit_vrshr_d_d_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_vrshr_d_d_imm(dst, src, imm)) } +emit_vrshr_d_d_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_vrshr_d_d_imm(dst, src, imm)) } inst_vrsra_d_d_imm :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .VRSRA, operand_count = 3, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_imm(imm), {}, {}, {}}} } -emit_vrsra_d_d_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_vrsra_d_d_imm(dst, src, imm)) } +emit_vrsra_d_d_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_vrsra_d_d_imm(dst, src, imm)) } inst_vsli_d_d_imm :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .VSLI, operand_count = 3, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_imm(imm), {}, {}, {}}} } -emit_vsli_d_d_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_vsli_d_d_imm(dst, src, imm)) } +emit_vsli_d_d_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_vsli_d_d_imm(dst, src, imm)) } inst_vsri_d_d_imm :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .VSRI, operand_count = 3, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_imm(imm), {}, {}, {}}} } -emit_vsri_d_d_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_vsri_d_d_imm(dst, src, imm)) } +emit_vsri_d_d_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_vsri_d_d_imm(dst, src, imm)) } inst_vqshl_d_d_d :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VQSHL, operand_count = 3, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}, {}, {}}} } inst_vqshl_d_d_imm :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .VQSHL, operand_count = 3, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_imm(imm), {}, {}, {}}} } -emit_vqshl_d_d_d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vqshl_d_d_d(dst, src, src2)) } -emit_vqshl_d_d_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_vqshl_d_d_imm(dst, src, imm)) } +emit_vqshl_d_d_d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vqshl_d_d_d(dst, src, src2)) } +emit_vqshl_d_d_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_vqshl_d_d_imm(dst, src, imm)) } inst_vqshrn_d_q_imm :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .VQSHRN, operand_count = 3, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_imm(imm), {}, {}, {}}} } -emit_vqshrn_d_q_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_vqshrn_d_q_imm(dst, src, imm)) } +emit_vqshrn_d_q_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_vqshrn_d_q_imm(dst, src, imm)) } inst_vqshrun_d_q_imm :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .VQSHRUN, operand_count = 3, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_imm(imm), {}, {}, {}}} } -emit_vqshrun_d_q_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_vqshrun_d_q_imm(dst, src, imm)) } +emit_vqshrun_d_q_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_vqshrun_d_q_imm(dst, src, imm)) } inst_vqrshl_d_d_d :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VQRSHL, operand_count = 3, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}, {}, {}}} } -emit_vqrshl_d_d_d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vqrshl_d_d_d(dst, src, src2)) } +emit_vqrshl_d_d_d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vqrshl_d_d_d(dst, src, src2)) } inst_vqrshrn_d_q_imm :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .VQRSHRN, operand_count = 3, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_imm(imm), {}, {}, {}}} } -emit_vqrshrn_d_q_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_vqrshrn_d_q_imm(dst, src, imm)) } +emit_vqrshrn_d_q_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_vqrshrn_d_q_imm(dst, src, imm)) } inst_vqrshrun_d_q_imm :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .VQRSHRUN, operand_count = 3, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_imm(imm), {}, {}, {}}} } -emit_vqrshrun_d_q_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_vqrshrun_d_q_imm(dst, src, imm)) } +emit_vqrshrun_d_q_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_vqrshrun_d_q_imm(dst, src, imm)) } inst_vshrn_d_q_imm :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .VSHRN, operand_count = 3, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_imm(imm), {}, {}, {}}} } -emit_vshrn_d_q_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_vshrn_d_q_imm(dst, src, imm)) } +emit_vshrn_d_q_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_vshrn_d_q_imm(dst, src, imm)) } inst_vrshrn_d_q_imm :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .VRSHRN, operand_count = 3, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_imm(imm), {}, {}, {}}} } -emit_vrshrn_d_q_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_vrshrn_d_q_imm(dst, src, imm)) } +emit_vrshrn_d_q_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_vrshrn_d_q_imm(dst, src, imm)) } inst_vshll_q_d_imm :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .VSHLL, operand_count = 3, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_imm(imm), {}, {}, {}}} } -emit_vshll_q_d_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_vshll_q_d_imm(dst, src, imm)) } +emit_vshll_q_d_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_vshll_q_d_imm(dst, src, imm)) } inst_vcls_d_d :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .VCLS, operand_count = 2, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}, {}, {}}} } -emit_vcls_d_d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_vcls_d_d(dst, src)) } +emit_vcls_d_d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_vcls_d_d(dst, src)) } inst_vclz_d_d :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .VCLZ, operand_count = 2, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}, {}, {}}} } -emit_vclz_d_d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_vclz_d_d(dst, src)) } +emit_vclz_d_d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_vclz_d_d(dst, src)) } inst_vcnt_d_d :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .VCNT, operand_count = 2, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}, {}, {}}} } -emit_vcnt_d_d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_vcnt_d_d(dst, src)) } +emit_vcnt_d_d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_vcnt_d_d(dst, src)) } inst_vrev16_d_d :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .VREV16, operand_count = 2, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}, {}, {}}} } -emit_vrev16_d_d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_vrev16_d_d(dst, src)) } +emit_vrev16_d_d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_vrev16_d_d(dst, src)) } inst_vrev32_d_d :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .VREV32, operand_count = 2, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}, {}, {}}} } -emit_vrev32_d_d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_vrev32_d_d(dst, src)) } +emit_vrev32_d_d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_vrev32_d_d(dst, src)) } inst_vrev64_d_d :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .VREV64, operand_count = 2, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}, {}, {}}} } -emit_vrev64_d_d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_vrev64_d_d(dst, src)) } +emit_vrev64_d_d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_vrev64_d_d(dst, src)) } inst_vext_d_d_d_imm4 :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .VEXT, operand_count = 4, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), op_imm(imm), {}, {}}} } -emit_vext_d_d_d_imm4 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, imm: i64) { append(instructions, inst_vext_d_d_d_imm4(dst, src, src2, imm)) } +emit_vext_d_d_d_imm4 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, imm: i64) { append_elem(instructions, inst_vext_d_d_d_imm4(dst, src, src2, imm)) } inst_vtbl_d_dlist_d :: #force_inline proc "contextless" (dst: Register, regs: u16, src: Register) -> Instruction { return Instruction{mnemonic = .VTBL, operand_count = 3, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg_list(regs), op_reg(src), {}, {}, {}}} } -emit_vtbl_d_dlist_d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, regs: u16, src: Register) { append(instructions, inst_vtbl_d_dlist_d(dst, regs, src)) } +emit_vtbl_d_dlist_d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, regs: u16, src: Register) { append_elem(instructions, inst_vtbl_d_dlist_d(dst, regs, src)) } inst_vtbx_d_dlist_d :: #force_inline proc "contextless" (dst: Register, regs: u16, src: Register) -> Instruction { return Instruction{mnemonic = .VTBX, operand_count = 3, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg_list(regs), op_reg(src), {}, {}, {}}} } -emit_vtbx_d_dlist_d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, regs: u16, src: Register) { append(instructions, inst_vtbx_d_dlist_d(dst, regs, src)) } +emit_vtbx_d_dlist_d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, regs: u16, src: Register) { append_elem(instructions, inst_vtbx_d_dlist_d(dst, regs, src)) } inst_vtrn_d_d :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .VTRN, operand_count = 2, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}, {}, {}}} } -emit_vtrn_d_d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_vtrn_d_d(dst, src)) } +emit_vtrn_d_d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_vtrn_d_d(dst, src)) } inst_vuzp_d_d :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .VUZP, operand_count = 2, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}, {}, {}}} } -emit_vuzp_d_d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_vuzp_d_d(dst, src)) } +emit_vuzp_d_d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_vuzp_d_d(dst, src)) } inst_vzip_d_d :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .VZIP, operand_count = 2, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}, {}, {}}} } -emit_vzip_d_d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_vzip_d_d(dst, src)) } +emit_vzip_d_d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_vzip_d_d(dst, src)) } inst_vdup_d_r :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .VDUP, operand_count = 2, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}, {}, {}}} } inst_vdup_d_dlane :: #force_inline proc "contextless" (dst: Register, src: Register, lane: u8) -> Instruction { return Instruction{mnemonic = .VDUP, operand_count = 2, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_dpr_lane(src, lane), {}, {}, {}, {}}} } -emit_vdup_d_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_vdup_d_r(dst, src)) } -emit_vdup_d_dlane :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, lane: u8) { append(instructions, inst_vdup_d_dlane(dst, src, lane)) } +emit_vdup_d_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_vdup_d_r(dst, src)) } +emit_vdup_d_dlane :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, lane: u8) { append_elem(instructions, inst_vdup_d_dlane(dst, src, lane)) } inst_vswp_d_d :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .VSWP, operand_count = 2, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}, {}, {}}} } -emit_vswp_d_d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_vswp_d_d(dst, src)) } +emit_vswp_d_d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_vswp_d_d(dst, src)) } inst_vld1_dlist_mem :: #force_inline proc "contextless" (regs: u16, src: Memory) -> Instruction { return Instruction{mnemonic = .VLD1, operand_count = 2, mode = .A32, cond = 14, length = 4, ops = {op_reg_list(regs), op_mem(src), {}, {}, {}, {}}} } inst_vld1_dlane_mem :: #force_inline proc "contextless" (dst: Register, lane: u8, src: Memory) -> Instruction { return Instruction{mnemonic = .VLD1, operand_count = 2, mode = .A32, cond = 14, length = 4, ops = {op_dpr_lane(dst, lane), op_mem(src), {}, {}, {}, {}}} } -emit_vld1_dlist_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, regs: u16, src: Memory) { append(instructions, inst_vld1_dlist_mem(regs, src)) } -emit_vld1_dlane_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, lane: u8, src: Memory) { append(instructions, inst_vld1_dlane_mem(dst, lane, src)) } +emit_vld1_dlist_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, regs: u16, src: Memory) { append_elem(instructions, inst_vld1_dlist_mem(regs, src)) } +emit_vld1_dlane_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, lane: u8, src: Memory) { append_elem(instructions, inst_vld1_dlane_mem(dst, lane, src)) } inst_vld2_dlist_mem :: #force_inline proc "contextless" (regs: u16, src: Memory) -> Instruction { return Instruction{mnemonic = .VLD2, operand_count = 2, mode = .A32, cond = 14, length = 4, ops = {op_reg_list(regs), op_mem(src), {}, {}, {}, {}}} } -emit_vld2_dlist_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, regs: u16, src: Memory) { append(instructions, inst_vld2_dlist_mem(regs, src)) } +emit_vld2_dlist_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, regs: u16, src: Memory) { append_elem(instructions, inst_vld2_dlist_mem(regs, src)) } inst_vld3_dlist_mem :: #force_inline proc "contextless" (regs: u16, src: Memory) -> Instruction { return Instruction{mnemonic = .VLD3, operand_count = 2, mode = .A32, cond = 14, length = 4, ops = {op_reg_list(regs), op_mem(src), {}, {}, {}, {}}} } -emit_vld3_dlist_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, regs: u16, src: Memory) { append(instructions, inst_vld3_dlist_mem(regs, src)) } +emit_vld3_dlist_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, regs: u16, src: Memory) { append_elem(instructions, inst_vld3_dlist_mem(regs, src)) } inst_vld4_dlist_mem :: #force_inline proc "contextless" (regs: u16, src: Memory) -> Instruction { return Instruction{mnemonic = .VLD4, operand_count = 2, mode = .A32, cond = 14, length = 4, ops = {op_reg_list(regs), op_mem(src), {}, {}, {}, {}}} } -emit_vld4_dlist_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, regs: u16, src: Memory) { append(instructions, inst_vld4_dlist_mem(regs, src)) } +emit_vld4_dlist_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, regs: u16, src: Memory) { append_elem(instructions, inst_vld4_dlist_mem(regs, src)) } inst_vst1_dlist_mem :: #force_inline proc "contextless" (regs: u16, src: Memory) -> Instruction { return Instruction{mnemonic = .VST1, operand_count = 2, mode = .A32, cond = 14, length = 4, ops = {op_reg_list(regs), op_mem(src), {}, {}, {}, {}}} } inst_vst1_dlane_mem :: #force_inline proc "contextless" (dst: Register, lane: u8, src: Memory) -> Instruction { return Instruction{mnemonic = .VST1, operand_count = 2, mode = .A32, cond = 14, length = 4, ops = {op_dpr_lane(dst, lane), op_mem(src), {}, {}, {}, {}}} } -emit_vst1_dlist_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, regs: u16, src: Memory) { append(instructions, inst_vst1_dlist_mem(regs, src)) } -emit_vst1_dlane_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, lane: u8, src: Memory) { append(instructions, inst_vst1_dlane_mem(dst, lane, src)) } +emit_vst1_dlist_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, regs: u16, src: Memory) { append_elem(instructions, inst_vst1_dlist_mem(regs, src)) } +emit_vst1_dlane_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, lane: u8, src: Memory) { append_elem(instructions, inst_vst1_dlane_mem(dst, lane, src)) } inst_vst2_dlist_mem :: #force_inline proc "contextless" (regs: u16, src: Memory) -> Instruction { return Instruction{mnemonic = .VST2, operand_count = 2, mode = .A32, cond = 14, length = 4, ops = {op_reg_list(regs), op_mem(src), {}, {}, {}, {}}} } -emit_vst2_dlist_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, regs: u16, src: Memory) { append(instructions, inst_vst2_dlist_mem(regs, src)) } +emit_vst2_dlist_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, regs: u16, src: Memory) { append_elem(instructions, inst_vst2_dlist_mem(regs, src)) } inst_vst3_dlist_mem :: #force_inline proc "contextless" (regs: u16, src: Memory) -> Instruction { return Instruction{mnemonic = .VST3, operand_count = 2, mode = .A32, cond = 14, length = 4, ops = {op_reg_list(regs), op_mem(src), {}, {}, {}, {}}} } -emit_vst3_dlist_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, regs: u16, src: Memory) { append(instructions, inst_vst3_dlist_mem(regs, src)) } +emit_vst3_dlist_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, regs: u16, src: Memory) { append_elem(instructions, inst_vst3_dlist_mem(regs, src)) } inst_vst4_dlist_mem :: #force_inline proc "contextless" (regs: u16, src: Memory) -> Instruction { return Instruction{mnemonic = .VST4, operand_count = 2, mode = .A32, cond = 14, length = 4, ops = {op_reg_list(regs), op_mem(src), {}, {}, {}, {}}} } -emit_vst4_dlist_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, regs: u16, src: Memory) { append(instructions, inst_vst4_dlist_mem(regs, src)) } +emit_vst4_dlist_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, regs: u16, src: Memory) { append_elem(instructions, inst_vst4_dlist_mem(regs, src)) } inst_aese_q_q :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .AESE, operand_count = 2, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}, {}, {}}} } -emit_aese_q_q :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_aese_q_q(dst, src)) } +emit_aese_q_q :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_aese_q_q(dst, src)) } inst_aesd_q_q :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .AESD, operand_count = 2, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}, {}, {}}} } -emit_aesd_q_q :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_aesd_q_q(dst, src)) } +emit_aesd_q_q :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_aesd_q_q(dst, src)) } inst_aesmc_q_q :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .AESMC, operand_count = 2, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}, {}, {}}} } -emit_aesmc_q_q :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_aesmc_q_q(dst, src)) } +emit_aesmc_q_q :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_aesmc_q_q(dst, src)) } inst_aesimc_q_q :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .AESIMC, operand_count = 2, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}, {}, {}}} } -emit_aesimc_q_q :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_aesimc_q_q(dst, src)) } +emit_aesimc_q_q :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_aesimc_q_q(dst, src)) } inst_sha1h_q_q :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .SHA1H, operand_count = 2, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}, {}, {}}} } -emit_sha1h_q_q :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_sha1h_q_q(dst, src)) } +emit_sha1h_q_q :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_sha1h_q_q(dst, src)) } inst_sha1su0_q_q_q :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .SHA1SU0, operand_count = 3, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}, {}, {}}} } -emit_sha1su0_q_q_q :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_sha1su0_q_q_q(dst, src, src2)) } +emit_sha1su0_q_q_q :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_sha1su0_q_q_q(dst, src, src2)) } inst_sha1su1_q_q :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .SHA1SU1, operand_count = 2, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}, {}, {}}} } -emit_sha1su1_q_q :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_sha1su1_q_q(dst, src)) } +emit_sha1su1_q_q :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_sha1su1_q_q(dst, src)) } inst_sha1c_q_q_q :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .SHA1C, operand_count = 3, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}, {}, {}}} } -emit_sha1c_q_q_q :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_sha1c_q_q_q(dst, src, src2)) } +emit_sha1c_q_q_q :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_sha1c_q_q_q(dst, src, src2)) } inst_sha1m_q_q_q :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .SHA1M, operand_count = 3, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}, {}, {}}} } -emit_sha1m_q_q_q :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_sha1m_q_q_q(dst, src, src2)) } +emit_sha1m_q_q_q :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_sha1m_q_q_q(dst, src, src2)) } inst_sha1p_q_q_q :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .SHA1P, operand_count = 3, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}, {}, {}}} } -emit_sha1p_q_q_q :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_sha1p_q_q_q(dst, src, src2)) } +emit_sha1p_q_q_q :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_sha1p_q_q_q(dst, src, src2)) } inst_sha256h_q_q_q :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .SHA256H, operand_count = 3, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}, {}, {}}} } -emit_sha256h_q_q_q :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_sha256h_q_q_q(dst, src, src2)) } +emit_sha256h_q_q_q :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_sha256h_q_q_q(dst, src, src2)) } inst_sha256h2_q_q_q :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .SHA256H2, operand_count = 3, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}, {}, {}}} } -emit_sha256h2_q_q_q :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_sha256h2_q_q_q(dst, src, src2)) } +emit_sha256h2_q_q_q :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_sha256h2_q_q_q(dst, src, src2)) } inst_sha256su0_q_q :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .SHA256SU0, operand_count = 2, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}, {}, {}}} } -emit_sha256su0_q_q :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_sha256su0_q_q(dst, src)) } +emit_sha256su0_q_q :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_sha256su0_q_q(dst, src)) } inst_sha256su1_q_q_q :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .SHA256SU1, operand_count = 3, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}, {}, {}}} } -emit_sha256su1_q_q_q :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_sha256su1_q_q_q(dst, src, src2)) } +emit_sha256su1_q_q_q :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_sha256su1_q_q_q(dst, src, src2)) } inst_vjcvt_s_d :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .VJCVT, operand_count = 2, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}, {}, {}}} } -emit_vjcvt_s_d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_vjcvt_s_d(dst, src)) } +emit_vjcvt_s_d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_vjcvt_s_d(dst, src)) } inst_vsdot_d_d_d :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VSDOT, operand_count = 3, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}, {}, {}}} } inst_vsdot_d_d_dlane :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register, lane: u8) -> Instruction { return Instruction{mnemonic = .VSDOT, operand_count = 3, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_dpr_lane(src2, lane), {}, {}, {}}} } -emit_vsdot_d_d_d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vsdot_d_d_d(dst, src, src2)) } -emit_vsdot_d_d_dlane :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, lane: u8) { append(instructions, inst_vsdot_d_d_dlane(dst, src, src2, lane)) } +emit_vsdot_d_d_d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vsdot_d_d_d(dst, src, src2)) } +emit_vsdot_d_d_dlane :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, lane: u8) { append_elem(instructions, inst_vsdot_d_d_dlane(dst, src, src2, lane)) } inst_vudot_d_d_d :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VUDOT, operand_count = 3, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}, {}, {}}} } inst_vudot_d_d_dlane :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register, lane: u8) -> Instruction { return Instruction{mnemonic = .VUDOT, operand_count = 3, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_dpr_lane(src2, lane), {}, {}, {}}} } -emit_vudot_d_d_d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vudot_d_d_d(dst, src, src2)) } -emit_vudot_d_d_dlane :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, lane: u8) { append(instructions, inst_vudot_d_d_dlane(dst, src, src2, lane)) } +emit_vudot_d_d_d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vudot_d_d_d(dst, src, src2)) } +emit_vudot_d_d_dlane :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, lane: u8) { append_elem(instructions, inst_vudot_d_d_dlane(dst, src, src2, lane)) } inst_vdot_d_d_d :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VDOT, operand_count = 3, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}, {}, {}}} } -emit_vdot_d_d_d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vdot_d_d_d(dst, src, src2)) } +emit_vdot_d_d_d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vdot_d_d_d(dst, src, src2)) } inst_vmmla_q_q_q :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VMMLA, operand_count = 3, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}, {}, {}}} } -emit_vmmla_q_q_q :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vmmla_q_q_q(dst, src, src2)) } +emit_vmmla_q_q_q :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vmmla_q_q_q(dst, src, src2)) } inst_vfmal_d_s_s :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VFMAL, operand_count = 3, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}, {}, {}}} } -emit_vfmal_d_s_s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vfmal_d_s_s(dst, src, src2)) } +emit_vfmal_d_s_s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vfmal_d_s_s(dst, src, src2)) } inst_vfmsl_d_s_s :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VFMSL, operand_count = 3, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}, {}, {}}} } -emit_vfmsl_d_s_s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vfmsl_d_s_s(dst, src, src2)) } +emit_vfmsl_d_s_s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vfmsl_d_s_s(dst, src, src2)) } inst_vcmla_d_d_d_imm :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .VCMLA, operand_count = 4, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), op_imm(imm), {}, {}}} } inst_vcmla_d_d_dlane_imm :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register, lane: u8, imm: i64) -> Instruction { return Instruction{mnemonic = .VCMLA, operand_count = 4, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_dpr_lane(src2, lane), op_imm(imm), {}, {}}} } -emit_vcmla_d_d_d_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, imm: i64) { append(instructions, inst_vcmla_d_d_d_imm(dst, src, src2, imm)) } -emit_vcmla_d_d_dlane_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, lane: u8, imm: i64) { append(instructions, inst_vcmla_d_d_dlane_imm(dst, src, src2, lane, imm)) } +emit_vcmla_d_d_d_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, imm: i64) { append_elem(instructions, inst_vcmla_d_d_d_imm(dst, src, src2, imm)) } +emit_vcmla_d_d_dlane_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, lane: u8, imm: i64) { append_elem(instructions, inst_vcmla_d_d_dlane_imm(dst, src, src2, lane, imm)) } inst_vcadd_d_d_d_imm :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .VCADD, operand_count = 4, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), op_imm(imm), {}, {}}} } -emit_vcadd_d_d_d_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, imm: i64) { append(instructions, inst_vcadd_d_d_d_imm(dst, src, src2, imm)) } +emit_vcadd_d_d_d_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, imm: i64) { append_elem(instructions, inst_vcadd_d_d_d_imm(dst, src, src2, imm)) } inst_vsmmla_q_q_q :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VSMMLA, operand_count = 3, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}, {}, {}}} } -emit_vsmmla_q_q_q :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vsmmla_q_q_q(dst, src, src2)) } +emit_vsmmla_q_q_q :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vsmmla_q_q_q(dst, src, src2)) } inst_vummla_q_q_q :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VUMMLA, operand_count = 3, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}, {}, {}}} } -emit_vummla_q_q_q :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vummla_q_q_q(dst, src, src2)) } +emit_vummla_q_q_q :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vummla_q_q_q(dst, src, src2)) } inst_vusmmla_q_q_q :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VUSMMLA, operand_count = 3, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}, {}, {}}} } -emit_vusmmla_q_q_q :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vusmmla_q_q_q(dst, src, src2)) } +emit_vusmmla_q_q_q :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vusmmla_q_q_q(dst, src, src2)) } inst_vsudot_q_q_dlane :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register, lane: u8) -> Instruction { return Instruction{mnemonic = .VSUDOT, operand_count = 3, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_dpr_lane(src2, lane), {}, {}, {}}} } -emit_vsudot_q_q_dlane :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, lane: u8) { append(instructions, inst_vsudot_q_q_dlane(dst, src, src2, lane)) } +emit_vsudot_q_q_dlane :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, lane: u8) { append_elem(instructions, inst_vsudot_q_q_dlane(dst, src, src2, lane)) } inst_vusdot_d_d_d :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VUSDOT, operand_count = 3, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}, {}, {}}} } inst_vusdot_d_d_dlane :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register, lane: u8) -> Instruction { return Instruction{mnemonic = .VUSDOT, operand_count = 3, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_dpr_lane(src2, lane), {}, {}, {}}} } -emit_vusdot_d_d_d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vusdot_d_d_d(dst, src, src2)) } -emit_vusdot_d_d_dlane :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, lane: u8) { append(instructions, inst_vusdot_d_d_dlane(dst, src, src2, lane)) } +emit_vusdot_d_d_d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vusdot_d_d_d(dst, src, src2)) } +emit_vusdot_d_d_dlane :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, lane: u8) { append_elem(instructions, inst_vusdot_d_d_dlane(dst, src, src2, lane)) } inst_vqabs_q_q :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .VQABS, operand_count = 2, mode = .T32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}, {}, {}}} } -emit_vqabs_q_q :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_vqabs_q_q(dst, src)) } +emit_vqabs_q_q :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_vqabs_q_q(dst, src)) } inst_vqneg_q_q :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .VQNEG, operand_count = 2, mode = .T32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}, {}, {}}} } -emit_vqneg_q_q :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_vqneg_q_q(dst, src)) } +emit_vqneg_q_q :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_vqneg_q_q(dst, src)) } inst_vmovx_s_s :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .VMOVX, operand_count = 2, mode = .T32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}, {}, {}}} } -emit_vmovx_s_s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_vmovx_s_s(dst, src)) } +emit_vmovx_s_s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_vmovx_s_s(dst, src)) } inst_vins_s_s :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .VINS, operand_count = 2, mode = .T32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}, {}, {}}} } -emit_vins_s_s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_vins_s_s(dst, src)) } +emit_vins_s_s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_vins_s_s(dst, src)) } inst_it_cond_imm4 :: #force_inline proc "contextless" (imm: i64, imm2: i64) -> Instruction { return Instruction{mnemonic = .IT, operand_count = 2, mode = .T32, cond = 14, length = 2, ops = {op_imm(imm), op_imm(imm2), {}, {}, {}, {}}} } -emit_it_cond_imm4 :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, imm2: i64) { append(instructions, inst_it_cond_imm4(imm, imm2)) } +emit_it_cond_imm4 :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, imm2: i64) { append_elem(instructions, inst_it_cond_imm4(imm, imm2)) } inst_tt_r_r :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .TT, operand_count = 2, mode = .T32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}, {}, {}}} } -emit_tt_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_tt_r_r(dst, src)) } +emit_tt_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_tt_r_r(dst, src)) } inst_ttt_r_r :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .TTT, operand_count = 2, mode = .T32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}, {}, {}}} } -emit_ttt_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_ttt_r_r(dst, src)) } +emit_ttt_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_ttt_r_r(dst, src)) } inst_tta_r_r :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .TTA, operand_count = 2, mode = .T32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}, {}, {}}} } -emit_tta_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_tta_r_r(dst, src)) } +emit_tta_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_tta_r_r(dst, src)) } inst_ttat_r_r :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .TTAT, operand_count = 2, mode = .T32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}, {}, {}}} } -emit_ttat_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_ttat_r_r(dst, src)) } +emit_ttat_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_ttat_r_r(dst, src)) } inst_sg_none :: #force_inline proc "contextless" () -> Instruction { return Instruction{mnemonic = .SG, operand_count = 0, mode = .T32, cond = 14, length = 4, ops = {{}, {}, {}, {}, {}, {}}} } -emit_sg_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_sg_none()) } +emit_sg_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_sg_none()) } inst_bxns_r :: #force_inline proc "contextless" (dst: Register) -> Instruction { return Instruction{mnemonic = .BXNS, operand_count = 1, mode = .T32, cond = 14, length = 2, ops = {op_reg(dst), {}, {}, {}, {}, {}}} } -emit_bxns_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register) { append(instructions, inst_bxns_r(dst)) } +emit_bxns_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register) { append_elem(instructions, inst_bxns_r(dst)) } inst_blxns_r :: #force_inline proc "contextless" (dst: Register) -> Instruction { return Instruction{mnemonic = .BLXNS, operand_count = 1, mode = .T32, cond = 14, length = 2, ops = {op_reg(dst), {}, {}, {}, {}, {}}} } -emit_blxns_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register) { append(instructions, inst_blxns_r(dst)) } +emit_blxns_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register) { append_elem(instructions, inst_blxns_r(dst)) } inst_pac_none :: #force_inline proc "contextless" () -> Instruction { return Instruction{mnemonic = .PAC, operand_count = 0, mode = .T32, cond = 14, length = 4, ops = {{}, {}, {}, {}, {}, {}}} } -emit_pac_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_pac_none()) } +emit_pac_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_pac_none()) } inst_pacbti_none :: #force_inline proc "contextless" () -> Instruction { return Instruction{mnemonic = .PACBTI, operand_count = 0, mode = .T32, cond = 14, length = 4, ops = {{}, {}, {}, {}, {}, {}}} } -emit_pacbti_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_pacbti_none()) } +emit_pacbti_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_pacbti_none()) } inst_aut_none :: #force_inline proc "contextless" () -> Instruction { return Instruction{mnemonic = .AUT, operand_count = 0, mode = .T32, cond = 14, length = 4, ops = {{}, {}, {}, {}, {}, {}}} } -emit_aut_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_aut_none()) } +emit_aut_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_aut_none()) } inst_autg_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .AUTG, operand_count = 3, mode = .T32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}, {}, {}}} } -emit_autg_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_autg_r_r_r(dst, src, src2)) } +emit_autg_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_autg_r_r_r(dst, src, src2)) } inst_bti_none :: #force_inline proc "contextless" () -> Instruction { return Instruction{mnemonic = .BTI, operand_count = 0, mode = .T32, cond = 14, length = 4, ops = {{}, {}, {}, {}, {}, {}}} } -emit_bti_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_bti_none()) } +emit_bti_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_bti_none()) } inst_wls_r_rel :: #force_inline proc "contextless" (dst: Register, offset: i64) -> Instruction { return Instruction{mnemonic = .WLS, operand_count = 2, mode = .T32, cond = 14, length = 4, ops = {op_reg(dst), op_rel_offset(offset), {}, {}, {}, {}}} } -emit_wls_r_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, offset: i64) { append(instructions, inst_wls_r_rel(dst, offset)) } +emit_wls_r_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, offset: i64) { append_elem(instructions, inst_wls_r_rel(dst, offset)) } inst_wlstp_r_rel :: #force_inline proc "contextless" (dst: Register, offset: i64) -> Instruction { return Instruction{mnemonic = .WLSTP, operand_count = 2, mode = .T32, cond = 14, length = 4, ops = {op_reg(dst), op_rel_offset(offset), {}, {}, {}, {}}} } -emit_wlstp_r_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, offset: i64) { append(instructions, inst_wlstp_r_rel(dst, offset)) } +emit_wlstp_r_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, offset: i64) { append_elem(instructions, inst_wlstp_r_rel(dst, offset)) } inst_dls_r :: #force_inline proc "contextless" (dst: Register) -> Instruction { return Instruction{mnemonic = .DLS, operand_count = 1, mode = .T32, cond = 14, length = 4, ops = {op_reg(dst), {}, {}, {}, {}, {}}} } -emit_dls_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register) { append(instructions, inst_dls_r(dst)) } +emit_dls_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register) { append_elem(instructions, inst_dls_r(dst)) } inst_dlstp_r :: #force_inline proc "contextless" (dst: Register) -> Instruction { return Instruction{mnemonic = .DLSTP, operand_count = 1, mode = .T32, cond = 14, length = 4, ops = {op_reg(dst), {}, {}, {}, {}, {}}} } -emit_dlstp_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register) { append(instructions, inst_dlstp_r(dst)) } +emit_dlstp_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register) { append_elem(instructions, inst_dlstp_r(dst)) } inst_le_rel :: #force_inline proc "contextless" (offset: i64) -> Instruction { return Instruction{mnemonic = .LE, operand_count = 1, mode = .T32, cond = 14, length = 4, ops = {op_rel_offset(offset), {}, {}, {}, {}, {}}} } -emit_le_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, offset: i64) { append(instructions, inst_le_rel(offset)) } +emit_le_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, offset: i64) { append_elem(instructions, inst_le_rel(offset)) } inst_letp_rel :: #force_inline proc "contextless" (offset: i64) -> Instruction { return Instruction{mnemonic = .LETP, operand_count = 1, mode = .T32, cond = 14, length = 4, ops = {op_rel_offset(offset), {}, {}, {}, {}, {}}} } -emit_letp_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, offset: i64) { append(instructions, inst_letp_rel(offset)) } +emit_letp_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, offset: i64) { append_elem(instructions, inst_letp_rel(offset)) } inst_lctp_none :: #force_inline proc "contextless" () -> Instruction { return Instruction{mnemonic = .LCTP, operand_count = 0, mode = .T32, cond = 14, length = 4, ops = {{}, {}, {}, {}, {}, {}}} } -emit_lctp_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_lctp_none()) } +emit_lctp_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_lctp_none()) } inst_bf_rel_rel :: #force_inline proc "contextless" (offset: i64, offset2: i64) -> Instruction { return Instruction{mnemonic = .BF, operand_count = 2, mode = .T32, cond = 14, length = 4, ops = {op_rel_offset(offset), op_rel_offset(offset2), {}, {}, {}, {}}} } -emit_bf_rel_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, offset: i64, offset2: i64) { append(instructions, inst_bf_rel_rel(offset, offset2)) } +emit_bf_rel_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, offset: i64, offset2: i64) { append_elem(instructions, inst_bf_rel_rel(offset, offset2)) } inst_bfx_rel_r :: #force_inline proc "contextless" (offset: i64, src: Register) -> Instruction { return Instruction{mnemonic = .BFX, operand_count = 2, mode = .T32, cond = 14, length = 4, ops = {op_rel_offset(offset), op_reg(src), {}, {}, {}, {}}} } -emit_bfx_rel_r :: #force_inline proc(instructions: ^[dynamic]Instruction, offset: i64, src: Register) { append(instructions, inst_bfx_rel_r(offset, src)) } +emit_bfx_rel_r :: #force_inline proc(instructions: ^[dynamic]Instruction, offset: i64, src: Register) { append_elem(instructions, inst_bfx_rel_r(offset, src)) } inst_bfl_rel_rel :: #force_inline proc "contextless" (offset: i64, offset2: i64) -> Instruction { return Instruction{mnemonic = .BFL, operand_count = 2, mode = .T32, cond = 14, length = 4, ops = {op_rel_offset(offset), op_rel_offset(offset2), {}, {}, {}, {}}} } -emit_bfl_rel_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, offset: i64, offset2: i64) { append(instructions, inst_bfl_rel_rel(offset, offset2)) } +emit_bfl_rel_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, offset: i64, offset2: i64) { append_elem(instructions, inst_bfl_rel_rel(offset, offset2)) } inst_bflx_rel_r :: #force_inline proc "contextless" (offset: i64, src: Register) -> Instruction { return Instruction{mnemonic = .BFLX, operand_count = 2, mode = .T32, cond = 14, length = 4, ops = {op_rel_offset(offset), op_reg(src), {}, {}, {}, {}}} } -emit_bflx_rel_r :: #force_inline proc(instructions: ^[dynamic]Instruction, offset: i64, src: Register) { append(instructions, inst_bflx_rel_r(offset, src)) } +emit_bflx_rel_r :: #force_inline proc(instructions: ^[dynamic]Instruction, offset: i64, src: Register) { append_elem(instructions, inst_bflx_rel_r(offset, src)) } inst_bfcsel_rel_rel_imm4 :: #force_inline proc "contextless" (offset: i64, offset2: i64, imm: i64) -> Instruction { return Instruction{mnemonic = .BFCSEL, operand_count = 3, mode = .T32, cond = 14, length = 4, ops = {op_rel_offset(offset), op_rel_offset(offset2), op_imm(imm), {}, {}, {}}} } -emit_bfcsel_rel_rel_imm4 :: #force_inline proc(instructions: ^[dynamic]Instruction, offset: i64, offset2: i64, imm: i64) { append(instructions, inst_bfcsel_rel_rel_imm4(offset, offset2, imm)) } +emit_bfcsel_rel_rel_imm4 :: #force_inline proc(instructions: ^[dynamic]Instruction, offset: i64, offset2: i64, imm: i64) { append_elem(instructions, inst_bfcsel_rel_rel_imm4(offset, offset2, imm)) } inst_cx1_cp_r_imm :: #force_inline proc "contextless" (imm: i64, src: Register, imm2: i64) -> Instruction { return Instruction{mnemonic = .CX1, operand_count = 3, mode = .T32, cond = 14, length = 4, ops = {op_imm(imm), op_reg(src), op_imm(imm2), {}, {}, {}}} } -emit_cx1_cp_r_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, src: Register, imm2: i64) { append(instructions, inst_cx1_cp_r_imm(imm, src, imm2)) } +emit_cx1_cp_r_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, src: Register, imm2: i64) { append_elem(instructions, inst_cx1_cp_r_imm(imm, src, imm2)) } inst_cx1a_cp_r_imm :: #force_inline proc "contextless" (imm: i64, src: Register, imm2: i64) -> Instruction { return Instruction{mnemonic = .CX1A, operand_count = 3, mode = .T32, cond = 14, length = 4, ops = {op_imm(imm), op_reg(src), op_imm(imm2), {}, {}, {}}} } -emit_cx1a_cp_r_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, src: Register, imm2: i64) { append(instructions, inst_cx1a_cp_r_imm(imm, src, imm2)) } +emit_cx1a_cp_r_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, src: Register, imm2: i64) { append_elem(instructions, inst_cx1a_cp_r_imm(imm, src, imm2)) } inst_cx1d_cp_r_imm :: #force_inline proc "contextless" (imm: i64, src: Register, imm2: i64) -> Instruction { return Instruction{mnemonic = .CX1D, operand_count = 3, mode = .T32, cond = 14, length = 4, ops = {op_imm(imm), op_reg(src), op_imm(imm2), {}, {}, {}}} } -emit_cx1d_cp_r_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, src: Register, imm2: i64) { append(instructions, inst_cx1d_cp_r_imm(imm, src, imm2)) } +emit_cx1d_cp_r_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, src: Register, imm2: i64) { append_elem(instructions, inst_cx1d_cp_r_imm(imm, src, imm2)) } inst_cx1da_cp_r_imm :: #force_inline proc "contextless" (imm: i64, src: Register, imm2: i64) -> Instruction { return Instruction{mnemonic = .CX1DA, operand_count = 3, mode = .T32, cond = 14, length = 4, ops = {op_imm(imm), op_reg(src), op_imm(imm2), {}, {}, {}}} } -emit_cx1da_cp_r_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, src: Register, imm2: i64) { append(instructions, inst_cx1da_cp_r_imm(imm, src, imm2)) } +emit_cx1da_cp_r_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, src: Register, imm2: i64) { append_elem(instructions, inst_cx1da_cp_r_imm(imm, src, imm2)) } inst_cx2_cp_r_r_imm :: #force_inline proc "contextless" (imm: i64, src: Register, src2: Register, imm2: i64) -> Instruction { return Instruction{mnemonic = .CX2, operand_count = 4, mode = .T32, cond = 14, length = 4, ops = {op_imm(imm), op_reg(src), op_reg(src2), op_imm(imm2), {}, {}}} } -emit_cx2_cp_r_r_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, src: Register, src2: Register, imm2: i64) { append(instructions, inst_cx2_cp_r_r_imm(imm, src, src2, imm2)) } +emit_cx2_cp_r_r_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, src: Register, src2: Register, imm2: i64) { append_elem(instructions, inst_cx2_cp_r_r_imm(imm, src, src2, imm2)) } inst_cx2a_cp_r_r_imm :: #force_inline proc "contextless" (imm: i64, src: Register, src2: Register, imm2: i64) -> Instruction { return Instruction{mnemonic = .CX2A, operand_count = 4, mode = .T32, cond = 14, length = 4, ops = {op_imm(imm), op_reg(src), op_reg(src2), op_imm(imm2), {}, {}}} } -emit_cx2a_cp_r_r_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, src: Register, src2: Register, imm2: i64) { append(instructions, inst_cx2a_cp_r_r_imm(imm, src, src2, imm2)) } +emit_cx2a_cp_r_r_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, src: Register, src2: Register, imm2: i64) { append_elem(instructions, inst_cx2a_cp_r_r_imm(imm, src, src2, imm2)) } inst_cx2d_cp_r_r_imm :: #force_inline proc "contextless" (imm: i64, src: Register, src2: Register, imm2: i64) -> Instruction { return Instruction{mnemonic = .CX2D, operand_count = 4, mode = .T32, cond = 14, length = 4, ops = {op_imm(imm), op_reg(src), op_reg(src2), op_imm(imm2), {}, {}}} } -emit_cx2d_cp_r_r_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, src: Register, src2: Register, imm2: i64) { append(instructions, inst_cx2d_cp_r_r_imm(imm, src, src2, imm2)) } +emit_cx2d_cp_r_r_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, src: Register, src2: Register, imm2: i64) { append_elem(instructions, inst_cx2d_cp_r_r_imm(imm, src, src2, imm2)) } inst_cx2da_cp_r_r_imm :: #force_inline proc "contextless" (imm: i64, src: Register, src2: Register, imm2: i64) -> Instruction { return Instruction{mnemonic = .CX2DA, operand_count = 4, mode = .T32, cond = 14, length = 4, ops = {op_imm(imm), op_reg(src), op_reg(src2), op_imm(imm2), {}, {}}} } -emit_cx2da_cp_r_r_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, src: Register, src2: Register, imm2: i64) { append(instructions, inst_cx2da_cp_r_r_imm(imm, src, src2, imm2)) } +emit_cx2da_cp_r_r_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, src: Register, src2: Register, imm2: i64) { append_elem(instructions, inst_cx2da_cp_r_r_imm(imm, src, src2, imm2)) } inst_cx3_cp_r_r_r :: #force_inline proc "contextless" (imm: i64, src: Register, src2: Register, src3: Register) -> Instruction { return Instruction{mnemonic = .CX3, operand_count = 4, mode = .T32, cond = 14, length = 4, ops = {op_imm(imm), op_reg(src), op_reg(src2), op_reg(src3), {}, {}}} } -emit_cx3_cp_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, src: Register, src2: Register, src3: Register) { append(instructions, inst_cx3_cp_r_r_r(imm, src, src2, src3)) } +emit_cx3_cp_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, src: Register, src2: Register, src3: Register) { append_elem(instructions, inst_cx3_cp_r_r_r(imm, src, src2, src3)) } inst_cx3a_cp_r_r_r :: #force_inline proc "contextless" (imm: i64, src: Register, src2: Register, src3: Register) -> Instruction { return Instruction{mnemonic = .CX3A, operand_count = 4, mode = .T32, cond = 14, length = 4, ops = {op_imm(imm), op_reg(src), op_reg(src2), op_reg(src3), {}, {}}} } -emit_cx3a_cp_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, src: Register, src2: Register, src3: Register) { append(instructions, inst_cx3a_cp_r_r_r(imm, src, src2, src3)) } +emit_cx3a_cp_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, src: Register, src2: Register, src3: Register) { append_elem(instructions, inst_cx3a_cp_r_r_r(imm, src, src2, src3)) } inst_cx3d_cp_r_r_r :: #force_inline proc "contextless" (imm: i64, src: Register, src2: Register, src3: Register) -> Instruction { return Instruction{mnemonic = .CX3D, operand_count = 4, mode = .T32, cond = 14, length = 4, ops = {op_imm(imm), op_reg(src), op_reg(src2), op_reg(src3), {}, {}}} } -emit_cx3d_cp_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, src: Register, src2: Register, src3: Register) { append(instructions, inst_cx3d_cp_r_r_r(imm, src, src2, src3)) } +emit_cx3d_cp_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, src: Register, src2: Register, src3: Register) { append_elem(instructions, inst_cx3d_cp_r_r_r(imm, src, src2, src3)) } inst_cx3da_cp_r_r_r :: #force_inline proc "contextless" (imm: i64, src: Register, src2: Register, src3: Register) -> Instruction { return Instruction{mnemonic = .CX3DA, operand_count = 4, mode = .T32, cond = 14, length = 4, ops = {op_imm(imm), op_reg(src), op_reg(src2), op_reg(src3), {}, {}}} } -emit_cx3da_cp_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, src: Register, src2: Register, src3: Register) { append(instructions, inst_cx3da_cp_r_r_r(imm, src, src2, src3)) } +emit_cx3da_cp_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, src: Register, src2: Register, src3: Register) { append_elem(instructions, inst_cx3da_cp_r_r_r(imm, src, src2, src3)) } inst_vcx1_cp_s_imm :: #force_inline proc "contextless" (imm: i64, src: Register, imm2: i64) -> Instruction { return Instruction{mnemonic = .VCX1, operand_count = 3, mode = .T32, cond = 14, length = 4, ops = {op_imm(imm), op_reg(src), op_imm(imm2), {}, {}, {}}} } -emit_vcx1_cp_s_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, src: Register, imm2: i64) { append(instructions, inst_vcx1_cp_s_imm(imm, src, imm2)) } +emit_vcx1_cp_s_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, src: Register, imm2: i64) { append_elem(instructions, inst_vcx1_cp_s_imm(imm, src, imm2)) } inst_vcx1a_cp_s_imm :: #force_inline proc "contextless" (imm: i64, src: Register, imm2: i64) -> Instruction { return Instruction{mnemonic = .VCX1A, operand_count = 3, mode = .T32, cond = 14, length = 4, ops = {op_imm(imm), op_reg(src), op_imm(imm2), {}, {}, {}}} } -emit_vcx1a_cp_s_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, src: Register, imm2: i64) { append(instructions, inst_vcx1a_cp_s_imm(imm, src, imm2)) } +emit_vcx1a_cp_s_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, src: Register, imm2: i64) { append_elem(instructions, inst_vcx1a_cp_s_imm(imm, src, imm2)) } inst_vcx2_cp_s_s_imm :: #force_inline proc "contextless" (imm: i64, src: Register, src2: Register, imm2: i64) -> Instruction { return Instruction{mnemonic = .VCX2, operand_count = 4, mode = .T32, cond = 14, length = 4, ops = {op_imm(imm), op_reg(src), op_reg(src2), op_imm(imm2), {}, {}}} } -emit_vcx2_cp_s_s_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, src: Register, src2: Register, imm2: i64) { append(instructions, inst_vcx2_cp_s_s_imm(imm, src, src2, imm2)) } +emit_vcx2_cp_s_s_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, src: Register, src2: Register, imm2: i64) { append_elem(instructions, inst_vcx2_cp_s_s_imm(imm, src, src2, imm2)) } inst_vcx2a_cp_s_s_imm :: #force_inline proc "contextless" (imm: i64, src: Register, src2: Register, imm2: i64) -> Instruction { return Instruction{mnemonic = .VCX2A, operand_count = 4, mode = .T32, cond = 14, length = 4, ops = {op_imm(imm), op_reg(src), op_reg(src2), op_imm(imm2), {}, {}}} } -emit_vcx2a_cp_s_s_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, src: Register, src2: Register, imm2: i64) { append(instructions, inst_vcx2a_cp_s_s_imm(imm, src, src2, imm2)) } +emit_vcx2a_cp_s_s_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, src: Register, src2: Register, imm2: i64) { append_elem(instructions, inst_vcx2a_cp_s_s_imm(imm, src, src2, imm2)) } inst_vcx3_cp_s_s_s :: #force_inline proc "contextless" (imm: i64, src: Register, src2: Register, src3: Register) -> Instruction { return Instruction{mnemonic = .VCX3, operand_count = 4, mode = .T32, cond = 14, length = 4, ops = {op_imm(imm), op_reg(src), op_reg(src2), op_reg(src3), {}, {}}} } -emit_vcx3_cp_s_s_s :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, src: Register, src2: Register, src3: Register) { append(instructions, inst_vcx3_cp_s_s_s(imm, src, src2, src3)) } +emit_vcx3_cp_s_s_s :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, src: Register, src2: Register, src3: Register) { append_elem(instructions, inst_vcx3_cp_s_s_s(imm, src, src2, src3)) } inst_vcx3a_cp_s_s_s :: #force_inline proc "contextless" (imm: i64, src: Register, src2: Register, src3: Register) -> Instruction { return Instruction{mnemonic = .VCX3A, operand_count = 4, mode = .T32, cond = 14, length = 4, ops = {op_imm(imm), op_reg(src), op_reg(src2), op_reg(src3), {}, {}}} } -emit_vcx3a_cp_s_s_s :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, src: Register, src2: Register, src3: Register) { append(instructions, inst_vcx3a_cp_s_s_s(imm, src, src2, src3)) } +emit_vcx3a_cp_s_s_s :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, src: Register, src2: Register, src3: Register) { append_elem(instructions, inst_vcx3a_cp_s_s_s(imm, src, src2, src3)) } inst_vpt_vpt_cond_q_q :: #force_inline proc "contextless" (imm: i64, imm2: i64, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VPT, operand_count = 4, mode = .T32, cond = 14, length = 4, ops = {op_imm(imm), op_imm(imm2), op_reg(src), op_reg(src2), {}, {}}} } -emit_vpt_vpt_cond_q_q :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, imm2: i64, src: Register, src2: Register) { append(instructions, inst_vpt_vpt_cond_q_q(imm, imm2, src, src2)) } +emit_vpt_vpt_cond_q_q :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, imm2: i64, src: Register, src2: Register) { append_elem(instructions, inst_vpt_vpt_cond_q_q(imm, imm2, src, src2)) } inst_vpst_vpt :: #force_inline proc "contextless" (imm: i64) -> Instruction { return Instruction{mnemonic = .VPST, operand_count = 1, mode = .T32, cond = 14, length = 4, ops = {op_imm(imm), {}, {}, {}, {}, {}}} } -emit_vpst_vpt :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64) { append(instructions, inst_vpst_vpt(imm)) } +emit_vpst_vpt :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64) { append_elem(instructions, inst_vpst_vpt(imm)) } inst_vpsel_q_q_q :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VPSEL, operand_count = 3, mode = .T32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}, {}, {}}} } -emit_vpsel_q_q_q :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vpsel_q_q_q(dst, src, src2)) } +emit_vpsel_q_q_q :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vpsel_q_q_q(dst, src, src2)) } inst_vpnot_none :: #force_inline proc "contextless" () -> Instruction { return Instruction{mnemonic = .VPNOT, operand_count = 0, mode = .T32, cond = 14, length = 4, ops = {{}, {}, {}, {}, {}, {}}} } -emit_vpnot_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_vpnot_none()) } +emit_vpnot_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_vpnot_none()) } inst_vctp_r :: #force_inline proc "contextless" (dst: Register) -> Instruction { return Instruction{mnemonic = .VCTP, operand_count = 1, mode = .T32, cond = 14, length = 4, ops = {op_reg(dst), {}, {}, {}, {}, {}}} } -emit_vctp_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register) { append(instructions, inst_vctp_r(dst)) } +emit_vctp_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register) { append_elem(instructions, inst_vctp_r(dst)) } inst_vaddv_r_q :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .VADDV, operand_count = 2, mode = .T32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}, {}, {}}} } -emit_vaddv_r_q :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_vaddv_r_q(dst, src)) } +emit_vaddv_r_q :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_vaddv_r_q(dst, src)) } inst_vaddva_r_q :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .VADDVA, operand_count = 2, mode = .T32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}, {}, {}}} } -emit_vaddva_r_q :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_vaddva_r_q(dst, src)) } +emit_vaddva_r_q :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_vaddva_r_q(dst, src)) } inst_vaddlv_r_r_q :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VADDLV, operand_count = 3, mode = .T32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}, {}, {}}} } -emit_vaddlv_r_r_q :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vaddlv_r_r_q(dst, src, src2)) } +emit_vaddlv_r_r_q :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vaddlv_r_r_q(dst, src, src2)) } inst_vaddlva_r_r_q :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VADDLVA, operand_count = 3, mode = .T32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}, {}, {}}} } -emit_vaddlva_r_r_q :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vaddlva_r_r_q(dst, src, src2)) } +emit_vaddlva_r_r_q :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vaddlva_r_r_q(dst, src, src2)) } inst_vmaxv_r_q :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .VMAXV, operand_count = 2, mode = .T32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}, {}, {}}} } -emit_vmaxv_r_q :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_vmaxv_r_q(dst, src)) } +emit_vmaxv_r_q :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_vmaxv_r_q(dst, src)) } inst_vmaxav_r_q :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .VMAXAV, operand_count = 2, mode = .T32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}, {}, {}}} } -emit_vmaxav_r_q :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_vmaxav_r_q(dst, src)) } +emit_vmaxav_r_q :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_vmaxav_r_q(dst, src)) } inst_vminv_r_q :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .VMINV, operand_count = 2, mode = .T32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}, {}, {}}} } -emit_vminv_r_q :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_vminv_r_q(dst, src)) } +emit_vminv_r_q :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_vminv_r_q(dst, src)) } inst_vminav_r_q :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .VMINAV, operand_count = 2, mode = .T32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}, {}, {}}} } -emit_vminav_r_q :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_vminav_r_q(dst, src)) } +emit_vminav_r_q :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_vminav_r_q(dst, src)) } inst_vmaxnmv_r_q :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .VMAXNMV, operand_count = 2, mode = .T32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}, {}, {}}} } -emit_vmaxnmv_r_q :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_vmaxnmv_r_q(dst, src)) } +emit_vmaxnmv_r_q :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_vmaxnmv_r_q(dst, src)) } inst_vmaxnmav_r_q :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .VMAXNMAV, operand_count = 2, mode = .T32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}, {}, {}}} } -emit_vmaxnmav_r_q :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_vmaxnmav_r_q(dst, src)) } +emit_vmaxnmav_r_q :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_vmaxnmav_r_q(dst, src)) } inst_vminnmv_r_q :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .VMINNMV, operand_count = 2, mode = .T32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}, {}, {}}} } -emit_vminnmv_r_q :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_vminnmv_r_q(dst, src)) } +emit_vminnmv_r_q :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_vminnmv_r_q(dst, src)) } inst_vminnmav_r_q :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .VMINNMAV, operand_count = 2, mode = .T32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}, {}, {}}} } -emit_vminnmav_r_q :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_vminnmav_r_q(dst, src)) } +emit_vminnmav_r_q :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_vminnmav_r_q(dst, src)) } inst_vabav_r_q_q :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VABAV, operand_count = 3, mode = .T32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}, {}, {}}} } -emit_vabav_r_q_q :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vabav_r_q_q(dst, src, src2)) } +emit_vabav_r_q_q :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vabav_r_q_q(dst, src, src2)) } inst_vmladav_r_q_q :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VMLADAV, operand_count = 3, mode = .T32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}, {}, {}}} } -emit_vmladav_r_q_q :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vmladav_r_q_q(dst, src, src2)) } +emit_vmladav_r_q_q :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vmladav_r_q_q(dst, src, src2)) } inst_vmladava_r_q_q :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VMLADAVA, operand_count = 3, mode = .T32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}, {}, {}}} } -emit_vmladava_r_q_q :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vmladava_r_q_q(dst, src, src2)) } +emit_vmladava_r_q_q :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vmladava_r_q_q(dst, src, src2)) } inst_vmladavx_r_q_q :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VMLADAVX, operand_count = 3, mode = .T32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}, {}, {}}} } -emit_vmladavx_r_q_q :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vmladavx_r_q_q(dst, src, src2)) } +emit_vmladavx_r_q_q :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vmladavx_r_q_q(dst, src, src2)) } inst_vmladavax_r_q_q :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VMLADAVAX, operand_count = 3, mode = .T32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}, {}, {}}} } -emit_vmladavax_r_q_q :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vmladavax_r_q_q(dst, src, src2)) } +emit_vmladavax_r_q_q :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vmladavax_r_q_q(dst, src, src2)) } inst_vmlaldav_r_r_q_q :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register, src3: Register) -> Instruction { return Instruction{mnemonic = .VMLALDAV, operand_count = 4, mode = .T32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), op_reg(src3), {}, {}}} } -emit_vmlaldav_r_r_q_q :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, src3: Register) { append(instructions, inst_vmlaldav_r_r_q_q(dst, src, src2, src3)) } +emit_vmlaldav_r_r_q_q :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, src3: Register) { append_elem(instructions, inst_vmlaldav_r_r_q_q(dst, src, src2, src3)) } inst_vmlaldava_r_r_q_q :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register, src3: Register) -> Instruction { return Instruction{mnemonic = .VMLALDAVA, operand_count = 4, mode = .T32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), op_reg(src3), {}, {}}} } -emit_vmlaldava_r_r_q_q :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, src3: Register) { append(instructions, inst_vmlaldava_r_r_q_q(dst, src, src2, src3)) } +emit_vmlaldava_r_r_q_q :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, src3: Register) { append_elem(instructions, inst_vmlaldava_r_r_q_q(dst, src, src2, src3)) } inst_vmlaldavx_r_r_q_q :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register, src3: Register) -> Instruction { return Instruction{mnemonic = .VMLALDAVX, operand_count = 4, mode = .T32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), op_reg(src3), {}, {}}} } -emit_vmlaldavx_r_r_q_q :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, src3: Register) { append(instructions, inst_vmlaldavx_r_r_q_q(dst, src, src2, src3)) } +emit_vmlaldavx_r_r_q_q :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, src3: Register) { append_elem(instructions, inst_vmlaldavx_r_r_q_q(dst, src, src2, src3)) } inst_vmlaldavax_r_r_q_q :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register, src3: Register) -> Instruction { return Instruction{mnemonic = .VMLALDAVAX, operand_count = 4, mode = .T32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), op_reg(src3), {}, {}}} } -emit_vmlaldavax_r_r_q_q :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, src3: Register) { append(instructions, inst_vmlaldavax_r_r_q_q(dst, src, src2, src3)) } +emit_vmlaldavax_r_r_q_q :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, src3: Register) { append_elem(instructions, inst_vmlaldavax_r_r_q_q(dst, src, src2, src3)) } inst_vmlsdav_r_q_q :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VMLSDAV, operand_count = 3, mode = .T32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}, {}, {}}} } -emit_vmlsdav_r_q_q :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vmlsdav_r_q_q(dst, src, src2)) } +emit_vmlsdav_r_q_q :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vmlsdav_r_q_q(dst, src, src2)) } inst_vmlsdava_r_q_q :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VMLSDAVA, operand_count = 3, mode = .T32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}, {}, {}}} } -emit_vmlsdava_r_q_q :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vmlsdava_r_q_q(dst, src, src2)) } +emit_vmlsdava_r_q_q :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vmlsdava_r_q_q(dst, src, src2)) } inst_vmlsdavx_r_q_q :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VMLSDAVX, operand_count = 3, mode = .T32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}, {}, {}}} } -emit_vmlsdavx_r_q_q :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vmlsdavx_r_q_q(dst, src, src2)) } +emit_vmlsdavx_r_q_q :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vmlsdavx_r_q_q(dst, src, src2)) } inst_vmlsdavax_r_q_q :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VMLSDAVAX, operand_count = 3, mode = .T32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}, {}, {}}} } -emit_vmlsdavax_r_q_q :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vmlsdavax_r_q_q(dst, src, src2)) } +emit_vmlsdavax_r_q_q :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vmlsdavax_r_q_q(dst, src, src2)) } inst_vmlsldav_r_r_q_q :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register, src3: Register) -> Instruction { return Instruction{mnemonic = .VMLSLDAV, operand_count = 4, mode = .T32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), op_reg(src3), {}, {}}} } -emit_vmlsldav_r_r_q_q :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, src3: Register) { append(instructions, inst_vmlsldav_r_r_q_q(dst, src, src2, src3)) } +emit_vmlsldav_r_r_q_q :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, src3: Register) { append_elem(instructions, inst_vmlsldav_r_r_q_q(dst, src, src2, src3)) } inst_vmlsldava_r_r_q_q :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register, src3: Register) -> Instruction { return Instruction{mnemonic = .VMLSLDAVA, operand_count = 4, mode = .T32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), op_reg(src3), {}, {}}} } -emit_vmlsldava_r_r_q_q :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, src3: Register) { append(instructions, inst_vmlsldava_r_r_q_q(dst, src, src2, src3)) } +emit_vmlsldava_r_r_q_q :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, src3: Register) { append_elem(instructions, inst_vmlsldava_r_r_q_q(dst, src, src2, src3)) } inst_vmlsldavx_r_r_q_q :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register, src3: Register) -> Instruction { return Instruction{mnemonic = .VMLSLDAVX, operand_count = 4, mode = .T32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), op_reg(src3), {}, {}}} } -emit_vmlsldavx_r_r_q_q :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, src3: Register) { append(instructions, inst_vmlsldavx_r_r_q_q(dst, src, src2, src3)) } +emit_vmlsldavx_r_r_q_q :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, src3: Register) { append_elem(instructions, inst_vmlsldavx_r_r_q_q(dst, src, src2, src3)) } inst_vmlsldavax_r_r_q_q :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register, src3: Register) -> Instruction { return Instruction{mnemonic = .VMLSLDAVAX, operand_count = 4, mode = .T32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), op_reg(src3), {}, {}}} } -emit_vmlsldavax_r_r_q_q :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, src3: Register) { append(instructions, inst_vmlsldavax_r_r_q_q(dst, src, src2, src3)) } +emit_vmlsldavax_r_r_q_q :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, src3: Register) { append_elem(instructions, inst_vmlsldavax_r_r_q_q(dst, src, src2, src3)) } inst_vrmlaldavh_r_r_q_q :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register, src3: Register) -> Instruction { return Instruction{mnemonic = .VRMLALDAVH, operand_count = 4, mode = .T32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), op_reg(src3), {}, {}}} } -emit_vrmlaldavh_r_r_q_q :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, src3: Register) { append(instructions, inst_vrmlaldavh_r_r_q_q(dst, src, src2, src3)) } +emit_vrmlaldavh_r_r_q_q :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, src3: Register) { append_elem(instructions, inst_vrmlaldavh_r_r_q_q(dst, src, src2, src3)) } inst_vrmlaldavha_r_r_q_q :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register, src3: Register) -> Instruction { return Instruction{mnemonic = .VRMLALDAVHA, operand_count = 4, mode = .T32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), op_reg(src3), {}, {}}} } -emit_vrmlaldavha_r_r_q_q :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, src3: Register) { append(instructions, inst_vrmlaldavha_r_r_q_q(dst, src, src2, src3)) } +emit_vrmlaldavha_r_r_q_q :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, src3: Register) { append_elem(instructions, inst_vrmlaldavha_r_r_q_q(dst, src, src2, src3)) } inst_vrmlaldavhx_r_r_q_q :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register, src3: Register) -> Instruction { return Instruction{mnemonic = .VRMLALDAVHX, operand_count = 4, mode = .T32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), op_reg(src3), {}, {}}} } -emit_vrmlaldavhx_r_r_q_q :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, src3: Register) { append(instructions, inst_vrmlaldavhx_r_r_q_q(dst, src, src2, src3)) } +emit_vrmlaldavhx_r_r_q_q :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, src3: Register) { append_elem(instructions, inst_vrmlaldavhx_r_r_q_q(dst, src, src2, src3)) } inst_vrmlaldavhax_r_r_q_q :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register, src3: Register) -> Instruction { return Instruction{mnemonic = .VRMLALDAVHAX, operand_count = 4, mode = .T32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), op_reg(src3), {}, {}}} } -emit_vrmlaldavhax_r_r_q_q :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, src3: Register) { append(instructions, inst_vrmlaldavhax_r_r_q_q(dst, src, src2, src3)) } +emit_vrmlaldavhax_r_r_q_q :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, src3: Register) { append_elem(instructions, inst_vrmlaldavhax_r_r_q_q(dst, src, src2, src3)) } inst_vrmlsldavh_r_r_q_q :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register, src3: Register) -> Instruction { return Instruction{mnemonic = .VRMLSLDAVH, operand_count = 4, mode = .T32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), op_reg(src3), {}, {}}} } -emit_vrmlsldavh_r_r_q_q :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, src3: Register) { append(instructions, inst_vrmlsldavh_r_r_q_q(dst, src, src2, src3)) } +emit_vrmlsldavh_r_r_q_q :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, src3: Register) { append_elem(instructions, inst_vrmlsldavh_r_r_q_q(dst, src, src2, src3)) } inst_vrmlsldavha_r_r_q_q :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register, src3: Register) -> Instruction { return Instruction{mnemonic = .VRMLSLDAVHA, operand_count = 4, mode = .T32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), op_reg(src3), {}, {}}} } -emit_vrmlsldavha_r_r_q_q :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, src3: Register) { append(instructions, inst_vrmlsldavha_r_r_q_q(dst, src, src2, src3)) } +emit_vrmlsldavha_r_r_q_q :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, src3: Register) { append_elem(instructions, inst_vrmlsldavha_r_r_q_q(dst, src, src2, src3)) } inst_vrmlsldavhx_r_r_q_q :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register, src3: Register) -> Instruction { return Instruction{mnemonic = .VRMLSLDAVHX, operand_count = 4, mode = .T32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), op_reg(src3), {}, {}}} } -emit_vrmlsldavhx_r_r_q_q :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, src3: Register) { append(instructions, inst_vrmlsldavhx_r_r_q_q(dst, src, src2, src3)) } +emit_vrmlsldavhx_r_r_q_q :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, src3: Register) { append_elem(instructions, inst_vrmlsldavhx_r_r_q_q(dst, src, src2, src3)) } inst_vrmlsldavhax_r_r_q_q :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register, src3: Register) -> Instruction { return Instruction{mnemonic = .VRMLSLDAVHAX, operand_count = 4, mode = .T32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), op_reg(src3), {}, {}}} } -emit_vrmlsldavhax_r_r_q_q :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, src3: Register) { append(instructions, inst_vrmlsldavhax_r_r_q_q(dst, src, src2, src3)) } +emit_vrmlsldavhax_r_r_q_q :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, src3: Register) { append_elem(instructions, inst_vrmlsldavhax_r_r_q_q(dst, src, src2, src3)) } inst_vmlav_r_q_q :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VMLAV, operand_count = 3, mode = .T32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}, {}, {}}} } -emit_vmlav_r_q_q :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vmlav_r_q_q(dst, src, src2)) } +emit_vmlav_r_q_q :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vmlav_r_q_q(dst, src, src2)) } inst_vmlava_r_q_q :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VMLAVA, operand_count = 3, mode = .T32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}, {}, {}}} } -emit_vmlava_r_q_q :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vmlava_r_q_q(dst, src, src2)) } +emit_vmlava_r_q_q :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vmlava_r_q_q(dst, src, src2)) } inst_vmlsv_r_q_q :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VMLSV, operand_count = 3, mode = .T32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}, {}, {}}} } -emit_vmlsv_r_q_q :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vmlsv_r_q_q(dst, src, src2)) } +emit_vmlsv_r_q_q :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vmlsv_r_q_q(dst, src, src2)) } inst_vmlsva_r_q_q :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VMLSVA, operand_count = 3, mode = .T32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}, {}, {}}} } -emit_vmlsva_r_q_q :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vmlsva_r_q_q(dst, src, src2)) } +emit_vmlsva_r_q_q :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vmlsva_r_q_q(dst, src, src2)) } inst_vcmul_q_q_q :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VCMUL, operand_count = 3, mode = .T32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}, {}, {}}} } -emit_vcmul_q_q_q :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vcmul_q_q_q(dst, src, src2)) } +emit_vcmul_q_q_q :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vcmul_q_q_q(dst, src, src2)) } inst_vhcadd_q_q_q :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VHCADD, operand_count = 3, mode = .T32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}, {}, {}}} } inst_vhcadd_q_q_q_imm :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .VHCADD, operand_count = 4, mode = .T32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), op_imm(imm), {}, {}}} } -emit_vhcadd_q_q_q :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vhcadd_q_q_q(dst, src, src2)) } -emit_vhcadd_q_q_q_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, imm: i64) { append(instructions, inst_vhcadd_q_q_q_imm(dst, src, src2, imm)) } +emit_vhcadd_q_q_q :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vhcadd_q_q_q(dst, src, src2)) } +emit_vhcadd_q_q_q_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, imm: i64) { append_elem(instructions, inst_vhcadd_q_q_q_imm(dst, src, src2, imm)) } inst_vbrsr_q_q_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VBRSR, operand_count = 3, mode = .T32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}, {}, {}}} } -emit_vbrsr_q_q_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vbrsr_q_q_r(dst, src, src2)) } +emit_vbrsr_q_q_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vbrsr_q_q_r(dst, src, src2)) } inst_vshlc_q_r_imm5 :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .VSHLC, operand_count = 3, mode = .T32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_imm(imm), {}, {}, {}}} } -emit_vshlc_q_r_imm5 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_vshlc_q_r_imm5(dst, src, imm)) } +emit_vshlc_q_r_imm5 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_vshlc_q_r_imm5(dst, src, imm)) } inst_vddup_q_r_imm :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .VDDUP, operand_count = 3, mode = .T32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_imm(imm), {}, {}, {}}} } -emit_vddup_q_r_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_vddup_q_r_imm(dst, src, imm)) } +emit_vddup_q_r_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_vddup_q_r_imm(dst, src, imm)) } inst_vidup_q_r_imm :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .VIDUP, operand_count = 3, mode = .T32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_imm(imm), {}, {}, {}}} } -emit_vidup_q_r_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_vidup_q_r_imm(dst, src, imm)) } +emit_vidup_q_r_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_vidup_q_r_imm(dst, src, imm)) } inst_vdwdup_q_r_r_imm :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .VDWDUP, operand_count = 4, mode = .T32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), op_imm(imm), {}, {}}} } -emit_vdwdup_q_r_r_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, imm: i64) { append(instructions, inst_vdwdup_q_r_r_imm(dst, src, src2, imm)) } +emit_vdwdup_q_r_r_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, imm: i64) { append_elem(instructions, inst_vdwdup_q_r_r_imm(dst, src, src2, imm)) } inst_viwdup_q_r_r_imm :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .VIWDUP, operand_count = 4, mode = .T32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), op_imm(imm), {}, {}}} } -emit_viwdup_q_r_r_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, imm: i64) { append(instructions, inst_viwdup_q_r_r_imm(dst, src, src2, imm)) } +emit_viwdup_q_r_r_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, imm: i64) { append_elem(instructions, inst_viwdup_q_r_r_imm(dst, src, src2, imm)) } inst_vmovnb_q_q :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .VMOVNB, operand_count = 2, mode = .T32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}, {}, {}}} } -emit_vmovnb_q_q :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_vmovnb_q_q(dst, src)) } +emit_vmovnb_q_q :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_vmovnb_q_q(dst, src)) } inst_vmovnt_q_q :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .VMOVNT, operand_count = 2, mode = .T32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}, {}, {}}} } -emit_vmovnt_q_q :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_vmovnt_q_q(dst, src)) } +emit_vmovnt_q_q :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_vmovnt_q_q(dst, src)) } inst_vqmovnb_q_q :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .VQMOVNB, operand_count = 2, mode = .T32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}, {}, {}}} } -emit_vqmovnb_q_q :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_vqmovnb_q_q(dst, src)) } +emit_vqmovnb_q_q :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_vqmovnb_q_q(dst, src)) } inst_vqmovnt_q_q :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .VQMOVNT, operand_count = 2, mode = .T32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}, {}, {}}} } -emit_vqmovnt_q_q :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_vqmovnt_q_q(dst, src)) } +emit_vqmovnt_q_q :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_vqmovnt_q_q(dst, src)) } inst_vqmovunb_q_q :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .VQMOVUNB, operand_count = 2, mode = .T32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}, {}, {}}} } -emit_vqmovunb_q_q :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_vqmovunb_q_q(dst, src)) } +emit_vqmovunb_q_q :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_vqmovunb_q_q(dst, src)) } inst_vqmovunt_q_q :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .VQMOVUNT, operand_count = 2, mode = .T32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}, {}, {}}} } -emit_vqmovunt_q_q :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_vqmovunt_q_q(dst, src)) } +emit_vqmovunt_q_q :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_vqmovunt_q_q(dst, src)) } inst_vshllb_q_q_imm5 :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .VSHLLB, operand_count = 3, mode = .T32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_imm(imm), {}, {}, {}}} } -emit_vshllb_q_q_imm5 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_vshllb_q_q_imm5(dst, src, imm)) } +emit_vshllb_q_q_imm5 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_vshllb_q_q_imm5(dst, src, imm)) } inst_vshllt_q_q_imm5 :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .VSHLLT, operand_count = 3, mode = .T32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_imm(imm), {}, {}, {}}} } -emit_vshllt_q_q_imm5 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_vshllt_q_q_imm5(dst, src, imm)) } +emit_vshllt_q_q_imm5 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_vshllt_q_q_imm5(dst, src, imm)) } inst_vmullb_q_q_q :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VMULLB, operand_count = 3, mode = .T32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}, {}, {}}} } -emit_vmullb_q_q_q :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vmullb_q_q_q(dst, src, src2)) } +emit_vmullb_q_q_q :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vmullb_q_q_q(dst, src, src2)) } inst_vmullt_q_q_q :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VMULLT, operand_count = 3, mode = .T32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}, {}, {}}} } -emit_vmullt_q_q_q :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vmullt_q_q_q(dst, src, src2)) } +emit_vmullt_q_q_q :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vmullt_q_q_q(dst, src, src2)) } inst_vmlalb_q_q_q :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VMLALB, operand_count = 3, mode = .T32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}, {}, {}}} } -emit_vmlalb_q_q_q :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vmlalb_q_q_q(dst, src, src2)) } +emit_vmlalb_q_q_q :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vmlalb_q_q_q(dst, src, src2)) } inst_vmlalt_q_q_q :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VMLALT, operand_count = 3, mode = .T32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}, {}, {}}} } -emit_vmlalt_q_q_q :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vmlalt_q_q_q(dst, src, src2)) } +emit_vmlalt_q_q_q :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vmlalt_q_q_q(dst, src, src2)) } inst_vmlslb_q_q_q :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VMLSLB, operand_count = 3, mode = .T32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}, {}, {}}} } -emit_vmlslb_q_q_q :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vmlslb_q_q_q(dst, src, src2)) } +emit_vmlslb_q_q_q :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vmlslb_q_q_q(dst, src, src2)) } inst_vmlslt_q_q_q :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VMLSLT, operand_count = 3, mode = .T32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}, {}, {}}} } -emit_vmlslt_q_q_q :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vmlslt_q_q_q(dst, src, src2)) } +emit_vmlslt_q_q_q :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vmlslt_q_q_q(dst, src, src2)) } inst_vshrnb_q_q_imm5 :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .VSHRNB, operand_count = 3, mode = .T32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_imm(imm), {}, {}, {}}} } -emit_vshrnb_q_q_imm5 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_vshrnb_q_q_imm5(dst, src, imm)) } +emit_vshrnb_q_q_imm5 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_vshrnb_q_q_imm5(dst, src, imm)) } inst_vshrnt_q_q_imm5 :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .VSHRNT, operand_count = 3, mode = .T32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_imm(imm), {}, {}, {}}} } -emit_vshrnt_q_q_imm5 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_vshrnt_q_q_imm5(dst, src, imm)) } +emit_vshrnt_q_q_imm5 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_vshrnt_q_q_imm5(dst, src, imm)) } inst_vrshrnb_q_q_imm5 :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .VRSHRNB, operand_count = 3, mode = .T32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_imm(imm), {}, {}, {}}} } -emit_vrshrnb_q_q_imm5 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_vrshrnb_q_q_imm5(dst, src, imm)) } +emit_vrshrnb_q_q_imm5 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_vrshrnb_q_q_imm5(dst, src, imm)) } inst_vrshrnt_q_q_imm5 :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .VRSHRNT, operand_count = 3, mode = .T32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_imm(imm), {}, {}, {}}} } -emit_vrshrnt_q_q_imm5 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_vrshrnt_q_q_imm5(dst, src, imm)) } +emit_vrshrnt_q_q_imm5 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_vrshrnt_q_q_imm5(dst, src, imm)) } inst_vqshrnb_q_q_imm5 :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .VQSHRNB, operand_count = 3, mode = .T32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_imm(imm), {}, {}, {}}} } -emit_vqshrnb_q_q_imm5 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_vqshrnb_q_q_imm5(dst, src, imm)) } +emit_vqshrnb_q_q_imm5 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_vqshrnb_q_q_imm5(dst, src, imm)) } inst_vqshrnt_q_q_imm5 :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .VQSHRNT, operand_count = 3, mode = .T32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_imm(imm), {}, {}, {}}} } -emit_vqshrnt_q_q_imm5 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_vqshrnt_q_q_imm5(dst, src, imm)) } +emit_vqshrnt_q_q_imm5 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_vqshrnt_q_q_imm5(dst, src, imm)) } inst_vqrshrnb_q_q_imm5 :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .VQRSHRNB, operand_count = 3, mode = .T32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_imm(imm), {}, {}, {}}} } -emit_vqrshrnb_q_q_imm5 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_vqrshrnb_q_q_imm5(dst, src, imm)) } +emit_vqrshrnb_q_q_imm5 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_vqrshrnb_q_q_imm5(dst, src, imm)) } inst_vqrshrnt_q_q_imm5 :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .VQRSHRNT, operand_count = 3, mode = .T32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_imm(imm), {}, {}, {}}} } -emit_vqrshrnt_q_q_imm5 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_vqrshrnt_q_q_imm5(dst, src, imm)) } +emit_vqrshrnt_q_q_imm5 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_vqrshrnt_q_q_imm5(dst, src, imm)) } inst_vqshrunb_q_q_imm5 :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .VQSHRUNB, operand_count = 3, mode = .T32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_imm(imm), {}, {}, {}}} } -emit_vqshrunb_q_q_imm5 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_vqshrunb_q_q_imm5(dst, src, imm)) } +emit_vqshrunb_q_q_imm5 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_vqshrunb_q_q_imm5(dst, src, imm)) } inst_vqshrunt_q_q_imm5 :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .VQSHRUNT, operand_count = 3, mode = .T32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_imm(imm), {}, {}, {}}} } -emit_vqshrunt_q_q_imm5 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_vqshrunt_q_q_imm5(dst, src, imm)) } +emit_vqshrunt_q_q_imm5 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_vqshrunt_q_q_imm5(dst, src, imm)) } inst_vqrshrunb_q_q_imm5 :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .VQRSHRUNB, operand_count = 3, mode = .T32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_imm(imm), {}, {}, {}}} } -emit_vqrshrunb_q_q_imm5 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_vqrshrunb_q_q_imm5(dst, src, imm)) } +emit_vqrshrunb_q_q_imm5 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_vqrshrunb_q_q_imm5(dst, src, imm)) } inst_vqrshrunt_q_q_imm5 :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .VQRSHRUNT, operand_count = 3, mode = .T32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_imm(imm), {}, {}, {}}} } -emit_vqrshrunt_q_q_imm5 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_vqrshrunt_q_q_imm5(dst, src, imm)) } +emit_vqrshrunt_q_q_imm5 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_vqrshrunt_q_q_imm5(dst, src, imm)) } inst_vqdmladh_q_q_q :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VQDMLADH, operand_count = 3, mode = .T32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}, {}, {}}} } -emit_vqdmladh_q_q_q :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vqdmladh_q_q_q(dst, src, src2)) } +emit_vqdmladh_q_q_q :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vqdmladh_q_q_q(dst, src, src2)) } inst_vqdmladhx_q_q_q :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VQDMLADHX, operand_count = 3, mode = .T32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}, {}, {}}} } -emit_vqdmladhx_q_q_q :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vqdmladhx_q_q_q(dst, src, src2)) } +emit_vqdmladhx_q_q_q :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vqdmladhx_q_q_q(dst, src, src2)) } inst_vqdmlsdh_q_q_q :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VQDMLSDH, operand_count = 3, mode = .T32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}, {}, {}}} } -emit_vqdmlsdh_q_q_q :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vqdmlsdh_q_q_q(dst, src, src2)) } +emit_vqdmlsdh_q_q_q :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vqdmlsdh_q_q_q(dst, src, src2)) } inst_vqdmlsdhx_q_q_q :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VQDMLSDHX, operand_count = 3, mode = .T32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}, {}, {}}} } -emit_vqdmlsdhx_q_q_q :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vqdmlsdhx_q_q_q(dst, src, src2)) } +emit_vqdmlsdhx_q_q_q :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vqdmlsdhx_q_q_q(dst, src, src2)) } inst_vqrdmladh_q_q_q :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VQRDMLADH, operand_count = 3, mode = .T32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}, {}, {}}} } -emit_vqrdmladh_q_q_q :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vqrdmladh_q_q_q(dst, src, src2)) } +emit_vqrdmladh_q_q_q :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vqrdmladh_q_q_q(dst, src, src2)) } inst_vqrdmladhx_q_q_q :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VQRDMLADHX, operand_count = 3, mode = .T32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}, {}, {}}} } -emit_vqrdmladhx_q_q_q :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vqrdmladhx_q_q_q(dst, src, src2)) } +emit_vqrdmladhx_q_q_q :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vqrdmladhx_q_q_q(dst, src, src2)) } inst_vqrdmlsdh_q_q_q :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VQRDMLSDH, operand_count = 3, mode = .T32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}, {}, {}}} } -emit_vqrdmlsdh_q_q_q :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vqrdmlsdh_q_q_q(dst, src, src2)) } +emit_vqrdmlsdh_q_q_q :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vqrdmlsdh_q_q_q(dst, src, src2)) } inst_vqrdmlsdhx_q_q_q :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VQRDMLSDHX, operand_count = 3, mode = .T32, cond = 14, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}, {}, {}}} } -emit_vqrdmlsdhx_q_q_q :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vqrdmlsdhx_q_q_q(dst, src, src2)) } +emit_vqrdmlsdhx_q_q_q :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vqrdmlsdhx_q_q_q(dst, src, src2)) } inst_vldrb_q_mem :: #force_inline proc "contextless" (dst: Register, src: Memory) -> Instruction { return Instruction{mnemonic = .VLDRB, operand_count = 2, mode = .T32, cond = 14, length = 4, ops = {op_reg(dst), op_mem(src), {}, {}, {}, {}}} } inst_vldrb_q_mem_q :: #force_inline proc "contextless" (dst: Register, src: Memory, src2: Register) -> Instruction { return Instruction{mnemonic = .VLDRB, operand_count = 3, mode = .T32, cond = 14, length = 4, ops = {op_reg(dst), op_mem(src), op_reg(src2), {}, {}, {}}} } -emit_vldrb_q_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Memory) { append(instructions, inst_vldrb_q_mem(dst, src)) } -emit_vldrb_q_mem_q :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Memory, src2: Register) { append(instructions, inst_vldrb_q_mem_q(dst, src, src2)) } +emit_vldrb_q_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Memory) { append_elem(instructions, inst_vldrb_q_mem(dst, src)) } +emit_vldrb_q_mem_q :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Memory, src2: Register) { append_elem(instructions, inst_vldrb_q_mem_q(dst, src, src2)) } inst_vldrh_q_mem :: #force_inline proc "contextless" (dst: Register, src: Memory) -> Instruction { return Instruction{mnemonic = .VLDRH, operand_count = 2, mode = .T32, cond = 14, length = 4, ops = {op_reg(dst), op_mem(src), {}, {}, {}, {}}} } inst_vldrh_q_mem_q :: #force_inline proc "contextless" (dst: Register, src: Memory, src2: Register) -> Instruction { return Instruction{mnemonic = .VLDRH, operand_count = 3, mode = .T32, cond = 14, length = 4, ops = {op_reg(dst), op_mem(src), op_reg(src2), {}, {}, {}}} } -emit_vldrh_q_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Memory) { append(instructions, inst_vldrh_q_mem(dst, src)) } -emit_vldrh_q_mem_q :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Memory, src2: Register) { append(instructions, inst_vldrh_q_mem_q(dst, src, src2)) } +emit_vldrh_q_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Memory) { append_elem(instructions, inst_vldrh_q_mem(dst, src)) } +emit_vldrh_q_mem_q :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Memory, src2: Register) { append_elem(instructions, inst_vldrh_q_mem_q(dst, src, src2)) } inst_vldrw_q_mem :: #force_inline proc "contextless" (dst: Register, src: Memory) -> Instruction { return Instruction{mnemonic = .VLDRW, operand_count = 2, mode = .T32, cond = 14, length = 4, ops = {op_reg(dst), op_mem(src), {}, {}, {}, {}}} } inst_vldrw_q_mem_q :: #force_inline proc "contextless" (dst: Register, src: Memory, src2: Register) -> Instruction { return Instruction{mnemonic = .VLDRW, operand_count = 3, mode = .T32, cond = 14, length = 4, ops = {op_reg(dst), op_mem(src), op_reg(src2), {}, {}, {}}} } -emit_vldrw_q_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Memory) { append(instructions, inst_vldrw_q_mem(dst, src)) } -emit_vldrw_q_mem_q :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Memory, src2: Register) { append(instructions, inst_vldrw_q_mem_q(dst, src, src2)) } +emit_vldrw_q_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Memory) { append_elem(instructions, inst_vldrw_q_mem(dst, src)) } +emit_vldrw_q_mem_q :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Memory, src2: Register) { append_elem(instructions, inst_vldrw_q_mem_q(dst, src, src2)) } inst_vldrd_q_mem :: #force_inline proc "contextless" (dst: Register, src: Memory) -> Instruction { return Instruction{mnemonic = .VLDRD, operand_count = 2, mode = .T32, cond = 14, length = 4, ops = {op_reg(dst), op_mem(src), {}, {}, {}, {}}} } inst_vldrd_q_mem_q :: #force_inline proc "contextless" (dst: Register, src: Memory, src2: Register) -> Instruction { return Instruction{mnemonic = .VLDRD, operand_count = 3, mode = .T32, cond = 14, length = 4, ops = {op_reg(dst), op_mem(src), op_reg(src2), {}, {}, {}}} } -emit_vldrd_q_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Memory) { append(instructions, inst_vldrd_q_mem(dst, src)) } -emit_vldrd_q_mem_q :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Memory, src2: Register) { append(instructions, inst_vldrd_q_mem_q(dst, src, src2)) } +emit_vldrd_q_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Memory) { append_elem(instructions, inst_vldrd_q_mem(dst, src)) } +emit_vldrd_q_mem_q :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Memory, src2: Register) { append_elem(instructions, inst_vldrd_q_mem_q(dst, src, src2)) } inst_vstrb_q_mem :: #force_inline proc "contextless" (dst: Register, src: Memory) -> Instruction { return Instruction{mnemonic = .VSTRB, operand_count = 2, mode = .T32, cond = 14, length = 4, ops = {op_reg(dst), op_mem(src), {}, {}, {}, {}}} } inst_vstrb_q_mem_q :: #force_inline proc "contextless" (dst: Register, src: Memory, src2: Register) -> Instruction { return Instruction{mnemonic = .VSTRB, operand_count = 3, mode = .T32, cond = 14, length = 4, ops = {op_reg(dst), op_mem(src), op_reg(src2), {}, {}, {}}} } -emit_vstrb_q_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Memory) { append(instructions, inst_vstrb_q_mem(dst, src)) } -emit_vstrb_q_mem_q :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Memory, src2: Register) { append(instructions, inst_vstrb_q_mem_q(dst, src, src2)) } +emit_vstrb_q_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Memory) { append_elem(instructions, inst_vstrb_q_mem(dst, src)) } +emit_vstrb_q_mem_q :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Memory, src2: Register) { append_elem(instructions, inst_vstrb_q_mem_q(dst, src, src2)) } inst_vstrh_q_mem :: #force_inline proc "contextless" (dst: Register, src: Memory) -> Instruction { return Instruction{mnemonic = .VSTRH, operand_count = 2, mode = .T32, cond = 14, length = 4, ops = {op_reg(dst), op_mem(src), {}, {}, {}, {}}} } inst_vstrh_q_mem_q :: #force_inline proc "contextless" (dst: Register, src: Memory, src2: Register) -> Instruction { return Instruction{mnemonic = .VSTRH, operand_count = 3, mode = .T32, cond = 14, length = 4, ops = {op_reg(dst), op_mem(src), op_reg(src2), {}, {}, {}}} } -emit_vstrh_q_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Memory) { append(instructions, inst_vstrh_q_mem(dst, src)) } -emit_vstrh_q_mem_q :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Memory, src2: Register) { append(instructions, inst_vstrh_q_mem_q(dst, src, src2)) } +emit_vstrh_q_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Memory) { append_elem(instructions, inst_vstrh_q_mem(dst, src)) } +emit_vstrh_q_mem_q :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Memory, src2: Register) { append_elem(instructions, inst_vstrh_q_mem_q(dst, src, src2)) } inst_vstrw_q_mem :: #force_inline proc "contextless" (dst: Register, src: Memory) -> Instruction { return Instruction{mnemonic = .VSTRW, operand_count = 2, mode = .T32, cond = 14, length = 4, ops = {op_reg(dst), op_mem(src), {}, {}, {}, {}}} } inst_vstrw_q_mem_q :: #force_inline proc "contextless" (dst: Register, src: Memory, src2: Register) -> Instruction { return Instruction{mnemonic = .VSTRW, operand_count = 3, mode = .T32, cond = 14, length = 4, ops = {op_reg(dst), op_mem(src), op_reg(src2), {}, {}, {}}} } -emit_vstrw_q_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Memory) { append(instructions, inst_vstrw_q_mem(dst, src)) } -emit_vstrw_q_mem_q :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Memory, src2: Register) { append(instructions, inst_vstrw_q_mem_q(dst, src, src2)) } +emit_vstrw_q_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Memory) { append_elem(instructions, inst_vstrw_q_mem(dst, src)) } +emit_vstrw_q_mem_q :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Memory, src2: Register) { append_elem(instructions, inst_vstrw_q_mem_q(dst, src, src2)) } inst_vstrd_q_mem :: #force_inline proc "contextless" (dst: Register, src: Memory) -> Instruction { return Instruction{mnemonic = .VSTRD, operand_count = 2, mode = .T32, cond = 14, length = 4, ops = {op_reg(dst), op_mem(src), {}, {}, {}, {}}} } inst_vstrd_q_mem_q :: #force_inline proc "contextless" (dst: Register, src: Memory, src2: Register) -> Instruction { return Instruction{mnemonic = .VSTRD, operand_count = 3, mode = .T32, cond = 14, length = 4, ops = {op_reg(dst), op_mem(src), op_reg(src2), {}, {}, {}}} } -emit_vstrd_q_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Memory) { append(instructions, inst_vstrd_q_mem(dst, src)) } -emit_vstrd_q_mem_q :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Memory, src2: Register) { append(instructions, inst_vstrd_q_mem_q(dst, src, src2)) } +emit_vstrd_q_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Memory) { append_elem(instructions, inst_vstrd_q_mem(dst, src)) } +emit_vstrd_q_mem_q :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Memory, src2: Register) { append_elem(instructions, inst_vstrd_q_mem_q(dst, src, src2)) } inst_vld20_qlist_mem :: #force_inline proc "contextless" (regs: u16, src: Memory) -> Instruction { return Instruction{mnemonic = .VLD20, operand_count = 2, mode = .T32, cond = 14, length = 4, ops = {op_reg_list(regs), op_mem(src), {}, {}, {}, {}}} } -emit_vld20_qlist_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, regs: u16, src: Memory) { append(instructions, inst_vld20_qlist_mem(regs, src)) } +emit_vld20_qlist_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, regs: u16, src: Memory) { append_elem(instructions, inst_vld20_qlist_mem(regs, src)) } inst_vld21_qlist_mem :: #force_inline proc "contextless" (regs: u16, src: Memory) -> Instruction { return Instruction{mnemonic = .VLD21, operand_count = 2, mode = .T32, cond = 14, length = 4, ops = {op_reg_list(regs), op_mem(src), {}, {}, {}, {}}} } -emit_vld21_qlist_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, regs: u16, src: Memory) { append(instructions, inst_vld21_qlist_mem(regs, src)) } +emit_vld21_qlist_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, regs: u16, src: Memory) { append_elem(instructions, inst_vld21_qlist_mem(regs, src)) } inst_vld40_qlist_mem :: #force_inline proc "contextless" (regs: u16, src: Memory) -> Instruction { return Instruction{mnemonic = .VLD40, operand_count = 2, mode = .T32, cond = 14, length = 4, ops = {op_reg_list(regs), op_mem(src), {}, {}, {}, {}}} } -emit_vld40_qlist_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, regs: u16, src: Memory) { append(instructions, inst_vld40_qlist_mem(regs, src)) } +emit_vld40_qlist_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, regs: u16, src: Memory) { append_elem(instructions, inst_vld40_qlist_mem(regs, src)) } inst_vld41_qlist_mem :: #force_inline proc "contextless" (regs: u16, src: Memory) -> Instruction { return Instruction{mnemonic = .VLD41, operand_count = 2, mode = .T32, cond = 14, length = 4, ops = {op_reg_list(regs), op_mem(src), {}, {}, {}, {}}} } -emit_vld41_qlist_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, regs: u16, src: Memory) { append(instructions, inst_vld41_qlist_mem(regs, src)) } +emit_vld41_qlist_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, regs: u16, src: Memory) { append_elem(instructions, inst_vld41_qlist_mem(regs, src)) } inst_vld42_qlist_mem :: #force_inline proc "contextless" (regs: u16, src: Memory) -> Instruction { return Instruction{mnemonic = .VLD42, operand_count = 2, mode = .T32, cond = 14, length = 4, ops = {op_reg_list(regs), op_mem(src), {}, {}, {}, {}}} } -emit_vld42_qlist_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, regs: u16, src: Memory) { append(instructions, inst_vld42_qlist_mem(regs, src)) } +emit_vld42_qlist_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, regs: u16, src: Memory) { append_elem(instructions, inst_vld42_qlist_mem(regs, src)) } inst_vld43_qlist_mem :: #force_inline proc "contextless" (regs: u16, src: Memory) -> Instruction { return Instruction{mnemonic = .VLD43, operand_count = 2, mode = .T32, cond = 14, length = 4, ops = {op_reg_list(regs), op_mem(src), {}, {}, {}, {}}} } -emit_vld43_qlist_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, regs: u16, src: Memory) { append(instructions, inst_vld43_qlist_mem(regs, src)) } +emit_vld43_qlist_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, regs: u16, src: Memory) { append_elem(instructions, inst_vld43_qlist_mem(regs, src)) } inst_vst20_qlist_mem :: #force_inline proc "contextless" (regs: u16, src: Memory) -> Instruction { return Instruction{mnemonic = .VST20, operand_count = 2, mode = .T32, cond = 14, length = 4, ops = {op_reg_list(regs), op_mem(src), {}, {}, {}, {}}} } -emit_vst20_qlist_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, regs: u16, src: Memory) { append(instructions, inst_vst20_qlist_mem(regs, src)) } +emit_vst20_qlist_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, regs: u16, src: Memory) { append_elem(instructions, inst_vst20_qlist_mem(regs, src)) } inst_vst21_qlist_mem :: #force_inline proc "contextless" (regs: u16, src: Memory) -> Instruction { return Instruction{mnemonic = .VST21, operand_count = 2, mode = .T32, cond = 14, length = 4, ops = {op_reg_list(regs), op_mem(src), {}, {}, {}, {}}} } -emit_vst21_qlist_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, regs: u16, src: Memory) { append(instructions, inst_vst21_qlist_mem(regs, src)) } +emit_vst21_qlist_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, regs: u16, src: Memory) { append_elem(instructions, inst_vst21_qlist_mem(regs, src)) } inst_vst40_qlist_mem :: #force_inline proc "contextless" (regs: u16, src: Memory) -> Instruction { return Instruction{mnemonic = .VST40, operand_count = 2, mode = .T32, cond = 14, length = 4, ops = {op_reg_list(regs), op_mem(src), {}, {}, {}, {}}} } -emit_vst40_qlist_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, regs: u16, src: Memory) { append(instructions, inst_vst40_qlist_mem(regs, src)) } +emit_vst40_qlist_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, regs: u16, src: Memory) { append_elem(instructions, inst_vst40_qlist_mem(regs, src)) } inst_vst41_qlist_mem :: #force_inline proc "contextless" (regs: u16, src: Memory) -> Instruction { return Instruction{mnemonic = .VST41, operand_count = 2, mode = .T32, cond = 14, length = 4, ops = {op_reg_list(regs), op_mem(src), {}, {}, {}, {}}} } -emit_vst41_qlist_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, regs: u16, src: Memory) { append(instructions, inst_vst41_qlist_mem(regs, src)) } +emit_vst41_qlist_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, regs: u16, src: Memory) { append_elem(instructions, inst_vst41_qlist_mem(regs, src)) } inst_vst42_qlist_mem :: #force_inline proc "contextless" (regs: u16, src: Memory) -> Instruction { return Instruction{mnemonic = .VST42, operand_count = 2, mode = .T32, cond = 14, length = 4, ops = {op_reg_list(regs), op_mem(src), {}, {}, {}, {}}} } -emit_vst42_qlist_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, regs: u16, src: Memory) { append(instructions, inst_vst42_qlist_mem(regs, src)) } +emit_vst42_qlist_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, regs: u16, src: Memory) { append_elem(instructions, inst_vst42_qlist_mem(regs, src)) } inst_vst43_qlist_mem :: #force_inline proc "contextless" (regs: u16, src: Memory) -> Instruction { return Instruction{mnemonic = .VST43, operand_count = 2, mode = .T32, cond = 14, length = 4, ops = {op_reg_list(regs), op_mem(src), {}, {}, {}, {}}} } -emit_vst43_qlist_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, regs: u16, src: Memory) { append(instructions, inst_vst43_qlist_mem(regs, src)) } +emit_vst43_qlist_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, regs: u16, src: Memory) { append_elem(instructions, inst_vst43_qlist_mem(regs, src)) } // ============================================================================= // Overload Groups diff --git a/core/rexcode/isa/arm32/tools/gen_mnemonic_builders.odin b/core/rexcode/isa/arm32/tools/gen_mnemonic_builders.odin index 33b6ed903..beba78b07 100644 --- a/core/rexcode/isa/arm32/tools/gen_mnemonic_builders.odin +++ b/core/rexcode/isa/arm32/tools/gen_mnemonic_builders.odin @@ -451,7 +451,7 @@ write_inst_proc :: proc(sb: ^strings.Builder, entry: Proc_Entry, pad: int) { strings.write_string(sb, " }\n") } -// emit_ procedure: append(instructions, inst_<...>(args)). Not contextless — +// emit_ procedure: append_elem(instructions, inst_<...>(args)). Not contextless — // append needs context. arm32 has no encoder-level emit_* helpers, so these // simply wrap the inst_ builder. write_emit_proc :: proc(sb: ^strings.Builder, entry: Proc_Entry, pad: int) { @@ -467,7 +467,7 @@ write_emit_proc :: proc(sb: ^strings.Builder, entry: Proc_Entry, pad: int) { for p in ps { fmt.sbprintf(sb, ", %s: %s", p.name, p.type) } - strings.write_string(sb, ") { append(instructions, ") + strings.write_string(sb, ") { append_elem(instructions, ") strings.write_string(sb, entry.proc_name) strings.write_byte(sb, '(') for p, i in ps { diff --git a/core/rexcode/isa/arm64/mnemonic_builders.odin b/core/rexcode/isa/arm64/mnemonic_builders.odin index fda64b34f..35c34fde4 100644 --- a/core/rexcode/isa/arm64/mnemonic_builders.odin +++ b/core/rexcode/isa/arm64/mnemonic_builders.odin @@ -39,30 +39,30 @@ inst_add_zb_p_zb_zb :: #force_inline proc "contextless" (rz: u8, rz2: inst_add_zh_p_zh_zh :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8, rz4: u8) -> Instruction { return Instruction{mnemonic = .ADD, operand_count = 4, length = 4, ops = {op_z_h(rz), op_reg(Register(REG_P | (u16(rz2) & 0xF))), op_z_h(rz3), op_z_h(rz4), {}}} } inst_add_zs_p_zs_zs :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8, rz4: u8) -> Instruction { return Instruction{mnemonic = .ADD, operand_count = 4, length = 4, ops = {op_z_s(rz), op_reg(Register(REG_P | (u16(rz2) & 0xF))), op_z_s(rz3), op_z_s(rz4), {}}} } inst_add_zd_p_zd_zd :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8, rz4: u8) -> Instruction { return Instruction{mnemonic = .ADD, operand_count = 4, length = 4, ops = {op_z_d(rz), op_reg(Register(REG_P | (u16(rz2) & 0xF))), op_z_d(rz3), op_z_d(rz4), {}}} } -emit_add_r_r_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_add_r_r_i(dst, src, imm)) } -emit_add_r_r_sh :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, src2_shift: Shift_Type, src2_amount: u8) { append(instructions, inst_add_r_r_sh(dst, src, src2, src2_shift, src2_amount)) } -emit_add_r_r_ex :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, src2_ext: Extend, src2_amount: u8) { append(instructions, inst_add_r_r_ex(dst, src, src2, src2_ext, src2_amount)) } -emit_add_v16b_v16b_v16b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_add_v16b_v16b_v16b(dst, src, src2)) } -emit_add_v8h_v8h_v8h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_add_v8h_v8h_v8h(dst, src, src2)) } -emit_add_v4s_v4s_v4s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_add_v4s_v4s_v4s(dst, src, src2)) } -emit_add_v2d_v2d_v2d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_add_v2d_v2d_v2d(dst, src, src2)) } -emit_add_v8b_v8b_v8b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_add_v8b_v8b_v8b(dst, src, src2)) } -emit_add_v4h_v4h_v4h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_add_v4h_v4h_v4h(dst, src, src2)) } -emit_add_v2s_v2s_v2s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_add_v2s_v2s_v2s(dst, src, src2)) } -emit_add_zb_zb_zb :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append(instructions, inst_add_zb_zb_zb(rz, rz2, rz3)) } -emit_add_zh_zh_zh :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append(instructions, inst_add_zh_zh_zh(rz, rz2, rz3)) } -emit_add_zs_zs_zs :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append(instructions, inst_add_zs_zs_zs(rz, rz2, rz3)) } -emit_add_zd_zd_zd :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append(instructions, inst_add_zd_zd_zd(rz, rz2, rz3)) } -emit_add_zb_p_zb_zb :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append(instructions, inst_add_zb_p_zb_zb(rz, rz2, rz3, rz4)) } -emit_add_zh_p_zh_zh :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append(instructions, inst_add_zh_p_zh_zh(rz, rz2, rz3, rz4)) } -emit_add_zs_p_zs_zs :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append(instructions, inst_add_zs_p_zs_zs(rz, rz2, rz3, rz4)) } -emit_add_zd_p_zd_zd :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append(instructions, inst_add_zd_p_zd_zd(rz, rz2, rz3, rz4)) } +emit_add_r_r_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_add_r_r_i(dst, src, imm)) } +emit_add_r_r_sh :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, src2_shift: Shift_Type, src2_amount: u8) { append_elem(instructions, inst_add_r_r_sh(dst, src, src2, src2_shift, src2_amount)) } +emit_add_r_r_ex :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, src2_ext: Extend, src2_amount: u8) { append_elem(instructions, inst_add_r_r_ex(dst, src, src2, src2_ext, src2_amount)) } +emit_add_v16b_v16b_v16b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_add_v16b_v16b_v16b(dst, src, src2)) } +emit_add_v8h_v8h_v8h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_add_v8h_v8h_v8h(dst, src, src2)) } +emit_add_v4s_v4s_v4s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_add_v4s_v4s_v4s(dst, src, src2)) } +emit_add_v2d_v2d_v2d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_add_v2d_v2d_v2d(dst, src, src2)) } +emit_add_v8b_v8b_v8b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_add_v8b_v8b_v8b(dst, src, src2)) } +emit_add_v4h_v4h_v4h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_add_v4h_v4h_v4h(dst, src, src2)) } +emit_add_v2s_v2s_v2s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_add_v2s_v2s_v2s(dst, src, src2)) } +emit_add_zb_zb_zb :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append_elem(instructions, inst_add_zb_zb_zb(rz, rz2, rz3)) } +emit_add_zh_zh_zh :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append_elem(instructions, inst_add_zh_zh_zh(rz, rz2, rz3)) } +emit_add_zs_zs_zs :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append_elem(instructions, inst_add_zs_zs_zs(rz, rz2, rz3)) } +emit_add_zd_zd_zd :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append_elem(instructions, inst_add_zd_zd_zd(rz, rz2, rz3)) } +emit_add_zb_p_zb_zb :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append_elem(instructions, inst_add_zb_p_zb_zb(rz, rz2, rz3, rz4)) } +emit_add_zh_p_zh_zh :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append_elem(instructions, inst_add_zh_p_zh_zh(rz, rz2, rz3, rz4)) } +emit_add_zs_p_zs_zs :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append_elem(instructions, inst_add_zs_p_zs_zs(rz, rz2, rz3, rz4)) } +emit_add_zd_p_zd_zd :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append_elem(instructions, inst_add_zd_p_zd_zd(rz, rz2, rz3, rz4)) } inst_adds_r_r_i :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return inst_r_r_i(.ADDS, dst, src, imm) } inst_adds_r_r_sh :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register, src2_shift: Shift_Type, src2_amount: u8) -> Instruction { return Instruction{mnemonic = .ADDS, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_shifted(src2, src2_shift, src2_amount), {}, {}}} } inst_adds_r_r_ex :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register, src2_ext: Extend, src2_amount: u8) -> Instruction { return Instruction{mnemonic = .ADDS, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_extended(src2, src2_ext, src2_amount), {}, {}}} } -emit_adds_r_r_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_adds_r_r_i(dst, src, imm)) } -emit_adds_r_r_sh :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, src2_shift: Shift_Type, src2_amount: u8) { append(instructions, inst_adds_r_r_sh(dst, src, src2, src2_shift, src2_amount)) } -emit_adds_r_r_ex :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, src2_ext: Extend, src2_amount: u8) { append(instructions, inst_adds_r_r_ex(dst, src, src2, src2_ext, src2_amount)) } +emit_adds_r_r_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_adds_r_r_i(dst, src, imm)) } +emit_adds_r_r_sh :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, src2_shift: Shift_Type, src2_amount: u8) { append_elem(instructions, inst_adds_r_r_sh(dst, src, src2, src2_shift, src2_amount)) } +emit_adds_r_r_ex :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, src2_ext: Extend, src2_amount: u8) { append_elem(instructions, inst_adds_r_r_ex(dst, src, src2, src2_ext, src2_amount)) } inst_sub_r_r_i :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return inst_r_r_i(.SUB, dst, src, imm) } inst_sub_r_r_sh :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register, src2_shift: Shift_Type, src2_amount: u8) -> Instruction { return Instruction{mnemonic = .SUB, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_shifted(src2, src2_shift, src2_amount), {}, {}}} } inst_sub_r_r_ex :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register, src2_ext: Extend, src2_amount: u8) -> Instruction { return Instruction{mnemonic = .SUB, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_extended(src2, src2_ext, src2_amount), {}, {}}} } @@ -78,37 +78,37 @@ inst_sub_zb_p_zb_zb :: #force_inline proc "contextless" (rz: u8, rz2: inst_sub_zh_p_zh_zh :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8, rz4: u8) -> Instruction { return Instruction{mnemonic = .SUB, operand_count = 4, length = 4, ops = {op_z_h(rz), op_reg(Register(REG_P | (u16(rz2) & 0xF))), op_z_h(rz3), op_z_h(rz4), {}}} } inst_sub_zs_p_zs_zs :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8, rz4: u8) -> Instruction { return Instruction{mnemonic = .SUB, operand_count = 4, length = 4, ops = {op_z_s(rz), op_reg(Register(REG_P | (u16(rz2) & 0xF))), op_z_s(rz3), op_z_s(rz4), {}}} } inst_sub_zd_p_zd_zd :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8, rz4: u8) -> Instruction { return Instruction{mnemonic = .SUB, operand_count = 4, length = 4, ops = {op_z_d(rz), op_reg(Register(REG_P | (u16(rz2) & 0xF))), op_z_d(rz3), op_z_d(rz4), {}}} } -emit_sub_r_r_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_sub_r_r_i(dst, src, imm)) } -emit_sub_r_r_sh :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, src2_shift: Shift_Type, src2_amount: u8) { append(instructions, inst_sub_r_r_sh(dst, src, src2, src2_shift, src2_amount)) } -emit_sub_r_r_ex :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, src2_ext: Extend, src2_amount: u8) { append(instructions, inst_sub_r_r_ex(dst, src, src2, src2_ext, src2_amount)) } -emit_sub_v16b_v16b_v16b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_sub_v16b_v16b_v16b(dst, src, src2)) } -emit_sub_v8h_v8h_v8h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_sub_v8h_v8h_v8h(dst, src, src2)) } -emit_sub_v4s_v4s_v4s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_sub_v4s_v4s_v4s(dst, src, src2)) } -emit_sub_v2d_v2d_v2d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_sub_v2d_v2d_v2d(dst, src, src2)) } -emit_sub_zb_zb_zb :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append(instructions, inst_sub_zb_zb_zb(rz, rz2, rz3)) } -emit_sub_zh_zh_zh :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append(instructions, inst_sub_zh_zh_zh(rz, rz2, rz3)) } -emit_sub_zs_zs_zs :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append(instructions, inst_sub_zs_zs_zs(rz, rz2, rz3)) } -emit_sub_zd_zd_zd :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append(instructions, inst_sub_zd_zd_zd(rz, rz2, rz3)) } -emit_sub_zb_p_zb_zb :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append(instructions, inst_sub_zb_p_zb_zb(rz, rz2, rz3, rz4)) } -emit_sub_zh_p_zh_zh :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append(instructions, inst_sub_zh_p_zh_zh(rz, rz2, rz3, rz4)) } -emit_sub_zs_p_zs_zs :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append(instructions, inst_sub_zs_p_zs_zs(rz, rz2, rz3, rz4)) } -emit_sub_zd_p_zd_zd :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append(instructions, inst_sub_zd_p_zd_zd(rz, rz2, rz3, rz4)) } +emit_sub_r_r_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_sub_r_r_i(dst, src, imm)) } +emit_sub_r_r_sh :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, src2_shift: Shift_Type, src2_amount: u8) { append_elem(instructions, inst_sub_r_r_sh(dst, src, src2, src2_shift, src2_amount)) } +emit_sub_r_r_ex :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, src2_ext: Extend, src2_amount: u8) { append_elem(instructions, inst_sub_r_r_ex(dst, src, src2, src2_ext, src2_amount)) } +emit_sub_v16b_v16b_v16b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_sub_v16b_v16b_v16b(dst, src, src2)) } +emit_sub_v8h_v8h_v8h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_sub_v8h_v8h_v8h(dst, src, src2)) } +emit_sub_v4s_v4s_v4s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_sub_v4s_v4s_v4s(dst, src, src2)) } +emit_sub_v2d_v2d_v2d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_sub_v2d_v2d_v2d(dst, src, src2)) } +emit_sub_zb_zb_zb :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append_elem(instructions, inst_sub_zb_zb_zb(rz, rz2, rz3)) } +emit_sub_zh_zh_zh :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append_elem(instructions, inst_sub_zh_zh_zh(rz, rz2, rz3)) } +emit_sub_zs_zs_zs :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append_elem(instructions, inst_sub_zs_zs_zs(rz, rz2, rz3)) } +emit_sub_zd_zd_zd :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append_elem(instructions, inst_sub_zd_zd_zd(rz, rz2, rz3)) } +emit_sub_zb_p_zb_zb :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append_elem(instructions, inst_sub_zb_p_zb_zb(rz, rz2, rz3, rz4)) } +emit_sub_zh_p_zh_zh :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append_elem(instructions, inst_sub_zh_p_zh_zh(rz, rz2, rz3, rz4)) } +emit_sub_zs_p_zs_zs :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append_elem(instructions, inst_sub_zs_p_zs_zs(rz, rz2, rz3, rz4)) } +emit_sub_zd_p_zd_zd :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append_elem(instructions, inst_sub_zd_p_zd_zd(rz, rz2, rz3, rz4)) } inst_subs_r_r_i :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return inst_r_r_i(.SUBS, dst, src, imm) } inst_subs_r_r_sh :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register, src2_shift: Shift_Type, src2_amount: u8) -> Instruction { return Instruction{mnemonic = .SUBS, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_shifted(src2, src2_shift, src2_amount), {}, {}}} } inst_subs_r_r_ex :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register, src2_ext: Extend, src2_amount: u8) -> Instruction { return Instruction{mnemonic = .SUBS, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_extended(src2, src2_ext, src2_amount), {}, {}}} } -emit_subs_r_r_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_subs_r_r_i(dst, src, imm)) } -emit_subs_r_r_sh :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, src2_shift: Shift_Type, src2_amount: u8) { append(instructions, inst_subs_r_r_sh(dst, src, src2, src2_shift, src2_amount)) } -emit_subs_r_r_ex :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, src2_ext: Extend, src2_amount: u8) { append(instructions, inst_subs_r_r_ex(dst, src, src2, src2_ext, src2_amount)) } +emit_subs_r_r_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_subs_r_r_i(dst, src, imm)) } +emit_subs_r_r_sh :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, src2_shift: Shift_Type, src2_amount: u8) { append_elem(instructions, inst_subs_r_r_sh(dst, src, src2, src2_shift, src2_amount)) } +emit_subs_r_r_ex :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, src2_ext: Extend, src2_amount: u8) { append_elem(instructions, inst_subs_r_r_ex(dst, src, src2, src2_ext, src2_amount)) } inst_movz_r_i_i :: #force_inline proc "contextless" (dst: Register, imm: i64, imm2: i64) -> Instruction { return Instruction{mnemonic = .MOVZ, operand_count = 3, length = 4, ops = {op_reg(dst), op_imm(imm, 2), op_imm(imm2, 1), {}, {}}} } -emit_movz_r_i_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64, imm2: i64) { append(instructions, inst_movz_r_i_i(dst, imm, imm2)) } +emit_movz_r_i_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64, imm2: i64) { append_elem(instructions, inst_movz_r_i_i(dst, imm, imm2)) } inst_movn_r_i_i :: #force_inline proc "contextless" (dst: Register, imm: i64, imm2: i64) -> Instruction { return Instruction{mnemonic = .MOVN, operand_count = 3, length = 4, ops = {op_reg(dst), op_imm(imm, 2), op_imm(imm2, 1), {}, {}}} } -emit_movn_r_i_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64, imm2: i64) { append(instructions, inst_movn_r_i_i(dst, imm, imm2)) } +emit_movn_r_i_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64, imm2: i64) { append_elem(instructions, inst_movn_r_i_i(dst, imm, imm2)) } inst_movk_r_i_i :: #force_inline proc "contextless" (dst: Register, imm: i64, imm2: i64) -> Instruction { return Instruction{mnemonic = .MOVK, operand_count = 3, length = 4, ops = {op_reg(dst), op_imm(imm, 2), op_imm(imm2, 1), {}, {}}} } -emit_movk_r_i_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64, imm2: i64) { append(instructions, inst_movk_r_i_i(dst, imm, imm2)) } +emit_movk_r_i_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64, imm2: i64) { append_elem(instructions, inst_movk_r_i_i(dst, imm, imm2)) } inst_adr_r_l :: #force_inline proc "contextless" (dst: Register, label: u32) -> Instruction { return Instruction{mnemonic = .ADR, operand_count = 2, length = 4, ops = {op_reg(dst), op_label(label, 4), {}, {}, {}}} } -emit_adr_r_l :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, label: u32) { append(instructions, inst_adr_r_l(dst, label)) } +emit_adr_r_l :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, label: u32) { append_elem(instructions, inst_adr_r_l(dst, label)) } inst_adrp_r_l :: #force_inline proc "contextless" (dst: Register, label: u32) -> Instruction { return Instruction{mnemonic = .ADRP, operand_count = 2, length = 4, ops = {op_reg(dst), op_label(label, 4), {}, {}, {}}} } -emit_adrp_r_l :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, label: u32) { append(instructions, inst_adrp_r_l(dst, label)) } +emit_adrp_r_l :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, label: u32) { append_elem(instructions, inst_adrp_r_l(dst, label)) } inst_and_r_r_sh :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register, src2_shift: Shift_Type, src2_amount: u8) -> Instruction { return Instruction{mnemonic = .AND, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_shifted(src2, src2_shift, src2_amount), {}, {}}} } inst_and_r_r_i :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return inst_r_r_i(.AND, dst, src, imm) } inst_and_v16b_v16b_v16b :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .AND, operand_count = 3, length = 4, ops = {op_v_16b(dst), op_v_16b(src), op_v_16b(src2), {}, {}}} } @@ -117,20 +117,20 @@ inst_and_zh_p_zh_zh :: #force_inline proc "contextless" (rz: u8, rz2: inst_and_zs_p_zs_zs :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8, rz4: u8) -> Instruction { return Instruction{mnemonic = .AND, operand_count = 4, length = 4, ops = {op_z_s(rz), op_reg(Register(REG_P | (u16(rz2) & 0xF))), op_z_s(rz3), op_z_s(rz4), {}}} } inst_and_zd_p_zd_zd :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8, rz4: u8) -> Instruction { return Instruction{mnemonic = .AND, operand_count = 4, length = 4, ops = {op_z_d(rz), op_reg(Register(REG_P | (u16(rz2) & 0xF))), op_z_d(rz3), op_z_d(rz4), {}}} } inst_and_pb_p_pb_pb :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8, rz4: u8) -> Instruction { return Instruction{mnemonic = .AND, operand_count = 4, length = 4, ops = {op_reg(Register(REG_P | (u16(rz) & 0xF))), op_reg(Register(REG_P | (u16(rz2) & 0xF))), op_reg(Register(REG_P | (u16(rz3) & 0xF))), op_reg(Register(REG_P | (u16(rz4) & 0xF))), {}}} } -emit_and_r_r_sh :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, src2_shift: Shift_Type, src2_amount: u8) { append(instructions, inst_and_r_r_sh(dst, src, src2, src2_shift, src2_amount)) } -emit_and_r_r_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_and_r_r_i(dst, src, imm)) } -emit_and_v16b_v16b_v16b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_and_v16b_v16b_v16b(dst, src, src2)) } -emit_and_zb_p_zb_zb :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append(instructions, inst_and_zb_p_zb_zb(rz, rz2, rz3, rz4)) } -emit_and_zh_p_zh_zh :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append(instructions, inst_and_zh_p_zh_zh(rz, rz2, rz3, rz4)) } -emit_and_zs_p_zs_zs :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append(instructions, inst_and_zs_p_zs_zs(rz, rz2, rz3, rz4)) } -emit_and_zd_p_zd_zd :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append(instructions, inst_and_zd_p_zd_zd(rz, rz2, rz3, rz4)) } -emit_and_pb_p_pb_pb :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append(instructions, inst_and_pb_p_pb_pb(rz, rz2, rz3, rz4)) } +emit_and_r_r_sh :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, src2_shift: Shift_Type, src2_amount: u8) { append_elem(instructions, inst_and_r_r_sh(dst, src, src2, src2_shift, src2_amount)) } +emit_and_r_r_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_and_r_r_i(dst, src, imm)) } +emit_and_v16b_v16b_v16b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_and_v16b_v16b_v16b(dst, src, src2)) } +emit_and_zb_p_zb_zb :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append_elem(instructions, inst_and_zb_p_zb_zb(rz, rz2, rz3, rz4)) } +emit_and_zh_p_zh_zh :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append_elem(instructions, inst_and_zh_p_zh_zh(rz, rz2, rz3, rz4)) } +emit_and_zs_p_zs_zs :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append_elem(instructions, inst_and_zs_p_zs_zs(rz, rz2, rz3, rz4)) } +emit_and_zd_p_zd_zd :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append_elem(instructions, inst_and_zd_p_zd_zd(rz, rz2, rz3, rz4)) } +emit_and_pb_p_pb_pb :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append_elem(instructions, inst_and_pb_p_pb_pb(rz, rz2, rz3, rz4)) } inst_ands_r_r_sh :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register, src2_shift: Shift_Type, src2_amount: u8) -> Instruction { return Instruction{mnemonic = .ANDS, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_shifted(src2, src2_shift, src2_amount), {}, {}}} } inst_ands_r_r_i :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return inst_r_r_i(.ANDS, dst, src, imm) } inst_ands_pb_p_pb_pb :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8, rz4: u8) -> Instruction { return Instruction{mnemonic = .ANDS, operand_count = 4, length = 4, ops = {op_reg(Register(REG_P | (u16(rz) & 0xF))), op_reg(Register(REG_P | (u16(rz2) & 0xF))), op_reg(Register(REG_P | (u16(rz3) & 0xF))), op_reg(Register(REG_P | (u16(rz4) & 0xF))), {}}} } -emit_ands_r_r_sh :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, src2_shift: Shift_Type, src2_amount: u8) { append(instructions, inst_ands_r_r_sh(dst, src, src2, src2_shift, src2_amount)) } -emit_ands_r_r_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_ands_r_r_i(dst, src, imm)) } -emit_ands_pb_p_pb_pb :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append(instructions, inst_ands_pb_p_pb_pb(rz, rz2, rz3, rz4)) } +emit_ands_r_r_sh :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, src2_shift: Shift_Type, src2_amount: u8) { append_elem(instructions, inst_ands_r_r_sh(dst, src, src2, src2_shift, src2_amount)) } +emit_ands_r_r_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_ands_r_r_i(dst, src, imm)) } +emit_ands_pb_p_pb_pb :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append_elem(instructions, inst_ands_pb_p_pb_pb(rz, rz2, rz3, rz4)) } inst_orr_r_r_sh :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register, src2_shift: Shift_Type, src2_amount: u8) -> Instruction { return Instruction{mnemonic = .ORR, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_shifted(src2, src2_shift, src2_amount), {}, {}}} } inst_orr_r_r_i :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return inst_r_r_i(.ORR, dst, src, imm) } inst_orr_v16b_v16b_v16b :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .ORR, operand_count = 3, length = 4, ops = {op_v_16b(dst), op_v_16b(src), op_v_16b(src2), {}, {}}} } @@ -139,14 +139,14 @@ inst_orr_zh_p_zh_zh :: #force_inline proc "contextless" (rz: u8, rz2: inst_orr_zs_p_zs_zs :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8, rz4: u8) -> Instruction { return Instruction{mnemonic = .ORR, operand_count = 4, length = 4, ops = {op_z_s(rz), op_reg(Register(REG_P | (u16(rz2) & 0xF))), op_z_s(rz3), op_z_s(rz4), {}}} } inst_orr_zd_p_zd_zd :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8, rz4: u8) -> Instruction { return Instruction{mnemonic = .ORR, operand_count = 4, length = 4, ops = {op_z_d(rz), op_reg(Register(REG_P | (u16(rz2) & 0xF))), op_z_d(rz3), op_z_d(rz4), {}}} } inst_orr_pb_p_pb_pb :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8, rz4: u8) -> Instruction { return Instruction{mnemonic = .ORR, operand_count = 4, length = 4, ops = {op_reg(Register(REG_P | (u16(rz) & 0xF))), op_reg(Register(REG_P | (u16(rz2) & 0xF))), op_reg(Register(REG_P | (u16(rz3) & 0xF))), op_reg(Register(REG_P | (u16(rz4) & 0xF))), {}}} } -emit_orr_r_r_sh :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, src2_shift: Shift_Type, src2_amount: u8) { append(instructions, inst_orr_r_r_sh(dst, src, src2, src2_shift, src2_amount)) } -emit_orr_r_r_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_orr_r_r_i(dst, src, imm)) } -emit_orr_v16b_v16b_v16b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_orr_v16b_v16b_v16b(dst, src, src2)) } -emit_orr_zb_p_zb_zb :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append(instructions, inst_orr_zb_p_zb_zb(rz, rz2, rz3, rz4)) } -emit_orr_zh_p_zh_zh :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append(instructions, inst_orr_zh_p_zh_zh(rz, rz2, rz3, rz4)) } -emit_orr_zs_p_zs_zs :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append(instructions, inst_orr_zs_p_zs_zs(rz, rz2, rz3, rz4)) } -emit_orr_zd_p_zd_zd :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append(instructions, inst_orr_zd_p_zd_zd(rz, rz2, rz3, rz4)) } -emit_orr_pb_p_pb_pb :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append(instructions, inst_orr_pb_p_pb_pb(rz, rz2, rz3, rz4)) } +emit_orr_r_r_sh :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, src2_shift: Shift_Type, src2_amount: u8) { append_elem(instructions, inst_orr_r_r_sh(dst, src, src2, src2_shift, src2_amount)) } +emit_orr_r_r_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_orr_r_r_i(dst, src, imm)) } +emit_orr_v16b_v16b_v16b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_orr_v16b_v16b_v16b(dst, src, src2)) } +emit_orr_zb_p_zb_zb :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append_elem(instructions, inst_orr_zb_p_zb_zb(rz, rz2, rz3, rz4)) } +emit_orr_zh_p_zh_zh :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append_elem(instructions, inst_orr_zh_p_zh_zh(rz, rz2, rz3, rz4)) } +emit_orr_zs_p_zs_zs :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append_elem(instructions, inst_orr_zs_p_zs_zs(rz, rz2, rz3, rz4)) } +emit_orr_zd_p_zd_zd :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append_elem(instructions, inst_orr_zd_p_zd_zd(rz, rz2, rz3, rz4)) } +emit_orr_pb_p_pb_pb :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append_elem(instructions, inst_orr_pb_p_pb_pb(rz, rz2, rz3, rz4)) } inst_eor_r_r_sh :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register, src2_shift: Shift_Type, src2_amount: u8) -> Instruction { return Instruction{mnemonic = .EOR, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_shifted(src2, src2_shift, src2_amount), {}, {}}} } inst_eor_r_r_i :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return inst_r_r_i(.EOR, dst, src, imm) } inst_eor_v16b_v16b_v16b :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EOR, operand_count = 3, length = 4, ops = {op_v_16b(dst), op_v_16b(src), op_v_16b(src2), {}, {}}} } @@ -155,14 +155,14 @@ inst_eor_zh_p_zh_zh :: #force_inline proc "contextless" (rz: u8, rz2: inst_eor_zs_p_zs_zs :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8, rz4: u8) -> Instruction { return Instruction{mnemonic = .EOR, operand_count = 4, length = 4, ops = {op_z_s(rz), op_reg(Register(REG_P | (u16(rz2) & 0xF))), op_z_s(rz3), op_z_s(rz4), {}}} } inst_eor_zd_p_zd_zd :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8, rz4: u8) -> Instruction { return Instruction{mnemonic = .EOR, operand_count = 4, length = 4, ops = {op_z_d(rz), op_reg(Register(REG_P | (u16(rz2) & 0xF))), op_z_d(rz3), op_z_d(rz4), {}}} } inst_eor_pb_p_pb_pb :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8, rz4: u8) -> Instruction { return Instruction{mnemonic = .EOR, operand_count = 4, length = 4, ops = {op_reg(Register(REG_P | (u16(rz) & 0xF))), op_reg(Register(REG_P | (u16(rz2) & 0xF))), op_reg(Register(REG_P | (u16(rz3) & 0xF))), op_reg(Register(REG_P | (u16(rz4) & 0xF))), {}}} } -emit_eor_r_r_sh :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, src2_shift: Shift_Type, src2_amount: u8) { append(instructions, inst_eor_r_r_sh(dst, src, src2, src2_shift, src2_amount)) } -emit_eor_r_r_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_eor_r_r_i(dst, src, imm)) } -emit_eor_v16b_v16b_v16b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_eor_v16b_v16b_v16b(dst, src, src2)) } -emit_eor_zb_p_zb_zb :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append(instructions, inst_eor_zb_p_zb_zb(rz, rz2, rz3, rz4)) } -emit_eor_zh_p_zh_zh :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append(instructions, inst_eor_zh_p_zh_zh(rz, rz2, rz3, rz4)) } -emit_eor_zs_p_zs_zs :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append(instructions, inst_eor_zs_p_zs_zs(rz, rz2, rz3, rz4)) } -emit_eor_zd_p_zd_zd :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append(instructions, inst_eor_zd_p_zd_zd(rz, rz2, rz3, rz4)) } -emit_eor_pb_p_pb_pb :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append(instructions, inst_eor_pb_p_pb_pb(rz, rz2, rz3, rz4)) } +emit_eor_r_r_sh :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, src2_shift: Shift_Type, src2_amount: u8) { append_elem(instructions, inst_eor_r_r_sh(dst, src, src2, src2_shift, src2_amount)) } +emit_eor_r_r_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_eor_r_r_i(dst, src, imm)) } +emit_eor_v16b_v16b_v16b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_eor_v16b_v16b_v16b(dst, src, src2)) } +emit_eor_zb_p_zb_zb :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append_elem(instructions, inst_eor_zb_p_zb_zb(rz, rz2, rz3, rz4)) } +emit_eor_zh_p_zh_zh :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append_elem(instructions, inst_eor_zh_p_zh_zh(rz, rz2, rz3, rz4)) } +emit_eor_zs_p_zs_zs :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append_elem(instructions, inst_eor_zs_p_zs_zs(rz, rz2, rz3, rz4)) } +emit_eor_zd_p_zd_zd :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append_elem(instructions, inst_eor_zd_p_zd_zd(rz, rz2, rz3, rz4)) } +emit_eor_pb_p_pb_pb :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append_elem(instructions, inst_eor_pb_p_pb_pb(rz, rz2, rz3, rz4)) } inst_bic_r_r_sh :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register, src2_shift: Shift_Type, src2_amount: u8) -> Instruction { return Instruction{mnemonic = .BIC, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_shifted(src2, src2_shift, src2_amount), {}, {}}} } inst_bic_v16b_v16b_v16b :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .BIC, operand_count = 3, length = 4, ops = {op_v_16b(dst), op_v_16b(src), op_v_16b(src2), {}, {}}} } inst_bic_zb_p_zb_zb :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8, rz4: u8) -> Instruction { return Instruction{mnemonic = .BIC, operand_count = 4, length = 4, ops = {op_z_b(rz), op_reg(Register(REG_P | (u16(rz2) & 0xF))), op_z_b(rz3), op_z_b(rz4), {}}} } @@ -170,109 +170,109 @@ inst_bic_zh_p_zh_zh :: #force_inline proc "contextless" (rz: u8, rz2: inst_bic_zs_p_zs_zs :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8, rz4: u8) -> Instruction { return Instruction{mnemonic = .BIC, operand_count = 4, length = 4, ops = {op_z_s(rz), op_reg(Register(REG_P | (u16(rz2) & 0xF))), op_z_s(rz3), op_z_s(rz4), {}}} } inst_bic_zd_p_zd_zd :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8, rz4: u8) -> Instruction { return Instruction{mnemonic = .BIC, operand_count = 4, length = 4, ops = {op_z_d(rz), op_reg(Register(REG_P | (u16(rz2) & 0xF))), op_z_d(rz3), op_z_d(rz4), {}}} } inst_bic_pb_p_pb_pb :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8, rz4: u8) -> Instruction { return Instruction{mnemonic = .BIC, operand_count = 4, length = 4, ops = {op_reg(Register(REG_P | (u16(rz) & 0xF))), op_reg(Register(REG_P | (u16(rz2) & 0xF))), op_reg(Register(REG_P | (u16(rz3) & 0xF))), op_reg(Register(REG_P | (u16(rz4) & 0xF))), {}}} } -emit_bic_r_r_sh :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, src2_shift: Shift_Type, src2_amount: u8) { append(instructions, inst_bic_r_r_sh(dst, src, src2, src2_shift, src2_amount)) } -emit_bic_v16b_v16b_v16b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_bic_v16b_v16b_v16b(dst, src, src2)) } -emit_bic_zb_p_zb_zb :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append(instructions, inst_bic_zb_p_zb_zb(rz, rz2, rz3, rz4)) } -emit_bic_zh_p_zh_zh :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append(instructions, inst_bic_zh_p_zh_zh(rz, rz2, rz3, rz4)) } -emit_bic_zs_p_zs_zs :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append(instructions, inst_bic_zs_p_zs_zs(rz, rz2, rz3, rz4)) } -emit_bic_zd_p_zd_zd :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append(instructions, inst_bic_zd_p_zd_zd(rz, rz2, rz3, rz4)) } -emit_bic_pb_p_pb_pb :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append(instructions, inst_bic_pb_p_pb_pb(rz, rz2, rz3, rz4)) } +emit_bic_r_r_sh :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, src2_shift: Shift_Type, src2_amount: u8) { append_elem(instructions, inst_bic_r_r_sh(dst, src, src2, src2_shift, src2_amount)) } +emit_bic_v16b_v16b_v16b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_bic_v16b_v16b_v16b(dst, src, src2)) } +emit_bic_zb_p_zb_zb :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append_elem(instructions, inst_bic_zb_p_zb_zb(rz, rz2, rz3, rz4)) } +emit_bic_zh_p_zh_zh :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append_elem(instructions, inst_bic_zh_p_zh_zh(rz, rz2, rz3, rz4)) } +emit_bic_zs_p_zs_zs :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append_elem(instructions, inst_bic_zs_p_zs_zs(rz, rz2, rz3, rz4)) } +emit_bic_zd_p_zd_zd :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append_elem(instructions, inst_bic_zd_p_zd_zd(rz, rz2, rz3, rz4)) } +emit_bic_pb_p_pb_pb :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append_elem(instructions, inst_bic_pb_p_pb_pb(rz, rz2, rz3, rz4)) } inst_bics_r_r_sh :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register, src2_shift: Shift_Type, src2_amount: u8) -> Instruction { return Instruction{mnemonic = .BICS, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_shifted(src2, src2_shift, src2_amount), {}, {}}} } inst_bics_pb_p_pb_pb :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8, rz4: u8) -> Instruction { return Instruction{mnemonic = .BICS, operand_count = 4, length = 4, ops = {op_reg(Register(REG_P | (u16(rz) & 0xF))), op_reg(Register(REG_P | (u16(rz2) & 0xF))), op_reg(Register(REG_P | (u16(rz3) & 0xF))), op_reg(Register(REG_P | (u16(rz4) & 0xF))), {}}} } -emit_bics_r_r_sh :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, src2_shift: Shift_Type, src2_amount: u8) { append(instructions, inst_bics_r_r_sh(dst, src, src2, src2_shift, src2_amount)) } -emit_bics_pb_p_pb_pb :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append(instructions, inst_bics_pb_p_pb_pb(rz, rz2, rz3, rz4)) } +emit_bics_r_r_sh :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, src2_shift: Shift_Type, src2_amount: u8) { append_elem(instructions, inst_bics_r_r_sh(dst, src, src2, src2_shift, src2_amount)) } +emit_bics_pb_p_pb_pb :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append_elem(instructions, inst_bics_pb_p_pb_pb(rz, rz2, rz3, rz4)) } inst_orn_r_r_sh :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register, src2_shift: Shift_Type, src2_amount: u8) -> Instruction { return Instruction{mnemonic = .ORN, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_shifted(src2, src2_shift, src2_amount), {}, {}}} } inst_orn_v16b_v16b_v16b :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .ORN, operand_count = 3, length = 4, ops = {op_v_16b(dst), op_v_16b(src), op_v_16b(src2), {}, {}}} } inst_orn_pb_p_pb_pb :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8, rz4: u8) -> Instruction { return Instruction{mnemonic = .ORN, operand_count = 4, length = 4, ops = {op_reg(Register(REG_P | (u16(rz) & 0xF))), op_reg(Register(REG_P | (u16(rz2) & 0xF))), op_reg(Register(REG_P | (u16(rz3) & 0xF))), op_reg(Register(REG_P | (u16(rz4) & 0xF))), {}}} } -emit_orn_r_r_sh :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, src2_shift: Shift_Type, src2_amount: u8) { append(instructions, inst_orn_r_r_sh(dst, src, src2, src2_shift, src2_amount)) } -emit_orn_v16b_v16b_v16b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_orn_v16b_v16b_v16b(dst, src, src2)) } -emit_orn_pb_p_pb_pb :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append(instructions, inst_orn_pb_p_pb_pb(rz, rz2, rz3, rz4)) } +emit_orn_r_r_sh :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, src2_shift: Shift_Type, src2_amount: u8) { append_elem(instructions, inst_orn_r_r_sh(dst, src, src2, src2_shift, src2_amount)) } +emit_orn_v16b_v16b_v16b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_orn_v16b_v16b_v16b(dst, src, src2)) } +emit_orn_pb_p_pb_pb :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append_elem(instructions, inst_orn_pb_p_pb_pb(rz, rz2, rz3, rz4)) } inst_eon_r_r_sh :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register, src2_shift: Shift_Type, src2_amount: u8) -> Instruction { return Instruction{mnemonic = .EON, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_shifted(src2, src2_shift, src2_amount), {}, {}}} } -emit_eon_r_r_sh :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, src2_shift: Shift_Type, src2_amount: u8) { append(instructions, inst_eon_r_r_sh(dst, src, src2, src2_shift, src2_amount)) } +emit_eon_r_r_sh :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, src2_shift: Shift_Type, src2_amount: u8) { append_elem(instructions, inst_eon_r_r_sh(dst, src, src2, src2_shift, src2_amount)) } inst_lsl_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return inst_r_r_r(.LSL, dst, src, src2) } inst_lsl_zb_p_zb_zb :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8, rz4: u8) -> Instruction { return Instruction{mnemonic = .LSL, operand_count = 4, length = 4, ops = {op_z_b(rz), op_reg(Register(REG_P | (u16(rz2) & 0xF))), op_z_b(rz3), op_z_b(rz4), {}}} } inst_lsl_zh_p_zh_zh :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8, rz4: u8) -> Instruction { return Instruction{mnemonic = .LSL, operand_count = 4, length = 4, ops = {op_z_h(rz), op_reg(Register(REG_P | (u16(rz2) & 0xF))), op_z_h(rz3), op_z_h(rz4), {}}} } inst_lsl_zs_p_zs_zs :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8, rz4: u8) -> Instruction { return Instruction{mnemonic = .LSL, operand_count = 4, length = 4, ops = {op_z_s(rz), op_reg(Register(REG_P | (u16(rz2) & 0xF))), op_z_s(rz3), op_z_s(rz4), {}}} } inst_lsl_zd_p_zd_zd :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8, rz4: u8) -> Instruction { return Instruction{mnemonic = .LSL, operand_count = 4, length = 4, ops = {op_z_d(rz), op_reg(Register(REG_P | (u16(rz2) & 0xF))), op_z_d(rz3), op_z_d(rz4), {}}} } inst_lsl_r_r_i :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return inst_r_r_i(.LSL, dst, src, imm) } -emit_lsl_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_lsl_r_r_r(dst, src, src2)) } -emit_lsl_zb_p_zb_zb :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append(instructions, inst_lsl_zb_p_zb_zb(rz, rz2, rz3, rz4)) } -emit_lsl_zh_p_zh_zh :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append(instructions, inst_lsl_zh_p_zh_zh(rz, rz2, rz3, rz4)) } -emit_lsl_zs_p_zs_zs :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append(instructions, inst_lsl_zs_p_zs_zs(rz, rz2, rz3, rz4)) } -emit_lsl_zd_p_zd_zd :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append(instructions, inst_lsl_zd_p_zd_zd(rz, rz2, rz3, rz4)) } -emit_lsl_r_r_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_lsl_r_r_i(dst, src, imm)) } +emit_lsl_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_lsl_r_r_r(dst, src, src2)) } +emit_lsl_zb_p_zb_zb :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append_elem(instructions, inst_lsl_zb_p_zb_zb(rz, rz2, rz3, rz4)) } +emit_lsl_zh_p_zh_zh :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append_elem(instructions, inst_lsl_zh_p_zh_zh(rz, rz2, rz3, rz4)) } +emit_lsl_zs_p_zs_zs :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append_elem(instructions, inst_lsl_zs_p_zs_zs(rz, rz2, rz3, rz4)) } +emit_lsl_zd_p_zd_zd :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append_elem(instructions, inst_lsl_zd_p_zd_zd(rz, rz2, rz3, rz4)) } +emit_lsl_r_r_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_lsl_r_r_i(dst, src, imm)) } inst_lsr_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return inst_r_r_r(.LSR, dst, src, src2) } inst_lsr_zb_p_zb_zb :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8, rz4: u8) -> Instruction { return Instruction{mnemonic = .LSR, operand_count = 4, length = 4, ops = {op_z_b(rz), op_reg(Register(REG_P | (u16(rz2) & 0xF))), op_z_b(rz3), op_z_b(rz4), {}}} } inst_lsr_zh_p_zh_zh :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8, rz4: u8) -> Instruction { return Instruction{mnemonic = .LSR, operand_count = 4, length = 4, ops = {op_z_h(rz), op_reg(Register(REG_P | (u16(rz2) & 0xF))), op_z_h(rz3), op_z_h(rz4), {}}} } inst_lsr_zs_p_zs_zs :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8, rz4: u8) -> Instruction { return Instruction{mnemonic = .LSR, operand_count = 4, length = 4, ops = {op_z_s(rz), op_reg(Register(REG_P | (u16(rz2) & 0xF))), op_z_s(rz3), op_z_s(rz4), {}}} } inst_lsr_zd_p_zd_zd :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8, rz4: u8) -> Instruction { return Instruction{mnemonic = .LSR, operand_count = 4, length = 4, ops = {op_z_d(rz), op_reg(Register(REG_P | (u16(rz2) & 0xF))), op_z_d(rz3), op_z_d(rz4), {}}} } inst_lsr_r_r_i :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return inst_r_r_i(.LSR, dst, src, imm) } -emit_lsr_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_lsr_r_r_r(dst, src, src2)) } -emit_lsr_zb_p_zb_zb :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append(instructions, inst_lsr_zb_p_zb_zb(rz, rz2, rz3, rz4)) } -emit_lsr_zh_p_zh_zh :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append(instructions, inst_lsr_zh_p_zh_zh(rz, rz2, rz3, rz4)) } -emit_lsr_zs_p_zs_zs :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append(instructions, inst_lsr_zs_p_zs_zs(rz, rz2, rz3, rz4)) } -emit_lsr_zd_p_zd_zd :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append(instructions, inst_lsr_zd_p_zd_zd(rz, rz2, rz3, rz4)) } -emit_lsr_r_r_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_lsr_r_r_i(dst, src, imm)) } +emit_lsr_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_lsr_r_r_r(dst, src, src2)) } +emit_lsr_zb_p_zb_zb :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append_elem(instructions, inst_lsr_zb_p_zb_zb(rz, rz2, rz3, rz4)) } +emit_lsr_zh_p_zh_zh :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append_elem(instructions, inst_lsr_zh_p_zh_zh(rz, rz2, rz3, rz4)) } +emit_lsr_zs_p_zs_zs :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append_elem(instructions, inst_lsr_zs_p_zs_zs(rz, rz2, rz3, rz4)) } +emit_lsr_zd_p_zd_zd :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append_elem(instructions, inst_lsr_zd_p_zd_zd(rz, rz2, rz3, rz4)) } +emit_lsr_r_r_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_lsr_r_r_i(dst, src, imm)) } inst_asr_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return inst_r_r_r(.ASR, dst, src, src2) } inst_asr_zb_p_zb_zb :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8, rz4: u8) -> Instruction { return Instruction{mnemonic = .ASR, operand_count = 4, length = 4, ops = {op_z_b(rz), op_reg(Register(REG_P | (u16(rz2) & 0xF))), op_z_b(rz3), op_z_b(rz4), {}}} } inst_asr_zh_p_zh_zh :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8, rz4: u8) -> Instruction { return Instruction{mnemonic = .ASR, operand_count = 4, length = 4, ops = {op_z_h(rz), op_reg(Register(REG_P | (u16(rz2) & 0xF))), op_z_h(rz3), op_z_h(rz4), {}}} } inst_asr_zs_p_zs_zs :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8, rz4: u8) -> Instruction { return Instruction{mnemonic = .ASR, operand_count = 4, length = 4, ops = {op_z_s(rz), op_reg(Register(REG_P | (u16(rz2) & 0xF))), op_z_s(rz3), op_z_s(rz4), {}}} } inst_asr_zd_p_zd_zd :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8, rz4: u8) -> Instruction { return Instruction{mnemonic = .ASR, operand_count = 4, length = 4, ops = {op_z_d(rz), op_reg(Register(REG_P | (u16(rz2) & 0xF))), op_z_d(rz3), op_z_d(rz4), {}}} } inst_asr_r_r_i :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return inst_r_r_i(.ASR, dst, src, imm) } -emit_asr_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_asr_r_r_r(dst, src, src2)) } -emit_asr_zb_p_zb_zb :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append(instructions, inst_asr_zb_p_zb_zb(rz, rz2, rz3, rz4)) } -emit_asr_zh_p_zh_zh :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append(instructions, inst_asr_zh_p_zh_zh(rz, rz2, rz3, rz4)) } -emit_asr_zs_p_zs_zs :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append(instructions, inst_asr_zs_p_zs_zs(rz, rz2, rz3, rz4)) } -emit_asr_zd_p_zd_zd :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append(instructions, inst_asr_zd_p_zd_zd(rz, rz2, rz3, rz4)) } -emit_asr_r_r_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_asr_r_r_i(dst, src, imm)) } +emit_asr_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_asr_r_r_r(dst, src, src2)) } +emit_asr_zb_p_zb_zb :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append_elem(instructions, inst_asr_zb_p_zb_zb(rz, rz2, rz3, rz4)) } +emit_asr_zh_p_zh_zh :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append_elem(instructions, inst_asr_zh_p_zh_zh(rz, rz2, rz3, rz4)) } +emit_asr_zs_p_zs_zs :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append_elem(instructions, inst_asr_zs_p_zs_zs(rz, rz2, rz3, rz4)) } +emit_asr_zd_p_zd_zd :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append_elem(instructions, inst_asr_zd_p_zd_zd(rz, rz2, rz3, rz4)) } +emit_asr_r_r_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_asr_r_r_i(dst, src, imm)) } inst_ror_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return inst_r_r_r(.ROR, dst, src, src2) } inst_ror_r_r_i :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return inst_r_r_i(.ROR, dst, src, imm) } -emit_ror_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_ror_r_r_r(dst, src, src2)) } -emit_ror_r_r_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_ror_r_r_i(dst, src, imm)) } +emit_ror_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_ror_r_r_r(dst, src, src2)) } +emit_ror_r_r_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_ror_r_r_i(dst, src, imm)) } inst_udiv_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return inst_r_r_r(.UDIV, dst, src, src2) } inst_udiv_zs_p_zs_zs :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8, rz4: u8) -> Instruction { return Instruction{mnemonic = .UDIV, operand_count = 4, length = 4, ops = {op_z_s(rz), op_reg(Register(REG_P | (u16(rz2) & 0xF))), op_z_s(rz3), op_z_s(rz4), {}}} } inst_udiv_zd_p_zd_zd :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8, rz4: u8) -> Instruction { return Instruction{mnemonic = .UDIV, operand_count = 4, length = 4, ops = {op_z_d(rz), op_reg(Register(REG_P | (u16(rz2) & 0xF))), op_z_d(rz3), op_z_d(rz4), {}}} } -emit_udiv_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_udiv_r_r_r(dst, src, src2)) } -emit_udiv_zs_p_zs_zs :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append(instructions, inst_udiv_zs_p_zs_zs(rz, rz2, rz3, rz4)) } -emit_udiv_zd_p_zd_zd :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append(instructions, inst_udiv_zd_p_zd_zd(rz, rz2, rz3, rz4)) } +emit_udiv_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_udiv_r_r_r(dst, src, src2)) } +emit_udiv_zs_p_zs_zs :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append_elem(instructions, inst_udiv_zs_p_zs_zs(rz, rz2, rz3, rz4)) } +emit_udiv_zd_p_zd_zd :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append_elem(instructions, inst_udiv_zd_p_zd_zd(rz, rz2, rz3, rz4)) } inst_sdiv_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return inst_r_r_r(.SDIV, dst, src, src2) } inst_sdiv_zs_p_zs_zs :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8, rz4: u8) -> Instruction { return Instruction{mnemonic = .SDIV, operand_count = 4, length = 4, ops = {op_z_s(rz), op_reg(Register(REG_P | (u16(rz2) & 0xF))), op_z_s(rz3), op_z_s(rz4), {}}} } inst_sdiv_zd_p_zd_zd :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8, rz4: u8) -> Instruction { return Instruction{mnemonic = .SDIV, operand_count = 4, length = 4, ops = {op_z_d(rz), op_reg(Register(REG_P | (u16(rz2) & 0xF))), op_z_d(rz3), op_z_d(rz4), {}}} } -emit_sdiv_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_sdiv_r_r_r(dst, src, src2)) } -emit_sdiv_zs_p_zs_zs :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append(instructions, inst_sdiv_zs_p_zs_zs(rz, rz2, rz3, rz4)) } -emit_sdiv_zd_p_zd_zd :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append(instructions, inst_sdiv_zd_p_zd_zd(rz, rz2, rz3, rz4)) } +emit_sdiv_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_sdiv_r_r_r(dst, src, src2)) } +emit_sdiv_zs_p_zs_zs :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append_elem(instructions, inst_sdiv_zs_p_zs_zs(rz, rz2, rz3, rz4)) } +emit_sdiv_zd_p_zd_zd :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append_elem(instructions, inst_sdiv_zd_p_zd_zd(rz, rz2, rz3, rz4)) } inst_madd_r_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register, src3: Register) -> Instruction { return inst_r_r_r_r(.MADD, dst, src, src2, src3) } -emit_madd_r_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, src3: Register) { append(instructions, inst_madd_r_r_r_r(dst, src, src2, src3)) } +emit_madd_r_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, src3: Register) { append_elem(instructions, inst_madd_r_r_r_r(dst, src, src2, src3)) } inst_msub_r_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register, src3: Register) -> Instruction { return inst_r_r_r_r(.MSUB, dst, src, src2, src3) } -emit_msub_r_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, src3: Register) { append(instructions, inst_msub_r_r_r_r(dst, src, src2, src3)) } +emit_msub_r_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, src3: Register) { append_elem(instructions, inst_msub_r_r_r_r(dst, src, src2, src3)) } inst_smaddl_r_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register, src3: Register) -> Instruction { return inst_r_r_r_r(.SMADDL, dst, src, src2, src3) } -emit_smaddl_r_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, src3: Register) { append(instructions, inst_smaddl_r_r_r_r(dst, src, src2, src3)) } +emit_smaddl_r_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, src3: Register) { append_elem(instructions, inst_smaddl_r_r_r_r(dst, src, src2, src3)) } inst_smsubl_r_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register, src3: Register) -> Instruction { return inst_r_r_r_r(.SMSUBL, dst, src, src2, src3) } -emit_smsubl_r_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, src3: Register) { append(instructions, inst_smsubl_r_r_r_r(dst, src, src2, src3)) } +emit_smsubl_r_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, src3: Register) { append_elem(instructions, inst_smsubl_r_r_r_r(dst, src, src2, src3)) } inst_umaddl_r_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register, src3: Register) -> Instruction { return inst_r_r_r_r(.UMADDL, dst, src, src2, src3) } -emit_umaddl_r_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, src3: Register) { append(instructions, inst_umaddl_r_r_r_r(dst, src, src2, src3)) } +emit_umaddl_r_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, src3: Register) { append_elem(instructions, inst_umaddl_r_r_r_r(dst, src, src2, src3)) } inst_umsubl_r_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register, src3: Register) -> Instruction { return inst_r_r_r_r(.UMSUBL, dst, src, src2, src3) } -emit_umsubl_r_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, src3: Register) { append(instructions, inst_umsubl_r_r_r_r(dst, src, src2, src3)) } +emit_umsubl_r_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, src3: Register) { append_elem(instructions, inst_umsubl_r_r_r_r(dst, src, src2, src3)) } inst_smulh_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return inst_r_r_r(.SMULH, dst, src, src2) } inst_smulh_zb_p_zb_zb :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8, rz4: u8) -> Instruction { return Instruction{mnemonic = .SMULH, operand_count = 4, length = 4, ops = {op_z_b(rz), op_reg(Register(REG_P | (u16(rz2) & 0xF))), op_z_b(rz3), op_z_b(rz4), {}}} } inst_smulh_zh_p_zh_zh :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8, rz4: u8) -> Instruction { return Instruction{mnemonic = .SMULH, operand_count = 4, length = 4, ops = {op_z_h(rz), op_reg(Register(REG_P | (u16(rz2) & 0xF))), op_z_h(rz3), op_z_h(rz4), {}}} } inst_smulh_zs_p_zs_zs :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8, rz4: u8) -> Instruction { return Instruction{mnemonic = .SMULH, operand_count = 4, length = 4, ops = {op_z_s(rz), op_reg(Register(REG_P | (u16(rz2) & 0xF))), op_z_s(rz3), op_z_s(rz4), {}}} } inst_smulh_zd_p_zd_zd :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8, rz4: u8) -> Instruction { return Instruction{mnemonic = .SMULH, operand_count = 4, length = 4, ops = {op_z_d(rz), op_reg(Register(REG_P | (u16(rz2) & 0xF))), op_z_d(rz3), op_z_d(rz4), {}}} } -emit_smulh_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_smulh_r_r_r(dst, src, src2)) } -emit_smulh_zb_p_zb_zb :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append(instructions, inst_smulh_zb_p_zb_zb(rz, rz2, rz3, rz4)) } -emit_smulh_zh_p_zh_zh :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append(instructions, inst_smulh_zh_p_zh_zh(rz, rz2, rz3, rz4)) } -emit_smulh_zs_p_zs_zs :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append(instructions, inst_smulh_zs_p_zs_zs(rz, rz2, rz3, rz4)) } -emit_smulh_zd_p_zd_zd :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append(instructions, inst_smulh_zd_p_zd_zd(rz, rz2, rz3, rz4)) } +emit_smulh_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_smulh_r_r_r(dst, src, src2)) } +emit_smulh_zb_p_zb_zb :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append_elem(instructions, inst_smulh_zb_p_zb_zb(rz, rz2, rz3, rz4)) } +emit_smulh_zh_p_zh_zh :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append_elem(instructions, inst_smulh_zh_p_zh_zh(rz, rz2, rz3, rz4)) } +emit_smulh_zs_p_zs_zs :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append_elem(instructions, inst_smulh_zs_p_zs_zs(rz, rz2, rz3, rz4)) } +emit_smulh_zd_p_zd_zd :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append_elem(instructions, inst_smulh_zd_p_zd_zd(rz, rz2, rz3, rz4)) } inst_umulh_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return inst_r_r_r(.UMULH, dst, src, src2) } inst_umulh_zb_p_zb_zb :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8, rz4: u8) -> Instruction { return Instruction{mnemonic = .UMULH, operand_count = 4, length = 4, ops = {op_z_b(rz), op_reg(Register(REG_P | (u16(rz2) & 0xF))), op_z_b(rz3), op_z_b(rz4), {}}} } inst_umulh_zh_p_zh_zh :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8, rz4: u8) -> Instruction { return Instruction{mnemonic = .UMULH, operand_count = 4, length = 4, ops = {op_z_h(rz), op_reg(Register(REG_P | (u16(rz2) & 0xF))), op_z_h(rz3), op_z_h(rz4), {}}} } inst_umulh_zs_p_zs_zs :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8, rz4: u8) -> Instruction { return Instruction{mnemonic = .UMULH, operand_count = 4, length = 4, ops = {op_z_s(rz), op_reg(Register(REG_P | (u16(rz2) & 0xF))), op_z_s(rz3), op_z_s(rz4), {}}} } inst_umulh_zd_p_zd_zd :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8, rz4: u8) -> Instruction { return Instruction{mnemonic = .UMULH, operand_count = 4, length = 4, ops = {op_z_d(rz), op_reg(Register(REG_P | (u16(rz2) & 0xF))), op_z_d(rz3), op_z_d(rz4), {}}} } -emit_umulh_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_umulh_r_r_r(dst, src, src2)) } -emit_umulh_zb_p_zb_zb :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append(instructions, inst_umulh_zb_p_zb_zb(rz, rz2, rz3, rz4)) } -emit_umulh_zh_p_zh_zh :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append(instructions, inst_umulh_zh_p_zh_zh(rz, rz2, rz3, rz4)) } -emit_umulh_zs_p_zs_zs :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append(instructions, inst_umulh_zs_p_zs_zs(rz, rz2, rz3, rz4)) } -emit_umulh_zd_p_zd_zd :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append(instructions, inst_umulh_zd_p_zd_zd(rz, rz2, rz3, rz4)) } +emit_umulh_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_umulh_r_r_r(dst, src, src2)) } +emit_umulh_zb_p_zb_zb :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append_elem(instructions, inst_umulh_zb_p_zb_zb(rz, rz2, rz3, rz4)) } +emit_umulh_zh_p_zh_zh :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append_elem(instructions, inst_umulh_zh_p_zh_zh(rz, rz2, rz3, rz4)) } +emit_umulh_zs_p_zs_zs :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append_elem(instructions, inst_umulh_zs_p_zs_zs(rz, rz2, rz3, rz4)) } +emit_umulh_zd_p_zd_zd :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append_elem(instructions, inst_umulh_zd_p_zd_zd(rz, rz2, rz3, rz4)) } inst_clz_r_r :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return inst_r_r(.CLZ, dst, src) } inst_clz_v8b_v8b :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .CLZ, operand_count = 2, length = 4, ops = {op_v_8b(dst), op_v_8b(src), {}, {}, {}}} } inst_clz_v16b_v16b :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .CLZ, operand_count = 2, length = 4, ops = {op_v_16b(dst), op_v_16b(src), {}, {}, {}}} } @@ -284,17 +284,17 @@ inst_clz_zb_p_zb :: #force_inline proc "contextless" (rz: u8, rz2: inst_clz_zh_p_zh :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8) -> Instruction { return Instruction{mnemonic = .CLZ, operand_count = 3, length = 4, ops = {op_z_h(rz), op_reg(Register(REG_P | (u16(rz2) & 0xF))), op_z_h(rz3), {}, {}}} } inst_clz_zs_p_zs :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8) -> Instruction { return Instruction{mnemonic = .CLZ, operand_count = 3, length = 4, ops = {op_z_s(rz), op_reg(Register(REG_P | (u16(rz2) & 0xF))), op_z_s(rz3), {}, {}}} } inst_clz_zd_p_zd :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8) -> Instruction { return Instruction{mnemonic = .CLZ, operand_count = 3, length = 4, ops = {op_z_d(rz), op_reg(Register(REG_P | (u16(rz2) & 0xF))), op_z_d(rz3), {}, {}}} } -emit_clz_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_clz_r_r(dst, src)) } -emit_clz_v8b_v8b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_clz_v8b_v8b(dst, src)) } -emit_clz_v16b_v16b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_clz_v16b_v16b(dst, src)) } -emit_clz_v4h_v4h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_clz_v4h_v4h(dst, src)) } -emit_clz_v8h_v8h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_clz_v8h_v8h(dst, src)) } -emit_clz_v2s_v2s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_clz_v2s_v2s(dst, src)) } -emit_clz_v4s_v4s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_clz_v4s_v4s(dst, src)) } -emit_clz_zb_p_zb :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append(instructions, inst_clz_zb_p_zb(rz, rz2, rz3)) } -emit_clz_zh_p_zh :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append(instructions, inst_clz_zh_p_zh(rz, rz2, rz3)) } -emit_clz_zs_p_zs :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append(instructions, inst_clz_zs_p_zs(rz, rz2, rz3)) } -emit_clz_zd_p_zd :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append(instructions, inst_clz_zd_p_zd(rz, rz2, rz3)) } +emit_clz_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_clz_r_r(dst, src)) } +emit_clz_v8b_v8b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_clz_v8b_v8b(dst, src)) } +emit_clz_v16b_v16b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_clz_v16b_v16b(dst, src)) } +emit_clz_v4h_v4h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_clz_v4h_v4h(dst, src)) } +emit_clz_v8h_v8h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_clz_v8h_v8h(dst, src)) } +emit_clz_v2s_v2s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_clz_v2s_v2s(dst, src)) } +emit_clz_v4s_v4s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_clz_v4s_v4s(dst, src)) } +emit_clz_zb_p_zb :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append_elem(instructions, inst_clz_zb_p_zb(rz, rz2, rz3)) } +emit_clz_zh_p_zh :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append_elem(instructions, inst_clz_zh_p_zh(rz, rz2, rz3)) } +emit_clz_zs_p_zs :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append_elem(instructions, inst_clz_zs_p_zs(rz, rz2, rz3)) } +emit_clz_zd_p_zd :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append_elem(instructions, inst_clz_zd_p_zd(rz, rz2, rz3)) } inst_cls_r_r :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return inst_r_r(.CLS, dst, src) } inst_cls_v8b_v8b :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .CLS, operand_count = 2, length = 4, ops = {op_v_8b(dst), op_v_8b(src), {}, {}, {}}} } inst_cls_v16b_v16b :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .CLS, operand_count = 2, length = 4, ops = {op_v_16b(dst), op_v_16b(src), {}, {}, {}}} } @@ -306,227 +306,227 @@ inst_cls_zb_p_zb :: #force_inline proc "contextless" (rz: u8, rz2: inst_cls_zh_p_zh :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8) -> Instruction { return Instruction{mnemonic = .CLS, operand_count = 3, length = 4, ops = {op_z_h(rz), op_reg(Register(REG_P | (u16(rz2) & 0xF))), op_z_h(rz3), {}, {}}} } inst_cls_zs_p_zs :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8) -> Instruction { return Instruction{mnemonic = .CLS, operand_count = 3, length = 4, ops = {op_z_s(rz), op_reg(Register(REG_P | (u16(rz2) & 0xF))), op_z_s(rz3), {}, {}}} } inst_cls_zd_p_zd :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8) -> Instruction { return Instruction{mnemonic = .CLS, operand_count = 3, length = 4, ops = {op_z_d(rz), op_reg(Register(REG_P | (u16(rz2) & 0xF))), op_z_d(rz3), {}, {}}} } -emit_cls_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_cls_r_r(dst, src)) } -emit_cls_v8b_v8b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_cls_v8b_v8b(dst, src)) } -emit_cls_v16b_v16b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_cls_v16b_v16b(dst, src)) } -emit_cls_v4h_v4h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_cls_v4h_v4h(dst, src)) } -emit_cls_v8h_v8h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_cls_v8h_v8h(dst, src)) } -emit_cls_v2s_v2s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_cls_v2s_v2s(dst, src)) } -emit_cls_v4s_v4s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_cls_v4s_v4s(dst, src)) } -emit_cls_zb_p_zb :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append(instructions, inst_cls_zb_p_zb(rz, rz2, rz3)) } -emit_cls_zh_p_zh :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append(instructions, inst_cls_zh_p_zh(rz, rz2, rz3)) } -emit_cls_zs_p_zs :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append(instructions, inst_cls_zs_p_zs(rz, rz2, rz3)) } -emit_cls_zd_p_zd :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append(instructions, inst_cls_zd_p_zd(rz, rz2, rz3)) } +emit_cls_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_cls_r_r(dst, src)) } +emit_cls_v8b_v8b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_cls_v8b_v8b(dst, src)) } +emit_cls_v16b_v16b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_cls_v16b_v16b(dst, src)) } +emit_cls_v4h_v4h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_cls_v4h_v4h(dst, src)) } +emit_cls_v8h_v8h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_cls_v8h_v8h(dst, src)) } +emit_cls_v2s_v2s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_cls_v2s_v2s(dst, src)) } +emit_cls_v4s_v4s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_cls_v4s_v4s(dst, src)) } +emit_cls_zb_p_zb :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append_elem(instructions, inst_cls_zb_p_zb(rz, rz2, rz3)) } +emit_cls_zh_p_zh :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append_elem(instructions, inst_cls_zh_p_zh(rz, rz2, rz3)) } +emit_cls_zs_p_zs :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append_elem(instructions, inst_cls_zs_p_zs(rz, rz2, rz3)) } +emit_cls_zd_p_zd :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append_elem(instructions, inst_cls_zd_p_zd(rz, rz2, rz3)) } inst_rbit_r_r :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return inst_r_r(.RBIT, dst, src) } inst_rbit_v8b_v8b :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .RBIT, operand_count = 2, length = 4, ops = {op_v_8b(dst), op_v_8b(src), {}, {}, {}}} } inst_rbit_v16b_v16b :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .RBIT, operand_count = 2, length = 4, ops = {op_v_16b(dst), op_v_16b(src), {}, {}, {}}} } -emit_rbit_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_rbit_r_r(dst, src)) } -emit_rbit_v8b_v8b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_rbit_v8b_v8b(dst, src)) } -emit_rbit_v16b_v16b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_rbit_v16b_v16b(dst, src)) } +emit_rbit_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_rbit_r_r(dst, src)) } +emit_rbit_v8b_v8b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_rbit_v8b_v8b(dst, src)) } +emit_rbit_v16b_v16b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_rbit_v16b_v16b(dst, src)) } inst_rev_r_r :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return inst_r_r(.REV, dst, src) } inst_rev_zb_zb :: #force_inline proc "contextless" (rz: u8, rz2: u8) -> Instruction { return Instruction{mnemonic = .REV, operand_count = 2, length = 4, ops = {op_z_b(rz), op_z_b(rz2), {}, {}, {}}} } inst_rev_zh_zh :: #force_inline proc "contextless" (rz: u8, rz2: u8) -> Instruction { return Instruction{mnemonic = .REV, operand_count = 2, length = 4, ops = {op_z_h(rz), op_z_h(rz2), {}, {}, {}}} } inst_rev_zs_zs :: #force_inline proc "contextless" (rz: u8, rz2: u8) -> Instruction { return Instruction{mnemonic = .REV, operand_count = 2, length = 4, ops = {op_z_s(rz), op_z_s(rz2), {}, {}, {}}} } inst_rev_zd_zd :: #force_inline proc "contextless" (rz: u8, rz2: u8) -> Instruction { return Instruction{mnemonic = .REV, operand_count = 2, length = 4, ops = {op_z_d(rz), op_z_d(rz2), {}, {}, {}}} } inst_rev_pb_pb :: #force_inline proc "contextless" (rz: u8, rz2: u8) -> Instruction { return Instruction{mnemonic = .REV, operand_count = 2, length = 4, ops = {op_reg(Register(REG_P | (u16(rz) & 0xF))), op_reg(Register(REG_P | (u16(rz2) & 0xF))), {}, {}, {}}} } -emit_rev_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_rev_r_r(dst, src)) } -emit_rev_zb_zb :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8) { append(instructions, inst_rev_zb_zb(rz, rz2)) } -emit_rev_zh_zh :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8) { append(instructions, inst_rev_zh_zh(rz, rz2)) } -emit_rev_zs_zs :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8) { append(instructions, inst_rev_zs_zs(rz, rz2)) } -emit_rev_zd_zd :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8) { append(instructions, inst_rev_zd_zd(rz, rz2)) } -emit_rev_pb_pb :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8) { append(instructions, inst_rev_pb_pb(rz, rz2)) } +emit_rev_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_rev_r_r(dst, src)) } +emit_rev_zb_zb :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8) { append_elem(instructions, inst_rev_zb_zb(rz, rz2)) } +emit_rev_zh_zh :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8) { append_elem(instructions, inst_rev_zh_zh(rz, rz2)) } +emit_rev_zs_zs :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8) { append_elem(instructions, inst_rev_zs_zs(rz, rz2)) } +emit_rev_zd_zd :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8) { append_elem(instructions, inst_rev_zd_zd(rz, rz2)) } +emit_rev_pb_pb :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8) { append_elem(instructions, inst_rev_pb_pb(rz, rz2)) } inst_rev16_r_r :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return inst_r_r(.REV16, dst, src) } inst_rev16_v8b_v8b :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .REV16, operand_count = 2, length = 4, ops = {op_v_8b(dst), op_v_8b(src), {}, {}, {}}} } inst_rev16_v16b_v16b :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .REV16, operand_count = 2, length = 4, ops = {op_v_16b(dst), op_v_16b(src), {}, {}, {}}} } -emit_rev16_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_rev16_r_r(dst, src)) } -emit_rev16_v8b_v8b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_rev16_v8b_v8b(dst, src)) } -emit_rev16_v16b_v16b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_rev16_v16b_v16b(dst, src)) } +emit_rev16_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_rev16_r_r(dst, src)) } +emit_rev16_v8b_v8b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_rev16_v8b_v8b(dst, src)) } +emit_rev16_v16b_v16b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_rev16_v16b_v16b(dst, src)) } inst_rev32_r_r :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return inst_r_r(.REV32, dst, src) } inst_rev32_v8b_v8b :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .REV32, operand_count = 2, length = 4, ops = {op_v_8b(dst), op_v_8b(src), {}, {}, {}}} } inst_rev32_v16b_v16b :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .REV32, operand_count = 2, length = 4, ops = {op_v_16b(dst), op_v_16b(src), {}, {}, {}}} } inst_rev32_v4h_v4h :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .REV32, operand_count = 2, length = 4, ops = {op_v_4h(dst), op_v_4h(src), {}, {}, {}}} } inst_rev32_v8h_v8h :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .REV32, operand_count = 2, length = 4, ops = {op_v_8h(dst), op_v_8h(src), {}, {}, {}}} } -emit_rev32_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_rev32_r_r(dst, src)) } -emit_rev32_v8b_v8b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_rev32_v8b_v8b(dst, src)) } -emit_rev32_v16b_v16b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_rev32_v16b_v16b(dst, src)) } -emit_rev32_v4h_v4h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_rev32_v4h_v4h(dst, src)) } -emit_rev32_v8h_v8h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_rev32_v8h_v8h(dst, src)) } +emit_rev32_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_rev32_r_r(dst, src)) } +emit_rev32_v8b_v8b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_rev32_v8b_v8b(dst, src)) } +emit_rev32_v16b_v16b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_rev32_v16b_v16b(dst, src)) } +emit_rev32_v4h_v4h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_rev32_v4h_v4h(dst, src)) } +emit_rev32_v8h_v8h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_rev32_v8h_v8h(dst, src)) } inst_csel_r_r_r_c :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register, cond: Cond) -> Instruction { return Instruction{mnemonic = .CSEL, operand_count = 4, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), op_cond(cond), {}}} } -emit_csel_r_r_r_c :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, cond: Cond) { append(instructions, inst_csel_r_r_r_c(dst, src, src2, cond)) } +emit_csel_r_r_r_c :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, cond: Cond) { append_elem(instructions, inst_csel_r_r_r_c(dst, src, src2, cond)) } inst_csinc_r_r_r_c :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register, cond: Cond) -> Instruction { return Instruction{mnemonic = .CSINC, operand_count = 4, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), op_cond(cond), {}}} } -emit_csinc_r_r_r_c :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, cond: Cond) { append(instructions, inst_csinc_r_r_r_c(dst, src, src2, cond)) } +emit_csinc_r_r_r_c :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, cond: Cond) { append_elem(instructions, inst_csinc_r_r_r_c(dst, src, src2, cond)) } inst_csinv_r_r_r_c :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register, cond: Cond) -> Instruction { return Instruction{mnemonic = .CSINV, operand_count = 4, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), op_cond(cond), {}}} } -emit_csinv_r_r_r_c :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, cond: Cond) { append(instructions, inst_csinv_r_r_r_c(dst, src, src2, cond)) } +emit_csinv_r_r_r_c :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, cond: Cond) { append_elem(instructions, inst_csinv_r_r_r_c(dst, src, src2, cond)) } inst_csneg_r_r_r_c :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register, cond: Cond) -> Instruction { return Instruction{mnemonic = .CSNEG, operand_count = 4, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), op_cond(cond), {}}} } -emit_csneg_r_r_r_c :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, cond: Cond) { append(instructions, inst_csneg_r_r_r_c(dst, src, src2, cond)) } +emit_csneg_r_r_r_c :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, cond: Cond) { append_elem(instructions, inst_csneg_r_r_r_c(dst, src, src2, cond)) } inst_ccmp_r_r_i_c :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64, cond: Cond) -> Instruction { return Instruction{mnemonic = .CCMP, operand_count = 4, length = 4, ops = {op_reg(dst), op_reg(src), op_imm(imm, 1), op_cond(cond), {}}} } inst_ccmp_r_i_i_c :: #force_inline proc "contextless" (dst: Register, imm: i64, imm2: i64, cond: Cond) -> Instruction { return Instruction{mnemonic = .CCMP, operand_count = 4, length = 4, ops = {op_reg(dst), op_imm(imm, 1), op_imm(imm2, 1), op_cond(cond), {}}} } -emit_ccmp_r_r_i_c :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64, cond: Cond) { append(instructions, inst_ccmp_r_r_i_c(dst, src, imm, cond)) } -emit_ccmp_r_i_i_c :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64, imm2: i64, cond: Cond) { append(instructions, inst_ccmp_r_i_i_c(dst, imm, imm2, cond)) } +emit_ccmp_r_r_i_c :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64, cond: Cond) { append_elem(instructions, inst_ccmp_r_r_i_c(dst, src, imm, cond)) } +emit_ccmp_r_i_i_c :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64, imm2: i64, cond: Cond) { append_elem(instructions, inst_ccmp_r_i_i_c(dst, imm, imm2, cond)) } inst_ccmn_r_r_i_c :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64, cond: Cond) -> Instruction { return Instruction{mnemonic = .CCMN, operand_count = 4, length = 4, ops = {op_reg(dst), op_reg(src), op_imm(imm, 1), op_cond(cond), {}}} } inst_ccmn_r_i_i_c :: #force_inline proc "contextless" (dst: Register, imm: i64, imm2: i64, cond: Cond) -> Instruction { return Instruction{mnemonic = .CCMN, operand_count = 4, length = 4, ops = {op_reg(dst), op_imm(imm, 1), op_imm(imm2, 1), op_cond(cond), {}}} } -emit_ccmn_r_r_i_c :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64, cond: Cond) { append(instructions, inst_ccmn_r_r_i_c(dst, src, imm, cond)) } -emit_ccmn_r_i_i_c :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64, imm2: i64, cond: Cond) { append(instructions, inst_ccmn_r_i_i_c(dst, imm, imm2, cond)) } +emit_ccmn_r_r_i_c :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64, cond: Cond) { append_elem(instructions, inst_ccmn_r_r_i_c(dst, src, imm, cond)) } +emit_ccmn_r_i_i_c :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64, imm2: i64, cond: Cond) { append_elem(instructions, inst_ccmn_r_i_i_c(dst, imm, imm2, cond)) } inst_cset_r_c :: #force_inline proc "contextless" (dst: Register, cond: Cond) -> Instruction { return Instruction{mnemonic = .CSET, operand_count = 2, length = 4, ops = {op_reg(dst), op_cond(cond), {}, {}, {}}} } -emit_cset_r_c :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, cond: Cond) { append(instructions, inst_cset_r_c(dst, cond)) } +emit_cset_r_c :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, cond: Cond) { append_elem(instructions, inst_cset_r_c(dst, cond)) } inst_csetm_r_c :: #force_inline proc "contextless" (dst: Register, cond: Cond) -> Instruction { return Instruction{mnemonic = .CSETM, operand_count = 2, length = 4, ops = {op_reg(dst), op_cond(cond), {}, {}, {}}} } -emit_csetm_r_c :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, cond: Cond) { append(instructions, inst_csetm_r_c(dst, cond)) } +emit_csetm_r_c :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, cond: Cond) { append_elem(instructions, inst_csetm_r_c(dst, cond)) } inst_cinc_r_r_c :: #force_inline proc "contextless" (dst: Register, src: Register, cond: Cond) -> Instruction { return Instruction{mnemonic = .CINC, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_cond(cond), {}, {}}} } -emit_cinc_r_r_c :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, cond: Cond) { append(instructions, inst_cinc_r_r_c(dst, src, cond)) } +emit_cinc_r_r_c :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, cond: Cond) { append_elem(instructions, inst_cinc_r_r_c(dst, src, cond)) } inst_cinv_r_r_c :: #force_inline proc "contextless" (dst: Register, src: Register, cond: Cond) -> Instruction { return Instruction{mnemonic = .CINV, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_cond(cond), {}, {}}} } -emit_cinv_r_r_c :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, cond: Cond) { append(instructions, inst_cinv_r_r_c(dst, src, cond)) } +emit_cinv_r_r_c :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, cond: Cond) { append_elem(instructions, inst_cinv_r_r_c(dst, src, cond)) } inst_cneg_r_r_c :: #force_inline proc "contextless" (dst: Register, src: Register, cond: Cond) -> Instruction { return Instruction{mnemonic = .CNEG, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_cond(cond), {}, {}}} } -emit_cneg_r_r_c :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, cond: Cond) { append(instructions, inst_cneg_r_r_c(dst, src, cond)) } +emit_cneg_r_r_c :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, cond: Cond) { append_elem(instructions, inst_cneg_r_r_c(dst, src, cond)) } inst_extr_r_r_r_i :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .EXTR, operand_count = 4, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), op_imm(imm, 1), {}}} } -emit_extr_r_r_r_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, imm: i64) { append(instructions, inst_extr_r_r_r_i(dst, src, src2, imm)) } +emit_extr_r_r_r_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, imm: i64) { append_elem(instructions, inst_extr_r_r_r_i(dst, src, src2, imm)) } inst_b_l :: #force_inline proc "contextless" (label: u32) -> Instruction { return inst_branch(.B, label) } -emit_b_l :: #force_inline proc(instructions: ^[dynamic]Instruction, label: u32) { append(instructions, inst_b_l(label)) } +emit_b_l :: #force_inline proc(instructions: ^[dynamic]Instruction, label: u32) { append_elem(instructions, inst_b_l(label)) } inst_bl_l :: #force_inline proc "contextless" (label: u32) -> Instruction { return inst_branch(.BL, label) } -emit_bl_l :: #force_inline proc(instructions: ^[dynamic]Instruction, label: u32) { append(instructions, inst_bl_l(label)) } +emit_bl_l :: #force_inline proc(instructions: ^[dynamic]Instruction, label: u32) { append_elem(instructions, inst_bl_l(label)) } inst_br_r :: #force_inline proc "contextless" (dst: Register) -> Instruction { return inst_r(.BR, dst) } -emit_br_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register) { append(instructions, inst_br_r(dst)) } +emit_br_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register) { append_elem(instructions, inst_br_r(dst)) } inst_blr_r :: #force_inline proc "contextless" (dst: Register) -> Instruction { return inst_r(.BLR, dst) } -emit_blr_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register) { append(instructions, inst_blr_r(dst)) } +emit_blr_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register) { append_elem(instructions, inst_blr_r(dst)) } inst_ret_r :: #force_inline proc "contextless" (dst: Register) -> Instruction { return inst_r(.RET, dst) } inst_ret_none :: #force_inline proc "contextless" () -> Instruction { return inst_none(.RET) } -emit_ret_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register) { append(instructions, inst_ret_r(dst)) } -emit_ret_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_ret_none()) } +emit_ret_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register) { append_elem(instructions, inst_ret_r(dst)) } +emit_ret_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_ret_none()) } inst_b_eq_l :: #force_inline proc "contextless" (label: u32) -> Instruction { return inst_branch(.B_EQ, label) } -emit_b_eq_l :: #force_inline proc(instructions: ^[dynamic]Instruction, label: u32) { append(instructions, inst_b_eq_l(label)) } +emit_b_eq_l :: #force_inline proc(instructions: ^[dynamic]Instruction, label: u32) { append_elem(instructions, inst_b_eq_l(label)) } inst_b_ne_l :: #force_inline proc "contextless" (label: u32) -> Instruction { return inst_branch(.B_NE, label) } -emit_b_ne_l :: #force_inline proc(instructions: ^[dynamic]Instruction, label: u32) { append(instructions, inst_b_ne_l(label)) } +emit_b_ne_l :: #force_inline proc(instructions: ^[dynamic]Instruction, label: u32) { append_elem(instructions, inst_b_ne_l(label)) } inst_b_cs_l :: #force_inline proc "contextless" (label: u32) -> Instruction { return inst_branch(.B_CS, label) } -emit_b_cs_l :: #force_inline proc(instructions: ^[dynamic]Instruction, label: u32) { append(instructions, inst_b_cs_l(label)) } +emit_b_cs_l :: #force_inline proc(instructions: ^[dynamic]Instruction, label: u32) { append_elem(instructions, inst_b_cs_l(label)) } inst_b_cc_l :: #force_inline proc "contextless" (label: u32) -> Instruction { return inst_branch(.B_CC, label) } -emit_b_cc_l :: #force_inline proc(instructions: ^[dynamic]Instruction, label: u32) { append(instructions, inst_b_cc_l(label)) } +emit_b_cc_l :: #force_inline proc(instructions: ^[dynamic]Instruction, label: u32) { append_elem(instructions, inst_b_cc_l(label)) } inst_b_mi_l :: #force_inline proc "contextless" (label: u32) -> Instruction { return inst_branch(.B_MI, label) } -emit_b_mi_l :: #force_inline proc(instructions: ^[dynamic]Instruction, label: u32) { append(instructions, inst_b_mi_l(label)) } +emit_b_mi_l :: #force_inline proc(instructions: ^[dynamic]Instruction, label: u32) { append_elem(instructions, inst_b_mi_l(label)) } inst_b_pl_l :: #force_inline proc "contextless" (label: u32) -> Instruction { return inst_branch(.B_PL, label) } -emit_b_pl_l :: #force_inline proc(instructions: ^[dynamic]Instruction, label: u32) { append(instructions, inst_b_pl_l(label)) } +emit_b_pl_l :: #force_inline proc(instructions: ^[dynamic]Instruction, label: u32) { append_elem(instructions, inst_b_pl_l(label)) } inst_b_vs_l :: #force_inline proc "contextless" (label: u32) -> Instruction { return inst_branch(.B_VS, label) } -emit_b_vs_l :: #force_inline proc(instructions: ^[dynamic]Instruction, label: u32) { append(instructions, inst_b_vs_l(label)) } +emit_b_vs_l :: #force_inline proc(instructions: ^[dynamic]Instruction, label: u32) { append_elem(instructions, inst_b_vs_l(label)) } inst_b_vc_l :: #force_inline proc "contextless" (label: u32) -> Instruction { return inst_branch(.B_VC, label) } -emit_b_vc_l :: #force_inline proc(instructions: ^[dynamic]Instruction, label: u32) { append(instructions, inst_b_vc_l(label)) } +emit_b_vc_l :: #force_inline proc(instructions: ^[dynamic]Instruction, label: u32) { append_elem(instructions, inst_b_vc_l(label)) } inst_b_hi_l :: #force_inline proc "contextless" (label: u32) -> Instruction { return inst_branch(.B_HI, label) } -emit_b_hi_l :: #force_inline proc(instructions: ^[dynamic]Instruction, label: u32) { append(instructions, inst_b_hi_l(label)) } +emit_b_hi_l :: #force_inline proc(instructions: ^[dynamic]Instruction, label: u32) { append_elem(instructions, inst_b_hi_l(label)) } inst_b_ls_l :: #force_inline proc "contextless" (label: u32) -> Instruction { return inst_branch(.B_LS, label) } -emit_b_ls_l :: #force_inline proc(instructions: ^[dynamic]Instruction, label: u32) { append(instructions, inst_b_ls_l(label)) } +emit_b_ls_l :: #force_inline proc(instructions: ^[dynamic]Instruction, label: u32) { append_elem(instructions, inst_b_ls_l(label)) } inst_b_ge_l :: #force_inline proc "contextless" (label: u32) -> Instruction { return inst_branch(.B_GE, label) } -emit_b_ge_l :: #force_inline proc(instructions: ^[dynamic]Instruction, label: u32) { append(instructions, inst_b_ge_l(label)) } +emit_b_ge_l :: #force_inline proc(instructions: ^[dynamic]Instruction, label: u32) { append_elem(instructions, inst_b_ge_l(label)) } inst_b_lt_l :: #force_inline proc "contextless" (label: u32) -> Instruction { return inst_branch(.B_LT, label) } -emit_b_lt_l :: #force_inline proc(instructions: ^[dynamic]Instruction, label: u32) { append(instructions, inst_b_lt_l(label)) } +emit_b_lt_l :: #force_inline proc(instructions: ^[dynamic]Instruction, label: u32) { append_elem(instructions, inst_b_lt_l(label)) } inst_b_gt_l :: #force_inline proc "contextless" (label: u32) -> Instruction { return inst_branch(.B_GT, label) } -emit_b_gt_l :: #force_inline proc(instructions: ^[dynamic]Instruction, label: u32) { append(instructions, inst_b_gt_l(label)) } +emit_b_gt_l :: #force_inline proc(instructions: ^[dynamic]Instruction, label: u32) { append_elem(instructions, inst_b_gt_l(label)) } inst_b_le_l :: #force_inline proc "contextless" (label: u32) -> Instruction { return inst_branch(.B_LE, label) } -emit_b_le_l :: #force_inline proc(instructions: ^[dynamic]Instruction, label: u32) { append(instructions, inst_b_le_l(label)) } +emit_b_le_l :: #force_inline proc(instructions: ^[dynamic]Instruction, label: u32) { append_elem(instructions, inst_b_le_l(label)) } inst_b_al_l :: #force_inline proc "contextless" (label: u32) -> Instruction { return inst_branch(.B_AL, label) } -emit_b_al_l :: #force_inline proc(instructions: ^[dynamic]Instruction, label: u32) { append(instructions, inst_b_al_l(label)) } +emit_b_al_l :: #force_inline proc(instructions: ^[dynamic]Instruction, label: u32) { append_elem(instructions, inst_b_al_l(label)) } inst_b_nv_l :: #force_inline proc "contextless" (label: u32) -> Instruction { return inst_branch(.B_NV, label) } -emit_b_nv_l :: #force_inline proc(instructions: ^[dynamic]Instruction, label: u32) { append(instructions, inst_b_nv_l(label)) } +emit_b_nv_l :: #force_inline proc(instructions: ^[dynamic]Instruction, label: u32) { append_elem(instructions, inst_b_nv_l(label)) } inst_cbz_r_l :: #force_inline proc "contextless" (dst: Register, label: u32) -> Instruction { return Instruction{mnemonic = .CBZ, operand_count = 2, length = 4, ops = {op_reg(dst), op_label(label, 4), {}, {}, {}}} } -emit_cbz_r_l :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, label: u32) { append(instructions, inst_cbz_r_l(dst, label)) } +emit_cbz_r_l :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, label: u32) { append_elem(instructions, inst_cbz_r_l(dst, label)) } inst_cbnz_r_l :: #force_inline proc "contextless" (dst: Register, label: u32) -> Instruction { return Instruction{mnemonic = .CBNZ, operand_count = 2, length = 4, ops = {op_reg(dst), op_label(label, 4), {}, {}, {}}} } -emit_cbnz_r_l :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, label: u32) { append(instructions, inst_cbnz_r_l(dst, label)) } +emit_cbnz_r_l :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, label: u32) { append_elem(instructions, inst_cbnz_r_l(dst, label)) } inst_tbz_r_i_l :: #force_inline proc "contextless" (dst: Register, imm: i64, label: u32) -> Instruction { return Instruction{mnemonic = .TBZ, operand_count = 3, length = 4, ops = {op_reg(dst), op_imm(imm, 1), op_label(label, 4), {}, {}}} } -emit_tbz_r_i_l :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64, label: u32) { append(instructions, inst_tbz_r_i_l(dst, imm, label)) } +emit_tbz_r_i_l :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64, label: u32) { append_elem(instructions, inst_tbz_r_i_l(dst, imm, label)) } inst_tbnz_r_i_l :: #force_inline proc "contextless" (dst: Register, imm: i64, label: u32) -> Instruction { return Instruction{mnemonic = .TBNZ, operand_count = 3, length = 4, ops = {op_reg(dst), op_imm(imm, 1), op_label(label, 4), {}, {}}} } -emit_tbnz_r_i_l :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64, label: u32) { append(instructions, inst_tbnz_r_i_l(dst, imm, label)) } +emit_tbnz_r_i_l :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64, label: u32) { append_elem(instructions, inst_tbnz_r_i_l(dst, imm, label)) } inst_ldr_r_m :: #force_inline proc "contextless" (dst: Register, mem: Memory) -> Instruction { return inst_ldst(.LDR, dst, mem) } inst_ldr_r_l :: #force_inline proc "contextless" (dst: Register, label: u32) -> Instruction { return Instruction{mnemonic = .LDR, operand_count = 2, length = 4, ops = {op_reg(dst), op_label(label, 4), {}, {}, {}}} } inst_ldr_z_m :: #force_inline proc "contextless" (rz: u8, mem: Memory) -> Instruction { return Instruction{mnemonic = .LDR, operand_count = 2, length = 4, ops = {op_reg(Register(REG_Z | (u16(rz) & 0x1F))), op_mem(mem), {}, {}, {}}} } inst_ldr_p_m :: #force_inline proc "contextless" (rz: u8, mem: Memory) -> Instruction { return Instruction{mnemonic = .LDR, operand_count = 2, length = 4, ops = {op_reg(Register(REG_P | (u16(rz) & 0xF))), op_mem(mem), {}, {}, {}}} } inst_ldr_i_m :: #force_inline proc "contextless" (imm: i64, mem: Memory) -> Instruction { return Instruction{mnemonic = .LDR, operand_count = 2, length = 4, ops = {op_imm(imm, 4), op_mem(mem), {}, {}, {}}} } -emit_ldr_r_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, mem: Memory) { append(instructions, inst_ldr_r_m(dst, mem)) } -emit_ldr_r_l :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, label: u32) { append(instructions, inst_ldr_r_l(dst, label)) } -emit_ldr_z_m :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, mem: Memory) { append(instructions, inst_ldr_z_m(rz, mem)) } -emit_ldr_p_m :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, mem: Memory) { append(instructions, inst_ldr_p_m(rz, mem)) } -emit_ldr_i_m :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, mem: Memory) { append(instructions, inst_ldr_i_m(imm, mem)) } +emit_ldr_r_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, mem: Memory) { append_elem(instructions, inst_ldr_r_m(dst, mem)) } +emit_ldr_r_l :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, label: u32) { append_elem(instructions, inst_ldr_r_l(dst, label)) } +emit_ldr_z_m :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, mem: Memory) { append_elem(instructions, inst_ldr_z_m(rz, mem)) } +emit_ldr_p_m :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, mem: Memory) { append_elem(instructions, inst_ldr_p_m(rz, mem)) } +emit_ldr_i_m :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, mem: Memory) { append_elem(instructions, inst_ldr_i_m(imm, mem)) } inst_str_r_m :: #force_inline proc "contextless" (dst: Register, mem: Memory) -> Instruction { return inst_ldst(.STR, dst, mem) } inst_str_z_m :: #force_inline proc "contextless" (rz: u8, mem: Memory) -> Instruction { return Instruction{mnemonic = .STR, operand_count = 2, length = 4, ops = {op_reg(Register(REG_Z | (u16(rz) & 0x1F))), op_mem(mem), {}, {}, {}}} } inst_str_p_m :: #force_inline proc "contextless" (rz: u8, mem: Memory) -> Instruction { return Instruction{mnemonic = .STR, operand_count = 2, length = 4, ops = {op_reg(Register(REG_P | (u16(rz) & 0xF))), op_mem(mem), {}, {}, {}}} } inst_str_i_m :: #force_inline proc "contextless" (imm: i64, mem: Memory) -> Instruction { return Instruction{mnemonic = .STR, operand_count = 2, length = 4, ops = {op_imm(imm, 4), op_mem(mem), {}, {}, {}}} } -emit_str_r_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, mem: Memory) { append(instructions, inst_str_r_m(dst, mem)) } -emit_str_z_m :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, mem: Memory) { append(instructions, inst_str_z_m(rz, mem)) } -emit_str_p_m :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, mem: Memory) { append(instructions, inst_str_p_m(rz, mem)) } -emit_str_i_m :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, mem: Memory) { append(instructions, inst_str_i_m(imm, mem)) } +emit_str_r_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, mem: Memory) { append_elem(instructions, inst_str_r_m(dst, mem)) } +emit_str_z_m :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, mem: Memory) { append_elem(instructions, inst_str_z_m(rz, mem)) } +emit_str_p_m :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, mem: Memory) { append_elem(instructions, inst_str_p_m(rz, mem)) } +emit_str_i_m :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, mem: Memory) { append_elem(instructions, inst_str_i_m(imm, mem)) } inst_ldrb_r_m :: #force_inline proc "contextless" (dst: Register, mem: Memory) -> Instruction { return inst_ldst(.LDRB, dst, mem) } -emit_ldrb_r_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, mem: Memory) { append(instructions, inst_ldrb_r_m(dst, mem)) } +emit_ldrb_r_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, mem: Memory) { append_elem(instructions, inst_ldrb_r_m(dst, mem)) } inst_strb_r_m :: #force_inline proc "contextless" (dst: Register, mem: Memory) -> Instruction { return inst_ldst(.STRB, dst, mem) } -emit_strb_r_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, mem: Memory) { append(instructions, inst_strb_r_m(dst, mem)) } +emit_strb_r_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, mem: Memory) { append_elem(instructions, inst_strb_r_m(dst, mem)) } inst_ldrsb_r_m :: #force_inline proc "contextless" (dst: Register, mem: Memory) -> Instruction { return inst_ldst(.LDRSB, dst, mem) } -emit_ldrsb_r_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, mem: Memory) { append(instructions, inst_ldrsb_r_m(dst, mem)) } +emit_ldrsb_r_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, mem: Memory) { append_elem(instructions, inst_ldrsb_r_m(dst, mem)) } inst_ldrh_r_m :: #force_inline proc "contextless" (dst: Register, mem: Memory) -> Instruction { return inst_ldst(.LDRH, dst, mem) } -emit_ldrh_r_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, mem: Memory) { append(instructions, inst_ldrh_r_m(dst, mem)) } +emit_ldrh_r_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, mem: Memory) { append_elem(instructions, inst_ldrh_r_m(dst, mem)) } inst_strh_r_m :: #force_inline proc "contextless" (dst: Register, mem: Memory) -> Instruction { return inst_ldst(.STRH, dst, mem) } -emit_strh_r_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, mem: Memory) { append(instructions, inst_strh_r_m(dst, mem)) } +emit_strh_r_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, mem: Memory) { append_elem(instructions, inst_strh_r_m(dst, mem)) } inst_ldrsh_r_m :: #force_inline proc "contextless" (dst: Register, mem: Memory) -> Instruction { return inst_ldst(.LDRSH, dst, mem) } -emit_ldrsh_r_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, mem: Memory) { append(instructions, inst_ldrsh_r_m(dst, mem)) } +emit_ldrsh_r_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, mem: Memory) { append_elem(instructions, inst_ldrsh_r_m(dst, mem)) } inst_ldrsw_r_m :: #force_inline proc "contextless" (dst: Register, mem: Memory) -> Instruction { return inst_ldst(.LDRSW, dst, mem) } -emit_ldrsw_r_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, mem: Memory) { append(instructions, inst_ldrsw_r_m(dst, mem)) } +emit_ldrsw_r_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, mem: Memory) { append_elem(instructions, inst_ldrsw_r_m(dst, mem)) } inst_ldp_r_r_m :: #force_inline proc "contextless" (dst: Register, src: Register, mem: Memory) -> Instruction { return inst_ldp_stp(.LDP, dst, src, mem) } -emit_ldp_r_r_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, mem: Memory) { append(instructions, inst_ldp_r_r_m(dst, src, mem)) } +emit_ldp_r_r_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, mem: Memory) { append_elem(instructions, inst_ldp_r_r_m(dst, src, mem)) } inst_stp_r_r_m :: #force_inline proc "contextless" (dst: Register, src: Register, mem: Memory) -> Instruction { return inst_ldp_stp(.STP, dst, src, mem) } -emit_stp_r_r_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, mem: Memory) { append(instructions, inst_stp_r_r_m(dst, src, mem)) } +emit_stp_r_r_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, mem: Memory) { append_elem(instructions, inst_stp_r_r_m(dst, src, mem)) } inst_ldpsw_r_r_m :: #force_inline proc "contextless" (dst: Register, src: Register, mem: Memory) -> Instruction { return inst_ldp_stp(.LDPSW, dst, src, mem) } -emit_ldpsw_r_r_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, mem: Memory) { append(instructions, inst_ldpsw_r_r_m(dst, src, mem)) } +emit_ldpsw_r_r_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, mem: Memory) { append_elem(instructions, inst_ldpsw_r_r_m(dst, src, mem)) } inst_ldar_r_m :: #force_inline proc "contextless" (dst: Register, mem: Memory) -> Instruction { return inst_ldst(.LDAR, dst, mem) } -emit_ldar_r_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, mem: Memory) { append(instructions, inst_ldar_r_m(dst, mem)) } +emit_ldar_r_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, mem: Memory) { append_elem(instructions, inst_ldar_r_m(dst, mem)) } inst_stlr_r_m :: #force_inline proc "contextless" (dst: Register, mem: Memory) -> Instruction { return inst_ldst(.STLR, dst, mem) } -emit_stlr_r_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, mem: Memory) { append(instructions, inst_stlr_r_m(dst, mem)) } +emit_stlr_r_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, mem: Memory) { append_elem(instructions, inst_stlr_r_m(dst, mem)) } inst_ldarb_r_m :: #force_inline proc "contextless" (dst: Register, mem: Memory) -> Instruction { return inst_ldst(.LDARB, dst, mem) } -emit_ldarb_r_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, mem: Memory) { append(instructions, inst_ldarb_r_m(dst, mem)) } +emit_ldarb_r_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, mem: Memory) { append_elem(instructions, inst_ldarb_r_m(dst, mem)) } inst_stlrb_r_m :: #force_inline proc "contextless" (dst: Register, mem: Memory) -> Instruction { return inst_ldst(.STLRB, dst, mem) } -emit_stlrb_r_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, mem: Memory) { append(instructions, inst_stlrb_r_m(dst, mem)) } +emit_stlrb_r_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, mem: Memory) { append_elem(instructions, inst_stlrb_r_m(dst, mem)) } inst_ldarh_r_m :: #force_inline proc "contextless" (dst: Register, mem: Memory) -> Instruction { return inst_ldst(.LDARH, dst, mem) } -emit_ldarh_r_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, mem: Memory) { append(instructions, inst_ldarh_r_m(dst, mem)) } +emit_ldarh_r_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, mem: Memory) { append_elem(instructions, inst_ldarh_r_m(dst, mem)) } inst_stlrh_r_m :: #force_inline proc "contextless" (dst: Register, mem: Memory) -> Instruction { return inst_ldst(.STLRH, dst, mem) } -emit_stlrh_r_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, mem: Memory) { append(instructions, inst_stlrh_r_m(dst, mem)) } +emit_stlrh_r_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, mem: Memory) { append_elem(instructions, inst_stlrh_r_m(dst, mem)) } inst_ldxr_r_m :: #force_inline proc "contextless" (dst: Register, mem: Memory) -> Instruction { return inst_ldst(.LDXR, dst, mem) } -emit_ldxr_r_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, mem: Memory) { append(instructions, inst_ldxr_r_m(dst, mem)) } +emit_ldxr_r_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, mem: Memory) { append_elem(instructions, inst_ldxr_r_m(dst, mem)) } inst_stxr_r_r_m :: #force_inline proc "contextless" (dst: Register, src: Register, mem: Memory) -> Instruction { return inst_ldp_stp(.STXR, dst, src, mem) } -emit_stxr_r_r_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, mem: Memory) { append(instructions, inst_stxr_r_r_m(dst, src, mem)) } +emit_stxr_r_r_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, mem: Memory) { append_elem(instructions, inst_stxr_r_r_m(dst, src, mem)) } inst_ldaxr_r_m :: #force_inline proc "contextless" (dst: Register, mem: Memory) -> Instruction { return inst_ldst(.LDAXR, dst, mem) } -emit_ldaxr_r_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, mem: Memory) { append(instructions, inst_ldaxr_r_m(dst, mem)) } +emit_ldaxr_r_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, mem: Memory) { append_elem(instructions, inst_ldaxr_r_m(dst, mem)) } inst_stlxr_r_r_m :: #force_inline proc "contextless" (dst: Register, src: Register, mem: Memory) -> Instruction { return inst_ldp_stp(.STLXR, dst, src, mem) } -emit_stlxr_r_r_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, mem: Memory) { append(instructions, inst_stlxr_r_r_m(dst, src, mem)) } +emit_stlxr_r_r_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, mem: Memory) { append_elem(instructions, inst_stlxr_r_r_m(dst, src, mem)) } inst_nop_none :: #force_inline proc "contextless" () -> Instruction { return inst_none(.NOP) } -emit_nop_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_nop_none()) } +emit_nop_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_nop_none()) } inst_yield_none :: #force_inline proc "contextless" () -> Instruction { return inst_none(.YIELD) } -emit_yield_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_yield_none()) } +emit_yield_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_yield_none()) } inst_wfe_none :: #force_inline proc "contextless" () -> Instruction { return inst_none(.WFE) } -emit_wfe_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_wfe_none()) } +emit_wfe_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_wfe_none()) } inst_wfi_none :: #force_inline proc "contextless" () -> Instruction { return inst_none(.WFI) } -emit_wfi_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_wfi_none()) } +emit_wfi_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_wfi_none()) } inst_sev_none :: #force_inline proc "contextless" () -> Instruction { return inst_none(.SEV) } -emit_sev_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_sev_none()) } +emit_sev_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_sev_none()) } inst_sevl_none :: #force_inline proc "contextless" () -> Instruction { return inst_none(.SEVL) } -emit_sevl_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_sevl_none()) } +emit_sevl_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_sevl_none()) } inst_hint_i :: #force_inline proc "contextless" (imm: i64) -> Instruction { return Instruction{mnemonic = .HINT, operand_count = 1, length = 4, ops = {op_imm(imm, 1), {}, {}, {}, {}}} } -emit_hint_i :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64) { append(instructions, inst_hint_i(imm)) } +emit_hint_i :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64) { append_elem(instructions, inst_hint_i(imm)) } inst_mrs_r_s :: #force_inline proc "contextless" (dst: Register, sysreg: Register) -> Instruction { return Instruction{mnemonic = .MRS, operand_count = 2, length = 4, ops = {op_reg(dst), op_sysreg(sysreg), {}, {}, {}}} } -emit_mrs_r_s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, sysreg: Register) { append(instructions, inst_mrs_r_s(dst, sysreg)) } +emit_mrs_r_s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, sysreg: Register) { append_elem(instructions, inst_mrs_r_s(dst, sysreg)) } inst_msr_i_i :: #force_inline proc "contextless" (imm: i64, imm2: i64) -> Instruction { return Instruction{mnemonic = .MSR, operand_count = 2, length = 4, ops = {op_imm(imm, 4), op_imm(imm2, 1), {}, {}, {}}} } inst_msr_s_r :: #force_inline proc "contextless" (sysreg: Register, src: Register) -> Instruction { return Instruction{mnemonic = .MSR, operand_count = 2, length = 4, ops = {op_sysreg(sysreg), op_reg(src), {}, {}, {}}} } -emit_msr_i_i :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, imm2: i64) { append(instructions, inst_msr_i_i(imm, imm2)) } -emit_msr_s_r :: #force_inline proc(instructions: ^[dynamic]Instruction, sysreg: Register, src: Register) { append(instructions, inst_msr_s_r(sysreg, src)) } +emit_msr_i_i :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, imm2: i64) { append_elem(instructions, inst_msr_i_i(imm, imm2)) } +emit_msr_s_r :: #force_inline proc(instructions: ^[dynamic]Instruction, sysreg: Register, src: Register) { append_elem(instructions, inst_msr_s_r(sysreg, src)) } inst_isb_i :: #force_inline proc "contextless" (imm: i64) -> Instruction { return Instruction{mnemonic = .ISB, operand_count = 1, length = 4, ops = {op_imm(imm, 1), {}, {}, {}, {}}} } -emit_isb_i :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64) { append(instructions, inst_isb_i(imm)) } +emit_isb_i :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64) { append_elem(instructions, inst_isb_i(imm)) } inst_dsb_i :: #force_inline proc "contextless" (imm: i64) -> Instruction { return Instruction{mnemonic = .DSB, operand_count = 1, length = 4, ops = {op_imm(imm, 1), {}, {}, {}, {}}} } -emit_dsb_i :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64) { append(instructions, inst_dsb_i(imm)) } +emit_dsb_i :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64) { append_elem(instructions, inst_dsb_i(imm)) } inst_dmb_i :: #force_inline proc "contextless" (imm: i64) -> Instruction { return Instruction{mnemonic = .DMB, operand_count = 1, length = 4, ops = {op_imm(imm, 1), {}, {}, {}, {}}} } -emit_dmb_i :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64) { append(instructions, inst_dmb_i(imm)) } +emit_dmb_i :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64) { append_elem(instructions, inst_dmb_i(imm)) } inst_svc_i :: #force_inline proc "contextless" (imm: i64) -> Instruction { return Instruction{mnemonic = .SVC, operand_count = 1, length = 4, ops = {op_imm(imm, 2), {}, {}, {}, {}}} } -emit_svc_i :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64) { append(instructions, inst_svc_i(imm)) } +emit_svc_i :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64) { append_elem(instructions, inst_svc_i(imm)) } inst_hvc_i :: #force_inline proc "contextless" (imm: i64) -> Instruction { return Instruction{mnemonic = .HVC, operand_count = 1, length = 4, ops = {op_imm(imm, 2), {}, {}, {}, {}}} } -emit_hvc_i :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64) { append(instructions, inst_hvc_i(imm)) } +emit_hvc_i :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64) { append_elem(instructions, inst_hvc_i(imm)) } inst_smc_i :: #force_inline proc "contextless" (imm: i64) -> Instruction { return Instruction{mnemonic = .SMC, operand_count = 1, length = 4, ops = {op_imm(imm, 2), {}, {}, {}, {}}} } -emit_smc_i :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64) { append(instructions, inst_smc_i(imm)) } +emit_smc_i :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64) { append_elem(instructions, inst_smc_i(imm)) } inst_brk_i :: #force_inline proc "contextless" (imm: i64) -> Instruction { return Instruction{mnemonic = .BRK, operand_count = 1, length = 4, ops = {op_imm(imm, 2), {}, {}, {}, {}}} } -emit_brk_i :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64) { append(instructions, inst_brk_i(imm)) } +emit_brk_i :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64) { append_elem(instructions, inst_brk_i(imm)) } inst_hlt_i :: #force_inline proc "contextless" (imm: i64) -> Instruction { return Instruction{mnemonic = .HLT, operand_count = 1, length = 4, ops = {op_imm(imm, 2), {}, {}, {}, {}}} } -emit_hlt_i :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64) { append(instructions, inst_hlt_i(imm)) } +emit_hlt_i :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64) { append_elem(instructions, inst_hlt_i(imm)) } inst_eret_none :: #force_inline proc "contextless" () -> Instruction { return inst_none(.ERET) } -emit_eret_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_eret_none()) } +emit_eret_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_eret_none()) } inst_fmov_r_r :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return inst_r_r(.FMOV, dst, src) } inst_fmov_r_i :: #force_inline proc "contextless" (dst: Register, imm: i64) -> Instruction { return inst_r_i(.FMOV, dst, imm) } inst_fmov_v2s_i :: #force_inline proc "contextless" (dst: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .FMOV, operand_count = 2, length = 4, ops = {op_v_2s(dst), op_imm(imm, 1), {}, {}, {}}} } @@ -534,13 +534,17 @@ inst_fmov_v4s_i :: #force_inline proc "contextless" (dst: Register inst_fmov_v2d_i :: #force_inline proc "contextless" (dst: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .FMOV, operand_count = 2, length = 4, ops = {op_v_2d(dst), op_imm(imm, 1), {}, {}, {}}} } inst_fmov_v4h_i :: #force_inline proc "contextless" (dst: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .FMOV, operand_count = 2, length = 4, ops = {op_v_4h(dst), op_imm(imm, 1), {}, {}, {}}} } inst_fmov_v8h_i :: #force_inline proc "contextless" (dst: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .FMOV, operand_count = 2, length = 4, ops = {op_v_8h(dst), op_imm(imm, 1), {}, {}, {}}} } -emit_fmov_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_fmov_r_r(dst, src)) } -emit_fmov_r_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64) { append(instructions, inst_fmov_r_i(dst, imm)) } -emit_fmov_v2s_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64) { append(instructions, inst_fmov_v2s_i(dst, imm)) } -emit_fmov_v4s_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64) { append(instructions, inst_fmov_v4s_i(dst, imm)) } -emit_fmov_v2d_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64) { append(instructions, inst_fmov_v2d_i(dst, imm)) } -emit_fmov_v4h_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64) { append(instructions, inst_fmov_v4h_i(dst, imm)) } -emit_fmov_v8h_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64) { append(instructions, inst_fmov_v8h_i(dst, imm)) } +inst_fmov_r_ved :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .FMOV, operand_count = 2, length = 4, ops = {op_reg(dst), op_v_elem_d(src), {}, {}, {}}} } +inst_fmov_ved_r :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .FMOV, operand_count = 2, length = 4, ops = {op_v_elem_d(dst), op_reg(src), {}, {}, {}}} } +emit_fmov_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_fmov_r_r(dst, src)) } +emit_fmov_r_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64) { append_elem(instructions, inst_fmov_r_i(dst, imm)) } +emit_fmov_v2s_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64) { append_elem(instructions, inst_fmov_v2s_i(dst, imm)) } +emit_fmov_v4s_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64) { append_elem(instructions, inst_fmov_v4s_i(dst, imm)) } +emit_fmov_v2d_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64) { append_elem(instructions, inst_fmov_v2d_i(dst, imm)) } +emit_fmov_v4h_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64) { append_elem(instructions, inst_fmov_v4h_i(dst, imm)) } +emit_fmov_v8h_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64) { append_elem(instructions, inst_fmov_v8h_i(dst, imm)) } +emit_fmov_r_ved :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_fmov_r_ved(dst, src)) } +emit_fmov_ved_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_fmov_ved_r(dst, src)) } inst_fabs_r_r :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return inst_r_r(.FABS, dst, src) } inst_fabs_v2s_v2s :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .FABS, operand_count = 2, length = 4, ops = {op_v_2s(dst), op_v_2s(src), {}, {}, {}}} } inst_fabs_v4s_v4s :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .FABS, operand_count = 2, length = 4, ops = {op_v_4s(dst), op_v_4s(src), {}, {}, {}}} } @@ -550,15 +554,15 @@ inst_fabs_v8h_v8h :: #force_inline proc "contextless" (dst: Register inst_fabs_zh_p_zh :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8) -> Instruction { return Instruction{mnemonic = .FABS, operand_count = 3, length = 4, ops = {op_z_h(rz), op_reg(Register(REG_P | (u16(rz2) & 0xF))), op_z_h(rz3), {}, {}}} } inst_fabs_zs_p_zs :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8) -> Instruction { return Instruction{mnemonic = .FABS, operand_count = 3, length = 4, ops = {op_z_s(rz), op_reg(Register(REG_P | (u16(rz2) & 0xF))), op_z_s(rz3), {}, {}}} } inst_fabs_zd_p_zd :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8) -> Instruction { return Instruction{mnemonic = .FABS, operand_count = 3, length = 4, ops = {op_z_d(rz), op_reg(Register(REG_P | (u16(rz2) & 0xF))), op_z_d(rz3), {}, {}}} } -emit_fabs_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_fabs_r_r(dst, src)) } -emit_fabs_v2s_v2s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_fabs_v2s_v2s(dst, src)) } -emit_fabs_v4s_v4s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_fabs_v4s_v4s(dst, src)) } -emit_fabs_v2d_v2d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_fabs_v2d_v2d(dst, src)) } -emit_fabs_v4h_v4h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_fabs_v4h_v4h(dst, src)) } -emit_fabs_v8h_v8h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_fabs_v8h_v8h(dst, src)) } -emit_fabs_zh_p_zh :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append(instructions, inst_fabs_zh_p_zh(rz, rz2, rz3)) } -emit_fabs_zs_p_zs :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append(instructions, inst_fabs_zs_p_zs(rz, rz2, rz3)) } -emit_fabs_zd_p_zd :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append(instructions, inst_fabs_zd_p_zd(rz, rz2, rz3)) } +emit_fabs_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_fabs_r_r(dst, src)) } +emit_fabs_v2s_v2s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_fabs_v2s_v2s(dst, src)) } +emit_fabs_v4s_v4s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_fabs_v4s_v4s(dst, src)) } +emit_fabs_v2d_v2d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_fabs_v2d_v2d(dst, src)) } +emit_fabs_v4h_v4h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_fabs_v4h_v4h(dst, src)) } +emit_fabs_v8h_v8h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_fabs_v8h_v8h(dst, src)) } +emit_fabs_zh_p_zh :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append_elem(instructions, inst_fabs_zh_p_zh(rz, rz2, rz3)) } +emit_fabs_zs_p_zs :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append_elem(instructions, inst_fabs_zs_p_zs(rz, rz2, rz3)) } +emit_fabs_zd_p_zd :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append_elem(instructions, inst_fabs_zd_p_zd(rz, rz2, rz3)) } inst_fneg_r_r :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return inst_r_r(.FNEG, dst, src) } inst_fneg_v2s_v2s :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .FNEG, operand_count = 2, length = 4, ops = {op_v_2s(dst), op_v_2s(src), {}, {}, {}}} } inst_fneg_v4s_v4s :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .FNEG, operand_count = 2, length = 4, ops = {op_v_4s(dst), op_v_4s(src), {}, {}, {}}} } @@ -568,15 +572,15 @@ inst_fneg_v8h_v8h :: #force_inline proc "contextless" (dst: Register inst_fneg_zh_p_zh :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8) -> Instruction { return Instruction{mnemonic = .FNEG, operand_count = 3, length = 4, ops = {op_z_h(rz), op_reg(Register(REG_P | (u16(rz2) & 0xF))), op_z_h(rz3), {}, {}}} } inst_fneg_zs_p_zs :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8) -> Instruction { return Instruction{mnemonic = .FNEG, operand_count = 3, length = 4, ops = {op_z_s(rz), op_reg(Register(REG_P | (u16(rz2) & 0xF))), op_z_s(rz3), {}, {}}} } inst_fneg_zd_p_zd :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8) -> Instruction { return Instruction{mnemonic = .FNEG, operand_count = 3, length = 4, ops = {op_z_d(rz), op_reg(Register(REG_P | (u16(rz2) & 0xF))), op_z_d(rz3), {}, {}}} } -emit_fneg_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_fneg_r_r(dst, src)) } -emit_fneg_v2s_v2s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_fneg_v2s_v2s(dst, src)) } -emit_fneg_v4s_v4s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_fneg_v4s_v4s(dst, src)) } -emit_fneg_v2d_v2d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_fneg_v2d_v2d(dst, src)) } -emit_fneg_v4h_v4h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_fneg_v4h_v4h(dst, src)) } -emit_fneg_v8h_v8h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_fneg_v8h_v8h(dst, src)) } -emit_fneg_zh_p_zh :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append(instructions, inst_fneg_zh_p_zh(rz, rz2, rz3)) } -emit_fneg_zs_p_zs :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append(instructions, inst_fneg_zs_p_zs(rz, rz2, rz3)) } -emit_fneg_zd_p_zd :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append(instructions, inst_fneg_zd_p_zd(rz, rz2, rz3)) } +emit_fneg_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_fneg_r_r(dst, src)) } +emit_fneg_v2s_v2s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_fneg_v2s_v2s(dst, src)) } +emit_fneg_v4s_v4s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_fneg_v4s_v4s(dst, src)) } +emit_fneg_v2d_v2d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_fneg_v2d_v2d(dst, src)) } +emit_fneg_v4h_v4h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_fneg_v4h_v4h(dst, src)) } +emit_fneg_v8h_v8h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_fneg_v8h_v8h(dst, src)) } +emit_fneg_zh_p_zh :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append_elem(instructions, inst_fneg_zh_p_zh(rz, rz2, rz3)) } +emit_fneg_zs_p_zs :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append_elem(instructions, inst_fneg_zs_p_zs(rz, rz2, rz3)) } +emit_fneg_zd_p_zd :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append_elem(instructions, inst_fneg_zd_p_zd(rz, rz2, rz3)) } inst_fsqrt_r_r :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return inst_r_r(.FSQRT, dst, src) } inst_fsqrt_v2s_v2s :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .FSQRT, operand_count = 2, length = 4, ops = {op_v_2s(dst), op_v_2s(src), {}, {}, {}}} } inst_fsqrt_v4s_v4s :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .FSQRT, operand_count = 2, length = 4, ops = {op_v_4s(dst), op_v_4s(src), {}, {}, {}}} } @@ -586,15 +590,15 @@ inst_fsqrt_v8h_v8h :: #force_inline proc "contextless" (dst: Register inst_fsqrt_zh_p_zh :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8) -> Instruction { return Instruction{mnemonic = .FSQRT, operand_count = 3, length = 4, ops = {op_z_h(rz), op_reg(Register(REG_P | (u16(rz2) & 0xF))), op_z_h(rz3), {}, {}}} } inst_fsqrt_zs_p_zs :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8) -> Instruction { return Instruction{mnemonic = .FSQRT, operand_count = 3, length = 4, ops = {op_z_s(rz), op_reg(Register(REG_P | (u16(rz2) & 0xF))), op_z_s(rz3), {}, {}}} } inst_fsqrt_zd_p_zd :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8) -> Instruction { return Instruction{mnemonic = .FSQRT, operand_count = 3, length = 4, ops = {op_z_d(rz), op_reg(Register(REG_P | (u16(rz2) & 0xF))), op_z_d(rz3), {}, {}}} } -emit_fsqrt_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_fsqrt_r_r(dst, src)) } -emit_fsqrt_v2s_v2s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_fsqrt_v2s_v2s(dst, src)) } -emit_fsqrt_v4s_v4s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_fsqrt_v4s_v4s(dst, src)) } -emit_fsqrt_v2d_v2d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_fsqrt_v2d_v2d(dst, src)) } -emit_fsqrt_v4h_v4h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_fsqrt_v4h_v4h(dst, src)) } -emit_fsqrt_v8h_v8h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_fsqrt_v8h_v8h(dst, src)) } -emit_fsqrt_zh_p_zh :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append(instructions, inst_fsqrt_zh_p_zh(rz, rz2, rz3)) } -emit_fsqrt_zs_p_zs :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append(instructions, inst_fsqrt_zs_p_zs(rz, rz2, rz3)) } -emit_fsqrt_zd_p_zd :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append(instructions, inst_fsqrt_zd_p_zd(rz, rz2, rz3)) } +emit_fsqrt_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_fsqrt_r_r(dst, src)) } +emit_fsqrt_v2s_v2s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_fsqrt_v2s_v2s(dst, src)) } +emit_fsqrt_v4s_v4s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_fsqrt_v4s_v4s(dst, src)) } +emit_fsqrt_v2d_v2d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_fsqrt_v2d_v2d(dst, src)) } +emit_fsqrt_v4h_v4h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_fsqrt_v4h_v4h(dst, src)) } +emit_fsqrt_v8h_v8h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_fsqrt_v8h_v8h(dst, src)) } +emit_fsqrt_zh_p_zh :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append_elem(instructions, inst_fsqrt_zh_p_zh(rz, rz2, rz3)) } +emit_fsqrt_zs_p_zs :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append_elem(instructions, inst_fsqrt_zs_p_zs(rz, rz2, rz3)) } +emit_fsqrt_zd_p_zd :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append_elem(instructions, inst_fsqrt_zd_p_zd(rz, rz2, rz3)) } inst_fadd_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return inst_r_r_r(.FADD, dst, src, src2) } inst_fadd_v2s_v2s_v2s :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .FADD, operand_count = 3, length = 4, ops = {op_v_2s(dst), op_v_2s(src), op_v_2s(src2), {}, {}}} } inst_fadd_v4s_v4s_v4s :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .FADD, operand_count = 3, length = 4, ops = {op_v_4s(dst), op_v_4s(src), op_v_4s(src2), {}, {}}} } @@ -605,16 +609,16 @@ inst_fadd_zd_zd_zd :: #force_inline proc "contextless" (rz: u8, rz2: inst_fadd_zh_p_zh_zh :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8, rz4: u8) -> Instruction { return Instruction{mnemonic = .FADD, operand_count = 4, length = 4, ops = {op_z_h(rz), op_reg(Register(REG_P | (u16(rz2) & 0xF))), op_z_h(rz3), op_z_h(rz4), {}}} } inst_fadd_zs_p_zs_zs :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8, rz4: u8) -> Instruction { return Instruction{mnemonic = .FADD, operand_count = 4, length = 4, ops = {op_z_s(rz), op_reg(Register(REG_P | (u16(rz2) & 0xF))), op_z_s(rz3), op_z_s(rz4), {}}} } inst_fadd_zd_p_zd_zd :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8, rz4: u8) -> Instruction { return Instruction{mnemonic = .FADD, operand_count = 4, length = 4, ops = {op_z_d(rz), op_reg(Register(REG_P | (u16(rz2) & 0xF))), op_z_d(rz3), op_z_d(rz4), {}}} } -emit_fadd_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_fadd_r_r_r(dst, src, src2)) } -emit_fadd_v2s_v2s_v2s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_fadd_v2s_v2s_v2s(dst, src, src2)) } -emit_fadd_v4s_v4s_v4s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_fadd_v4s_v4s_v4s(dst, src, src2)) } -emit_fadd_v2d_v2d_v2d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_fadd_v2d_v2d_v2d(dst, src, src2)) } -emit_fadd_zh_zh_zh :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append(instructions, inst_fadd_zh_zh_zh(rz, rz2, rz3)) } -emit_fadd_zs_zs_zs :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append(instructions, inst_fadd_zs_zs_zs(rz, rz2, rz3)) } -emit_fadd_zd_zd_zd :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append(instructions, inst_fadd_zd_zd_zd(rz, rz2, rz3)) } -emit_fadd_zh_p_zh_zh :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append(instructions, inst_fadd_zh_p_zh_zh(rz, rz2, rz3, rz4)) } -emit_fadd_zs_p_zs_zs :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append(instructions, inst_fadd_zs_p_zs_zs(rz, rz2, rz3, rz4)) } -emit_fadd_zd_p_zd_zd :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append(instructions, inst_fadd_zd_p_zd_zd(rz, rz2, rz3, rz4)) } +emit_fadd_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_fadd_r_r_r(dst, src, src2)) } +emit_fadd_v2s_v2s_v2s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_fadd_v2s_v2s_v2s(dst, src, src2)) } +emit_fadd_v4s_v4s_v4s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_fadd_v4s_v4s_v4s(dst, src, src2)) } +emit_fadd_v2d_v2d_v2d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_fadd_v2d_v2d_v2d(dst, src, src2)) } +emit_fadd_zh_zh_zh :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append_elem(instructions, inst_fadd_zh_zh_zh(rz, rz2, rz3)) } +emit_fadd_zs_zs_zs :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append_elem(instructions, inst_fadd_zs_zs_zs(rz, rz2, rz3)) } +emit_fadd_zd_zd_zd :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append_elem(instructions, inst_fadd_zd_zd_zd(rz, rz2, rz3)) } +emit_fadd_zh_p_zh_zh :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append_elem(instructions, inst_fadd_zh_p_zh_zh(rz, rz2, rz3, rz4)) } +emit_fadd_zs_p_zs_zs :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append_elem(instructions, inst_fadd_zs_p_zs_zs(rz, rz2, rz3, rz4)) } +emit_fadd_zd_p_zd_zd :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append_elem(instructions, inst_fadd_zd_p_zd_zd(rz, rz2, rz3, rz4)) } inst_fsub_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return inst_r_r_r(.FSUB, dst, src, src2) } inst_fsub_v2s_v2s_v2s :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .FSUB, operand_count = 3, length = 4, ops = {op_v_2s(dst), op_v_2s(src), op_v_2s(src2), {}, {}}} } inst_fsub_v4s_v4s_v4s :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .FSUB, operand_count = 3, length = 4, ops = {op_v_4s(dst), op_v_4s(src), op_v_4s(src2), {}, {}}} } @@ -625,16 +629,16 @@ inst_fsub_zd_zd_zd :: #force_inline proc "contextless" (rz: u8, rz2: inst_fsub_zh_p_zh_zh :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8, rz4: u8) -> Instruction { return Instruction{mnemonic = .FSUB, operand_count = 4, length = 4, ops = {op_z_h(rz), op_reg(Register(REG_P | (u16(rz2) & 0xF))), op_z_h(rz3), op_z_h(rz4), {}}} } inst_fsub_zs_p_zs_zs :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8, rz4: u8) -> Instruction { return Instruction{mnemonic = .FSUB, operand_count = 4, length = 4, ops = {op_z_s(rz), op_reg(Register(REG_P | (u16(rz2) & 0xF))), op_z_s(rz3), op_z_s(rz4), {}}} } inst_fsub_zd_p_zd_zd :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8, rz4: u8) -> Instruction { return Instruction{mnemonic = .FSUB, operand_count = 4, length = 4, ops = {op_z_d(rz), op_reg(Register(REG_P | (u16(rz2) & 0xF))), op_z_d(rz3), op_z_d(rz4), {}}} } -emit_fsub_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_fsub_r_r_r(dst, src, src2)) } -emit_fsub_v2s_v2s_v2s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_fsub_v2s_v2s_v2s(dst, src, src2)) } -emit_fsub_v4s_v4s_v4s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_fsub_v4s_v4s_v4s(dst, src, src2)) } -emit_fsub_v2d_v2d_v2d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_fsub_v2d_v2d_v2d(dst, src, src2)) } -emit_fsub_zh_zh_zh :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append(instructions, inst_fsub_zh_zh_zh(rz, rz2, rz3)) } -emit_fsub_zs_zs_zs :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append(instructions, inst_fsub_zs_zs_zs(rz, rz2, rz3)) } -emit_fsub_zd_zd_zd :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append(instructions, inst_fsub_zd_zd_zd(rz, rz2, rz3)) } -emit_fsub_zh_p_zh_zh :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append(instructions, inst_fsub_zh_p_zh_zh(rz, rz2, rz3, rz4)) } -emit_fsub_zs_p_zs_zs :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append(instructions, inst_fsub_zs_p_zs_zs(rz, rz2, rz3, rz4)) } -emit_fsub_zd_p_zd_zd :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append(instructions, inst_fsub_zd_p_zd_zd(rz, rz2, rz3, rz4)) } +emit_fsub_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_fsub_r_r_r(dst, src, src2)) } +emit_fsub_v2s_v2s_v2s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_fsub_v2s_v2s_v2s(dst, src, src2)) } +emit_fsub_v4s_v4s_v4s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_fsub_v4s_v4s_v4s(dst, src, src2)) } +emit_fsub_v2d_v2d_v2d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_fsub_v2d_v2d_v2d(dst, src, src2)) } +emit_fsub_zh_zh_zh :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append_elem(instructions, inst_fsub_zh_zh_zh(rz, rz2, rz3)) } +emit_fsub_zs_zs_zs :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append_elem(instructions, inst_fsub_zs_zs_zs(rz, rz2, rz3)) } +emit_fsub_zd_zd_zd :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append_elem(instructions, inst_fsub_zd_zd_zd(rz, rz2, rz3)) } +emit_fsub_zh_p_zh_zh :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append_elem(instructions, inst_fsub_zh_p_zh_zh(rz, rz2, rz3, rz4)) } +emit_fsub_zs_p_zs_zs :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append_elem(instructions, inst_fsub_zs_p_zs_zs(rz, rz2, rz3, rz4)) } +emit_fsub_zd_p_zd_zd :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append_elem(instructions, inst_fsub_zd_p_zd_zd(rz, rz2, rz3, rz4)) } inst_fmul_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return inst_r_r_r(.FMUL, dst, src, src2) } inst_fmul_v2s_v2s_v2s :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .FMUL, operand_count = 3, length = 4, ops = {op_v_2s(dst), op_v_2s(src), op_v_2s(src2), {}, {}}} } inst_fmul_v4s_v4s_v4s :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .FMUL, operand_count = 3, length = 4, ops = {op_v_4s(dst), op_v_4s(src), op_v_4s(src2), {}, {}}} } @@ -645,16 +649,16 @@ inst_fmul_zd_zd_zd :: #force_inline proc "contextless" (rz: u8, rz2: inst_fmul_zh_p_zh_zh :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8, rz4: u8) -> Instruction { return Instruction{mnemonic = .FMUL, operand_count = 4, length = 4, ops = {op_z_h(rz), op_reg(Register(REG_P | (u16(rz2) & 0xF))), op_z_h(rz3), op_z_h(rz4), {}}} } inst_fmul_zs_p_zs_zs :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8, rz4: u8) -> Instruction { return Instruction{mnemonic = .FMUL, operand_count = 4, length = 4, ops = {op_z_s(rz), op_reg(Register(REG_P | (u16(rz2) & 0xF))), op_z_s(rz3), op_z_s(rz4), {}}} } inst_fmul_zd_p_zd_zd :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8, rz4: u8) -> Instruction { return Instruction{mnemonic = .FMUL, operand_count = 4, length = 4, ops = {op_z_d(rz), op_reg(Register(REG_P | (u16(rz2) & 0xF))), op_z_d(rz3), op_z_d(rz4), {}}} } -emit_fmul_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_fmul_r_r_r(dst, src, src2)) } -emit_fmul_v2s_v2s_v2s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_fmul_v2s_v2s_v2s(dst, src, src2)) } -emit_fmul_v4s_v4s_v4s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_fmul_v4s_v4s_v4s(dst, src, src2)) } -emit_fmul_v2d_v2d_v2d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_fmul_v2d_v2d_v2d(dst, src, src2)) } -emit_fmul_zh_zh_zh :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append(instructions, inst_fmul_zh_zh_zh(rz, rz2, rz3)) } -emit_fmul_zs_zs_zs :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append(instructions, inst_fmul_zs_zs_zs(rz, rz2, rz3)) } -emit_fmul_zd_zd_zd :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append(instructions, inst_fmul_zd_zd_zd(rz, rz2, rz3)) } -emit_fmul_zh_p_zh_zh :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append(instructions, inst_fmul_zh_p_zh_zh(rz, rz2, rz3, rz4)) } -emit_fmul_zs_p_zs_zs :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append(instructions, inst_fmul_zs_p_zs_zs(rz, rz2, rz3, rz4)) } -emit_fmul_zd_p_zd_zd :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append(instructions, inst_fmul_zd_p_zd_zd(rz, rz2, rz3, rz4)) } +emit_fmul_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_fmul_r_r_r(dst, src, src2)) } +emit_fmul_v2s_v2s_v2s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_fmul_v2s_v2s_v2s(dst, src, src2)) } +emit_fmul_v4s_v4s_v4s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_fmul_v4s_v4s_v4s(dst, src, src2)) } +emit_fmul_v2d_v2d_v2d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_fmul_v2d_v2d_v2d(dst, src, src2)) } +emit_fmul_zh_zh_zh :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append_elem(instructions, inst_fmul_zh_zh_zh(rz, rz2, rz3)) } +emit_fmul_zs_zs_zs :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append_elem(instructions, inst_fmul_zs_zs_zs(rz, rz2, rz3)) } +emit_fmul_zd_zd_zd :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append_elem(instructions, inst_fmul_zd_zd_zd(rz, rz2, rz3)) } +emit_fmul_zh_p_zh_zh :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append_elem(instructions, inst_fmul_zh_p_zh_zh(rz, rz2, rz3, rz4)) } +emit_fmul_zs_p_zs_zs :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append_elem(instructions, inst_fmul_zs_p_zs_zs(rz, rz2, rz3, rz4)) } +emit_fmul_zd_p_zd_zd :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append_elem(instructions, inst_fmul_zd_p_zd_zd(rz, rz2, rz3, rz4)) } inst_fdiv_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return inst_r_r_r(.FDIV, dst, src, src2) } inst_fdiv_v2s_v2s_v2s :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .FDIV, operand_count = 3, length = 4, ops = {op_v_2s(dst), op_v_2s(src), op_v_2s(src2), {}, {}}} } inst_fdiv_v4s_v4s_v4s :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .FDIV, operand_count = 3, length = 4, ops = {op_v_4s(dst), op_v_4s(src), op_v_4s(src2), {}, {}}} } @@ -662,29 +666,29 @@ inst_fdiv_v2d_v2d_v2d :: #force_inline proc "contextless" (dst: Register inst_fdiv_zh_p_zh_zh :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8, rz4: u8) -> Instruction { return Instruction{mnemonic = .FDIV, operand_count = 4, length = 4, ops = {op_z_h(rz), op_reg(Register(REG_P | (u16(rz2) & 0xF))), op_z_h(rz3), op_z_h(rz4), {}}} } inst_fdiv_zs_p_zs_zs :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8, rz4: u8) -> Instruction { return Instruction{mnemonic = .FDIV, operand_count = 4, length = 4, ops = {op_z_s(rz), op_reg(Register(REG_P | (u16(rz2) & 0xF))), op_z_s(rz3), op_z_s(rz4), {}}} } inst_fdiv_zd_p_zd_zd :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8, rz4: u8) -> Instruction { return Instruction{mnemonic = .FDIV, operand_count = 4, length = 4, ops = {op_z_d(rz), op_reg(Register(REG_P | (u16(rz2) & 0xF))), op_z_d(rz3), op_z_d(rz4), {}}} } -emit_fdiv_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_fdiv_r_r_r(dst, src, src2)) } -emit_fdiv_v2s_v2s_v2s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_fdiv_v2s_v2s_v2s(dst, src, src2)) } -emit_fdiv_v4s_v4s_v4s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_fdiv_v4s_v4s_v4s(dst, src, src2)) } -emit_fdiv_v2d_v2d_v2d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_fdiv_v2d_v2d_v2d(dst, src, src2)) } -emit_fdiv_zh_p_zh_zh :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append(instructions, inst_fdiv_zh_p_zh_zh(rz, rz2, rz3, rz4)) } -emit_fdiv_zs_p_zs_zs :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append(instructions, inst_fdiv_zs_p_zs_zs(rz, rz2, rz3, rz4)) } -emit_fdiv_zd_p_zd_zd :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append(instructions, inst_fdiv_zd_p_zd_zd(rz, rz2, rz3, rz4)) } +emit_fdiv_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_fdiv_r_r_r(dst, src, src2)) } +emit_fdiv_v2s_v2s_v2s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_fdiv_v2s_v2s_v2s(dst, src, src2)) } +emit_fdiv_v4s_v4s_v4s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_fdiv_v4s_v4s_v4s(dst, src, src2)) } +emit_fdiv_v2d_v2d_v2d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_fdiv_v2d_v2d_v2d(dst, src, src2)) } +emit_fdiv_zh_p_zh_zh :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append_elem(instructions, inst_fdiv_zh_p_zh_zh(rz, rz2, rz3, rz4)) } +emit_fdiv_zs_p_zs_zs :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append_elem(instructions, inst_fdiv_zs_p_zs_zs(rz, rz2, rz3, rz4)) } +emit_fdiv_zd_p_zd_zd :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append_elem(instructions, inst_fdiv_zd_p_zd_zd(rz, rz2, rz3, rz4)) } inst_fnmul_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return inst_r_r_r(.FNMUL, dst, src, src2) } -emit_fnmul_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_fnmul_r_r_r(dst, src, src2)) } +emit_fnmul_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_fnmul_r_r_r(dst, src, src2)) } inst_fmadd_r_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register, src3: Register) -> Instruction { return inst_r_r_r_r(.FMADD, dst, src, src2, src3) } -emit_fmadd_r_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, src3: Register) { append(instructions, inst_fmadd_r_r_r_r(dst, src, src2, src3)) } +emit_fmadd_r_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, src3: Register) { append_elem(instructions, inst_fmadd_r_r_r_r(dst, src, src2, src3)) } inst_fmsub_r_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register, src3: Register) -> Instruction { return inst_r_r_r_r(.FMSUB, dst, src, src2, src3) } -emit_fmsub_r_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, src3: Register) { append(instructions, inst_fmsub_r_r_r_r(dst, src, src2, src3)) } +emit_fmsub_r_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, src3: Register) { append_elem(instructions, inst_fmsub_r_r_r_r(dst, src, src2, src3)) } inst_fnmadd_r_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register, src3: Register) -> Instruction { return inst_r_r_r_r(.FNMADD, dst, src, src2, src3) } -emit_fnmadd_r_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, src3: Register) { append(instructions, inst_fnmadd_r_r_r_r(dst, src, src2, src3)) } +emit_fnmadd_r_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, src3: Register) { append_elem(instructions, inst_fnmadd_r_r_r_r(dst, src, src2, src3)) } inst_fnmsub_r_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register, src3: Register) -> Instruction { return inst_r_r_r_r(.FNMSUB, dst, src, src2, src3) } -emit_fnmsub_r_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, src3: Register) { append(instructions, inst_fnmsub_r_r_r_r(dst, src, src2, src3)) } +emit_fnmsub_r_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, src3: Register) { append_elem(instructions, inst_fnmsub_r_r_r_r(dst, src, src2, src3)) } inst_fcmp_r_r :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return inst_r_r(.FCMP, dst, src) } -emit_fcmp_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_fcmp_r_r(dst, src)) } +emit_fcmp_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_fcmp_r_r(dst, src)) } inst_fcmpe_r_r :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return inst_r_r(.FCMPE, dst, src) } -emit_fcmpe_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_fcmpe_r_r(dst, src)) } +emit_fcmpe_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_fcmpe_r_r(dst, src)) } inst_fcsel_r_r_r_c :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register, cond: Cond) -> Instruction { return Instruction{mnemonic = .FCSEL, operand_count = 4, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), op_cond(cond), {}}} } -emit_fcsel_r_r_r_c :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, cond: Cond) { append(instructions, inst_fcsel_r_r_r_c(dst, src, src2, cond)) } +emit_fcsel_r_r_r_c :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, cond: Cond) { append_elem(instructions, inst_fcsel_r_r_r_c(dst, src, src2, cond)) } inst_fmax_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return inst_r_r_r(.FMAX, dst, src, src2) } inst_fmax_v2s_v2s_v2s :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .FMAX, operand_count = 3, length = 4, ops = {op_v_2s(dst), op_v_2s(src), op_v_2s(src2), {}, {}}} } inst_fmax_v4s_v4s_v4s :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .FMAX, operand_count = 3, length = 4, ops = {op_v_4s(dst), op_v_4s(src), op_v_4s(src2), {}, {}}} } @@ -694,15 +698,15 @@ inst_fmax_v8h_v8h_v8h :: #force_inline proc "contextless" (dst: Register inst_fmax_zh_p_zh_zh :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8, rz4: u8) -> Instruction { return Instruction{mnemonic = .FMAX, operand_count = 4, length = 4, ops = {op_z_h(rz), op_reg(Register(REG_P | (u16(rz2) & 0xF))), op_z_h(rz3), op_z_h(rz4), {}}} } inst_fmax_zs_p_zs_zs :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8, rz4: u8) -> Instruction { return Instruction{mnemonic = .FMAX, operand_count = 4, length = 4, ops = {op_z_s(rz), op_reg(Register(REG_P | (u16(rz2) & 0xF))), op_z_s(rz3), op_z_s(rz4), {}}} } inst_fmax_zd_p_zd_zd :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8, rz4: u8) -> Instruction { return Instruction{mnemonic = .FMAX, operand_count = 4, length = 4, ops = {op_z_d(rz), op_reg(Register(REG_P | (u16(rz2) & 0xF))), op_z_d(rz3), op_z_d(rz4), {}}} } -emit_fmax_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_fmax_r_r_r(dst, src, src2)) } -emit_fmax_v2s_v2s_v2s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_fmax_v2s_v2s_v2s(dst, src, src2)) } -emit_fmax_v4s_v4s_v4s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_fmax_v4s_v4s_v4s(dst, src, src2)) } -emit_fmax_v2d_v2d_v2d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_fmax_v2d_v2d_v2d(dst, src, src2)) } -emit_fmax_v4h_v4h_v4h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_fmax_v4h_v4h_v4h(dst, src, src2)) } -emit_fmax_v8h_v8h_v8h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_fmax_v8h_v8h_v8h(dst, src, src2)) } -emit_fmax_zh_p_zh_zh :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append(instructions, inst_fmax_zh_p_zh_zh(rz, rz2, rz3, rz4)) } -emit_fmax_zs_p_zs_zs :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append(instructions, inst_fmax_zs_p_zs_zs(rz, rz2, rz3, rz4)) } -emit_fmax_zd_p_zd_zd :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append(instructions, inst_fmax_zd_p_zd_zd(rz, rz2, rz3, rz4)) } +emit_fmax_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_fmax_r_r_r(dst, src, src2)) } +emit_fmax_v2s_v2s_v2s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_fmax_v2s_v2s_v2s(dst, src, src2)) } +emit_fmax_v4s_v4s_v4s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_fmax_v4s_v4s_v4s(dst, src, src2)) } +emit_fmax_v2d_v2d_v2d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_fmax_v2d_v2d_v2d(dst, src, src2)) } +emit_fmax_v4h_v4h_v4h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_fmax_v4h_v4h_v4h(dst, src, src2)) } +emit_fmax_v8h_v8h_v8h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_fmax_v8h_v8h_v8h(dst, src, src2)) } +emit_fmax_zh_p_zh_zh :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append_elem(instructions, inst_fmax_zh_p_zh_zh(rz, rz2, rz3, rz4)) } +emit_fmax_zs_p_zs_zs :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append_elem(instructions, inst_fmax_zs_p_zs_zs(rz, rz2, rz3, rz4)) } +emit_fmax_zd_p_zd_zd :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append_elem(instructions, inst_fmax_zd_p_zd_zd(rz, rz2, rz3, rz4)) } inst_fmin_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return inst_r_r_r(.FMIN, dst, src, src2) } inst_fmin_v2s_v2s_v2s :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .FMIN, operand_count = 3, length = 4, ops = {op_v_2s(dst), op_v_2s(src), op_v_2s(src2), {}, {}}} } inst_fmin_v4s_v4s_v4s :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .FMIN, operand_count = 3, length = 4, ops = {op_v_4s(dst), op_v_4s(src), op_v_4s(src2), {}, {}}} } @@ -712,15 +716,15 @@ inst_fmin_v8h_v8h_v8h :: #force_inline proc "contextless" (dst: Register inst_fmin_zh_p_zh_zh :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8, rz4: u8) -> Instruction { return Instruction{mnemonic = .FMIN, operand_count = 4, length = 4, ops = {op_z_h(rz), op_reg(Register(REG_P | (u16(rz2) & 0xF))), op_z_h(rz3), op_z_h(rz4), {}}} } inst_fmin_zs_p_zs_zs :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8, rz4: u8) -> Instruction { return Instruction{mnemonic = .FMIN, operand_count = 4, length = 4, ops = {op_z_s(rz), op_reg(Register(REG_P | (u16(rz2) & 0xF))), op_z_s(rz3), op_z_s(rz4), {}}} } inst_fmin_zd_p_zd_zd :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8, rz4: u8) -> Instruction { return Instruction{mnemonic = .FMIN, operand_count = 4, length = 4, ops = {op_z_d(rz), op_reg(Register(REG_P | (u16(rz2) & 0xF))), op_z_d(rz3), op_z_d(rz4), {}}} } -emit_fmin_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_fmin_r_r_r(dst, src, src2)) } -emit_fmin_v2s_v2s_v2s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_fmin_v2s_v2s_v2s(dst, src, src2)) } -emit_fmin_v4s_v4s_v4s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_fmin_v4s_v4s_v4s(dst, src, src2)) } -emit_fmin_v2d_v2d_v2d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_fmin_v2d_v2d_v2d(dst, src, src2)) } -emit_fmin_v4h_v4h_v4h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_fmin_v4h_v4h_v4h(dst, src, src2)) } -emit_fmin_v8h_v8h_v8h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_fmin_v8h_v8h_v8h(dst, src, src2)) } -emit_fmin_zh_p_zh_zh :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append(instructions, inst_fmin_zh_p_zh_zh(rz, rz2, rz3, rz4)) } -emit_fmin_zs_p_zs_zs :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append(instructions, inst_fmin_zs_p_zs_zs(rz, rz2, rz3, rz4)) } -emit_fmin_zd_p_zd_zd :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append(instructions, inst_fmin_zd_p_zd_zd(rz, rz2, rz3, rz4)) } +emit_fmin_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_fmin_r_r_r(dst, src, src2)) } +emit_fmin_v2s_v2s_v2s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_fmin_v2s_v2s_v2s(dst, src, src2)) } +emit_fmin_v4s_v4s_v4s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_fmin_v4s_v4s_v4s(dst, src, src2)) } +emit_fmin_v2d_v2d_v2d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_fmin_v2d_v2d_v2d(dst, src, src2)) } +emit_fmin_v4h_v4h_v4h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_fmin_v4h_v4h_v4h(dst, src, src2)) } +emit_fmin_v8h_v8h_v8h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_fmin_v8h_v8h_v8h(dst, src, src2)) } +emit_fmin_zh_p_zh_zh :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append_elem(instructions, inst_fmin_zh_p_zh_zh(rz, rz2, rz3, rz4)) } +emit_fmin_zs_p_zs_zs :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append_elem(instructions, inst_fmin_zs_p_zs_zs(rz, rz2, rz3, rz4)) } +emit_fmin_zd_p_zd_zd :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append_elem(instructions, inst_fmin_zd_p_zd_zd(rz, rz2, rz3, rz4)) } inst_fmaxnm_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return inst_r_r_r(.FMAXNM, dst, src, src2) } inst_fmaxnm_v2s_v2s_v2s :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .FMAXNM, operand_count = 3, length = 4, ops = {op_v_2s(dst), op_v_2s(src), op_v_2s(src2), {}, {}}} } inst_fmaxnm_v4s_v4s_v4s :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .FMAXNM, operand_count = 3, length = 4, ops = {op_v_4s(dst), op_v_4s(src), op_v_4s(src2), {}, {}}} } @@ -730,15 +734,15 @@ inst_fmaxnm_v8h_v8h_v8h :: #force_inline proc "contextless" (dst: Register inst_fmaxnm_zh_p_zh_zh :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8, rz4: u8) -> Instruction { return Instruction{mnemonic = .FMAXNM, operand_count = 4, length = 4, ops = {op_z_h(rz), op_reg(Register(REG_P | (u16(rz2) & 0xF))), op_z_h(rz3), op_z_h(rz4), {}}} } inst_fmaxnm_zs_p_zs_zs :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8, rz4: u8) -> Instruction { return Instruction{mnemonic = .FMAXNM, operand_count = 4, length = 4, ops = {op_z_s(rz), op_reg(Register(REG_P | (u16(rz2) & 0xF))), op_z_s(rz3), op_z_s(rz4), {}}} } inst_fmaxnm_zd_p_zd_zd :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8, rz4: u8) -> Instruction { return Instruction{mnemonic = .FMAXNM, operand_count = 4, length = 4, ops = {op_z_d(rz), op_reg(Register(REG_P | (u16(rz2) & 0xF))), op_z_d(rz3), op_z_d(rz4), {}}} } -emit_fmaxnm_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_fmaxnm_r_r_r(dst, src, src2)) } -emit_fmaxnm_v2s_v2s_v2s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_fmaxnm_v2s_v2s_v2s(dst, src, src2)) } -emit_fmaxnm_v4s_v4s_v4s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_fmaxnm_v4s_v4s_v4s(dst, src, src2)) } -emit_fmaxnm_v2d_v2d_v2d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_fmaxnm_v2d_v2d_v2d(dst, src, src2)) } -emit_fmaxnm_v4h_v4h_v4h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_fmaxnm_v4h_v4h_v4h(dst, src, src2)) } -emit_fmaxnm_v8h_v8h_v8h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_fmaxnm_v8h_v8h_v8h(dst, src, src2)) } -emit_fmaxnm_zh_p_zh_zh :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append(instructions, inst_fmaxnm_zh_p_zh_zh(rz, rz2, rz3, rz4)) } -emit_fmaxnm_zs_p_zs_zs :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append(instructions, inst_fmaxnm_zs_p_zs_zs(rz, rz2, rz3, rz4)) } -emit_fmaxnm_zd_p_zd_zd :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append(instructions, inst_fmaxnm_zd_p_zd_zd(rz, rz2, rz3, rz4)) } +emit_fmaxnm_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_fmaxnm_r_r_r(dst, src, src2)) } +emit_fmaxnm_v2s_v2s_v2s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_fmaxnm_v2s_v2s_v2s(dst, src, src2)) } +emit_fmaxnm_v4s_v4s_v4s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_fmaxnm_v4s_v4s_v4s(dst, src, src2)) } +emit_fmaxnm_v2d_v2d_v2d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_fmaxnm_v2d_v2d_v2d(dst, src, src2)) } +emit_fmaxnm_v4h_v4h_v4h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_fmaxnm_v4h_v4h_v4h(dst, src, src2)) } +emit_fmaxnm_v8h_v8h_v8h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_fmaxnm_v8h_v8h_v8h(dst, src, src2)) } +emit_fmaxnm_zh_p_zh_zh :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append_elem(instructions, inst_fmaxnm_zh_p_zh_zh(rz, rz2, rz3, rz4)) } +emit_fmaxnm_zs_p_zs_zs :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append_elem(instructions, inst_fmaxnm_zs_p_zs_zs(rz, rz2, rz3, rz4)) } +emit_fmaxnm_zd_p_zd_zd :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append_elem(instructions, inst_fmaxnm_zd_p_zd_zd(rz, rz2, rz3, rz4)) } inst_fminnm_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return inst_r_r_r(.FMINNM, dst, src, src2) } inst_fminnm_v2s_v2s_v2s :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .FMINNM, operand_count = 3, length = 4, ops = {op_v_2s(dst), op_v_2s(src), op_v_2s(src2), {}, {}}} } inst_fminnm_v4s_v4s_v4s :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .FMINNM, operand_count = 3, length = 4, ops = {op_v_4s(dst), op_v_4s(src), op_v_4s(src2), {}, {}}} } @@ -748,161 +752,161 @@ inst_fminnm_v8h_v8h_v8h :: #force_inline proc "contextless" (dst: Register inst_fminnm_zh_p_zh_zh :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8, rz4: u8) -> Instruction { return Instruction{mnemonic = .FMINNM, operand_count = 4, length = 4, ops = {op_z_h(rz), op_reg(Register(REG_P | (u16(rz2) & 0xF))), op_z_h(rz3), op_z_h(rz4), {}}} } inst_fminnm_zs_p_zs_zs :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8, rz4: u8) -> Instruction { return Instruction{mnemonic = .FMINNM, operand_count = 4, length = 4, ops = {op_z_s(rz), op_reg(Register(REG_P | (u16(rz2) & 0xF))), op_z_s(rz3), op_z_s(rz4), {}}} } inst_fminnm_zd_p_zd_zd :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8, rz4: u8) -> Instruction { return Instruction{mnemonic = .FMINNM, operand_count = 4, length = 4, ops = {op_z_d(rz), op_reg(Register(REG_P | (u16(rz2) & 0xF))), op_z_d(rz3), op_z_d(rz4), {}}} } -emit_fminnm_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_fminnm_r_r_r(dst, src, src2)) } -emit_fminnm_v2s_v2s_v2s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_fminnm_v2s_v2s_v2s(dst, src, src2)) } -emit_fminnm_v4s_v4s_v4s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_fminnm_v4s_v4s_v4s(dst, src, src2)) } -emit_fminnm_v2d_v2d_v2d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_fminnm_v2d_v2d_v2d(dst, src, src2)) } -emit_fminnm_v4h_v4h_v4h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_fminnm_v4h_v4h_v4h(dst, src, src2)) } -emit_fminnm_v8h_v8h_v8h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_fminnm_v8h_v8h_v8h(dst, src, src2)) } -emit_fminnm_zh_p_zh_zh :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append(instructions, inst_fminnm_zh_p_zh_zh(rz, rz2, rz3, rz4)) } -emit_fminnm_zs_p_zs_zs :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append(instructions, inst_fminnm_zs_p_zs_zs(rz, rz2, rz3, rz4)) } -emit_fminnm_zd_p_zd_zd :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append(instructions, inst_fminnm_zd_p_zd_zd(rz, rz2, rz3, rz4)) } +emit_fminnm_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_fminnm_r_r_r(dst, src, src2)) } +emit_fminnm_v2s_v2s_v2s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_fminnm_v2s_v2s_v2s(dst, src, src2)) } +emit_fminnm_v4s_v4s_v4s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_fminnm_v4s_v4s_v4s(dst, src, src2)) } +emit_fminnm_v2d_v2d_v2d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_fminnm_v2d_v2d_v2d(dst, src, src2)) } +emit_fminnm_v4h_v4h_v4h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_fminnm_v4h_v4h_v4h(dst, src, src2)) } +emit_fminnm_v8h_v8h_v8h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_fminnm_v8h_v8h_v8h(dst, src, src2)) } +emit_fminnm_zh_p_zh_zh :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append_elem(instructions, inst_fminnm_zh_p_zh_zh(rz, rz2, rz3, rz4)) } +emit_fminnm_zs_p_zs_zs :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append_elem(instructions, inst_fminnm_zs_p_zs_zs(rz, rz2, rz3, rz4)) } +emit_fminnm_zd_p_zd_zd :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append_elem(instructions, inst_fminnm_zd_p_zd_zd(rz, rz2, rz3, rz4)) } inst_fcvt_r_r :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return inst_r_r(.FCVT, dst, src) } -emit_fcvt_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_fcvt_r_r(dst, src)) } +emit_fcvt_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_fcvt_r_r(dst, src)) } inst_scvtf_r_r :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return inst_r_r(.SCVTF, dst, src) } inst_scvtf_v2s_v2s :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .SCVTF, operand_count = 2, length = 4, ops = {op_v_2s(dst), op_v_2s(src), {}, {}, {}}} } inst_scvtf_v4s_v4s :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .SCVTF, operand_count = 2, length = 4, ops = {op_v_4s(dst), op_v_4s(src), {}, {}, {}}} } inst_scvtf_v2d_v2d :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .SCVTF, operand_count = 2, length = 4, ops = {op_v_2d(dst), op_v_2d(src), {}, {}, {}}} } inst_scvtf_v4h_v4h :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .SCVTF, operand_count = 2, length = 4, ops = {op_v_4h(dst), op_v_4h(src), {}, {}, {}}} } inst_scvtf_v8h_v8h :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .SCVTF, operand_count = 2, length = 4, ops = {op_v_8h(dst), op_v_8h(src), {}, {}, {}}} } -emit_scvtf_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_scvtf_r_r(dst, src)) } -emit_scvtf_v2s_v2s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_scvtf_v2s_v2s(dst, src)) } -emit_scvtf_v4s_v4s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_scvtf_v4s_v4s(dst, src)) } -emit_scvtf_v2d_v2d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_scvtf_v2d_v2d(dst, src)) } -emit_scvtf_v4h_v4h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_scvtf_v4h_v4h(dst, src)) } -emit_scvtf_v8h_v8h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_scvtf_v8h_v8h(dst, src)) } +emit_scvtf_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_scvtf_r_r(dst, src)) } +emit_scvtf_v2s_v2s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_scvtf_v2s_v2s(dst, src)) } +emit_scvtf_v4s_v4s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_scvtf_v4s_v4s(dst, src)) } +emit_scvtf_v2d_v2d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_scvtf_v2d_v2d(dst, src)) } +emit_scvtf_v4h_v4h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_scvtf_v4h_v4h(dst, src)) } +emit_scvtf_v8h_v8h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_scvtf_v8h_v8h(dst, src)) } inst_ucvtf_r_r :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return inst_r_r(.UCVTF, dst, src) } inst_ucvtf_v2s_v2s :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .UCVTF, operand_count = 2, length = 4, ops = {op_v_2s(dst), op_v_2s(src), {}, {}, {}}} } inst_ucvtf_v4s_v4s :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .UCVTF, operand_count = 2, length = 4, ops = {op_v_4s(dst), op_v_4s(src), {}, {}, {}}} } inst_ucvtf_v2d_v2d :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .UCVTF, operand_count = 2, length = 4, ops = {op_v_2d(dst), op_v_2d(src), {}, {}, {}}} } inst_ucvtf_v4h_v4h :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .UCVTF, operand_count = 2, length = 4, ops = {op_v_4h(dst), op_v_4h(src), {}, {}, {}}} } inst_ucvtf_v8h_v8h :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .UCVTF, operand_count = 2, length = 4, ops = {op_v_8h(dst), op_v_8h(src), {}, {}, {}}} } -emit_ucvtf_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_ucvtf_r_r(dst, src)) } -emit_ucvtf_v2s_v2s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_ucvtf_v2s_v2s(dst, src)) } -emit_ucvtf_v4s_v4s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_ucvtf_v4s_v4s(dst, src)) } -emit_ucvtf_v2d_v2d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_ucvtf_v2d_v2d(dst, src)) } -emit_ucvtf_v4h_v4h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_ucvtf_v4h_v4h(dst, src)) } -emit_ucvtf_v8h_v8h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_ucvtf_v8h_v8h(dst, src)) } +emit_ucvtf_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_ucvtf_r_r(dst, src)) } +emit_ucvtf_v2s_v2s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_ucvtf_v2s_v2s(dst, src)) } +emit_ucvtf_v4s_v4s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_ucvtf_v4s_v4s(dst, src)) } +emit_ucvtf_v2d_v2d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_ucvtf_v2d_v2d(dst, src)) } +emit_ucvtf_v4h_v4h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_ucvtf_v4h_v4h(dst, src)) } +emit_ucvtf_v8h_v8h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_ucvtf_v8h_v8h(dst, src)) } inst_fcvtzs_r_r :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return inst_r_r(.FCVTZS, dst, src) } inst_fcvtzs_v2s_v2s :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .FCVTZS, operand_count = 2, length = 4, ops = {op_v_2s(dst), op_v_2s(src), {}, {}, {}}} } inst_fcvtzs_v4s_v4s :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .FCVTZS, operand_count = 2, length = 4, ops = {op_v_4s(dst), op_v_4s(src), {}, {}, {}}} } inst_fcvtzs_v2d_v2d :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .FCVTZS, operand_count = 2, length = 4, ops = {op_v_2d(dst), op_v_2d(src), {}, {}, {}}} } inst_fcvtzs_v4h_v4h :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .FCVTZS, operand_count = 2, length = 4, ops = {op_v_4h(dst), op_v_4h(src), {}, {}, {}}} } inst_fcvtzs_v8h_v8h :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .FCVTZS, operand_count = 2, length = 4, ops = {op_v_8h(dst), op_v_8h(src), {}, {}, {}}} } -emit_fcvtzs_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_fcvtzs_r_r(dst, src)) } -emit_fcvtzs_v2s_v2s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_fcvtzs_v2s_v2s(dst, src)) } -emit_fcvtzs_v4s_v4s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_fcvtzs_v4s_v4s(dst, src)) } -emit_fcvtzs_v2d_v2d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_fcvtzs_v2d_v2d(dst, src)) } -emit_fcvtzs_v4h_v4h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_fcvtzs_v4h_v4h(dst, src)) } -emit_fcvtzs_v8h_v8h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_fcvtzs_v8h_v8h(dst, src)) } +emit_fcvtzs_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_fcvtzs_r_r(dst, src)) } +emit_fcvtzs_v2s_v2s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_fcvtzs_v2s_v2s(dst, src)) } +emit_fcvtzs_v4s_v4s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_fcvtzs_v4s_v4s(dst, src)) } +emit_fcvtzs_v2d_v2d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_fcvtzs_v2d_v2d(dst, src)) } +emit_fcvtzs_v4h_v4h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_fcvtzs_v4h_v4h(dst, src)) } +emit_fcvtzs_v8h_v8h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_fcvtzs_v8h_v8h(dst, src)) } inst_fcvtzu_r_r :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return inst_r_r(.FCVTZU, dst, src) } inst_fcvtzu_v2s_v2s :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .FCVTZU, operand_count = 2, length = 4, ops = {op_v_2s(dst), op_v_2s(src), {}, {}, {}}} } inst_fcvtzu_v4s_v4s :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .FCVTZU, operand_count = 2, length = 4, ops = {op_v_4s(dst), op_v_4s(src), {}, {}, {}}} } inst_fcvtzu_v2d_v2d :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .FCVTZU, operand_count = 2, length = 4, ops = {op_v_2d(dst), op_v_2d(src), {}, {}, {}}} } inst_fcvtzu_v4h_v4h :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .FCVTZU, operand_count = 2, length = 4, ops = {op_v_4h(dst), op_v_4h(src), {}, {}, {}}} } inst_fcvtzu_v8h_v8h :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .FCVTZU, operand_count = 2, length = 4, ops = {op_v_8h(dst), op_v_8h(src), {}, {}, {}}} } -emit_fcvtzu_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_fcvtzu_r_r(dst, src)) } -emit_fcvtzu_v2s_v2s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_fcvtzu_v2s_v2s(dst, src)) } -emit_fcvtzu_v4s_v4s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_fcvtzu_v4s_v4s(dst, src)) } -emit_fcvtzu_v2d_v2d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_fcvtzu_v2d_v2d(dst, src)) } -emit_fcvtzu_v4h_v4h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_fcvtzu_v4h_v4h(dst, src)) } -emit_fcvtzu_v8h_v8h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_fcvtzu_v8h_v8h(dst, src)) } +emit_fcvtzu_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_fcvtzu_r_r(dst, src)) } +emit_fcvtzu_v2s_v2s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_fcvtzu_v2s_v2s(dst, src)) } +emit_fcvtzu_v4s_v4s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_fcvtzu_v4s_v4s(dst, src)) } +emit_fcvtzu_v2d_v2d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_fcvtzu_v2d_v2d(dst, src)) } +emit_fcvtzu_v4h_v4h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_fcvtzu_v4h_v4h(dst, src)) } +emit_fcvtzu_v8h_v8h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_fcvtzu_v8h_v8h(dst, src)) } inst_fcvtas_r_r :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return inst_r_r(.FCVTAS, dst, src) } inst_fcvtas_v2s_v2s :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .FCVTAS, operand_count = 2, length = 4, ops = {op_v_2s(dst), op_v_2s(src), {}, {}, {}}} } inst_fcvtas_v4s_v4s :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .FCVTAS, operand_count = 2, length = 4, ops = {op_v_4s(dst), op_v_4s(src), {}, {}, {}}} } inst_fcvtas_v2d_v2d :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .FCVTAS, operand_count = 2, length = 4, ops = {op_v_2d(dst), op_v_2d(src), {}, {}, {}}} } inst_fcvtas_v4h_v4h :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .FCVTAS, operand_count = 2, length = 4, ops = {op_v_4h(dst), op_v_4h(src), {}, {}, {}}} } inst_fcvtas_v8h_v8h :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .FCVTAS, operand_count = 2, length = 4, ops = {op_v_8h(dst), op_v_8h(src), {}, {}, {}}} } -emit_fcvtas_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_fcvtas_r_r(dst, src)) } -emit_fcvtas_v2s_v2s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_fcvtas_v2s_v2s(dst, src)) } -emit_fcvtas_v4s_v4s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_fcvtas_v4s_v4s(dst, src)) } -emit_fcvtas_v2d_v2d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_fcvtas_v2d_v2d(dst, src)) } -emit_fcvtas_v4h_v4h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_fcvtas_v4h_v4h(dst, src)) } -emit_fcvtas_v8h_v8h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_fcvtas_v8h_v8h(dst, src)) } +emit_fcvtas_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_fcvtas_r_r(dst, src)) } +emit_fcvtas_v2s_v2s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_fcvtas_v2s_v2s(dst, src)) } +emit_fcvtas_v4s_v4s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_fcvtas_v4s_v4s(dst, src)) } +emit_fcvtas_v2d_v2d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_fcvtas_v2d_v2d(dst, src)) } +emit_fcvtas_v4h_v4h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_fcvtas_v4h_v4h(dst, src)) } +emit_fcvtas_v8h_v8h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_fcvtas_v8h_v8h(dst, src)) } inst_fcvtau_r_r :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return inst_r_r(.FCVTAU, dst, src) } inst_fcvtau_v2s_v2s :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .FCVTAU, operand_count = 2, length = 4, ops = {op_v_2s(dst), op_v_2s(src), {}, {}, {}}} } inst_fcvtau_v4s_v4s :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .FCVTAU, operand_count = 2, length = 4, ops = {op_v_4s(dst), op_v_4s(src), {}, {}, {}}} } inst_fcvtau_v2d_v2d :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .FCVTAU, operand_count = 2, length = 4, ops = {op_v_2d(dst), op_v_2d(src), {}, {}, {}}} } inst_fcvtau_v4h_v4h :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .FCVTAU, operand_count = 2, length = 4, ops = {op_v_4h(dst), op_v_4h(src), {}, {}, {}}} } inst_fcvtau_v8h_v8h :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .FCVTAU, operand_count = 2, length = 4, ops = {op_v_8h(dst), op_v_8h(src), {}, {}, {}}} } -emit_fcvtau_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_fcvtau_r_r(dst, src)) } -emit_fcvtau_v2s_v2s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_fcvtau_v2s_v2s(dst, src)) } -emit_fcvtau_v4s_v4s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_fcvtau_v4s_v4s(dst, src)) } -emit_fcvtau_v2d_v2d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_fcvtau_v2d_v2d(dst, src)) } -emit_fcvtau_v4h_v4h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_fcvtau_v4h_v4h(dst, src)) } -emit_fcvtau_v8h_v8h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_fcvtau_v8h_v8h(dst, src)) } +emit_fcvtau_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_fcvtau_r_r(dst, src)) } +emit_fcvtau_v2s_v2s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_fcvtau_v2s_v2s(dst, src)) } +emit_fcvtau_v4s_v4s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_fcvtau_v4s_v4s(dst, src)) } +emit_fcvtau_v2d_v2d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_fcvtau_v2d_v2d(dst, src)) } +emit_fcvtau_v4h_v4h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_fcvtau_v4h_v4h(dst, src)) } +emit_fcvtau_v8h_v8h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_fcvtau_v8h_v8h(dst, src)) } inst_fcvtns_r_r :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return inst_r_r(.FCVTNS, dst, src) } inst_fcvtns_v2s_v2s :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .FCVTNS, operand_count = 2, length = 4, ops = {op_v_2s(dst), op_v_2s(src), {}, {}, {}}} } inst_fcvtns_v4s_v4s :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .FCVTNS, operand_count = 2, length = 4, ops = {op_v_4s(dst), op_v_4s(src), {}, {}, {}}} } inst_fcvtns_v2d_v2d :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .FCVTNS, operand_count = 2, length = 4, ops = {op_v_2d(dst), op_v_2d(src), {}, {}, {}}} } inst_fcvtns_v4h_v4h :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .FCVTNS, operand_count = 2, length = 4, ops = {op_v_4h(dst), op_v_4h(src), {}, {}, {}}} } inst_fcvtns_v8h_v8h :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .FCVTNS, operand_count = 2, length = 4, ops = {op_v_8h(dst), op_v_8h(src), {}, {}, {}}} } -emit_fcvtns_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_fcvtns_r_r(dst, src)) } -emit_fcvtns_v2s_v2s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_fcvtns_v2s_v2s(dst, src)) } -emit_fcvtns_v4s_v4s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_fcvtns_v4s_v4s(dst, src)) } -emit_fcvtns_v2d_v2d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_fcvtns_v2d_v2d(dst, src)) } -emit_fcvtns_v4h_v4h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_fcvtns_v4h_v4h(dst, src)) } -emit_fcvtns_v8h_v8h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_fcvtns_v8h_v8h(dst, src)) } +emit_fcvtns_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_fcvtns_r_r(dst, src)) } +emit_fcvtns_v2s_v2s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_fcvtns_v2s_v2s(dst, src)) } +emit_fcvtns_v4s_v4s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_fcvtns_v4s_v4s(dst, src)) } +emit_fcvtns_v2d_v2d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_fcvtns_v2d_v2d(dst, src)) } +emit_fcvtns_v4h_v4h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_fcvtns_v4h_v4h(dst, src)) } +emit_fcvtns_v8h_v8h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_fcvtns_v8h_v8h(dst, src)) } inst_fcvtnu_r_r :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return inst_r_r(.FCVTNU, dst, src) } inst_fcvtnu_v2s_v2s :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .FCVTNU, operand_count = 2, length = 4, ops = {op_v_2s(dst), op_v_2s(src), {}, {}, {}}} } inst_fcvtnu_v4s_v4s :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .FCVTNU, operand_count = 2, length = 4, ops = {op_v_4s(dst), op_v_4s(src), {}, {}, {}}} } inst_fcvtnu_v2d_v2d :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .FCVTNU, operand_count = 2, length = 4, ops = {op_v_2d(dst), op_v_2d(src), {}, {}, {}}} } inst_fcvtnu_v4h_v4h :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .FCVTNU, operand_count = 2, length = 4, ops = {op_v_4h(dst), op_v_4h(src), {}, {}, {}}} } inst_fcvtnu_v8h_v8h :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .FCVTNU, operand_count = 2, length = 4, ops = {op_v_8h(dst), op_v_8h(src), {}, {}, {}}} } -emit_fcvtnu_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_fcvtnu_r_r(dst, src)) } -emit_fcvtnu_v2s_v2s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_fcvtnu_v2s_v2s(dst, src)) } -emit_fcvtnu_v4s_v4s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_fcvtnu_v4s_v4s(dst, src)) } -emit_fcvtnu_v2d_v2d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_fcvtnu_v2d_v2d(dst, src)) } -emit_fcvtnu_v4h_v4h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_fcvtnu_v4h_v4h(dst, src)) } -emit_fcvtnu_v8h_v8h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_fcvtnu_v8h_v8h(dst, src)) } +emit_fcvtnu_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_fcvtnu_r_r(dst, src)) } +emit_fcvtnu_v2s_v2s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_fcvtnu_v2s_v2s(dst, src)) } +emit_fcvtnu_v4s_v4s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_fcvtnu_v4s_v4s(dst, src)) } +emit_fcvtnu_v2d_v2d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_fcvtnu_v2d_v2d(dst, src)) } +emit_fcvtnu_v4h_v4h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_fcvtnu_v4h_v4h(dst, src)) } +emit_fcvtnu_v8h_v8h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_fcvtnu_v8h_v8h(dst, src)) } inst_fcvtps_r_r :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return inst_r_r(.FCVTPS, dst, src) } inst_fcvtps_v2s_v2s :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .FCVTPS, operand_count = 2, length = 4, ops = {op_v_2s(dst), op_v_2s(src), {}, {}, {}}} } inst_fcvtps_v4s_v4s :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .FCVTPS, operand_count = 2, length = 4, ops = {op_v_4s(dst), op_v_4s(src), {}, {}, {}}} } inst_fcvtps_v2d_v2d :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .FCVTPS, operand_count = 2, length = 4, ops = {op_v_2d(dst), op_v_2d(src), {}, {}, {}}} } inst_fcvtps_v4h_v4h :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .FCVTPS, operand_count = 2, length = 4, ops = {op_v_4h(dst), op_v_4h(src), {}, {}, {}}} } inst_fcvtps_v8h_v8h :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .FCVTPS, operand_count = 2, length = 4, ops = {op_v_8h(dst), op_v_8h(src), {}, {}, {}}} } -emit_fcvtps_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_fcvtps_r_r(dst, src)) } -emit_fcvtps_v2s_v2s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_fcvtps_v2s_v2s(dst, src)) } -emit_fcvtps_v4s_v4s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_fcvtps_v4s_v4s(dst, src)) } -emit_fcvtps_v2d_v2d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_fcvtps_v2d_v2d(dst, src)) } -emit_fcvtps_v4h_v4h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_fcvtps_v4h_v4h(dst, src)) } -emit_fcvtps_v8h_v8h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_fcvtps_v8h_v8h(dst, src)) } +emit_fcvtps_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_fcvtps_r_r(dst, src)) } +emit_fcvtps_v2s_v2s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_fcvtps_v2s_v2s(dst, src)) } +emit_fcvtps_v4s_v4s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_fcvtps_v4s_v4s(dst, src)) } +emit_fcvtps_v2d_v2d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_fcvtps_v2d_v2d(dst, src)) } +emit_fcvtps_v4h_v4h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_fcvtps_v4h_v4h(dst, src)) } +emit_fcvtps_v8h_v8h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_fcvtps_v8h_v8h(dst, src)) } inst_fcvtpu_r_r :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return inst_r_r(.FCVTPU, dst, src) } inst_fcvtpu_v2s_v2s :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .FCVTPU, operand_count = 2, length = 4, ops = {op_v_2s(dst), op_v_2s(src), {}, {}, {}}} } inst_fcvtpu_v4s_v4s :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .FCVTPU, operand_count = 2, length = 4, ops = {op_v_4s(dst), op_v_4s(src), {}, {}, {}}} } inst_fcvtpu_v2d_v2d :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .FCVTPU, operand_count = 2, length = 4, ops = {op_v_2d(dst), op_v_2d(src), {}, {}, {}}} } inst_fcvtpu_v4h_v4h :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .FCVTPU, operand_count = 2, length = 4, ops = {op_v_4h(dst), op_v_4h(src), {}, {}, {}}} } inst_fcvtpu_v8h_v8h :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .FCVTPU, operand_count = 2, length = 4, ops = {op_v_8h(dst), op_v_8h(src), {}, {}, {}}} } -emit_fcvtpu_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_fcvtpu_r_r(dst, src)) } -emit_fcvtpu_v2s_v2s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_fcvtpu_v2s_v2s(dst, src)) } -emit_fcvtpu_v4s_v4s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_fcvtpu_v4s_v4s(dst, src)) } -emit_fcvtpu_v2d_v2d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_fcvtpu_v2d_v2d(dst, src)) } -emit_fcvtpu_v4h_v4h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_fcvtpu_v4h_v4h(dst, src)) } -emit_fcvtpu_v8h_v8h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_fcvtpu_v8h_v8h(dst, src)) } +emit_fcvtpu_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_fcvtpu_r_r(dst, src)) } +emit_fcvtpu_v2s_v2s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_fcvtpu_v2s_v2s(dst, src)) } +emit_fcvtpu_v4s_v4s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_fcvtpu_v4s_v4s(dst, src)) } +emit_fcvtpu_v2d_v2d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_fcvtpu_v2d_v2d(dst, src)) } +emit_fcvtpu_v4h_v4h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_fcvtpu_v4h_v4h(dst, src)) } +emit_fcvtpu_v8h_v8h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_fcvtpu_v8h_v8h(dst, src)) } inst_fcvtms_r_r :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return inst_r_r(.FCVTMS, dst, src) } inst_fcvtms_v2s_v2s :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .FCVTMS, operand_count = 2, length = 4, ops = {op_v_2s(dst), op_v_2s(src), {}, {}, {}}} } inst_fcvtms_v4s_v4s :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .FCVTMS, operand_count = 2, length = 4, ops = {op_v_4s(dst), op_v_4s(src), {}, {}, {}}} } inst_fcvtms_v2d_v2d :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .FCVTMS, operand_count = 2, length = 4, ops = {op_v_2d(dst), op_v_2d(src), {}, {}, {}}} } inst_fcvtms_v4h_v4h :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .FCVTMS, operand_count = 2, length = 4, ops = {op_v_4h(dst), op_v_4h(src), {}, {}, {}}} } inst_fcvtms_v8h_v8h :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .FCVTMS, operand_count = 2, length = 4, ops = {op_v_8h(dst), op_v_8h(src), {}, {}, {}}} } -emit_fcvtms_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_fcvtms_r_r(dst, src)) } -emit_fcvtms_v2s_v2s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_fcvtms_v2s_v2s(dst, src)) } -emit_fcvtms_v4s_v4s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_fcvtms_v4s_v4s(dst, src)) } -emit_fcvtms_v2d_v2d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_fcvtms_v2d_v2d(dst, src)) } -emit_fcvtms_v4h_v4h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_fcvtms_v4h_v4h(dst, src)) } -emit_fcvtms_v8h_v8h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_fcvtms_v8h_v8h(dst, src)) } +emit_fcvtms_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_fcvtms_r_r(dst, src)) } +emit_fcvtms_v2s_v2s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_fcvtms_v2s_v2s(dst, src)) } +emit_fcvtms_v4s_v4s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_fcvtms_v4s_v4s(dst, src)) } +emit_fcvtms_v2d_v2d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_fcvtms_v2d_v2d(dst, src)) } +emit_fcvtms_v4h_v4h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_fcvtms_v4h_v4h(dst, src)) } +emit_fcvtms_v8h_v8h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_fcvtms_v8h_v8h(dst, src)) } inst_fcvtmu_r_r :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return inst_r_r(.FCVTMU, dst, src) } inst_fcvtmu_v2s_v2s :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .FCVTMU, operand_count = 2, length = 4, ops = {op_v_2s(dst), op_v_2s(src), {}, {}, {}}} } inst_fcvtmu_v4s_v4s :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .FCVTMU, operand_count = 2, length = 4, ops = {op_v_4s(dst), op_v_4s(src), {}, {}, {}}} } inst_fcvtmu_v2d_v2d :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .FCVTMU, operand_count = 2, length = 4, ops = {op_v_2d(dst), op_v_2d(src), {}, {}, {}}} } inst_fcvtmu_v4h_v4h :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .FCVTMU, operand_count = 2, length = 4, ops = {op_v_4h(dst), op_v_4h(src), {}, {}, {}}} } inst_fcvtmu_v8h_v8h :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .FCVTMU, operand_count = 2, length = 4, ops = {op_v_8h(dst), op_v_8h(src), {}, {}, {}}} } -emit_fcvtmu_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_fcvtmu_r_r(dst, src)) } -emit_fcvtmu_v2s_v2s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_fcvtmu_v2s_v2s(dst, src)) } -emit_fcvtmu_v4s_v4s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_fcvtmu_v4s_v4s(dst, src)) } -emit_fcvtmu_v2d_v2d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_fcvtmu_v2d_v2d(dst, src)) } -emit_fcvtmu_v4h_v4h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_fcvtmu_v4h_v4h(dst, src)) } -emit_fcvtmu_v8h_v8h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_fcvtmu_v8h_v8h(dst, src)) } +emit_fcvtmu_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_fcvtmu_r_r(dst, src)) } +emit_fcvtmu_v2s_v2s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_fcvtmu_v2s_v2s(dst, src)) } +emit_fcvtmu_v4s_v4s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_fcvtmu_v4s_v4s(dst, src)) } +emit_fcvtmu_v2d_v2d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_fcvtmu_v2d_v2d(dst, src)) } +emit_fcvtmu_v4h_v4h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_fcvtmu_v4h_v4h(dst, src)) } +emit_fcvtmu_v8h_v8h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_fcvtmu_v8h_v8h(dst, src)) } inst_frinta_r_r :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return inst_r_r(.FRINTA, dst, src) } inst_frinta_v2s_v2s :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .FRINTA, operand_count = 2, length = 4, ops = {op_v_2s(dst), op_v_2s(src), {}, {}, {}}} } inst_frinta_v4s_v4s :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .FRINTA, operand_count = 2, length = 4, ops = {op_v_4s(dst), op_v_4s(src), {}, {}, {}}} } @@ -912,15 +916,15 @@ inst_frinta_v8h_v8h :: #force_inline proc "contextless" (dst: Register inst_frinta_zh_p_zh :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8) -> Instruction { return Instruction{mnemonic = .FRINTA, operand_count = 3, length = 4, ops = {op_z_h(rz), op_reg(Register(REG_P | (u16(rz2) & 0xF))), op_z_h(rz3), {}, {}}} } inst_frinta_zs_p_zs :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8) -> Instruction { return Instruction{mnemonic = .FRINTA, operand_count = 3, length = 4, ops = {op_z_s(rz), op_reg(Register(REG_P | (u16(rz2) & 0xF))), op_z_s(rz3), {}, {}}} } inst_frinta_zd_p_zd :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8) -> Instruction { return Instruction{mnemonic = .FRINTA, operand_count = 3, length = 4, ops = {op_z_d(rz), op_reg(Register(REG_P | (u16(rz2) & 0xF))), op_z_d(rz3), {}, {}}} } -emit_frinta_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_frinta_r_r(dst, src)) } -emit_frinta_v2s_v2s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_frinta_v2s_v2s(dst, src)) } -emit_frinta_v4s_v4s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_frinta_v4s_v4s(dst, src)) } -emit_frinta_v2d_v2d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_frinta_v2d_v2d(dst, src)) } -emit_frinta_v4h_v4h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_frinta_v4h_v4h(dst, src)) } -emit_frinta_v8h_v8h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_frinta_v8h_v8h(dst, src)) } -emit_frinta_zh_p_zh :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append(instructions, inst_frinta_zh_p_zh(rz, rz2, rz3)) } -emit_frinta_zs_p_zs :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append(instructions, inst_frinta_zs_p_zs(rz, rz2, rz3)) } -emit_frinta_zd_p_zd :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append(instructions, inst_frinta_zd_p_zd(rz, rz2, rz3)) } +emit_frinta_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_frinta_r_r(dst, src)) } +emit_frinta_v2s_v2s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_frinta_v2s_v2s(dst, src)) } +emit_frinta_v4s_v4s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_frinta_v4s_v4s(dst, src)) } +emit_frinta_v2d_v2d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_frinta_v2d_v2d(dst, src)) } +emit_frinta_v4h_v4h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_frinta_v4h_v4h(dst, src)) } +emit_frinta_v8h_v8h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_frinta_v8h_v8h(dst, src)) } +emit_frinta_zh_p_zh :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append_elem(instructions, inst_frinta_zh_p_zh(rz, rz2, rz3)) } +emit_frinta_zs_p_zs :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append_elem(instructions, inst_frinta_zs_p_zs(rz, rz2, rz3)) } +emit_frinta_zd_p_zd :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append_elem(instructions, inst_frinta_zd_p_zd(rz, rz2, rz3)) } inst_frinti_r_r :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return inst_r_r(.FRINTI, dst, src) } inst_frinti_v2s_v2s :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .FRINTI, operand_count = 2, length = 4, ops = {op_v_2s(dst), op_v_2s(src), {}, {}, {}}} } inst_frinti_v4s_v4s :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .FRINTI, operand_count = 2, length = 4, ops = {op_v_4s(dst), op_v_4s(src), {}, {}, {}}} } @@ -930,15 +934,15 @@ inst_frinti_v8h_v8h :: #force_inline proc "contextless" (dst: Register inst_frinti_zh_p_zh :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8) -> Instruction { return Instruction{mnemonic = .FRINTI, operand_count = 3, length = 4, ops = {op_z_h(rz), op_reg(Register(REG_P | (u16(rz2) & 0xF))), op_z_h(rz3), {}, {}}} } inst_frinti_zs_p_zs :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8) -> Instruction { return Instruction{mnemonic = .FRINTI, operand_count = 3, length = 4, ops = {op_z_s(rz), op_reg(Register(REG_P | (u16(rz2) & 0xF))), op_z_s(rz3), {}, {}}} } inst_frinti_zd_p_zd :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8) -> Instruction { return Instruction{mnemonic = .FRINTI, operand_count = 3, length = 4, ops = {op_z_d(rz), op_reg(Register(REG_P | (u16(rz2) & 0xF))), op_z_d(rz3), {}, {}}} } -emit_frinti_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_frinti_r_r(dst, src)) } -emit_frinti_v2s_v2s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_frinti_v2s_v2s(dst, src)) } -emit_frinti_v4s_v4s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_frinti_v4s_v4s(dst, src)) } -emit_frinti_v2d_v2d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_frinti_v2d_v2d(dst, src)) } -emit_frinti_v4h_v4h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_frinti_v4h_v4h(dst, src)) } -emit_frinti_v8h_v8h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_frinti_v8h_v8h(dst, src)) } -emit_frinti_zh_p_zh :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append(instructions, inst_frinti_zh_p_zh(rz, rz2, rz3)) } -emit_frinti_zs_p_zs :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append(instructions, inst_frinti_zs_p_zs(rz, rz2, rz3)) } -emit_frinti_zd_p_zd :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append(instructions, inst_frinti_zd_p_zd(rz, rz2, rz3)) } +emit_frinti_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_frinti_r_r(dst, src)) } +emit_frinti_v2s_v2s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_frinti_v2s_v2s(dst, src)) } +emit_frinti_v4s_v4s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_frinti_v4s_v4s(dst, src)) } +emit_frinti_v2d_v2d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_frinti_v2d_v2d(dst, src)) } +emit_frinti_v4h_v4h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_frinti_v4h_v4h(dst, src)) } +emit_frinti_v8h_v8h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_frinti_v8h_v8h(dst, src)) } +emit_frinti_zh_p_zh :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append_elem(instructions, inst_frinti_zh_p_zh(rz, rz2, rz3)) } +emit_frinti_zs_p_zs :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append_elem(instructions, inst_frinti_zs_p_zs(rz, rz2, rz3)) } +emit_frinti_zd_p_zd :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append_elem(instructions, inst_frinti_zd_p_zd(rz, rz2, rz3)) } inst_frintm_r_r :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return inst_r_r(.FRINTM, dst, src) } inst_frintm_v2s_v2s :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .FRINTM, operand_count = 2, length = 4, ops = {op_v_2s(dst), op_v_2s(src), {}, {}, {}}} } inst_frintm_v4s_v4s :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .FRINTM, operand_count = 2, length = 4, ops = {op_v_4s(dst), op_v_4s(src), {}, {}, {}}} } @@ -948,15 +952,15 @@ inst_frintm_v8h_v8h :: #force_inline proc "contextless" (dst: Register inst_frintm_zh_p_zh :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8) -> Instruction { return Instruction{mnemonic = .FRINTM, operand_count = 3, length = 4, ops = {op_z_h(rz), op_reg(Register(REG_P | (u16(rz2) & 0xF))), op_z_h(rz3), {}, {}}} } inst_frintm_zs_p_zs :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8) -> Instruction { return Instruction{mnemonic = .FRINTM, operand_count = 3, length = 4, ops = {op_z_s(rz), op_reg(Register(REG_P | (u16(rz2) & 0xF))), op_z_s(rz3), {}, {}}} } inst_frintm_zd_p_zd :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8) -> Instruction { return Instruction{mnemonic = .FRINTM, operand_count = 3, length = 4, ops = {op_z_d(rz), op_reg(Register(REG_P | (u16(rz2) & 0xF))), op_z_d(rz3), {}, {}}} } -emit_frintm_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_frintm_r_r(dst, src)) } -emit_frintm_v2s_v2s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_frintm_v2s_v2s(dst, src)) } -emit_frintm_v4s_v4s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_frintm_v4s_v4s(dst, src)) } -emit_frintm_v2d_v2d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_frintm_v2d_v2d(dst, src)) } -emit_frintm_v4h_v4h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_frintm_v4h_v4h(dst, src)) } -emit_frintm_v8h_v8h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_frintm_v8h_v8h(dst, src)) } -emit_frintm_zh_p_zh :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append(instructions, inst_frintm_zh_p_zh(rz, rz2, rz3)) } -emit_frintm_zs_p_zs :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append(instructions, inst_frintm_zs_p_zs(rz, rz2, rz3)) } -emit_frintm_zd_p_zd :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append(instructions, inst_frintm_zd_p_zd(rz, rz2, rz3)) } +emit_frintm_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_frintm_r_r(dst, src)) } +emit_frintm_v2s_v2s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_frintm_v2s_v2s(dst, src)) } +emit_frintm_v4s_v4s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_frintm_v4s_v4s(dst, src)) } +emit_frintm_v2d_v2d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_frintm_v2d_v2d(dst, src)) } +emit_frintm_v4h_v4h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_frintm_v4h_v4h(dst, src)) } +emit_frintm_v8h_v8h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_frintm_v8h_v8h(dst, src)) } +emit_frintm_zh_p_zh :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append_elem(instructions, inst_frintm_zh_p_zh(rz, rz2, rz3)) } +emit_frintm_zs_p_zs :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append_elem(instructions, inst_frintm_zs_p_zs(rz, rz2, rz3)) } +emit_frintm_zd_p_zd :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append_elem(instructions, inst_frintm_zd_p_zd(rz, rz2, rz3)) } inst_frintn_r_r :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return inst_r_r(.FRINTN, dst, src) } inst_frintn_v2s_v2s :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .FRINTN, operand_count = 2, length = 4, ops = {op_v_2s(dst), op_v_2s(src), {}, {}, {}}} } inst_frintn_v4s_v4s :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .FRINTN, operand_count = 2, length = 4, ops = {op_v_4s(dst), op_v_4s(src), {}, {}, {}}} } @@ -966,15 +970,15 @@ inst_frintn_v8h_v8h :: #force_inline proc "contextless" (dst: Register inst_frintn_zh_p_zh :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8) -> Instruction { return Instruction{mnemonic = .FRINTN, operand_count = 3, length = 4, ops = {op_z_h(rz), op_reg(Register(REG_P | (u16(rz2) & 0xF))), op_z_h(rz3), {}, {}}} } inst_frintn_zs_p_zs :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8) -> Instruction { return Instruction{mnemonic = .FRINTN, operand_count = 3, length = 4, ops = {op_z_s(rz), op_reg(Register(REG_P | (u16(rz2) & 0xF))), op_z_s(rz3), {}, {}}} } inst_frintn_zd_p_zd :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8) -> Instruction { return Instruction{mnemonic = .FRINTN, operand_count = 3, length = 4, ops = {op_z_d(rz), op_reg(Register(REG_P | (u16(rz2) & 0xF))), op_z_d(rz3), {}, {}}} } -emit_frintn_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_frintn_r_r(dst, src)) } -emit_frintn_v2s_v2s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_frintn_v2s_v2s(dst, src)) } -emit_frintn_v4s_v4s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_frintn_v4s_v4s(dst, src)) } -emit_frintn_v2d_v2d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_frintn_v2d_v2d(dst, src)) } -emit_frintn_v4h_v4h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_frintn_v4h_v4h(dst, src)) } -emit_frintn_v8h_v8h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_frintn_v8h_v8h(dst, src)) } -emit_frintn_zh_p_zh :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append(instructions, inst_frintn_zh_p_zh(rz, rz2, rz3)) } -emit_frintn_zs_p_zs :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append(instructions, inst_frintn_zs_p_zs(rz, rz2, rz3)) } -emit_frintn_zd_p_zd :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append(instructions, inst_frintn_zd_p_zd(rz, rz2, rz3)) } +emit_frintn_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_frintn_r_r(dst, src)) } +emit_frintn_v2s_v2s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_frintn_v2s_v2s(dst, src)) } +emit_frintn_v4s_v4s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_frintn_v4s_v4s(dst, src)) } +emit_frintn_v2d_v2d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_frintn_v2d_v2d(dst, src)) } +emit_frintn_v4h_v4h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_frintn_v4h_v4h(dst, src)) } +emit_frintn_v8h_v8h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_frintn_v8h_v8h(dst, src)) } +emit_frintn_zh_p_zh :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append_elem(instructions, inst_frintn_zh_p_zh(rz, rz2, rz3)) } +emit_frintn_zs_p_zs :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append_elem(instructions, inst_frintn_zs_p_zs(rz, rz2, rz3)) } +emit_frintn_zd_p_zd :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append_elem(instructions, inst_frintn_zd_p_zd(rz, rz2, rz3)) } inst_frintp_r_r :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return inst_r_r(.FRINTP, dst, src) } inst_frintp_v2s_v2s :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .FRINTP, operand_count = 2, length = 4, ops = {op_v_2s(dst), op_v_2s(src), {}, {}, {}}} } inst_frintp_v4s_v4s :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .FRINTP, operand_count = 2, length = 4, ops = {op_v_4s(dst), op_v_4s(src), {}, {}, {}}} } @@ -984,15 +988,15 @@ inst_frintp_v8h_v8h :: #force_inline proc "contextless" (dst: Register inst_frintp_zh_p_zh :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8) -> Instruction { return Instruction{mnemonic = .FRINTP, operand_count = 3, length = 4, ops = {op_z_h(rz), op_reg(Register(REG_P | (u16(rz2) & 0xF))), op_z_h(rz3), {}, {}}} } inst_frintp_zs_p_zs :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8) -> Instruction { return Instruction{mnemonic = .FRINTP, operand_count = 3, length = 4, ops = {op_z_s(rz), op_reg(Register(REG_P | (u16(rz2) & 0xF))), op_z_s(rz3), {}, {}}} } inst_frintp_zd_p_zd :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8) -> Instruction { return Instruction{mnemonic = .FRINTP, operand_count = 3, length = 4, ops = {op_z_d(rz), op_reg(Register(REG_P | (u16(rz2) & 0xF))), op_z_d(rz3), {}, {}}} } -emit_frintp_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_frintp_r_r(dst, src)) } -emit_frintp_v2s_v2s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_frintp_v2s_v2s(dst, src)) } -emit_frintp_v4s_v4s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_frintp_v4s_v4s(dst, src)) } -emit_frintp_v2d_v2d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_frintp_v2d_v2d(dst, src)) } -emit_frintp_v4h_v4h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_frintp_v4h_v4h(dst, src)) } -emit_frintp_v8h_v8h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_frintp_v8h_v8h(dst, src)) } -emit_frintp_zh_p_zh :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append(instructions, inst_frintp_zh_p_zh(rz, rz2, rz3)) } -emit_frintp_zs_p_zs :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append(instructions, inst_frintp_zs_p_zs(rz, rz2, rz3)) } -emit_frintp_zd_p_zd :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append(instructions, inst_frintp_zd_p_zd(rz, rz2, rz3)) } +emit_frintp_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_frintp_r_r(dst, src)) } +emit_frintp_v2s_v2s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_frintp_v2s_v2s(dst, src)) } +emit_frintp_v4s_v4s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_frintp_v4s_v4s(dst, src)) } +emit_frintp_v2d_v2d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_frintp_v2d_v2d(dst, src)) } +emit_frintp_v4h_v4h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_frintp_v4h_v4h(dst, src)) } +emit_frintp_v8h_v8h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_frintp_v8h_v8h(dst, src)) } +emit_frintp_zh_p_zh :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append_elem(instructions, inst_frintp_zh_p_zh(rz, rz2, rz3)) } +emit_frintp_zs_p_zs :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append_elem(instructions, inst_frintp_zs_p_zs(rz, rz2, rz3)) } +emit_frintp_zd_p_zd :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append_elem(instructions, inst_frintp_zd_p_zd(rz, rz2, rz3)) } inst_frintx_r_r :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return inst_r_r(.FRINTX, dst, src) } inst_frintx_v2s_v2s :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .FRINTX, operand_count = 2, length = 4, ops = {op_v_2s(dst), op_v_2s(src), {}, {}, {}}} } inst_frintx_v4s_v4s :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .FRINTX, operand_count = 2, length = 4, ops = {op_v_4s(dst), op_v_4s(src), {}, {}, {}}} } @@ -1002,15 +1006,15 @@ inst_frintx_v8h_v8h :: #force_inline proc "contextless" (dst: Register inst_frintx_zh_p_zh :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8) -> Instruction { return Instruction{mnemonic = .FRINTX, operand_count = 3, length = 4, ops = {op_z_h(rz), op_reg(Register(REG_P | (u16(rz2) & 0xF))), op_z_h(rz3), {}, {}}} } inst_frintx_zs_p_zs :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8) -> Instruction { return Instruction{mnemonic = .FRINTX, operand_count = 3, length = 4, ops = {op_z_s(rz), op_reg(Register(REG_P | (u16(rz2) & 0xF))), op_z_s(rz3), {}, {}}} } inst_frintx_zd_p_zd :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8) -> Instruction { return Instruction{mnemonic = .FRINTX, operand_count = 3, length = 4, ops = {op_z_d(rz), op_reg(Register(REG_P | (u16(rz2) & 0xF))), op_z_d(rz3), {}, {}}} } -emit_frintx_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_frintx_r_r(dst, src)) } -emit_frintx_v2s_v2s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_frintx_v2s_v2s(dst, src)) } -emit_frintx_v4s_v4s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_frintx_v4s_v4s(dst, src)) } -emit_frintx_v2d_v2d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_frintx_v2d_v2d(dst, src)) } -emit_frintx_v4h_v4h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_frintx_v4h_v4h(dst, src)) } -emit_frintx_v8h_v8h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_frintx_v8h_v8h(dst, src)) } -emit_frintx_zh_p_zh :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append(instructions, inst_frintx_zh_p_zh(rz, rz2, rz3)) } -emit_frintx_zs_p_zs :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append(instructions, inst_frintx_zs_p_zs(rz, rz2, rz3)) } -emit_frintx_zd_p_zd :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append(instructions, inst_frintx_zd_p_zd(rz, rz2, rz3)) } +emit_frintx_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_frintx_r_r(dst, src)) } +emit_frintx_v2s_v2s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_frintx_v2s_v2s(dst, src)) } +emit_frintx_v4s_v4s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_frintx_v4s_v4s(dst, src)) } +emit_frintx_v2d_v2d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_frintx_v2d_v2d(dst, src)) } +emit_frintx_v4h_v4h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_frintx_v4h_v4h(dst, src)) } +emit_frintx_v8h_v8h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_frintx_v8h_v8h(dst, src)) } +emit_frintx_zh_p_zh :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append_elem(instructions, inst_frintx_zh_p_zh(rz, rz2, rz3)) } +emit_frintx_zs_p_zs :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append_elem(instructions, inst_frintx_zs_p_zs(rz, rz2, rz3)) } +emit_frintx_zd_p_zd :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append_elem(instructions, inst_frintx_zd_p_zd(rz, rz2, rz3)) } inst_frintz_r_r :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return inst_r_r(.FRINTZ, dst, src) } inst_frintz_v2s_v2s :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .FRINTZ, operand_count = 2, length = 4, ops = {op_v_2s(dst), op_v_2s(src), {}, {}, {}}} } inst_frintz_v4s_v4s :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .FRINTZ, operand_count = 2, length = 4, ops = {op_v_4s(dst), op_v_4s(src), {}, {}, {}}} } @@ -1020,409 +1024,409 @@ inst_frintz_v8h_v8h :: #force_inline proc "contextless" (dst: Register inst_frintz_zh_p_zh :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8) -> Instruction { return Instruction{mnemonic = .FRINTZ, operand_count = 3, length = 4, ops = {op_z_h(rz), op_reg(Register(REG_P | (u16(rz2) & 0xF))), op_z_h(rz3), {}, {}}} } inst_frintz_zs_p_zs :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8) -> Instruction { return Instruction{mnemonic = .FRINTZ, operand_count = 3, length = 4, ops = {op_z_s(rz), op_reg(Register(REG_P | (u16(rz2) & 0xF))), op_z_s(rz3), {}, {}}} } inst_frintz_zd_p_zd :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8) -> Instruction { return Instruction{mnemonic = .FRINTZ, operand_count = 3, length = 4, ops = {op_z_d(rz), op_reg(Register(REG_P | (u16(rz2) & 0xF))), op_z_d(rz3), {}, {}}} } -emit_frintz_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_frintz_r_r(dst, src)) } -emit_frintz_v2s_v2s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_frintz_v2s_v2s(dst, src)) } -emit_frintz_v4s_v4s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_frintz_v4s_v4s(dst, src)) } -emit_frintz_v2d_v2d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_frintz_v2d_v2d(dst, src)) } -emit_frintz_v4h_v4h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_frintz_v4h_v4h(dst, src)) } -emit_frintz_v8h_v8h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_frintz_v8h_v8h(dst, src)) } -emit_frintz_zh_p_zh :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append(instructions, inst_frintz_zh_p_zh(rz, rz2, rz3)) } -emit_frintz_zs_p_zs :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append(instructions, inst_frintz_zs_p_zs(rz, rz2, rz3)) } -emit_frintz_zd_p_zd :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append(instructions, inst_frintz_zd_p_zd(rz, rz2, rz3)) } +emit_frintz_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_frintz_r_r(dst, src)) } +emit_frintz_v2s_v2s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_frintz_v2s_v2s(dst, src)) } +emit_frintz_v4s_v4s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_frintz_v4s_v4s(dst, src)) } +emit_frintz_v2d_v2d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_frintz_v2d_v2d(dst, src)) } +emit_frintz_v4h_v4h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_frintz_v4h_v4h(dst, src)) } +emit_frintz_v8h_v8h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_frintz_v8h_v8h(dst, src)) } +emit_frintz_zh_p_zh :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append_elem(instructions, inst_frintz_zh_p_zh(rz, rz2, rz3)) } +emit_frintz_zs_p_zs :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append_elem(instructions, inst_frintz_zs_p_zs(rz, rz2, rz3)) } +emit_frintz_zd_p_zd :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append_elem(instructions, inst_frintz_zd_p_zd(rz, rz2, rz3)) } inst_tst_r_i :: #force_inline proc "contextless" (dst: Register, imm: i64) -> Instruction { return inst_r_i(.TST, dst, imm) } inst_tst_r_sh :: #force_inline proc "contextless" (dst: Register, src: Register, src_shift: Shift_Type, src_amount: u8) -> Instruction { return Instruction{mnemonic = .TST, operand_count = 2, length = 4, ops = {op_reg(dst), op_shifted(src, src_shift, src_amount), {}, {}, {}}} } -emit_tst_r_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64) { append(instructions, inst_tst_r_i(dst, imm)) } -emit_tst_r_sh :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src_shift: Shift_Type, src_amount: u8) { append(instructions, inst_tst_r_sh(dst, src, src_shift, src_amount)) } +emit_tst_r_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64) { append_elem(instructions, inst_tst_r_i(dst, imm)) } +emit_tst_r_sh :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src_shift: Shift_Type, src_amount: u8) { append_elem(instructions, inst_tst_r_sh(dst, src, src_shift, src_amount)) } inst_ldur_r_m :: #force_inline proc "contextless" (dst: Register, mem: Memory) -> Instruction { return inst_ldst(.LDUR, dst, mem) } -emit_ldur_r_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, mem: Memory) { append(instructions, inst_ldur_r_m(dst, mem)) } +emit_ldur_r_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, mem: Memory) { append_elem(instructions, inst_ldur_r_m(dst, mem)) } inst_stur_r_m :: #force_inline proc "contextless" (dst: Register, mem: Memory) -> Instruction { return inst_ldst(.STUR, dst, mem) } -emit_stur_r_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, mem: Memory) { append(instructions, inst_stur_r_m(dst, mem)) } +emit_stur_r_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, mem: Memory) { append_elem(instructions, inst_stur_r_m(dst, mem)) } inst_ldurb_r_m :: #force_inline proc "contextless" (dst: Register, mem: Memory) -> Instruction { return inst_ldst(.LDURB, dst, mem) } -emit_ldurb_r_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, mem: Memory) { append(instructions, inst_ldurb_r_m(dst, mem)) } +emit_ldurb_r_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, mem: Memory) { append_elem(instructions, inst_ldurb_r_m(dst, mem)) } inst_sturb_r_m :: #force_inline proc "contextless" (dst: Register, mem: Memory) -> Instruction { return inst_ldst(.STURB, dst, mem) } -emit_sturb_r_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, mem: Memory) { append(instructions, inst_sturb_r_m(dst, mem)) } +emit_sturb_r_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, mem: Memory) { append_elem(instructions, inst_sturb_r_m(dst, mem)) } inst_ldursb_r_m :: #force_inline proc "contextless" (dst: Register, mem: Memory) -> Instruction { return inst_ldst(.LDURSB, dst, mem) } -emit_ldursb_r_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, mem: Memory) { append(instructions, inst_ldursb_r_m(dst, mem)) } +emit_ldursb_r_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, mem: Memory) { append_elem(instructions, inst_ldursb_r_m(dst, mem)) } inst_ldurh_r_m :: #force_inline proc "contextless" (dst: Register, mem: Memory) -> Instruction { return inst_ldst(.LDURH, dst, mem) } -emit_ldurh_r_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, mem: Memory) { append(instructions, inst_ldurh_r_m(dst, mem)) } +emit_ldurh_r_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, mem: Memory) { append_elem(instructions, inst_ldurh_r_m(dst, mem)) } inst_sturh_r_m :: #force_inline proc "contextless" (dst: Register, mem: Memory) -> Instruction { return inst_ldst(.STURH, dst, mem) } -emit_sturh_r_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, mem: Memory) { append(instructions, inst_sturh_r_m(dst, mem)) } +emit_sturh_r_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, mem: Memory) { append_elem(instructions, inst_sturh_r_m(dst, mem)) } inst_ldursh_r_m :: #force_inline proc "contextless" (dst: Register, mem: Memory) -> Instruction { return inst_ldst(.LDURSH, dst, mem) } -emit_ldursh_r_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, mem: Memory) { append(instructions, inst_ldursh_r_m(dst, mem)) } +emit_ldursh_r_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, mem: Memory) { append_elem(instructions, inst_ldursh_r_m(dst, mem)) } inst_ldursw_r_m :: #force_inline proc "contextless" (dst: Register, mem: Memory) -> Instruction { return inst_ldst(.LDURSW, dst, mem) } -emit_ldursw_r_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, mem: Memory) { append(instructions, inst_ldursw_r_m(dst, mem)) } +emit_ldursw_r_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, mem: Memory) { append_elem(instructions, inst_ldursw_r_m(dst, mem)) } inst_ldnp_r_r_m :: #force_inline proc "contextless" (dst: Register, src: Register, mem: Memory) -> Instruction { return inst_ldp_stp(.LDNP, dst, src, mem) } -emit_ldnp_r_r_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, mem: Memory) { append(instructions, inst_ldnp_r_r_m(dst, src, mem)) } +emit_ldnp_r_r_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, mem: Memory) { append_elem(instructions, inst_ldnp_r_r_m(dst, src, mem)) } inst_stnp_r_r_m :: #force_inline proc "contextless" (dst: Register, src: Register, mem: Memory) -> Instruction { return inst_ldp_stp(.STNP, dst, src, mem) } -emit_stnp_r_r_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, mem: Memory) { append(instructions, inst_stnp_r_r_m(dst, src, mem)) } +emit_stnp_r_r_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, mem: Memory) { append_elem(instructions, inst_stnp_r_r_m(dst, src, mem)) } inst_ldxp_r_r_m :: #force_inline proc "contextless" (dst: Register, src: Register, mem: Memory) -> Instruction { return inst_ldp_stp(.LDXP, dst, src, mem) } -emit_ldxp_r_r_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, mem: Memory) { append(instructions, inst_ldxp_r_r_m(dst, src, mem)) } +emit_ldxp_r_r_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, mem: Memory) { append_elem(instructions, inst_ldxp_r_r_m(dst, src, mem)) } inst_stxp_r_r_r_m :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register, mem: Memory) -> Instruction { return Instruction{mnemonic = .STXP, operand_count = 4, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), op_mem(mem), {}}} } -emit_stxp_r_r_r_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, mem: Memory) { append(instructions, inst_stxp_r_r_r_m(dst, src, src2, mem)) } +emit_stxp_r_r_r_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, mem: Memory) { append_elem(instructions, inst_stxp_r_r_r_m(dst, src, src2, mem)) } inst_ldaxp_r_r_m :: #force_inline proc "contextless" (dst: Register, src: Register, mem: Memory) -> Instruction { return inst_ldp_stp(.LDAXP, dst, src, mem) } -emit_ldaxp_r_r_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, mem: Memory) { append(instructions, inst_ldaxp_r_r_m(dst, src, mem)) } +emit_ldaxp_r_r_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, mem: Memory) { append_elem(instructions, inst_ldaxp_r_r_m(dst, src, mem)) } inst_stlxp_r_r_r_m :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register, mem: Memory) -> Instruction { return Instruction{mnemonic = .STLXP, operand_count = 4, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), op_mem(mem), {}}} } -emit_stlxp_r_r_r_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, mem: Memory) { append(instructions, inst_stlxp_r_r_r_m(dst, src, src2, mem)) } +emit_stlxp_r_r_r_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, mem: Memory) { append_elem(instructions, inst_stlxp_r_r_r_m(dst, src, src2, mem)) } inst_ldxrb_r_m :: #force_inline proc "contextless" (dst: Register, mem: Memory) -> Instruction { return inst_ldst(.LDXRB, dst, mem) } -emit_ldxrb_r_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, mem: Memory) { append(instructions, inst_ldxrb_r_m(dst, mem)) } +emit_ldxrb_r_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, mem: Memory) { append_elem(instructions, inst_ldxrb_r_m(dst, mem)) } inst_stxrb_r_r_m :: #force_inline proc "contextless" (dst: Register, src: Register, mem: Memory) -> Instruction { return inst_ldp_stp(.STXRB, dst, src, mem) } -emit_stxrb_r_r_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, mem: Memory) { append(instructions, inst_stxrb_r_r_m(dst, src, mem)) } +emit_stxrb_r_r_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, mem: Memory) { append_elem(instructions, inst_stxrb_r_r_m(dst, src, mem)) } inst_ldaxrb_r_m :: #force_inline proc "contextless" (dst: Register, mem: Memory) -> Instruction { return inst_ldst(.LDAXRB, dst, mem) } -emit_ldaxrb_r_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, mem: Memory) { append(instructions, inst_ldaxrb_r_m(dst, mem)) } +emit_ldaxrb_r_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, mem: Memory) { append_elem(instructions, inst_ldaxrb_r_m(dst, mem)) } inst_stlxrb_r_r_m :: #force_inline proc "contextless" (dst: Register, src: Register, mem: Memory) -> Instruction { return inst_ldp_stp(.STLXRB, dst, src, mem) } -emit_stlxrb_r_r_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, mem: Memory) { append(instructions, inst_stlxrb_r_r_m(dst, src, mem)) } +emit_stlxrb_r_r_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, mem: Memory) { append_elem(instructions, inst_stlxrb_r_r_m(dst, src, mem)) } inst_ldxrh_r_m :: #force_inline proc "contextless" (dst: Register, mem: Memory) -> Instruction { return inst_ldst(.LDXRH, dst, mem) } -emit_ldxrh_r_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, mem: Memory) { append(instructions, inst_ldxrh_r_m(dst, mem)) } +emit_ldxrh_r_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, mem: Memory) { append_elem(instructions, inst_ldxrh_r_m(dst, mem)) } inst_stxrh_r_r_m :: #force_inline proc "contextless" (dst: Register, src: Register, mem: Memory) -> Instruction { return inst_ldp_stp(.STXRH, dst, src, mem) } -emit_stxrh_r_r_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, mem: Memory) { append(instructions, inst_stxrh_r_r_m(dst, src, mem)) } +emit_stxrh_r_r_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, mem: Memory) { append_elem(instructions, inst_stxrh_r_r_m(dst, src, mem)) } inst_ldaxrh_r_m :: #force_inline proc "contextless" (dst: Register, mem: Memory) -> Instruction { return inst_ldst(.LDAXRH, dst, mem) } -emit_ldaxrh_r_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, mem: Memory) { append(instructions, inst_ldaxrh_r_m(dst, mem)) } +emit_ldaxrh_r_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, mem: Memory) { append_elem(instructions, inst_ldaxrh_r_m(dst, mem)) } inst_stlxrh_r_r_m :: #force_inline proc "contextless" (dst: Register, src: Register, mem: Memory) -> Instruction { return inst_ldp_stp(.STLXRH, dst, src, mem) } -emit_stlxrh_r_r_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, mem: Memory) { append(instructions, inst_stlxrh_r_r_m(dst, src, mem)) } +emit_stlxrh_r_r_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, mem: Memory) { append_elem(instructions, inst_stlxrh_r_r_m(dst, src, mem)) } inst_ldapr_r_m :: #force_inline proc "contextless" (dst: Register, mem: Memory) -> Instruction { return inst_ldst(.LDAPR, dst, mem) } -emit_ldapr_r_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, mem: Memory) { append(instructions, inst_ldapr_r_m(dst, mem)) } +emit_ldapr_r_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, mem: Memory) { append_elem(instructions, inst_ldapr_r_m(dst, mem)) } inst_ldaprb_r_m :: #force_inline proc "contextless" (dst: Register, mem: Memory) -> Instruction { return inst_ldst(.LDAPRB, dst, mem) } -emit_ldaprb_r_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, mem: Memory) { append(instructions, inst_ldaprb_r_m(dst, mem)) } +emit_ldaprb_r_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, mem: Memory) { append_elem(instructions, inst_ldaprb_r_m(dst, mem)) } inst_ldaprh_r_m :: #force_inline proc "contextless" (dst: Register, mem: Memory) -> Instruction { return inst_ldst(.LDAPRH, dst, mem) } -emit_ldaprh_r_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, mem: Memory) { append(instructions, inst_ldaprh_r_m(dst, mem)) } +emit_ldaprh_r_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, mem: Memory) { append_elem(instructions, inst_ldaprh_r_m(dst, mem)) } inst_ldadd_r_r_m :: #force_inline proc "contextless" (dst: Register, src: Register, mem: Memory) -> Instruction { return inst_ldp_stp(.LDADD, dst, src, mem) } -emit_ldadd_r_r_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, mem: Memory) { append(instructions, inst_ldadd_r_r_m(dst, src, mem)) } +emit_ldadd_r_r_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, mem: Memory) { append_elem(instructions, inst_ldadd_r_r_m(dst, src, mem)) } inst_ldadda_r_r_m :: #force_inline proc "contextless" (dst: Register, src: Register, mem: Memory) -> Instruction { return inst_ldp_stp(.LDADDA, dst, src, mem) } -emit_ldadda_r_r_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, mem: Memory) { append(instructions, inst_ldadda_r_r_m(dst, src, mem)) } +emit_ldadda_r_r_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, mem: Memory) { append_elem(instructions, inst_ldadda_r_r_m(dst, src, mem)) } inst_ldaddl_r_r_m :: #force_inline proc "contextless" (dst: Register, src: Register, mem: Memory) -> Instruction { return inst_ldp_stp(.LDADDL, dst, src, mem) } -emit_ldaddl_r_r_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, mem: Memory) { append(instructions, inst_ldaddl_r_r_m(dst, src, mem)) } +emit_ldaddl_r_r_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, mem: Memory) { append_elem(instructions, inst_ldaddl_r_r_m(dst, src, mem)) } inst_ldaddal_r_r_m :: #force_inline proc "contextless" (dst: Register, src: Register, mem: Memory) -> Instruction { return inst_ldp_stp(.LDADDAL, dst, src, mem) } -emit_ldaddal_r_r_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, mem: Memory) { append(instructions, inst_ldaddal_r_r_m(dst, src, mem)) } +emit_ldaddal_r_r_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, mem: Memory) { append_elem(instructions, inst_ldaddal_r_r_m(dst, src, mem)) } inst_ldclr_r_r_m :: #force_inline proc "contextless" (dst: Register, src: Register, mem: Memory) -> Instruction { return inst_ldp_stp(.LDCLR, dst, src, mem) } -emit_ldclr_r_r_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, mem: Memory) { append(instructions, inst_ldclr_r_r_m(dst, src, mem)) } +emit_ldclr_r_r_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, mem: Memory) { append_elem(instructions, inst_ldclr_r_r_m(dst, src, mem)) } inst_ldclra_r_r_m :: #force_inline proc "contextless" (dst: Register, src: Register, mem: Memory) -> Instruction { return inst_ldp_stp(.LDCLRA, dst, src, mem) } -emit_ldclra_r_r_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, mem: Memory) { append(instructions, inst_ldclra_r_r_m(dst, src, mem)) } +emit_ldclra_r_r_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, mem: Memory) { append_elem(instructions, inst_ldclra_r_r_m(dst, src, mem)) } inst_ldclrl_r_r_m :: #force_inline proc "contextless" (dst: Register, src: Register, mem: Memory) -> Instruction { return inst_ldp_stp(.LDCLRL, dst, src, mem) } -emit_ldclrl_r_r_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, mem: Memory) { append(instructions, inst_ldclrl_r_r_m(dst, src, mem)) } +emit_ldclrl_r_r_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, mem: Memory) { append_elem(instructions, inst_ldclrl_r_r_m(dst, src, mem)) } inst_ldclral_r_r_m :: #force_inline proc "contextless" (dst: Register, src: Register, mem: Memory) -> Instruction { return inst_ldp_stp(.LDCLRAL, dst, src, mem) } -emit_ldclral_r_r_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, mem: Memory) { append(instructions, inst_ldclral_r_r_m(dst, src, mem)) } +emit_ldclral_r_r_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, mem: Memory) { append_elem(instructions, inst_ldclral_r_r_m(dst, src, mem)) } inst_ldeor_r_r_m :: #force_inline proc "contextless" (dst: Register, src: Register, mem: Memory) -> Instruction { return inst_ldp_stp(.LDEOR, dst, src, mem) } -emit_ldeor_r_r_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, mem: Memory) { append(instructions, inst_ldeor_r_r_m(dst, src, mem)) } +emit_ldeor_r_r_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, mem: Memory) { append_elem(instructions, inst_ldeor_r_r_m(dst, src, mem)) } inst_ldeora_r_r_m :: #force_inline proc "contextless" (dst: Register, src: Register, mem: Memory) -> Instruction { return inst_ldp_stp(.LDEORA, dst, src, mem) } -emit_ldeora_r_r_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, mem: Memory) { append(instructions, inst_ldeora_r_r_m(dst, src, mem)) } +emit_ldeora_r_r_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, mem: Memory) { append_elem(instructions, inst_ldeora_r_r_m(dst, src, mem)) } inst_ldeorl_r_r_m :: #force_inline proc "contextless" (dst: Register, src: Register, mem: Memory) -> Instruction { return inst_ldp_stp(.LDEORL, dst, src, mem) } -emit_ldeorl_r_r_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, mem: Memory) { append(instructions, inst_ldeorl_r_r_m(dst, src, mem)) } +emit_ldeorl_r_r_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, mem: Memory) { append_elem(instructions, inst_ldeorl_r_r_m(dst, src, mem)) } inst_ldeoral_r_r_m :: #force_inline proc "contextless" (dst: Register, src: Register, mem: Memory) -> Instruction { return inst_ldp_stp(.LDEORAL, dst, src, mem) } -emit_ldeoral_r_r_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, mem: Memory) { append(instructions, inst_ldeoral_r_r_m(dst, src, mem)) } +emit_ldeoral_r_r_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, mem: Memory) { append_elem(instructions, inst_ldeoral_r_r_m(dst, src, mem)) } inst_ldset_r_r_m :: #force_inline proc "contextless" (dst: Register, src: Register, mem: Memory) -> Instruction { return inst_ldp_stp(.LDSET, dst, src, mem) } -emit_ldset_r_r_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, mem: Memory) { append(instructions, inst_ldset_r_r_m(dst, src, mem)) } +emit_ldset_r_r_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, mem: Memory) { append_elem(instructions, inst_ldset_r_r_m(dst, src, mem)) } inst_ldseta_r_r_m :: #force_inline proc "contextless" (dst: Register, src: Register, mem: Memory) -> Instruction { return inst_ldp_stp(.LDSETA, dst, src, mem) } -emit_ldseta_r_r_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, mem: Memory) { append(instructions, inst_ldseta_r_r_m(dst, src, mem)) } +emit_ldseta_r_r_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, mem: Memory) { append_elem(instructions, inst_ldseta_r_r_m(dst, src, mem)) } inst_ldsetl_r_r_m :: #force_inline proc "contextless" (dst: Register, src: Register, mem: Memory) -> Instruction { return inst_ldp_stp(.LDSETL, dst, src, mem) } -emit_ldsetl_r_r_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, mem: Memory) { append(instructions, inst_ldsetl_r_r_m(dst, src, mem)) } +emit_ldsetl_r_r_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, mem: Memory) { append_elem(instructions, inst_ldsetl_r_r_m(dst, src, mem)) } inst_ldsetal_r_r_m :: #force_inline proc "contextless" (dst: Register, src: Register, mem: Memory) -> Instruction { return inst_ldp_stp(.LDSETAL, dst, src, mem) } -emit_ldsetal_r_r_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, mem: Memory) { append(instructions, inst_ldsetal_r_r_m(dst, src, mem)) } +emit_ldsetal_r_r_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, mem: Memory) { append_elem(instructions, inst_ldsetal_r_r_m(dst, src, mem)) } inst_ldsmax_r_r_m :: #force_inline proc "contextless" (dst: Register, src: Register, mem: Memory) -> Instruction { return inst_ldp_stp(.LDSMAX, dst, src, mem) } -emit_ldsmax_r_r_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, mem: Memory) { append(instructions, inst_ldsmax_r_r_m(dst, src, mem)) } +emit_ldsmax_r_r_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, mem: Memory) { append_elem(instructions, inst_ldsmax_r_r_m(dst, src, mem)) } inst_ldsmaxa_r_r_m :: #force_inline proc "contextless" (dst: Register, src: Register, mem: Memory) -> Instruction { return inst_ldp_stp(.LDSMAXA, dst, src, mem) } -emit_ldsmaxa_r_r_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, mem: Memory) { append(instructions, inst_ldsmaxa_r_r_m(dst, src, mem)) } +emit_ldsmaxa_r_r_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, mem: Memory) { append_elem(instructions, inst_ldsmaxa_r_r_m(dst, src, mem)) } inst_ldsmaxl_r_r_m :: #force_inline proc "contextless" (dst: Register, src: Register, mem: Memory) -> Instruction { return inst_ldp_stp(.LDSMAXL, dst, src, mem) } -emit_ldsmaxl_r_r_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, mem: Memory) { append(instructions, inst_ldsmaxl_r_r_m(dst, src, mem)) } +emit_ldsmaxl_r_r_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, mem: Memory) { append_elem(instructions, inst_ldsmaxl_r_r_m(dst, src, mem)) } inst_ldsmaxal_r_r_m :: #force_inline proc "contextless" (dst: Register, src: Register, mem: Memory) -> Instruction { return inst_ldp_stp(.LDSMAXAL, dst, src, mem) } -emit_ldsmaxal_r_r_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, mem: Memory) { append(instructions, inst_ldsmaxal_r_r_m(dst, src, mem)) } +emit_ldsmaxal_r_r_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, mem: Memory) { append_elem(instructions, inst_ldsmaxal_r_r_m(dst, src, mem)) } inst_ldsmin_r_r_m :: #force_inline proc "contextless" (dst: Register, src: Register, mem: Memory) -> Instruction { return inst_ldp_stp(.LDSMIN, dst, src, mem) } -emit_ldsmin_r_r_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, mem: Memory) { append(instructions, inst_ldsmin_r_r_m(dst, src, mem)) } +emit_ldsmin_r_r_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, mem: Memory) { append_elem(instructions, inst_ldsmin_r_r_m(dst, src, mem)) } inst_ldsmina_r_r_m :: #force_inline proc "contextless" (dst: Register, src: Register, mem: Memory) -> Instruction { return inst_ldp_stp(.LDSMINA, dst, src, mem) } -emit_ldsmina_r_r_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, mem: Memory) { append(instructions, inst_ldsmina_r_r_m(dst, src, mem)) } +emit_ldsmina_r_r_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, mem: Memory) { append_elem(instructions, inst_ldsmina_r_r_m(dst, src, mem)) } inst_ldsminl_r_r_m :: #force_inline proc "contextless" (dst: Register, src: Register, mem: Memory) -> Instruction { return inst_ldp_stp(.LDSMINL, dst, src, mem) } -emit_ldsminl_r_r_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, mem: Memory) { append(instructions, inst_ldsminl_r_r_m(dst, src, mem)) } +emit_ldsminl_r_r_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, mem: Memory) { append_elem(instructions, inst_ldsminl_r_r_m(dst, src, mem)) } inst_ldsminal_r_r_m :: #force_inline proc "contextless" (dst: Register, src: Register, mem: Memory) -> Instruction { return inst_ldp_stp(.LDSMINAL, dst, src, mem) } -emit_ldsminal_r_r_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, mem: Memory) { append(instructions, inst_ldsminal_r_r_m(dst, src, mem)) } +emit_ldsminal_r_r_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, mem: Memory) { append_elem(instructions, inst_ldsminal_r_r_m(dst, src, mem)) } inst_ldumax_r_r_m :: #force_inline proc "contextless" (dst: Register, src: Register, mem: Memory) -> Instruction { return inst_ldp_stp(.LDUMAX, dst, src, mem) } -emit_ldumax_r_r_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, mem: Memory) { append(instructions, inst_ldumax_r_r_m(dst, src, mem)) } +emit_ldumax_r_r_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, mem: Memory) { append_elem(instructions, inst_ldumax_r_r_m(dst, src, mem)) } inst_ldumaxa_r_r_m :: #force_inline proc "contextless" (dst: Register, src: Register, mem: Memory) -> Instruction { return inst_ldp_stp(.LDUMAXA, dst, src, mem) } -emit_ldumaxa_r_r_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, mem: Memory) { append(instructions, inst_ldumaxa_r_r_m(dst, src, mem)) } +emit_ldumaxa_r_r_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, mem: Memory) { append_elem(instructions, inst_ldumaxa_r_r_m(dst, src, mem)) } inst_ldumaxl_r_r_m :: #force_inline proc "contextless" (dst: Register, src: Register, mem: Memory) -> Instruction { return inst_ldp_stp(.LDUMAXL, dst, src, mem) } -emit_ldumaxl_r_r_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, mem: Memory) { append(instructions, inst_ldumaxl_r_r_m(dst, src, mem)) } +emit_ldumaxl_r_r_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, mem: Memory) { append_elem(instructions, inst_ldumaxl_r_r_m(dst, src, mem)) } inst_ldumaxal_r_r_m :: #force_inline proc "contextless" (dst: Register, src: Register, mem: Memory) -> Instruction { return inst_ldp_stp(.LDUMAXAL, dst, src, mem) } -emit_ldumaxal_r_r_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, mem: Memory) { append(instructions, inst_ldumaxal_r_r_m(dst, src, mem)) } +emit_ldumaxal_r_r_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, mem: Memory) { append_elem(instructions, inst_ldumaxal_r_r_m(dst, src, mem)) } inst_ldumin_r_r_m :: #force_inline proc "contextless" (dst: Register, src: Register, mem: Memory) -> Instruction { return inst_ldp_stp(.LDUMIN, dst, src, mem) } -emit_ldumin_r_r_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, mem: Memory) { append(instructions, inst_ldumin_r_r_m(dst, src, mem)) } +emit_ldumin_r_r_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, mem: Memory) { append_elem(instructions, inst_ldumin_r_r_m(dst, src, mem)) } inst_ldumina_r_r_m :: #force_inline proc "contextless" (dst: Register, src: Register, mem: Memory) -> Instruction { return inst_ldp_stp(.LDUMINA, dst, src, mem) } -emit_ldumina_r_r_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, mem: Memory) { append(instructions, inst_ldumina_r_r_m(dst, src, mem)) } +emit_ldumina_r_r_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, mem: Memory) { append_elem(instructions, inst_ldumina_r_r_m(dst, src, mem)) } inst_lduminl_r_r_m :: #force_inline proc "contextless" (dst: Register, src: Register, mem: Memory) -> Instruction { return inst_ldp_stp(.LDUMINL, dst, src, mem) } -emit_lduminl_r_r_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, mem: Memory) { append(instructions, inst_lduminl_r_r_m(dst, src, mem)) } +emit_lduminl_r_r_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, mem: Memory) { append_elem(instructions, inst_lduminl_r_r_m(dst, src, mem)) } inst_lduminal_r_r_m :: #force_inline proc "contextless" (dst: Register, src: Register, mem: Memory) -> Instruction { return inst_ldp_stp(.LDUMINAL, dst, src, mem) } -emit_lduminal_r_r_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, mem: Memory) { append(instructions, inst_lduminal_r_r_m(dst, src, mem)) } +emit_lduminal_r_r_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, mem: Memory) { append_elem(instructions, inst_lduminal_r_r_m(dst, src, mem)) } inst_swp_r_r_m :: #force_inline proc "contextless" (dst: Register, src: Register, mem: Memory) -> Instruction { return inst_ldp_stp(.SWP, dst, src, mem) } -emit_swp_r_r_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, mem: Memory) { append(instructions, inst_swp_r_r_m(dst, src, mem)) } +emit_swp_r_r_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, mem: Memory) { append_elem(instructions, inst_swp_r_r_m(dst, src, mem)) } inst_swpa_r_r_m :: #force_inline proc "contextless" (dst: Register, src: Register, mem: Memory) -> Instruction { return inst_ldp_stp(.SWPA, dst, src, mem) } -emit_swpa_r_r_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, mem: Memory) { append(instructions, inst_swpa_r_r_m(dst, src, mem)) } +emit_swpa_r_r_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, mem: Memory) { append_elem(instructions, inst_swpa_r_r_m(dst, src, mem)) } inst_swpl_r_r_m :: #force_inline proc "contextless" (dst: Register, src: Register, mem: Memory) -> Instruction { return inst_ldp_stp(.SWPL, dst, src, mem) } -emit_swpl_r_r_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, mem: Memory) { append(instructions, inst_swpl_r_r_m(dst, src, mem)) } +emit_swpl_r_r_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, mem: Memory) { append_elem(instructions, inst_swpl_r_r_m(dst, src, mem)) } inst_swpal_r_r_m :: #force_inline proc "contextless" (dst: Register, src: Register, mem: Memory) -> Instruction { return inst_ldp_stp(.SWPAL, dst, src, mem) } -emit_swpal_r_r_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, mem: Memory) { append(instructions, inst_swpal_r_r_m(dst, src, mem)) } +emit_swpal_r_r_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, mem: Memory) { append_elem(instructions, inst_swpal_r_r_m(dst, src, mem)) } inst_cas_r_r_m :: #force_inline proc "contextless" (dst: Register, src: Register, mem: Memory) -> Instruction { return inst_ldp_stp(.CAS, dst, src, mem) } -emit_cas_r_r_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, mem: Memory) { append(instructions, inst_cas_r_r_m(dst, src, mem)) } +emit_cas_r_r_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, mem: Memory) { append_elem(instructions, inst_cas_r_r_m(dst, src, mem)) } inst_casa_r_r_m :: #force_inline proc "contextless" (dst: Register, src: Register, mem: Memory) -> Instruction { return inst_ldp_stp(.CASA, dst, src, mem) } -emit_casa_r_r_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, mem: Memory) { append(instructions, inst_casa_r_r_m(dst, src, mem)) } +emit_casa_r_r_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, mem: Memory) { append_elem(instructions, inst_casa_r_r_m(dst, src, mem)) } inst_casl_r_r_m :: #force_inline proc "contextless" (dst: Register, src: Register, mem: Memory) -> Instruction { return inst_ldp_stp(.CASL, dst, src, mem) } -emit_casl_r_r_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, mem: Memory) { append(instructions, inst_casl_r_r_m(dst, src, mem)) } +emit_casl_r_r_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, mem: Memory) { append_elem(instructions, inst_casl_r_r_m(dst, src, mem)) } inst_casal_r_r_m :: #force_inline proc "contextless" (dst: Register, src: Register, mem: Memory) -> Instruction { return inst_ldp_stp(.CASAL, dst, src, mem) } -emit_casal_r_r_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, mem: Memory) { append(instructions, inst_casal_r_r_m(dst, src, mem)) } +emit_casal_r_r_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, mem: Memory) { append_elem(instructions, inst_casal_r_r_m(dst, src, mem)) } inst_casb_r_r_m :: #force_inline proc "contextless" (dst: Register, src: Register, mem: Memory) -> Instruction { return inst_ldp_stp(.CASB, dst, src, mem) } -emit_casb_r_r_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, mem: Memory) { append(instructions, inst_casb_r_r_m(dst, src, mem)) } +emit_casb_r_r_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, mem: Memory) { append_elem(instructions, inst_casb_r_r_m(dst, src, mem)) } inst_casab_r_r_m :: #force_inline proc "contextless" (dst: Register, src: Register, mem: Memory) -> Instruction { return inst_ldp_stp(.CASAB, dst, src, mem) } -emit_casab_r_r_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, mem: Memory) { append(instructions, inst_casab_r_r_m(dst, src, mem)) } +emit_casab_r_r_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, mem: Memory) { append_elem(instructions, inst_casab_r_r_m(dst, src, mem)) } inst_caslb_r_r_m :: #force_inline proc "contextless" (dst: Register, src: Register, mem: Memory) -> Instruction { return inst_ldp_stp(.CASLB, dst, src, mem) } -emit_caslb_r_r_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, mem: Memory) { append(instructions, inst_caslb_r_r_m(dst, src, mem)) } +emit_caslb_r_r_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, mem: Memory) { append_elem(instructions, inst_caslb_r_r_m(dst, src, mem)) } inst_casalb_r_r_m :: #force_inline proc "contextless" (dst: Register, src: Register, mem: Memory) -> Instruction { return inst_ldp_stp(.CASALB, dst, src, mem) } -emit_casalb_r_r_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, mem: Memory) { append(instructions, inst_casalb_r_r_m(dst, src, mem)) } +emit_casalb_r_r_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, mem: Memory) { append_elem(instructions, inst_casalb_r_r_m(dst, src, mem)) } inst_cash_r_r_m :: #force_inline proc "contextless" (dst: Register, src: Register, mem: Memory) -> Instruction { return inst_ldp_stp(.CASH, dst, src, mem) } -emit_cash_r_r_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, mem: Memory) { append(instructions, inst_cash_r_r_m(dst, src, mem)) } +emit_cash_r_r_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, mem: Memory) { append_elem(instructions, inst_cash_r_r_m(dst, src, mem)) } inst_casah_r_r_m :: #force_inline proc "contextless" (dst: Register, src: Register, mem: Memory) -> Instruction { return inst_ldp_stp(.CASAH, dst, src, mem) } -emit_casah_r_r_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, mem: Memory) { append(instructions, inst_casah_r_r_m(dst, src, mem)) } +emit_casah_r_r_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, mem: Memory) { append_elem(instructions, inst_casah_r_r_m(dst, src, mem)) } inst_caslh_r_r_m :: #force_inline proc "contextless" (dst: Register, src: Register, mem: Memory) -> Instruction { return inst_ldp_stp(.CASLH, dst, src, mem) } -emit_caslh_r_r_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, mem: Memory) { append(instructions, inst_caslh_r_r_m(dst, src, mem)) } +emit_caslh_r_r_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, mem: Memory) { append_elem(instructions, inst_caslh_r_r_m(dst, src, mem)) } inst_casalh_r_r_m :: #force_inline proc "contextless" (dst: Register, src: Register, mem: Memory) -> Instruction { return inst_ldp_stp(.CASALH, dst, src, mem) } -emit_casalh_r_r_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, mem: Memory) { append(instructions, inst_casalh_r_r_m(dst, src, mem)) } +emit_casalh_r_r_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, mem: Memory) { append_elem(instructions, inst_casalh_r_r_m(dst, src, mem)) } inst_casp_r_r_m :: #force_inline proc "contextless" (dst: Register, src: Register, mem: Memory) -> Instruction { return inst_ldp_stp(.CASP, dst, src, mem) } -emit_casp_r_r_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, mem: Memory) { append(instructions, inst_casp_r_r_m(dst, src, mem)) } +emit_casp_r_r_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, mem: Memory) { append_elem(instructions, inst_casp_r_r_m(dst, src, mem)) } inst_caspa_r_r_m :: #force_inline proc "contextless" (dst: Register, src: Register, mem: Memory) -> Instruction { return inst_ldp_stp(.CASPA, dst, src, mem) } -emit_caspa_r_r_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, mem: Memory) { append(instructions, inst_caspa_r_r_m(dst, src, mem)) } +emit_caspa_r_r_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, mem: Memory) { append_elem(instructions, inst_caspa_r_r_m(dst, src, mem)) } inst_caspl_r_r_m :: #force_inline proc "contextless" (dst: Register, src: Register, mem: Memory) -> Instruction { return inst_ldp_stp(.CASPL, dst, src, mem) } -emit_caspl_r_r_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, mem: Memory) { append(instructions, inst_caspl_r_r_m(dst, src, mem)) } +emit_caspl_r_r_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, mem: Memory) { append_elem(instructions, inst_caspl_r_r_m(dst, src, mem)) } inst_caspal_r_r_m :: #force_inline proc "contextless" (dst: Register, src: Register, mem: Memory) -> Instruction { return inst_ldp_stp(.CASPAL, dst, src, mem) } -emit_caspal_r_r_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, mem: Memory) { append(instructions, inst_caspal_r_r_m(dst, src, mem)) } +emit_caspal_r_r_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, mem: Memory) { append_elem(instructions, inst_caspal_r_r_m(dst, src, mem)) } inst_pacia_r_r :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return inst_r_r(.PACIA, dst, src) } -emit_pacia_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_pacia_r_r(dst, src)) } +emit_pacia_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_pacia_r_r(dst, src)) } inst_pacib_r_r :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return inst_r_r(.PACIB, dst, src) } -emit_pacib_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_pacib_r_r(dst, src)) } +emit_pacib_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_pacib_r_r(dst, src)) } inst_pacda_r_r :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return inst_r_r(.PACDA, dst, src) } -emit_pacda_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_pacda_r_r(dst, src)) } +emit_pacda_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_pacda_r_r(dst, src)) } inst_pacdb_r_r :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return inst_r_r(.PACDB, dst, src) } -emit_pacdb_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_pacdb_r_r(dst, src)) } +emit_pacdb_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_pacdb_r_r(dst, src)) } inst_paciza_r :: #force_inline proc "contextless" (dst: Register) -> Instruction { return inst_r(.PACIZA, dst) } -emit_paciza_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register) { append(instructions, inst_paciza_r(dst)) } +emit_paciza_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register) { append_elem(instructions, inst_paciza_r(dst)) } inst_pacizb_r :: #force_inline proc "contextless" (dst: Register) -> Instruction { return inst_r(.PACIZB, dst) } -emit_pacizb_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register) { append(instructions, inst_pacizb_r(dst)) } +emit_pacizb_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register) { append_elem(instructions, inst_pacizb_r(dst)) } inst_pacdza_r :: #force_inline proc "contextless" (dst: Register) -> Instruction { return inst_r(.PACDZA, dst) } -emit_pacdza_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register) { append(instructions, inst_pacdza_r(dst)) } +emit_pacdza_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register) { append_elem(instructions, inst_pacdza_r(dst)) } inst_pacdzb_r :: #force_inline proc "contextless" (dst: Register) -> Instruction { return inst_r(.PACDZB, dst) } -emit_pacdzb_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register) { append(instructions, inst_pacdzb_r(dst)) } +emit_pacdzb_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register) { append_elem(instructions, inst_pacdzb_r(dst)) } inst_autia_r_r :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return inst_r_r(.AUTIA, dst, src) } -emit_autia_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_autia_r_r(dst, src)) } +emit_autia_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_autia_r_r(dst, src)) } inst_autib_r_r :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return inst_r_r(.AUTIB, dst, src) } -emit_autib_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_autib_r_r(dst, src)) } +emit_autib_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_autib_r_r(dst, src)) } inst_autda_r_r :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return inst_r_r(.AUTDA, dst, src) } -emit_autda_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_autda_r_r(dst, src)) } +emit_autda_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_autda_r_r(dst, src)) } inst_autdb_r_r :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return inst_r_r(.AUTDB, dst, src) } -emit_autdb_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_autdb_r_r(dst, src)) } +emit_autdb_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_autdb_r_r(dst, src)) } inst_autiza_r :: #force_inline proc "contextless" (dst: Register) -> Instruction { return inst_r(.AUTIZA, dst) } -emit_autiza_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register) { append(instructions, inst_autiza_r(dst)) } +emit_autiza_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register) { append_elem(instructions, inst_autiza_r(dst)) } inst_autizb_r :: #force_inline proc "contextless" (dst: Register) -> Instruction { return inst_r(.AUTIZB, dst) } -emit_autizb_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register) { append(instructions, inst_autizb_r(dst)) } +emit_autizb_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register) { append_elem(instructions, inst_autizb_r(dst)) } inst_autdza_r :: #force_inline proc "contextless" (dst: Register) -> Instruction { return inst_r(.AUTDZA, dst) } -emit_autdza_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register) { append(instructions, inst_autdza_r(dst)) } +emit_autdza_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register) { append_elem(instructions, inst_autdza_r(dst)) } inst_autdzb_r :: #force_inline proc "contextless" (dst: Register) -> Instruction { return inst_r(.AUTDZB, dst) } -emit_autdzb_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register) { append(instructions, inst_autdzb_r(dst)) } +emit_autdzb_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register) { append_elem(instructions, inst_autdzb_r(dst)) } inst_paciasp_none :: #force_inline proc "contextless" () -> Instruction { return inst_none(.PACIASP) } -emit_paciasp_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_paciasp_none()) } +emit_paciasp_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_paciasp_none()) } inst_pacibsp_none :: #force_inline proc "contextless" () -> Instruction { return inst_none(.PACIBSP) } -emit_pacibsp_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_pacibsp_none()) } +emit_pacibsp_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_pacibsp_none()) } inst_autiasp_none :: #force_inline proc "contextless" () -> Instruction { return inst_none(.AUTIASP) } -emit_autiasp_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_autiasp_none()) } +emit_autiasp_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_autiasp_none()) } inst_autibsp_none :: #force_inline proc "contextless" () -> Instruction { return inst_none(.AUTIBSP) } -emit_autibsp_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_autibsp_none()) } +emit_autibsp_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_autibsp_none()) } inst_pacia1716_none :: #force_inline proc "contextless" () -> Instruction { return inst_none(.PACIA1716) } -emit_pacia1716_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_pacia1716_none()) } +emit_pacia1716_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_pacia1716_none()) } inst_pacib1716_none :: #force_inline proc "contextless" () -> Instruction { return inst_none(.PACIB1716) } -emit_pacib1716_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_pacib1716_none()) } +emit_pacib1716_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_pacib1716_none()) } inst_autia1716_none :: #force_inline proc "contextless" () -> Instruction { return inst_none(.AUTIA1716) } -emit_autia1716_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_autia1716_none()) } +emit_autia1716_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_autia1716_none()) } inst_autib1716_none :: #force_inline proc "contextless" () -> Instruction { return inst_none(.AUTIB1716) } -emit_autib1716_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_autib1716_none()) } +emit_autib1716_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_autib1716_none()) } inst_pacga_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return inst_r_r_r(.PACGA, dst, src, src2) } -emit_pacga_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_pacga_r_r_r(dst, src, src2)) } +emit_pacga_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_pacga_r_r_r(dst, src, src2)) } inst_xpaci_r :: #force_inline proc "contextless" (dst: Register) -> Instruction { return inst_r(.XPACI, dst) } -emit_xpaci_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register) { append(instructions, inst_xpaci_r(dst)) } +emit_xpaci_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register) { append_elem(instructions, inst_xpaci_r(dst)) } inst_xpacd_r :: #force_inline proc "contextless" (dst: Register) -> Instruction { return inst_r(.XPACD, dst) } -emit_xpacd_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register) { append(instructions, inst_xpacd_r(dst)) } +emit_xpacd_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register) { append_elem(instructions, inst_xpacd_r(dst)) } inst_xpaclri_none :: #force_inline proc "contextless" () -> Instruction { return inst_none(.XPACLRI) } -emit_xpaclri_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_xpaclri_none()) } +emit_xpaclri_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_xpaclri_none()) } inst_retaa_none :: #force_inline proc "contextless" () -> Instruction { return inst_none(.RETAA) } -emit_retaa_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_retaa_none()) } +emit_retaa_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_retaa_none()) } inst_retab_none :: #force_inline proc "contextless" () -> Instruction { return inst_none(.RETAB) } -emit_retab_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_retab_none()) } +emit_retab_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_retab_none()) } inst_braa_r_r :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return inst_r_r(.BRAA, dst, src) } -emit_braa_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_braa_r_r(dst, src)) } +emit_braa_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_braa_r_r(dst, src)) } inst_brab_r_r :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return inst_r_r(.BRAB, dst, src) } -emit_brab_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_brab_r_r(dst, src)) } +emit_brab_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_brab_r_r(dst, src)) } inst_braaz_r :: #force_inline proc "contextless" (dst: Register) -> Instruction { return inst_r(.BRAAZ, dst) } -emit_braaz_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register) { append(instructions, inst_braaz_r(dst)) } +emit_braaz_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register) { append_elem(instructions, inst_braaz_r(dst)) } inst_brabz_r :: #force_inline proc "contextless" (dst: Register) -> Instruction { return inst_r(.BRABZ, dst) } -emit_brabz_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register) { append(instructions, inst_brabz_r(dst)) } +emit_brabz_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register) { append_elem(instructions, inst_brabz_r(dst)) } inst_blraa_r_r :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return inst_r_r(.BLRAA, dst, src) } -emit_blraa_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_blraa_r_r(dst, src)) } +emit_blraa_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_blraa_r_r(dst, src)) } inst_blrab_r_r :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return inst_r_r(.BLRAB, dst, src) } -emit_blrab_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_blrab_r_r(dst, src)) } +emit_blrab_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_blrab_r_r(dst, src)) } inst_blraaz_r :: #force_inline proc "contextless" (dst: Register) -> Instruction { return inst_r(.BLRAAZ, dst) } -emit_blraaz_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register) { append(instructions, inst_blraaz_r(dst)) } +emit_blraaz_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register) { append_elem(instructions, inst_blraaz_r(dst)) } inst_blrabz_r :: #force_inline proc "contextless" (dst: Register) -> Instruction { return inst_r(.BLRABZ, dst) } -emit_blrabz_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register) { append(instructions, inst_blrabz_r(dst)) } +emit_blrabz_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register) { append_elem(instructions, inst_blrabz_r(dst)) } inst_eretaa_none :: #force_inline proc "contextless" () -> Instruction { return inst_none(.ERETAA) } -emit_eretaa_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_eretaa_none()) } +emit_eretaa_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_eretaa_none()) } inst_eretab_none :: #force_inline proc "contextless" () -> Instruction { return inst_none(.ERETAB) } -emit_eretab_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_eretab_none()) } +emit_eretab_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_eretab_none()) } inst_bti_none :: #force_inline proc "contextless" () -> Instruction { return inst_none(.BTI) } -emit_bti_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_bti_none()) } +emit_bti_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_bti_none()) } inst_irg_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return inst_r_r_r(.IRG, dst, src, src2) } -emit_irg_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_irg_r_r_r(dst, src, src2)) } +emit_irg_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_irg_r_r_r(dst, src, src2)) } inst_addg_r_r_i_i :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64, imm2: i64) -> Instruction { return Instruction{mnemonic = .ADDG, operand_count = 4, length = 4, ops = {op_reg(dst), op_reg(src), op_imm(imm, 1), op_imm(imm2, 1), {}}} } -emit_addg_r_r_i_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64, imm2: i64) { append(instructions, inst_addg_r_r_i_i(dst, src, imm, imm2)) } +emit_addg_r_r_i_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64, imm2: i64) { append_elem(instructions, inst_addg_r_r_i_i(dst, src, imm, imm2)) } inst_subg_r_r_i_i :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64, imm2: i64) -> Instruction { return Instruction{mnemonic = .SUBG, operand_count = 4, length = 4, ops = {op_reg(dst), op_reg(src), op_imm(imm, 1), op_imm(imm2, 1), {}}} } -emit_subg_r_r_i_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64, imm2: i64) { append(instructions, inst_subg_r_r_i_i(dst, src, imm, imm2)) } +emit_subg_r_r_i_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64, imm2: i64) { append_elem(instructions, inst_subg_r_r_i_i(dst, src, imm, imm2)) } inst_gmi_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return inst_r_r_r(.GMI, dst, src, src2) } -emit_gmi_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_gmi_r_r_r(dst, src, src2)) } +emit_gmi_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_gmi_r_r_r(dst, src, src2)) } inst_subp_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return inst_r_r_r(.SUBP, dst, src, src2) } -emit_subp_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_subp_r_r_r(dst, src, src2)) } +emit_subp_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_subp_r_r_r(dst, src, src2)) } inst_subps_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return inst_r_r_r(.SUBPS, dst, src, src2) } -emit_subps_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_subps_r_r_r(dst, src, src2)) } +emit_subps_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_subps_r_r_r(dst, src, src2)) } inst_ldg_r_m :: #force_inline proc "contextless" (dst: Register, mem: Memory) -> Instruction { return inst_ldst(.LDG, dst, mem) } -emit_ldg_r_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, mem: Memory) { append(instructions, inst_ldg_r_m(dst, mem)) } +emit_ldg_r_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, mem: Memory) { append_elem(instructions, inst_ldg_r_m(dst, mem)) } inst_stg_r_m :: #force_inline proc "contextless" (dst: Register, mem: Memory) -> Instruction { return inst_ldst(.STG, dst, mem) } -emit_stg_r_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, mem: Memory) { append(instructions, inst_stg_r_m(dst, mem)) } +emit_stg_r_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, mem: Memory) { append_elem(instructions, inst_stg_r_m(dst, mem)) } inst_st2g_r_m :: #force_inline proc "contextless" (dst: Register, mem: Memory) -> Instruction { return inst_ldst(.ST2G, dst, mem) } -emit_st2g_r_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, mem: Memory) { append(instructions, inst_st2g_r_m(dst, mem)) } +emit_st2g_r_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, mem: Memory) { append_elem(instructions, inst_st2g_r_m(dst, mem)) } inst_stzg_r_m :: #force_inline proc "contextless" (dst: Register, mem: Memory) -> Instruction { return inst_ldst(.STZG, dst, mem) } -emit_stzg_r_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, mem: Memory) { append(instructions, inst_stzg_r_m(dst, mem)) } +emit_stzg_r_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, mem: Memory) { append_elem(instructions, inst_stzg_r_m(dst, mem)) } inst_stz2g_r_m :: #force_inline proc "contextless" (dst: Register, mem: Memory) -> Instruction { return inst_ldst(.STZ2G, dst, mem) } -emit_stz2g_r_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, mem: Memory) { append(instructions, inst_stz2g_r_m(dst, mem)) } +emit_stz2g_r_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, mem: Memory) { append_elem(instructions, inst_stz2g_r_m(dst, mem)) } inst_stgp_r_r_m :: #force_inline proc "contextless" (dst: Register, src: Register, mem: Memory) -> Instruction { return inst_ldp_stp(.STGP, dst, src, mem) } -emit_stgp_r_r_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, mem: Memory) { append(instructions, inst_stgp_r_r_m(dst, src, mem)) } +emit_stgp_r_r_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, mem: Memory) { append_elem(instructions, inst_stgp_r_r_m(dst, src, mem)) } inst_ldgm_r_m :: #force_inline proc "contextless" (dst: Register, mem: Memory) -> Instruction { return inst_ldst(.LDGM, dst, mem) } -emit_ldgm_r_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, mem: Memory) { append(instructions, inst_ldgm_r_m(dst, mem)) } +emit_ldgm_r_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, mem: Memory) { append_elem(instructions, inst_ldgm_r_m(dst, mem)) } inst_stgm_r_m :: #force_inline proc "contextless" (dst: Register, mem: Memory) -> Instruction { return inst_ldst(.STGM, dst, mem) } -emit_stgm_r_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, mem: Memory) { append(instructions, inst_stgm_r_m(dst, mem)) } +emit_stgm_r_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, mem: Memory) { append_elem(instructions, inst_stgm_r_m(dst, mem)) } inst_stzgm_r_m :: #force_inline proc "contextless" (dst: Register, mem: Memory) -> Instruction { return inst_ldst(.STZGM, dst, mem) } -emit_stzgm_r_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, mem: Memory) { append(instructions, inst_stzgm_r_m(dst, mem)) } +emit_stzgm_r_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, mem: Memory) { append_elem(instructions, inst_stzgm_r_m(dst, mem)) } inst_crc32b_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return inst_r_r_r(.CRC32B, dst, src, src2) } -emit_crc32b_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_crc32b_r_r_r(dst, src, src2)) } +emit_crc32b_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_crc32b_r_r_r(dst, src, src2)) } inst_crc32h_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return inst_r_r_r(.CRC32H, dst, src, src2) } -emit_crc32h_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_crc32h_r_r_r(dst, src, src2)) } +emit_crc32h_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_crc32h_r_r_r(dst, src, src2)) } inst_crc32w_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return inst_r_r_r(.CRC32W, dst, src, src2) } -emit_crc32w_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_crc32w_r_r_r(dst, src, src2)) } +emit_crc32w_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_crc32w_r_r_r(dst, src, src2)) } inst_crc32x_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return inst_r_r_r(.CRC32X, dst, src, src2) } -emit_crc32x_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_crc32x_r_r_r(dst, src, src2)) } +emit_crc32x_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_crc32x_r_r_r(dst, src, src2)) } inst_crc32cb_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return inst_r_r_r(.CRC32CB, dst, src, src2) } -emit_crc32cb_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_crc32cb_r_r_r(dst, src, src2)) } +emit_crc32cb_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_crc32cb_r_r_r(dst, src, src2)) } inst_crc32ch_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return inst_r_r_r(.CRC32CH, dst, src, src2) } -emit_crc32ch_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_crc32ch_r_r_r(dst, src, src2)) } +emit_crc32ch_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_crc32ch_r_r_r(dst, src, src2)) } inst_crc32cw_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return inst_r_r_r(.CRC32CW, dst, src, src2) } -emit_crc32cw_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_crc32cw_r_r_r(dst, src, src2)) } +emit_crc32cw_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_crc32cw_r_r_r(dst, src, src2)) } inst_crc32cx_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return inst_r_r_r(.CRC32CX, dst, src, src2) } -emit_crc32cx_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_crc32cx_r_r_r(dst, src, src2)) } +emit_crc32cx_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_crc32cx_r_r_r(dst, src, src2)) } inst_aese_v16b_v16b :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .AESE, operand_count = 2, length = 4, ops = {op_v_16b(dst), op_v_16b(src), {}, {}, {}}} } inst_aese_zb_zb_zb :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8) -> Instruction { return Instruction{mnemonic = .AESE, operand_count = 3, length = 4, ops = {op_z_b(rz), op_z_b(rz2), op_z_b(rz3), {}, {}}} } -emit_aese_v16b_v16b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_aese_v16b_v16b(dst, src)) } -emit_aese_zb_zb_zb :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append(instructions, inst_aese_zb_zb_zb(rz, rz2, rz3)) } +emit_aese_v16b_v16b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_aese_v16b_v16b(dst, src)) } +emit_aese_zb_zb_zb :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append_elem(instructions, inst_aese_zb_zb_zb(rz, rz2, rz3)) } inst_aesd_v16b_v16b :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .AESD, operand_count = 2, length = 4, ops = {op_v_16b(dst), op_v_16b(src), {}, {}, {}}} } inst_aesd_zb_zb_zb :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8) -> Instruction { return Instruction{mnemonic = .AESD, operand_count = 3, length = 4, ops = {op_z_b(rz), op_z_b(rz2), op_z_b(rz3), {}, {}}} } -emit_aesd_v16b_v16b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_aesd_v16b_v16b(dst, src)) } -emit_aesd_zb_zb_zb :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append(instructions, inst_aesd_zb_zb_zb(rz, rz2, rz3)) } +emit_aesd_v16b_v16b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_aesd_v16b_v16b(dst, src)) } +emit_aesd_zb_zb_zb :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append_elem(instructions, inst_aesd_zb_zb_zb(rz, rz2, rz3)) } inst_aesmc_v16b_v16b :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .AESMC, operand_count = 2, length = 4, ops = {op_v_16b(dst), op_v_16b(src), {}, {}, {}}} } inst_aesmc_zb_zb :: #force_inline proc "contextless" (rz: u8, rz2: u8) -> Instruction { return Instruction{mnemonic = .AESMC, operand_count = 2, length = 4, ops = {op_z_b(rz), op_z_b(rz2), {}, {}, {}}} } -emit_aesmc_v16b_v16b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_aesmc_v16b_v16b(dst, src)) } -emit_aesmc_zb_zb :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8) { append(instructions, inst_aesmc_zb_zb(rz, rz2)) } +emit_aesmc_v16b_v16b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_aesmc_v16b_v16b(dst, src)) } +emit_aesmc_zb_zb :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8) { append_elem(instructions, inst_aesmc_zb_zb(rz, rz2)) } inst_aesimc_v16b_v16b :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .AESIMC, operand_count = 2, length = 4, ops = {op_v_16b(dst), op_v_16b(src), {}, {}, {}}} } inst_aesimc_zb_zb :: #force_inline proc "contextless" (rz: u8, rz2: u8) -> Instruction { return Instruction{mnemonic = .AESIMC, operand_count = 2, length = 4, ops = {op_z_b(rz), op_z_b(rz2), {}, {}, {}}} } -emit_aesimc_v16b_v16b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_aesimc_v16b_v16b(dst, src)) } -emit_aesimc_zb_zb :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8) { append(instructions, inst_aesimc_zb_zb(rz, rz2)) } +emit_aesimc_v16b_v16b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_aesimc_v16b_v16b(dst, src)) } +emit_aesimc_zb_zb :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8) { append_elem(instructions, inst_aesimc_zb_zb(rz, rz2)) } inst_sha1h_r_r :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return inst_r_r(.SHA1H, dst, src) } -emit_sha1h_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_sha1h_r_r(dst, src)) } +emit_sha1h_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_sha1h_r_r(dst, src)) } inst_sha1c_r_r_v4s :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .SHA1C, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_v_4s(src2), {}, {}}} } -emit_sha1c_r_r_v4s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_sha1c_r_r_v4s(dst, src, src2)) } +emit_sha1c_r_r_v4s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_sha1c_r_r_v4s(dst, src, src2)) } inst_sha1p_r_r_v4s :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .SHA1P, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_v_4s(src2), {}, {}}} } -emit_sha1p_r_r_v4s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_sha1p_r_r_v4s(dst, src, src2)) } +emit_sha1p_r_r_v4s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_sha1p_r_r_v4s(dst, src, src2)) } inst_sha1m_r_r_v4s :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .SHA1M, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_v_4s(src2), {}, {}}} } -emit_sha1m_r_r_v4s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_sha1m_r_r_v4s(dst, src, src2)) } +emit_sha1m_r_r_v4s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_sha1m_r_r_v4s(dst, src, src2)) } inst_sha1su0_v4s_v4s_v4s :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .SHA1SU0, operand_count = 3, length = 4, ops = {op_v_4s(dst), op_v_4s(src), op_v_4s(src2), {}, {}}} } -emit_sha1su0_v4s_v4s_v4s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_sha1su0_v4s_v4s_v4s(dst, src, src2)) } +emit_sha1su0_v4s_v4s_v4s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_sha1su0_v4s_v4s_v4s(dst, src, src2)) } inst_sha1su1_v4s_v4s :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .SHA1SU1, operand_count = 2, length = 4, ops = {op_v_4s(dst), op_v_4s(src), {}, {}, {}}} } -emit_sha1su1_v4s_v4s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_sha1su1_v4s_v4s(dst, src)) } +emit_sha1su1_v4s_v4s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_sha1su1_v4s_v4s(dst, src)) } inst_sha256h_r_r_v4s :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .SHA256H, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_v_4s(src2), {}, {}}} } -emit_sha256h_r_r_v4s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_sha256h_r_r_v4s(dst, src, src2)) } +emit_sha256h_r_r_v4s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_sha256h_r_r_v4s(dst, src, src2)) } inst_sha256h2_r_r_v4s :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .SHA256H2, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_v_4s(src2), {}, {}}} } -emit_sha256h2_r_r_v4s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_sha256h2_r_r_v4s(dst, src, src2)) } +emit_sha256h2_r_r_v4s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_sha256h2_r_r_v4s(dst, src, src2)) } inst_sha256su0_v4s_v4s :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .SHA256SU0, operand_count = 2, length = 4, ops = {op_v_4s(dst), op_v_4s(src), {}, {}, {}}} } -emit_sha256su0_v4s_v4s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_sha256su0_v4s_v4s(dst, src)) } +emit_sha256su0_v4s_v4s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_sha256su0_v4s_v4s(dst, src)) } inst_sha256su1_v4s_v4s_v4s :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .SHA256SU1, operand_count = 3, length = 4, ops = {op_v_4s(dst), op_v_4s(src), op_v_4s(src2), {}, {}}} } -emit_sha256su1_v4s_v4s_v4s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_sha256su1_v4s_v4s_v4s(dst, src, src2)) } +emit_sha256su1_v4s_v4s_v4s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_sha256su1_v4s_v4s_v4s(dst, src, src2)) } inst_sha512h_r_r_v2d :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .SHA512H, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_v_2d(src2), {}, {}}} } -emit_sha512h_r_r_v2d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_sha512h_r_r_v2d(dst, src, src2)) } +emit_sha512h_r_r_v2d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_sha512h_r_r_v2d(dst, src, src2)) } inst_sha512h2_r_r_v2d :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .SHA512H2, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_v_2d(src2), {}, {}}} } -emit_sha512h2_r_r_v2d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_sha512h2_r_r_v2d(dst, src, src2)) } +emit_sha512h2_r_r_v2d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_sha512h2_r_r_v2d(dst, src, src2)) } inst_sha512su0_v2d_v2d :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .SHA512SU0, operand_count = 2, length = 4, ops = {op_v_2d(dst), op_v_2d(src), {}, {}, {}}} } -emit_sha512su0_v2d_v2d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_sha512su0_v2d_v2d(dst, src)) } +emit_sha512su0_v2d_v2d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_sha512su0_v2d_v2d(dst, src)) } inst_sha512su1_v2d_v2d_v2d :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .SHA512SU1, operand_count = 3, length = 4, ops = {op_v_2d(dst), op_v_2d(src), op_v_2d(src2), {}, {}}} } -emit_sha512su1_v2d_v2d_v2d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_sha512su1_v2d_v2d_v2d(dst, src, src2)) } +emit_sha512su1_v2d_v2d_v2d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_sha512su1_v2d_v2d_v2d(dst, src, src2)) } inst_eor3_v16b_v16b_v16b_v16b :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register, src3: Register) -> Instruction { return Instruction{mnemonic = .EOR3, operand_count = 4, length = 4, ops = {op_v_16b(dst), op_v_16b(src), op_v_16b(src2), op_v_16b(src3), {}}} } inst_eor3_zd_zd_zd_zd :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8, rz4: u8) -> Instruction { return Instruction{mnemonic = .EOR3, operand_count = 4, length = 4, ops = {op_z_d(rz), op_z_d(rz2), op_z_d(rz3), op_z_d(rz4), {}}} } -emit_eor3_v16b_v16b_v16b_v16b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, src3: Register) { append(instructions, inst_eor3_v16b_v16b_v16b_v16b(dst, src, src2, src3)) } -emit_eor3_zd_zd_zd_zd :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append(instructions, inst_eor3_zd_zd_zd_zd(rz, rz2, rz3, rz4)) } +emit_eor3_v16b_v16b_v16b_v16b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, src3: Register) { append_elem(instructions, inst_eor3_v16b_v16b_v16b_v16b(dst, src, src2, src3)) } +emit_eor3_zd_zd_zd_zd :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append_elem(instructions, inst_eor3_zd_zd_zd_zd(rz, rz2, rz3, rz4)) } inst_bcax_v16b_v16b_v16b_v16b :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register, src3: Register) -> Instruction { return Instruction{mnemonic = .BCAX, operand_count = 4, length = 4, ops = {op_v_16b(dst), op_v_16b(src), op_v_16b(src2), op_v_16b(src3), {}}} } inst_bcax_zd_zd_zd_zd :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8, rz4: u8) -> Instruction { return Instruction{mnemonic = .BCAX, operand_count = 4, length = 4, ops = {op_z_d(rz), op_z_d(rz2), op_z_d(rz3), op_z_d(rz4), {}}} } -emit_bcax_v16b_v16b_v16b_v16b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, src3: Register) { append(instructions, inst_bcax_v16b_v16b_v16b_v16b(dst, src, src2, src3)) } -emit_bcax_zd_zd_zd_zd :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append(instructions, inst_bcax_zd_zd_zd_zd(rz, rz2, rz3, rz4)) } +emit_bcax_v16b_v16b_v16b_v16b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, src3: Register) { append_elem(instructions, inst_bcax_v16b_v16b_v16b_v16b(dst, src, src2, src3)) } +emit_bcax_zd_zd_zd_zd :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append_elem(instructions, inst_bcax_zd_zd_zd_zd(rz, rz2, rz3, rz4)) } inst_rax1_v2d_v2d_v2d :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .RAX1, operand_count = 3, length = 4, ops = {op_v_2d(dst), op_v_2d(src), op_v_2d(src2), {}, {}}} } -emit_rax1_v2d_v2d_v2d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_rax1_v2d_v2d_v2d(dst, src, src2)) } +emit_rax1_v2d_v2d_v2d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_rax1_v2d_v2d_v2d(dst, src, src2)) } inst_xar_v2d_v2d_v2d_i :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .XAR, operand_count = 4, length = 4, ops = {op_v_2d(dst), op_v_2d(src), op_v_2d(src2), op_imm(imm, 1), {}}} } inst_xar_zd_zd_zd_i :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8, imm: i64) -> Instruction { return Instruction{mnemonic = .XAR, operand_count = 4, length = 4, ops = {op_z_d(rz), op_z_d(rz2), op_z_d(rz3), op_imm(imm, 4), {}}} } inst_xar_zs_zs_zs_i :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8, imm: i64) -> Instruction { return Instruction{mnemonic = .XAR, operand_count = 4, length = 4, ops = {op_z_s(rz), op_z_s(rz2), op_z_s(rz3), op_imm(imm, 4), {}}} } inst_xar_zh_zh_zh_i :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8, imm: i64) -> Instruction { return Instruction{mnemonic = .XAR, operand_count = 4, length = 4, ops = {op_z_h(rz), op_z_h(rz2), op_z_h(rz3), op_imm(imm, 4), {}}} } inst_xar_zb_zb_zb_i :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8, imm: i64) -> Instruction { return Instruction{mnemonic = .XAR, operand_count = 4, length = 4, ops = {op_z_b(rz), op_z_b(rz2), op_z_b(rz3), op_imm(imm, 4), {}}} } -emit_xar_v2d_v2d_v2d_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, imm: i64) { append(instructions, inst_xar_v2d_v2d_v2d_i(dst, src, src2, imm)) } -emit_xar_zd_zd_zd_i :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, imm: i64) { append(instructions, inst_xar_zd_zd_zd_i(rz, rz2, rz3, imm)) } -emit_xar_zs_zs_zs_i :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, imm: i64) { append(instructions, inst_xar_zs_zs_zs_i(rz, rz2, rz3, imm)) } -emit_xar_zh_zh_zh_i :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, imm: i64) { append(instructions, inst_xar_zh_zh_zh_i(rz, rz2, rz3, imm)) } -emit_xar_zb_zb_zb_i :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, imm: i64) { append(instructions, inst_xar_zb_zb_zb_i(rz, rz2, rz3, imm)) } +emit_xar_v2d_v2d_v2d_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, imm: i64) { append_elem(instructions, inst_xar_v2d_v2d_v2d_i(dst, src, src2, imm)) } +emit_xar_zd_zd_zd_i :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, imm: i64) { append_elem(instructions, inst_xar_zd_zd_zd_i(rz, rz2, rz3, imm)) } +emit_xar_zs_zs_zs_i :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, imm: i64) { append_elem(instructions, inst_xar_zs_zs_zs_i(rz, rz2, rz3, imm)) } +emit_xar_zh_zh_zh_i :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, imm: i64) { append_elem(instructions, inst_xar_zh_zh_zh_i(rz, rz2, rz3, imm)) } +emit_xar_zb_zb_zb_i :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, imm: i64) { append_elem(instructions, inst_xar_zb_zb_zb_i(rz, rz2, rz3, imm)) } inst_sm3partw1_v4s_v4s_v4s :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .SM3PARTW1, operand_count = 3, length = 4, ops = {op_v_4s(dst), op_v_4s(src), op_v_4s(src2), {}, {}}} } -emit_sm3partw1_v4s_v4s_v4s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_sm3partw1_v4s_v4s_v4s(dst, src, src2)) } +emit_sm3partw1_v4s_v4s_v4s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_sm3partw1_v4s_v4s_v4s(dst, src, src2)) } inst_sm3partw2_v4s_v4s_v4s :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .SM3PARTW2, operand_count = 3, length = 4, ops = {op_v_4s(dst), op_v_4s(src), op_v_4s(src2), {}, {}}} } -emit_sm3partw2_v4s_v4s_v4s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_sm3partw2_v4s_v4s_v4s(dst, src, src2)) } +emit_sm3partw2_v4s_v4s_v4s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_sm3partw2_v4s_v4s_v4s(dst, src, src2)) } inst_sm3ss1_v4s_v4s_v4s_v4s :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register, src3: Register) -> Instruction { return Instruction{mnemonic = .SM3SS1, operand_count = 4, length = 4, ops = {op_v_4s(dst), op_v_4s(src), op_v_4s(src2), op_v_4s(src3), {}}} } -emit_sm3ss1_v4s_v4s_v4s_v4s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, src3: Register) { append(instructions, inst_sm3ss1_v4s_v4s_v4s_v4s(dst, src, src2, src3)) } +emit_sm3ss1_v4s_v4s_v4s_v4s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, src3: Register) { append_elem(instructions, inst_sm3ss1_v4s_v4s_v4s_v4s(dst, src, src2, src3)) } inst_sm3tt1a_v4s_v4s_ves_i :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .SM3TT1A, operand_count = 4, length = 4, ops = {op_v_4s(dst), op_v_4s(src), op_v_elem_s(src2), op_lane_index(imm), {}}} } -emit_sm3tt1a_v4s_v4s_ves_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, imm: i64) { append(instructions, inst_sm3tt1a_v4s_v4s_ves_i(dst, src, src2, imm)) } +emit_sm3tt1a_v4s_v4s_ves_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, imm: i64) { append_elem(instructions, inst_sm3tt1a_v4s_v4s_ves_i(dst, src, src2, imm)) } inst_sm3tt1b_v4s_v4s_ves_i :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .SM3TT1B, operand_count = 4, length = 4, ops = {op_v_4s(dst), op_v_4s(src), op_v_elem_s(src2), op_lane_index(imm), {}}} } -emit_sm3tt1b_v4s_v4s_ves_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, imm: i64) { append(instructions, inst_sm3tt1b_v4s_v4s_ves_i(dst, src, src2, imm)) } +emit_sm3tt1b_v4s_v4s_ves_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, imm: i64) { append_elem(instructions, inst_sm3tt1b_v4s_v4s_ves_i(dst, src, src2, imm)) } inst_sm3tt2a_v4s_v4s_ves_i :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .SM3TT2A, operand_count = 4, length = 4, ops = {op_v_4s(dst), op_v_4s(src), op_v_elem_s(src2), op_lane_index(imm), {}}} } -emit_sm3tt2a_v4s_v4s_ves_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, imm: i64) { append(instructions, inst_sm3tt2a_v4s_v4s_ves_i(dst, src, src2, imm)) } +emit_sm3tt2a_v4s_v4s_ves_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, imm: i64) { append_elem(instructions, inst_sm3tt2a_v4s_v4s_ves_i(dst, src, src2, imm)) } inst_sm3tt2b_v4s_v4s_ves_i :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .SM3TT2B, operand_count = 4, length = 4, ops = {op_v_4s(dst), op_v_4s(src), op_v_elem_s(src2), op_lane_index(imm), {}}} } -emit_sm3tt2b_v4s_v4s_ves_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, imm: i64) { append(instructions, inst_sm3tt2b_v4s_v4s_ves_i(dst, src, src2, imm)) } +emit_sm3tt2b_v4s_v4s_ves_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, imm: i64) { append_elem(instructions, inst_sm3tt2b_v4s_v4s_ves_i(dst, src, src2, imm)) } inst_sm4e_v4s_v4s :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .SM4E, operand_count = 2, length = 4, ops = {op_v_4s(dst), op_v_4s(src), {}, {}, {}}} } -emit_sm4e_v4s_v4s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_sm4e_v4s_v4s(dst, src)) } +emit_sm4e_v4s_v4s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_sm4e_v4s_v4s(dst, src)) } inst_sm4ekey_v4s_v4s_v4s :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .SM4EKEY, operand_count = 3, length = 4, ops = {op_v_4s(dst), op_v_4s(src), op_v_4s(src2), {}, {}}} } -emit_sm4ekey_v4s_v4s_v4s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_sm4ekey_v4s_v4s_v4s(dst, src, src2)) } +emit_sm4ekey_v4s_v4s_v4s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_sm4ekey_v4s_v4s_v4s(dst, src, src2)) } inst_pmull_v8h_v8b_v8b :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .PMULL, operand_count = 3, length = 4, ops = {op_v_8h(dst), op_v_8b(src), op_v_8b(src2), {}, {}}} } inst_pmull_v1q_v1d_v1d :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .PMULL, operand_count = 3, length = 4, ops = {op_v_1q(dst), op_v_1d(src), op_v_1d(src2), {}, {}}} } -emit_pmull_v8h_v8b_v8b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_pmull_v8h_v8b_v8b(dst, src, src2)) } -emit_pmull_v1q_v1d_v1d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_pmull_v1q_v1d_v1d(dst, src, src2)) } +emit_pmull_v8h_v8b_v8b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_pmull_v8h_v8b_v8b(dst, src, src2)) } +emit_pmull_v1q_v1d_v1d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_pmull_v1q_v1d_v1d(dst, src, src2)) } inst_pmull2_v8h_v16b_v16b :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .PMULL2, operand_count = 3, length = 4, ops = {op_v_8h(dst), op_v_16b(src), op_v_16b(src2), {}, {}}} } inst_pmull2_v1q_v2d_v2d :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .PMULL2, operand_count = 3, length = 4, ops = {op_v_1q(dst), op_v_2d(src), op_v_2d(src2), {}, {}}} } -emit_pmull2_v8h_v16b_v16b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_pmull2_v8h_v16b_v16b(dst, src, src2)) } -emit_pmull2_v1q_v2d_v2d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_pmull2_v1q_v2d_v2d(dst, src, src2)) } +emit_pmull2_v8h_v16b_v16b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_pmull2_v8h_v16b_v16b(dst, src, src2)) } +emit_pmull2_v1q_v2d_v2d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_pmull2_v1q_v2d_v2d(dst, src, src2)) } inst_bfcvt_r_r :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return inst_r_r(.BFCVT, dst, src) } inst_bfcvt_zh_p_zs :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8) -> Instruction { return Instruction{mnemonic = .BFCVT, operand_count = 3, length = 4, ops = {op_z_h(rz), op_reg(Register(REG_P | (u16(rz2) & 0xF))), op_z_s(rz3), {}, {}}} } -emit_bfcvt_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_bfcvt_r_r(dst, src)) } -emit_bfcvt_zh_p_zs :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append(instructions, inst_bfcvt_zh_p_zs(rz, rz2, rz3)) } +emit_bfcvt_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_bfcvt_r_r(dst, src)) } +emit_bfcvt_zh_p_zs :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append_elem(instructions, inst_bfcvt_zh_p_zs(rz, rz2, rz3)) } inst_bfdot_v4s_v8h_v8h :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .BFDOT, operand_count = 3, length = 4, ops = {op_v_4s(dst), op_v_8h(src), op_v_8h(src2), {}, {}}} } -emit_bfdot_v4s_v8h_v8h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_bfdot_v4s_v8h_v8h(dst, src, src2)) } +emit_bfdot_v4s_v8h_v8h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_bfdot_v4s_v8h_v8h(dst, src, src2)) } inst_bfmmla_v4s_v8h_v8h :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .BFMMLA, operand_count = 3, length = 4, ops = {op_v_4s(dst), op_v_8h(src), op_v_8h(src2), {}, {}}} } -emit_bfmmla_v4s_v8h_v8h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_bfmmla_v4s_v8h_v8h(dst, src, src2)) } +emit_bfmmla_v4s_v8h_v8h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_bfmmla_v4s_v8h_v8h(dst, src, src2)) } inst_bfmlalb_v4s_v8h_v8h :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .BFMLALB, operand_count = 3, length = 4, ops = {op_v_4s(dst), op_v_8h(src), op_v_8h(src2), {}, {}}} } -emit_bfmlalb_v4s_v8h_v8h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_bfmlalb_v4s_v8h_v8h(dst, src, src2)) } +emit_bfmlalb_v4s_v8h_v8h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_bfmlalb_v4s_v8h_v8h(dst, src, src2)) } inst_bfmlalt_v4s_v8h_v8h :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .BFMLALT, operand_count = 3, length = 4, ops = {op_v_4s(dst), op_v_8h(src), op_v_8h(src2), {}, {}}} } -emit_bfmlalt_v4s_v8h_v8h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_bfmlalt_v4s_v8h_v8h(dst, src, src2)) } +emit_bfmlalt_v4s_v8h_v8h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_bfmlalt_v4s_v8h_v8h(dst, src, src2)) } inst_bfcvtn_v4h_v4s :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .BFCVTN, operand_count = 2, length = 4, ops = {op_v_4h(dst), op_v_4s(src), {}, {}, {}}} } -emit_bfcvtn_v4h_v4s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_bfcvtn_v4h_v4s(dst, src)) } +emit_bfcvtn_v4h_v4s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_bfcvtn_v4h_v4s(dst, src)) } inst_bfcvtn2_v8h_v4s :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .BFCVTN2, operand_count = 2, length = 4, ops = {op_v_8h(dst), op_v_4s(src), {}, {}, {}}} } -emit_bfcvtn2_v8h_v4s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_bfcvtn2_v8h_v4s(dst, src)) } +emit_bfcvtn2_v8h_v4s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_bfcvtn2_v8h_v4s(dst, src)) } inst_mul_v16b_v16b_v16b :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .MUL, operand_count = 3, length = 4, ops = {op_v_16b(dst), op_v_16b(src), op_v_16b(src2), {}, {}}} } inst_mul_v8h_v8h_v8h :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .MUL, operand_count = 3, length = 4, ops = {op_v_8h(dst), op_v_8h(src), op_v_8h(src2), {}, {}}} } inst_mul_v4s_v4s_v4s :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .MUL, operand_count = 3, length = 4, ops = {op_v_4s(dst), op_v_4s(src), op_v_4s(src2), {}, {}}} } @@ -1430,37 +1434,37 @@ inst_mul_zb_p_zb_zb :: #force_inline proc "contextless" (rz: u8, rz2: inst_mul_zh_p_zh_zh :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8, rz4: u8) -> Instruction { return Instruction{mnemonic = .MUL, operand_count = 4, length = 4, ops = {op_z_h(rz), op_reg(Register(REG_P | (u16(rz2) & 0xF))), op_z_h(rz3), op_z_h(rz4), {}}} } inst_mul_zs_p_zs_zs :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8, rz4: u8) -> Instruction { return Instruction{mnemonic = .MUL, operand_count = 4, length = 4, ops = {op_z_s(rz), op_reg(Register(REG_P | (u16(rz2) & 0xF))), op_z_s(rz3), op_z_s(rz4), {}}} } inst_mul_zd_p_zd_zd :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8, rz4: u8) -> Instruction { return Instruction{mnemonic = .MUL, operand_count = 4, length = 4, ops = {op_z_d(rz), op_reg(Register(REG_P | (u16(rz2) & 0xF))), op_z_d(rz3), op_z_d(rz4), {}}} } -emit_mul_v16b_v16b_v16b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_mul_v16b_v16b_v16b(dst, src, src2)) } -emit_mul_v8h_v8h_v8h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_mul_v8h_v8h_v8h(dst, src, src2)) } -emit_mul_v4s_v4s_v4s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_mul_v4s_v4s_v4s(dst, src, src2)) } -emit_mul_zb_p_zb_zb :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append(instructions, inst_mul_zb_p_zb_zb(rz, rz2, rz3, rz4)) } -emit_mul_zh_p_zh_zh :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append(instructions, inst_mul_zh_p_zh_zh(rz, rz2, rz3, rz4)) } -emit_mul_zs_p_zs_zs :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append(instructions, inst_mul_zs_p_zs_zs(rz, rz2, rz3, rz4)) } -emit_mul_zd_p_zd_zd :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append(instructions, inst_mul_zd_p_zd_zd(rz, rz2, rz3, rz4)) } +emit_mul_v16b_v16b_v16b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_mul_v16b_v16b_v16b(dst, src, src2)) } +emit_mul_v8h_v8h_v8h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_mul_v8h_v8h_v8h(dst, src, src2)) } +emit_mul_v4s_v4s_v4s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_mul_v4s_v4s_v4s(dst, src, src2)) } +emit_mul_zb_p_zb_zb :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append_elem(instructions, inst_mul_zb_p_zb_zb(rz, rz2, rz3, rz4)) } +emit_mul_zh_p_zh_zh :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append_elem(instructions, inst_mul_zh_p_zh_zh(rz, rz2, rz3, rz4)) } +emit_mul_zs_p_zs_zs :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append_elem(instructions, inst_mul_zs_p_zs_zs(rz, rz2, rz3, rz4)) } +emit_mul_zd_p_zd_zd :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append_elem(instructions, inst_mul_zd_p_zd_zd(rz, rz2, rz3, rz4)) } inst_mla_v8b_v8b_v8b :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .MLA, operand_count = 3, length = 4, ops = {op_v_8b(dst), op_v_8b(src), op_v_8b(src2), {}, {}}} } inst_mla_v16b_v16b_v16b :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .MLA, operand_count = 3, length = 4, ops = {op_v_16b(dst), op_v_16b(src), op_v_16b(src2), {}, {}}} } inst_mla_v4h_v4h_v4h :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .MLA, operand_count = 3, length = 4, ops = {op_v_4h(dst), op_v_4h(src), op_v_4h(src2), {}, {}}} } inst_mla_v8h_v8h_v8h :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .MLA, operand_count = 3, length = 4, ops = {op_v_8h(dst), op_v_8h(src), op_v_8h(src2), {}, {}}} } inst_mla_v2s_v2s_v2s :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .MLA, operand_count = 3, length = 4, ops = {op_v_2s(dst), op_v_2s(src), op_v_2s(src2), {}, {}}} } inst_mla_v4s_v4s_v4s :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .MLA, operand_count = 3, length = 4, ops = {op_v_4s(dst), op_v_4s(src), op_v_4s(src2), {}, {}}} } -emit_mla_v8b_v8b_v8b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_mla_v8b_v8b_v8b(dst, src, src2)) } -emit_mla_v16b_v16b_v16b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_mla_v16b_v16b_v16b(dst, src, src2)) } -emit_mla_v4h_v4h_v4h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_mla_v4h_v4h_v4h(dst, src, src2)) } -emit_mla_v8h_v8h_v8h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_mla_v8h_v8h_v8h(dst, src, src2)) } -emit_mla_v2s_v2s_v2s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_mla_v2s_v2s_v2s(dst, src, src2)) } -emit_mla_v4s_v4s_v4s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_mla_v4s_v4s_v4s(dst, src, src2)) } +emit_mla_v8b_v8b_v8b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_mla_v8b_v8b_v8b(dst, src, src2)) } +emit_mla_v16b_v16b_v16b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_mla_v16b_v16b_v16b(dst, src, src2)) } +emit_mla_v4h_v4h_v4h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_mla_v4h_v4h_v4h(dst, src, src2)) } +emit_mla_v8h_v8h_v8h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_mla_v8h_v8h_v8h(dst, src, src2)) } +emit_mla_v2s_v2s_v2s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_mla_v2s_v2s_v2s(dst, src, src2)) } +emit_mla_v4s_v4s_v4s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_mla_v4s_v4s_v4s(dst, src, src2)) } inst_mls_v8b_v8b_v8b :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .MLS, operand_count = 3, length = 4, ops = {op_v_8b(dst), op_v_8b(src), op_v_8b(src2), {}, {}}} } inst_mls_v16b_v16b_v16b :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .MLS, operand_count = 3, length = 4, ops = {op_v_16b(dst), op_v_16b(src), op_v_16b(src2), {}, {}}} } inst_mls_v4h_v4h_v4h :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .MLS, operand_count = 3, length = 4, ops = {op_v_4h(dst), op_v_4h(src), op_v_4h(src2), {}, {}}} } inst_mls_v8h_v8h_v8h :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .MLS, operand_count = 3, length = 4, ops = {op_v_8h(dst), op_v_8h(src), op_v_8h(src2), {}, {}}} } inst_mls_v2s_v2s_v2s :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .MLS, operand_count = 3, length = 4, ops = {op_v_2s(dst), op_v_2s(src), op_v_2s(src2), {}, {}}} } inst_mls_v4s_v4s_v4s :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .MLS, operand_count = 3, length = 4, ops = {op_v_4s(dst), op_v_4s(src), op_v_4s(src2), {}, {}}} } -emit_mls_v8b_v8b_v8b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_mls_v8b_v8b_v8b(dst, src, src2)) } -emit_mls_v16b_v16b_v16b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_mls_v16b_v16b_v16b(dst, src, src2)) } -emit_mls_v4h_v4h_v4h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_mls_v4h_v4h_v4h(dst, src, src2)) } -emit_mls_v8h_v8h_v8h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_mls_v8h_v8h_v8h(dst, src, src2)) } -emit_mls_v2s_v2s_v2s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_mls_v2s_v2s_v2s(dst, src, src2)) } -emit_mls_v4s_v4s_v4s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_mls_v4s_v4s_v4s(dst, src, src2)) } +emit_mls_v8b_v8b_v8b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_mls_v8b_v8b_v8b(dst, src, src2)) } +emit_mls_v16b_v16b_v16b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_mls_v16b_v16b_v16b(dst, src, src2)) } +emit_mls_v4h_v4h_v4h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_mls_v4h_v4h_v4h(dst, src, src2)) } +emit_mls_v8h_v8h_v8h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_mls_v8h_v8h_v8h(dst, src, src2)) } +emit_mls_v2s_v2s_v2s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_mls_v2s_v2s_v2s(dst, src, src2)) } +emit_mls_v4s_v4s_v4s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_mls_v4s_v4s_v4s(dst, src, src2)) } inst_neg_v8b_v8b :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .NEG, operand_count = 2, length = 4, ops = {op_v_8b(dst), op_v_8b(src), {}, {}, {}}} } inst_neg_v16b_v16b :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .NEG, operand_count = 2, length = 4, ops = {op_v_16b(dst), op_v_16b(src), {}, {}, {}}} } inst_neg_v4h_v4h :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .NEG, operand_count = 2, length = 4, ops = {op_v_4h(dst), op_v_4h(src), {}, {}, {}}} } @@ -1473,18 +1477,18 @@ inst_neg_zh_p_zh :: #force_inline proc "contextless" (rz: u8, rz2: inst_neg_zs_p_zs :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8) -> Instruction { return Instruction{mnemonic = .NEG, operand_count = 3, length = 4, ops = {op_z_s(rz), op_reg(Register(REG_P | (u16(rz2) & 0xF))), op_z_s(rz3), {}, {}}} } inst_neg_zd_p_zd :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8) -> Instruction { return Instruction{mnemonic = .NEG, operand_count = 3, length = 4, ops = {op_z_d(rz), op_reg(Register(REG_P | (u16(rz2) & 0xF))), op_z_d(rz3), {}, {}}} } inst_neg_r_sh :: #force_inline proc "contextless" (dst: Register, src: Register, src_shift: Shift_Type, src_amount: u8) -> Instruction { return Instruction{mnemonic = .NEG, operand_count = 2, length = 4, ops = {op_reg(dst), op_shifted(src, src_shift, src_amount), {}, {}, {}}} } -emit_neg_v8b_v8b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_neg_v8b_v8b(dst, src)) } -emit_neg_v16b_v16b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_neg_v16b_v16b(dst, src)) } -emit_neg_v4h_v4h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_neg_v4h_v4h(dst, src)) } -emit_neg_v8h_v8h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_neg_v8h_v8h(dst, src)) } -emit_neg_v2s_v2s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_neg_v2s_v2s(dst, src)) } -emit_neg_v4s_v4s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_neg_v4s_v4s(dst, src)) } -emit_neg_v2d_v2d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_neg_v2d_v2d(dst, src)) } -emit_neg_zb_p_zb :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append(instructions, inst_neg_zb_p_zb(rz, rz2, rz3)) } -emit_neg_zh_p_zh :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append(instructions, inst_neg_zh_p_zh(rz, rz2, rz3)) } -emit_neg_zs_p_zs :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append(instructions, inst_neg_zs_p_zs(rz, rz2, rz3)) } -emit_neg_zd_p_zd :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append(instructions, inst_neg_zd_p_zd(rz, rz2, rz3)) } -emit_neg_r_sh :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src_shift: Shift_Type, src_amount: u8) { append(instructions, inst_neg_r_sh(dst, src, src_shift, src_amount)) } +emit_neg_v8b_v8b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_neg_v8b_v8b(dst, src)) } +emit_neg_v16b_v16b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_neg_v16b_v16b(dst, src)) } +emit_neg_v4h_v4h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_neg_v4h_v4h(dst, src)) } +emit_neg_v8h_v8h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_neg_v8h_v8h(dst, src)) } +emit_neg_v2s_v2s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_neg_v2s_v2s(dst, src)) } +emit_neg_v4s_v4s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_neg_v4s_v4s(dst, src)) } +emit_neg_v2d_v2d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_neg_v2d_v2d(dst, src)) } +emit_neg_zb_p_zb :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append_elem(instructions, inst_neg_zb_p_zb(rz, rz2, rz3)) } +emit_neg_zh_p_zh :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append_elem(instructions, inst_neg_zh_p_zh(rz, rz2, rz3)) } +emit_neg_zs_p_zs :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append_elem(instructions, inst_neg_zs_p_zs(rz, rz2, rz3)) } +emit_neg_zd_p_zd :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append_elem(instructions, inst_neg_zd_p_zd(rz, rz2, rz3)) } +emit_neg_r_sh :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src_shift: Shift_Type, src_amount: u8) { append_elem(instructions, inst_neg_r_sh(dst, src, src_shift, src_amount)) } inst_abs_v8b_v8b :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .ABS, operand_count = 2, length = 4, ops = {op_v_8b(dst), op_v_8b(src), {}, {}, {}}} } inst_abs_v16b_v16b :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .ABS, operand_count = 2, length = 4, ops = {op_v_16b(dst), op_v_16b(src), {}, {}, {}}} } inst_abs_v4h_v4h :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .ABS, operand_count = 2, length = 4, ops = {op_v_4h(dst), op_v_4h(src), {}, {}, {}}} } @@ -1496,89 +1500,89 @@ inst_abs_zb_p_zb :: #force_inline proc "contextless" (rz: u8, rz2: inst_abs_zh_p_zh :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8) -> Instruction { return Instruction{mnemonic = .ABS, operand_count = 3, length = 4, ops = {op_z_h(rz), op_reg(Register(REG_P | (u16(rz2) & 0xF))), op_z_h(rz3), {}, {}}} } inst_abs_zs_p_zs :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8) -> Instruction { return Instruction{mnemonic = .ABS, operand_count = 3, length = 4, ops = {op_z_s(rz), op_reg(Register(REG_P | (u16(rz2) & 0xF))), op_z_s(rz3), {}, {}}} } inst_abs_zd_p_zd :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8) -> Instruction { return Instruction{mnemonic = .ABS, operand_count = 3, length = 4, ops = {op_z_d(rz), op_reg(Register(REG_P | (u16(rz2) & 0xF))), op_z_d(rz3), {}, {}}} } -emit_abs_v8b_v8b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_abs_v8b_v8b(dst, src)) } -emit_abs_v16b_v16b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_abs_v16b_v16b(dst, src)) } -emit_abs_v4h_v4h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_abs_v4h_v4h(dst, src)) } -emit_abs_v8h_v8h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_abs_v8h_v8h(dst, src)) } -emit_abs_v2s_v2s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_abs_v2s_v2s(dst, src)) } -emit_abs_v4s_v4s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_abs_v4s_v4s(dst, src)) } -emit_abs_v2d_v2d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_abs_v2d_v2d(dst, src)) } -emit_abs_zb_p_zb :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append(instructions, inst_abs_zb_p_zb(rz, rz2, rz3)) } -emit_abs_zh_p_zh :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append(instructions, inst_abs_zh_p_zh(rz, rz2, rz3)) } -emit_abs_zs_p_zs :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append(instructions, inst_abs_zs_p_zs(rz, rz2, rz3)) } -emit_abs_zd_p_zd :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append(instructions, inst_abs_zd_p_zd(rz, rz2, rz3)) } +emit_abs_v8b_v8b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_abs_v8b_v8b(dst, src)) } +emit_abs_v16b_v16b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_abs_v16b_v16b(dst, src)) } +emit_abs_v4h_v4h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_abs_v4h_v4h(dst, src)) } +emit_abs_v8h_v8h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_abs_v8h_v8h(dst, src)) } +emit_abs_v2s_v2s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_abs_v2s_v2s(dst, src)) } +emit_abs_v4s_v4s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_abs_v4s_v4s(dst, src)) } +emit_abs_v2d_v2d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_abs_v2d_v2d(dst, src)) } +emit_abs_zb_p_zb :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append_elem(instructions, inst_abs_zb_p_zb(rz, rz2, rz3)) } +emit_abs_zh_p_zh :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append_elem(instructions, inst_abs_zh_p_zh(rz, rz2, rz3)) } +emit_abs_zs_p_zs :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append_elem(instructions, inst_abs_zs_p_zs(rz, rz2, rz3)) } +emit_abs_zd_p_zd :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append_elem(instructions, inst_abs_zd_p_zd(rz, rz2, rz3)) } inst_shadd_v8b_v8b_v8b :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .SHADD, operand_count = 3, length = 4, ops = {op_v_8b(dst), op_v_8b(src), op_v_8b(src2), {}, {}}} } inst_shadd_v16b_v16b_v16b :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .SHADD, operand_count = 3, length = 4, ops = {op_v_16b(dst), op_v_16b(src), op_v_16b(src2), {}, {}}} } inst_shadd_v4h_v4h_v4h :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .SHADD, operand_count = 3, length = 4, ops = {op_v_4h(dst), op_v_4h(src), op_v_4h(src2), {}, {}}} } inst_shadd_v8h_v8h_v8h :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .SHADD, operand_count = 3, length = 4, ops = {op_v_8h(dst), op_v_8h(src), op_v_8h(src2), {}, {}}} } inst_shadd_v2s_v2s_v2s :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .SHADD, operand_count = 3, length = 4, ops = {op_v_2s(dst), op_v_2s(src), op_v_2s(src2), {}, {}}} } inst_shadd_v4s_v4s_v4s :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .SHADD, operand_count = 3, length = 4, ops = {op_v_4s(dst), op_v_4s(src), op_v_4s(src2), {}, {}}} } -emit_shadd_v8b_v8b_v8b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_shadd_v8b_v8b_v8b(dst, src, src2)) } -emit_shadd_v16b_v16b_v16b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_shadd_v16b_v16b_v16b(dst, src, src2)) } -emit_shadd_v4h_v4h_v4h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_shadd_v4h_v4h_v4h(dst, src, src2)) } -emit_shadd_v8h_v8h_v8h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_shadd_v8h_v8h_v8h(dst, src, src2)) } -emit_shadd_v2s_v2s_v2s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_shadd_v2s_v2s_v2s(dst, src, src2)) } -emit_shadd_v4s_v4s_v4s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_shadd_v4s_v4s_v4s(dst, src, src2)) } +emit_shadd_v8b_v8b_v8b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_shadd_v8b_v8b_v8b(dst, src, src2)) } +emit_shadd_v16b_v16b_v16b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_shadd_v16b_v16b_v16b(dst, src, src2)) } +emit_shadd_v4h_v4h_v4h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_shadd_v4h_v4h_v4h(dst, src, src2)) } +emit_shadd_v8h_v8h_v8h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_shadd_v8h_v8h_v8h(dst, src, src2)) } +emit_shadd_v2s_v2s_v2s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_shadd_v2s_v2s_v2s(dst, src, src2)) } +emit_shadd_v4s_v4s_v4s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_shadd_v4s_v4s_v4s(dst, src, src2)) } inst_uhadd_v8b_v8b_v8b :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .UHADD, operand_count = 3, length = 4, ops = {op_v_8b(dst), op_v_8b(src), op_v_8b(src2), {}, {}}} } inst_uhadd_v16b_v16b_v16b :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .UHADD, operand_count = 3, length = 4, ops = {op_v_16b(dst), op_v_16b(src), op_v_16b(src2), {}, {}}} } inst_uhadd_v4h_v4h_v4h :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .UHADD, operand_count = 3, length = 4, ops = {op_v_4h(dst), op_v_4h(src), op_v_4h(src2), {}, {}}} } inst_uhadd_v8h_v8h_v8h :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .UHADD, operand_count = 3, length = 4, ops = {op_v_8h(dst), op_v_8h(src), op_v_8h(src2), {}, {}}} } inst_uhadd_v2s_v2s_v2s :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .UHADD, operand_count = 3, length = 4, ops = {op_v_2s(dst), op_v_2s(src), op_v_2s(src2), {}, {}}} } inst_uhadd_v4s_v4s_v4s :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .UHADD, operand_count = 3, length = 4, ops = {op_v_4s(dst), op_v_4s(src), op_v_4s(src2), {}, {}}} } -emit_uhadd_v8b_v8b_v8b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_uhadd_v8b_v8b_v8b(dst, src, src2)) } -emit_uhadd_v16b_v16b_v16b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_uhadd_v16b_v16b_v16b(dst, src, src2)) } -emit_uhadd_v4h_v4h_v4h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_uhadd_v4h_v4h_v4h(dst, src, src2)) } -emit_uhadd_v8h_v8h_v8h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_uhadd_v8h_v8h_v8h(dst, src, src2)) } -emit_uhadd_v2s_v2s_v2s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_uhadd_v2s_v2s_v2s(dst, src, src2)) } -emit_uhadd_v4s_v4s_v4s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_uhadd_v4s_v4s_v4s(dst, src, src2)) } +emit_uhadd_v8b_v8b_v8b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_uhadd_v8b_v8b_v8b(dst, src, src2)) } +emit_uhadd_v16b_v16b_v16b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_uhadd_v16b_v16b_v16b(dst, src, src2)) } +emit_uhadd_v4h_v4h_v4h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_uhadd_v4h_v4h_v4h(dst, src, src2)) } +emit_uhadd_v8h_v8h_v8h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_uhadd_v8h_v8h_v8h(dst, src, src2)) } +emit_uhadd_v2s_v2s_v2s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_uhadd_v2s_v2s_v2s(dst, src, src2)) } +emit_uhadd_v4s_v4s_v4s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_uhadd_v4s_v4s_v4s(dst, src, src2)) } inst_shsub_v8b_v8b_v8b :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .SHSUB, operand_count = 3, length = 4, ops = {op_v_8b(dst), op_v_8b(src), op_v_8b(src2), {}, {}}} } inst_shsub_v16b_v16b_v16b :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .SHSUB, operand_count = 3, length = 4, ops = {op_v_16b(dst), op_v_16b(src), op_v_16b(src2), {}, {}}} } inst_shsub_v4h_v4h_v4h :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .SHSUB, operand_count = 3, length = 4, ops = {op_v_4h(dst), op_v_4h(src), op_v_4h(src2), {}, {}}} } inst_shsub_v8h_v8h_v8h :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .SHSUB, operand_count = 3, length = 4, ops = {op_v_8h(dst), op_v_8h(src), op_v_8h(src2), {}, {}}} } inst_shsub_v2s_v2s_v2s :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .SHSUB, operand_count = 3, length = 4, ops = {op_v_2s(dst), op_v_2s(src), op_v_2s(src2), {}, {}}} } inst_shsub_v4s_v4s_v4s :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .SHSUB, operand_count = 3, length = 4, ops = {op_v_4s(dst), op_v_4s(src), op_v_4s(src2), {}, {}}} } -emit_shsub_v8b_v8b_v8b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_shsub_v8b_v8b_v8b(dst, src, src2)) } -emit_shsub_v16b_v16b_v16b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_shsub_v16b_v16b_v16b(dst, src, src2)) } -emit_shsub_v4h_v4h_v4h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_shsub_v4h_v4h_v4h(dst, src, src2)) } -emit_shsub_v8h_v8h_v8h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_shsub_v8h_v8h_v8h(dst, src, src2)) } -emit_shsub_v2s_v2s_v2s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_shsub_v2s_v2s_v2s(dst, src, src2)) } -emit_shsub_v4s_v4s_v4s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_shsub_v4s_v4s_v4s(dst, src, src2)) } +emit_shsub_v8b_v8b_v8b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_shsub_v8b_v8b_v8b(dst, src, src2)) } +emit_shsub_v16b_v16b_v16b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_shsub_v16b_v16b_v16b(dst, src, src2)) } +emit_shsub_v4h_v4h_v4h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_shsub_v4h_v4h_v4h(dst, src, src2)) } +emit_shsub_v8h_v8h_v8h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_shsub_v8h_v8h_v8h(dst, src, src2)) } +emit_shsub_v2s_v2s_v2s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_shsub_v2s_v2s_v2s(dst, src, src2)) } +emit_shsub_v4s_v4s_v4s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_shsub_v4s_v4s_v4s(dst, src, src2)) } inst_uhsub_v8b_v8b_v8b :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .UHSUB, operand_count = 3, length = 4, ops = {op_v_8b(dst), op_v_8b(src), op_v_8b(src2), {}, {}}} } inst_uhsub_v16b_v16b_v16b :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .UHSUB, operand_count = 3, length = 4, ops = {op_v_16b(dst), op_v_16b(src), op_v_16b(src2), {}, {}}} } inst_uhsub_v4h_v4h_v4h :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .UHSUB, operand_count = 3, length = 4, ops = {op_v_4h(dst), op_v_4h(src), op_v_4h(src2), {}, {}}} } inst_uhsub_v8h_v8h_v8h :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .UHSUB, operand_count = 3, length = 4, ops = {op_v_8h(dst), op_v_8h(src), op_v_8h(src2), {}, {}}} } inst_uhsub_v2s_v2s_v2s :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .UHSUB, operand_count = 3, length = 4, ops = {op_v_2s(dst), op_v_2s(src), op_v_2s(src2), {}, {}}} } inst_uhsub_v4s_v4s_v4s :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .UHSUB, operand_count = 3, length = 4, ops = {op_v_4s(dst), op_v_4s(src), op_v_4s(src2), {}, {}}} } -emit_uhsub_v8b_v8b_v8b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_uhsub_v8b_v8b_v8b(dst, src, src2)) } -emit_uhsub_v16b_v16b_v16b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_uhsub_v16b_v16b_v16b(dst, src, src2)) } -emit_uhsub_v4h_v4h_v4h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_uhsub_v4h_v4h_v4h(dst, src, src2)) } -emit_uhsub_v8h_v8h_v8h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_uhsub_v8h_v8h_v8h(dst, src, src2)) } -emit_uhsub_v2s_v2s_v2s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_uhsub_v2s_v2s_v2s(dst, src, src2)) } -emit_uhsub_v4s_v4s_v4s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_uhsub_v4s_v4s_v4s(dst, src, src2)) } +emit_uhsub_v8b_v8b_v8b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_uhsub_v8b_v8b_v8b(dst, src, src2)) } +emit_uhsub_v16b_v16b_v16b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_uhsub_v16b_v16b_v16b(dst, src, src2)) } +emit_uhsub_v4h_v4h_v4h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_uhsub_v4h_v4h_v4h(dst, src, src2)) } +emit_uhsub_v8h_v8h_v8h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_uhsub_v8h_v8h_v8h(dst, src, src2)) } +emit_uhsub_v2s_v2s_v2s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_uhsub_v2s_v2s_v2s(dst, src, src2)) } +emit_uhsub_v4s_v4s_v4s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_uhsub_v4s_v4s_v4s(dst, src, src2)) } inst_srhadd_v8b_v8b_v8b :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .SRHADD, operand_count = 3, length = 4, ops = {op_v_8b(dst), op_v_8b(src), op_v_8b(src2), {}, {}}} } inst_srhadd_v16b_v16b_v16b :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .SRHADD, operand_count = 3, length = 4, ops = {op_v_16b(dst), op_v_16b(src), op_v_16b(src2), {}, {}}} } inst_srhadd_v4h_v4h_v4h :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .SRHADD, operand_count = 3, length = 4, ops = {op_v_4h(dst), op_v_4h(src), op_v_4h(src2), {}, {}}} } inst_srhadd_v8h_v8h_v8h :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .SRHADD, operand_count = 3, length = 4, ops = {op_v_8h(dst), op_v_8h(src), op_v_8h(src2), {}, {}}} } inst_srhadd_v2s_v2s_v2s :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .SRHADD, operand_count = 3, length = 4, ops = {op_v_2s(dst), op_v_2s(src), op_v_2s(src2), {}, {}}} } inst_srhadd_v4s_v4s_v4s :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .SRHADD, operand_count = 3, length = 4, ops = {op_v_4s(dst), op_v_4s(src), op_v_4s(src2), {}, {}}} } -emit_srhadd_v8b_v8b_v8b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_srhadd_v8b_v8b_v8b(dst, src, src2)) } -emit_srhadd_v16b_v16b_v16b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_srhadd_v16b_v16b_v16b(dst, src, src2)) } -emit_srhadd_v4h_v4h_v4h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_srhadd_v4h_v4h_v4h(dst, src, src2)) } -emit_srhadd_v8h_v8h_v8h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_srhadd_v8h_v8h_v8h(dst, src, src2)) } -emit_srhadd_v2s_v2s_v2s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_srhadd_v2s_v2s_v2s(dst, src, src2)) } -emit_srhadd_v4s_v4s_v4s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_srhadd_v4s_v4s_v4s(dst, src, src2)) } +emit_srhadd_v8b_v8b_v8b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_srhadd_v8b_v8b_v8b(dst, src, src2)) } +emit_srhadd_v16b_v16b_v16b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_srhadd_v16b_v16b_v16b(dst, src, src2)) } +emit_srhadd_v4h_v4h_v4h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_srhadd_v4h_v4h_v4h(dst, src, src2)) } +emit_srhadd_v8h_v8h_v8h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_srhadd_v8h_v8h_v8h(dst, src, src2)) } +emit_srhadd_v2s_v2s_v2s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_srhadd_v2s_v2s_v2s(dst, src, src2)) } +emit_srhadd_v4s_v4s_v4s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_srhadd_v4s_v4s_v4s(dst, src, src2)) } inst_urhadd_v8b_v8b_v8b :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .URHADD, operand_count = 3, length = 4, ops = {op_v_8b(dst), op_v_8b(src), op_v_8b(src2), {}, {}}} } inst_urhadd_v16b_v16b_v16b :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .URHADD, operand_count = 3, length = 4, ops = {op_v_16b(dst), op_v_16b(src), op_v_16b(src2), {}, {}}} } inst_urhadd_v4h_v4h_v4h :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .URHADD, operand_count = 3, length = 4, ops = {op_v_4h(dst), op_v_4h(src), op_v_4h(src2), {}, {}}} } inst_urhadd_v8h_v8h_v8h :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .URHADD, operand_count = 3, length = 4, ops = {op_v_8h(dst), op_v_8h(src), op_v_8h(src2), {}, {}}} } inst_urhadd_v2s_v2s_v2s :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .URHADD, operand_count = 3, length = 4, ops = {op_v_2s(dst), op_v_2s(src), op_v_2s(src2), {}, {}}} } inst_urhadd_v4s_v4s_v4s :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .URHADD, operand_count = 3, length = 4, ops = {op_v_4s(dst), op_v_4s(src), op_v_4s(src2), {}, {}}} } -emit_urhadd_v8b_v8b_v8b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_urhadd_v8b_v8b_v8b(dst, src, src2)) } -emit_urhadd_v16b_v16b_v16b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_urhadd_v16b_v16b_v16b(dst, src, src2)) } -emit_urhadd_v4h_v4h_v4h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_urhadd_v4h_v4h_v4h(dst, src, src2)) } -emit_urhadd_v8h_v8h_v8h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_urhadd_v8h_v8h_v8h(dst, src, src2)) } -emit_urhadd_v2s_v2s_v2s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_urhadd_v2s_v2s_v2s(dst, src, src2)) } -emit_urhadd_v4s_v4s_v4s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_urhadd_v4s_v4s_v4s(dst, src, src2)) } +emit_urhadd_v8b_v8b_v8b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_urhadd_v8b_v8b_v8b(dst, src, src2)) } +emit_urhadd_v16b_v16b_v16b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_urhadd_v16b_v16b_v16b(dst, src, src2)) } +emit_urhadd_v4h_v4h_v4h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_urhadd_v4h_v4h_v4h(dst, src, src2)) } +emit_urhadd_v8h_v8h_v8h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_urhadd_v8h_v8h_v8h(dst, src, src2)) } +emit_urhadd_v2s_v2s_v2s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_urhadd_v2s_v2s_v2s(dst, src, src2)) } +emit_urhadd_v4s_v4s_v4s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_urhadd_v4s_v4s_v4s(dst, src, src2)) } inst_sqadd_v8b_v8b_v8b :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .SQADD, operand_count = 3, length = 4, ops = {op_v_8b(dst), op_v_8b(src), op_v_8b(src2), {}, {}}} } inst_sqadd_v16b_v16b_v16b :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .SQADD, operand_count = 3, length = 4, ops = {op_v_16b(dst), op_v_16b(src), op_v_16b(src2), {}, {}}} } inst_sqadd_v4h_v4h_v4h :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .SQADD, operand_count = 3, length = 4, ops = {op_v_4h(dst), op_v_4h(src), op_v_4h(src2), {}, {}}} } @@ -1590,17 +1594,17 @@ inst_sqadd_zb_zb_zb :: #force_inline proc "contextless" (rz: u8, rz2: inst_sqadd_zh_zh_zh :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8) -> Instruction { return Instruction{mnemonic = .SQADD, operand_count = 3, length = 4, ops = {op_z_h(rz), op_z_h(rz2), op_z_h(rz3), {}, {}}} } inst_sqadd_zs_zs_zs :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8) -> Instruction { return Instruction{mnemonic = .SQADD, operand_count = 3, length = 4, ops = {op_z_s(rz), op_z_s(rz2), op_z_s(rz3), {}, {}}} } inst_sqadd_zd_zd_zd :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8) -> Instruction { return Instruction{mnemonic = .SQADD, operand_count = 3, length = 4, ops = {op_z_d(rz), op_z_d(rz2), op_z_d(rz3), {}, {}}} } -emit_sqadd_v8b_v8b_v8b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_sqadd_v8b_v8b_v8b(dst, src, src2)) } -emit_sqadd_v16b_v16b_v16b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_sqadd_v16b_v16b_v16b(dst, src, src2)) } -emit_sqadd_v4h_v4h_v4h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_sqadd_v4h_v4h_v4h(dst, src, src2)) } -emit_sqadd_v8h_v8h_v8h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_sqadd_v8h_v8h_v8h(dst, src, src2)) } -emit_sqadd_v2s_v2s_v2s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_sqadd_v2s_v2s_v2s(dst, src, src2)) } -emit_sqadd_v4s_v4s_v4s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_sqadd_v4s_v4s_v4s(dst, src, src2)) } -emit_sqadd_v2d_v2d_v2d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_sqadd_v2d_v2d_v2d(dst, src, src2)) } -emit_sqadd_zb_zb_zb :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append(instructions, inst_sqadd_zb_zb_zb(rz, rz2, rz3)) } -emit_sqadd_zh_zh_zh :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append(instructions, inst_sqadd_zh_zh_zh(rz, rz2, rz3)) } -emit_sqadd_zs_zs_zs :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append(instructions, inst_sqadd_zs_zs_zs(rz, rz2, rz3)) } -emit_sqadd_zd_zd_zd :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append(instructions, inst_sqadd_zd_zd_zd(rz, rz2, rz3)) } +emit_sqadd_v8b_v8b_v8b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_sqadd_v8b_v8b_v8b(dst, src, src2)) } +emit_sqadd_v16b_v16b_v16b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_sqadd_v16b_v16b_v16b(dst, src, src2)) } +emit_sqadd_v4h_v4h_v4h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_sqadd_v4h_v4h_v4h(dst, src, src2)) } +emit_sqadd_v8h_v8h_v8h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_sqadd_v8h_v8h_v8h(dst, src, src2)) } +emit_sqadd_v2s_v2s_v2s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_sqadd_v2s_v2s_v2s(dst, src, src2)) } +emit_sqadd_v4s_v4s_v4s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_sqadd_v4s_v4s_v4s(dst, src, src2)) } +emit_sqadd_v2d_v2d_v2d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_sqadd_v2d_v2d_v2d(dst, src, src2)) } +emit_sqadd_zb_zb_zb :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append_elem(instructions, inst_sqadd_zb_zb_zb(rz, rz2, rz3)) } +emit_sqadd_zh_zh_zh :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append_elem(instructions, inst_sqadd_zh_zh_zh(rz, rz2, rz3)) } +emit_sqadd_zs_zs_zs :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append_elem(instructions, inst_sqadd_zs_zs_zs(rz, rz2, rz3)) } +emit_sqadd_zd_zd_zd :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append_elem(instructions, inst_sqadd_zd_zd_zd(rz, rz2, rz3)) } inst_uqadd_v8b_v8b_v8b :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .UQADD, operand_count = 3, length = 4, ops = {op_v_8b(dst), op_v_8b(src), op_v_8b(src2), {}, {}}} } inst_uqadd_v16b_v16b_v16b :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .UQADD, operand_count = 3, length = 4, ops = {op_v_16b(dst), op_v_16b(src), op_v_16b(src2), {}, {}}} } inst_uqadd_v4h_v4h_v4h :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .UQADD, operand_count = 3, length = 4, ops = {op_v_4h(dst), op_v_4h(src), op_v_4h(src2), {}, {}}} } @@ -1612,17 +1616,17 @@ inst_uqadd_zb_zb_zb :: #force_inline proc "contextless" (rz: u8, rz2: inst_uqadd_zh_zh_zh :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8) -> Instruction { return Instruction{mnemonic = .UQADD, operand_count = 3, length = 4, ops = {op_z_h(rz), op_z_h(rz2), op_z_h(rz3), {}, {}}} } inst_uqadd_zs_zs_zs :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8) -> Instruction { return Instruction{mnemonic = .UQADD, operand_count = 3, length = 4, ops = {op_z_s(rz), op_z_s(rz2), op_z_s(rz3), {}, {}}} } inst_uqadd_zd_zd_zd :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8) -> Instruction { return Instruction{mnemonic = .UQADD, operand_count = 3, length = 4, ops = {op_z_d(rz), op_z_d(rz2), op_z_d(rz3), {}, {}}} } -emit_uqadd_v8b_v8b_v8b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_uqadd_v8b_v8b_v8b(dst, src, src2)) } -emit_uqadd_v16b_v16b_v16b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_uqadd_v16b_v16b_v16b(dst, src, src2)) } -emit_uqadd_v4h_v4h_v4h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_uqadd_v4h_v4h_v4h(dst, src, src2)) } -emit_uqadd_v8h_v8h_v8h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_uqadd_v8h_v8h_v8h(dst, src, src2)) } -emit_uqadd_v2s_v2s_v2s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_uqadd_v2s_v2s_v2s(dst, src, src2)) } -emit_uqadd_v4s_v4s_v4s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_uqadd_v4s_v4s_v4s(dst, src, src2)) } -emit_uqadd_v2d_v2d_v2d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_uqadd_v2d_v2d_v2d(dst, src, src2)) } -emit_uqadd_zb_zb_zb :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append(instructions, inst_uqadd_zb_zb_zb(rz, rz2, rz3)) } -emit_uqadd_zh_zh_zh :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append(instructions, inst_uqadd_zh_zh_zh(rz, rz2, rz3)) } -emit_uqadd_zs_zs_zs :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append(instructions, inst_uqadd_zs_zs_zs(rz, rz2, rz3)) } -emit_uqadd_zd_zd_zd :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append(instructions, inst_uqadd_zd_zd_zd(rz, rz2, rz3)) } +emit_uqadd_v8b_v8b_v8b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_uqadd_v8b_v8b_v8b(dst, src, src2)) } +emit_uqadd_v16b_v16b_v16b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_uqadd_v16b_v16b_v16b(dst, src, src2)) } +emit_uqadd_v4h_v4h_v4h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_uqadd_v4h_v4h_v4h(dst, src, src2)) } +emit_uqadd_v8h_v8h_v8h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_uqadd_v8h_v8h_v8h(dst, src, src2)) } +emit_uqadd_v2s_v2s_v2s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_uqadd_v2s_v2s_v2s(dst, src, src2)) } +emit_uqadd_v4s_v4s_v4s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_uqadd_v4s_v4s_v4s(dst, src, src2)) } +emit_uqadd_v2d_v2d_v2d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_uqadd_v2d_v2d_v2d(dst, src, src2)) } +emit_uqadd_zb_zb_zb :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append_elem(instructions, inst_uqadd_zb_zb_zb(rz, rz2, rz3)) } +emit_uqadd_zh_zh_zh :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append_elem(instructions, inst_uqadd_zh_zh_zh(rz, rz2, rz3)) } +emit_uqadd_zs_zs_zs :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append_elem(instructions, inst_uqadd_zs_zs_zs(rz, rz2, rz3)) } +emit_uqadd_zd_zd_zd :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append_elem(instructions, inst_uqadd_zd_zd_zd(rz, rz2, rz3)) } inst_sqsub_v8b_v8b_v8b :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .SQSUB, operand_count = 3, length = 4, ops = {op_v_8b(dst), op_v_8b(src), op_v_8b(src2), {}, {}}} } inst_sqsub_v16b_v16b_v16b :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .SQSUB, operand_count = 3, length = 4, ops = {op_v_16b(dst), op_v_16b(src), op_v_16b(src2), {}, {}}} } inst_sqsub_v4h_v4h_v4h :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .SQSUB, operand_count = 3, length = 4, ops = {op_v_4h(dst), op_v_4h(src), op_v_4h(src2), {}, {}}} } @@ -1634,17 +1638,17 @@ inst_sqsub_zb_zb_zb :: #force_inline proc "contextless" (rz: u8, rz2: inst_sqsub_zh_zh_zh :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8) -> Instruction { return Instruction{mnemonic = .SQSUB, operand_count = 3, length = 4, ops = {op_z_h(rz), op_z_h(rz2), op_z_h(rz3), {}, {}}} } inst_sqsub_zs_zs_zs :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8) -> Instruction { return Instruction{mnemonic = .SQSUB, operand_count = 3, length = 4, ops = {op_z_s(rz), op_z_s(rz2), op_z_s(rz3), {}, {}}} } inst_sqsub_zd_zd_zd :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8) -> Instruction { return Instruction{mnemonic = .SQSUB, operand_count = 3, length = 4, ops = {op_z_d(rz), op_z_d(rz2), op_z_d(rz3), {}, {}}} } -emit_sqsub_v8b_v8b_v8b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_sqsub_v8b_v8b_v8b(dst, src, src2)) } -emit_sqsub_v16b_v16b_v16b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_sqsub_v16b_v16b_v16b(dst, src, src2)) } -emit_sqsub_v4h_v4h_v4h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_sqsub_v4h_v4h_v4h(dst, src, src2)) } -emit_sqsub_v8h_v8h_v8h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_sqsub_v8h_v8h_v8h(dst, src, src2)) } -emit_sqsub_v2s_v2s_v2s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_sqsub_v2s_v2s_v2s(dst, src, src2)) } -emit_sqsub_v4s_v4s_v4s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_sqsub_v4s_v4s_v4s(dst, src, src2)) } -emit_sqsub_v2d_v2d_v2d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_sqsub_v2d_v2d_v2d(dst, src, src2)) } -emit_sqsub_zb_zb_zb :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append(instructions, inst_sqsub_zb_zb_zb(rz, rz2, rz3)) } -emit_sqsub_zh_zh_zh :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append(instructions, inst_sqsub_zh_zh_zh(rz, rz2, rz3)) } -emit_sqsub_zs_zs_zs :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append(instructions, inst_sqsub_zs_zs_zs(rz, rz2, rz3)) } -emit_sqsub_zd_zd_zd :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append(instructions, inst_sqsub_zd_zd_zd(rz, rz2, rz3)) } +emit_sqsub_v8b_v8b_v8b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_sqsub_v8b_v8b_v8b(dst, src, src2)) } +emit_sqsub_v16b_v16b_v16b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_sqsub_v16b_v16b_v16b(dst, src, src2)) } +emit_sqsub_v4h_v4h_v4h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_sqsub_v4h_v4h_v4h(dst, src, src2)) } +emit_sqsub_v8h_v8h_v8h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_sqsub_v8h_v8h_v8h(dst, src, src2)) } +emit_sqsub_v2s_v2s_v2s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_sqsub_v2s_v2s_v2s(dst, src, src2)) } +emit_sqsub_v4s_v4s_v4s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_sqsub_v4s_v4s_v4s(dst, src, src2)) } +emit_sqsub_v2d_v2d_v2d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_sqsub_v2d_v2d_v2d(dst, src, src2)) } +emit_sqsub_zb_zb_zb :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append_elem(instructions, inst_sqsub_zb_zb_zb(rz, rz2, rz3)) } +emit_sqsub_zh_zh_zh :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append_elem(instructions, inst_sqsub_zh_zh_zh(rz, rz2, rz3)) } +emit_sqsub_zs_zs_zs :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append_elem(instructions, inst_sqsub_zs_zs_zs(rz, rz2, rz3)) } +emit_sqsub_zd_zd_zd :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append_elem(instructions, inst_sqsub_zd_zd_zd(rz, rz2, rz3)) } inst_uqsub_v8b_v8b_v8b :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .UQSUB, operand_count = 3, length = 4, ops = {op_v_8b(dst), op_v_8b(src), op_v_8b(src2), {}, {}}} } inst_uqsub_v16b_v16b_v16b :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .UQSUB, operand_count = 3, length = 4, ops = {op_v_16b(dst), op_v_16b(src), op_v_16b(src2), {}, {}}} } inst_uqsub_v4h_v4h_v4h :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .UQSUB, operand_count = 3, length = 4, ops = {op_v_4h(dst), op_v_4h(src), op_v_4h(src2), {}, {}}} } @@ -1656,17 +1660,17 @@ inst_uqsub_zb_zb_zb :: #force_inline proc "contextless" (rz: u8, rz2: inst_uqsub_zh_zh_zh :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8) -> Instruction { return Instruction{mnemonic = .UQSUB, operand_count = 3, length = 4, ops = {op_z_h(rz), op_z_h(rz2), op_z_h(rz3), {}, {}}} } inst_uqsub_zs_zs_zs :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8) -> Instruction { return Instruction{mnemonic = .UQSUB, operand_count = 3, length = 4, ops = {op_z_s(rz), op_z_s(rz2), op_z_s(rz3), {}, {}}} } inst_uqsub_zd_zd_zd :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8) -> Instruction { return Instruction{mnemonic = .UQSUB, operand_count = 3, length = 4, ops = {op_z_d(rz), op_z_d(rz2), op_z_d(rz3), {}, {}}} } -emit_uqsub_v8b_v8b_v8b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_uqsub_v8b_v8b_v8b(dst, src, src2)) } -emit_uqsub_v16b_v16b_v16b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_uqsub_v16b_v16b_v16b(dst, src, src2)) } -emit_uqsub_v4h_v4h_v4h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_uqsub_v4h_v4h_v4h(dst, src, src2)) } -emit_uqsub_v8h_v8h_v8h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_uqsub_v8h_v8h_v8h(dst, src, src2)) } -emit_uqsub_v2s_v2s_v2s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_uqsub_v2s_v2s_v2s(dst, src, src2)) } -emit_uqsub_v4s_v4s_v4s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_uqsub_v4s_v4s_v4s(dst, src, src2)) } -emit_uqsub_v2d_v2d_v2d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_uqsub_v2d_v2d_v2d(dst, src, src2)) } -emit_uqsub_zb_zb_zb :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append(instructions, inst_uqsub_zb_zb_zb(rz, rz2, rz3)) } -emit_uqsub_zh_zh_zh :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append(instructions, inst_uqsub_zh_zh_zh(rz, rz2, rz3)) } -emit_uqsub_zs_zs_zs :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append(instructions, inst_uqsub_zs_zs_zs(rz, rz2, rz3)) } -emit_uqsub_zd_zd_zd :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append(instructions, inst_uqsub_zd_zd_zd(rz, rz2, rz3)) } +emit_uqsub_v8b_v8b_v8b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_uqsub_v8b_v8b_v8b(dst, src, src2)) } +emit_uqsub_v16b_v16b_v16b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_uqsub_v16b_v16b_v16b(dst, src, src2)) } +emit_uqsub_v4h_v4h_v4h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_uqsub_v4h_v4h_v4h(dst, src, src2)) } +emit_uqsub_v8h_v8h_v8h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_uqsub_v8h_v8h_v8h(dst, src, src2)) } +emit_uqsub_v2s_v2s_v2s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_uqsub_v2s_v2s_v2s(dst, src, src2)) } +emit_uqsub_v4s_v4s_v4s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_uqsub_v4s_v4s_v4s(dst, src, src2)) } +emit_uqsub_v2d_v2d_v2d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_uqsub_v2d_v2d_v2d(dst, src, src2)) } +emit_uqsub_zb_zb_zb :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append_elem(instructions, inst_uqsub_zb_zb_zb(rz, rz2, rz3)) } +emit_uqsub_zh_zh_zh :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append_elem(instructions, inst_uqsub_zh_zh_zh(rz, rz2, rz3)) } +emit_uqsub_zs_zs_zs :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append_elem(instructions, inst_uqsub_zs_zs_zs(rz, rz2, rz3)) } +emit_uqsub_zd_zd_zd :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append_elem(instructions, inst_uqsub_zd_zd_zd(rz, rz2, rz3)) } inst_smax_v8b_v8b_v8b :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .SMAX, operand_count = 3, length = 4, ops = {op_v_8b(dst), op_v_8b(src), op_v_8b(src2), {}, {}}} } inst_smax_v16b_v16b_v16b :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .SMAX, operand_count = 3, length = 4, ops = {op_v_16b(dst), op_v_16b(src), op_v_16b(src2), {}, {}}} } inst_smax_v4h_v4h_v4h :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .SMAX, operand_count = 3, length = 4, ops = {op_v_4h(dst), op_v_4h(src), op_v_4h(src2), {}, {}}} } @@ -1677,16 +1681,16 @@ inst_smax_zb_p_zb_zb :: #force_inline proc "contextless" (rz: u8, rz2: inst_smax_zh_p_zh_zh :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8, rz4: u8) -> Instruction { return Instruction{mnemonic = .SMAX, operand_count = 4, length = 4, ops = {op_z_h(rz), op_reg(Register(REG_P | (u16(rz2) & 0xF))), op_z_h(rz3), op_z_h(rz4), {}}} } inst_smax_zs_p_zs_zs :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8, rz4: u8) -> Instruction { return Instruction{mnemonic = .SMAX, operand_count = 4, length = 4, ops = {op_z_s(rz), op_reg(Register(REG_P | (u16(rz2) & 0xF))), op_z_s(rz3), op_z_s(rz4), {}}} } inst_smax_zd_p_zd_zd :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8, rz4: u8) -> Instruction { return Instruction{mnemonic = .SMAX, operand_count = 4, length = 4, ops = {op_z_d(rz), op_reg(Register(REG_P | (u16(rz2) & 0xF))), op_z_d(rz3), op_z_d(rz4), {}}} } -emit_smax_v8b_v8b_v8b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_smax_v8b_v8b_v8b(dst, src, src2)) } -emit_smax_v16b_v16b_v16b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_smax_v16b_v16b_v16b(dst, src, src2)) } -emit_smax_v4h_v4h_v4h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_smax_v4h_v4h_v4h(dst, src, src2)) } -emit_smax_v8h_v8h_v8h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_smax_v8h_v8h_v8h(dst, src, src2)) } -emit_smax_v2s_v2s_v2s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_smax_v2s_v2s_v2s(dst, src, src2)) } -emit_smax_v4s_v4s_v4s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_smax_v4s_v4s_v4s(dst, src, src2)) } -emit_smax_zb_p_zb_zb :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append(instructions, inst_smax_zb_p_zb_zb(rz, rz2, rz3, rz4)) } -emit_smax_zh_p_zh_zh :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append(instructions, inst_smax_zh_p_zh_zh(rz, rz2, rz3, rz4)) } -emit_smax_zs_p_zs_zs :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append(instructions, inst_smax_zs_p_zs_zs(rz, rz2, rz3, rz4)) } -emit_smax_zd_p_zd_zd :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append(instructions, inst_smax_zd_p_zd_zd(rz, rz2, rz3, rz4)) } +emit_smax_v8b_v8b_v8b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_smax_v8b_v8b_v8b(dst, src, src2)) } +emit_smax_v16b_v16b_v16b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_smax_v16b_v16b_v16b(dst, src, src2)) } +emit_smax_v4h_v4h_v4h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_smax_v4h_v4h_v4h(dst, src, src2)) } +emit_smax_v8h_v8h_v8h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_smax_v8h_v8h_v8h(dst, src, src2)) } +emit_smax_v2s_v2s_v2s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_smax_v2s_v2s_v2s(dst, src, src2)) } +emit_smax_v4s_v4s_v4s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_smax_v4s_v4s_v4s(dst, src, src2)) } +emit_smax_zb_p_zb_zb :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append_elem(instructions, inst_smax_zb_p_zb_zb(rz, rz2, rz3, rz4)) } +emit_smax_zh_p_zh_zh :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append_elem(instructions, inst_smax_zh_p_zh_zh(rz, rz2, rz3, rz4)) } +emit_smax_zs_p_zs_zs :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append_elem(instructions, inst_smax_zs_p_zs_zs(rz, rz2, rz3, rz4)) } +emit_smax_zd_p_zd_zd :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append_elem(instructions, inst_smax_zd_p_zd_zd(rz, rz2, rz3, rz4)) } inst_umax_v8b_v8b_v8b :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .UMAX, operand_count = 3, length = 4, ops = {op_v_8b(dst), op_v_8b(src), op_v_8b(src2), {}, {}}} } inst_umax_v16b_v16b_v16b :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .UMAX, operand_count = 3, length = 4, ops = {op_v_16b(dst), op_v_16b(src), op_v_16b(src2), {}, {}}} } inst_umax_v4h_v4h_v4h :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .UMAX, operand_count = 3, length = 4, ops = {op_v_4h(dst), op_v_4h(src), op_v_4h(src2), {}, {}}} } @@ -1697,16 +1701,16 @@ inst_umax_zb_p_zb_zb :: #force_inline proc "contextless" (rz: u8, rz2: inst_umax_zh_p_zh_zh :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8, rz4: u8) -> Instruction { return Instruction{mnemonic = .UMAX, operand_count = 4, length = 4, ops = {op_z_h(rz), op_reg(Register(REG_P | (u16(rz2) & 0xF))), op_z_h(rz3), op_z_h(rz4), {}}} } inst_umax_zs_p_zs_zs :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8, rz4: u8) -> Instruction { return Instruction{mnemonic = .UMAX, operand_count = 4, length = 4, ops = {op_z_s(rz), op_reg(Register(REG_P | (u16(rz2) & 0xF))), op_z_s(rz3), op_z_s(rz4), {}}} } inst_umax_zd_p_zd_zd :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8, rz4: u8) -> Instruction { return Instruction{mnemonic = .UMAX, operand_count = 4, length = 4, ops = {op_z_d(rz), op_reg(Register(REG_P | (u16(rz2) & 0xF))), op_z_d(rz3), op_z_d(rz4), {}}} } -emit_umax_v8b_v8b_v8b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_umax_v8b_v8b_v8b(dst, src, src2)) } -emit_umax_v16b_v16b_v16b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_umax_v16b_v16b_v16b(dst, src, src2)) } -emit_umax_v4h_v4h_v4h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_umax_v4h_v4h_v4h(dst, src, src2)) } -emit_umax_v8h_v8h_v8h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_umax_v8h_v8h_v8h(dst, src, src2)) } -emit_umax_v2s_v2s_v2s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_umax_v2s_v2s_v2s(dst, src, src2)) } -emit_umax_v4s_v4s_v4s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_umax_v4s_v4s_v4s(dst, src, src2)) } -emit_umax_zb_p_zb_zb :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append(instructions, inst_umax_zb_p_zb_zb(rz, rz2, rz3, rz4)) } -emit_umax_zh_p_zh_zh :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append(instructions, inst_umax_zh_p_zh_zh(rz, rz2, rz3, rz4)) } -emit_umax_zs_p_zs_zs :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append(instructions, inst_umax_zs_p_zs_zs(rz, rz2, rz3, rz4)) } -emit_umax_zd_p_zd_zd :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append(instructions, inst_umax_zd_p_zd_zd(rz, rz2, rz3, rz4)) } +emit_umax_v8b_v8b_v8b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_umax_v8b_v8b_v8b(dst, src, src2)) } +emit_umax_v16b_v16b_v16b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_umax_v16b_v16b_v16b(dst, src, src2)) } +emit_umax_v4h_v4h_v4h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_umax_v4h_v4h_v4h(dst, src, src2)) } +emit_umax_v8h_v8h_v8h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_umax_v8h_v8h_v8h(dst, src, src2)) } +emit_umax_v2s_v2s_v2s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_umax_v2s_v2s_v2s(dst, src, src2)) } +emit_umax_v4s_v4s_v4s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_umax_v4s_v4s_v4s(dst, src, src2)) } +emit_umax_zb_p_zb_zb :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append_elem(instructions, inst_umax_zb_p_zb_zb(rz, rz2, rz3, rz4)) } +emit_umax_zh_p_zh_zh :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append_elem(instructions, inst_umax_zh_p_zh_zh(rz, rz2, rz3, rz4)) } +emit_umax_zs_p_zs_zs :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append_elem(instructions, inst_umax_zs_p_zs_zs(rz, rz2, rz3, rz4)) } +emit_umax_zd_p_zd_zd :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append_elem(instructions, inst_umax_zd_p_zd_zd(rz, rz2, rz3, rz4)) } inst_smin_v8b_v8b_v8b :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .SMIN, operand_count = 3, length = 4, ops = {op_v_8b(dst), op_v_8b(src), op_v_8b(src2), {}, {}}} } inst_smin_v16b_v16b_v16b :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .SMIN, operand_count = 3, length = 4, ops = {op_v_16b(dst), op_v_16b(src), op_v_16b(src2), {}, {}}} } inst_smin_v4h_v4h_v4h :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .SMIN, operand_count = 3, length = 4, ops = {op_v_4h(dst), op_v_4h(src), op_v_4h(src2), {}, {}}} } @@ -1717,16 +1721,16 @@ inst_smin_zb_p_zb_zb :: #force_inline proc "contextless" (rz: u8, rz2: inst_smin_zh_p_zh_zh :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8, rz4: u8) -> Instruction { return Instruction{mnemonic = .SMIN, operand_count = 4, length = 4, ops = {op_z_h(rz), op_reg(Register(REG_P | (u16(rz2) & 0xF))), op_z_h(rz3), op_z_h(rz4), {}}} } inst_smin_zs_p_zs_zs :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8, rz4: u8) -> Instruction { return Instruction{mnemonic = .SMIN, operand_count = 4, length = 4, ops = {op_z_s(rz), op_reg(Register(REG_P | (u16(rz2) & 0xF))), op_z_s(rz3), op_z_s(rz4), {}}} } inst_smin_zd_p_zd_zd :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8, rz4: u8) -> Instruction { return Instruction{mnemonic = .SMIN, operand_count = 4, length = 4, ops = {op_z_d(rz), op_reg(Register(REG_P | (u16(rz2) & 0xF))), op_z_d(rz3), op_z_d(rz4), {}}} } -emit_smin_v8b_v8b_v8b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_smin_v8b_v8b_v8b(dst, src, src2)) } -emit_smin_v16b_v16b_v16b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_smin_v16b_v16b_v16b(dst, src, src2)) } -emit_smin_v4h_v4h_v4h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_smin_v4h_v4h_v4h(dst, src, src2)) } -emit_smin_v8h_v8h_v8h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_smin_v8h_v8h_v8h(dst, src, src2)) } -emit_smin_v2s_v2s_v2s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_smin_v2s_v2s_v2s(dst, src, src2)) } -emit_smin_v4s_v4s_v4s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_smin_v4s_v4s_v4s(dst, src, src2)) } -emit_smin_zb_p_zb_zb :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append(instructions, inst_smin_zb_p_zb_zb(rz, rz2, rz3, rz4)) } -emit_smin_zh_p_zh_zh :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append(instructions, inst_smin_zh_p_zh_zh(rz, rz2, rz3, rz4)) } -emit_smin_zs_p_zs_zs :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append(instructions, inst_smin_zs_p_zs_zs(rz, rz2, rz3, rz4)) } -emit_smin_zd_p_zd_zd :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append(instructions, inst_smin_zd_p_zd_zd(rz, rz2, rz3, rz4)) } +emit_smin_v8b_v8b_v8b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_smin_v8b_v8b_v8b(dst, src, src2)) } +emit_smin_v16b_v16b_v16b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_smin_v16b_v16b_v16b(dst, src, src2)) } +emit_smin_v4h_v4h_v4h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_smin_v4h_v4h_v4h(dst, src, src2)) } +emit_smin_v8h_v8h_v8h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_smin_v8h_v8h_v8h(dst, src, src2)) } +emit_smin_v2s_v2s_v2s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_smin_v2s_v2s_v2s(dst, src, src2)) } +emit_smin_v4s_v4s_v4s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_smin_v4s_v4s_v4s(dst, src, src2)) } +emit_smin_zb_p_zb_zb :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append_elem(instructions, inst_smin_zb_p_zb_zb(rz, rz2, rz3, rz4)) } +emit_smin_zh_p_zh_zh :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append_elem(instructions, inst_smin_zh_p_zh_zh(rz, rz2, rz3, rz4)) } +emit_smin_zs_p_zs_zs :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append_elem(instructions, inst_smin_zs_p_zs_zs(rz, rz2, rz3, rz4)) } +emit_smin_zd_p_zd_zd :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append_elem(instructions, inst_smin_zd_p_zd_zd(rz, rz2, rz3, rz4)) } inst_umin_v8b_v8b_v8b :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .UMIN, operand_count = 3, length = 4, ops = {op_v_8b(dst), op_v_8b(src), op_v_8b(src2), {}, {}}} } inst_umin_v16b_v16b_v16b :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .UMIN, operand_count = 3, length = 4, ops = {op_v_16b(dst), op_v_16b(src), op_v_16b(src2), {}, {}}} } inst_umin_v4h_v4h_v4h :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .UMIN, operand_count = 3, length = 4, ops = {op_v_4h(dst), op_v_4h(src), op_v_4h(src2), {}, {}}} } @@ -1737,16 +1741,16 @@ inst_umin_zb_p_zb_zb :: #force_inline proc "contextless" (rz: u8, rz2: inst_umin_zh_p_zh_zh :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8, rz4: u8) -> Instruction { return Instruction{mnemonic = .UMIN, operand_count = 4, length = 4, ops = {op_z_h(rz), op_reg(Register(REG_P | (u16(rz2) & 0xF))), op_z_h(rz3), op_z_h(rz4), {}}} } inst_umin_zs_p_zs_zs :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8, rz4: u8) -> Instruction { return Instruction{mnemonic = .UMIN, operand_count = 4, length = 4, ops = {op_z_s(rz), op_reg(Register(REG_P | (u16(rz2) & 0xF))), op_z_s(rz3), op_z_s(rz4), {}}} } inst_umin_zd_p_zd_zd :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8, rz4: u8) -> Instruction { return Instruction{mnemonic = .UMIN, operand_count = 4, length = 4, ops = {op_z_d(rz), op_reg(Register(REG_P | (u16(rz2) & 0xF))), op_z_d(rz3), op_z_d(rz4), {}}} } -emit_umin_v8b_v8b_v8b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_umin_v8b_v8b_v8b(dst, src, src2)) } -emit_umin_v16b_v16b_v16b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_umin_v16b_v16b_v16b(dst, src, src2)) } -emit_umin_v4h_v4h_v4h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_umin_v4h_v4h_v4h(dst, src, src2)) } -emit_umin_v8h_v8h_v8h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_umin_v8h_v8h_v8h(dst, src, src2)) } -emit_umin_v2s_v2s_v2s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_umin_v2s_v2s_v2s(dst, src, src2)) } -emit_umin_v4s_v4s_v4s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_umin_v4s_v4s_v4s(dst, src, src2)) } -emit_umin_zb_p_zb_zb :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append(instructions, inst_umin_zb_p_zb_zb(rz, rz2, rz3, rz4)) } -emit_umin_zh_p_zh_zh :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append(instructions, inst_umin_zh_p_zh_zh(rz, rz2, rz3, rz4)) } -emit_umin_zs_p_zs_zs :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append(instructions, inst_umin_zs_p_zs_zs(rz, rz2, rz3, rz4)) } -emit_umin_zd_p_zd_zd :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append(instructions, inst_umin_zd_p_zd_zd(rz, rz2, rz3, rz4)) } +emit_umin_v8b_v8b_v8b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_umin_v8b_v8b_v8b(dst, src, src2)) } +emit_umin_v16b_v16b_v16b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_umin_v16b_v16b_v16b(dst, src, src2)) } +emit_umin_v4h_v4h_v4h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_umin_v4h_v4h_v4h(dst, src, src2)) } +emit_umin_v8h_v8h_v8h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_umin_v8h_v8h_v8h(dst, src, src2)) } +emit_umin_v2s_v2s_v2s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_umin_v2s_v2s_v2s(dst, src, src2)) } +emit_umin_v4s_v4s_v4s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_umin_v4s_v4s_v4s(dst, src, src2)) } +emit_umin_zb_p_zb_zb :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append_elem(instructions, inst_umin_zb_p_zb_zb(rz, rz2, rz3, rz4)) } +emit_umin_zh_p_zh_zh :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append_elem(instructions, inst_umin_zh_p_zh_zh(rz, rz2, rz3, rz4)) } +emit_umin_zs_p_zs_zs :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append_elem(instructions, inst_umin_zs_p_zs_zs(rz, rz2, rz3, rz4)) } +emit_umin_zd_p_zd_zd :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append_elem(instructions, inst_umin_zd_p_zd_zd(rz, rz2, rz3, rz4)) } inst_sabd_v8b_v8b_v8b :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .SABD, operand_count = 3, length = 4, ops = {op_v_8b(dst), op_v_8b(src), op_v_8b(src2), {}, {}}} } inst_sabd_v16b_v16b_v16b :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .SABD, operand_count = 3, length = 4, ops = {op_v_16b(dst), op_v_16b(src), op_v_16b(src2), {}, {}}} } inst_sabd_v4h_v4h_v4h :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .SABD, operand_count = 3, length = 4, ops = {op_v_4h(dst), op_v_4h(src), op_v_4h(src2), {}, {}}} } @@ -1757,16 +1761,16 @@ inst_sabd_zb_p_zb_zb :: #force_inline proc "contextless" (rz: u8, rz2: inst_sabd_zh_p_zh_zh :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8, rz4: u8) -> Instruction { return Instruction{mnemonic = .SABD, operand_count = 4, length = 4, ops = {op_z_h(rz), op_reg(Register(REG_P | (u16(rz2) & 0xF))), op_z_h(rz3), op_z_h(rz4), {}}} } inst_sabd_zs_p_zs_zs :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8, rz4: u8) -> Instruction { return Instruction{mnemonic = .SABD, operand_count = 4, length = 4, ops = {op_z_s(rz), op_reg(Register(REG_P | (u16(rz2) & 0xF))), op_z_s(rz3), op_z_s(rz4), {}}} } inst_sabd_zd_p_zd_zd :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8, rz4: u8) -> Instruction { return Instruction{mnemonic = .SABD, operand_count = 4, length = 4, ops = {op_z_d(rz), op_reg(Register(REG_P | (u16(rz2) & 0xF))), op_z_d(rz3), op_z_d(rz4), {}}} } -emit_sabd_v8b_v8b_v8b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_sabd_v8b_v8b_v8b(dst, src, src2)) } -emit_sabd_v16b_v16b_v16b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_sabd_v16b_v16b_v16b(dst, src, src2)) } -emit_sabd_v4h_v4h_v4h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_sabd_v4h_v4h_v4h(dst, src, src2)) } -emit_sabd_v8h_v8h_v8h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_sabd_v8h_v8h_v8h(dst, src, src2)) } -emit_sabd_v2s_v2s_v2s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_sabd_v2s_v2s_v2s(dst, src, src2)) } -emit_sabd_v4s_v4s_v4s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_sabd_v4s_v4s_v4s(dst, src, src2)) } -emit_sabd_zb_p_zb_zb :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append(instructions, inst_sabd_zb_p_zb_zb(rz, rz2, rz3, rz4)) } -emit_sabd_zh_p_zh_zh :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append(instructions, inst_sabd_zh_p_zh_zh(rz, rz2, rz3, rz4)) } -emit_sabd_zs_p_zs_zs :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append(instructions, inst_sabd_zs_p_zs_zs(rz, rz2, rz3, rz4)) } -emit_sabd_zd_p_zd_zd :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append(instructions, inst_sabd_zd_p_zd_zd(rz, rz2, rz3, rz4)) } +emit_sabd_v8b_v8b_v8b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_sabd_v8b_v8b_v8b(dst, src, src2)) } +emit_sabd_v16b_v16b_v16b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_sabd_v16b_v16b_v16b(dst, src, src2)) } +emit_sabd_v4h_v4h_v4h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_sabd_v4h_v4h_v4h(dst, src, src2)) } +emit_sabd_v8h_v8h_v8h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_sabd_v8h_v8h_v8h(dst, src, src2)) } +emit_sabd_v2s_v2s_v2s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_sabd_v2s_v2s_v2s(dst, src, src2)) } +emit_sabd_v4s_v4s_v4s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_sabd_v4s_v4s_v4s(dst, src, src2)) } +emit_sabd_zb_p_zb_zb :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append_elem(instructions, inst_sabd_zb_p_zb_zb(rz, rz2, rz3, rz4)) } +emit_sabd_zh_p_zh_zh :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append_elem(instructions, inst_sabd_zh_p_zh_zh(rz, rz2, rz3, rz4)) } +emit_sabd_zs_p_zs_zs :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append_elem(instructions, inst_sabd_zs_p_zs_zs(rz, rz2, rz3, rz4)) } +emit_sabd_zd_p_zd_zd :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append_elem(instructions, inst_sabd_zd_p_zd_zd(rz, rz2, rz3, rz4)) } inst_uabd_v8b_v8b_v8b :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .UABD, operand_count = 3, length = 4, ops = {op_v_8b(dst), op_v_8b(src), op_v_8b(src2), {}, {}}} } inst_uabd_v16b_v16b_v16b :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .UABD, operand_count = 3, length = 4, ops = {op_v_16b(dst), op_v_16b(src), op_v_16b(src2), {}, {}}} } inst_uabd_v4h_v4h_v4h :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .UABD, operand_count = 3, length = 4, ops = {op_v_4h(dst), op_v_4h(src), op_v_4h(src2), {}, {}}} } @@ -1777,40 +1781,40 @@ inst_uabd_zb_p_zb_zb :: #force_inline proc "contextless" (rz: u8, rz2: inst_uabd_zh_p_zh_zh :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8, rz4: u8) -> Instruction { return Instruction{mnemonic = .UABD, operand_count = 4, length = 4, ops = {op_z_h(rz), op_reg(Register(REG_P | (u16(rz2) & 0xF))), op_z_h(rz3), op_z_h(rz4), {}}} } inst_uabd_zs_p_zs_zs :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8, rz4: u8) -> Instruction { return Instruction{mnemonic = .UABD, operand_count = 4, length = 4, ops = {op_z_s(rz), op_reg(Register(REG_P | (u16(rz2) & 0xF))), op_z_s(rz3), op_z_s(rz4), {}}} } inst_uabd_zd_p_zd_zd :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8, rz4: u8) -> Instruction { return Instruction{mnemonic = .UABD, operand_count = 4, length = 4, ops = {op_z_d(rz), op_reg(Register(REG_P | (u16(rz2) & 0xF))), op_z_d(rz3), op_z_d(rz4), {}}} } -emit_uabd_v8b_v8b_v8b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_uabd_v8b_v8b_v8b(dst, src, src2)) } -emit_uabd_v16b_v16b_v16b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_uabd_v16b_v16b_v16b(dst, src, src2)) } -emit_uabd_v4h_v4h_v4h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_uabd_v4h_v4h_v4h(dst, src, src2)) } -emit_uabd_v8h_v8h_v8h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_uabd_v8h_v8h_v8h(dst, src, src2)) } -emit_uabd_v2s_v2s_v2s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_uabd_v2s_v2s_v2s(dst, src, src2)) } -emit_uabd_v4s_v4s_v4s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_uabd_v4s_v4s_v4s(dst, src, src2)) } -emit_uabd_zb_p_zb_zb :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append(instructions, inst_uabd_zb_p_zb_zb(rz, rz2, rz3, rz4)) } -emit_uabd_zh_p_zh_zh :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append(instructions, inst_uabd_zh_p_zh_zh(rz, rz2, rz3, rz4)) } -emit_uabd_zs_p_zs_zs :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append(instructions, inst_uabd_zs_p_zs_zs(rz, rz2, rz3, rz4)) } -emit_uabd_zd_p_zd_zd :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append(instructions, inst_uabd_zd_p_zd_zd(rz, rz2, rz3, rz4)) } +emit_uabd_v8b_v8b_v8b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_uabd_v8b_v8b_v8b(dst, src, src2)) } +emit_uabd_v16b_v16b_v16b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_uabd_v16b_v16b_v16b(dst, src, src2)) } +emit_uabd_v4h_v4h_v4h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_uabd_v4h_v4h_v4h(dst, src, src2)) } +emit_uabd_v8h_v8h_v8h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_uabd_v8h_v8h_v8h(dst, src, src2)) } +emit_uabd_v2s_v2s_v2s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_uabd_v2s_v2s_v2s(dst, src, src2)) } +emit_uabd_v4s_v4s_v4s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_uabd_v4s_v4s_v4s(dst, src, src2)) } +emit_uabd_zb_p_zb_zb :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append_elem(instructions, inst_uabd_zb_p_zb_zb(rz, rz2, rz3, rz4)) } +emit_uabd_zh_p_zh_zh :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append_elem(instructions, inst_uabd_zh_p_zh_zh(rz, rz2, rz3, rz4)) } +emit_uabd_zs_p_zs_zs :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append_elem(instructions, inst_uabd_zs_p_zs_zs(rz, rz2, rz3, rz4)) } +emit_uabd_zd_p_zd_zd :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append_elem(instructions, inst_uabd_zd_p_zd_zd(rz, rz2, rz3, rz4)) } inst_saba_v8b_v8b_v8b :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .SABA, operand_count = 3, length = 4, ops = {op_v_8b(dst), op_v_8b(src), op_v_8b(src2), {}, {}}} } inst_saba_v16b_v16b_v16b :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .SABA, operand_count = 3, length = 4, ops = {op_v_16b(dst), op_v_16b(src), op_v_16b(src2), {}, {}}} } inst_saba_v4h_v4h_v4h :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .SABA, operand_count = 3, length = 4, ops = {op_v_4h(dst), op_v_4h(src), op_v_4h(src2), {}, {}}} } inst_saba_v8h_v8h_v8h :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .SABA, operand_count = 3, length = 4, ops = {op_v_8h(dst), op_v_8h(src), op_v_8h(src2), {}, {}}} } inst_saba_v2s_v2s_v2s :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .SABA, operand_count = 3, length = 4, ops = {op_v_2s(dst), op_v_2s(src), op_v_2s(src2), {}, {}}} } inst_saba_v4s_v4s_v4s :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .SABA, operand_count = 3, length = 4, ops = {op_v_4s(dst), op_v_4s(src), op_v_4s(src2), {}, {}}} } -emit_saba_v8b_v8b_v8b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_saba_v8b_v8b_v8b(dst, src, src2)) } -emit_saba_v16b_v16b_v16b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_saba_v16b_v16b_v16b(dst, src, src2)) } -emit_saba_v4h_v4h_v4h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_saba_v4h_v4h_v4h(dst, src, src2)) } -emit_saba_v8h_v8h_v8h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_saba_v8h_v8h_v8h(dst, src, src2)) } -emit_saba_v2s_v2s_v2s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_saba_v2s_v2s_v2s(dst, src, src2)) } -emit_saba_v4s_v4s_v4s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_saba_v4s_v4s_v4s(dst, src, src2)) } +emit_saba_v8b_v8b_v8b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_saba_v8b_v8b_v8b(dst, src, src2)) } +emit_saba_v16b_v16b_v16b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_saba_v16b_v16b_v16b(dst, src, src2)) } +emit_saba_v4h_v4h_v4h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_saba_v4h_v4h_v4h(dst, src, src2)) } +emit_saba_v8h_v8h_v8h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_saba_v8h_v8h_v8h(dst, src, src2)) } +emit_saba_v2s_v2s_v2s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_saba_v2s_v2s_v2s(dst, src, src2)) } +emit_saba_v4s_v4s_v4s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_saba_v4s_v4s_v4s(dst, src, src2)) } inst_uaba_v8b_v8b_v8b :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .UABA, operand_count = 3, length = 4, ops = {op_v_8b(dst), op_v_8b(src), op_v_8b(src2), {}, {}}} } inst_uaba_v16b_v16b_v16b :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .UABA, operand_count = 3, length = 4, ops = {op_v_16b(dst), op_v_16b(src), op_v_16b(src2), {}, {}}} } inst_uaba_v4h_v4h_v4h :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .UABA, operand_count = 3, length = 4, ops = {op_v_4h(dst), op_v_4h(src), op_v_4h(src2), {}, {}}} } inst_uaba_v8h_v8h_v8h :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .UABA, operand_count = 3, length = 4, ops = {op_v_8h(dst), op_v_8h(src), op_v_8h(src2), {}, {}}} } inst_uaba_v2s_v2s_v2s :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .UABA, operand_count = 3, length = 4, ops = {op_v_2s(dst), op_v_2s(src), op_v_2s(src2), {}, {}}} } inst_uaba_v4s_v4s_v4s :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .UABA, operand_count = 3, length = 4, ops = {op_v_4s(dst), op_v_4s(src), op_v_4s(src2), {}, {}}} } -emit_uaba_v8b_v8b_v8b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_uaba_v8b_v8b_v8b(dst, src, src2)) } -emit_uaba_v16b_v16b_v16b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_uaba_v16b_v16b_v16b(dst, src, src2)) } -emit_uaba_v4h_v4h_v4h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_uaba_v4h_v4h_v4h(dst, src, src2)) } -emit_uaba_v8h_v8h_v8h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_uaba_v8h_v8h_v8h(dst, src, src2)) } -emit_uaba_v2s_v2s_v2s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_uaba_v2s_v2s_v2s(dst, src, src2)) } -emit_uaba_v4s_v4s_v4s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_uaba_v4s_v4s_v4s(dst, src, src2)) } +emit_uaba_v8b_v8b_v8b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_uaba_v8b_v8b_v8b(dst, src, src2)) } +emit_uaba_v16b_v16b_v16b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_uaba_v16b_v16b_v16b(dst, src, src2)) } +emit_uaba_v4h_v4h_v4h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_uaba_v4h_v4h_v4h(dst, src, src2)) } +emit_uaba_v8h_v8h_v8h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_uaba_v8h_v8h_v8h(dst, src, src2)) } +emit_uaba_v2s_v2s_v2s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_uaba_v2s_v2s_v2s(dst, src, src2)) } +emit_uaba_v4s_v4s_v4s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_uaba_v4s_v4s_v4s(dst, src, src2)) } inst_addp_v8b_v8b_v8b :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .ADDP, operand_count = 3, length = 4, ops = {op_v_8b(dst), op_v_8b(src), op_v_8b(src2), {}, {}}} } inst_addp_v16b_v16b_v16b :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .ADDP, operand_count = 3, length = 4, ops = {op_v_16b(dst), op_v_16b(src), op_v_16b(src2), {}, {}}} } inst_addp_v4h_v4h_v4h :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .ADDP, operand_count = 3, length = 4, ops = {op_v_4h(dst), op_v_4h(src), op_v_4h(src2), {}, {}}} } @@ -1818,495 +1822,495 @@ inst_addp_v8h_v8h_v8h :: #force_inline proc "contextless" (dst: Register inst_addp_v2s_v2s_v2s :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .ADDP, operand_count = 3, length = 4, ops = {op_v_2s(dst), op_v_2s(src), op_v_2s(src2), {}, {}}} } inst_addp_v4s_v4s_v4s :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .ADDP, operand_count = 3, length = 4, ops = {op_v_4s(dst), op_v_4s(src), op_v_4s(src2), {}, {}}} } inst_addp_v2d_v2d_v2d :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .ADDP, operand_count = 3, length = 4, ops = {op_v_2d(dst), op_v_2d(src), op_v_2d(src2), {}, {}}} } -emit_addp_v8b_v8b_v8b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_addp_v8b_v8b_v8b(dst, src, src2)) } -emit_addp_v16b_v16b_v16b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_addp_v16b_v16b_v16b(dst, src, src2)) } -emit_addp_v4h_v4h_v4h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_addp_v4h_v4h_v4h(dst, src, src2)) } -emit_addp_v8h_v8h_v8h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_addp_v8h_v8h_v8h(dst, src, src2)) } -emit_addp_v2s_v2s_v2s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_addp_v2s_v2s_v2s(dst, src, src2)) } -emit_addp_v4s_v4s_v4s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_addp_v4s_v4s_v4s(dst, src, src2)) } -emit_addp_v2d_v2d_v2d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_addp_v2d_v2d_v2d(dst, src, src2)) } +emit_addp_v8b_v8b_v8b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_addp_v8b_v8b_v8b(dst, src, src2)) } +emit_addp_v16b_v16b_v16b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_addp_v16b_v16b_v16b(dst, src, src2)) } +emit_addp_v4h_v4h_v4h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_addp_v4h_v4h_v4h(dst, src, src2)) } +emit_addp_v8h_v8h_v8h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_addp_v8h_v8h_v8h(dst, src, src2)) } +emit_addp_v2s_v2s_v2s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_addp_v2s_v2s_v2s(dst, src, src2)) } +emit_addp_v4s_v4s_v4s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_addp_v4s_v4s_v4s(dst, src, src2)) } +emit_addp_v2d_v2d_v2d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_addp_v2d_v2d_v2d(dst, src, src2)) } inst_addv_r_v8b :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .ADDV, operand_count = 2, length = 4, ops = {op_reg(dst), op_v_8b(src), {}, {}, {}}} } inst_addv_r_v16b :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .ADDV, operand_count = 2, length = 4, ops = {op_reg(dst), op_v_16b(src), {}, {}, {}}} } inst_addv_r_v4h :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .ADDV, operand_count = 2, length = 4, ops = {op_reg(dst), op_v_4h(src), {}, {}, {}}} } inst_addv_r_v8h :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .ADDV, operand_count = 2, length = 4, ops = {op_reg(dst), op_v_8h(src), {}, {}, {}}} } inst_addv_r_v4s :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .ADDV, operand_count = 2, length = 4, ops = {op_reg(dst), op_v_4s(src), {}, {}, {}}} } -emit_addv_r_v8b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_addv_r_v8b(dst, src)) } -emit_addv_r_v16b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_addv_r_v16b(dst, src)) } -emit_addv_r_v4h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_addv_r_v4h(dst, src)) } -emit_addv_r_v8h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_addv_r_v8h(dst, src)) } -emit_addv_r_v4s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_addv_r_v4s(dst, src)) } +emit_addv_r_v8b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_addv_r_v8b(dst, src)) } +emit_addv_r_v16b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_addv_r_v16b(dst, src)) } +emit_addv_r_v4h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_addv_r_v4h(dst, src)) } +emit_addv_r_v8h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_addv_r_v8h(dst, src)) } +emit_addv_r_v4s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_addv_r_v4s(dst, src)) } inst_saddlp_v4h_v8b :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .SADDLP, operand_count = 2, length = 4, ops = {op_v_4h(dst), op_v_8b(src), {}, {}, {}}} } inst_saddlp_v8h_v16b :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .SADDLP, operand_count = 2, length = 4, ops = {op_v_8h(dst), op_v_16b(src), {}, {}, {}}} } inst_saddlp_v2s_v4h :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .SADDLP, operand_count = 2, length = 4, ops = {op_v_2s(dst), op_v_4h(src), {}, {}, {}}} } inst_saddlp_v4s_v8h :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .SADDLP, operand_count = 2, length = 4, ops = {op_v_4s(dst), op_v_8h(src), {}, {}, {}}} } inst_saddlp_v1d_v2s :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .SADDLP, operand_count = 2, length = 4, ops = {op_v_1d(dst), op_v_2s(src), {}, {}, {}}} } inst_saddlp_v2d_v4s :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .SADDLP, operand_count = 2, length = 4, ops = {op_v_2d(dst), op_v_4s(src), {}, {}, {}}} } -emit_saddlp_v4h_v8b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_saddlp_v4h_v8b(dst, src)) } -emit_saddlp_v8h_v16b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_saddlp_v8h_v16b(dst, src)) } -emit_saddlp_v2s_v4h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_saddlp_v2s_v4h(dst, src)) } -emit_saddlp_v4s_v8h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_saddlp_v4s_v8h(dst, src)) } -emit_saddlp_v1d_v2s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_saddlp_v1d_v2s(dst, src)) } -emit_saddlp_v2d_v4s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_saddlp_v2d_v4s(dst, src)) } +emit_saddlp_v4h_v8b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_saddlp_v4h_v8b(dst, src)) } +emit_saddlp_v8h_v16b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_saddlp_v8h_v16b(dst, src)) } +emit_saddlp_v2s_v4h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_saddlp_v2s_v4h(dst, src)) } +emit_saddlp_v4s_v8h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_saddlp_v4s_v8h(dst, src)) } +emit_saddlp_v1d_v2s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_saddlp_v1d_v2s(dst, src)) } +emit_saddlp_v2d_v4s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_saddlp_v2d_v4s(dst, src)) } inst_uaddlp_v4h_v8b :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .UADDLP, operand_count = 2, length = 4, ops = {op_v_4h(dst), op_v_8b(src), {}, {}, {}}} } inst_uaddlp_v8h_v16b :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .UADDLP, operand_count = 2, length = 4, ops = {op_v_8h(dst), op_v_16b(src), {}, {}, {}}} } inst_uaddlp_v2s_v4h :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .UADDLP, operand_count = 2, length = 4, ops = {op_v_2s(dst), op_v_4h(src), {}, {}, {}}} } inst_uaddlp_v4s_v8h :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .UADDLP, operand_count = 2, length = 4, ops = {op_v_4s(dst), op_v_8h(src), {}, {}, {}}} } inst_uaddlp_v1d_v2s :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .UADDLP, operand_count = 2, length = 4, ops = {op_v_1d(dst), op_v_2s(src), {}, {}, {}}} } inst_uaddlp_v2d_v4s :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .UADDLP, operand_count = 2, length = 4, ops = {op_v_2d(dst), op_v_4s(src), {}, {}, {}}} } -emit_uaddlp_v4h_v8b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_uaddlp_v4h_v8b(dst, src)) } -emit_uaddlp_v8h_v16b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_uaddlp_v8h_v16b(dst, src)) } -emit_uaddlp_v2s_v4h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_uaddlp_v2s_v4h(dst, src)) } -emit_uaddlp_v4s_v8h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_uaddlp_v4s_v8h(dst, src)) } -emit_uaddlp_v1d_v2s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_uaddlp_v1d_v2s(dst, src)) } -emit_uaddlp_v2d_v4s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_uaddlp_v2d_v4s(dst, src)) } +emit_uaddlp_v4h_v8b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_uaddlp_v4h_v8b(dst, src)) } +emit_uaddlp_v8h_v16b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_uaddlp_v8h_v16b(dst, src)) } +emit_uaddlp_v2s_v4h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_uaddlp_v2s_v4h(dst, src)) } +emit_uaddlp_v4s_v8h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_uaddlp_v4s_v8h(dst, src)) } +emit_uaddlp_v1d_v2s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_uaddlp_v1d_v2s(dst, src)) } +emit_uaddlp_v2d_v4s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_uaddlp_v2d_v4s(dst, src)) } inst_sadalp_v4h_v8b :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .SADALP, operand_count = 2, length = 4, ops = {op_v_4h(dst), op_v_8b(src), {}, {}, {}}} } inst_sadalp_v8h_v16b :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .SADALP, operand_count = 2, length = 4, ops = {op_v_8h(dst), op_v_16b(src), {}, {}, {}}} } inst_sadalp_v2s_v4h :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .SADALP, operand_count = 2, length = 4, ops = {op_v_2s(dst), op_v_4h(src), {}, {}, {}}} } inst_sadalp_v4s_v8h :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .SADALP, operand_count = 2, length = 4, ops = {op_v_4s(dst), op_v_8h(src), {}, {}, {}}} } inst_sadalp_v1d_v2s :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .SADALP, operand_count = 2, length = 4, ops = {op_v_1d(dst), op_v_2s(src), {}, {}, {}}} } inst_sadalp_v2d_v4s :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .SADALP, operand_count = 2, length = 4, ops = {op_v_2d(dst), op_v_4s(src), {}, {}, {}}} } -emit_sadalp_v4h_v8b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_sadalp_v4h_v8b(dst, src)) } -emit_sadalp_v8h_v16b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_sadalp_v8h_v16b(dst, src)) } -emit_sadalp_v2s_v4h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_sadalp_v2s_v4h(dst, src)) } -emit_sadalp_v4s_v8h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_sadalp_v4s_v8h(dst, src)) } -emit_sadalp_v1d_v2s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_sadalp_v1d_v2s(dst, src)) } -emit_sadalp_v2d_v4s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_sadalp_v2d_v4s(dst, src)) } +emit_sadalp_v4h_v8b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_sadalp_v4h_v8b(dst, src)) } +emit_sadalp_v8h_v16b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_sadalp_v8h_v16b(dst, src)) } +emit_sadalp_v2s_v4h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_sadalp_v2s_v4h(dst, src)) } +emit_sadalp_v4s_v8h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_sadalp_v4s_v8h(dst, src)) } +emit_sadalp_v1d_v2s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_sadalp_v1d_v2s(dst, src)) } +emit_sadalp_v2d_v4s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_sadalp_v2d_v4s(dst, src)) } inst_uadalp_v4h_v8b :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .UADALP, operand_count = 2, length = 4, ops = {op_v_4h(dst), op_v_8b(src), {}, {}, {}}} } inst_uadalp_v8h_v16b :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .UADALP, operand_count = 2, length = 4, ops = {op_v_8h(dst), op_v_16b(src), {}, {}, {}}} } inst_uadalp_v2s_v4h :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .UADALP, operand_count = 2, length = 4, ops = {op_v_2s(dst), op_v_4h(src), {}, {}, {}}} } inst_uadalp_v4s_v8h :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .UADALP, operand_count = 2, length = 4, ops = {op_v_4s(dst), op_v_8h(src), {}, {}, {}}} } inst_uadalp_v1d_v2s :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .UADALP, operand_count = 2, length = 4, ops = {op_v_1d(dst), op_v_2s(src), {}, {}, {}}} } inst_uadalp_v2d_v4s :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .UADALP, operand_count = 2, length = 4, ops = {op_v_2d(dst), op_v_4s(src), {}, {}, {}}} } -emit_uadalp_v4h_v8b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_uadalp_v4h_v8b(dst, src)) } -emit_uadalp_v8h_v16b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_uadalp_v8h_v16b(dst, src)) } -emit_uadalp_v2s_v4h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_uadalp_v2s_v4h(dst, src)) } -emit_uadalp_v4s_v8h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_uadalp_v4s_v8h(dst, src)) } -emit_uadalp_v1d_v2s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_uadalp_v1d_v2s(dst, src)) } -emit_uadalp_v2d_v4s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_uadalp_v2d_v4s(dst, src)) } +emit_uadalp_v4h_v8b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_uadalp_v4h_v8b(dst, src)) } +emit_uadalp_v8h_v16b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_uadalp_v8h_v16b(dst, src)) } +emit_uadalp_v2s_v4h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_uadalp_v2s_v4h(dst, src)) } +emit_uadalp_v4s_v8h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_uadalp_v4s_v8h(dst, src)) } +emit_uadalp_v1d_v2s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_uadalp_v1d_v2s(dst, src)) } +emit_uadalp_v2d_v4s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_uadalp_v2d_v4s(dst, src)) } inst_saddlv_r_v8b :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .SADDLV, operand_count = 2, length = 4, ops = {op_reg(dst), op_v_8b(src), {}, {}, {}}} } inst_saddlv_r_v16b :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .SADDLV, operand_count = 2, length = 4, ops = {op_reg(dst), op_v_16b(src), {}, {}, {}}} } inst_saddlv_r_v4h :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .SADDLV, operand_count = 2, length = 4, ops = {op_reg(dst), op_v_4h(src), {}, {}, {}}} } inst_saddlv_r_v8h :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .SADDLV, operand_count = 2, length = 4, ops = {op_reg(dst), op_v_8h(src), {}, {}, {}}} } inst_saddlv_r_v4s :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .SADDLV, operand_count = 2, length = 4, ops = {op_reg(dst), op_v_4s(src), {}, {}, {}}} } -emit_saddlv_r_v8b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_saddlv_r_v8b(dst, src)) } -emit_saddlv_r_v16b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_saddlv_r_v16b(dst, src)) } -emit_saddlv_r_v4h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_saddlv_r_v4h(dst, src)) } -emit_saddlv_r_v8h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_saddlv_r_v8h(dst, src)) } -emit_saddlv_r_v4s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_saddlv_r_v4s(dst, src)) } +emit_saddlv_r_v8b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_saddlv_r_v8b(dst, src)) } +emit_saddlv_r_v16b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_saddlv_r_v16b(dst, src)) } +emit_saddlv_r_v4h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_saddlv_r_v4h(dst, src)) } +emit_saddlv_r_v8h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_saddlv_r_v8h(dst, src)) } +emit_saddlv_r_v4s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_saddlv_r_v4s(dst, src)) } inst_uaddlv_r_v8b :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .UADDLV, operand_count = 2, length = 4, ops = {op_reg(dst), op_v_8b(src), {}, {}, {}}} } inst_uaddlv_r_v16b :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .UADDLV, operand_count = 2, length = 4, ops = {op_reg(dst), op_v_16b(src), {}, {}, {}}} } inst_uaddlv_r_v4h :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .UADDLV, operand_count = 2, length = 4, ops = {op_reg(dst), op_v_4h(src), {}, {}, {}}} } inst_uaddlv_r_v8h :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .UADDLV, operand_count = 2, length = 4, ops = {op_reg(dst), op_v_8h(src), {}, {}, {}}} } inst_uaddlv_r_v4s :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .UADDLV, operand_count = 2, length = 4, ops = {op_reg(dst), op_v_4s(src), {}, {}, {}}} } -emit_uaddlv_r_v8b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_uaddlv_r_v8b(dst, src)) } -emit_uaddlv_r_v16b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_uaddlv_r_v16b(dst, src)) } -emit_uaddlv_r_v4h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_uaddlv_r_v4h(dst, src)) } -emit_uaddlv_r_v8h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_uaddlv_r_v8h(dst, src)) } -emit_uaddlv_r_v4s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_uaddlv_r_v4s(dst, src)) } +emit_uaddlv_r_v8b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_uaddlv_r_v8b(dst, src)) } +emit_uaddlv_r_v16b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_uaddlv_r_v16b(dst, src)) } +emit_uaddlv_r_v4h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_uaddlv_r_v4h(dst, src)) } +emit_uaddlv_r_v8h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_uaddlv_r_v8h(dst, src)) } +emit_uaddlv_r_v4s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_uaddlv_r_v4s(dst, src)) } inst_smaxv_r_v8b :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .SMAXV, operand_count = 2, length = 4, ops = {op_reg(dst), op_v_8b(src), {}, {}, {}}} } inst_smaxv_r_v16b :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .SMAXV, operand_count = 2, length = 4, ops = {op_reg(dst), op_v_16b(src), {}, {}, {}}} } inst_smaxv_r_v4h :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .SMAXV, operand_count = 2, length = 4, ops = {op_reg(dst), op_v_4h(src), {}, {}, {}}} } inst_smaxv_r_v8h :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .SMAXV, operand_count = 2, length = 4, ops = {op_reg(dst), op_v_8h(src), {}, {}, {}}} } inst_smaxv_r_v4s :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .SMAXV, operand_count = 2, length = 4, ops = {op_reg(dst), op_v_4s(src), {}, {}, {}}} } -emit_smaxv_r_v8b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_smaxv_r_v8b(dst, src)) } -emit_smaxv_r_v16b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_smaxv_r_v16b(dst, src)) } -emit_smaxv_r_v4h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_smaxv_r_v4h(dst, src)) } -emit_smaxv_r_v8h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_smaxv_r_v8h(dst, src)) } -emit_smaxv_r_v4s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_smaxv_r_v4s(dst, src)) } +emit_smaxv_r_v8b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_smaxv_r_v8b(dst, src)) } +emit_smaxv_r_v16b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_smaxv_r_v16b(dst, src)) } +emit_smaxv_r_v4h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_smaxv_r_v4h(dst, src)) } +emit_smaxv_r_v8h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_smaxv_r_v8h(dst, src)) } +emit_smaxv_r_v4s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_smaxv_r_v4s(dst, src)) } inst_umaxv_r_v8b :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .UMAXV, operand_count = 2, length = 4, ops = {op_reg(dst), op_v_8b(src), {}, {}, {}}} } inst_umaxv_r_v16b :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .UMAXV, operand_count = 2, length = 4, ops = {op_reg(dst), op_v_16b(src), {}, {}, {}}} } inst_umaxv_r_v4h :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .UMAXV, operand_count = 2, length = 4, ops = {op_reg(dst), op_v_4h(src), {}, {}, {}}} } inst_umaxv_r_v8h :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .UMAXV, operand_count = 2, length = 4, ops = {op_reg(dst), op_v_8h(src), {}, {}, {}}} } inst_umaxv_r_v4s :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .UMAXV, operand_count = 2, length = 4, ops = {op_reg(dst), op_v_4s(src), {}, {}, {}}} } -emit_umaxv_r_v8b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_umaxv_r_v8b(dst, src)) } -emit_umaxv_r_v16b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_umaxv_r_v16b(dst, src)) } -emit_umaxv_r_v4h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_umaxv_r_v4h(dst, src)) } -emit_umaxv_r_v8h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_umaxv_r_v8h(dst, src)) } -emit_umaxv_r_v4s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_umaxv_r_v4s(dst, src)) } +emit_umaxv_r_v8b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_umaxv_r_v8b(dst, src)) } +emit_umaxv_r_v16b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_umaxv_r_v16b(dst, src)) } +emit_umaxv_r_v4h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_umaxv_r_v4h(dst, src)) } +emit_umaxv_r_v8h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_umaxv_r_v8h(dst, src)) } +emit_umaxv_r_v4s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_umaxv_r_v4s(dst, src)) } inst_sminv_r_v8b :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .SMINV, operand_count = 2, length = 4, ops = {op_reg(dst), op_v_8b(src), {}, {}, {}}} } inst_sminv_r_v16b :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .SMINV, operand_count = 2, length = 4, ops = {op_reg(dst), op_v_16b(src), {}, {}, {}}} } inst_sminv_r_v4h :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .SMINV, operand_count = 2, length = 4, ops = {op_reg(dst), op_v_4h(src), {}, {}, {}}} } inst_sminv_r_v8h :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .SMINV, operand_count = 2, length = 4, ops = {op_reg(dst), op_v_8h(src), {}, {}, {}}} } inst_sminv_r_v4s :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .SMINV, operand_count = 2, length = 4, ops = {op_reg(dst), op_v_4s(src), {}, {}, {}}} } -emit_sminv_r_v8b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_sminv_r_v8b(dst, src)) } -emit_sminv_r_v16b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_sminv_r_v16b(dst, src)) } -emit_sminv_r_v4h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_sminv_r_v4h(dst, src)) } -emit_sminv_r_v8h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_sminv_r_v8h(dst, src)) } -emit_sminv_r_v4s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_sminv_r_v4s(dst, src)) } +emit_sminv_r_v8b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_sminv_r_v8b(dst, src)) } +emit_sminv_r_v16b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_sminv_r_v16b(dst, src)) } +emit_sminv_r_v4h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_sminv_r_v4h(dst, src)) } +emit_sminv_r_v8h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_sminv_r_v8h(dst, src)) } +emit_sminv_r_v4s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_sminv_r_v4s(dst, src)) } inst_uminv_r_v8b :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .UMINV, operand_count = 2, length = 4, ops = {op_reg(dst), op_v_8b(src), {}, {}, {}}} } inst_uminv_r_v16b :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .UMINV, operand_count = 2, length = 4, ops = {op_reg(dst), op_v_16b(src), {}, {}, {}}} } inst_uminv_r_v4h :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .UMINV, operand_count = 2, length = 4, ops = {op_reg(dst), op_v_4h(src), {}, {}, {}}} } inst_uminv_r_v8h :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .UMINV, operand_count = 2, length = 4, ops = {op_reg(dst), op_v_8h(src), {}, {}, {}}} } inst_uminv_r_v4s :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .UMINV, operand_count = 2, length = 4, ops = {op_reg(dst), op_v_4s(src), {}, {}, {}}} } -emit_uminv_r_v8b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_uminv_r_v8b(dst, src)) } -emit_uminv_r_v16b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_uminv_r_v16b(dst, src)) } -emit_uminv_r_v4h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_uminv_r_v4h(dst, src)) } -emit_uminv_r_v8h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_uminv_r_v8h(dst, src)) } -emit_uminv_r_v4s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_uminv_r_v4s(dst, src)) } +emit_uminv_r_v8b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_uminv_r_v8b(dst, src)) } +emit_uminv_r_v16b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_uminv_r_v16b(dst, src)) } +emit_uminv_r_v4h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_uminv_r_v4h(dst, src)) } +emit_uminv_r_v8h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_uminv_r_v8h(dst, src)) } +emit_uminv_r_v4s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_uminv_r_v4s(dst, src)) } inst_smaxp_v8b_v8b_v8b :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .SMAXP, operand_count = 3, length = 4, ops = {op_v_8b(dst), op_v_8b(src), op_v_8b(src2), {}, {}}} } inst_smaxp_v16b_v16b_v16b :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .SMAXP, operand_count = 3, length = 4, ops = {op_v_16b(dst), op_v_16b(src), op_v_16b(src2), {}, {}}} } inst_smaxp_v4h_v4h_v4h :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .SMAXP, operand_count = 3, length = 4, ops = {op_v_4h(dst), op_v_4h(src), op_v_4h(src2), {}, {}}} } inst_smaxp_v8h_v8h_v8h :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .SMAXP, operand_count = 3, length = 4, ops = {op_v_8h(dst), op_v_8h(src), op_v_8h(src2), {}, {}}} } inst_smaxp_v2s_v2s_v2s :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .SMAXP, operand_count = 3, length = 4, ops = {op_v_2s(dst), op_v_2s(src), op_v_2s(src2), {}, {}}} } inst_smaxp_v4s_v4s_v4s :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .SMAXP, operand_count = 3, length = 4, ops = {op_v_4s(dst), op_v_4s(src), op_v_4s(src2), {}, {}}} } -emit_smaxp_v8b_v8b_v8b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_smaxp_v8b_v8b_v8b(dst, src, src2)) } -emit_smaxp_v16b_v16b_v16b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_smaxp_v16b_v16b_v16b(dst, src, src2)) } -emit_smaxp_v4h_v4h_v4h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_smaxp_v4h_v4h_v4h(dst, src, src2)) } -emit_smaxp_v8h_v8h_v8h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_smaxp_v8h_v8h_v8h(dst, src, src2)) } -emit_smaxp_v2s_v2s_v2s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_smaxp_v2s_v2s_v2s(dst, src, src2)) } -emit_smaxp_v4s_v4s_v4s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_smaxp_v4s_v4s_v4s(dst, src, src2)) } +emit_smaxp_v8b_v8b_v8b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_smaxp_v8b_v8b_v8b(dst, src, src2)) } +emit_smaxp_v16b_v16b_v16b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_smaxp_v16b_v16b_v16b(dst, src, src2)) } +emit_smaxp_v4h_v4h_v4h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_smaxp_v4h_v4h_v4h(dst, src, src2)) } +emit_smaxp_v8h_v8h_v8h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_smaxp_v8h_v8h_v8h(dst, src, src2)) } +emit_smaxp_v2s_v2s_v2s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_smaxp_v2s_v2s_v2s(dst, src, src2)) } +emit_smaxp_v4s_v4s_v4s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_smaxp_v4s_v4s_v4s(dst, src, src2)) } inst_umaxp_v8b_v8b_v8b :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .UMAXP, operand_count = 3, length = 4, ops = {op_v_8b(dst), op_v_8b(src), op_v_8b(src2), {}, {}}} } inst_umaxp_v16b_v16b_v16b :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .UMAXP, operand_count = 3, length = 4, ops = {op_v_16b(dst), op_v_16b(src), op_v_16b(src2), {}, {}}} } inst_umaxp_v4h_v4h_v4h :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .UMAXP, operand_count = 3, length = 4, ops = {op_v_4h(dst), op_v_4h(src), op_v_4h(src2), {}, {}}} } inst_umaxp_v8h_v8h_v8h :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .UMAXP, operand_count = 3, length = 4, ops = {op_v_8h(dst), op_v_8h(src), op_v_8h(src2), {}, {}}} } inst_umaxp_v2s_v2s_v2s :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .UMAXP, operand_count = 3, length = 4, ops = {op_v_2s(dst), op_v_2s(src), op_v_2s(src2), {}, {}}} } inst_umaxp_v4s_v4s_v4s :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .UMAXP, operand_count = 3, length = 4, ops = {op_v_4s(dst), op_v_4s(src), op_v_4s(src2), {}, {}}} } -emit_umaxp_v8b_v8b_v8b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_umaxp_v8b_v8b_v8b(dst, src, src2)) } -emit_umaxp_v16b_v16b_v16b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_umaxp_v16b_v16b_v16b(dst, src, src2)) } -emit_umaxp_v4h_v4h_v4h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_umaxp_v4h_v4h_v4h(dst, src, src2)) } -emit_umaxp_v8h_v8h_v8h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_umaxp_v8h_v8h_v8h(dst, src, src2)) } -emit_umaxp_v2s_v2s_v2s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_umaxp_v2s_v2s_v2s(dst, src, src2)) } -emit_umaxp_v4s_v4s_v4s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_umaxp_v4s_v4s_v4s(dst, src, src2)) } +emit_umaxp_v8b_v8b_v8b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_umaxp_v8b_v8b_v8b(dst, src, src2)) } +emit_umaxp_v16b_v16b_v16b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_umaxp_v16b_v16b_v16b(dst, src, src2)) } +emit_umaxp_v4h_v4h_v4h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_umaxp_v4h_v4h_v4h(dst, src, src2)) } +emit_umaxp_v8h_v8h_v8h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_umaxp_v8h_v8h_v8h(dst, src, src2)) } +emit_umaxp_v2s_v2s_v2s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_umaxp_v2s_v2s_v2s(dst, src, src2)) } +emit_umaxp_v4s_v4s_v4s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_umaxp_v4s_v4s_v4s(dst, src, src2)) } inst_sminp_v8b_v8b_v8b :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .SMINP, operand_count = 3, length = 4, ops = {op_v_8b(dst), op_v_8b(src), op_v_8b(src2), {}, {}}} } inst_sminp_v16b_v16b_v16b :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .SMINP, operand_count = 3, length = 4, ops = {op_v_16b(dst), op_v_16b(src), op_v_16b(src2), {}, {}}} } inst_sminp_v4h_v4h_v4h :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .SMINP, operand_count = 3, length = 4, ops = {op_v_4h(dst), op_v_4h(src), op_v_4h(src2), {}, {}}} } inst_sminp_v8h_v8h_v8h :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .SMINP, operand_count = 3, length = 4, ops = {op_v_8h(dst), op_v_8h(src), op_v_8h(src2), {}, {}}} } inst_sminp_v2s_v2s_v2s :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .SMINP, operand_count = 3, length = 4, ops = {op_v_2s(dst), op_v_2s(src), op_v_2s(src2), {}, {}}} } inst_sminp_v4s_v4s_v4s :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .SMINP, operand_count = 3, length = 4, ops = {op_v_4s(dst), op_v_4s(src), op_v_4s(src2), {}, {}}} } -emit_sminp_v8b_v8b_v8b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_sminp_v8b_v8b_v8b(dst, src, src2)) } -emit_sminp_v16b_v16b_v16b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_sminp_v16b_v16b_v16b(dst, src, src2)) } -emit_sminp_v4h_v4h_v4h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_sminp_v4h_v4h_v4h(dst, src, src2)) } -emit_sminp_v8h_v8h_v8h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_sminp_v8h_v8h_v8h(dst, src, src2)) } -emit_sminp_v2s_v2s_v2s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_sminp_v2s_v2s_v2s(dst, src, src2)) } -emit_sminp_v4s_v4s_v4s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_sminp_v4s_v4s_v4s(dst, src, src2)) } +emit_sminp_v8b_v8b_v8b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_sminp_v8b_v8b_v8b(dst, src, src2)) } +emit_sminp_v16b_v16b_v16b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_sminp_v16b_v16b_v16b(dst, src, src2)) } +emit_sminp_v4h_v4h_v4h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_sminp_v4h_v4h_v4h(dst, src, src2)) } +emit_sminp_v8h_v8h_v8h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_sminp_v8h_v8h_v8h(dst, src, src2)) } +emit_sminp_v2s_v2s_v2s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_sminp_v2s_v2s_v2s(dst, src, src2)) } +emit_sminp_v4s_v4s_v4s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_sminp_v4s_v4s_v4s(dst, src, src2)) } inst_uminp_v8b_v8b_v8b :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .UMINP, operand_count = 3, length = 4, ops = {op_v_8b(dst), op_v_8b(src), op_v_8b(src2), {}, {}}} } inst_uminp_v16b_v16b_v16b :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .UMINP, operand_count = 3, length = 4, ops = {op_v_16b(dst), op_v_16b(src), op_v_16b(src2), {}, {}}} } inst_uminp_v4h_v4h_v4h :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .UMINP, operand_count = 3, length = 4, ops = {op_v_4h(dst), op_v_4h(src), op_v_4h(src2), {}, {}}} } inst_uminp_v8h_v8h_v8h :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .UMINP, operand_count = 3, length = 4, ops = {op_v_8h(dst), op_v_8h(src), op_v_8h(src2), {}, {}}} } inst_uminp_v2s_v2s_v2s :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .UMINP, operand_count = 3, length = 4, ops = {op_v_2s(dst), op_v_2s(src), op_v_2s(src2), {}, {}}} } inst_uminp_v4s_v4s_v4s :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .UMINP, operand_count = 3, length = 4, ops = {op_v_4s(dst), op_v_4s(src), op_v_4s(src2), {}, {}}} } -emit_uminp_v8b_v8b_v8b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_uminp_v8b_v8b_v8b(dst, src, src2)) } -emit_uminp_v16b_v16b_v16b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_uminp_v16b_v16b_v16b(dst, src, src2)) } -emit_uminp_v4h_v4h_v4h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_uminp_v4h_v4h_v4h(dst, src, src2)) } -emit_uminp_v8h_v8h_v8h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_uminp_v8h_v8h_v8h(dst, src, src2)) } -emit_uminp_v2s_v2s_v2s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_uminp_v2s_v2s_v2s(dst, src, src2)) } -emit_uminp_v4s_v4s_v4s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_uminp_v4s_v4s_v4s(dst, src, src2)) } +emit_uminp_v8b_v8b_v8b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_uminp_v8b_v8b_v8b(dst, src, src2)) } +emit_uminp_v16b_v16b_v16b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_uminp_v16b_v16b_v16b(dst, src, src2)) } +emit_uminp_v4h_v4h_v4h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_uminp_v4h_v4h_v4h(dst, src, src2)) } +emit_uminp_v8h_v8h_v8h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_uminp_v8h_v8h_v8h(dst, src, src2)) } +emit_uminp_v2s_v2s_v2s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_uminp_v2s_v2s_v2s(dst, src, src2)) } +emit_uminp_v4s_v4s_v4s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_uminp_v4s_v4s_v4s(dst, src, src2)) } inst_saddl_v8h_v8b_v8b :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .SADDL, operand_count = 3, length = 4, ops = {op_v_8h(dst), op_v_8b(src), op_v_8b(src2), {}, {}}} } inst_saddl_v4s_v4h_v4h :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .SADDL, operand_count = 3, length = 4, ops = {op_v_4s(dst), op_v_4h(src), op_v_4h(src2), {}, {}}} } inst_saddl_v2d_v2s_v2s :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .SADDL, operand_count = 3, length = 4, ops = {op_v_2d(dst), op_v_2s(src), op_v_2s(src2), {}, {}}} } -emit_saddl_v8h_v8b_v8b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_saddl_v8h_v8b_v8b(dst, src, src2)) } -emit_saddl_v4s_v4h_v4h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_saddl_v4s_v4h_v4h(dst, src, src2)) } -emit_saddl_v2d_v2s_v2s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_saddl_v2d_v2s_v2s(dst, src, src2)) } +emit_saddl_v8h_v8b_v8b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_saddl_v8h_v8b_v8b(dst, src, src2)) } +emit_saddl_v4s_v4h_v4h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_saddl_v4s_v4h_v4h(dst, src, src2)) } +emit_saddl_v2d_v2s_v2s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_saddl_v2d_v2s_v2s(dst, src, src2)) } inst_saddl2_v8h_v16b_v16b :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .SADDL2, operand_count = 3, length = 4, ops = {op_v_8h(dst), op_v_16b(src), op_v_16b(src2), {}, {}}} } inst_saddl2_v4s_v8h_v8h :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .SADDL2, operand_count = 3, length = 4, ops = {op_v_4s(dst), op_v_8h(src), op_v_8h(src2), {}, {}}} } inst_saddl2_v2d_v4s_v4s :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .SADDL2, operand_count = 3, length = 4, ops = {op_v_2d(dst), op_v_4s(src), op_v_4s(src2), {}, {}}} } -emit_saddl2_v8h_v16b_v16b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_saddl2_v8h_v16b_v16b(dst, src, src2)) } -emit_saddl2_v4s_v8h_v8h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_saddl2_v4s_v8h_v8h(dst, src, src2)) } -emit_saddl2_v2d_v4s_v4s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_saddl2_v2d_v4s_v4s(dst, src, src2)) } +emit_saddl2_v8h_v16b_v16b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_saddl2_v8h_v16b_v16b(dst, src, src2)) } +emit_saddl2_v4s_v8h_v8h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_saddl2_v4s_v8h_v8h(dst, src, src2)) } +emit_saddl2_v2d_v4s_v4s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_saddl2_v2d_v4s_v4s(dst, src, src2)) } inst_uaddl_v8h_v8b_v8b :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .UADDL, operand_count = 3, length = 4, ops = {op_v_8h(dst), op_v_8b(src), op_v_8b(src2), {}, {}}} } inst_uaddl_v4s_v4h_v4h :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .UADDL, operand_count = 3, length = 4, ops = {op_v_4s(dst), op_v_4h(src), op_v_4h(src2), {}, {}}} } inst_uaddl_v2d_v2s_v2s :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .UADDL, operand_count = 3, length = 4, ops = {op_v_2d(dst), op_v_2s(src), op_v_2s(src2), {}, {}}} } -emit_uaddl_v8h_v8b_v8b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_uaddl_v8h_v8b_v8b(dst, src, src2)) } -emit_uaddl_v4s_v4h_v4h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_uaddl_v4s_v4h_v4h(dst, src, src2)) } -emit_uaddl_v2d_v2s_v2s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_uaddl_v2d_v2s_v2s(dst, src, src2)) } +emit_uaddl_v8h_v8b_v8b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_uaddl_v8h_v8b_v8b(dst, src, src2)) } +emit_uaddl_v4s_v4h_v4h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_uaddl_v4s_v4h_v4h(dst, src, src2)) } +emit_uaddl_v2d_v2s_v2s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_uaddl_v2d_v2s_v2s(dst, src, src2)) } inst_uaddl2_v8h_v16b_v16b :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .UADDL2, operand_count = 3, length = 4, ops = {op_v_8h(dst), op_v_16b(src), op_v_16b(src2), {}, {}}} } inst_uaddl2_v4s_v8h_v8h :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .UADDL2, operand_count = 3, length = 4, ops = {op_v_4s(dst), op_v_8h(src), op_v_8h(src2), {}, {}}} } inst_uaddl2_v2d_v4s_v4s :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .UADDL2, operand_count = 3, length = 4, ops = {op_v_2d(dst), op_v_4s(src), op_v_4s(src2), {}, {}}} } -emit_uaddl2_v8h_v16b_v16b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_uaddl2_v8h_v16b_v16b(dst, src, src2)) } -emit_uaddl2_v4s_v8h_v8h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_uaddl2_v4s_v8h_v8h(dst, src, src2)) } -emit_uaddl2_v2d_v4s_v4s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_uaddl2_v2d_v4s_v4s(dst, src, src2)) } +emit_uaddl2_v8h_v16b_v16b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_uaddl2_v8h_v16b_v16b(dst, src, src2)) } +emit_uaddl2_v4s_v8h_v8h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_uaddl2_v4s_v8h_v8h(dst, src, src2)) } +emit_uaddl2_v2d_v4s_v4s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_uaddl2_v2d_v4s_v4s(dst, src, src2)) } inst_ssubl_v8h_v8b_v8b :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .SSUBL, operand_count = 3, length = 4, ops = {op_v_8h(dst), op_v_8b(src), op_v_8b(src2), {}, {}}} } inst_ssubl_v4s_v4h_v4h :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .SSUBL, operand_count = 3, length = 4, ops = {op_v_4s(dst), op_v_4h(src), op_v_4h(src2), {}, {}}} } inst_ssubl_v2d_v2s_v2s :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .SSUBL, operand_count = 3, length = 4, ops = {op_v_2d(dst), op_v_2s(src), op_v_2s(src2), {}, {}}} } -emit_ssubl_v8h_v8b_v8b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_ssubl_v8h_v8b_v8b(dst, src, src2)) } -emit_ssubl_v4s_v4h_v4h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_ssubl_v4s_v4h_v4h(dst, src, src2)) } -emit_ssubl_v2d_v2s_v2s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_ssubl_v2d_v2s_v2s(dst, src, src2)) } +emit_ssubl_v8h_v8b_v8b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_ssubl_v8h_v8b_v8b(dst, src, src2)) } +emit_ssubl_v4s_v4h_v4h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_ssubl_v4s_v4h_v4h(dst, src, src2)) } +emit_ssubl_v2d_v2s_v2s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_ssubl_v2d_v2s_v2s(dst, src, src2)) } inst_ssubl2_v8h_v16b_v16b :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .SSUBL2, operand_count = 3, length = 4, ops = {op_v_8h(dst), op_v_16b(src), op_v_16b(src2), {}, {}}} } inst_ssubl2_v4s_v8h_v8h :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .SSUBL2, operand_count = 3, length = 4, ops = {op_v_4s(dst), op_v_8h(src), op_v_8h(src2), {}, {}}} } inst_ssubl2_v2d_v4s_v4s :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .SSUBL2, operand_count = 3, length = 4, ops = {op_v_2d(dst), op_v_4s(src), op_v_4s(src2), {}, {}}} } -emit_ssubl2_v8h_v16b_v16b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_ssubl2_v8h_v16b_v16b(dst, src, src2)) } -emit_ssubl2_v4s_v8h_v8h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_ssubl2_v4s_v8h_v8h(dst, src, src2)) } -emit_ssubl2_v2d_v4s_v4s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_ssubl2_v2d_v4s_v4s(dst, src, src2)) } +emit_ssubl2_v8h_v16b_v16b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_ssubl2_v8h_v16b_v16b(dst, src, src2)) } +emit_ssubl2_v4s_v8h_v8h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_ssubl2_v4s_v8h_v8h(dst, src, src2)) } +emit_ssubl2_v2d_v4s_v4s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_ssubl2_v2d_v4s_v4s(dst, src, src2)) } inst_usubl_v8h_v8b_v8b :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .USUBL, operand_count = 3, length = 4, ops = {op_v_8h(dst), op_v_8b(src), op_v_8b(src2), {}, {}}} } inst_usubl_v4s_v4h_v4h :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .USUBL, operand_count = 3, length = 4, ops = {op_v_4s(dst), op_v_4h(src), op_v_4h(src2), {}, {}}} } inst_usubl_v2d_v2s_v2s :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .USUBL, operand_count = 3, length = 4, ops = {op_v_2d(dst), op_v_2s(src), op_v_2s(src2), {}, {}}} } -emit_usubl_v8h_v8b_v8b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_usubl_v8h_v8b_v8b(dst, src, src2)) } -emit_usubl_v4s_v4h_v4h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_usubl_v4s_v4h_v4h(dst, src, src2)) } -emit_usubl_v2d_v2s_v2s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_usubl_v2d_v2s_v2s(dst, src, src2)) } +emit_usubl_v8h_v8b_v8b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_usubl_v8h_v8b_v8b(dst, src, src2)) } +emit_usubl_v4s_v4h_v4h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_usubl_v4s_v4h_v4h(dst, src, src2)) } +emit_usubl_v2d_v2s_v2s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_usubl_v2d_v2s_v2s(dst, src, src2)) } inst_usubl2_v8h_v16b_v16b :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .USUBL2, operand_count = 3, length = 4, ops = {op_v_8h(dst), op_v_16b(src), op_v_16b(src2), {}, {}}} } inst_usubl2_v4s_v8h_v8h :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .USUBL2, operand_count = 3, length = 4, ops = {op_v_4s(dst), op_v_8h(src), op_v_8h(src2), {}, {}}} } inst_usubl2_v2d_v4s_v4s :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .USUBL2, operand_count = 3, length = 4, ops = {op_v_2d(dst), op_v_4s(src), op_v_4s(src2), {}, {}}} } -emit_usubl2_v8h_v16b_v16b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_usubl2_v8h_v16b_v16b(dst, src, src2)) } -emit_usubl2_v4s_v8h_v8h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_usubl2_v4s_v8h_v8h(dst, src, src2)) } -emit_usubl2_v2d_v4s_v4s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_usubl2_v2d_v4s_v4s(dst, src, src2)) } +emit_usubl2_v8h_v16b_v16b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_usubl2_v8h_v16b_v16b(dst, src, src2)) } +emit_usubl2_v4s_v8h_v8h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_usubl2_v4s_v8h_v8h(dst, src, src2)) } +emit_usubl2_v2d_v4s_v4s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_usubl2_v2d_v4s_v4s(dst, src, src2)) } inst_saddw_v8h_v8h_v8b :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .SADDW, operand_count = 3, length = 4, ops = {op_v_8h(dst), op_v_8h(src), op_v_8b(src2), {}, {}}} } inst_saddw_v4s_v4s_v4h :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .SADDW, operand_count = 3, length = 4, ops = {op_v_4s(dst), op_v_4s(src), op_v_4h(src2), {}, {}}} } inst_saddw_v2d_v2d_v2s :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .SADDW, operand_count = 3, length = 4, ops = {op_v_2d(dst), op_v_2d(src), op_v_2s(src2), {}, {}}} } -emit_saddw_v8h_v8h_v8b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_saddw_v8h_v8h_v8b(dst, src, src2)) } -emit_saddw_v4s_v4s_v4h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_saddw_v4s_v4s_v4h(dst, src, src2)) } -emit_saddw_v2d_v2d_v2s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_saddw_v2d_v2d_v2s(dst, src, src2)) } +emit_saddw_v8h_v8h_v8b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_saddw_v8h_v8h_v8b(dst, src, src2)) } +emit_saddw_v4s_v4s_v4h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_saddw_v4s_v4s_v4h(dst, src, src2)) } +emit_saddw_v2d_v2d_v2s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_saddw_v2d_v2d_v2s(dst, src, src2)) } inst_saddw2_v8h_v8h_v16b :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .SADDW2, operand_count = 3, length = 4, ops = {op_v_8h(dst), op_v_8h(src), op_v_16b(src2), {}, {}}} } inst_saddw2_v4s_v4s_v8h :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .SADDW2, operand_count = 3, length = 4, ops = {op_v_4s(dst), op_v_4s(src), op_v_8h(src2), {}, {}}} } inst_saddw2_v2d_v2d_v4s :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .SADDW2, operand_count = 3, length = 4, ops = {op_v_2d(dst), op_v_2d(src), op_v_4s(src2), {}, {}}} } -emit_saddw2_v8h_v8h_v16b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_saddw2_v8h_v8h_v16b(dst, src, src2)) } -emit_saddw2_v4s_v4s_v8h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_saddw2_v4s_v4s_v8h(dst, src, src2)) } -emit_saddw2_v2d_v2d_v4s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_saddw2_v2d_v2d_v4s(dst, src, src2)) } +emit_saddw2_v8h_v8h_v16b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_saddw2_v8h_v8h_v16b(dst, src, src2)) } +emit_saddw2_v4s_v4s_v8h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_saddw2_v4s_v4s_v8h(dst, src, src2)) } +emit_saddw2_v2d_v2d_v4s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_saddw2_v2d_v2d_v4s(dst, src, src2)) } inst_uaddw_v8h_v8h_v8b :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .UADDW, operand_count = 3, length = 4, ops = {op_v_8h(dst), op_v_8h(src), op_v_8b(src2), {}, {}}} } inst_uaddw_v4s_v4s_v4h :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .UADDW, operand_count = 3, length = 4, ops = {op_v_4s(dst), op_v_4s(src), op_v_4h(src2), {}, {}}} } inst_uaddw_v2d_v2d_v2s :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .UADDW, operand_count = 3, length = 4, ops = {op_v_2d(dst), op_v_2d(src), op_v_2s(src2), {}, {}}} } -emit_uaddw_v8h_v8h_v8b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_uaddw_v8h_v8h_v8b(dst, src, src2)) } -emit_uaddw_v4s_v4s_v4h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_uaddw_v4s_v4s_v4h(dst, src, src2)) } -emit_uaddw_v2d_v2d_v2s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_uaddw_v2d_v2d_v2s(dst, src, src2)) } +emit_uaddw_v8h_v8h_v8b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_uaddw_v8h_v8h_v8b(dst, src, src2)) } +emit_uaddw_v4s_v4s_v4h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_uaddw_v4s_v4s_v4h(dst, src, src2)) } +emit_uaddw_v2d_v2d_v2s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_uaddw_v2d_v2d_v2s(dst, src, src2)) } inst_uaddw2_v8h_v8h_v16b :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .UADDW2, operand_count = 3, length = 4, ops = {op_v_8h(dst), op_v_8h(src), op_v_16b(src2), {}, {}}} } inst_uaddw2_v4s_v4s_v8h :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .UADDW2, operand_count = 3, length = 4, ops = {op_v_4s(dst), op_v_4s(src), op_v_8h(src2), {}, {}}} } inst_uaddw2_v2d_v2d_v4s :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .UADDW2, operand_count = 3, length = 4, ops = {op_v_2d(dst), op_v_2d(src), op_v_4s(src2), {}, {}}} } -emit_uaddw2_v8h_v8h_v16b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_uaddw2_v8h_v8h_v16b(dst, src, src2)) } -emit_uaddw2_v4s_v4s_v8h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_uaddw2_v4s_v4s_v8h(dst, src, src2)) } -emit_uaddw2_v2d_v2d_v4s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_uaddw2_v2d_v2d_v4s(dst, src, src2)) } +emit_uaddw2_v8h_v8h_v16b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_uaddw2_v8h_v8h_v16b(dst, src, src2)) } +emit_uaddw2_v4s_v4s_v8h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_uaddw2_v4s_v4s_v8h(dst, src, src2)) } +emit_uaddw2_v2d_v2d_v4s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_uaddw2_v2d_v2d_v4s(dst, src, src2)) } inst_ssubw_v8h_v8h_v8b :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .SSUBW, operand_count = 3, length = 4, ops = {op_v_8h(dst), op_v_8h(src), op_v_8b(src2), {}, {}}} } inst_ssubw_v4s_v4s_v4h :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .SSUBW, operand_count = 3, length = 4, ops = {op_v_4s(dst), op_v_4s(src), op_v_4h(src2), {}, {}}} } inst_ssubw_v2d_v2d_v2s :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .SSUBW, operand_count = 3, length = 4, ops = {op_v_2d(dst), op_v_2d(src), op_v_2s(src2), {}, {}}} } -emit_ssubw_v8h_v8h_v8b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_ssubw_v8h_v8h_v8b(dst, src, src2)) } -emit_ssubw_v4s_v4s_v4h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_ssubw_v4s_v4s_v4h(dst, src, src2)) } -emit_ssubw_v2d_v2d_v2s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_ssubw_v2d_v2d_v2s(dst, src, src2)) } +emit_ssubw_v8h_v8h_v8b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_ssubw_v8h_v8h_v8b(dst, src, src2)) } +emit_ssubw_v4s_v4s_v4h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_ssubw_v4s_v4s_v4h(dst, src, src2)) } +emit_ssubw_v2d_v2d_v2s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_ssubw_v2d_v2d_v2s(dst, src, src2)) } inst_ssubw2_v8h_v8h_v16b :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .SSUBW2, operand_count = 3, length = 4, ops = {op_v_8h(dst), op_v_8h(src), op_v_16b(src2), {}, {}}} } inst_ssubw2_v4s_v4s_v8h :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .SSUBW2, operand_count = 3, length = 4, ops = {op_v_4s(dst), op_v_4s(src), op_v_8h(src2), {}, {}}} } inst_ssubw2_v2d_v2d_v4s :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .SSUBW2, operand_count = 3, length = 4, ops = {op_v_2d(dst), op_v_2d(src), op_v_4s(src2), {}, {}}} } -emit_ssubw2_v8h_v8h_v16b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_ssubw2_v8h_v8h_v16b(dst, src, src2)) } -emit_ssubw2_v4s_v4s_v8h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_ssubw2_v4s_v4s_v8h(dst, src, src2)) } -emit_ssubw2_v2d_v2d_v4s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_ssubw2_v2d_v2d_v4s(dst, src, src2)) } +emit_ssubw2_v8h_v8h_v16b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_ssubw2_v8h_v8h_v16b(dst, src, src2)) } +emit_ssubw2_v4s_v4s_v8h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_ssubw2_v4s_v4s_v8h(dst, src, src2)) } +emit_ssubw2_v2d_v2d_v4s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_ssubw2_v2d_v2d_v4s(dst, src, src2)) } inst_usubw_v8h_v8h_v8b :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .USUBW, operand_count = 3, length = 4, ops = {op_v_8h(dst), op_v_8h(src), op_v_8b(src2), {}, {}}} } inst_usubw_v4s_v4s_v4h :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .USUBW, operand_count = 3, length = 4, ops = {op_v_4s(dst), op_v_4s(src), op_v_4h(src2), {}, {}}} } inst_usubw_v2d_v2d_v2s :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .USUBW, operand_count = 3, length = 4, ops = {op_v_2d(dst), op_v_2d(src), op_v_2s(src2), {}, {}}} } -emit_usubw_v8h_v8h_v8b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_usubw_v8h_v8h_v8b(dst, src, src2)) } -emit_usubw_v4s_v4s_v4h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_usubw_v4s_v4s_v4h(dst, src, src2)) } -emit_usubw_v2d_v2d_v2s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_usubw_v2d_v2d_v2s(dst, src, src2)) } +emit_usubw_v8h_v8h_v8b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_usubw_v8h_v8h_v8b(dst, src, src2)) } +emit_usubw_v4s_v4s_v4h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_usubw_v4s_v4s_v4h(dst, src, src2)) } +emit_usubw_v2d_v2d_v2s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_usubw_v2d_v2d_v2s(dst, src, src2)) } inst_usubw2_v8h_v8h_v16b :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .USUBW2, operand_count = 3, length = 4, ops = {op_v_8h(dst), op_v_8h(src), op_v_16b(src2), {}, {}}} } inst_usubw2_v4s_v4s_v8h :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .USUBW2, operand_count = 3, length = 4, ops = {op_v_4s(dst), op_v_4s(src), op_v_8h(src2), {}, {}}} } inst_usubw2_v2d_v2d_v4s :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .USUBW2, operand_count = 3, length = 4, ops = {op_v_2d(dst), op_v_2d(src), op_v_4s(src2), {}, {}}} } -emit_usubw2_v8h_v8h_v16b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_usubw2_v8h_v8h_v16b(dst, src, src2)) } -emit_usubw2_v4s_v4s_v8h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_usubw2_v4s_v4s_v8h(dst, src, src2)) } -emit_usubw2_v2d_v2d_v4s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_usubw2_v2d_v2d_v4s(dst, src, src2)) } +emit_usubw2_v8h_v8h_v16b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_usubw2_v8h_v8h_v16b(dst, src, src2)) } +emit_usubw2_v4s_v4s_v8h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_usubw2_v4s_v4s_v8h(dst, src, src2)) } +emit_usubw2_v2d_v2d_v4s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_usubw2_v2d_v2d_v4s(dst, src, src2)) } inst_raddhn_v8b_v8h_v8h :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .RADDHN, operand_count = 3, length = 4, ops = {op_v_8b(dst), op_v_8h(src), op_v_8h(src2), {}, {}}} } inst_raddhn_v4h_v4s_v4s :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .RADDHN, operand_count = 3, length = 4, ops = {op_v_4h(dst), op_v_4s(src), op_v_4s(src2), {}, {}}} } inst_raddhn_v2s_v2d_v2d :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .RADDHN, operand_count = 3, length = 4, ops = {op_v_2s(dst), op_v_2d(src), op_v_2d(src2), {}, {}}} } -emit_raddhn_v8b_v8h_v8h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_raddhn_v8b_v8h_v8h(dst, src, src2)) } -emit_raddhn_v4h_v4s_v4s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_raddhn_v4h_v4s_v4s(dst, src, src2)) } -emit_raddhn_v2s_v2d_v2d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_raddhn_v2s_v2d_v2d(dst, src, src2)) } +emit_raddhn_v8b_v8h_v8h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_raddhn_v8b_v8h_v8h(dst, src, src2)) } +emit_raddhn_v4h_v4s_v4s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_raddhn_v4h_v4s_v4s(dst, src, src2)) } +emit_raddhn_v2s_v2d_v2d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_raddhn_v2s_v2d_v2d(dst, src, src2)) } inst_raddhn2_v16b_v8h_v8h :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .RADDHN2, operand_count = 3, length = 4, ops = {op_v_16b(dst), op_v_8h(src), op_v_8h(src2), {}, {}}} } inst_raddhn2_v8h_v4s_v4s :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .RADDHN2, operand_count = 3, length = 4, ops = {op_v_8h(dst), op_v_4s(src), op_v_4s(src2), {}, {}}} } inst_raddhn2_v4s_v2d_v2d :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .RADDHN2, operand_count = 3, length = 4, ops = {op_v_4s(dst), op_v_2d(src), op_v_2d(src2), {}, {}}} } -emit_raddhn2_v16b_v8h_v8h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_raddhn2_v16b_v8h_v8h(dst, src, src2)) } -emit_raddhn2_v8h_v4s_v4s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_raddhn2_v8h_v4s_v4s(dst, src, src2)) } -emit_raddhn2_v4s_v2d_v2d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_raddhn2_v4s_v2d_v2d(dst, src, src2)) } +emit_raddhn2_v16b_v8h_v8h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_raddhn2_v16b_v8h_v8h(dst, src, src2)) } +emit_raddhn2_v8h_v4s_v4s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_raddhn2_v8h_v4s_v4s(dst, src, src2)) } +emit_raddhn2_v4s_v2d_v2d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_raddhn2_v4s_v2d_v2d(dst, src, src2)) } inst_rsubhn_v8b_v8h_v8h :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .RSUBHN, operand_count = 3, length = 4, ops = {op_v_8b(dst), op_v_8h(src), op_v_8h(src2), {}, {}}} } inst_rsubhn_v4h_v4s_v4s :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .RSUBHN, operand_count = 3, length = 4, ops = {op_v_4h(dst), op_v_4s(src), op_v_4s(src2), {}, {}}} } inst_rsubhn_v2s_v2d_v2d :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .RSUBHN, operand_count = 3, length = 4, ops = {op_v_2s(dst), op_v_2d(src), op_v_2d(src2), {}, {}}} } -emit_rsubhn_v8b_v8h_v8h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_rsubhn_v8b_v8h_v8h(dst, src, src2)) } -emit_rsubhn_v4h_v4s_v4s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_rsubhn_v4h_v4s_v4s(dst, src, src2)) } -emit_rsubhn_v2s_v2d_v2d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_rsubhn_v2s_v2d_v2d(dst, src, src2)) } +emit_rsubhn_v8b_v8h_v8h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_rsubhn_v8b_v8h_v8h(dst, src, src2)) } +emit_rsubhn_v4h_v4s_v4s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_rsubhn_v4h_v4s_v4s(dst, src, src2)) } +emit_rsubhn_v2s_v2d_v2d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_rsubhn_v2s_v2d_v2d(dst, src, src2)) } inst_rsubhn2_v16b_v8h_v8h :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .RSUBHN2, operand_count = 3, length = 4, ops = {op_v_16b(dst), op_v_8h(src), op_v_8h(src2), {}, {}}} } inst_rsubhn2_v8h_v4s_v4s :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .RSUBHN2, operand_count = 3, length = 4, ops = {op_v_8h(dst), op_v_4s(src), op_v_4s(src2), {}, {}}} } inst_rsubhn2_v4s_v2d_v2d :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .RSUBHN2, operand_count = 3, length = 4, ops = {op_v_4s(dst), op_v_2d(src), op_v_2d(src2), {}, {}}} } -emit_rsubhn2_v16b_v8h_v8h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_rsubhn2_v16b_v8h_v8h(dst, src, src2)) } -emit_rsubhn2_v8h_v4s_v4s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_rsubhn2_v8h_v4s_v4s(dst, src, src2)) } -emit_rsubhn2_v4s_v2d_v2d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_rsubhn2_v4s_v2d_v2d(dst, src, src2)) } +emit_rsubhn2_v16b_v8h_v8h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_rsubhn2_v16b_v8h_v8h(dst, src, src2)) } +emit_rsubhn2_v8h_v4s_v4s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_rsubhn2_v8h_v4s_v4s(dst, src, src2)) } +emit_rsubhn2_v4s_v2d_v2d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_rsubhn2_v4s_v2d_v2d(dst, src, src2)) } inst_addhn_v8b_v8h_v8h :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .ADDHN, operand_count = 3, length = 4, ops = {op_v_8b(dst), op_v_8h(src), op_v_8h(src2), {}, {}}} } inst_addhn_v4h_v4s_v4s :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .ADDHN, operand_count = 3, length = 4, ops = {op_v_4h(dst), op_v_4s(src), op_v_4s(src2), {}, {}}} } inst_addhn_v2s_v2d_v2d :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .ADDHN, operand_count = 3, length = 4, ops = {op_v_2s(dst), op_v_2d(src), op_v_2d(src2), {}, {}}} } -emit_addhn_v8b_v8h_v8h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_addhn_v8b_v8h_v8h(dst, src, src2)) } -emit_addhn_v4h_v4s_v4s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_addhn_v4h_v4s_v4s(dst, src, src2)) } -emit_addhn_v2s_v2d_v2d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_addhn_v2s_v2d_v2d(dst, src, src2)) } +emit_addhn_v8b_v8h_v8h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_addhn_v8b_v8h_v8h(dst, src, src2)) } +emit_addhn_v4h_v4s_v4s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_addhn_v4h_v4s_v4s(dst, src, src2)) } +emit_addhn_v2s_v2d_v2d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_addhn_v2s_v2d_v2d(dst, src, src2)) } inst_addhn2_v16b_v8h_v8h :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .ADDHN2, operand_count = 3, length = 4, ops = {op_v_16b(dst), op_v_8h(src), op_v_8h(src2), {}, {}}} } inst_addhn2_v8h_v4s_v4s :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .ADDHN2, operand_count = 3, length = 4, ops = {op_v_8h(dst), op_v_4s(src), op_v_4s(src2), {}, {}}} } inst_addhn2_v4s_v2d_v2d :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .ADDHN2, operand_count = 3, length = 4, ops = {op_v_4s(dst), op_v_2d(src), op_v_2d(src2), {}, {}}} } -emit_addhn2_v16b_v8h_v8h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_addhn2_v16b_v8h_v8h(dst, src, src2)) } -emit_addhn2_v8h_v4s_v4s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_addhn2_v8h_v4s_v4s(dst, src, src2)) } -emit_addhn2_v4s_v2d_v2d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_addhn2_v4s_v2d_v2d(dst, src, src2)) } +emit_addhn2_v16b_v8h_v8h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_addhn2_v16b_v8h_v8h(dst, src, src2)) } +emit_addhn2_v8h_v4s_v4s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_addhn2_v8h_v4s_v4s(dst, src, src2)) } +emit_addhn2_v4s_v2d_v2d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_addhn2_v4s_v2d_v2d(dst, src, src2)) } inst_subhn_v8b_v8h_v8h :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .SUBHN, operand_count = 3, length = 4, ops = {op_v_8b(dst), op_v_8h(src), op_v_8h(src2), {}, {}}} } inst_subhn_v4h_v4s_v4s :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .SUBHN, operand_count = 3, length = 4, ops = {op_v_4h(dst), op_v_4s(src), op_v_4s(src2), {}, {}}} } inst_subhn_v2s_v2d_v2d :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .SUBHN, operand_count = 3, length = 4, ops = {op_v_2s(dst), op_v_2d(src), op_v_2d(src2), {}, {}}} } -emit_subhn_v8b_v8h_v8h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_subhn_v8b_v8h_v8h(dst, src, src2)) } -emit_subhn_v4h_v4s_v4s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_subhn_v4h_v4s_v4s(dst, src, src2)) } -emit_subhn_v2s_v2d_v2d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_subhn_v2s_v2d_v2d(dst, src, src2)) } +emit_subhn_v8b_v8h_v8h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_subhn_v8b_v8h_v8h(dst, src, src2)) } +emit_subhn_v4h_v4s_v4s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_subhn_v4h_v4s_v4s(dst, src, src2)) } +emit_subhn_v2s_v2d_v2d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_subhn_v2s_v2d_v2d(dst, src, src2)) } inst_subhn2_v16b_v8h_v8h :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .SUBHN2, operand_count = 3, length = 4, ops = {op_v_16b(dst), op_v_8h(src), op_v_8h(src2), {}, {}}} } inst_subhn2_v8h_v4s_v4s :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .SUBHN2, operand_count = 3, length = 4, ops = {op_v_8h(dst), op_v_4s(src), op_v_4s(src2), {}, {}}} } inst_subhn2_v4s_v2d_v2d :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .SUBHN2, operand_count = 3, length = 4, ops = {op_v_4s(dst), op_v_2d(src), op_v_2d(src2), {}, {}}} } -emit_subhn2_v16b_v8h_v8h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_subhn2_v16b_v8h_v8h(dst, src, src2)) } -emit_subhn2_v8h_v4s_v4s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_subhn2_v8h_v4s_v4s(dst, src, src2)) } -emit_subhn2_v4s_v2d_v2d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_subhn2_v4s_v2d_v2d(dst, src, src2)) } +emit_subhn2_v16b_v8h_v8h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_subhn2_v16b_v8h_v8h(dst, src, src2)) } +emit_subhn2_v8h_v4s_v4s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_subhn2_v8h_v4s_v4s(dst, src, src2)) } +emit_subhn2_v4s_v2d_v2d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_subhn2_v4s_v2d_v2d(dst, src, src2)) } inst_xtn_v8b_v8h :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .XTN, operand_count = 2, length = 4, ops = {op_v_8b(dst), op_v_8h(src), {}, {}, {}}} } inst_xtn_v4h_v4s :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .XTN, operand_count = 2, length = 4, ops = {op_v_4h(dst), op_v_4s(src), {}, {}, {}}} } inst_xtn_v2s_v2d :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .XTN, operand_count = 2, length = 4, ops = {op_v_2s(dst), op_v_2d(src), {}, {}, {}}} } -emit_xtn_v8b_v8h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_xtn_v8b_v8h(dst, src)) } -emit_xtn_v4h_v4s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_xtn_v4h_v4s(dst, src)) } -emit_xtn_v2s_v2d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_xtn_v2s_v2d(dst, src)) } +emit_xtn_v8b_v8h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_xtn_v8b_v8h(dst, src)) } +emit_xtn_v4h_v4s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_xtn_v4h_v4s(dst, src)) } +emit_xtn_v2s_v2d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_xtn_v2s_v2d(dst, src)) } inst_xtn2_v16b_v8h :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .XTN2, operand_count = 2, length = 4, ops = {op_v_16b(dst), op_v_8h(src), {}, {}, {}}} } inst_xtn2_v8h_v4s :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .XTN2, operand_count = 2, length = 4, ops = {op_v_8h(dst), op_v_4s(src), {}, {}, {}}} } inst_xtn2_v4s_v2d :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .XTN2, operand_count = 2, length = 4, ops = {op_v_4s(dst), op_v_2d(src), {}, {}, {}}} } -emit_xtn2_v16b_v8h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_xtn2_v16b_v8h(dst, src)) } -emit_xtn2_v8h_v4s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_xtn2_v8h_v4s(dst, src)) } -emit_xtn2_v4s_v2d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_xtn2_v4s_v2d(dst, src)) } +emit_xtn2_v16b_v8h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_xtn2_v16b_v8h(dst, src)) } +emit_xtn2_v8h_v4s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_xtn2_v8h_v4s(dst, src)) } +emit_xtn2_v4s_v2d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_xtn2_v4s_v2d(dst, src)) } inst_sqxtn_v8b_v8h :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .SQXTN, operand_count = 2, length = 4, ops = {op_v_8b(dst), op_v_8h(src), {}, {}, {}}} } inst_sqxtn_v4h_v4s :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .SQXTN, operand_count = 2, length = 4, ops = {op_v_4h(dst), op_v_4s(src), {}, {}, {}}} } inst_sqxtn_v2s_v2d :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .SQXTN, operand_count = 2, length = 4, ops = {op_v_2s(dst), op_v_2d(src), {}, {}, {}}} } -emit_sqxtn_v8b_v8h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_sqxtn_v8b_v8h(dst, src)) } -emit_sqxtn_v4h_v4s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_sqxtn_v4h_v4s(dst, src)) } -emit_sqxtn_v2s_v2d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_sqxtn_v2s_v2d(dst, src)) } +emit_sqxtn_v8b_v8h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_sqxtn_v8b_v8h(dst, src)) } +emit_sqxtn_v4h_v4s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_sqxtn_v4h_v4s(dst, src)) } +emit_sqxtn_v2s_v2d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_sqxtn_v2s_v2d(dst, src)) } inst_sqxtn2_v16b_v8h :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .SQXTN2, operand_count = 2, length = 4, ops = {op_v_16b(dst), op_v_8h(src), {}, {}, {}}} } inst_sqxtn2_v8h_v4s :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .SQXTN2, operand_count = 2, length = 4, ops = {op_v_8h(dst), op_v_4s(src), {}, {}, {}}} } inst_sqxtn2_v4s_v2d :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .SQXTN2, operand_count = 2, length = 4, ops = {op_v_4s(dst), op_v_2d(src), {}, {}, {}}} } -emit_sqxtn2_v16b_v8h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_sqxtn2_v16b_v8h(dst, src)) } -emit_sqxtn2_v8h_v4s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_sqxtn2_v8h_v4s(dst, src)) } -emit_sqxtn2_v4s_v2d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_sqxtn2_v4s_v2d(dst, src)) } +emit_sqxtn2_v16b_v8h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_sqxtn2_v16b_v8h(dst, src)) } +emit_sqxtn2_v8h_v4s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_sqxtn2_v8h_v4s(dst, src)) } +emit_sqxtn2_v4s_v2d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_sqxtn2_v4s_v2d(dst, src)) } inst_uqxtn_v8b_v8h :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .UQXTN, operand_count = 2, length = 4, ops = {op_v_8b(dst), op_v_8h(src), {}, {}, {}}} } inst_uqxtn_v4h_v4s :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .UQXTN, operand_count = 2, length = 4, ops = {op_v_4h(dst), op_v_4s(src), {}, {}, {}}} } inst_uqxtn_v2s_v2d :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .UQXTN, operand_count = 2, length = 4, ops = {op_v_2s(dst), op_v_2d(src), {}, {}, {}}} } -emit_uqxtn_v8b_v8h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_uqxtn_v8b_v8h(dst, src)) } -emit_uqxtn_v4h_v4s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_uqxtn_v4h_v4s(dst, src)) } -emit_uqxtn_v2s_v2d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_uqxtn_v2s_v2d(dst, src)) } +emit_uqxtn_v8b_v8h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_uqxtn_v8b_v8h(dst, src)) } +emit_uqxtn_v4h_v4s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_uqxtn_v4h_v4s(dst, src)) } +emit_uqxtn_v2s_v2d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_uqxtn_v2s_v2d(dst, src)) } inst_uqxtn2_v16b_v8h :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .UQXTN2, operand_count = 2, length = 4, ops = {op_v_16b(dst), op_v_8h(src), {}, {}, {}}} } inst_uqxtn2_v8h_v4s :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .UQXTN2, operand_count = 2, length = 4, ops = {op_v_8h(dst), op_v_4s(src), {}, {}, {}}} } inst_uqxtn2_v4s_v2d :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .UQXTN2, operand_count = 2, length = 4, ops = {op_v_4s(dst), op_v_2d(src), {}, {}, {}}} } -emit_uqxtn2_v16b_v8h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_uqxtn2_v16b_v8h(dst, src)) } -emit_uqxtn2_v8h_v4s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_uqxtn2_v8h_v4s(dst, src)) } -emit_uqxtn2_v4s_v2d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_uqxtn2_v4s_v2d(dst, src)) } +emit_uqxtn2_v16b_v8h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_uqxtn2_v16b_v8h(dst, src)) } +emit_uqxtn2_v8h_v4s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_uqxtn2_v8h_v4s(dst, src)) } +emit_uqxtn2_v4s_v2d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_uqxtn2_v4s_v2d(dst, src)) } inst_sqxtun_v8b_v8h :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .SQXTUN, operand_count = 2, length = 4, ops = {op_v_8b(dst), op_v_8h(src), {}, {}, {}}} } inst_sqxtun_v4h_v4s :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .SQXTUN, operand_count = 2, length = 4, ops = {op_v_4h(dst), op_v_4s(src), {}, {}, {}}} } inst_sqxtun_v2s_v2d :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .SQXTUN, operand_count = 2, length = 4, ops = {op_v_2s(dst), op_v_2d(src), {}, {}, {}}} } -emit_sqxtun_v8b_v8h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_sqxtun_v8b_v8h(dst, src)) } -emit_sqxtun_v4h_v4s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_sqxtun_v4h_v4s(dst, src)) } -emit_sqxtun_v2s_v2d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_sqxtun_v2s_v2d(dst, src)) } +emit_sqxtun_v8b_v8h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_sqxtun_v8b_v8h(dst, src)) } +emit_sqxtun_v4h_v4s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_sqxtun_v4h_v4s(dst, src)) } +emit_sqxtun_v2s_v2d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_sqxtun_v2s_v2d(dst, src)) } inst_sqxtun2_v16b_v8h :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .SQXTUN2, operand_count = 2, length = 4, ops = {op_v_16b(dst), op_v_8h(src), {}, {}, {}}} } inst_sqxtun2_v8h_v4s :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .SQXTUN2, operand_count = 2, length = 4, ops = {op_v_8h(dst), op_v_4s(src), {}, {}, {}}} } inst_sqxtun2_v4s_v2d :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .SQXTUN2, operand_count = 2, length = 4, ops = {op_v_4s(dst), op_v_2d(src), {}, {}, {}}} } -emit_sqxtun2_v16b_v8h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_sqxtun2_v16b_v8h(dst, src)) } -emit_sqxtun2_v8h_v4s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_sqxtun2_v8h_v4s(dst, src)) } -emit_sqxtun2_v4s_v2d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_sqxtun2_v4s_v2d(dst, src)) } +emit_sqxtun2_v16b_v8h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_sqxtun2_v16b_v8h(dst, src)) } +emit_sqxtun2_v8h_v4s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_sqxtun2_v8h_v4s(dst, src)) } +emit_sqxtun2_v4s_v2d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_sqxtun2_v4s_v2d(dst, src)) } inst_smull_v8h_v8b_v8b :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .SMULL, operand_count = 3, length = 4, ops = {op_v_8h(dst), op_v_8b(src), op_v_8b(src2), {}, {}}} } inst_smull_v4s_v4h_v4h :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .SMULL, operand_count = 3, length = 4, ops = {op_v_4s(dst), op_v_4h(src), op_v_4h(src2), {}, {}}} } inst_smull_v2d_v2s_v2s :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .SMULL, operand_count = 3, length = 4, ops = {op_v_2d(dst), op_v_2s(src), op_v_2s(src2), {}, {}}} } -emit_smull_v8h_v8b_v8b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_smull_v8h_v8b_v8b(dst, src, src2)) } -emit_smull_v4s_v4h_v4h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_smull_v4s_v4h_v4h(dst, src, src2)) } -emit_smull_v2d_v2s_v2s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_smull_v2d_v2s_v2s(dst, src, src2)) } +emit_smull_v8h_v8b_v8b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_smull_v8h_v8b_v8b(dst, src, src2)) } +emit_smull_v4s_v4h_v4h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_smull_v4s_v4h_v4h(dst, src, src2)) } +emit_smull_v2d_v2s_v2s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_smull_v2d_v2s_v2s(dst, src, src2)) } inst_smull2_v8h_v16b_v16b :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .SMULL2, operand_count = 3, length = 4, ops = {op_v_8h(dst), op_v_16b(src), op_v_16b(src2), {}, {}}} } inst_smull2_v4s_v8h_v8h :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .SMULL2, operand_count = 3, length = 4, ops = {op_v_4s(dst), op_v_8h(src), op_v_8h(src2), {}, {}}} } inst_smull2_v2d_v4s_v4s :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .SMULL2, operand_count = 3, length = 4, ops = {op_v_2d(dst), op_v_4s(src), op_v_4s(src2), {}, {}}} } -emit_smull2_v8h_v16b_v16b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_smull2_v8h_v16b_v16b(dst, src, src2)) } -emit_smull2_v4s_v8h_v8h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_smull2_v4s_v8h_v8h(dst, src, src2)) } -emit_smull2_v2d_v4s_v4s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_smull2_v2d_v4s_v4s(dst, src, src2)) } +emit_smull2_v8h_v16b_v16b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_smull2_v8h_v16b_v16b(dst, src, src2)) } +emit_smull2_v4s_v8h_v8h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_smull2_v4s_v8h_v8h(dst, src, src2)) } +emit_smull2_v2d_v4s_v4s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_smull2_v2d_v4s_v4s(dst, src, src2)) } inst_umull_v8h_v8b_v8b :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .UMULL, operand_count = 3, length = 4, ops = {op_v_8h(dst), op_v_8b(src), op_v_8b(src2), {}, {}}} } inst_umull_v4s_v4h_v4h :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .UMULL, operand_count = 3, length = 4, ops = {op_v_4s(dst), op_v_4h(src), op_v_4h(src2), {}, {}}} } inst_umull_v2d_v2s_v2s :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .UMULL, operand_count = 3, length = 4, ops = {op_v_2d(dst), op_v_2s(src), op_v_2s(src2), {}, {}}} } -emit_umull_v8h_v8b_v8b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_umull_v8h_v8b_v8b(dst, src, src2)) } -emit_umull_v4s_v4h_v4h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_umull_v4s_v4h_v4h(dst, src, src2)) } -emit_umull_v2d_v2s_v2s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_umull_v2d_v2s_v2s(dst, src, src2)) } +emit_umull_v8h_v8b_v8b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_umull_v8h_v8b_v8b(dst, src, src2)) } +emit_umull_v4s_v4h_v4h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_umull_v4s_v4h_v4h(dst, src, src2)) } +emit_umull_v2d_v2s_v2s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_umull_v2d_v2s_v2s(dst, src, src2)) } inst_umull2_v8h_v16b_v16b :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .UMULL2, operand_count = 3, length = 4, ops = {op_v_8h(dst), op_v_16b(src), op_v_16b(src2), {}, {}}} } inst_umull2_v4s_v8h_v8h :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .UMULL2, operand_count = 3, length = 4, ops = {op_v_4s(dst), op_v_8h(src), op_v_8h(src2), {}, {}}} } inst_umull2_v2d_v4s_v4s :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .UMULL2, operand_count = 3, length = 4, ops = {op_v_2d(dst), op_v_4s(src), op_v_4s(src2), {}, {}}} } -emit_umull2_v8h_v16b_v16b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_umull2_v8h_v16b_v16b(dst, src, src2)) } -emit_umull2_v4s_v8h_v8h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_umull2_v4s_v8h_v8h(dst, src, src2)) } -emit_umull2_v2d_v4s_v4s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_umull2_v2d_v4s_v4s(dst, src, src2)) } +emit_umull2_v8h_v16b_v16b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_umull2_v8h_v16b_v16b(dst, src, src2)) } +emit_umull2_v4s_v8h_v8h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_umull2_v4s_v8h_v8h(dst, src, src2)) } +emit_umull2_v2d_v4s_v4s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_umull2_v2d_v4s_v4s(dst, src, src2)) } inst_smlal_v8h_v8b_v8b :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .SMLAL, operand_count = 3, length = 4, ops = {op_v_8h(dst), op_v_8b(src), op_v_8b(src2), {}, {}}} } inst_smlal_v4s_v4h_v4h :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .SMLAL, operand_count = 3, length = 4, ops = {op_v_4s(dst), op_v_4h(src), op_v_4h(src2), {}, {}}} } inst_smlal_v2d_v2s_v2s :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .SMLAL, operand_count = 3, length = 4, ops = {op_v_2d(dst), op_v_2s(src), op_v_2s(src2), {}, {}}} } -emit_smlal_v8h_v8b_v8b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_smlal_v8h_v8b_v8b(dst, src, src2)) } -emit_smlal_v4s_v4h_v4h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_smlal_v4s_v4h_v4h(dst, src, src2)) } -emit_smlal_v2d_v2s_v2s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_smlal_v2d_v2s_v2s(dst, src, src2)) } +emit_smlal_v8h_v8b_v8b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_smlal_v8h_v8b_v8b(dst, src, src2)) } +emit_smlal_v4s_v4h_v4h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_smlal_v4s_v4h_v4h(dst, src, src2)) } +emit_smlal_v2d_v2s_v2s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_smlal_v2d_v2s_v2s(dst, src, src2)) } inst_smlal2_v8h_v16b_v16b :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .SMLAL2, operand_count = 3, length = 4, ops = {op_v_8h(dst), op_v_16b(src), op_v_16b(src2), {}, {}}} } inst_smlal2_v4s_v8h_v8h :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .SMLAL2, operand_count = 3, length = 4, ops = {op_v_4s(dst), op_v_8h(src), op_v_8h(src2), {}, {}}} } inst_smlal2_v2d_v4s_v4s :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .SMLAL2, operand_count = 3, length = 4, ops = {op_v_2d(dst), op_v_4s(src), op_v_4s(src2), {}, {}}} } -emit_smlal2_v8h_v16b_v16b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_smlal2_v8h_v16b_v16b(dst, src, src2)) } -emit_smlal2_v4s_v8h_v8h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_smlal2_v4s_v8h_v8h(dst, src, src2)) } -emit_smlal2_v2d_v4s_v4s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_smlal2_v2d_v4s_v4s(dst, src, src2)) } +emit_smlal2_v8h_v16b_v16b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_smlal2_v8h_v16b_v16b(dst, src, src2)) } +emit_smlal2_v4s_v8h_v8h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_smlal2_v4s_v8h_v8h(dst, src, src2)) } +emit_smlal2_v2d_v4s_v4s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_smlal2_v2d_v4s_v4s(dst, src, src2)) } inst_umlal_v8h_v8b_v8b :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .UMLAL, operand_count = 3, length = 4, ops = {op_v_8h(dst), op_v_8b(src), op_v_8b(src2), {}, {}}} } inst_umlal_v4s_v4h_v4h :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .UMLAL, operand_count = 3, length = 4, ops = {op_v_4s(dst), op_v_4h(src), op_v_4h(src2), {}, {}}} } inst_umlal_v2d_v2s_v2s :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .UMLAL, operand_count = 3, length = 4, ops = {op_v_2d(dst), op_v_2s(src), op_v_2s(src2), {}, {}}} } -emit_umlal_v8h_v8b_v8b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_umlal_v8h_v8b_v8b(dst, src, src2)) } -emit_umlal_v4s_v4h_v4h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_umlal_v4s_v4h_v4h(dst, src, src2)) } -emit_umlal_v2d_v2s_v2s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_umlal_v2d_v2s_v2s(dst, src, src2)) } +emit_umlal_v8h_v8b_v8b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_umlal_v8h_v8b_v8b(dst, src, src2)) } +emit_umlal_v4s_v4h_v4h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_umlal_v4s_v4h_v4h(dst, src, src2)) } +emit_umlal_v2d_v2s_v2s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_umlal_v2d_v2s_v2s(dst, src, src2)) } inst_umlal2_v8h_v16b_v16b :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .UMLAL2, operand_count = 3, length = 4, ops = {op_v_8h(dst), op_v_16b(src), op_v_16b(src2), {}, {}}} } inst_umlal2_v4s_v8h_v8h :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .UMLAL2, operand_count = 3, length = 4, ops = {op_v_4s(dst), op_v_8h(src), op_v_8h(src2), {}, {}}} } inst_umlal2_v2d_v4s_v4s :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .UMLAL2, operand_count = 3, length = 4, ops = {op_v_2d(dst), op_v_4s(src), op_v_4s(src2), {}, {}}} } -emit_umlal2_v8h_v16b_v16b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_umlal2_v8h_v16b_v16b(dst, src, src2)) } -emit_umlal2_v4s_v8h_v8h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_umlal2_v4s_v8h_v8h(dst, src, src2)) } -emit_umlal2_v2d_v4s_v4s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_umlal2_v2d_v4s_v4s(dst, src, src2)) } +emit_umlal2_v8h_v16b_v16b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_umlal2_v8h_v16b_v16b(dst, src, src2)) } +emit_umlal2_v4s_v8h_v8h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_umlal2_v4s_v8h_v8h(dst, src, src2)) } +emit_umlal2_v2d_v4s_v4s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_umlal2_v2d_v4s_v4s(dst, src, src2)) } inst_smlsl_v8h_v8b_v8b :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .SMLSL, operand_count = 3, length = 4, ops = {op_v_8h(dst), op_v_8b(src), op_v_8b(src2), {}, {}}} } inst_smlsl_v4s_v4h_v4h :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .SMLSL, operand_count = 3, length = 4, ops = {op_v_4s(dst), op_v_4h(src), op_v_4h(src2), {}, {}}} } inst_smlsl_v2d_v2s_v2s :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .SMLSL, operand_count = 3, length = 4, ops = {op_v_2d(dst), op_v_2s(src), op_v_2s(src2), {}, {}}} } -emit_smlsl_v8h_v8b_v8b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_smlsl_v8h_v8b_v8b(dst, src, src2)) } -emit_smlsl_v4s_v4h_v4h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_smlsl_v4s_v4h_v4h(dst, src, src2)) } -emit_smlsl_v2d_v2s_v2s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_smlsl_v2d_v2s_v2s(dst, src, src2)) } +emit_smlsl_v8h_v8b_v8b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_smlsl_v8h_v8b_v8b(dst, src, src2)) } +emit_smlsl_v4s_v4h_v4h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_smlsl_v4s_v4h_v4h(dst, src, src2)) } +emit_smlsl_v2d_v2s_v2s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_smlsl_v2d_v2s_v2s(dst, src, src2)) } inst_smlsl2_v8h_v16b_v16b :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .SMLSL2, operand_count = 3, length = 4, ops = {op_v_8h(dst), op_v_16b(src), op_v_16b(src2), {}, {}}} } inst_smlsl2_v4s_v8h_v8h :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .SMLSL2, operand_count = 3, length = 4, ops = {op_v_4s(dst), op_v_8h(src), op_v_8h(src2), {}, {}}} } inst_smlsl2_v2d_v4s_v4s :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .SMLSL2, operand_count = 3, length = 4, ops = {op_v_2d(dst), op_v_4s(src), op_v_4s(src2), {}, {}}} } -emit_smlsl2_v8h_v16b_v16b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_smlsl2_v8h_v16b_v16b(dst, src, src2)) } -emit_smlsl2_v4s_v8h_v8h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_smlsl2_v4s_v8h_v8h(dst, src, src2)) } -emit_smlsl2_v2d_v4s_v4s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_smlsl2_v2d_v4s_v4s(dst, src, src2)) } +emit_smlsl2_v8h_v16b_v16b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_smlsl2_v8h_v16b_v16b(dst, src, src2)) } +emit_smlsl2_v4s_v8h_v8h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_smlsl2_v4s_v8h_v8h(dst, src, src2)) } +emit_smlsl2_v2d_v4s_v4s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_smlsl2_v2d_v4s_v4s(dst, src, src2)) } inst_umlsl_v8h_v8b_v8b :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .UMLSL, operand_count = 3, length = 4, ops = {op_v_8h(dst), op_v_8b(src), op_v_8b(src2), {}, {}}} } inst_umlsl_v4s_v4h_v4h :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .UMLSL, operand_count = 3, length = 4, ops = {op_v_4s(dst), op_v_4h(src), op_v_4h(src2), {}, {}}} } inst_umlsl_v2d_v2s_v2s :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .UMLSL, operand_count = 3, length = 4, ops = {op_v_2d(dst), op_v_2s(src), op_v_2s(src2), {}, {}}} } -emit_umlsl_v8h_v8b_v8b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_umlsl_v8h_v8b_v8b(dst, src, src2)) } -emit_umlsl_v4s_v4h_v4h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_umlsl_v4s_v4h_v4h(dst, src, src2)) } -emit_umlsl_v2d_v2s_v2s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_umlsl_v2d_v2s_v2s(dst, src, src2)) } +emit_umlsl_v8h_v8b_v8b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_umlsl_v8h_v8b_v8b(dst, src, src2)) } +emit_umlsl_v4s_v4h_v4h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_umlsl_v4s_v4h_v4h(dst, src, src2)) } +emit_umlsl_v2d_v2s_v2s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_umlsl_v2d_v2s_v2s(dst, src, src2)) } inst_umlsl2_v8h_v16b_v16b :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .UMLSL2, operand_count = 3, length = 4, ops = {op_v_8h(dst), op_v_16b(src), op_v_16b(src2), {}, {}}} } inst_umlsl2_v4s_v8h_v8h :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .UMLSL2, operand_count = 3, length = 4, ops = {op_v_4s(dst), op_v_8h(src), op_v_8h(src2), {}, {}}} } inst_umlsl2_v2d_v4s_v4s :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .UMLSL2, operand_count = 3, length = 4, ops = {op_v_2d(dst), op_v_4s(src), op_v_4s(src2), {}, {}}} } -emit_umlsl2_v8h_v16b_v16b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_umlsl2_v8h_v16b_v16b(dst, src, src2)) } -emit_umlsl2_v4s_v8h_v8h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_umlsl2_v4s_v8h_v8h(dst, src, src2)) } -emit_umlsl2_v2d_v4s_v4s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_umlsl2_v2d_v4s_v4s(dst, src, src2)) } +emit_umlsl2_v8h_v16b_v16b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_umlsl2_v8h_v16b_v16b(dst, src, src2)) } +emit_umlsl2_v4s_v8h_v8h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_umlsl2_v4s_v8h_v8h(dst, src, src2)) } +emit_umlsl2_v2d_v4s_v4s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_umlsl2_v2d_v4s_v4s(dst, src, src2)) } inst_sqdmull_v4s_v4h_v4h :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .SQDMULL, operand_count = 3, length = 4, ops = {op_v_4s(dst), op_v_4h(src), op_v_4h(src2), {}, {}}} } inst_sqdmull_v2d_v2s_v2s :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .SQDMULL, operand_count = 3, length = 4, ops = {op_v_2d(dst), op_v_2s(src), op_v_2s(src2), {}, {}}} } -emit_sqdmull_v4s_v4h_v4h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_sqdmull_v4s_v4h_v4h(dst, src, src2)) } -emit_sqdmull_v2d_v2s_v2s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_sqdmull_v2d_v2s_v2s(dst, src, src2)) } +emit_sqdmull_v4s_v4h_v4h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_sqdmull_v4s_v4h_v4h(dst, src, src2)) } +emit_sqdmull_v2d_v2s_v2s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_sqdmull_v2d_v2s_v2s(dst, src, src2)) } inst_sqdmull2_v4s_v8h_v8h :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .SQDMULL2, operand_count = 3, length = 4, ops = {op_v_4s(dst), op_v_8h(src), op_v_8h(src2), {}, {}}} } inst_sqdmull2_v2d_v4s_v4s :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .SQDMULL2, operand_count = 3, length = 4, ops = {op_v_2d(dst), op_v_4s(src), op_v_4s(src2), {}, {}}} } -emit_sqdmull2_v4s_v8h_v8h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_sqdmull2_v4s_v8h_v8h(dst, src, src2)) } -emit_sqdmull2_v2d_v4s_v4s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_sqdmull2_v2d_v4s_v4s(dst, src, src2)) } +emit_sqdmull2_v4s_v8h_v8h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_sqdmull2_v4s_v8h_v8h(dst, src, src2)) } +emit_sqdmull2_v2d_v4s_v4s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_sqdmull2_v2d_v4s_v4s(dst, src, src2)) } inst_sqdmlal_v4s_v4h_v4h :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .SQDMLAL, operand_count = 3, length = 4, ops = {op_v_4s(dst), op_v_4h(src), op_v_4h(src2), {}, {}}} } inst_sqdmlal_v2d_v2s_v2s :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .SQDMLAL, operand_count = 3, length = 4, ops = {op_v_2d(dst), op_v_2s(src), op_v_2s(src2), {}, {}}} } -emit_sqdmlal_v4s_v4h_v4h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_sqdmlal_v4s_v4h_v4h(dst, src, src2)) } -emit_sqdmlal_v2d_v2s_v2s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_sqdmlal_v2d_v2s_v2s(dst, src, src2)) } +emit_sqdmlal_v4s_v4h_v4h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_sqdmlal_v4s_v4h_v4h(dst, src, src2)) } +emit_sqdmlal_v2d_v2s_v2s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_sqdmlal_v2d_v2s_v2s(dst, src, src2)) } inst_sqdmlal2_v4s_v8h_v8h :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .SQDMLAL2, operand_count = 3, length = 4, ops = {op_v_4s(dst), op_v_8h(src), op_v_8h(src2), {}, {}}} } inst_sqdmlal2_v2d_v4s_v4s :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .SQDMLAL2, operand_count = 3, length = 4, ops = {op_v_2d(dst), op_v_4s(src), op_v_4s(src2), {}, {}}} } -emit_sqdmlal2_v4s_v8h_v8h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_sqdmlal2_v4s_v8h_v8h(dst, src, src2)) } -emit_sqdmlal2_v2d_v4s_v4s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_sqdmlal2_v2d_v4s_v4s(dst, src, src2)) } +emit_sqdmlal2_v4s_v8h_v8h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_sqdmlal2_v4s_v8h_v8h(dst, src, src2)) } +emit_sqdmlal2_v2d_v4s_v4s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_sqdmlal2_v2d_v4s_v4s(dst, src, src2)) } inst_sqdmlsl_v4s_v4h_v4h :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .SQDMLSL, operand_count = 3, length = 4, ops = {op_v_4s(dst), op_v_4h(src), op_v_4h(src2), {}, {}}} } inst_sqdmlsl_v2d_v2s_v2s :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .SQDMLSL, operand_count = 3, length = 4, ops = {op_v_2d(dst), op_v_2s(src), op_v_2s(src2), {}, {}}} } -emit_sqdmlsl_v4s_v4h_v4h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_sqdmlsl_v4s_v4h_v4h(dst, src, src2)) } -emit_sqdmlsl_v2d_v2s_v2s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_sqdmlsl_v2d_v2s_v2s(dst, src, src2)) } +emit_sqdmlsl_v4s_v4h_v4h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_sqdmlsl_v4s_v4h_v4h(dst, src, src2)) } +emit_sqdmlsl_v2d_v2s_v2s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_sqdmlsl_v2d_v2s_v2s(dst, src, src2)) } inst_sqdmlsl2_v4s_v8h_v8h :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .SQDMLSL2, operand_count = 3, length = 4, ops = {op_v_4s(dst), op_v_8h(src), op_v_8h(src2), {}, {}}} } inst_sqdmlsl2_v2d_v4s_v4s :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .SQDMLSL2, operand_count = 3, length = 4, ops = {op_v_2d(dst), op_v_4s(src), op_v_4s(src2), {}, {}}} } -emit_sqdmlsl2_v4s_v8h_v8h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_sqdmlsl2_v4s_v8h_v8h(dst, src, src2)) } -emit_sqdmlsl2_v2d_v4s_v4s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_sqdmlsl2_v2d_v4s_v4s(dst, src, src2)) } +emit_sqdmlsl2_v4s_v8h_v8h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_sqdmlsl2_v4s_v8h_v8h(dst, src, src2)) } +emit_sqdmlsl2_v2d_v4s_v4s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_sqdmlsl2_v2d_v4s_v4s(dst, src, src2)) } inst_sqdmulh_v4h_v4h_v4h :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .SQDMULH, operand_count = 3, length = 4, ops = {op_v_4h(dst), op_v_4h(src), op_v_4h(src2), {}, {}}} } inst_sqdmulh_v8h_v8h_v8h :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .SQDMULH, operand_count = 3, length = 4, ops = {op_v_8h(dst), op_v_8h(src), op_v_8h(src2), {}, {}}} } inst_sqdmulh_v2s_v2s_v2s :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .SQDMULH, operand_count = 3, length = 4, ops = {op_v_2s(dst), op_v_2s(src), op_v_2s(src2), {}, {}}} } inst_sqdmulh_v4s_v4s_v4s :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .SQDMULH, operand_count = 3, length = 4, ops = {op_v_4s(dst), op_v_4s(src), op_v_4s(src2), {}, {}}} } -emit_sqdmulh_v4h_v4h_v4h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_sqdmulh_v4h_v4h_v4h(dst, src, src2)) } -emit_sqdmulh_v8h_v8h_v8h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_sqdmulh_v8h_v8h_v8h(dst, src, src2)) } -emit_sqdmulh_v2s_v2s_v2s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_sqdmulh_v2s_v2s_v2s(dst, src, src2)) } -emit_sqdmulh_v4s_v4s_v4s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_sqdmulh_v4s_v4s_v4s(dst, src, src2)) } +emit_sqdmulh_v4h_v4h_v4h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_sqdmulh_v4h_v4h_v4h(dst, src, src2)) } +emit_sqdmulh_v8h_v8h_v8h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_sqdmulh_v8h_v8h_v8h(dst, src, src2)) } +emit_sqdmulh_v2s_v2s_v2s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_sqdmulh_v2s_v2s_v2s(dst, src, src2)) } +emit_sqdmulh_v4s_v4s_v4s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_sqdmulh_v4s_v4s_v4s(dst, src, src2)) } inst_sqrdmulh_v4h_v4h_v4h :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .SQRDMULH, operand_count = 3, length = 4, ops = {op_v_4h(dst), op_v_4h(src), op_v_4h(src2), {}, {}}} } inst_sqrdmulh_v8h_v8h_v8h :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .SQRDMULH, operand_count = 3, length = 4, ops = {op_v_8h(dst), op_v_8h(src), op_v_8h(src2), {}, {}}} } inst_sqrdmulh_v2s_v2s_v2s :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .SQRDMULH, operand_count = 3, length = 4, ops = {op_v_2s(dst), op_v_2s(src), op_v_2s(src2), {}, {}}} } inst_sqrdmulh_v4s_v4s_v4s :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .SQRDMULH, operand_count = 3, length = 4, ops = {op_v_4s(dst), op_v_4s(src), op_v_4s(src2), {}, {}}} } -emit_sqrdmulh_v4h_v4h_v4h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_sqrdmulh_v4h_v4h_v4h(dst, src, src2)) } -emit_sqrdmulh_v8h_v8h_v8h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_sqrdmulh_v8h_v8h_v8h(dst, src, src2)) } -emit_sqrdmulh_v2s_v2s_v2s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_sqrdmulh_v2s_v2s_v2s(dst, src, src2)) } -emit_sqrdmulh_v4s_v4s_v4s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_sqrdmulh_v4s_v4s_v4s(dst, src, src2)) } +emit_sqrdmulh_v4h_v4h_v4h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_sqrdmulh_v4h_v4h_v4h(dst, src, src2)) } +emit_sqrdmulh_v8h_v8h_v8h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_sqrdmulh_v8h_v8h_v8h(dst, src, src2)) } +emit_sqrdmulh_v2s_v2s_v2s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_sqrdmulh_v2s_v2s_v2s(dst, src, src2)) } +emit_sqrdmulh_v4s_v4s_v4s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_sqrdmulh_v4s_v4s_v4s(dst, src, src2)) } inst_sdot_v2s_v8b_v8b :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .SDOT, operand_count = 3, length = 4, ops = {op_v_2s(dst), op_v_8b(src), op_v_8b(src2), {}, {}}} } inst_sdot_v4s_v16b_v16b :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .SDOT, operand_count = 3, length = 4, ops = {op_v_4s(dst), op_v_16b(src), op_v_16b(src2), {}, {}}} } -emit_sdot_v2s_v8b_v8b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_sdot_v2s_v8b_v8b(dst, src, src2)) } -emit_sdot_v4s_v16b_v16b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_sdot_v4s_v16b_v16b(dst, src, src2)) } +emit_sdot_v2s_v8b_v8b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_sdot_v2s_v8b_v8b(dst, src, src2)) } +emit_sdot_v4s_v16b_v16b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_sdot_v4s_v16b_v16b(dst, src, src2)) } inst_udot_v2s_v8b_v8b :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .UDOT, operand_count = 3, length = 4, ops = {op_v_2s(dst), op_v_8b(src), op_v_8b(src2), {}, {}}} } inst_udot_v4s_v16b_v16b :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .UDOT, operand_count = 3, length = 4, ops = {op_v_4s(dst), op_v_16b(src), op_v_16b(src2), {}, {}}} } -emit_udot_v2s_v8b_v8b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_udot_v2s_v8b_v8b(dst, src, src2)) } -emit_udot_v4s_v16b_v16b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_udot_v4s_v16b_v16b(dst, src, src2)) } +emit_udot_v2s_v8b_v8b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_udot_v2s_v8b_v8b(dst, src, src2)) } +emit_udot_v4s_v16b_v16b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_udot_v4s_v16b_v16b(dst, src, src2)) } inst_usdot_v2s_v8b_v8b :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .USDOT, operand_count = 3, length = 4, ops = {op_v_2s(dst), op_v_8b(src), op_v_8b(src2), {}, {}}} } inst_usdot_v4s_v16b_v16b :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .USDOT, operand_count = 3, length = 4, ops = {op_v_4s(dst), op_v_16b(src), op_v_16b(src2), {}, {}}} } -emit_usdot_v2s_v8b_v8b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_usdot_v2s_v8b_v8b(dst, src, src2)) } -emit_usdot_v4s_v16b_v16b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_usdot_v4s_v16b_v16b(dst, src, src2)) } +emit_usdot_v2s_v8b_v8b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_usdot_v2s_v8b_v8b(dst, src, src2)) } +emit_usdot_v4s_v16b_v16b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_usdot_v4s_v16b_v16b(dst, src, src2)) } inst_fmla_v4s_v4s_v4s :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .FMLA, operand_count = 3, length = 4, ops = {op_v_4s(dst), op_v_4s(src), op_v_4s(src2), {}, {}}} } inst_fmla_v2d_v2d_v2d :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .FMLA, operand_count = 3, length = 4, ops = {op_v_2d(dst), op_v_2d(src), op_v_2d(src2), {}, {}}} } inst_fmla_zh_p_zh_zh :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8, rz4: u8) -> Instruction { return Instruction{mnemonic = .FMLA, operand_count = 4, length = 4, ops = {op_z_h(rz), op_reg(Register(REG_P | (u16(rz2) & 0xF))), op_z_h(rz3), op_z_h(rz4), {}}} } @@ -2315,14 +2319,14 @@ inst_fmla_zd_p_zd_zd :: #force_inline proc "contextless" (rz: u8, rz2: inst_fmla_zh_zh_zh_i :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8, imm: i64) -> Instruction { return Instruction{mnemonic = .FMLA, operand_count = 4, length = 4, ops = {op_z_h(rz), op_z_h(rz2), op_z_h(rz3), op_lane_index(imm), {}}} } inst_fmla_zs_zs_zs_i :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8, imm: i64) -> Instruction { return Instruction{mnemonic = .FMLA, operand_count = 4, length = 4, ops = {op_z_s(rz), op_z_s(rz2), op_z_s(rz3), op_lane_index(imm), {}}} } inst_fmla_zd_zd_zd_i :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8, imm: i64) -> Instruction { return Instruction{mnemonic = .FMLA, operand_count = 4, length = 4, ops = {op_z_d(rz), op_z_d(rz2), op_z_d(rz3), op_lane_index(imm), {}}} } -emit_fmla_v4s_v4s_v4s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_fmla_v4s_v4s_v4s(dst, src, src2)) } -emit_fmla_v2d_v2d_v2d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_fmla_v2d_v2d_v2d(dst, src, src2)) } -emit_fmla_zh_p_zh_zh :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append(instructions, inst_fmla_zh_p_zh_zh(rz, rz2, rz3, rz4)) } -emit_fmla_zs_p_zs_zs :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append(instructions, inst_fmla_zs_p_zs_zs(rz, rz2, rz3, rz4)) } -emit_fmla_zd_p_zd_zd :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append(instructions, inst_fmla_zd_p_zd_zd(rz, rz2, rz3, rz4)) } -emit_fmla_zh_zh_zh_i :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, imm: i64) { append(instructions, inst_fmla_zh_zh_zh_i(rz, rz2, rz3, imm)) } -emit_fmla_zs_zs_zs_i :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, imm: i64) { append(instructions, inst_fmla_zs_zs_zs_i(rz, rz2, rz3, imm)) } -emit_fmla_zd_zd_zd_i :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, imm: i64) { append(instructions, inst_fmla_zd_zd_zd_i(rz, rz2, rz3, imm)) } +emit_fmla_v4s_v4s_v4s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_fmla_v4s_v4s_v4s(dst, src, src2)) } +emit_fmla_v2d_v2d_v2d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_fmla_v2d_v2d_v2d(dst, src, src2)) } +emit_fmla_zh_p_zh_zh :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append_elem(instructions, inst_fmla_zh_p_zh_zh(rz, rz2, rz3, rz4)) } +emit_fmla_zs_p_zs_zs :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append_elem(instructions, inst_fmla_zs_p_zs_zs(rz, rz2, rz3, rz4)) } +emit_fmla_zd_p_zd_zd :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append_elem(instructions, inst_fmla_zd_p_zd_zd(rz, rz2, rz3, rz4)) } +emit_fmla_zh_zh_zh_i :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, imm: i64) { append_elem(instructions, inst_fmla_zh_zh_zh_i(rz, rz2, rz3, imm)) } +emit_fmla_zs_zs_zs_i :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, imm: i64) { append_elem(instructions, inst_fmla_zs_zs_zs_i(rz, rz2, rz3, imm)) } +emit_fmla_zd_zd_zd_i :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, imm: i64) { append_elem(instructions, inst_fmla_zd_zd_zd_i(rz, rz2, rz3, imm)) } inst_fmls_v4s_v4s_v4s :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .FMLS, operand_count = 3, length = 4, ops = {op_v_4s(dst), op_v_4s(src), op_v_4s(src2), {}, {}}} } inst_fmls_v2d_v2d_v2d :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .FMLS, operand_count = 3, length = 4, ops = {op_v_2d(dst), op_v_2d(src), op_v_2d(src2), {}, {}}} } inst_fmls_zh_p_zh_zh :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8, rz4: u8) -> Instruction { return Instruction{mnemonic = .FMLS, operand_count = 4, length = 4, ops = {op_z_h(rz), op_reg(Register(REG_P | (u16(rz2) & 0xF))), op_z_h(rz3), op_z_h(rz4), {}}} } @@ -2331,108 +2335,108 @@ inst_fmls_zd_p_zd_zd :: #force_inline proc "contextless" (rz: u8, rz2: inst_fmls_zh_zh_zh_i :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8, imm: i64) -> Instruction { return Instruction{mnemonic = .FMLS, operand_count = 4, length = 4, ops = {op_z_h(rz), op_z_h(rz2), op_z_h(rz3), op_lane_index(imm), {}}} } inst_fmls_zs_zs_zs_i :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8, imm: i64) -> Instruction { return Instruction{mnemonic = .FMLS, operand_count = 4, length = 4, ops = {op_z_s(rz), op_z_s(rz2), op_z_s(rz3), op_lane_index(imm), {}}} } inst_fmls_zd_zd_zd_i :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8, imm: i64) -> Instruction { return Instruction{mnemonic = .FMLS, operand_count = 4, length = 4, ops = {op_z_d(rz), op_z_d(rz2), op_z_d(rz3), op_lane_index(imm), {}}} } -emit_fmls_v4s_v4s_v4s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_fmls_v4s_v4s_v4s(dst, src, src2)) } -emit_fmls_v2d_v2d_v2d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_fmls_v2d_v2d_v2d(dst, src, src2)) } -emit_fmls_zh_p_zh_zh :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append(instructions, inst_fmls_zh_p_zh_zh(rz, rz2, rz3, rz4)) } -emit_fmls_zs_p_zs_zs :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append(instructions, inst_fmls_zs_p_zs_zs(rz, rz2, rz3, rz4)) } -emit_fmls_zd_p_zd_zd :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append(instructions, inst_fmls_zd_p_zd_zd(rz, rz2, rz3, rz4)) } -emit_fmls_zh_zh_zh_i :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, imm: i64) { append(instructions, inst_fmls_zh_zh_zh_i(rz, rz2, rz3, imm)) } -emit_fmls_zs_zs_zs_i :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, imm: i64) { append(instructions, inst_fmls_zs_zs_zs_i(rz, rz2, rz3, imm)) } -emit_fmls_zd_zd_zd_i :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, imm: i64) { append(instructions, inst_fmls_zd_zd_zd_i(rz, rz2, rz3, imm)) } +emit_fmls_v4s_v4s_v4s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_fmls_v4s_v4s_v4s(dst, src, src2)) } +emit_fmls_v2d_v2d_v2d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_fmls_v2d_v2d_v2d(dst, src, src2)) } +emit_fmls_zh_p_zh_zh :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append_elem(instructions, inst_fmls_zh_p_zh_zh(rz, rz2, rz3, rz4)) } +emit_fmls_zs_p_zs_zs :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append_elem(instructions, inst_fmls_zs_p_zs_zs(rz, rz2, rz3, rz4)) } +emit_fmls_zd_p_zd_zd :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append_elem(instructions, inst_fmls_zd_p_zd_zd(rz, rz2, rz3, rz4)) } +emit_fmls_zh_zh_zh_i :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, imm: i64) { append_elem(instructions, inst_fmls_zh_zh_zh_i(rz, rz2, rz3, imm)) } +emit_fmls_zs_zs_zs_i :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, imm: i64) { append_elem(instructions, inst_fmls_zs_zs_zs_i(rz, rz2, rz3, imm)) } +emit_fmls_zd_zd_zd_i :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, imm: i64) { append_elem(instructions, inst_fmls_zd_zd_zd_i(rz, rz2, rz3, imm)) } inst_fmulx_v2s_v2s_v2s :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .FMULX, operand_count = 3, length = 4, ops = {op_v_2s(dst), op_v_2s(src), op_v_2s(src2), {}, {}}} } inst_fmulx_v4s_v4s_v4s :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .FMULX, operand_count = 3, length = 4, ops = {op_v_4s(dst), op_v_4s(src), op_v_4s(src2), {}, {}}} } inst_fmulx_v2d_v2d_v2d :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .FMULX, operand_count = 3, length = 4, ops = {op_v_2d(dst), op_v_2d(src), op_v_2d(src2), {}, {}}} } inst_fmulx_v4h_v4h_v4h :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .FMULX, operand_count = 3, length = 4, ops = {op_v_4h(dst), op_v_4h(src), op_v_4h(src2), {}, {}}} } inst_fmulx_v8h_v8h_v8h :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .FMULX, operand_count = 3, length = 4, ops = {op_v_8h(dst), op_v_8h(src), op_v_8h(src2), {}, {}}} } -emit_fmulx_v2s_v2s_v2s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_fmulx_v2s_v2s_v2s(dst, src, src2)) } -emit_fmulx_v4s_v4s_v4s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_fmulx_v4s_v4s_v4s(dst, src, src2)) } -emit_fmulx_v2d_v2d_v2d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_fmulx_v2d_v2d_v2d(dst, src, src2)) } -emit_fmulx_v4h_v4h_v4h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_fmulx_v4h_v4h_v4h(dst, src, src2)) } -emit_fmulx_v8h_v8h_v8h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_fmulx_v8h_v8h_v8h(dst, src, src2)) } +emit_fmulx_v2s_v2s_v2s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_fmulx_v2s_v2s_v2s(dst, src, src2)) } +emit_fmulx_v4s_v4s_v4s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_fmulx_v4s_v4s_v4s(dst, src, src2)) } +emit_fmulx_v2d_v2d_v2d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_fmulx_v2d_v2d_v2d(dst, src, src2)) } +emit_fmulx_v4h_v4h_v4h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_fmulx_v4h_v4h_v4h(dst, src, src2)) } +emit_fmulx_v8h_v8h_v8h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_fmulx_v8h_v8h_v8h(dst, src, src2)) } inst_fmaxp_v2s_v2s_v2s :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .FMAXP, operand_count = 3, length = 4, ops = {op_v_2s(dst), op_v_2s(src), op_v_2s(src2), {}, {}}} } inst_fmaxp_v4s_v4s_v4s :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .FMAXP, operand_count = 3, length = 4, ops = {op_v_4s(dst), op_v_4s(src), op_v_4s(src2), {}, {}}} } inst_fmaxp_v2d_v2d_v2d :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .FMAXP, operand_count = 3, length = 4, ops = {op_v_2d(dst), op_v_2d(src), op_v_2d(src2), {}, {}}} } inst_fmaxp_v4h_v4h_v4h :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .FMAXP, operand_count = 3, length = 4, ops = {op_v_4h(dst), op_v_4h(src), op_v_4h(src2), {}, {}}} } inst_fmaxp_v8h_v8h_v8h :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .FMAXP, operand_count = 3, length = 4, ops = {op_v_8h(dst), op_v_8h(src), op_v_8h(src2), {}, {}}} } -emit_fmaxp_v2s_v2s_v2s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_fmaxp_v2s_v2s_v2s(dst, src, src2)) } -emit_fmaxp_v4s_v4s_v4s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_fmaxp_v4s_v4s_v4s(dst, src, src2)) } -emit_fmaxp_v2d_v2d_v2d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_fmaxp_v2d_v2d_v2d(dst, src, src2)) } -emit_fmaxp_v4h_v4h_v4h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_fmaxp_v4h_v4h_v4h(dst, src, src2)) } -emit_fmaxp_v8h_v8h_v8h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_fmaxp_v8h_v8h_v8h(dst, src, src2)) } +emit_fmaxp_v2s_v2s_v2s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_fmaxp_v2s_v2s_v2s(dst, src, src2)) } +emit_fmaxp_v4s_v4s_v4s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_fmaxp_v4s_v4s_v4s(dst, src, src2)) } +emit_fmaxp_v2d_v2d_v2d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_fmaxp_v2d_v2d_v2d(dst, src, src2)) } +emit_fmaxp_v4h_v4h_v4h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_fmaxp_v4h_v4h_v4h(dst, src, src2)) } +emit_fmaxp_v8h_v8h_v8h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_fmaxp_v8h_v8h_v8h(dst, src, src2)) } inst_fminp_v2s_v2s_v2s :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .FMINP, operand_count = 3, length = 4, ops = {op_v_2s(dst), op_v_2s(src), op_v_2s(src2), {}, {}}} } inst_fminp_v4s_v4s_v4s :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .FMINP, operand_count = 3, length = 4, ops = {op_v_4s(dst), op_v_4s(src), op_v_4s(src2), {}, {}}} } inst_fminp_v2d_v2d_v2d :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .FMINP, operand_count = 3, length = 4, ops = {op_v_2d(dst), op_v_2d(src), op_v_2d(src2), {}, {}}} } inst_fminp_v4h_v4h_v4h :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .FMINP, operand_count = 3, length = 4, ops = {op_v_4h(dst), op_v_4h(src), op_v_4h(src2), {}, {}}} } inst_fminp_v8h_v8h_v8h :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .FMINP, operand_count = 3, length = 4, ops = {op_v_8h(dst), op_v_8h(src), op_v_8h(src2), {}, {}}} } -emit_fminp_v2s_v2s_v2s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_fminp_v2s_v2s_v2s(dst, src, src2)) } -emit_fminp_v4s_v4s_v4s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_fminp_v4s_v4s_v4s(dst, src, src2)) } -emit_fminp_v2d_v2d_v2d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_fminp_v2d_v2d_v2d(dst, src, src2)) } -emit_fminp_v4h_v4h_v4h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_fminp_v4h_v4h_v4h(dst, src, src2)) } -emit_fminp_v8h_v8h_v8h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_fminp_v8h_v8h_v8h(dst, src, src2)) } +emit_fminp_v2s_v2s_v2s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_fminp_v2s_v2s_v2s(dst, src, src2)) } +emit_fminp_v4s_v4s_v4s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_fminp_v4s_v4s_v4s(dst, src, src2)) } +emit_fminp_v2d_v2d_v2d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_fminp_v2d_v2d_v2d(dst, src, src2)) } +emit_fminp_v4h_v4h_v4h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_fminp_v4h_v4h_v4h(dst, src, src2)) } +emit_fminp_v8h_v8h_v8h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_fminp_v8h_v8h_v8h(dst, src, src2)) } inst_fmaxnmp_v2s_v2s_v2s :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .FMAXNMP, operand_count = 3, length = 4, ops = {op_v_2s(dst), op_v_2s(src), op_v_2s(src2), {}, {}}} } inst_fmaxnmp_v4s_v4s_v4s :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .FMAXNMP, operand_count = 3, length = 4, ops = {op_v_4s(dst), op_v_4s(src), op_v_4s(src2), {}, {}}} } inst_fmaxnmp_v2d_v2d_v2d :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .FMAXNMP, operand_count = 3, length = 4, ops = {op_v_2d(dst), op_v_2d(src), op_v_2d(src2), {}, {}}} } inst_fmaxnmp_v4h_v4h_v4h :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .FMAXNMP, operand_count = 3, length = 4, ops = {op_v_4h(dst), op_v_4h(src), op_v_4h(src2), {}, {}}} } inst_fmaxnmp_v8h_v8h_v8h :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .FMAXNMP, operand_count = 3, length = 4, ops = {op_v_8h(dst), op_v_8h(src), op_v_8h(src2), {}, {}}} } -emit_fmaxnmp_v2s_v2s_v2s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_fmaxnmp_v2s_v2s_v2s(dst, src, src2)) } -emit_fmaxnmp_v4s_v4s_v4s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_fmaxnmp_v4s_v4s_v4s(dst, src, src2)) } -emit_fmaxnmp_v2d_v2d_v2d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_fmaxnmp_v2d_v2d_v2d(dst, src, src2)) } -emit_fmaxnmp_v4h_v4h_v4h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_fmaxnmp_v4h_v4h_v4h(dst, src, src2)) } -emit_fmaxnmp_v8h_v8h_v8h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_fmaxnmp_v8h_v8h_v8h(dst, src, src2)) } +emit_fmaxnmp_v2s_v2s_v2s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_fmaxnmp_v2s_v2s_v2s(dst, src, src2)) } +emit_fmaxnmp_v4s_v4s_v4s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_fmaxnmp_v4s_v4s_v4s(dst, src, src2)) } +emit_fmaxnmp_v2d_v2d_v2d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_fmaxnmp_v2d_v2d_v2d(dst, src, src2)) } +emit_fmaxnmp_v4h_v4h_v4h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_fmaxnmp_v4h_v4h_v4h(dst, src, src2)) } +emit_fmaxnmp_v8h_v8h_v8h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_fmaxnmp_v8h_v8h_v8h(dst, src, src2)) } inst_fminnmp_v2s_v2s_v2s :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .FMINNMP, operand_count = 3, length = 4, ops = {op_v_2s(dst), op_v_2s(src), op_v_2s(src2), {}, {}}} } inst_fminnmp_v4s_v4s_v4s :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .FMINNMP, operand_count = 3, length = 4, ops = {op_v_4s(dst), op_v_4s(src), op_v_4s(src2), {}, {}}} } inst_fminnmp_v2d_v2d_v2d :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .FMINNMP, operand_count = 3, length = 4, ops = {op_v_2d(dst), op_v_2d(src), op_v_2d(src2), {}, {}}} } inst_fminnmp_v4h_v4h_v4h :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .FMINNMP, operand_count = 3, length = 4, ops = {op_v_4h(dst), op_v_4h(src), op_v_4h(src2), {}, {}}} } inst_fminnmp_v8h_v8h_v8h :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .FMINNMP, operand_count = 3, length = 4, ops = {op_v_8h(dst), op_v_8h(src), op_v_8h(src2), {}, {}}} } -emit_fminnmp_v2s_v2s_v2s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_fminnmp_v2s_v2s_v2s(dst, src, src2)) } -emit_fminnmp_v4s_v4s_v4s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_fminnmp_v4s_v4s_v4s(dst, src, src2)) } -emit_fminnmp_v2d_v2d_v2d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_fminnmp_v2d_v2d_v2d(dst, src, src2)) } -emit_fminnmp_v4h_v4h_v4h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_fminnmp_v4h_v4h_v4h(dst, src, src2)) } -emit_fminnmp_v8h_v8h_v8h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_fminnmp_v8h_v8h_v8h(dst, src, src2)) } +emit_fminnmp_v2s_v2s_v2s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_fminnmp_v2s_v2s_v2s(dst, src, src2)) } +emit_fminnmp_v4s_v4s_v4s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_fminnmp_v4s_v4s_v4s(dst, src, src2)) } +emit_fminnmp_v2d_v2d_v2d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_fminnmp_v2d_v2d_v2d(dst, src, src2)) } +emit_fminnmp_v4h_v4h_v4h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_fminnmp_v4h_v4h_v4h(dst, src, src2)) } +emit_fminnmp_v8h_v8h_v8h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_fminnmp_v8h_v8h_v8h(dst, src, src2)) } inst_fmaxv_r_v4s :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .FMAXV, operand_count = 2, length = 4, ops = {op_reg(dst), op_v_4s(src), {}, {}, {}}} } inst_fmaxv_r_v4h :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .FMAXV, operand_count = 2, length = 4, ops = {op_reg(dst), op_v_4h(src), {}, {}, {}}} } inst_fmaxv_r_v8h :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .FMAXV, operand_count = 2, length = 4, ops = {op_reg(dst), op_v_8h(src), {}, {}, {}}} } -emit_fmaxv_r_v4s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_fmaxv_r_v4s(dst, src)) } -emit_fmaxv_r_v4h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_fmaxv_r_v4h(dst, src)) } -emit_fmaxv_r_v8h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_fmaxv_r_v8h(dst, src)) } +emit_fmaxv_r_v4s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_fmaxv_r_v4s(dst, src)) } +emit_fmaxv_r_v4h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_fmaxv_r_v4h(dst, src)) } +emit_fmaxv_r_v8h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_fmaxv_r_v8h(dst, src)) } inst_fminv_r_v4s :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .FMINV, operand_count = 2, length = 4, ops = {op_reg(dst), op_v_4s(src), {}, {}, {}}} } inst_fminv_r_v4h :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .FMINV, operand_count = 2, length = 4, ops = {op_reg(dst), op_v_4h(src), {}, {}, {}}} } inst_fminv_r_v8h :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .FMINV, operand_count = 2, length = 4, ops = {op_reg(dst), op_v_8h(src), {}, {}, {}}} } -emit_fminv_r_v4s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_fminv_r_v4s(dst, src)) } -emit_fminv_r_v4h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_fminv_r_v4h(dst, src)) } -emit_fminv_r_v8h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_fminv_r_v8h(dst, src)) } +emit_fminv_r_v4s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_fminv_r_v4s(dst, src)) } +emit_fminv_r_v4h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_fminv_r_v4h(dst, src)) } +emit_fminv_r_v8h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_fminv_r_v8h(dst, src)) } inst_fmaxnmv_r_v4s :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .FMAXNMV, operand_count = 2, length = 4, ops = {op_reg(dst), op_v_4s(src), {}, {}, {}}} } inst_fmaxnmv_r_v4h :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .FMAXNMV, operand_count = 2, length = 4, ops = {op_reg(dst), op_v_4h(src), {}, {}, {}}} } inst_fmaxnmv_r_v8h :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .FMAXNMV, operand_count = 2, length = 4, ops = {op_reg(dst), op_v_8h(src), {}, {}, {}}} } -emit_fmaxnmv_r_v4s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_fmaxnmv_r_v4s(dst, src)) } -emit_fmaxnmv_r_v4h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_fmaxnmv_r_v4h(dst, src)) } -emit_fmaxnmv_r_v8h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_fmaxnmv_r_v8h(dst, src)) } +emit_fmaxnmv_r_v4s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_fmaxnmv_r_v4s(dst, src)) } +emit_fmaxnmv_r_v4h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_fmaxnmv_r_v4h(dst, src)) } +emit_fmaxnmv_r_v8h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_fmaxnmv_r_v8h(dst, src)) } inst_fminnmv_r_v4s :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .FMINNMV, operand_count = 2, length = 4, ops = {op_reg(dst), op_v_4s(src), {}, {}, {}}} } inst_fminnmv_r_v4h :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .FMINNMV, operand_count = 2, length = 4, ops = {op_reg(dst), op_v_4h(src), {}, {}, {}}} } inst_fminnmv_r_v8h :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .FMINNMV, operand_count = 2, length = 4, ops = {op_reg(dst), op_v_8h(src), {}, {}, {}}} } -emit_fminnmv_r_v4s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_fminnmv_r_v4s(dst, src)) } -emit_fminnmv_r_v4h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_fminnmv_r_v4h(dst, src)) } -emit_fminnmv_r_v8h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_fminnmv_r_v8h(dst, src)) } +emit_fminnmv_r_v4s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_fminnmv_r_v4s(dst, src)) } +emit_fminnmv_r_v4h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_fminnmv_r_v4h(dst, src)) } +emit_fminnmv_r_v8h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_fminnmv_r_v8h(dst, src)) } inst_frecpe_v2s_v2s :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .FRECPE, operand_count = 2, length = 4, ops = {op_v_2s(dst), op_v_2s(src), {}, {}, {}}} } inst_frecpe_v4s_v4s :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .FRECPE, operand_count = 2, length = 4, ops = {op_v_4s(dst), op_v_4s(src), {}, {}, {}}} } inst_frecpe_v2d_v2d :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .FRECPE, operand_count = 2, length = 4, ops = {op_v_2d(dst), op_v_2d(src), {}, {}, {}}} } inst_frecpe_v4h_v4h :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .FRECPE, operand_count = 2, length = 4, ops = {op_v_4h(dst), op_v_4h(src), {}, {}, {}}} } inst_frecpe_v8h_v8h :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .FRECPE, operand_count = 2, length = 4, ops = {op_v_8h(dst), op_v_8h(src), {}, {}, {}}} } -emit_frecpe_v2s_v2s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_frecpe_v2s_v2s(dst, src)) } -emit_frecpe_v4s_v4s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_frecpe_v4s_v4s(dst, src)) } -emit_frecpe_v2d_v2d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_frecpe_v2d_v2d(dst, src)) } -emit_frecpe_v4h_v4h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_frecpe_v4h_v4h(dst, src)) } -emit_frecpe_v8h_v8h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_frecpe_v8h_v8h(dst, src)) } +emit_frecpe_v2s_v2s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_frecpe_v2s_v2s(dst, src)) } +emit_frecpe_v4s_v4s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_frecpe_v4s_v4s(dst, src)) } +emit_frecpe_v2d_v2d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_frecpe_v2d_v2d(dst, src)) } +emit_frecpe_v4h_v4h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_frecpe_v4h_v4h(dst, src)) } +emit_frecpe_v8h_v8h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_frecpe_v8h_v8h(dst, src)) } inst_frsqrte_v2s_v2s :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .FRSQRTE, operand_count = 2, length = 4, ops = {op_v_2s(dst), op_v_2s(src), {}, {}, {}}} } inst_frsqrte_v4s_v4s :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .FRSQRTE, operand_count = 2, length = 4, ops = {op_v_4s(dst), op_v_4s(src), {}, {}, {}}} } inst_frsqrte_v2d_v2d :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .FRSQRTE, operand_count = 2, length = 4, ops = {op_v_2d(dst), op_v_2d(src), {}, {}, {}}} } inst_frsqrte_v4h_v4h :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .FRSQRTE, operand_count = 2, length = 4, ops = {op_v_4h(dst), op_v_4h(src), {}, {}, {}}} } inst_frsqrte_v8h_v8h :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .FRSQRTE, operand_count = 2, length = 4, ops = {op_v_8h(dst), op_v_8h(src), {}, {}, {}}} } -emit_frsqrte_v2s_v2s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_frsqrte_v2s_v2s(dst, src)) } -emit_frsqrte_v4s_v4s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_frsqrte_v4s_v4s(dst, src)) } -emit_frsqrte_v2d_v2d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_frsqrte_v2d_v2d(dst, src)) } -emit_frsqrte_v4h_v4h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_frsqrte_v4h_v4h(dst, src)) } -emit_frsqrte_v8h_v8h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_frsqrte_v8h_v8h(dst, src)) } +emit_frsqrte_v2s_v2s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_frsqrte_v2s_v2s(dst, src)) } +emit_frsqrte_v4s_v4s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_frsqrte_v4s_v4s(dst, src)) } +emit_frsqrte_v2d_v2d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_frsqrte_v2d_v2d(dst, src)) } +emit_frsqrte_v4h_v4h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_frsqrte_v4h_v4h(dst, src)) } +emit_frsqrte_v8h_v8h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_frsqrte_v8h_v8h(dst, src)) } inst_frecps_v2s_v2s_v2s :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .FRECPS, operand_count = 3, length = 4, ops = {op_v_2s(dst), op_v_2s(src), op_v_2s(src2), {}, {}}} } inst_frecps_v4s_v4s_v4s :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .FRECPS, operand_count = 3, length = 4, ops = {op_v_4s(dst), op_v_4s(src), op_v_4s(src2), {}, {}}} } inst_frecps_v2d_v2d_v2d :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .FRECPS, operand_count = 3, length = 4, ops = {op_v_2d(dst), op_v_2d(src), op_v_2d(src2), {}, {}}} } @@ -2441,14 +2445,14 @@ inst_frecps_v8h_v8h_v8h :: #force_inline proc "contextless" (dst: Register inst_frecps_zh_zh_zh :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8) -> Instruction { return Instruction{mnemonic = .FRECPS, operand_count = 3, length = 4, ops = {op_z_h(rz), op_z_h(rz2), op_z_h(rz3), {}, {}}} } inst_frecps_zs_zs_zs :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8) -> Instruction { return Instruction{mnemonic = .FRECPS, operand_count = 3, length = 4, ops = {op_z_s(rz), op_z_s(rz2), op_z_s(rz3), {}, {}}} } inst_frecps_zd_zd_zd :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8) -> Instruction { return Instruction{mnemonic = .FRECPS, operand_count = 3, length = 4, ops = {op_z_d(rz), op_z_d(rz2), op_z_d(rz3), {}, {}}} } -emit_frecps_v2s_v2s_v2s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_frecps_v2s_v2s_v2s(dst, src, src2)) } -emit_frecps_v4s_v4s_v4s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_frecps_v4s_v4s_v4s(dst, src, src2)) } -emit_frecps_v2d_v2d_v2d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_frecps_v2d_v2d_v2d(dst, src, src2)) } -emit_frecps_v4h_v4h_v4h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_frecps_v4h_v4h_v4h(dst, src, src2)) } -emit_frecps_v8h_v8h_v8h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_frecps_v8h_v8h_v8h(dst, src, src2)) } -emit_frecps_zh_zh_zh :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append(instructions, inst_frecps_zh_zh_zh(rz, rz2, rz3)) } -emit_frecps_zs_zs_zs :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append(instructions, inst_frecps_zs_zs_zs(rz, rz2, rz3)) } -emit_frecps_zd_zd_zd :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append(instructions, inst_frecps_zd_zd_zd(rz, rz2, rz3)) } +emit_frecps_v2s_v2s_v2s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_frecps_v2s_v2s_v2s(dst, src, src2)) } +emit_frecps_v4s_v4s_v4s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_frecps_v4s_v4s_v4s(dst, src, src2)) } +emit_frecps_v2d_v2d_v2d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_frecps_v2d_v2d_v2d(dst, src, src2)) } +emit_frecps_v4h_v4h_v4h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_frecps_v4h_v4h_v4h(dst, src, src2)) } +emit_frecps_v8h_v8h_v8h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_frecps_v8h_v8h_v8h(dst, src, src2)) } +emit_frecps_zh_zh_zh :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append_elem(instructions, inst_frecps_zh_zh_zh(rz, rz2, rz3)) } +emit_frecps_zs_zs_zs :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append_elem(instructions, inst_frecps_zs_zs_zs(rz, rz2, rz3)) } +emit_frecps_zd_zd_zd :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append_elem(instructions, inst_frecps_zd_zd_zd(rz, rz2, rz3)) } inst_frsqrts_v2s_v2s_v2s :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .FRSQRTS, operand_count = 3, length = 4, ops = {op_v_2s(dst), op_v_2s(src), op_v_2s(src2), {}, {}}} } inst_frsqrts_v4s_v4s_v4s :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .FRSQRTS, operand_count = 3, length = 4, ops = {op_v_4s(dst), op_v_4s(src), op_v_4s(src2), {}, {}}} } inst_frsqrts_v2d_v2d_v2d :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .FRSQRTS, operand_count = 3, length = 4, ops = {op_v_2d(dst), op_v_2d(src), op_v_2d(src2), {}, {}}} } @@ -2457,52 +2461,52 @@ inst_frsqrts_v8h_v8h_v8h :: #force_inline proc "contextless" (dst: Register inst_frsqrts_zh_zh_zh :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8) -> Instruction { return Instruction{mnemonic = .FRSQRTS, operand_count = 3, length = 4, ops = {op_z_h(rz), op_z_h(rz2), op_z_h(rz3), {}, {}}} } inst_frsqrts_zs_zs_zs :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8) -> Instruction { return Instruction{mnemonic = .FRSQRTS, operand_count = 3, length = 4, ops = {op_z_s(rz), op_z_s(rz2), op_z_s(rz3), {}, {}}} } inst_frsqrts_zd_zd_zd :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8) -> Instruction { return Instruction{mnemonic = .FRSQRTS, operand_count = 3, length = 4, ops = {op_z_d(rz), op_z_d(rz2), op_z_d(rz3), {}, {}}} } -emit_frsqrts_v2s_v2s_v2s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_frsqrts_v2s_v2s_v2s(dst, src, src2)) } -emit_frsqrts_v4s_v4s_v4s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_frsqrts_v4s_v4s_v4s(dst, src, src2)) } -emit_frsqrts_v2d_v2d_v2d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_frsqrts_v2d_v2d_v2d(dst, src, src2)) } -emit_frsqrts_v4h_v4h_v4h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_frsqrts_v4h_v4h_v4h(dst, src, src2)) } -emit_frsqrts_v8h_v8h_v8h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_frsqrts_v8h_v8h_v8h(dst, src, src2)) } -emit_frsqrts_zh_zh_zh :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append(instructions, inst_frsqrts_zh_zh_zh(rz, rz2, rz3)) } -emit_frsqrts_zs_zs_zs :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append(instructions, inst_frsqrts_zs_zs_zs(rz, rz2, rz3)) } -emit_frsqrts_zd_zd_zd :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append(instructions, inst_frsqrts_zd_zd_zd(rz, rz2, rz3)) } +emit_frsqrts_v2s_v2s_v2s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_frsqrts_v2s_v2s_v2s(dst, src, src2)) } +emit_frsqrts_v4s_v4s_v4s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_frsqrts_v4s_v4s_v4s(dst, src, src2)) } +emit_frsqrts_v2d_v2d_v2d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_frsqrts_v2d_v2d_v2d(dst, src, src2)) } +emit_frsqrts_v4h_v4h_v4h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_frsqrts_v4h_v4h_v4h(dst, src, src2)) } +emit_frsqrts_v8h_v8h_v8h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_frsqrts_v8h_v8h_v8h(dst, src, src2)) } +emit_frsqrts_zh_zh_zh :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append_elem(instructions, inst_frsqrts_zh_zh_zh(rz, rz2, rz3)) } +emit_frsqrts_zs_zs_zs :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append_elem(instructions, inst_frsqrts_zs_zs_zs(rz, rz2, rz3)) } +emit_frsqrts_zd_zd_zd :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append_elem(instructions, inst_frsqrts_zd_zd_zd(rz, rz2, rz3)) } inst_frecpx_r_r :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return inst_r_r(.FRECPX, dst, src) } inst_frecpx_zh_p_zh :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8) -> Instruction { return Instruction{mnemonic = .FRECPX, operand_count = 3, length = 4, ops = {op_z_h(rz), op_reg(Register(REG_P | (u16(rz2) & 0xF))), op_z_h(rz3), {}, {}}} } inst_frecpx_zs_p_zs :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8) -> Instruction { return Instruction{mnemonic = .FRECPX, operand_count = 3, length = 4, ops = {op_z_s(rz), op_reg(Register(REG_P | (u16(rz2) & 0xF))), op_z_s(rz3), {}, {}}} } inst_frecpx_zd_p_zd :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8) -> Instruction { return Instruction{mnemonic = .FRECPX, operand_count = 3, length = 4, ops = {op_z_d(rz), op_reg(Register(REG_P | (u16(rz2) & 0xF))), op_z_d(rz3), {}, {}}} } -emit_frecpx_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_frecpx_r_r(dst, src)) } -emit_frecpx_zh_p_zh :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append(instructions, inst_frecpx_zh_p_zh(rz, rz2, rz3)) } -emit_frecpx_zs_p_zs :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append(instructions, inst_frecpx_zs_p_zs(rz, rz2, rz3)) } -emit_frecpx_zd_p_zd :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append(instructions, inst_frecpx_zd_p_zd(rz, rz2, rz3)) } +emit_frecpx_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_frecpx_r_r(dst, src)) } +emit_frecpx_zh_p_zh :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append_elem(instructions, inst_frecpx_zh_p_zh(rz, rz2, rz3)) } +emit_frecpx_zs_p_zs :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append_elem(instructions, inst_frecpx_zs_p_zs(rz, rz2, rz3)) } +emit_frecpx_zd_p_zd :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append_elem(instructions, inst_frecpx_zd_p_zd(rz, rz2, rz3)) } inst_faddp_v2s_v2s_v2s :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .FADDP, operand_count = 3, length = 4, ops = {op_v_2s(dst), op_v_2s(src), op_v_2s(src2), {}, {}}} } inst_faddp_v4s_v4s_v4s :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .FADDP, operand_count = 3, length = 4, ops = {op_v_4s(dst), op_v_4s(src), op_v_4s(src2), {}, {}}} } inst_faddp_v2d_v2d_v2d :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .FADDP, operand_count = 3, length = 4, ops = {op_v_2d(dst), op_v_2d(src), op_v_2d(src2), {}, {}}} } inst_faddp_v4h_v4h_v4h :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .FADDP, operand_count = 3, length = 4, ops = {op_v_4h(dst), op_v_4h(src), op_v_4h(src2), {}, {}}} } inst_faddp_v8h_v8h_v8h :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .FADDP, operand_count = 3, length = 4, ops = {op_v_8h(dst), op_v_8h(src), op_v_8h(src2), {}, {}}} } -emit_faddp_v2s_v2s_v2s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_faddp_v2s_v2s_v2s(dst, src, src2)) } -emit_faddp_v4s_v4s_v4s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_faddp_v4s_v4s_v4s(dst, src, src2)) } -emit_faddp_v2d_v2d_v2d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_faddp_v2d_v2d_v2d(dst, src, src2)) } -emit_faddp_v4h_v4h_v4h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_faddp_v4h_v4h_v4h(dst, src, src2)) } -emit_faddp_v8h_v8h_v8h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_faddp_v8h_v8h_v8h(dst, src, src2)) } +emit_faddp_v2s_v2s_v2s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_faddp_v2s_v2s_v2s(dst, src, src2)) } +emit_faddp_v4s_v4s_v4s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_faddp_v4s_v4s_v4s(dst, src, src2)) } +emit_faddp_v2d_v2d_v2d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_faddp_v2d_v2d_v2d(dst, src, src2)) } +emit_faddp_v4h_v4h_v4h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_faddp_v4h_v4h_v4h(dst, src, src2)) } +emit_faddp_v8h_v8h_v8h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_faddp_v8h_v8h_v8h(dst, src, src2)) } inst_fcvtl_v4s_v4h :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .FCVTL, operand_count = 2, length = 4, ops = {op_v_4s(dst), op_v_4h(src), {}, {}, {}}} } inst_fcvtl_v2d_v2s :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .FCVTL, operand_count = 2, length = 4, ops = {op_v_2d(dst), op_v_2s(src), {}, {}, {}}} } -emit_fcvtl_v4s_v4h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_fcvtl_v4s_v4h(dst, src)) } -emit_fcvtl_v2d_v2s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_fcvtl_v2d_v2s(dst, src)) } +emit_fcvtl_v4s_v4h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_fcvtl_v4s_v4h(dst, src)) } +emit_fcvtl_v2d_v2s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_fcvtl_v2d_v2s(dst, src)) } inst_fcvtl2_v4s_v8h :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .FCVTL2, operand_count = 2, length = 4, ops = {op_v_4s(dst), op_v_8h(src), {}, {}, {}}} } inst_fcvtl2_v2d_v4s :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .FCVTL2, operand_count = 2, length = 4, ops = {op_v_2d(dst), op_v_4s(src), {}, {}, {}}} } -emit_fcvtl2_v4s_v8h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_fcvtl2_v4s_v8h(dst, src)) } -emit_fcvtl2_v2d_v4s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_fcvtl2_v2d_v4s(dst, src)) } +emit_fcvtl2_v4s_v8h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_fcvtl2_v4s_v8h(dst, src)) } +emit_fcvtl2_v2d_v4s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_fcvtl2_v2d_v4s(dst, src)) } inst_fcvtn_v4h_v4s :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .FCVTN, operand_count = 2, length = 4, ops = {op_v_4h(dst), op_v_4s(src), {}, {}, {}}} } inst_fcvtn_v2s_v2d :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .FCVTN, operand_count = 2, length = 4, ops = {op_v_2s(dst), op_v_2d(src), {}, {}, {}}} } -emit_fcvtn_v4h_v4s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_fcvtn_v4h_v4s(dst, src)) } -emit_fcvtn_v2s_v2d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_fcvtn_v2s_v2d(dst, src)) } +emit_fcvtn_v4h_v4s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_fcvtn_v4h_v4s(dst, src)) } +emit_fcvtn_v2s_v2d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_fcvtn_v2s_v2d(dst, src)) } inst_fcvtn2_v8h_v4s :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .FCVTN2, operand_count = 2, length = 4, ops = {op_v_8h(dst), op_v_4s(src), {}, {}, {}}} } inst_fcvtn2_v4s_v2d :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .FCVTN2, operand_count = 2, length = 4, ops = {op_v_4s(dst), op_v_2d(src), {}, {}, {}}} } -emit_fcvtn2_v8h_v4s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_fcvtn2_v8h_v4s(dst, src)) } -emit_fcvtn2_v4s_v2d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_fcvtn2_v4s_v2d(dst, src)) } +emit_fcvtn2_v8h_v4s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_fcvtn2_v8h_v4s(dst, src)) } +emit_fcvtn2_v4s_v2d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_fcvtn2_v4s_v2d(dst, src)) } inst_fcvtxn_v2s_v2d :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .FCVTXN, operand_count = 2, length = 4, ops = {op_v_2s(dst), op_v_2d(src), {}, {}, {}}} } -emit_fcvtxn_v2s_v2d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_fcvtxn_v2s_v2d(dst, src)) } +emit_fcvtxn_v2s_v2d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_fcvtxn_v2s_v2d(dst, src)) } inst_fcvtxn2_v4s_v2d :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .FCVTXN2, operand_count = 2, length = 4, ops = {op_v_4s(dst), op_v_2d(src), {}, {}, {}}} } -emit_fcvtxn2_v4s_v2d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_fcvtxn2_v4s_v2d(dst, src)) } +emit_fcvtxn2_v4s_v2d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_fcvtxn2_v4s_v2d(dst, src)) } inst_fcmeq_v2s_v2s_v2s :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .FCMEQ, operand_count = 3, length = 4, ops = {op_v_2s(dst), op_v_2s(src), op_v_2s(src2), {}, {}}} } inst_fcmeq_v4s_v4s_v4s :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .FCMEQ, operand_count = 3, length = 4, ops = {op_v_4s(dst), op_v_4s(src), op_v_4s(src2), {}, {}}} } inst_fcmeq_v2d_v2d_v2d :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .FCMEQ, operand_count = 3, length = 4, ops = {op_v_2d(dst), op_v_2d(src), op_v_2d(src2), {}, {}}} } @@ -2511,14 +2515,14 @@ inst_fcmeq_v8h_v8h_v8h :: #force_inline proc "contextless" (dst: Register inst_fcmeq_ph_p_zh_zh :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8, rz4: u8) -> Instruction { return Instruction{mnemonic = .FCMEQ, operand_count = 4, length = 4, ops = {op_reg(Register(REG_P | (u16(rz) & 0xF))), op_reg(Register(REG_P | (u16(rz2) & 0xF))), op_z_h(rz3), op_z_h(rz4), {}}} } inst_fcmeq_ps_p_zs_zs :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8, rz4: u8) -> Instruction { return Instruction{mnemonic = .FCMEQ, operand_count = 4, length = 4, ops = {op_reg(Register(REG_P | (u16(rz) & 0xF))), op_reg(Register(REG_P | (u16(rz2) & 0xF))), op_z_s(rz3), op_z_s(rz4), {}}} } inst_fcmeq_pd_p_zd_zd :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8, rz4: u8) -> Instruction { return Instruction{mnemonic = .FCMEQ, operand_count = 4, length = 4, ops = {op_reg(Register(REG_P | (u16(rz) & 0xF))), op_reg(Register(REG_P | (u16(rz2) & 0xF))), op_z_d(rz3), op_z_d(rz4), {}}} } -emit_fcmeq_v2s_v2s_v2s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_fcmeq_v2s_v2s_v2s(dst, src, src2)) } -emit_fcmeq_v4s_v4s_v4s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_fcmeq_v4s_v4s_v4s(dst, src, src2)) } -emit_fcmeq_v2d_v2d_v2d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_fcmeq_v2d_v2d_v2d(dst, src, src2)) } -emit_fcmeq_v4h_v4h_v4h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_fcmeq_v4h_v4h_v4h(dst, src, src2)) } -emit_fcmeq_v8h_v8h_v8h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_fcmeq_v8h_v8h_v8h(dst, src, src2)) } -emit_fcmeq_ph_p_zh_zh :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append(instructions, inst_fcmeq_ph_p_zh_zh(rz, rz2, rz3, rz4)) } -emit_fcmeq_ps_p_zs_zs :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append(instructions, inst_fcmeq_ps_p_zs_zs(rz, rz2, rz3, rz4)) } -emit_fcmeq_pd_p_zd_zd :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append(instructions, inst_fcmeq_pd_p_zd_zd(rz, rz2, rz3, rz4)) } +emit_fcmeq_v2s_v2s_v2s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_fcmeq_v2s_v2s_v2s(dst, src, src2)) } +emit_fcmeq_v4s_v4s_v4s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_fcmeq_v4s_v4s_v4s(dst, src, src2)) } +emit_fcmeq_v2d_v2d_v2d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_fcmeq_v2d_v2d_v2d(dst, src, src2)) } +emit_fcmeq_v4h_v4h_v4h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_fcmeq_v4h_v4h_v4h(dst, src, src2)) } +emit_fcmeq_v8h_v8h_v8h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_fcmeq_v8h_v8h_v8h(dst, src, src2)) } +emit_fcmeq_ph_p_zh_zh :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append_elem(instructions, inst_fcmeq_ph_p_zh_zh(rz, rz2, rz3, rz4)) } +emit_fcmeq_ps_p_zs_zs :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append_elem(instructions, inst_fcmeq_ps_p_zs_zs(rz, rz2, rz3, rz4)) } +emit_fcmeq_pd_p_zd_zd :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append_elem(instructions, inst_fcmeq_pd_p_zd_zd(rz, rz2, rz3, rz4)) } inst_fcmge_v2s_v2s_v2s :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .FCMGE, operand_count = 3, length = 4, ops = {op_v_2s(dst), op_v_2s(src), op_v_2s(src2), {}, {}}} } inst_fcmge_v4s_v4s_v4s :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .FCMGE, operand_count = 3, length = 4, ops = {op_v_4s(dst), op_v_4s(src), op_v_4s(src2), {}, {}}} } inst_fcmge_v2d_v2d_v2d :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .FCMGE, operand_count = 3, length = 4, ops = {op_v_2d(dst), op_v_2d(src), op_v_2d(src2), {}, {}}} } @@ -2527,14 +2531,14 @@ inst_fcmge_v8h_v8h_v8h :: #force_inline proc "contextless" (dst: Register inst_fcmge_ph_p_zh_zh :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8, rz4: u8) -> Instruction { return Instruction{mnemonic = .FCMGE, operand_count = 4, length = 4, ops = {op_reg(Register(REG_P | (u16(rz) & 0xF))), op_reg(Register(REG_P | (u16(rz2) & 0xF))), op_z_h(rz3), op_z_h(rz4), {}}} } inst_fcmge_ps_p_zs_zs :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8, rz4: u8) -> Instruction { return Instruction{mnemonic = .FCMGE, operand_count = 4, length = 4, ops = {op_reg(Register(REG_P | (u16(rz) & 0xF))), op_reg(Register(REG_P | (u16(rz2) & 0xF))), op_z_s(rz3), op_z_s(rz4), {}}} } inst_fcmge_pd_p_zd_zd :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8, rz4: u8) -> Instruction { return Instruction{mnemonic = .FCMGE, operand_count = 4, length = 4, ops = {op_reg(Register(REG_P | (u16(rz) & 0xF))), op_reg(Register(REG_P | (u16(rz2) & 0xF))), op_z_d(rz3), op_z_d(rz4), {}}} } -emit_fcmge_v2s_v2s_v2s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_fcmge_v2s_v2s_v2s(dst, src, src2)) } -emit_fcmge_v4s_v4s_v4s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_fcmge_v4s_v4s_v4s(dst, src, src2)) } -emit_fcmge_v2d_v2d_v2d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_fcmge_v2d_v2d_v2d(dst, src, src2)) } -emit_fcmge_v4h_v4h_v4h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_fcmge_v4h_v4h_v4h(dst, src, src2)) } -emit_fcmge_v8h_v8h_v8h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_fcmge_v8h_v8h_v8h(dst, src, src2)) } -emit_fcmge_ph_p_zh_zh :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append(instructions, inst_fcmge_ph_p_zh_zh(rz, rz2, rz3, rz4)) } -emit_fcmge_ps_p_zs_zs :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append(instructions, inst_fcmge_ps_p_zs_zs(rz, rz2, rz3, rz4)) } -emit_fcmge_pd_p_zd_zd :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append(instructions, inst_fcmge_pd_p_zd_zd(rz, rz2, rz3, rz4)) } +emit_fcmge_v2s_v2s_v2s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_fcmge_v2s_v2s_v2s(dst, src, src2)) } +emit_fcmge_v4s_v4s_v4s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_fcmge_v4s_v4s_v4s(dst, src, src2)) } +emit_fcmge_v2d_v2d_v2d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_fcmge_v2d_v2d_v2d(dst, src, src2)) } +emit_fcmge_v4h_v4h_v4h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_fcmge_v4h_v4h_v4h(dst, src, src2)) } +emit_fcmge_v8h_v8h_v8h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_fcmge_v8h_v8h_v8h(dst, src, src2)) } +emit_fcmge_ph_p_zh_zh :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append_elem(instructions, inst_fcmge_ph_p_zh_zh(rz, rz2, rz3, rz4)) } +emit_fcmge_ps_p_zs_zs :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append_elem(instructions, inst_fcmge_ps_p_zs_zs(rz, rz2, rz3, rz4)) } +emit_fcmge_pd_p_zd_zd :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append_elem(instructions, inst_fcmge_pd_p_zd_zd(rz, rz2, rz3, rz4)) } inst_fcmgt_v2s_v2s_v2s :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .FCMGT, operand_count = 3, length = 4, ops = {op_v_2s(dst), op_v_2s(src), op_v_2s(src2), {}, {}}} } inst_fcmgt_v4s_v4s_v4s :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .FCMGT, operand_count = 3, length = 4, ops = {op_v_4s(dst), op_v_4s(src), op_v_4s(src2), {}, {}}} } inst_fcmgt_v2d_v2d_v2d :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .FCMGT, operand_count = 3, length = 4, ops = {op_v_2d(dst), op_v_2d(src), op_v_2d(src2), {}, {}}} } @@ -2543,14 +2547,14 @@ inst_fcmgt_v8h_v8h_v8h :: #force_inline proc "contextless" (dst: Register inst_fcmgt_ph_p_zh_zh :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8, rz4: u8) -> Instruction { return Instruction{mnemonic = .FCMGT, operand_count = 4, length = 4, ops = {op_reg(Register(REG_P | (u16(rz) & 0xF))), op_reg(Register(REG_P | (u16(rz2) & 0xF))), op_z_h(rz3), op_z_h(rz4), {}}} } inst_fcmgt_ps_p_zs_zs :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8, rz4: u8) -> Instruction { return Instruction{mnemonic = .FCMGT, operand_count = 4, length = 4, ops = {op_reg(Register(REG_P | (u16(rz) & 0xF))), op_reg(Register(REG_P | (u16(rz2) & 0xF))), op_z_s(rz3), op_z_s(rz4), {}}} } inst_fcmgt_pd_p_zd_zd :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8, rz4: u8) -> Instruction { return Instruction{mnemonic = .FCMGT, operand_count = 4, length = 4, ops = {op_reg(Register(REG_P | (u16(rz) & 0xF))), op_reg(Register(REG_P | (u16(rz2) & 0xF))), op_z_d(rz3), op_z_d(rz4), {}}} } -emit_fcmgt_v2s_v2s_v2s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_fcmgt_v2s_v2s_v2s(dst, src, src2)) } -emit_fcmgt_v4s_v4s_v4s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_fcmgt_v4s_v4s_v4s(dst, src, src2)) } -emit_fcmgt_v2d_v2d_v2d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_fcmgt_v2d_v2d_v2d(dst, src, src2)) } -emit_fcmgt_v4h_v4h_v4h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_fcmgt_v4h_v4h_v4h(dst, src, src2)) } -emit_fcmgt_v8h_v8h_v8h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_fcmgt_v8h_v8h_v8h(dst, src, src2)) } -emit_fcmgt_ph_p_zh_zh :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append(instructions, inst_fcmgt_ph_p_zh_zh(rz, rz2, rz3, rz4)) } -emit_fcmgt_ps_p_zs_zs :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append(instructions, inst_fcmgt_ps_p_zs_zs(rz, rz2, rz3, rz4)) } -emit_fcmgt_pd_p_zd_zd :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append(instructions, inst_fcmgt_pd_p_zd_zd(rz, rz2, rz3, rz4)) } +emit_fcmgt_v2s_v2s_v2s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_fcmgt_v2s_v2s_v2s(dst, src, src2)) } +emit_fcmgt_v4s_v4s_v4s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_fcmgt_v4s_v4s_v4s(dst, src, src2)) } +emit_fcmgt_v2d_v2d_v2d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_fcmgt_v2d_v2d_v2d(dst, src, src2)) } +emit_fcmgt_v4h_v4h_v4h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_fcmgt_v4h_v4h_v4h(dst, src, src2)) } +emit_fcmgt_v8h_v8h_v8h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_fcmgt_v8h_v8h_v8h(dst, src, src2)) } +emit_fcmgt_ph_p_zh_zh :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append_elem(instructions, inst_fcmgt_ph_p_zh_zh(rz, rz2, rz3, rz4)) } +emit_fcmgt_ps_p_zs_zs :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append_elem(instructions, inst_fcmgt_ps_p_zs_zs(rz, rz2, rz3, rz4)) } +emit_fcmgt_pd_p_zd_zd :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append_elem(instructions, inst_fcmgt_pd_p_zd_zd(rz, rz2, rz3, rz4)) } inst_fcmle_v2s_v2s :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .FCMLE, operand_count = 2, length = 4, ops = {op_v_2s(dst), op_v_2s(src), {}, {}, {}}} } inst_fcmle_v4s_v4s :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .FCMLE, operand_count = 2, length = 4, ops = {op_v_4s(dst), op_v_4s(src), {}, {}, {}}} } inst_fcmle_v2d_v2d :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .FCMLE, operand_count = 2, length = 4, ops = {op_v_2d(dst), op_v_2d(src), {}, {}, {}}} } @@ -2559,14 +2563,14 @@ inst_fcmle_v8h_v8h :: #force_inline proc "contextless" (dst: Register inst_fcmle_ph_p_zh :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8) -> Instruction { return Instruction{mnemonic = .FCMLE, operand_count = 3, length = 4, ops = {op_reg(Register(REG_P | (u16(rz) & 0xF))), op_reg(Register(REG_P | (u16(rz2) & 0xF))), op_z_h(rz3), {}, {}}} } inst_fcmle_ps_p_zs :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8) -> Instruction { return Instruction{mnemonic = .FCMLE, operand_count = 3, length = 4, ops = {op_reg(Register(REG_P | (u16(rz) & 0xF))), op_reg(Register(REG_P | (u16(rz2) & 0xF))), op_z_s(rz3), {}, {}}} } inst_fcmle_pd_p_zd :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8) -> Instruction { return Instruction{mnemonic = .FCMLE, operand_count = 3, length = 4, ops = {op_reg(Register(REG_P | (u16(rz) & 0xF))), op_reg(Register(REG_P | (u16(rz2) & 0xF))), op_z_d(rz3), {}, {}}} } -emit_fcmle_v2s_v2s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_fcmle_v2s_v2s(dst, src)) } -emit_fcmle_v4s_v4s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_fcmle_v4s_v4s(dst, src)) } -emit_fcmle_v2d_v2d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_fcmle_v2d_v2d(dst, src)) } -emit_fcmle_v4h_v4h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_fcmle_v4h_v4h(dst, src)) } -emit_fcmle_v8h_v8h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_fcmle_v8h_v8h(dst, src)) } -emit_fcmle_ph_p_zh :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append(instructions, inst_fcmle_ph_p_zh(rz, rz2, rz3)) } -emit_fcmle_ps_p_zs :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append(instructions, inst_fcmle_ps_p_zs(rz, rz2, rz3)) } -emit_fcmle_pd_p_zd :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append(instructions, inst_fcmle_pd_p_zd(rz, rz2, rz3)) } +emit_fcmle_v2s_v2s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_fcmle_v2s_v2s(dst, src)) } +emit_fcmle_v4s_v4s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_fcmle_v4s_v4s(dst, src)) } +emit_fcmle_v2d_v2d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_fcmle_v2d_v2d(dst, src)) } +emit_fcmle_v4h_v4h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_fcmle_v4h_v4h(dst, src)) } +emit_fcmle_v8h_v8h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_fcmle_v8h_v8h(dst, src)) } +emit_fcmle_ph_p_zh :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append_elem(instructions, inst_fcmle_ph_p_zh(rz, rz2, rz3)) } +emit_fcmle_ps_p_zs :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append_elem(instructions, inst_fcmle_ps_p_zs(rz, rz2, rz3)) } +emit_fcmle_pd_p_zd :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append_elem(instructions, inst_fcmle_pd_p_zd(rz, rz2, rz3)) } inst_fcmlt_v2s_v2s :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .FCMLT, operand_count = 2, length = 4, ops = {op_v_2s(dst), op_v_2s(src), {}, {}, {}}} } inst_fcmlt_v4s_v4s :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .FCMLT, operand_count = 2, length = 4, ops = {op_v_4s(dst), op_v_4s(src), {}, {}, {}}} } inst_fcmlt_v2d_v2d :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .FCMLT, operand_count = 2, length = 4, ops = {op_v_2d(dst), op_v_2d(src), {}, {}, {}}} } @@ -2575,42 +2579,42 @@ inst_fcmlt_v8h_v8h :: #force_inline proc "contextless" (dst: Register inst_fcmlt_ph_p_zh :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8) -> Instruction { return Instruction{mnemonic = .FCMLT, operand_count = 3, length = 4, ops = {op_reg(Register(REG_P | (u16(rz) & 0xF))), op_reg(Register(REG_P | (u16(rz2) & 0xF))), op_z_h(rz3), {}, {}}} } inst_fcmlt_ps_p_zs :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8) -> Instruction { return Instruction{mnemonic = .FCMLT, operand_count = 3, length = 4, ops = {op_reg(Register(REG_P | (u16(rz) & 0xF))), op_reg(Register(REG_P | (u16(rz2) & 0xF))), op_z_s(rz3), {}, {}}} } inst_fcmlt_pd_p_zd :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8) -> Instruction { return Instruction{mnemonic = .FCMLT, operand_count = 3, length = 4, ops = {op_reg(Register(REG_P | (u16(rz) & 0xF))), op_reg(Register(REG_P | (u16(rz2) & 0xF))), op_z_d(rz3), {}, {}}} } -emit_fcmlt_v2s_v2s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_fcmlt_v2s_v2s(dst, src)) } -emit_fcmlt_v4s_v4s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_fcmlt_v4s_v4s(dst, src)) } -emit_fcmlt_v2d_v2d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_fcmlt_v2d_v2d(dst, src)) } -emit_fcmlt_v4h_v4h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_fcmlt_v4h_v4h(dst, src)) } -emit_fcmlt_v8h_v8h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_fcmlt_v8h_v8h(dst, src)) } -emit_fcmlt_ph_p_zh :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append(instructions, inst_fcmlt_ph_p_zh(rz, rz2, rz3)) } -emit_fcmlt_ps_p_zs :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append(instructions, inst_fcmlt_ps_p_zs(rz, rz2, rz3)) } -emit_fcmlt_pd_p_zd :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append(instructions, inst_fcmlt_pd_p_zd(rz, rz2, rz3)) } +emit_fcmlt_v2s_v2s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_fcmlt_v2s_v2s(dst, src)) } +emit_fcmlt_v4s_v4s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_fcmlt_v4s_v4s(dst, src)) } +emit_fcmlt_v2d_v2d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_fcmlt_v2d_v2d(dst, src)) } +emit_fcmlt_v4h_v4h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_fcmlt_v4h_v4h(dst, src)) } +emit_fcmlt_v8h_v8h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_fcmlt_v8h_v8h(dst, src)) } +emit_fcmlt_ph_p_zh :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append_elem(instructions, inst_fcmlt_ph_p_zh(rz, rz2, rz3)) } +emit_fcmlt_ps_p_zs :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append_elem(instructions, inst_fcmlt_ps_p_zs(rz, rz2, rz3)) } +emit_fcmlt_pd_p_zd :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append_elem(instructions, inst_fcmlt_pd_p_zd(rz, rz2, rz3)) } inst_facge_v2s_v2s_v2s :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .FACGE, operand_count = 3, length = 4, ops = {op_v_2s(dst), op_v_2s(src), op_v_2s(src2), {}, {}}} } inst_facge_v4s_v4s_v4s :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .FACGE, operand_count = 3, length = 4, ops = {op_v_4s(dst), op_v_4s(src), op_v_4s(src2), {}, {}}} } inst_facge_v2d_v2d_v2d :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .FACGE, operand_count = 3, length = 4, ops = {op_v_2d(dst), op_v_2d(src), op_v_2d(src2), {}, {}}} } inst_facge_v4h_v4h_v4h :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .FACGE, operand_count = 3, length = 4, ops = {op_v_4h(dst), op_v_4h(src), op_v_4h(src2), {}, {}}} } inst_facge_v8h_v8h_v8h :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .FACGE, operand_count = 3, length = 4, ops = {op_v_8h(dst), op_v_8h(src), op_v_8h(src2), {}, {}}} } -emit_facge_v2s_v2s_v2s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_facge_v2s_v2s_v2s(dst, src, src2)) } -emit_facge_v4s_v4s_v4s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_facge_v4s_v4s_v4s(dst, src, src2)) } -emit_facge_v2d_v2d_v2d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_facge_v2d_v2d_v2d(dst, src, src2)) } -emit_facge_v4h_v4h_v4h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_facge_v4h_v4h_v4h(dst, src, src2)) } -emit_facge_v8h_v8h_v8h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_facge_v8h_v8h_v8h(dst, src, src2)) } +emit_facge_v2s_v2s_v2s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_facge_v2s_v2s_v2s(dst, src, src2)) } +emit_facge_v4s_v4s_v4s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_facge_v4s_v4s_v4s(dst, src, src2)) } +emit_facge_v2d_v2d_v2d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_facge_v2d_v2d_v2d(dst, src, src2)) } +emit_facge_v4h_v4h_v4h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_facge_v4h_v4h_v4h(dst, src, src2)) } +emit_facge_v8h_v8h_v8h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_facge_v8h_v8h_v8h(dst, src, src2)) } inst_facgt_v2s_v2s_v2s :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .FACGT, operand_count = 3, length = 4, ops = {op_v_2s(dst), op_v_2s(src), op_v_2s(src2), {}, {}}} } inst_facgt_v4s_v4s_v4s :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .FACGT, operand_count = 3, length = 4, ops = {op_v_4s(dst), op_v_4s(src), op_v_4s(src2), {}, {}}} } inst_facgt_v2d_v2d_v2d :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .FACGT, operand_count = 3, length = 4, ops = {op_v_2d(dst), op_v_2d(src), op_v_2d(src2), {}, {}}} } inst_facgt_v4h_v4h_v4h :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .FACGT, operand_count = 3, length = 4, ops = {op_v_4h(dst), op_v_4h(src), op_v_4h(src2), {}, {}}} } inst_facgt_v8h_v8h_v8h :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .FACGT, operand_count = 3, length = 4, ops = {op_v_8h(dst), op_v_8h(src), op_v_8h(src2), {}, {}}} } -emit_facgt_v2s_v2s_v2s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_facgt_v2s_v2s_v2s(dst, src, src2)) } -emit_facgt_v4s_v4s_v4s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_facgt_v4s_v4s_v4s(dst, src, src2)) } -emit_facgt_v2d_v2d_v2d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_facgt_v2d_v2d_v2d(dst, src, src2)) } -emit_facgt_v4h_v4h_v4h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_facgt_v4h_v4h_v4h(dst, src, src2)) } -emit_facgt_v8h_v8h_v8h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_facgt_v8h_v8h_v8h(dst, src, src2)) } +emit_facgt_v2s_v2s_v2s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_facgt_v2s_v2s_v2s(dst, src, src2)) } +emit_facgt_v4s_v4s_v4s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_facgt_v4s_v4s_v4s(dst, src, src2)) } +emit_facgt_v2d_v2d_v2d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_facgt_v2d_v2d_v2d(dst, src, src2)) } +emit_facgt_v4h_v4h_v4h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_facgt_v4h_v4h_v4h(dst, src, src2)) } +emit_facgt_v8h_v8h_v8h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_facgt_v8h_v8h_v8h(dst, src, src2)) } inst_cmeq_v16b_v16b_v16b :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .CMEQ, operand_count = 3, length = 4, ops = {op_v_16b(dst), op_v_16b(src), op_v_16b(src2), {}, {}}} } inst_cmeq_v8h_v8h_v8h :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .CMEQ, operand_count = 3, length = 4, ops = {op_v_8h(dst), op_v_8h(src), op_v_8h(src2), {}, {}}} } inst_cmeq_v4s_v4s_v4s :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .CMEQ, operand_count = 3, length = 4, ops = {op_v_4s(dst), op_v_4s(src), op_v_4s(src2), {}, {}}} } inst_cmeq_v2d_v2d_v2d :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .CMEQ, operand_count = 3, length = 4, ops = {op_v_2d(dst), op_v_2d(src), op_v_2d(src2), {}, {}}} } -emit_cmeq_v16b_v16b_v16b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_cmeq_v16b_v16b_v16b(dst, src, src2)) } -emit_cmeq_v8h_v8h_v8h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_cmeq_v8h_v8h_v8h(dst, src, src2)) } -emit_cmeq_v4s_v4s_v4s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_cmeq_v4s_v4s_v4s(dst, src, src2)) } -emit_cmeq_v2d_v2d_v2d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_cmeq_v2d_v2d_v2d(dst, src, src2)) } +emit_cmeq_v16b_v16b_v16b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_cmeq_v16b_v16b_v16b(dst, src, src2)) } +emit_cmeq_v8h_v8h_v8h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_cmeq_v8h_v8h_v8h(dst, src, src2)) } +emit_cmeq_v4s_v4s_v4s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_cmeq_v4s_v4s_v4s(dst, src, src2)) } +emit_cmeq_v2d_v2d_v2d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_cmeq_v2d_v2d_v2d(dst, src, src2)) } inst_cmge_v8b_v8b_v8b :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .CMGE, operand_count = 3, length = 4, ops = {op_v_8b(dst), op_v_8b(src), op_v_8b(src2), {}, {}}} } inst_cmge_v16b_v16b_v16b :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .CMGE, operand_count = 3, length = 4, ops = {op_v_16b(dst), op_v_16b(src), op_v_16b(src2), {}, {}}} } inst_cmge_v4h_v4h_v4h :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .CMGE, operand_count = 3, length = 4, ops = {op_v_4h(dst), op_v_4h(src), op_v_4h(src2), {}, {}}} } @@ -2618,21 +2622,21 @@ inst_cmge_v8h_v8h_v8h :: #force_inline proc "contextless" (dst: Register inst_cmge_v2s_v2s_v2s :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .CMGE, operand_count = 3, length = 4, ops = {op_v_2s(dst), op_v_2s(src), op_v_2s(src2), {}, {}}} } inst_cmge_v4s_v4s_v4s :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .CMGE, operand_count = 3, length = 4, ops = {op_v_4s(dst), op_v_4s(src), op_v_4s(src2), {}, {}}} } inst_cmge_v2d_v2d_v2d :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .CMGE, operand_count = 3, length = 4, ops = {op_v_2d(dst), op_v_2d(src), op_v_2d(src2), {}, {}}} } -emit_cmge_v8b_v8b_v8b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_cmge_v8b_v8b_v8b(dst, src, src2)) } -emit_cmge_v16b_v16b_v16b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_cmge_v16b_v16b_v16b(dst, src, src2)) } -emit_cmge_v4h_v4h_v4h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_cmge_v4h_v4h_v4h(dst, src, src2)) } -emit_cmge_v8h_v8h_v8h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_cmge_v8h_v8h_v8h(dst, src, src2)) } -emit_cmge_v2s_v2s_v2s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_cmge_v2s_v2s_v2s(dst, src, src2)) } -emit_cmge_v4s_v4s_v4s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_cmge_v4s_v4s_v4s(dst, src, src2)) } -emit_cmge_v2d_v2d_v2d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_cmge_v2d_v2d_v2d(dst, src, src2)) } +emit_cmge_v8b_v8b_v8b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_cmge_v8b_v8b_v8b(dst, src, src2)) } +emit_cmge_v16b_v16b_v16b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_cmge_v16b_v16b_v16b(dst, src, src2)) } +emit_cmge_v4h_v4h_v4h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_cmge_v4h_v4h_v4h(dst, src, src2)) } +emit_cmge_v8h_v8h_v8h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_cmge_v8h_v8h_v8h(dst, src, src2)) } +emit_cmge_v2s_v2s_v2s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_cmge_v2s_v2s_v2s(dst, src, src2)) } +emit_cmge_v4s_v4s_v4s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_cmge_v4s_v4s_v4s(dst, src, src2)) } +emit_cmge_v2d_v2d_v2d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_cmge_v2d_v2d_v2d(dst, src, src2)) } inst_cmgt_v16b_v16b_v16b :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .CMGT, operand_count = 3, length = 4, ops = {op_v_16b(dst), op_v_16b(src), op_v_16b(src2), {}, {}}} } inst_cmgt_v2d_v2d_v2d :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .CMGT, operand_count = 3, length = 4, ops = {op_v_2d(dst), op_v_2d(src), op_v_2d(src2), {}, {}}} } -emit_cmgt_v16b_v16b_v16b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_cmgt_v16b_v16b_v16b(dst, src, src2)) } -emit_cmgt_v2d_v2d_v2d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_cmgt_v2d_v2d_v2d(dst, src, src2)) } +emit_cmgt_v16b_v16b_v16b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_cmgt_v16b_v16b_v16b(dst, src, src2)) } +emit_cmgt_v2d_v2d_v2d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_cmgt_v2d_v2d_v2d(dst, src, src2)) } inst_cmhi_v16b_v16b_v16b :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .CMHI, operand_count = 3, length = 4, ops = {op_v_16b(dst), op_v_16b(src), op_v_16b(src2), {}, {}}} } inst_cmhi_v2d_v2d_v2d :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .CMHI, operand_count = 3, length = 4, ops = {op_v_2d(dst), op_v_2d(src), op_v_2d(src2), {}, {}}} } -emit_cmhi_v16b_v16b_v16b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_cmhi_v16b_v16b_v16b(dst, src, src2)) } -emit_cmhi_v2d_v2d_v2d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_cmhi_v2d_v2d_v2d(dst, src, src2)) } +emit_cmhi_v16b_v16b_v16b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_cmhi_v16b_v16b_v16b(dst, src, src2)) } +emit_cmhi_v2d_v2d_v2d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_cmhi_v2d_v2d_v2d(dst, src, src2)) } inst_cmhs_v8b_v8b_v8b :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .CMHS, operand_count = 3, length = 4, ops = {op_v_8b(dst), op_v_8b(src), op_v_8b(src2), {}, {}}} } inst_cmhs_v16b_v16b_v16b :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .CMHS, operand_count = 3, length = 4, ops = {op_v_16b(dst), op_v_16b(src), op_v_16b(src2), {}, {}}} } inst_cmhs_v4h_v4h_v4h :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .CMHS, operand_count = 3, length = 4, ops = {op_v_4h(dst), op_v_4h(src), op_v_4h(src2), {}, {}}} } @@ -2640,13 +2644,13 @@ inst_cmhs_v8h_v8h_v8h :: #force_inline proc "contextless" (dst: Register inst_cmhs_v2s_v2s_v2s :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .CMHS, operand_count = 3, length = 4, ops = {op_v_2s(dst), op_v_2s(src), op_v_2s(src2), {}, {}}} } inst_cmhs_v4s_v4s_v4s :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .CMHS, operand_count = 3, length = 4, ops = {op_v_4s(dst), op_v_4s(src), op_v_4s(src2), {}, {}}} } inst_cmhs_v2d_v2d_v2d :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .CMHS, operand_count = 3, length = 4, ops = {op_v_2d(dst), op_v_2d(src), op_v_2d(src2), {}, {}}} } -emit_cmhs_v8b_v8b_v8b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_cmhs_v8b_v8b_v8b(dst, src, src2)) } -emit_cmhs_v16b_v16b_v16b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_cmhs_v16b_v16b_v16b(dst, src, src2)) } -emit_cmhs_v4h_v4h_v4h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_cmhs_v4h_v4h_v4h(dst, src, src2)) } -emit_cmhs_v8h_v8h_v8h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_cmhs_v8h_v8h_v8h(dst, src, src2)) } -emit_cmhs_v2s_v2s_v2s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_cmhs_v2s_v2s_v2s(dst, src, src2)) } -emit_cmhs_v4s_v4s_v4s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_cmhs_v4s_v4s_v4s(dst, src, src2)) } -emit_cmhs_v2d_v2d_v2d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_cmhs_v2d_v2d_v2d(dst, src, src2)) } +emit_cmhs_v8b_v8b_v8b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_cmhs_v8b_v8b_v8b(dst, src, src2)) } +emit_cmhs_v16b_v16b_v16b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_cmhs_v16b_v16b_v16b(dst, src, src2)) } +emit_cmhs_v4h_v4h_v4h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_cmhs_v4h_v4h_v4h(dst, src, src2)) } +emit_cmhs_v8h_v8h_v8h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_cmhs_v8h_v8h_v8h(dst, src, src2)) } +emit_cmhs_v2s_v2s_v2s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_cmhs_v2s_v2s_v2s(dst, src, src2)) } +emit_cmhs_v4s_v4s_v4s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_cmhs_v4s_v4s_v4s(dst, src, src2)) } +emit_cmhs_v2d_v2d_v2d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_cmhs_v2d_v2d_v2d(dst, src, src2)) } inst_cmle_v8b_v8b :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .CMLE, operand_count = 2, length = 4, ops = {op_v_8b(dst), op_v_8b(src), {}, {}, {}}} } inst_cmle_v16b_v16b :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .CMLE, operand_count = 2, length = 4, ops = {op_v_16b(dst), op_v_16b(src), {}, {}, {}}} } inst_cmle_v4h_v4h :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .CMLE, operand_count = 2, length = 4, ops = {op_v_4h(dst), op_v_4h(src), {}, {}, {}}} } @@ -2654,13 +2658,13 @@ inst_cmle_v8h_v8h :: #force_inline proc "contextless" (dst: Register inst_cmle_v2s_v2s :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .CMLE, operand_count = 2, length = 4, ops = {op_v_2s(dst), op_v_2s(src), {}, {}, {}}} } inst_cmle_v4s_v4s :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .CMLE, operand_count = 2, length = 4, ops = {op_v_4s(dst), op_v_4s(src), {}, {}, {}}} } inst_cmle_v2d_v2d :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .CMLE, operand_count = 2, length = 4, ops = {op_v_2d(dst), op_v_2d(src), {}, {}, {}}} } -emit_cmle_v8b_v8b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_cmle_v8b_v8b(dst, src)) } -emit_cmle_v16b_v16b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_cmle_v16b_v16b(dst, src)) } -emit_cmle_v4h_v4h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_cmle_v4h_v4h(dst, src)) } -emit_cmle_v8h_v8h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_cmle_v8h_v8h(dst, src)) } -emit_cmle_v2s_v2s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_cmle_v2s_v2s(dst, src)) } -emit_cmle_v4s_v4s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_cmle_v4s_v4s(dst, src)) } -emit_cmle_v2d_v2d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_cmle_v2d_v2d(dst, src)) } +emit_cmle_v8b_v8b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_cmle_v8b_v8b(dst, src)) } +emit_cmle_v16b_v16b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_cmle_v16b_v16b(dst, src)) } +emit_cmle_v4h_v4h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_cmle_v4h_v4h(dst, src)) } +emit_cmle_v8h_v8h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_cmle_v8h_v8h(dst, src)) } +emit_cmle_v2s_v2s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_cmle_v2s_v2s(dst, src)) } +emit_cmle_v4s_v4s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_cmle_v4s_v4s(dst, src)) } +emit_cmle_v2d_v2d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_cmle_v2d_v2d(dst, src)) } inst_cmlt_v8b_v8b :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .CMLT, operand_count = 2, length = 4, ops = {op_v_8b(dst), op_v_8b(src), {}, {}, {}}} } inst_cmlt_v16b_v16b :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .CMLT, operand_count = 2, length = 4, ops = {op_v_16b(dst), op_v_16b(src), {}, {}, {}}} } inst_cmlt_v4h_v4h :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .CMLT, operand_count = 2, length = 4, ops = {op_v_4h(dst), op_v_4h(src), {}, {}, {}}} } @@ -2668,13 +2672,13 @@ inst_cmlt_v8h_v8h :: #force_inline proc "contextless" (dst: Register inst_cmlt_v2s_v2s :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .CMLT, operand_count = 2, length = 4, ops = {op_v_2s(dst), op_v_2s(src), {}, {}, {}}} } inst_cmlt_v4s_v4s :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .CMLT, operand_count = 2, length = 4, ops = {op_v_4s(dst), op_v_4s(src), {}, {}, {}}} } inst_cmlt_v2d_v2d :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .CMLT, operand_count = 2, length = 4, ops = {op_v_2d(dst), op_v_2d(src), {}, {}, {}}} } -emit_cmlt_v8b_v8b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_cmlt_v8b_v8b(dst, src)) } -emit_cmlt_v16b_v16b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_cmlt_v16b_v16b(dst, src)) } -emit_cmlt_v4h_v4h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_cmlt_v4h_v4h(dst, src)) } -emit_cmlt_v8h_v8h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_cmlt_v8h_v8h(dst, src)) } -emit_cmlt_v2s_v2s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_cmlt_v2s_v2s(dst, src)) } -emit_cmlt_v4s_v4s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_cmlt_v4s_v4s(dst, src)) } -emit_cmlt_v2d_v2d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_cmlt_v2d_v2d(dst, src)) } +emit_cmlt_v8b_v8b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_cmlt_v8b_v8b(dst, src)) } +emit_cmlt_v16b_v16b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_cmlt_v16b_v16b(dst, src)) } +emit_cmlt_v4h_v4h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_cmlt_v4h_v4h(dst, src)) } +emit_cmlt_v8h_v8h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_cmlt_v8h_v8h(dst, src)) } +emit_cmlt_v2s_v2s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_cmlt_v2s_v2s(dst, src)) } +emit_cmlt_v4s_v4s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_cmlt_v4s_v4s(dst, src)) } +emit_cmlt_v2d_v2d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_cmlt_v2d_v2d(dst, src)) } inst_cmtst_v8b_v8b_v8b :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .CMTST, operand_count = 3, length = 4, ops = {op_v_8b(dst), op_v_8b(src), op_v_8b(src2), {}, {}}} } inst_cmtst_v16b_v16b_v16b :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .CMTST, operand_count = 3, length = 4, ops = {op_v_16b(dst), op_v_16b(src), op_v_16b(src2), {}, {}}} } inst_cmtst_v4h_v4h_v4h :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .CMTST, operand_count = 3, length = 4, ops = {op_v_4h(dst), op_v_4h(src), op_v_4h(src2), {}, {}}} } @@ -2682,27 +2686,27 @@ inst_cmtst_v8h_v8h_v8h :: #force_inline proc "contextless" (dst: Register inst_cmtst_v2s_v2s_v2s :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .CMTST, operand_count = 3, length = 4, ops = {op_v_2s(dst), op_v_2s(src), op_v_2s(src2), {}, {}}} } inst_cmtst_v4s_v4s_v4s :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .CMTST, operand_count = 3, length = 4, ops = {op_v_4s(dst), op_v_4s(src), op_v_4s(src2), {}, {}}} } inst_cmtst_v2d_v2d_v2d :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .CMTST, operand_count = 3, length = 4, ops = {op_v_2d(dst), op_v_2d(src), op_v_2d(src2), {}, {}}} } -emit_cmtst_v8b_v8b_v8b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_cmtst_v8b_v8b_v8b(dst, src, src2)) } -emit_cmtst_v16b_v16b_v16b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_cmtst_v16b_v16b_v16b(dst, src, src2)) } -emit_cmtst_v4h_v4h_v4h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_cmtst_v4h_v4h_v4h(dst, src, src2)) } -emit_cmtst_v8h_v8h_v8h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_cmtst_v8h_v8h_v8h(dst, src, src2)) } -emit_cmtst_v2s_v2s_v2s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_cmtst_v2s_v2s_v2s(dst, src, src2)) } -emit_cmtst_v4s_v4s_v4s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_cmtst_v4s_v4s_v4s(dst, src, src2)) } -emit_cmtst_v2d_v2d_v2d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_cmtst_v2d_v2d_v2d(dst, src, src2)) } +emit_cmtst_v8b_v8b_v8b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_cmtst_v8b_v8b_v8b(dst, src, src2)) } +emit_cmtst_v16b_v16b_v16b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_cmtst_v16b_v16b_v16b(dst, src, src2)) } +emit_cmtst_v4h_v4h_v4h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_cmtst_v4h_v4h_v4h(dst, src, src2)) } +emit_cmtst_v8h_v8h_v8h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_cmtst_v8h_v8h_v8h(dst, src, src2)) } +emit_cmtst_v2s_v2s_v2s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_cmtst_v2s_v2s_v2s(dst, src, src2)) } +emit_cmtst_v4s_v4s_v4s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_cmtst_v4s_v4s_v4s(dst, src, src2)) } +emit_cmtst_v2d_v2d_v2d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_cmtst_v2d_v2d_v2d(dst, src, src2)) } inst_mvn_v8b_v8b :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .MVN, operand_count = 2, length = 4, ops = {op_v_8b(dst), op_v_8b(src), {}, {}, {}}} } inst_mvn_v16b_v16b :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .MVN, operand_count = 2, length = 4, ops = {op_v_16b(dst), op_v_16b(src), {}, {}, {}}} } inst_mvn_r_r :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return inst_r_r(.MVN, dst, src) } -emit_mvn_v8b_v8b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_mvn_v8b_v8b(dst, src)) } -emit_mvn_v16b_v16b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_mvn_v16b_v16b(dst, src)) } -emit_mvn_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_mvn_r_r(dst, src)) } +emit_mvn_v8b_v8b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_mvn_v8b_v8b(dst, src)) } +emit_mvn_v16b_v16b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_mvn_v16b_v16b(dst, src)) } +emit_mvn_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_mvn_r_r(dst, src)) } inst_bit_v16b_v16b_v16b :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .BIT, operand_count = 3, length = 4, ops = {op_v_16b(dst), op_v_16b(src), op_v_16b(src2), {}, {}}} } -emit_bit_v16b_v16b_v16b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_bit_v16b_v16b_v16b(dst, src, src2)) } +emit_bit_v16b_v16b_v16b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_bit_v16b_v16b_v16b(dst, src, src2)) } inst_bif_v16b_v16b_v16b :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .BIF, operand_count = 3, length = 4, ops = {op_v_16b(dst), op_v_16b(src), op_v_16b(src2), {}, {}}} } -emit_bif_v16b_v16b_v16b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_bif_v16b_v16b_v16b(dst, src, src2)) } +emit_bif_v16b_v16b_v16b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_bif_v16b_v16b_v16b(dst, src, src2)) } inst_bsl_v16b_v16b_v16b :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .BSL, operand_count = 3, length = 4, ops = {op_v_16b(dst), op_v_16b(src), op_v_16b(src2), {}, {}}} } inst_bsl_zd_zd_zd_zd :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8, rz4: u8) -> Instruction { return Instruction{mnemonic = .BSL, operand_count = 4, length = 4, ops = {op_z_d(rz), op_z_d(rz2), op_z_d(rz3), op_z_d(rz4), {}}} } -emit_bsl_v16b_v16b_v16b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_bsl_v16b_v16b_v16b(dst, src, src2)) } -emit_bsl_zd_zd_zd_zd :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append(instructions, inst_bsl_zd_zd_zd_zd(rz, rz2, rz3, rz4)) } +emit_bsl_v16b_v16b_v16b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_bsl_v16b_v16b_v16b(dst, src, src2)) } +emit_bsl_zd_zd_zd_zd :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append_elem(instructions, inst_bsl_zd_zd_zd_zd(rz, rz2, rz3, rz4)) } inst_shl_v8b_v8b_i :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .SHL, operand_count = 3, length = 4, ops = {op_v_8b(dst), op_v_8b(src), op_imm(imm, 4), {}, {}}} } inst_shl_v16b_v16b_i :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .SHL, operand_count = 3, length = 4, ops = {op_v_16b(dst), op_v_16b(src), op_imm(imm, 4), {}, {}}} } inst_shl_v4h_v4h_i :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .SHL, operand_count = 3, length = 4, ops = {op_v_4h(dst), op_v_4h(src), op_imm(imm, 4), {}, {}}} } @@ -2710,13 +2714,13 @@ inst_shl_v8h_v8h_i :: #force_inline proc "contextless" (dst: Register inst_shl_v2s_v2s_i :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .SHL, operand_count = 3, length = 4, ops = {op_v_2s(dst), op_v_2s(src), op_imm(imm, 4), {}, {}}} } inst_shl_v4s_v4s_i :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .SHL, operand_count = 3, length = 4, ops = {op_v_4s(dst), op_v_4s(src), op_imm(imm, 4), {}, {}}} } inst_shl_v2d_v2d_i :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .SHL, operand_count = 3, length = 4, ops = {op_v_2d(dst), op_v_2d(src), op_imm(imm, 4), {}, {}}} } -emit_shl_v8b_v8b_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_shl_v8b_v8b_i(dst, src, imm)) } -emit_shl_v16b_v16b_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_shl_v16b_v16b_i(dst, src, imm)) } -emit_shl_v4h_v4h_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_shl_v4h_v4h_i(dst, src, imm)) } -emit_shl_v8h_v8h_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_shl_v8h_v8h_i(dst, src, imm)) } -emit_shl_v2s_v2s_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_shl_v2s_v2s_i(dst, src, imm)) } -emit_shl_v4s_v4s_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_shl_v4s_v4s_i(dst, src, imm)) } -emit_shl_v2d_v2d_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_shl_v2d_v2d_i(dst, src, imm)) } +emit_shl_v8b_v8b_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_shl_v8b_v8b_i(dst, src, imm)) } +emit_shl_v16b_v16b_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_shl_v16b_v16b_i(dst, src, imm)) } +emit_shl_v4h_v4h_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_shl_v4h_v4h_i(dst, src, imm)) } +emit_shl_v8h_v8h_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_shl_v8h_v8h_i(dst, src, imm)) } +emit_shl_v2s_v2s_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_shl_v2s_v2s_i(dst, src, imm)) } +emit_shl_v4s_v4s_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_shl_v4s_v4s_i(dst, src, imm)) } +emit_shl_v2d_v2d_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_shl_v2d_v2d_i(dst, src, imm)) } inst_sqshl_v8b_v8b_i :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .SQSHL, operand_count = 3, length = 4, ops = {op_v_8b(dst), op_v_8b(src), op_imm(imm, 4), {}, {}}} } inst_sqshl_v16b_v16b_i :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .SQSHL, operand_count = 3, length = 4, ops = {op_v_16b(dst), op_v_16b(src), op_imm(imm, 4), {}, {}}} } inst_sqshl_v4h_v4h_i :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .SQSHL, operand_count = 3, length = 4, ops = {op_v_4h(dst), op_v_4h(src), op_imm(imm, 4), {}, {}}} } @@ -2724,13 +2728,13 @@ inst_sqshl_v8h_v8h_i :: #force_inline proc "contextless" (dst: Register inst_sqshl_v2s_v2s_i :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .SQSHL, operand_count = 3, length = 4, ops = {op_v_2s(dst), op_v_2s(src), op_imm(imm, 4), {}, {}}} } inst_sqshl_v4s_v4s_i :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .SQSHL, operand_count = 3, length = 4, ops = {op_v_4s(dst), op_v_4s(src), op_imm(imm, 4), {}, {}}} } inst_sqshl_v2d_v2d_i :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .SQSHL, operand_count = 3, length = 4, ops = {op_v_2d(dst), op_v_2d(src), op_imm(imm, 4), {}, {}}} } -emit_sqshl_v8b_v8b_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_sqshl_v8b_v8b_i(dst, src, imm)) } -emit_sqshl_v16b_v16b_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_sqshl_v16b_v16b_i(dst, src, imm)) } -emit_sqshl_v4h_v4h_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_sqshl_v4h_v4h_i(dst, src, imm)) } -emit_sqshl_v8h_v8h_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_sqshl_v8h_v8h_i(dst, src, imm)) } -emit_sqshl_v2s_v2s_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_sqshl_v2s_v2s_i(dst, src, imm)) } -emit_sqshl_v4s_v4s_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_sqshl_v4s_v4s_i(dst, src, imm)) } -emit_sqshl_v2d_v2d_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_sqshl_v2d_v2d_i(dst, src, imm)) } +emit_sqshl_v8b_v8b_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_sqshl_v8b_v8b_i(dst, src, imm)) } +emit_sqshl_v16b_v16b_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_sqshl_v16b_v16b_i(dst, src, imm)) } +emit_sqshl_v4h_v4h_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_sqshl_v4h_v4h_i(dst, src, imm)) } +emit_sqshl_v8h_v8h_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_sqshl_v8h_v8h_i(dst, src, imm)) } +emit_sqshl_v2s_v2s_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_sqshl_v2s_v2s_i(dst, src, imm)) } +emit_sqshl_v4s_v4s_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_sqshl_v4s_v4s_i(dst, src, imm)) } +emit_sqshl_v2d_v2d_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_sqshl_v2d_v2d_i(dst, src, imm)) } inst_sqshlu_v8b_v8b_i :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .SQSHLU, operand_count = 3, length = 4, ops = {op_v_8b(dst), op_v_8b(src), op_imm(imm, 4), {}, {}}} } inst_sqshlu_v16b_v16b_i :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .SQSHLU, operand_count = 3, length = 4, ops = {op_v_16b(dst), op_v_16b(src), op_imm(imm, 4), {}, {}}} } inst_sqshlu_v4h_v4h_i :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .SQSHLU, operand_count = 3, length = 4, ops = {op_v_4h(dst), op_v_4h(src), op_imm(imm, 4), {}, {}}} } @@ -2738,13 +2742,13 @@ inst_sqshlu_v8h_v8h_i :: #force_inline proc "contextless" (dst: Register inst_sqshlu_v2s_v2s_i :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .SQSHLU, operand_count = 3, length = 4, ops = {op_v_2s(dst), op_v_2s(src), op_imm(imm, 4), {}, {}}} } inst_sqshlu_v4s_v4s_i :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .SQSHLU, operand_count = 3, length = 4, ops = {op_v_4s(dst), op_v_4s(src), op_imm(imm, 4), {}, {}}} } inst_sqshlu_v2d_v2d_i :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .SQSHLU, operand_count = 3, length = 4, ops = {op_v_2d(dst), op_v_2d(src), op_imm(imm, 4), {}, {}}} } -emit_sqshlu_v8b_v8b_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_sqshlu_v8b_v8b_i(dst, src, imm)) } -emit_sqshlu_v16b_v16b_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_sqshlu_v16b_v16b_i(dst, src, imm)) } -emit_sqshlu_v4h_v4h_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_sqshlu_v4h_v4h_i(dst, src, imm)) } -emit_sqshlu_v8h_v8h_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_sqshlu_v8h_v8h_i(dst, src, imm)) } -emit_sqshlu_v2s_v2s_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_sqshlu_v2s_v2s_i(dst, src, imm)) } -emit_sqshlu_v4s_v4s_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_sqshlu_v4s_v4s_i(dst, src, imm)) } -emit_sqshlu_v2d_v2d_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_sqshlu_v2d_v2d_i(dst, src, imm)) } +emit_sqshlu_v8b_v8b_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_sqshlu_v8b_v8b_i(dst, src, imm)) } +emit_sqshlu_v16b_v16b_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_sqshlu_v16b_v16b_i(dst, src, imm)) } +emit_sqshlu_v4h_v4h_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_sqshlu_v4h_v4h_i(dst, src, imm)) } +emit_sqshlu_v8h_v8h_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_sqshlu_v8h_v8h_i(dst, src, imm)) } +emit_sqshlu_v2s_v2s_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_sqshlu_v2s_v2s_i(dst, src, imm)) } +emit_sqshlu_v4s_v4s_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_sqshlu_v4s_v4s_i(dst, src, imm)) } +emit_sqshlu_v2d_v2d_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_sqshlu_v2d_v2d_i(dst, src, imm)) } inst_srshl_v8b_v8b_v8b :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .SRSHL, operand_count = 3, length = 4, ops = {op_v_8b(dst), op_v_8b(src), op_v_8b(src2), {}, {}}} } inst_srshl_v16b_v16b_v16b :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .SRSHL, operand_count = 3, length = 4, ops = {op_v_16b(dst), op_v_16b(src), op_v_16b(src2), {}, {}}} } inst_srshl_v4h_v4h_v4h :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .SRSHL, operand_count = 3, length = 4, ops = {op_v_4h(dst), op_v_4h(src), op_v_4h(src2), {}, {}}} } @@ -2752,13 +2756,13 @@ inst_srshl_v8h_v8h_v8h :: #force_inline proc "contextless" (dst: Register inst_srshl_v2s_v2s_v2s :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .SRSHL, operand_count = 3, length = 4, ops = {op_v_2s(dst), op_v_2s(src), op_v_2s(src2), {}, {}}} } inst_srshl_v4s_v4s_v4s :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .SRSHL, operand_count = 3, length = 4, ops = {op_v_4s(dst), op_v_4s(src), op_v_4s(src2), {}, {}}} } inst_srshl_v2d_v2d_v2d :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .SRSHL, operand_count = 3, length = 4, ops = {op_v_2d(dst), op_v_2d(src), op_v_2d(src2), {}, {}}} } -emit_srshl_v8b_v8b_v8b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_srshl_v8b_v8b_v8b(dst, src, src2)) } -emit_srshl_v16b_v16b_v16b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_srshl_v16b_v16b_v16b(dst, src, src2)) } -emit_srshl_v4h_v4h_v4h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_srshl_v4h_v4h_v4h(dst, src, src2)) } -emit_srshl_v8h_v8h_v8h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_srshl_v8h_v8h_v8h(dst, src, src2)) } -emit_srshl_v2s_v2s_v2s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_srshl_v2s_v2s_v2s(dst, src, src2)) } -emit_srshl_v4s_v4s_v4s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_srshl_v4s_v4s_v4s(dst, src, src2)) } -emit_srshl_v2d_v2d_v2d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_srshl_v2d_v2d_v2d(dst, src, src2)) } +emit_srshl_v8b_v8b_v8b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_srshl_v8b_v8b_v8b(dst, src, src2)) } +emit_srshl_v16b_v16b_v16b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_srshl_v16b_v16b_v16b(dst, src, src2)) } +emit_srshl_v4h_v4h_v4h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_srshl_v4h_v4h_v4h(dst, src, src2)) } +emit_srshl_v8h_v8h_v8h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_srshl_v8h_v8h_v8h(dst, src, src2)) } +emit_srshl_v2s_v2s_v2s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_srshl_v2s_v2s_v2s(dst, src, src2)) } +emit_srshl_v4s_v4s_v4s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_srshl_v4s_v4s_v4s(dst, src, src2)) } +emit_srshl_v2d_v2d_v2d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_srshl_v2d_v2d_v2d(dst, src, src2)) } inst_urshl_v8b_v8b_v8b :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .URSHL, operand_count = 3, length = 4, ops = {op_v_8b(dst), op_v_8b(src), op_v_8b(src2), {}, {}}} } inst_urshl_v16b_v16b_v16b :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .URSHL, operand_count = 3, length = 4, ops = {op_v_16b(dst), op_v_16b(src), op_v_16b(src2), {}, {}}} } inst_urshl_v4h_v4h_v4h :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .URSHL, operand_count = 3, length = 4, ops = {op_v_4h(dst), op_v_4h(src), op_v_4h(src2), {}, {}}} } @@ -2766,13 +2770,13 @@ inst_urshl_v8h_v8h_v8h :: #force_inline proc "contextless" (dst: Register inst_urshl_v2s_v2s_v2s :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .URSHL, operand_count = 3, length = 4, ops = {op_v_2s(dst), op_v_2s(src), op_v_2s(src2), {}, {}}} } inst_urshl_v4s_v4s_v4s :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .URSHL, operand_count = 3, length = 4, ops = {op_v_4s(dst), op_v_4s(src), op_v_4s(src2), {}, {}}} } inst_urshl_v2d_v2d_v2d :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .URSHL, operand_count = 3, length = 4, ops = {op_v_2d(dst), op_v_2d(src), op_v_2d(src2), {}, {}}} } -emit_urshl_v8b_v8b_v8b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_urshl_v8b_v8b_v8b(dst, src, src2)) } -emit_urshl_v16b_v16b_v16b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_urshl_v16b_v16b_v16b(dst, src, src2)) } -emit_urshl_v4h_v4h_v4h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_urshl_v4h_v4h_v4h(dst, src, src2)) } -emit_urshl_v8h_v8h_v8h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_urshl_v8h_v8h_v8h(dst, src, src2)) } -emit_urshl_v2s_v2s_v2s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_urshl_v2s_v2s_v2s(dst, src, src2)) } -emit_urshl_v4s_v4s_v4s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_urshl_v4s_v4s_v4s(dst, src, src2)) } -emit_urshl_v2d_v2d_v2d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_urshl_v2d_v2d_v2d(dst, src, src2)) } +emit_urshl_v8b_v8b_v8b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_urshl_v8b_v8b_v8b(dst, src, src2)) } +emit_urshl_v16b_v16b_v16b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_urshl_v16b_v16b_v16b(dst, src, src2)) } +emit_urshl_v4h_v4h_v4h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_urshl_v4h_v4h_v4h(dst, src, src2)) } +emit_urshl_v8h_v8h_v8h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_urshl_v8h_v8h_v8h(dst, src, src2)) } +emit_urshl_v2s_v2s_v2s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_urshl_v2s_v2s_v2s(dst, src, src2)) } +emit_urshl_v4s_v4s_v4s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_urshl_v4s_v4s_v4s(dst, src, src2)) } +emit_urshl_v2d_v2d_v2d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_urshl_v2d_v2d_v2d(dst, src, src2)) } inst_sshr_v8b_v8b_i :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .SSHR, operand_count = 3, length = 4, ops = {op_v_8b(dst), op_v_8b(src), op_imm(imm, 4), {}, {}}} } inst_sshr_v16b_v16b_i :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .SSHR, operand_count = 3, length = 4, ops = {op_v_16b(dst), op_v_16b(src), op_imm(imm, 4), {}, {}}} } inst_sshr_v4h_v4h_i :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .SSHR, operand_count = 3, length = 4, ops = {op_v_4h(dst), op_v_4h(src), op_imm(imm, 4), {}, {}}} } @@ -2780,13 +2784,13 @@ inst_sshr_v8h_v8h_i :: #force_inline proc "contextless" (dst: Register inst_sshr_v2s_v2s_i :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .SSHR, operand_count = 3, length = 4, ops = {op_v_2s(dst), op_v_2s(src), op_imm(imm, 4), {}, {}}} } inst_sshr_v4s_v4s_i :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .SSHR, operand_count = 3, length = 4, ops = {op_v_4s(dst), op_v_4s(src), op_imm(imm, 4), {}, {}}} } inst_sshr_v2d_v2d_i :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .SSHR, operand_count = 3, length = 4, ops = {op_v_2d(dst), op_v_2d(src), op_imm(imm, 4), {}, {}}} } -emit_sshr_v8b_v8b_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_sshr_v8b_v8b_i(dst, src, imm)) } -emit_sshr_v16b_v16b_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_sshr_v16b_v16b_i(dst, src, imm)) } -emit_sshr_v4h_v4h_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_sshr_v4h_v4h_i(dst, src, imm)) } -emit_sshr_v8h_v8h_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_sshr_v8h_v8h_i(dst, src, imm)) } -emit_sshr_v2s_v2s_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_sshr_v2s_v2s_i(dst, src, imm)) } -emit_sshr_v4s_v4s_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_sshr_v4s_v4s_i(dst, src, imm)) } -emit_sshr_v2d_v2d_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_sshr_v2d_v2d_i(dst, src, imm)) } +emit_sshr_v8b_v8b_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_sshr_v8b_v8b_i(dst, src, imm)) } +emit_sshr_v16b_v16b_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_sshr_v16b_v16b_i(dst, src, imm)) } +emit_sshr_v4h_v4h_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_sshr_v4h_v4h_i(dst, src, imm)) } +emit_sshr_v8h_v8h_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_sshr_v8h_v8h_i(dst, src, imm)) } +emit_sshr_v2s_v2s_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_sshr_v2s_v2s_i(dst, src, imm)) } +emit_sshr_v4s_v4s_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_sshr_v4s_v4s_i(dst, src, imm)) } +emit_sshr_v2d_v2d_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_sshr_v2d_v2d_i(dst, src, imm)) } inst_ushr_v8b_v8b_i :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .USHR, operand_count = 3, length = 4, ops = {op_v_8b(dst), op_v_8b(src), op_imm(imm, 4), {}, {}}} } inst_ushr_v16b_v16b_i :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .USHR, operand_count = 3, length = 4, ops = {op_v_16b(dst), op_v_16b(src), op_imm(imm, 4), {}, {}}} } inst_ushr_v4h_v4h_i :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .USHR, operand_count = 3, length = 4, ops = {op_v_4h(dst), op_v_4h(src), op_imm(imm, 4), {}, {}}} } @@ -2794,13 +2798,13 @@ inst_ushr_v8h_v8h_i :: #force_inline proc "contextless" (dst: Register inst_ushr_v2s_v2s_i :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .USHR, operand_count = 3, length = 4, ops = {op_v_2s(dst), op_v_2s(src), op_imm(imm, 4), {}, {}}} } inst_ushr_v4s_v4s_i :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .USHR, operand_count = 3, length = 4, ops = {op_v_4s(dst), op_v_4s(src), op_imm(imm, 4), {}, {}}} } inst_ushr_v2d_v2d_i :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .USHR, operand_count = 3, length = 4, ops = {op_v_2d(dst), op_v_2d(src), op_imm(imm, 4), {}, {}}} } -emit_ushr_v8b_v8b_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_ushr_v8b_v8b_i(dst, src, imm)) } -emit_ushr_v16b_v16b_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_ushr_v16b_v16b_i(dst, src, imm)) } -emit_ushr_v4h_v4h_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_ushr_v4h_v4h_i(dst, src, imm)) } -emit_ushr_v8h_v8h_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_ushr_v8h_v8h_i(dst, src, imm)) } -emit_ushr_v2s_v2s_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_ushr_v2s_v2s_i(dst, src, imm)) } -emit_ushr_v4s_v4s_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_ushr_v4s_v4s_i(dst, src, imm)) } -emit_ushr_v2d_v2d_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_ushr_v2d_v2d_i(dst, src, imm)) } +emit_ushr_v8b_v8b_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_ushr_v8b_v8b_i(dst, src, imm)) } +emit_ushr_v16b_v16b_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_ushr_v16b_v16b_i(dst, src, imm)) } +emit_ushr_v4h_v4h_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_ushr_v4h_v4h_i(dst, src, imm)) } +emit_ushr_v8h_v8h_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_ushr_v8h_v8h_i(dst, src, imm)) } +emit_ushr_v2s_v2s_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_ushr_v2s_v2s_i(dst, src, imm)) } +emit_ushr_v4s_v4s_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_ushr_v4s_v4s_i(dst, src, imm)) } +emit_ushr_v2d_v2d_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_ushr_v2d_v2d_i(dst, src, imm)) } inst_ssra_v8b_v8b_i :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .SSRA, operand_count = 3, length = 4, ops = {op_v_8b(dst), op_v_8b(src), op_imm(imm, 4), {}, {}}} } inst_ssra_v16b_v16b_i :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .SSRA, operand_count = 3, length = 4, ops = {op_v_16b(dst), op_v_16b(src), op_imm(imm, 4), {}, {}}} } inst_ssra_v4h_v4h_i :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .SSRA, operand_count = 3, length = 4, ops = {op_v_4h(dst), op_v_4h(src), op_imm(imm, 4), {}, {}}} } @@ -2808,13 +2812,13 @@ inst_ssra_v8h_v8h_i :: #force_inline proc "contextless" (dst: Register inst_ssra_v2s_v2s_i :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .SSRA, operand_count = 3, length = 4, ops = {op_v_2s(dst), op_v_2s(src), op_imm(imm, 4), {}, {}}} } inst_ssra_v4s_v4s_i :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .SSRA, operand_count = 3, length = 4, ops = {op_v_4s(dst), op_v_4s(src), op_imm(imm, 4), {}, {}}} } inst_ssra_v2d_v2d_i :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .SSRA, operand_count = 3, length = 4, ops = {op_v_2d(dst), op_v_2d(src), op_imm(imm, 4), {}, {}}} } -emit_ssra_v8b_v8b_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_ssra_v8b_v8b_i(dst, src, imm)) } -emit_ssra_v16b_v16b_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_ssra_v16b_v16b_i(dst, src, imm)) } -emit_ssra_v4h_v4h_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_ssra_v4h_v4h_i(dst, src, imm)) } -emit_ssra_v8h_v8h_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_ssra_v8h_v8h_i(dst, src, imm)) } -emit_ssra_v2s_v2s_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_ssra_v2s_v2s_i(dst, src, imm)) } -emit_ssra_v4s_v4s_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_ssra_v4s_v4s_i(dst, src, imm)) } -emit_ssra_v2d_v2d_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_ssra_v2d_v2d_i(dst, src, imm)) } +emit_ssra_v8b_v8b_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_ssra_v8b_v8b_i(dst, src, imm)) } +emit_ssra_v16b_v16b_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_ssra_v16b_v16b_i(dst, src, imm)) } +emit_ssra_v4h_v4h_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_ssra_v4h_v4h_i(dst, src, imm)) } +emit_ssra_v8h_v8h_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_ssra_v8h_v8h_i(dst, src, imm)) } +emit_ssra_v2s_v2s_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_ssra_v2s_v2s_i(dst, src, imm)) } +emit_ssra_v4s_v4s_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_ssra_v4s_v4s_i(dst, src, imm)) } +emit_ssra_v2d_v2d_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_ssra_v2d_v2d_i(dst, src, imm)) } inst_usra_v8b_v8b_i :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .USRA, operand_count = 3, length = 4, ops = {op_v_8b(dst), op_v_8b(src), op_imm(imm, 4), {}, {}}} } inst_usra_v16b_v16b_i :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .USRA, operand_count = 3, length = 4, ops = {op_v_16b(dst), op_v_16b(src), op_imm(imm, 4), {}, {}}} } inst_usra_v4h_v4h_i :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .USRA, operand_count = 3, length = 4, ops = {op_v_4h(dst), op_v_4h(src), op_imm(imm, 4), {}, {}}} } @@ -2822,13 +2826,13 @@ inst_usra_v8h_v8h_i :: #force_inline proc "contextless" (dst: Register inst_usra_v2s_v2s_i :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .USRA, operand_count = 3, length = 4, ops = {op_v_2s(dst), op_v_2s(src), op_imm(imm, 4), {}, {}}} } inst_usra_v4s_v4s_i :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .USRA, operand_count = 3, length = 4, ops = {op_v_4s(dst), op_v_4s(src), op_imm(imm, 4), {}, {}}} } inst_usra_v2d_v2d_i :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .USRA, operand_count = 3, length = 4, ops = {op_v_2d(dst), op_v_2d(src), op_imm(imm, 4), {}, {}}} } -emit_usra_v8b_v8b_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_usra_v8b_v8b_i(dst, src, imm)) } -emit_usra_v16b_v16b_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_usra_v16b_v16b_i(dst, src, imm)) } -emit_usra_v4h_v4h_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_usra_v4h_v4h_i(dst, src, imm)) } -emit_usra_v8h_v8h_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_usra_v8h_v8h_i(dst, src, imm)) } -emit_usra_v2s_v2s_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_usra_v2s_v2s_i(dst, src, imm)) } -emit_usra_v4s_v4s_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_usra_v4s_v4s_i(dst, src, imm)) } -emit_usra_v2d_v2d_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_usra_v2d_v2d_i(dst, src, imm)) } +emit_usra_v8b_v8b_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_usra_v8b_v8b_i(dst, src, imm)) } +emit_usra_v16b_v16b_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_usra_v16b_v16b_i(dst, src, imm)) } +emit_usra_v4h_v4h_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_usra_v4h_v4h_i(dst, src, imm)) } +emit_usra_v8h_v8h_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_usra_v8h_v8h_i(dst, src, imm)) } +emit_usra_v2s_v2s_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_usra_v2s_v2s_i(dst, src, imm)) } +emit_usra_v4s_v4s_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_usra_v4s_v4s_i(dst, src, imm)) } +emit_usra_v2d_v2d_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_usra_v2d_v2d_i(dst, src, imm)) } inst_srshr_v8b_v8b_i :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .SRSHR, operand_count = 3, length = 4, ops = {op_v_8b(dst), op_v_8b(src), op_imm(imm, 4), {}, {}}} } inst_srshr_v16b_v16b_i :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .SRSHR, operand_count = 3, length = 4, ops = {op_v_16b(dst), op_v_16b(src), op_imm(imm, 4), {}, {}}} } inst_srshr_v4h_v4h_i :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .SRSHR, operand_count = 3, length = 4, ops = {op_v_4h(dst), op_v_4h(src), op_imm(imm, 4), {}, {}}} } @@ -2836,13 +2840,13 @@ inst_srshr_v8h_v8h_i :: #force_inline proc "contextless" (dst: Register inst_srshr_v2s_v2s_i :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .SRSHR, operand_count = 3, length = 4, ops = {op_v_2s(dst), op_v_2s(src), op_imm(imm, 4), {}, {}}} } inst_srshr_v4s_v4s_i :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .SRSHR, operand_count = 3, length = 4, ops = {op_v_4s(dst), op_v_4s(src), op_imm(imm, 4), {}, {}}} } inst_srshr_v2d_v2d_i :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .SRSHR, operand_count = 3, length = 4, ops = {op_v_2d(dst), op_v_2d(src), op_imm(imm, 4), {}, {}}} } -emit_srshr_v8b_v8b_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_srshr_v8b_v8b_i(dst, src, imm)) } -emit_srshr_v16b_v16b_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_srshr_v16b_v16b_i(dst, src, imm)) } -emit_srshr_v4h_v4h_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_srshr_v4h_v4h_i(dst, src, imm)) } -emit_srshr_v8h_v8h_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_srshr_v8h_v8h_i(dst, src, imm)) } -emit_srshr_v2s_v2s_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_srshr_v2s_v2s_i(dst, src, imm)) } -emit_srshr_v4s_v4s_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_srshr_v4s_v4s_i(dst, src, imm)) } -emit_srshr_v2d_v2d_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_srshr_v2d_v2d_i(dst, src, imm)) } +emit_srshr_v8b_v8b_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_srshr_v8b_v8b_i(dst, src, imm)) } +emit_srshr_v16b_v16b_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_srshr_v16b_v16b_i(dst, src, imm)) } +emit_srshr_v4h_v4h_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_srshr_v4h_v4h_i(dst, src, imm)) } +emit_srshr_v8h_v8h_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_srshr_v8h_v8h_i(dst, src, imm)) } +emit_srshr_v2s_v2s_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_srshr_v2s_v2s_i(dst, src, imm)) } +emit_srshr_v4s_v4s_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_srshr_v4s_v4s_i(dst, src, imm)) } +emit_srshr_v2d_v2d_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_srshr_v2d_v2d_i(dst, src, imm)) } inst_urshr_v8b_v8b_i :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .URSHR, operand_count = 3, length = 4, ops = {op_v_8b(dst), op_v_8b(src), op_imm(imm, 4), {}, {}}} } inst_urshr_v16b_v16b_i :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .URSHR, operand_count = 3, length = 4, ops = {op_v_16b(dst), op_v_16b(src), op_imm(imm, 4), {}, {}}} } inst_urshr_v4h_v4h_i :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .URSHR, operand_count = 3, length = 4, ops = {op_v_4h(dst), op_v_4h(src), op_imm(imm, 4), {}, {}}} } @@ -2850,13 +2854,13 @@ inst_urshr_v8h_v8h_i :: #force_inline proc "contextless" (dst: Register inst_urshr_v2s_v2s_i :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .URSHR, operand_count = 3, length = 4, ops = {op_v_2s(dst), op_v_2s(src), op_imm(imm, 4), {}, {}}} } inst_urshr_v4s_v4s_i :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .URSHR, operand_count = 3, length = 4, ops = {op_v_4s(dst), op_v_4s(src), op_imm(imm, 4), {}, {}}} } inst_urshr_v2d_v2d_i :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .URSHR, operand_count = 3, length = 4, ops = {op_v_2d(dst), op_v_2d(src), op_imm(imm, 4), {}, {}}} } -emit_urshr_v8b_v8b_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_urshr_v8b_v8b_i(dst, src, imm)) } -emit_urshr_v16b_v16b_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_urshr_v16b_v16b_i(dst, src, imm)) } -emit_urshr_v4h_v4h_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_urshr_v4h_v4h_i(dst, src, imm)) } -emit_urshr_v8h_v8h_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_urshr_v8h_v8h_i(dst, src, imm)) } -emit_urshr_v2s_v2s_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_urshr_v2s_v2s_i(dst, src, imm)) } -emit_urshr_v4s_v4s_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_urshr_v4s_v4s_i(dst, src, imm)) } -emit_urshr_v2d_v2d_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_urshr_v2d_v2d_i(dst, src, imm)) } +emit_urshr_v8b_v8b_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_urshr_v8b_v8b_i(dst, src, imm)) } +emit_urshr_v16b_v16b_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_urshr_v16b_v16b_i(dst, src, imm)) } +emit_urshr_v4h_v4h_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_urshr_v4h_v4h_i(dst, src, imm)) } +emit_urshr_v8h_v8h_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_urshr_v8h_v8h_i(dst, src, imm)) } +emit_urshr_v2s_v2s_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_urshr_v2s_v2s_i(dst, src, imm)) } +emit_urshr_v4s_v4s_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_urshr_v4s_v4s_i(dst, src, imm)) } +emit_urshr_v2d_v2d_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_urshr_v2d_v2d_i(dst, src, imm)) } inst_srsra_v8b_v8b_i :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .SRSRA, operand_count = 3, length = 4, ops = {op_v_8b(dst), op_v_8b(src), op_imm(imm, 4), {}, {}}} } inst_srsra_v16b_v16b_i :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .SRSRA, operand_count = 3, length = 4, ops = {op_v_16b(dst), op_v_16b(src), op_imm(imm, 4), {}, {}}} } inst_srsra_v4h_v4h_i :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .SRSRA, operand_count = 3, length = 4, ops = {op_v_4h(dst), op_v_4h(src), op_imm(imm, 4), {}, {}}} } @@ -2864,13 +2868,13 @@ inst_srsra_v8h_v8h_i :: #force_inline proc "contextless" (dst: Register inst_srsra_v2s_v2s_i :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .SRSRA, operand_count = 3, length = 4, ops = {op_v_2s(dst), op_v_2s(src), op_imm(imm, 4), {}, {}}} } inst_srsra_v4s_v4s_i :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .SRSRA, operand_count = 3, length = 4, ops = {op_v_4s(dst), op_v_4s(src), op_imm(imm, 4), {}, {}}} } inst_srsra_v2d_v2d_i :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .SRSRA, operand_count = 3, length = 4, ops = {op_v_2d(dst), op_v_2d(src), op_imm(imm, 4), {}, {}}} } -emit_srsra_v8b_v8b_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_srsra_v8b_v8b_i(dst, src, imm)) } -emit_srsra_v16b_v16b_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_srsra_v16b_v16b_i(dst, src, imm)) } -emit_srsra_v4h_v4h_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_srsra_v4h_v4h_i(dst, src, imm)) } -emit_srsra_v8h_v8h_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_srsra_v8h_v8h_i(dst, src, imm)) } -emit_srsra_v2s_v2s_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_srsra_v2s_v2s_i(dst, src, imm)) } -emit_srsra_v4s_v4s_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_srsra_v4s_v4s_i(dst, src, imm)) } -emit_srsra_v2d_v2d_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_srsra_v2d_v2d_i(dst, src, imm)) } +emit_srsra_v8b_v8b_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_srsra_v8b_v8b_i(dst, src, imm)) } +emit_srsra_v16b_v16b_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_srsra_v16b_v16b_i(dst, src, imm)) } +emit_srsra_v4h_v4h_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_srsra_v4h_v4h_i(dst, src, imm)) } +emit_srsra_v8h_v8h_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_srsra_v8h_v8h_i(dst, src, imm)) } +emit_srsra_v2s_v2s_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_srsra_v2s_v2s_i(dst, src, imm)) } +emit_srsra_v4s_v4s_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_srsra_v4s_v4s_i(dst, src, imm)) } +emit_srsra_v2d_v2d_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_srsra_v2d_v2d_i(dst, src, imm)) } inst_ursra_v8b_v8b_i :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .URSRA, operand_count = 3, length = 4, ops = {op_v_8b(dst), op_v_8b(src), op_imm(imm, 4), {}, {}}} } inst_ursra_v16b_v16b_i :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .URSRA, operand_count = 3, length = 4, ops = {op_v_16b(dst), op_v_16b(src), op_imm(imm, 4), {}, {}}} } inst_ursra_v4h_v4h_i :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .URSRA, operand_count = 3, length = 4, ops = {op_v_4h(dst), op_v_4h(src), op_imm(imm, 4), {}, {}}} } @@ -2878,13 +2882,13 @@ inst_ursra_v8h_v8h_i :: #force_inline proc "contextless" (dst: Register inst_ursra_v2s_v2s_i :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .URSRA, operand_count = 3, length = 4, ops = {op_v_2s(dst), op_v_2s(src), op_imm(imm, 4), {}, {}}} } inst_ursra_v4s_v4s_i :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .URSRA, operand_count = 3, length = 4, ops = {op_v_4s(dst), op_v_4s(src), op_imm(imm, 4), {}, {}}} } inst_ursra_v2d_v2d_i :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .URSRA, operand_count = 3, length = 4, ops = {op_v_2d(dst), op_v_2d(src), op_imm(imm, 4), {}, {}}} } -emit_ursra_v8b_v8b_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_ursra_v8b_v8b_i(dst, src, imm)) } -emit_ursra_v16b_v16b_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_ursra_v16b_v16b_i(dst, src, imm)) } -emit_ursra_v4h_v4h_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_ursra_v4h_v4h_i(dst, src, imm)) } -emit_ursra_v8h_v8h_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_ursra_v8h_v8h_i(dst, src, imm)) } -emit_ursra_v2s_v2s_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_ursra_v2s_v2s_i(dst, src, imm)) } -emit_ursra_v4s_v4s_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_ursra_v4s_v4s_i(dst, src, imm)) } -emit_ursra_v2d_v2d_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_ursra_v2d_v2d_i(dst, src, imm)) } +emit_ursra_v8b_v8b_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_ursra_v8b_v8b_i(dst, src, imm)) } +emit_ursra_v16b_v16b_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_ursra_v16b_v16b_i(dst, src, imm)) } +emit_ursra_v4h_v4h_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_ursra_v4h_v4h_i(dst, src, imm)) } +emit_ursra_v8h_v8h_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_ursra_v8h_v8h_i(dst, src, imm)) } +emit_ursra_v2s_v2s_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_ursra_v2s_v2s_i(dst, src, imm)) } +emit_ursra_v4s_v4s_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_ursra_v4s_v4s_i(dst, src, imm)) } +emit_ursra_v2d_v2d_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_ursra_v2d_v2d_i(dst, src, imm)) } inst_sshl_v8b_v8b_v8b :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .SSHL, operand_count = 3, length = 4, ops = {op_v_8b(dst), op_v_8b(src), op_v_8b(src2), {}, {}}} } inst_sshl_v16b_v16b_v16b :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .SSHL, operand_count = 3, length = 4, ops = {op_v_16b(dst), op_v_16b(src), op_v_16b(src2), {}, {}}} } inst_sshl_v4h_v4h_v4h :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .SSHL, operand_count = 3, length = 4, ops = {op_v_4h(dst), op_v_4h(src), op_v_4h(src2), {}, {}}} } @@ -2892,13 +2896,13 @@ inst_sshl_v8h_v8h_v8h :: #force_inline proc "contextless" (dst: Register inst_sshl_v2s_v2s_v2s :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .SSHL, operand_count = 3, length = 4, ops = {op_v_2s(dst), op_v_2s(src), op_v_2s(src2), {}, {}}} } inst_sshl_v4s_v4s_v4s :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .SSHL, operand_count = 3, length = 4, ops = {op_v_4s(dst), op_v_4s(src), op_v_4s(src2), {}, {}}} } inst_sshl_v2d_v2d_v2d :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .SSHL, operand_count = 3, length = 4, ops = {op_v_2d(dst), op_v_2d(src), op_v_2d(src2), {}, {}}} } -emit_sshl_v8b_v8b_v8b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_sshl_v8b_v8b_v8b(dst, src, src2)) } -emit_sshl_v16b_v16b_v16b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_sshl_v16b_v16b_v16b(dst, src, src2)) } -emit_sshl_v4h_v4h_v4h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_sshl_v4h_v4h_v4h(dst, src, src2)) } -emit_sshl_v8h_v8h_v8h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_sshl_v8h_v8h_v8h(dst, src, src2)) } -emit_sshl_v2s_v2s_v2s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_sshl_v2s_v2s_v2s(dst, src, src2)) } -emit_sshl_v4s_v4s_v4s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_sshl_v4s_v4s_v4s(dst, src, src2)) } -emit_sshl_v2d_v2d_v2d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_sshl_v2d_v2d_v2d(dst, src, src2)) } +emit_sshl_v8b_v8b_v8b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_sshl_v8b_v8b_v8b(dst, src, src2)) } +emit_sshl_v16b_v16b_v16b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_sshl_v16b_v16b_v16b(dst, src, src2)) } +emit_sshl_v4h_v4h_v4h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_sshl_v4h_v4h_v4h(dst, src, src2)) } +emit_sshl_v8h_v8h_v8h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_sshl_v8h_v8h_v8h(dst, src, src2)) } +emit_sshl_v2s_v2s_v2s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_sshl_v2s_v2s_v2s(dst, src, src2)) } +emit_sshl_v4s_v4s_v4s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_sshl_v4s_v4s_v4s(dst, src, src2)) } +emit_sshl_v2d_v2d_v2d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_sshl_v2d_v2d_v2d(dst, src, src2)) } inst_ushl_v8b_v8b_v8b :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .USHL, operand_count = 3, length = 4, ops = {op_v_8b(dst), op_v_8b(src), op_v_8b(src2), {}, {}}} } inst_ushl_v16b_v16b_v16b :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .USHL, operand_count = 3, length = 4, ops = {op_v_16b(dst), op_v_16b(src), op_v_16b(src2), {}, {}}} } inst_ushl_v4h_v4h_v4h :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .USHL, operand_count = 3, length = 4, ops = {op_v_4h(dst), op_v_4h(src), op_v_4h(src2), {}, {}}} } @@ -2906,13 +2910,13 @@ inst_ushl_v8h_v8h_v8h :: #force_inline proc "contextless" (dst: Register inst_ushl_v2s_v2s_v2s :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .USHL, operand_count = 3, length = 4, ops = {op_v_2s(dst), op_v_2s(src), op_v_2s(src2), {}, {}}} } inst_ushl_v4s_v4s_v4s :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .USHL, operand_count = 3, length = 4, ops = {op_v_4s(dst), op_v_4s(src), op_v_4s(src2), {}, {}}} } inst_ushl_v2d_v2d_v2d :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .USHL, operand_count = 3, length = 4, ops = {op_v_2d(dst), op_v_2d(src), op_v_2d(src2), {}, {}}} } -emit_ushl_v8b_v8b_v8b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_ushl_v8b_v8b_v8b(dst, src, src2)) } -emit_ushl_v16b_v16b_v16b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_ushl_v16b_v16b_v16b(dst, src, src2)) } -emit_ushl_v4h_v4h_v4h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_ushl_v4h_v4h_v4h(dst, src, src2)) } -emit_ushl_v8h_v8h_v8h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_ushl_v8h_v8h_v8h(dst, src, src2)) } -emit_ushl_v2s_v2s_v2s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_ushl_v2s_v2s_v2s(dst, src, src2)) } -emit_ushl_v4s_v4s_v4s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_ushl_v4s_v4s_v4s(dst, src, src2)) } -emit_ushl_v2d_v2d_v2d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_ushl_v2d_v2d_v2d(dst, src, src2)) } +emit_ushl_v8b_v8b_v8b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_ushl_v8b_v8b_v8b(dst, src, src2)) } +emit_ushl_v16b_v16b_v16b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_ushl_v16b_v16b_v16b(dst, src, src2)) } +emit_ushl_v4h_v4h_v4h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_ushl_v4h_v4h_v4h(dst, src, src2)) } +emit_ushl_v8h_v8h_v8h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_ushl_v8h_v8h_v8h(dst, src, src2)) } +emit_ushl_v2s_v2s_v2s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_ushl_v2s_v2s_v2s(dst, src, src2)) } +emit_ushl_v4s_v4s_v4s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_ushl_v4s_v4s_v4s(dst, src, src2)) } +emit_ushl_v2d_v2d_v2d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_ushl_v2d_v2d_v2d(dst, src, src2)) } inst_sli_v8b_v8b_i :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .SLI, operand_count = 3, length = 4, ops = {op_v_8b(dst), op_v_8b(src), op_imm(imm, 4), {}, {}}} } inst_sli_v16b_v16b_i :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .SLI, operand_count = 3, length = 4, ops = {op_v_16b(dst), op_v_16b(src), op_imm(imm, 4), {}, {}}} } inst_sli_v4h_v4h_i :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .SLI, operand_count = 3, length = 4, ops = {op_v_4h(dst), op_v_4h(src), op_imm(imm, 4), {}, {}}} } @@ -2920,13 +2924,13 @@ inst_sli_v8h_v8h_i :: #force_inline proc "contextless" (dst: Register inst_sli_v2s_v2s_i :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .SLI, operand_count = 3, length = 4, ops = {op_v_2s(dst), op_v_2s(src), op_imm(imm, 4), {}, {}}} } inst_sli_v4s_v4s_i :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .SLI, operand_count = 3, length = 4, ops = {op_v_4s(dst), op_v_4s(src), op_imm(imm, 4), {}, {}}} } inst_sli_v2d_v2d_i :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .SLI, operand_count = 3, length = 4, ops = {op_v_2d(dst), op_v_2d(src), op_imm(imm, 4), {}, {}}} } -emit_sli_v8b_v8b_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_sli_v8b_v8b_i(dst, src, imm)) } -emit_sli_v16b_v16b_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_sli_v16b_v16b_i(dst, src, imm)) } -emit_sli_v4h_v4h_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_sli_v4h_v4h_i(dst, src, imm)) } -emit_sli_v8h_v8h_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_sli_v8h_v8h_i(dst, src, imm)) } -emit_sli_v2s_v2s_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_sli_v2s_v2s_i(dst, src, imm)) } -emit_sli_v4s_v4s_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_sli_v4s_v4s_i(dst, src, imm)) } -emit_sli_v2d_v2d_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_sli_v2d_v2d_i(dst, src, imm)) } +emit_sli_v8b_v8b_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_sli_v8b_v8b_i(dst, src, imm)) } +emit_sli_v16b_v16b_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_sli_v16b_v16b_i(dst, src, imm)) } +emit_sli_v4h_v4h_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_sli_v4h_v4h_i(dst, src, imm)) } +emit_sli_v8h_v8h_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_sli_v8h_v8h_i(dst, src, imm)) } +emit_sli_v2s_v2s_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_sli_v2s_v2s_i(dst, src, imm)) } +emit_sli_v4s_v4s_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_sli_v4s_v4s_i(dst, src, imm)) } +emit_sli_v2d_v2d_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_sli_v2d_v2d_i(dst, src, imm)) } inst_sri_v8b_v8b_i :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .SRI, operand_count = 3, length = 4, ops = {op_v_8b(dst), op_v_8b(src), op_imm(imm, 4), {}, {}}} } inst_sri_v16b_v16b_i :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .SRI, operand_count = 3, length = 4, ops = {op_v_16b(dst), op_v_16b(src), op_imm(imm, 4), {}, {}}} } inst_sri_v4h_v4h_i :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .SRI, operand_count = 3, length = 4, ops = {op_v_4h(dst), op_v_4h(src), op_imm(imm, 4), {}, {}}} } @@ -2934,157 +2938,157 @@ inst_sri_v8h_v8h_i :: #force_inline proc "contextless" (dst: Register inst_sri_v2s_v2s_i :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .SRI, operand_count = 3, length = 4, ops = {op_v_2s(dst), op_v_2s(src), op_imm(imm, 4), {}, {}}} } inst_sri_v4s_v4s_i :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .SRI, operand_count = 3, length = 4, ops = {op_v_4s(dst), op_v_4s(src), op_imm(imm, 4), {}, {}}} } inst_sri_v2d_v2d_i :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .SRI, operand_count = 3, length = 4, ops = {op_v_2d(dst), op_v_2d(src), op_imm(imm, 4), {}, {}}} } -emit_sri_v8b_v8b_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_sri_v8b_v8b_i(dst, src, imm)) } -emit_sri_v16b_v16b_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_sri_v16b_v16b_i(dst, src, imm)) } -emit_sri_v4h_v4h_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_sri_v4h_v4h_i(dst, src, imm)) } -emit_sri_v8h_v8h_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_sri_v8h_v8h_i(dst, src, imm)) } -emit_sri_v2s_v2s_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_sri_v2s_v2s_i(dst, src, imm)) } -emit_sri_v4s_v4s_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_sri_v4s_v4s_i(dst, src, imm)) } -emit_sri_v2d_v2d_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_sri_v2d_v2d_i(dst, src, imm)) } +emit_sri_v8b_v8b_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_sri_v8b_v8b_i(dst, src, imm)) } +emit_sri_v16b_v16b_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_sri_v16b_v16b_i(dst, src, imm)) } +emit_sri_v4h_v4h_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_sri_v4h_v4h_i(dst, src, imm)) } +emit_sri_v8h_v8h_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_sri_v8h_v8h_i(dst, src, imm)) } +emit_sri_v2s_v2s_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_sri_v2s_v2s_i(dst, src, imm)) } +emit_sri_v4s_v4s_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_sri_v4s_v4s_i(dst, src, imm)) } +emit_sri_v2d_v2d_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_sri_v2d_v2d_i(dst, src, imm)) } inst_sshll_v8h_v8b_i :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .SSHLL, operand_count = 3, length = 4, ops = {op_v_8h(dst), op_v_8b(src), op_imm(imm, 4), {}, {}}} } inst_sshll_v4s_v4h_i :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .SSHLL, operand_count = 3, length = 4, ops = {op_v_4s(dst), op_v_4h(src), op_imm(imm, 4), {}, {}}} } inst_sshll_v2d_v2s_i :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .SSHLL, operand_count = 3, length = 4, ops = {op_v_2d(dst), op_v_2s(src), op_imm(imm, 4), {}, {}}} } -emit_sshll_v8h_v8b_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_sshll_v8h_v8b_i(dst, src, imm)) } -emit_sshll_v4s_v4h_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_sshll_v4s_v4h_i(dst, src, imm)) } -emit_sshll_v2d_v2s_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_sshll_v2d_v2s_i(dst, src, imm)) } +emit_sshll_v8h_v8b_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_sshll_v8h_v8b_i(dst, src, imm)) } +emit_sshll_v4s_v4h_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_sshll_v4s_v4h_i(dst, src, imm)) } +emit_sshll_v2d_v2s_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_sshll_v2d_v2s_i(dst, src, imm)) } inst_sshll2_v8h_v16b_i :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .SSHLL2, operand_count = 3, length = 4, ops = {op_v_8h(dst), op_v_16b(src), op_imm(imm, 4), {}, {}}} } inst_sshll2_v4s_v8h_i :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .SSHLL2, operand_count = 3, length = 4, ops = {op_v_4s(dst), op_v_8h(src), op_imm(imm, 4), {}, {}}} } inst_sshll2_v2d_v4s_i :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .SSHLL2, operand_count = 3, length = 4, ops = {op_v_2d(dst), op_v_4s(src), op_imm(imm, 4), {}, {}}} } -emit_sshll2_v8h_v16b_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_sshll2_v8h_v16b_i(dst, src, imm)) } -emit_sshll2_v4s_v8h_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_sshll2_v4s_v8h_i(dst, src, imm)) } -emit_sshll2_v2d_v4s_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_sshll2_v2d_v4s_i(dst, src, imm)) } +emit_sshll2_v8h_v16b_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_sshll2_v8h_v16b_i(dst, src, imm)) } +emit_sshll2_v4s_v8h_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_sshll2_v4s_v8h_i(dst, src, imm)) } +emit_sshll2_v2d_v4s_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_sshll2_v2d_v4s_i(dst, src, imm)) } inst_ushll_v8h_v8b_i :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .USHLL, operand_count = 3, length = 4, ops = {op_v_8h(dst), op_v_8b(src), op_imm(imm, 4), {}, {}}} } inst_ushll_v4s_v4h_i :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .USHLL, operand_count = 3, length = 4, ops = {op_v_4s(dst), op_v_4h(src), op_imm(imm, 4), {}, {}}} } inst_ushll_v2d_v2s_i :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .USHLL, operand_count = 3, length = 4, ops = {op_v_2d(dst), op_v_2s(src), op_imm(imm, 4), {}, {}}} } -emit_ushll_v8h_v8b_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_ushll_v8h_v8b_i(dst, src, imm)) } -emit_ushll_v4s_v4h_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_ushll_v4s_v4h_i(dst, src, imm)) } -emit_ushll_v2d_v2s_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_ushll_v2d_v2s_i(dst, src, imm)) } +emit_ushll_v8h_v8b_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_ushll_v8h_v8b_i(dst, src, imm)) } +emit_ushll_v4s_v4h_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_ushll_v4s_v4h_i(dst, src, imm)) } +emit_ushll_v2d_v2s_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_ushll_v2d_v2s_i(dst, src, imm)) } inst_ushll2_v8h_v16b_i :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .USHLL2, operand_count = 3, length = 4, ops = {op_v_8h(dst), op_v_16b(src), op_imm(imm, 4), {}, {}}} } inst_ushll2_v4s_v8h_i :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .USHLL2, operand_count = 3, length = 4, ops = {op_v_4s(dst), op_v_8h(src), op_imm(imm, 4), {}, {}}} } inst_ushll2_v2d_v4s_i :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .USHLL2, operand_count = 3, length = 4, ops = {op_v_2d(dst), op_v_4s(src), op_imm(imm, 4), {}, {}}} } -emit_ushll2_v8h_v16b_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_ushll2_v8h_v16b_i(dst, src, imm)) } -emit_ushll2_v4s_v8h_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_ushll2_v4s_v8h_i(dst, src, imm)) } -emit_ushll2_v2d_v4s_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_ushll2_v2d_v4s_i(dst, src, imm)) } +emit_ushll2_v8h_v16b_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_ushll2_v8h_v16b_i(dst, src, imm)) } +emit_ushll2_v4s_v8h_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_ushll2_v4s_v8h_i(dst, src, imm)) } +emit_ushll2_v2d_v4s_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_ushll2_v2d_v4s_i(dst, src, imm)) } inst_sxtl_v8h_v8b :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .SXTL, operand_count = 2, length = 4, ops = {op_v_8h(dst), op_v_8b(src), {}, {}, {}}} } inst_sxtl_v4s_v4h :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .SXTL, operand_count = 2, length = 4, ops = {op_v_4s(dst), op_v_4h(src), {}, {}, {}}} } inst_sxtl_v2d_v2s :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .SXTL, operand_count = 2, length = 4, ops = {op_v_2d(dst), op_v_2s(src), {}, {}, {}}} } -emit_sxtl_v8h_v8b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_sxtl_v8h_v8b(dst, src)) } -emit_sxtl_v4s_v4h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_sxtl_v4s_v4h(dst, src)) } -emit_sxtl_v2d_v2s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_sxtl_v2d_v2s(dst, src)) } +emit_sxtl_v8h_v8b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_sxtl_v8h_v8b(dst, src)) } +emit_sxtl_v4s_v4h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_sxtl_v4s_v4h(dst, src)) } +emit_sxtl_v2d_v2s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_sxtl_v2d_v2s(dst, src)) } inst_sxtl2_v8h_v16b :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .SXTL2, operand_count = 2, length = 4, ops = {op_v_8h(dst), op_v_16b(src), {}, {}, {}}} } inst_sxtl2_v4s_v8h :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .SXTL2, operand_count = 2, length = 4, ops = {op_v_4s(dst), op_v_8h(src), {}, {}, {}}} } inst_sxtl2_v2d_v4s :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .SXTL2, operand_count = 2, length = 4, ops = {op_v_2d(dst), op_v_4s(src), {}, {}, {}}} } -emit_sxtl2_v8h_v16b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_sxtl2_v8h_v16b(dst, src)) } -emit_sxtl2_v4s_v8h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_sxtl2_v4s_v8h(dst, src)) } -emit_sxtl2_v2d_v4s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_sxtl2_v2d_v4s(dst, src)) } +emit_sxtl2_v8h_v16b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_sxtl2_v8h_v16b(dst, src)) } +emit_sxtl2_v4s_v8h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_sxtl2_v4s_v8h(dst, src)) } +emit_sxtl2_v2d_v4s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_sxtl2_v2d_v4s(dst, src)) } inst_uxtl_v8h_v8b :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .UXTL, operand_count = 2, length = 4, ops = {op_v_8h(dst), op_v_8b(src), {}, {}, {}}} } inst_uxtl_v4s_v4h :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .UXTL, operand_count = 2, length = 4, ops = {op_v_4s(dst), op_v_4h(src), {}, {}, {}}} } inst_uxtl_v2d_v2s :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .UXTL, operand_count = 2, length = 4, ops = {op_v_2d(dst), op_v_2s(src), {}, {}, {}}} } -emit_uxtl_v8h_v8b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_uxtl_v8h_v8b(dst, src)) } -emit_uxtl_v4s_v4h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_uxtl_v4s_v4h(dst, src)) } -emit_uxtl_v2d_v2s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_uxtl_v2d_v2s(dst, src)) } +emit_uxtl_v8h_v8b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_uxtl_v8h_v8b(dst, src)) } +emit_uxtl_v4s_v4h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_uxtl_v4s_v4h(dst, src)) } +emit_uxtl_v2d_v2s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_uxtl_v2d_v2s(dst, src)) } inst_uxtl2_v8h_v16b :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .UXTL2, operand_count = 2, length = 4, ops = {op_v_8h(dst), op_v_16b(src), {}, {}, {}}} } inst_uxtl2_v4s_v8h :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .UXTL2, operand_count = 2, length = 4, ops = {op_v_4s(dst), op_v_8h(src), {}, {}, {}}} } inst_uxtl2_v2d_v4s :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .UXTL2, operand_count = 2, length = 4, ops = {op_v_2d(dst), op_v_4s(src), {}, {}, {}}} } -emit_uxtl2_v8h_v16b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_uxtl2_v8h_v16b(dst, src)) } -emit_uxtl2_v4s_v8h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_uxtl2_v4s_v8h(dst, src)) } -emit_uxtl2_v2d_v4s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_uxtl2_v2d_v4s(dst, src)) } +emit_uxtl2_v8h_v16b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_uxtl2_v8h_v16b(dst, src)) } +emit_uxtl2_v4s_v8h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_uxtl2_v4s_v8h(dst, src)) } +emit_uxtl2_v2d_v4s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_uxtl2_v2d_v4s(dst, src)) } inst_shrn_v8b_v8h_i :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .SHRN, operand_count = 3, length = 4, ops = {op_v_8b(dst), op_v_8h(src), op_imm(imm, 4), {}, {}}} } inst_shrn_v4h_v4s_i :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .SHRN, operand_count = 3, length = 4, ops = {op_v_4h(dst), op_v_4s(src), op_imm(imm, 4), {}, {}}} } inst_shrn_v2s_v2d_i :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .SHRN, operand_count = 3, length = 4, ops = {op_v_2s(dst), op_v_2d(src), op_imm(imm, 4), {}, {}}} } -emit_shrn_v8b_v8h_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_shrn_v8b_v8h_i(dst, src, imm)) } -emit_shrn_v4h_v4s_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_shrn_v4h_v4s_i(dst, src, imm)) } -emit_shrn_v2s_v2d_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_shrn_v2s_v2d_i(dst, src, imm)) } +emit_shrn_v8b_v8h_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_shrn_v8b_v8h_i(dst, src, imm)) } +emit_shrn_v4h_v4s_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_shrn_v4h_v4s_i(dst, src, imm)) } +emit_shrn_v2s_v2d_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_shrn_v2s_v2d_i(dst, src, imm)) } inst_shrn2_v16b_v8h_i :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .SHRN2, operand_count = 3, length = 4, ops = {op_v_16b(dst), op_v_8h(src), op_imm(imm, 4), {}, {}}} } inst_shrn2_v8h_v4s_i :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .SHRN2, operand_count = 3, length = 4, ops = {op_v_8h(dst), op_v_4s(src), op_imm(imm, 4), {}, {}}} } inst_shrn2_v4s_v2d_i :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .SHRN2, operand_count = 3, length = 4, ops = {op_v_4s(dst), op_v_2d(src), op_imm(imm, 4), {}, {}}} } -emit_shrn2_v16b_v8h_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_shrn2_v16b_v8h_i(dst, src, imm)) } -emit_shrn2_v8h_v4s_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_shrn2_v8h_v4s_i(dst, src, imm)) } -emit_shrn2_v4s_v2d_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_shrn2_v4s_v2d_i(dst, src, imm)) } +emit_shrn2_v16b_v8h_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_shrn2_v16b_v8h_i(dst, src, imm)) } +emit_shrn2_v8h_v4s_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_shrn2_v8h_v4s_i(dst, src, imm)) } +emit_shrn2_v4s_v2d_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_shrn2_v4s_v2d_i(dst, src, imm)) } inst_rshrn_v8b_v8h_i :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .RSHRN, operand_count = 3, length = 4, ops = {op_v_8b(dst), op_v_8h(src), op_imm(imm, 4), {}, {}}} } inst_rshrn_v4h_v4s_i :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .RSHRN, operand_count = 3, length = 4, ops = {op_v_4h(dst), op_v_4s(src), op_imm(imm, 4), {}, {}}} } inst_rshrn_v2s_v2d_i :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .RSHRN, operand_count = 3, length = 4, ops = {op_v_2s(dst), op_v_2d(src), op_imm(imm, 4), {}, {}}} } -emit_rshrn_v8b_v8h_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_rshrn_v8b_v8h_i(dst, src, imm)) } -emit_rshrn_v4h_v4s_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_rshrn_v4h_v4s_i(dst, src, imm)) } -emit_rshrn_v2s_v2d_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_rshrn_v2s_v2d_i(dst, src, imm)) } +emit_rshrn_v8b_v8h_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_rshrn_v8b_v8h_i(dst, src, imm)) } +emit_rshrn_v4h_v4s_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_rshrn_v4h_v4s_i(dst, src, imm)) } +emit_rshrn_v2s_v2d_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_rshrn_v2s_v2d_i(dst, src, imm)) } inst_rshrn2_v16b_v8h_i :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .RSHRN2, operand_count = 3, length = 4, ops = {op_v_16b(dst), op_v_8h(src), op_imm(imm, 4), {}, {}}} } inst_rshrn2_v8h_v4s_i :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .RSHRN2, operand_count = 3, length = 4, ops = {op_v_8h(dst), op_v_4s(src), op_imm(imm, 4), {}, {}}} } inst_rshrn2_v4s_v2d_i :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .RSHRN2, operand_count = 3, length = 4, ops = {op_v_4s(dst), op_v_2d(src), op_imm(imm, 4), {}, {}}} } -emit_rshrn2_v16b_v8h_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_rshrn2_v16b_v8h_i(dst, src, imm)) } -emit_rshrn2_v8h_v4s_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_rshrn2_v8h_v4s_i(dst, src, imm)) } -emit_rshrn2_v4s_v2d_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_rshrn2_v4s_v2d_i(dst, src, imm)) } +emit_rshrn2_v16b_v8h_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_rshrn2_v16b_v8h_i(dst, src, imm)) } +emit_rshrn2_v8h_v4s_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_rshrn2_v8h_v4s_i(dst, src, imm)) } +emit_rshrn2_v4s_v2d_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_rshrn2_v4s_v2d_i(dst, src, imm)) } inst_sqshrn_v8b_v8h_i :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .SQSHRN, operand_count = 3, length = 4, ops = {op_v_8b(dst), op_v_8h(src), op_imm(imm, 4), {}, {}}} } inst_sqshrn_v4h_v4s_i :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .SQSHRN, operand_count = 3, length = 4, ops = {op_v_4h(dst), op_v_4s(src), op_imm(imm, 4), {}, {}}} } inst_sqshrn_v2s_v2d_i :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .SQSHRN, operand_count = 3, length = 4, ops = {op_v_2s(dst), op_v_2d(src), op_imm(imm, 4), {}, {}}} } -emit_sqshrn_v8b_v8h_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_sqshrn_v8b_v8h_i(dst, src, imm)) } -emit_sqshrn_v4h_v4s_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_sqshrn_v4h_v4s_i(dst, src, imm)) } -emit_sqshrn_v2s_v2d_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_sqshrn_v2s_v2d_i(dst, src, imm)) } +emit_sqshrn_v8b_v8h_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_sqshrn_v8b_v8h_i(dst, src, imm)) } +emit_sqshrn_v4h_v4s_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_sqshrn_v4h_v4s_i(dst, src, imm)) } +emit_sqshrn_v2s_v2d_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_sqshrn_v2s_v2d_i(dst, src, imm)) } inst_sqshrn2_v16b_v8h_i :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .SQSHRN2, operand_count = 3, length = 4, ops = {op_v_16b(dst), op_v_8h(src), op_imm(imm, 4), {}, {}}} } inst_sqshrn2_v8h_v4s_i :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .SQSHRN2, operand_count = 3, length = 4, ops = {op_v_8h(dst), op_v_4s(src), op_imm(imm, 4), {}, {}}} } inst_sqshrn2_v4s_v2d_i :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .SQSHRN2, operand_count = 3, length = 4, ops = {op_v_4s(dst), op_v_2d(src), op_imm(imm, 4), {}, {}}} } -emit_sqshrn2_v16b_v8h_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_sqshrn2_v16b_v8h_i(dst, src, imm)) } -emit_sqshrn2_v8h_v4s_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_sqshrn2_v8h_v4s_i(dst, src, imm)) } -emit_sqshrn2_v4s_v2d_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_sqshrn2_v4s_v2d_i(dst, src, imm)) } +emit_sqshrn2_v16b_v8h_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_sqshrn2_v16b_v8h_i(dst, src, imm)) } +emit_sqshrn2_v8h_v4s_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_sqshrn2_v8h_v4s_i(dst, src, imm)) } +emit_sqshrn2_v4s_v2d_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_sqshrn2_v4s_v2d_i(dst, src, imm)) } inst_uqshrn_v8b_v8h_i :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .UQSHRN, operand_count = 3, length = 4, ops = {op_v_8b(dst), op_v_8h(src), op_imm(imm, 4), {}, {}}} } inst_uqshrn_v4h_v4s_i :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .UQSHRN, operand_count = 3, length = 4, ops = {op_v_4h(dst), op_v_4s(src), op_imm(imm, 4), {}, {}}} } inst_uqshrn_v2s_v2d_i :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .UQSHRN, operand_count = 3, length = 4, ops = {op_v_2s(dst), op_v_2d(src), op_imm(imm, 4), {}, {}}} } -emit_uqshrn_v8b_v8h_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_uqshrn_v8b_v8h_i(dst, src, imm)) } -emit_uqshrn_v4h_v4s_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_uqshrn_v4h_v4s_i(dst, src, imm)) } -emit_uqshrn_v2s_v2d_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_uqshrn_v2s_v2d_i(dst, src, imm)) } +emit_uqshrn_v8b_v8h_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_uqshrn_v8b_v8h_i(dst, src, imm)) } +emit_uqshrn_v4h_v4s_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_uqshrn_v4h_v4s_i(dst, src, imm)) } +emit_uqshrn_v2s_v2d_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_uqshrn_v2s_v2d_i(dst, src, imm)) } inst_uqshrn2_v16b_v8h_i :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .UQSHRN2, operand_count = 3, length = 4, ops = {op_v_16b(dst), op_v_8h(src), op_imm(imm, 4), {}, {}}} } inst_uqshrn2_v8h_v4s_i :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .UQSHRN2, operand_count = 3, length = 4, ops = {op_v_8h(dst), op_v_4s(src), op_imm(imm, 4), {}, {}}} } inst_uqshrn2_v4s_v2d_i :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .UQSHRN2, operand_count = 3, length = 4, ops = {op_v_4s(dst), op_v_2d(src), op_imm(imm, 4), {}, {}}} } -emit_uqshrn2_v16b_v8h_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_uqshrn2_v16b_v8h_i(dst, src, imm)) } -emit_uqshrn2_v8h_v4s_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_uqshrn2_v8h_v4s_i(dst, src, imm)) } -emit_uqshrn2_v4s_v2d_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_uqshrn2_v4s_v2d_i(dst, src, imm)) } +emit_uqshrn2_v16b_v8h_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_uqshrn2_v16b_v8h_i(dst, src, imm)) } +emit_uqshrn2_v8h_v4s_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_uqshrn2_v8h_v4s_i(dst, src, imm)) } +emit_uqshrn2_v4s_v2d_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_uqshrn2_v4s_v2d_i(dst, src, imm)) } inst_sqrshrn_v8b_v8h_i :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .SQRSHRN, operand_count = 3, length = 4, ops = {op_v_8b(dst), op_v_8h(src), op_imm(imm, 4), {}, {}}} } inst_sqrshrn_v4h_v4s_i :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .SQRSHRN, operand_count = 3, length = 4, ops = {op_v_4h(dst), op_v_4s(src), op_imm(imm, 4), {}, {}}} } inst_sqrshrn_v2s_v2d_i :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .SQRSHRN, operand_count = 3, length = 4, ops = {op_v_2s(dst), op_v_2d(src), op_imm(imm, 4), {}, {}}} } -emit_sqrshrn_v8b_v8h_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_sqrshrn_v8b_v8h_i(dst, src, imm)) } -emit_sqrshrn_v4h_v4s_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_sqrshrn_v4h_v4s_i(dst, src, imm)) } -emit_sqrshrn_v2s_v2d_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_sqrshrn_v2s_v2d_i(dst, src, imm)) } +emit_sqrshrn_v8b_v8h_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_sqrshrn_v8b_v8h_i(dst, src, imm)) } +emit_sqrshrn_v4h_v4s_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_sqrshrn_v4h_v4s_i(dst, src, imm)) } +emit_sqrshrn_v2s_v2d_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_sqrshrn_v2s_v2d_i(dst, src, imm)) } inst_sqrshrn2_v16b_v8h_i :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .SQRSHRN2, operand_count = 3, length = 4, ops = {op_v_16b(dst), op_v_8h(src), op_imm(imm, 4), {}, {}}} } inst_sqrshrn2_v8h_v4s_i :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .SQRSHRN2, operand_count = 3, length = 4, ops = {op_v_8h(dst), op_v_4s(src), op_imm(imm, 4), {}, {}}} } inst_sqrshrn2_v4s_v2d_i :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .SQRSHRN2, operand_count = 3, length = 4, ops = {op_v_4s(dst), op_v_2d(src), op_imm(imm, 4), {}, {}}} } -emit_sqrshrn2_v16b_v8h_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_sqrshrn2_v16b_v8h_i(dst, src, imm)) } -emit_sqrshrn2_v8h_v4s_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_sqrshrn2_v8h_v4s_i(dst, src, imm)) } -emit_sqrshrn2_v4s_v2d_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_sqrshrn2_v4s_v2d_i(dst, src, imm)) } +emit_sqrshrn2_v16b_v8h_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_sqrshrn2_v16b_v8h_i(dst, src, imm)) } +emit_sqrshrn2_v8h_v4s_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_sqrshrn2_v8h_v4s_i(dst, src, imm)) } +emit_sqrshrn2_v4s_v2d_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_sqrshrn2_v4s_v2d_i(dst, src, imm)) } inst_uqrshrn_v8b_v8h_i :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .UQRSHRN, operand_count = 3, length = 4, ops = {op_v_8b(dst), op_v_8h(src), op_imm(imm, 4), {}, {}}} } inst_uqrshrn_v4h_v4s_i :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .UQRSHRN, operand_count = 3, length = 4, ops = {op_v_4h(dst), op_v_4s(src), op_imm(imm, 4), {}, {}}} } inst_uqrshrn_v2s_v2d_i :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .UQRSHRN, operand_count = 3, length = 4, ops = {op_v_2s(dst), op_v_2d(src), op_imm(imm, 4), {}, {}}} } -emit_uqrshrn_v8b_v8h_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_uqrshrn_v8b_v8h_i(dst, src, imm)) } -emit_uqrshrn_v4h_v4s_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_uqrshrn_v4h_v4s_i(dst, src, imm)) } -emit_uqrshrn_v2s_v2d_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_uqrshrn_v2s_v2d_i(dst, src, imm)) } +emit_uqrshrn_v8b_v8h_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_uqrshrn_v8b_v8h_i(dst, src, imm)) } +emit_uqrshrn_v4h_v4s_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_uqrshrn_v4h_v4s_i(dst, src, imm)) } +emit_uqrshrn_v2s_v2d_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_uqrshrn_v2s_v2d_i(dst, src, imm)) } inst_uqrshrn2_v16b_v8h_i :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .UQRSHRN2, operand_count = 3, length = 4, ops = {op_v_16b(dst), op_v_8h(src), op_imm(imm, 4), {}, {}}} } inst_uqrshrn2_v8h_v4s_i :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .UQRSHRN2, operand_count = 3, length = 4, ops = {op_v_8h(dst), op_v_4s(src), op_imm(imm, 4), {}, {}}} } inst_uqrshrn2_v4s_v2d_i :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .UQRSHRN2, operand_count = 3, length = 4, ops = {op_v_4s(dst), op_v_2d(src), op_imm(imm, 4), {}, {}}} } -emit_uqrshrn2_v16b_v8h_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_uqrshrn2_v16b_v8h_i(dst, src, imm)) } -emit_uqrshrn2_v8h_v4s_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_uqrshrn2_v8h_v4s_i(dst, src, imm)) } -emit_uqrshrn2_v4s_v2d_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_uqrshrn2_v4s_v2d_i(dst, src, imm)) } +emit_uqrshrn2_v16b_v8h_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_uqrshrn2_v16b_v8h_i(dst, src, imm)) } +emit_uqrshrn2_v8h_v4s_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_uqrshrn2_v8h_v4s_i(dst, src, imm)) } +emit_uqrshrn2_v4s_v2d_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_uqrshrn2_v4s_v2d_i(dst, src, imm)) } inst_sqshrun_v8b_v8h_i :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .SQSHRUN, operand_count = 3, length = 4, ops = {op_v_8b(dst), op_v_8h(src), op_imm(imm, 4), {}, {}}} } inst_sqshrun_v4h_v4s_i :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .SQSHRUN, operand_count = 3, length = 4, ops = {op_v_4h(dst), op_v_4s(src), op_imm(imm, 4), {}, {}}} } inst_sqshrun_v2s_v2d_i :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .SQSHRUN, operand_count = 3, length = 4, ops = {op_v_2s(dst), op_v_2d(src), op_imm(imm, 4), {}, {}}} } -emit_sqshrun_v8b_v8h_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_sqshrun_v8b_v8h_i(dst, src, imm)) } -emit_sqshrun_v4h_v4s_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_sqshrun_v4h_v4s_i(dst, src, imm)) } -emit_sqshrun_v2s_v2d_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_sqshrun_v2s_v2d_i(dst, src, imm)) } +emit_sqshrun_v8b_v8h_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_sqshrun_v8b_v8h_i(dst, src, imm)) } +emit_sqshrun_v4h_v4s_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_sqshrun_v4h_v4s_i(dst, src, imm)) } +emit_sqshrun_v2s_v2d_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_sqshrun_v2s_v2d_i(dst, src, imm)) } inst_sqshrun2_v16b_v8h_i :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .SQSHRUN2, operand_count = 3, length = 4, ops = {op_v_16b(dst), op_v_8h(src), op_imm(imm, 4), {}, {}}} } inst_sqshrun2_v8h_v4s_i :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .SQSHRUN2, operand_count = 3, length = 4, ops = {op_v_8h(dst), op_v_4s(src), op_imm(imm, 4), {}, {}}} } inst_sqshrun2_v4s_v2d_i :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .SQSHRUN2, operand_count = 3, length = 4, ops = {op_v_4s(dst), op_v_2d(src), op_imm(imm, 4), {}, {}}} } -emit_sqshrun2_v16b_v8h_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_sqshrun2_v16b_v8h_i(dst, src, imm)) } -emit_sqshrun2_v8h_v4s_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_sqshrun2_v8h_v4s_i(dst, src, imm)) } -emit_sqshrun2_v4s_v2d_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_sqshrun2_v4s_v2d_i(dst, src, imm)) } +emit_sqshrun2_v16b_v8h_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_sqshrun2_v16b_v8h_i(dst, src, imm)) } +emit_sqshrun2_v8h_v4s_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_sqshrun2_v8h_v4s_i(dst, src, imm)) } +emit_sqshrun2_v4s_v2d_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_sqshrun2_v4s_v2d_i(dst, src, imm)) } inst_sqrshrun_v8b_v8h_i :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .SQRSHRUN, operand_count = 3, length = 4, ops = {op_v_8b(dst), op_v_8h(src), op_imm(imm, 4), {}, {}}} } inst_sqrshrun_v4h_v4s_i :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .SQRSHRUN, operand_count = 3, length = 4, ops = {op_v_4h(dst), op_v_4s(src), op_imm(imm, 4), {}, {}}} } inst_sqrshrun_v2s_v2d_i :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .SQRSHRUN, operand_count = 3, length = 4, ops = {op_v_2s(dst), op_v_2d(src), op_imm(imm, 4), {}, {}}} } -emit_sqrshrun_v8b_v8h_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_sqrshrun_v8b_v8h_i(dst, src, imm)) } -emit_sqrshrun_v4h_v4s_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_sqrshrun_v4h_v4s_i(dst, src, imm)) } -emit_sqrshrun_v2s_v2d_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_sqrshrun_v2s_v2d_i(dst, src, imm)) } +emit_sqrshrun_v8b_v8h_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_sqrshrun_v8b_v8h_i(dst, src, imm)) } +emit_sqrshrun_v4h_v4s_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_sqrshrun_v4h_v4s_i(dst, src, imm)) } +emit_sqrshrun_v2s_v2d_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_sqrshrun_v2s_v2d_i(dst, src, imm)) } inst_sqrshrun2_v16b_v8h_i :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .SQRSHRUN2, operand_count = 3, length = 4, ops = {op_v_16b(dst), op_v_8h(src), op_imm(imm, 4), {}, {}}} } inst_sqrshrun2_v8h_v4s_i :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .SQRSHRUN2, operand_count = 3, length = 4, ops = {op_v_8h(dst), op_v_4s(src), op_imm(imm, 4), {}, {}}} } inst_sqrshrun2_v4s_v2d_i :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .SQRSHRUN2, operand_count = 3, length = 4, ops = {op_v_4s(dst), op_v_2d(src), op_imm(imm, 4), {}, {}}} } -emit_sqrshrun2_v16b_v8h_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_sqrshrun2_v16b_v8h_i(dst, src, imm)) } -emit_sqrshrun2_v8h_v4s_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_sqrshrun2_v8h_v4s_i(dst, src, imm)) } -emit_sqrshrun2_v4s_v2d_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_sqrshrun2_v4s_v2d_i(dst, src, imm)) } +emit_sqrshrun2_v16b_v8h_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_sqrshrun2_v16b_v8h_i(dst, src, imm)) } +emit_sqrshrun2_v8h_v4s_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_sqrshrun2_v8h_v4s_i(dst, src, imm)) } +emit_sqrshrun2_v4s_v2d_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_sqrshrun2_v4s_v2d_i(dst, src, imm)) } inst_dup_v8b_veb_i :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .DUP, operand_count = 3, length = 4, ops = {op_v_8b(dst), op_v_elem_b(src), op_lane_index(imm), {}, {}}} } inst_dup_v16b_veb_i :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .DUP, operand_count = 3, length = 4, ops = {op_v_16b(dst), op_v_elem_b(src), op_lane_index(imm), {}, {}}} } inst_dup_v4h_veh_i :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .DUP, operand_count = 3, length = 4, ops = {op_v_4h(dst), op_v_elem_h(src), op_lane_index(imm), {}, {}}} } @@ -3103,24 +3107,24 @@ inst_dup_zb_r :: #force_inline proc "contextless" (rz: u8, src: inst_dup_zh_r :: #force_inline proc "contextless" (rz: u8, src: Register) -> Instruction { return Instruction{mnemonic = .DUP, operand_count = 2, length = 4, ops = {op_z_h(rz), op_reg(src), {}, {}, {}}} } inst_dup_zs_r :: #force_inline proc "contextless" (rz: u8, src: Register) -> Instruction { return Instruction{mnemonic = .DUP, operand_count = 2, length = 4, ops = {op_z_s(rz), op_reg(src), {}, {}, {}}} } inst_dup_zd_r :: #force_inline proc "contextless" (rz: u8, src: Register) -> Instruction { return Instruction{mnemonic = .DUP, operand_count = 2, length = 4, ops = {op_z_d(rz), op_reg(src), {}, {}, {}}} } -emit_dup_v8b_veb_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_dup_v8b_veb_i(dst, src, imm)) } -emit_dup_v16b_veb_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_dup_v16b_veb_i(dst, src, imm)) } -emit_dup_v4h_veh_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_dup_v4h_veh_i(dst, src, imm)) } -emit_dup_v8h_veh_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_dup_v8h_veh_i(dst, src, imm)) } -emit_dup_v2s_ves_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_dup_v2s_ves_i(dst, src, imm)) } -emit_dup_v4s_ves_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_dup_v4s_ves_i(dst, src, imm)) } -emit_dup_v2d_ved_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_dup_v2d_ved_i(dst, src, imm)) } -emit_dup_v8b_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_dup_v8b_r(dst, src)) } -emit_dup_v16b_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_dup_v16b_r(dst, src)) } -emit_dup_v4h_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_dup_v4h_r(dst, src)) } -emit_dup_v8h_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_dup_v8h_r(dst, src)) } -emit_dup_v2s_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_dup_v2s_r(dst, src)) } -emit_dup_v4s_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_dup_v4s_r(dst, src)) } -emit_dup_v2d_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_dup_v2d_r(dst, src)) } -emit_dup_zb_r :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, src: Register) { append(instructions, inst_dup_zb_r(rz, src)) } -emit_dup_zh_r :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, src: Register) { append(instructions, inst_dup_zh_r(rz, src)) } -emit_dup_zs_r :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, src: Register) { append(instructions, inst_dup_zs_r(rz, src)) } -emit_dup_zd_r :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, src: Register) { append(instructions, inst_dup_zd_r(rz, src)) } +emit_dup_v8b_veb_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_dup_v8b_veb_i(dst, src, imm)) } +emit_dup_v16b_veb_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_dup_v16b_veb_i(dst, src, imm)) } +emit_dup_v4h_veh_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_dup_v4h_veh_i(dst, src, imm)) } +emit_dup_v8h_veh_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_dup_v8h_veh_i(dst, src, imm)) } +emit_dup_v2s_ves_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_dup_v2s_ves_i(dst, src, imm)) } +emit_dup_v4s_ves_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_dup_v4s_ves_i(dst, src, imm)) } +emit_dup_v2d_ved_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_dup_v2d_ved_i(dst, src, imm)) } +emit_dup_v8b_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_dup_v8b_r(dst, src)) } +emit_dup_v16b_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_dup_v16b_r(dst, src)) } +emit_dup_v4h_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_dup_v4h_r(dst, src)) } +emit_dup_v8h_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_dup_v8h_r(dst, src)) } +emit_dup_v2s_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_dup_v2s_r(dst, src)) } +emit_dup_v4s_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_dup_v4s_r(dst, src)) } +emit_dup_v2d_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_dup_v2d_r(dst, src)) } +emit_dup_zb_r :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, src: Register) { append_elem(instructions, inst_dup_zb_r(rz, src)) } +emit_dup_zh_r :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, src: Register) { append_elem(instructions, inst_dup_zh_r(rz, src)) } +emit_dup_zs_r :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, src: Register) { append_elem(instructions, inst_dup_zs_r(rz, src)) } +emit_dup_zd_r :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, src: Register) { append_elem(instructions, inst_dup_zd_r(rz, src)) } inst_ins_veb_i_veb_i :: #force_inline proc "contextless" (dst: Register, imm: i64, src: Register, imm2: i64) -> Instruction { return Instruction{mnemonic = .INS, operand_count = 4, length = 4, ops = {op_v_elem_b(dst), op_lane_index(imm), op_v_elem_b(src), op_lane_index(imm2), {}}} } inst_ins_veh_i_veh_i :: #force_inline proc "contextless" (dst: Register, imm: i64, src: Register, imm2: i64) -> Instruction { return Instruction{mnemonic = .INS, operand_count = 4, length = 4, ops = {op_v_elem_h(dst), op_lane_index(imm), op_v_elem_h(src), op_lane_index(imm2), {}}} } inst_ins_ves_i_ves_i :: #force_inline proc "contextless" (dst: Register, imm: i64, src: Register, imm2: i64) -> Instruction { return Instruction{mnemonic = .INS, operand_count = 4, length = 4, ops = {op_v_elem_s(dst), op_lane_index(imm), op_v_elem_s(src), op_lane_index(imm2), {}}} } @@ -3129,14 +3133,14 @@ inst_ins_veb_i_r :: #force_inline proc "contextless" (dst: Register inst_ins_veh_i_r :: #force_inline proc "contextless" (dst: Register, imm: i64, src: Register) -> Instruction { return Instruction{mnemonic = .INS, operand_count = 3, length = 4, ops = {op_v_elem_h(dst), op_lane_index(imm), op_reg(src), {}, {}}} } inst_ins_ves_i_r :: #force_inline proc "contextless" (dst: Register, imm: i64, src: Register) -> Instruction { return Instruction{mnemonic = .INS, operand_count = 3, length = 4, ops = {op_v_elem_s(dst), op_lane_index(imm), op_reg(src), {}, {}}} } inst_ins_ved_i_r :: #force_inline proc "contextless" (dst: Register, imm: i64, src: Register) -> Instruction { return Instruction{mnemonic = .INS, operand_count = 3, length = 4, ops = {op_v_elem_d(dst), op_lane_index(imm), op_reg(src), {}, {}}} } -emit_ins_veb_i_veb_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64, src: Register, imm2: i64) { append(instructions, inst_ins_veb_i_veb_i(dst, imm, src, imm2)) } -emit_ins_veh_i_veh_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64, src: Register, imm2: i64) { append(instructions, inst_ins_veh_i_veh_i(dst, imm, src, imm2)) } -emit_ins_ves_i_ves_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64, src: Register, imm2: i64) { append(instructions, inst_ins_ves_i_ves_i(dst, imm, src, imm2)) } -emit_ins_ved_i_ved_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64, src: Register, imm2: i64) { append(instructions, inst_ins_ved_i_ved_i(dst, imm, src, imm2)) } -emit_ins_veb_i_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64, src: Register) { append(instructions, inst_ins_veb_i_r(dst, imm, src)) } -emit_ins_veh_i_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64, src: Register) { append(instructions, inst_ins_veh_i_r(dst, imm, src)) } -emit_ins_ves_i_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64, src: Register) { append(instructions, inst_ins_ves_i_r(dst, imm, src)) } -emit_ins_ved_i_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64, src: Register) { append(instructions, inst_ins_ved_i_r(dst, imm, src)) } +emit_ins_veb_i_veb_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64, src: Register, imm2: i64) { append_elem(instructions, inst_ins_veb_i_veb_i(dst, imm, src, imm2)) } +emit_ins_veh_i_veh_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64, src: Register, imm2: i64) { append_elem(instructions, inst_ins_veh_i_veh_i(dst, imm, src, imm2)) } +emit_ins_ves_i_ves_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64, src: Register, imm2: i64) { append_elem(instructions, inst_ins_ves_i_ves_i(dst, imm, src, imm2)) } +emit_ins_ved_i_ved_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64, src: Register, imm2: i64) { append_elem(instructions, inst_ins_ved_i_ved_i(dst, imm, src, imm2)) } +emit_ins_veb_i_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64, src: Register) { append_elem(instructions, inst_ins_veb_i_r(dst, imm, src)) } +emit_ins_veh_i_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64, src: Register) { append_elem(instructions, inst_ins_veh_i_r(dst, imm, src)) } +emit_ins_ves_i_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64, src: Register) { append_elem(instructions, inst_ins_ves_i_r(dst, imm, src)) } +emit_ins_ved_i_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64, src: Register) { append_elem(instructions, inst_ins_ved_i_r(dst, imm, src)) } inst_mov_v8b_v8b :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .MOV, operand_count = 2, length = 4, ops = {op_v_8b(dst), op_v_8b(src), {}, {}, {}}} } inst_mov_v16b_v16b :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .MOV, operand_count = 2, length = 4, ops = {op_v_16b(dst), op_v_16b(src), {}, {}, {}}} } inst_mov_zb_p_zb :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8) -> Instruction { return Instruction{mnemonic = .MOV, operand_count = 3, length = 4, ops = {op_z_b(rz), op_reg(Register(REG_P | (u16(rz2) & 0xF))), op_z_b(rz3), {}, {}}} } @@ -3147,22 +3151,46 @@ inst_mov_pb_p_p :: #force_inline proc "contextless" (rz: u8, rz2: inst_mov_pb_p :: #force_inline proc "contextless" (rz: u8, rz2: u8) -> Instruction { return Instruction{mnemonic = .MOV, operand_count = 2, length = 4, ops = {op_reg(Register(REG_P | (u16(rz) & 0xF))), op_reg(Register(REG_P | (u16(rz2) & 0xF))), {}, {}, {}}} } inst_mov_r_r :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return inst_r_r(.MOV, dst, src) } inst_mov_r_i :: #force_inline proc "contextless" (dst: Register, imm: i64) -> Instruction { return inst_r_i(.MOV, dst, imm) } -emit_mov_v8b_v8b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_mov_v8b_v8b(dst, src)) } -emit_mov_v16b_v16b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_mov_v16b_v16b(dst, src)) } -emit_mov_zb_p_zb :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append(instructions, inst_mov_zb_p_zb(rz, rz2, rz3)) } -emit_mov_zh_p_zh :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append(instructions, inst_mov_zh_p_zh(rz, rz2, rz3)) } -emit_mov_zs_p_zs :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append(instructions, inst_mov_zs_p_zs(rz, rz2, rz3)) } -emit_mov_zd_p_zd :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append(instructions, inst_mov_zd_p_zd(rz, rz2, rz3)) } -emit_mov_pb_p_p :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append(instructions, inst_mov_pb_p_p(rz, rz2, rz3)) } -emit_mov_pb_p :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8) { append(instructions, inst_mov_pb_p(rz, rz2)) } -emit_mov_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_mov_r_r(dst, src)) } -emit_mov_r_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64) { append(instructions, inst_mov_r_i(dst, imm)) } +inst_mov_r_veb :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .MOV, operand_count = 2, length = 4, ops = {op_reg(dst), op_v_elem_b(src), {}, {}, {}}} } +inst_mov_r_veh :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .MOV, operand_count = 2, length = 4, ops = {op_reg(dst), op_v_elem_h(src), {}, {}, {}}} } +inst_mov_r_ves :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .MOV, operand_count = 2, length = 4, ops = {op_reg(dst), op_v_elem_s(src), {}, {}, {}}} } +inst_mov_r_ved :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .MOV, operand_count = 2, length = 4, ops = {op_reg(dst), op_v_elem_d(src), {}, {}, {}}} } +inst_mov_veb_r :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .MOV, operand_count = 2, length = 4, ops = {op_v_elem_b(dst), op_reg(src), {}, {}, {}}} } +inst_mov_veh_r :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .MOV, operand_count = 2, length = 4, ops = {op_v_elem_h(dst), op_reg(src), {}, {}, {}}} } +inst_mov_ves_r :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .MOV, operand_count = 2, length = 4, ops = {op_v_elem_s(dst), op_reg(src), {}, {}, {}}} } +inst_mov_ved_r :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .MOV, operand_count = 2, length = 4, ops = {op_v_elem_d(dst), op_reg(src), {}, {}, {}}} } +inst_mov_veb_veb :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .MOV, operand_count = 2, length = 4, ops = {op_v_elem_b(dst), op_v_elem_b(src), {}, {}, {}}} } +inst_mov_veh_veh :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .MOV, operand_count = 2, length = 4, ops = {op_v_elem_h(dst), op_v_elem_h(src), {}, {}, {}}} } +inst_mov_ves_ves :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .MOV, operand_count = 2, length = 4, ops = {op_v_elem_s(dst), op_v_elem_s(src), {}, {}, {}}} } +inst_mov_ved_ved :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .MOV, operand_count = 2, length = 4, ops = {op_v_elem_d(dst), op_v_elem_d(src), {}, {}, {}}} } +emit_mov_v8b_v8b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_mov_v8b_v8b(dst, src)) } +emit_mov_v16b_v16b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_mov_v16b_v16b(dst, src)) } +emit_mov_zb_p_zb :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append_elem(instructions, inst_mov_zb_p_zb(rz, rz2, rz3)) } +emit_mov_zh_p_zh :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append_elem(instructions, inst_mov_zh_p_zh(rz, rz2, rz3)) } +emit_mov_zs_p_zs :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append_elem(instructions, inst_mov_zs_p_zs(rz, rz2, rz3)) } +emit_mov_zd_p_zd :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append_elem(instructions, inst_mov_zd_p_zd(rz, rz2, rz3)) } +emit_mov_pb_p_p :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append_elem(instructions, inst_mov_pb_p_p(rz, rz2, rz3)) } +emit_mov_pb_p :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8) { append_elem(instructions, inst_mov_pb_p(rz, rz2)) } +emit_mov_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_mov_r_r(dst, src)) } +emit_mov_r_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64) { append_elem(instructions, inst_mov_r_i(dst, imm)) } +emit_mov_r_veb :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_mov_r_veb(dst, src)) } +emit_mov_r_veh :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_mov_r_veh(dst, src)) } +emit_mov_r_ves :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_mov_r_ves(dst, src)) } +emit_mov_r_ved :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_mov_r_ved(dst, src)) } +emit_mov_veb_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_mov_veb_r(dst, src)) } +emit_mov_veh_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_mov_veh_r(dst, src)) } +emit_mov_ves_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_mov_ves_r(dst, src)) } +emit_mov_ved_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_mov_ved_r(dst, src)) } +emit_mov_veb_veb :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_mov_veb_veb(dst, src)) } +emit_mov_veh_veh :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_mov_veh_veh(dst, src)) } +emit_mov_ves_ves :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_mov_ves_ves(dst, src)) } +emit_mov_ved_ved :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_mov_ved_ved(dst, src)) } inst_ext_v8b_v8b_v8b_i :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .EXT, operand_count = 4, length = 4, ops = {op_v_8b(dst), op_v_8b(src), op_v_8b(src2), op_imm(imm, 4), {}}} } inst_ext_v16b_v16b_v16b_i :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .EXT, operand_count = 4, length = 4, ops = {op_v_16b(dst), op_v_16b(src), op_v_16b(src2), op_imm(imm, 4), {}}} } inst_ext_zb_zb_zb_i :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8, imm: i64) -> Instruction { return Instruction{mnemonic = .EXT, operand_count = 4, length = 4, ops = {op_z_b(rz), op_z_b(rz2), op_z_b(rz3), op_imm(imm, 4), {}}} } -emit_ext_v8b_v8b_v8b_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, imm: i64) { append(instructions, inst_ext_v8b_v8b_v8b_i(dst, src, src2, imm)) } -emit_ext_v16b_v16b_v16b_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, imm: i64) { append(instructions, inst_ext_v16b_v16b_v16b_i(dst, src, src2, imm)) } -emit_ext_zb_zb_zb_i :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, imm: i64) { append(instructions, inst_ext_zb_zb_zb_i(rz, rz2, rz3, imm)) } +emit_ext_v8b_v8b_v8b_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, imm: i64) { append_elem(instructions, inst_ext_v8b_v8b_v8b_i(dst, src, src2, imm)) } +emit_ext_v16b_v16b_v16b_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, imm: i64) { append_elem(instructions, inst_ext_v16b_v16b_v16b_i(dst, src, src2, imm)) } +emit_ext_zb_zb_zb_i :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, imm: i64) { append_elem(instructions, inst_ext_zb_zb_zb_i(rz, rz2, rz3, imm)) } inst_tbl_v8b_v16b_v8b :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .TBL, operand_count = 3, length = 4, ops = {op_v_8b(dst), op_v_list(src, VSHAPE_16B, 1), op_v_8b(src2), {}, {}}} } inst_tbl_v16b_v16b_v16b :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .TBL, operand_count = 3, length = 4, ops = {op_v_16b(dst), op_v_list(src, VSHAPE_16B, 1), op_v_16b(src2), {}, {}}} } inst_tbl_zb_zl1b_zb :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8) -> Instruction { return Instruction{mnemonic = .TBL, operand_count = 3, length = 4, ops = {op_z_b(rz), op_v_list(Register(REG_Z | (u16(rz2) & 0x1F)), ZSHAPE_B, 1), op_z_b(rz3), {}, {}}} } @@ -3170,19 +3198,19 @@ inst_tbl_zh_zl1h_zh :: #force_inline proc "contextless" (rz: u8, rz2: inst_tbl_zs_zl1s_zs :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8) -> Instruction { return Instruction{mnemonic = .TBL, operand_count = 3, length = 4, ops = {op_z_s(rz), op_v_list(Register(REG_Z | (u16(rz2) & 0x1F)), ZSHAPE_S, 1), op_z_s(rz3), {}, {}}} } inst_tbl_zd_zl1d_zd :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8) -> Instruction { return Instruction{mnemonic = .TBL, operand_count = 3, length = 4, ops = {op_z_d(rz), op_v_list(Register(REG_Z | (u16(rz2) & 0x1F)), ZSHAPE_D, 1), op_z_d(rz3), {}, {}}} } inst_tbl_zb_zl2b_zb :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8) -> Instruction { return Instruction{mnemonic = .TBL, operand_count = 3, length = 4, ops = {op_z_b(rz), op_v_list(Register(REG_Z | (u16(rz2) & 0x1F)), ZSHAPE_B, 2), op_z_b(rz3), {}, {}}} } -emit_tbl_v8b_v16b_v8b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_tbl_v8b_v16b_v8b(dst, src, src2)) } -emit_tbl_v16b_v16b_v16b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_tbl_v16b_v16b_v16b(dst, src, src2)) } -emit_tbl_zb_zl1b_zb :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append(instructions, inst_tbl_zb_zl1b_zb(rz, rz2, rz3)) } -emit_tbl_zh_zl1h_zh :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append(instructions, inst_tbl_zh_zl1h_zh(rz, rz2, rz3)) } -emit_tbl_zs_zl1s_zs :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append(instructions, inst_tbl_zs_zl1s_zs(rz, rz2, rz3)) } -emit_tbl_zd_zl1d_zd :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append(instructions, inst_tbl_zd_zl1d_zd(rz, rz2, rz3)) } -emit_tbl_zb_zl2b_zb :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append(instructions, inst_tbl_zb_zl2b_zb(rz, rz2, rz3)) } +emit_tbl_v8b_v16b_v8b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_tbl_v8b_v16b_v8b(dst, src, src2)) } +emit_tbl_v16b_v16b_v16b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_tbl_v16b_v16b_v16b(dst, src, src2)) } +emit_tbl_zb_zl1b_zb :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append_elem(instructions, inst_tbl_zb_zl1b_zb(rz, rz2, rz3)) } +emit_tbl_zh_zl1h_zh :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append_elem(instructions, inst_tbl_zh_zl1h_zh(rz, rz2, rz3)) } +emit_tbl_zs_zl1s_zs :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append_elem(instructions, inst_tbl_zs_zl1s_zs(rz, rz2, rz3)) } +emit_tbl_zd_zl1d_zd :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append_elem(instructions, inst_tbl_zd_zl1d_zd(rz, rz2, rz3)) } +emit_tbl_zb_zl2b_zb :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append_elem(instructions, inst_tbl_zb_zl2b_zb(rz, rz2, rz3)) } inst_tbx_v8b_v16b_v8b :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .TBX, operand_count = 3, length = 4, ops = {op_v_8b(dst), op_v_list(src, VSHAPE_16B, 1), op_v_8b(src2), {}, {}}} } inst_tbx_v16b_v16b_v16b :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .TBX, operand_count = 3, length = 4, ops = {op_v_16b(dst), op_v_list(src, VSHAPE_16B, 1), op_v_16b(src2), {}, {}}} } inst_tbx_zb_zb_zb :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8) -> Instruction { return Instruction{mnemonic = .TBX, operand_count = 3, length = 4, ops = {op_z_b(rz), op_z_b(rz2), op_z_b(rz3), {}, {}}} } -emit_tbx_v8b_v16b_v8b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_tbx_v8b_v16b_v8b(dst, src, src2)) } -emit_tbx_v16b_v16b_v16b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_tbx_v16b_v16b_v16b(dst, src, src2)) } -emit_tbx_zb_zb_zb :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append(instructions, inst_tbx_zb_zb_zb(rz, rz2, rz3)) } +emit_tbx_v8b_v16b_v8b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_tbx_v8b_v16b_v8b(dst, src, src2)) } +emit_tbx_v16b_v16b_v16b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_tbx_v16b_v16b_v16b(dst, src, src2)) } +emit_tbx_zb_zb_zb :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append_elem(instructions, inst_tbx_zb_zb_zb(rz, rz2, rz3)) } inst_zip1_v8b_v8b_v8b :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .ZIP1, operand_count = 3, length = 4, ops = {op_v_8b(dst), op_v_8b(src), op_v_8b(src2), {}, {}}} } inst_zip1_v16b_v16b_v16b :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .ZIP1, operand_count = 3, length = 4, ops = {op_v_16b(dst), op_v_16b(src), op_v_16b(src2), {}, {}}} } inst_zip1_v4h_v4h_v4h :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .ZIP1, operand_count = 3, length = 4, ops = {op_v_4h(dst), op_v_4h(src), op_v_4h(src2), {}, {}}} } @@ -3195,18 +3223,18 @@ inst_zip1_zh_zh_zh :: #force_inline proc "contextless" (rz: u8, rz2: inst_zip1_zs_zs_zs :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8) -> Instruction { return Instruction{mnemonic = .ZIP1, operand_count = 3, length = 4, ops = {op_z_s(rz), op_z_s(rz2), op_z_s(rz3), {}, {}}} } inst_zip1_zd_zd_zd :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8) -> Instruction { return Instruction{mnemonic = .ZIP1, operand_count = 3, length = 4, ops = {op_z_d(rz), op_z_d(rz2), op_z_d(rz3), {}, {}}} } inst_zip1_pb_pb_pb :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8) -> Instruction { return Instruction{mnemonic = .ZIP1, operand_count = 3, length = 4, ops = {op_reg(Register(REG_P | (u16(rz) & 0xF))), op_reg(Register(REG_P | (u16(rz2) & 0xF))), op_reg(Register(REG_P | (u16(rz3) & 0xF))), {}, {}}} } -emit_zip1_v8b_v8b_v8b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_zip1_v8b_v8b_v8b(dst, src, src2)) } -emit_zip1_v16b_v16b_v16b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_zip1_v16b_v16b_v16b(dst, src, src2)) } -emit_zip1_v4h_v4h_v4h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_zip1_v4h_v4h_v4h(dst, src, src2)) } -emit_zip1_v8h_v8h_v8h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_zip1_v8h_v8h_v8h(dst, src, src2)) } -emit_zip1_v2s_v2s_v2s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_zip1_v2s_v2s_v2s(dst, src, src2)) } -emit_zip1_v4s_v4s_v4s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_zip1_v4s_v4s_v4s(dst, src, src2)) } -emit_zip1_v2d_v2d_v2d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_zip1_v2d_v2d_v2d(dst, src, src2)) } -emit_zip1_zb_zb_zb :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append(instructions, inst_zip1_zb_zb_zb(rz, rz2, rz3)) } -emit_zip1_zh_zh_zh :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append(instructions, inst_zip1_zh_zh_zh(rz, rz2, rz3)) } -emit_zip1_zs_zs_zs :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append(instructions, inst_zip1_zs_zs_zs(rz, rz2, rz3)) } -emit_zip1_zd_zd_zd :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append(instructions, inst_zip1_zd_zd_zd(rz, rz2, rz3)) } -emit_zip1_pb_pb_pb :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append(instructions, inst_zip1_pb_pb_pb(rz, rz2, rz3)) } +emit_zip1_v8b_v8b_v8b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_zip1_v8b_v8b_v8b(dst, src, src2)) } +emit_zip1_v16b_v16b_v16b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_zip1_v16b_v16b_v16b(dst, src, src2)) } +emit_zip1_v4h_v4h_v4h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_zip1_v4h_v4h_v4h(dst, src, src2)) } +emit_zip1_v8h_v8h_v8h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_zip1_v8h_v8h_v8h(dst, src, src2)) } +emit_zip1_v2s_v2s_v2s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_zip1_v2s_v2s_v2s(dst, src, src2)) } +emit_zip1_v4s_v4s_v4s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_zip1_v4s_v4s_v4s(dst, src, src2)) } +emit_zip1_v2d_v2d_v2d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_zip1_v2d_v2d_v2d(dst, src, src2)) } +emit_zip1_zb_zb_zb :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append_elem(instructions, inst_zip1_zb_zb_zb(rz, rz2, rz3)) } +emit_zip1_zh_zh_zh :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append_elem(instructions, inst_zip1_zh_zh_zh(rz, rz2, rz3)) } +emit_zip1_zs_zs_zs :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append_elem(instructions, inst_zip1_zs_zs_zs(rz, rz2, rz3)) } +emit_zip1_zd_zd_zd :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append_elem(instructions, inst_zip1_zd_zd_zd(rz, rz2, rz3)) } +emit_zip1_pb_pb_pb :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append_elem(instructions, inst_zip1_pb_pb_pb(rz, rz2, rz3)) } inst_zip2_v8b_v8b_v8b :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .ZIP2, operand_count = 3, length = 4, ops = {op_v_8b(dst), op_v_8b(src), op_v_8b(src2), {}, {}}} } inst_zip2_v16b_v16b_v16b :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .ZIP2, operand_count = 3, length = 4, ops = {op_v_16b(dst), op_v_16b(src), op_v_16b(src2), {}, {}}} } inst_zip2_v4h_v4h_v4h :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .ZIP2, operand_count = 3, length = 4, ops = {op_v_4h(dst), op_v_4h(src), op_v_4h(src2), {}, {}}} } @@ -3219,18 +3247,18 @@ inst_zip2_zh_zh_zh :: #force_inline proc "contextless" (rz: u8, rz2: inst_zip2_zs_zs_zs :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8) -> Instruction { return Instruction{mnemonic = .ZIP2, operand_count = 3, length = 4, ops = {op_z_s(rz), op_z_s(rz2), op_z_s(rz3), {}, {}}} } inst_zip2_zd_zd_zd :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8) -> Instruction { return Instruction{mnemonic = .ZIP2, operand_count = 3, length = 4, ops = {op_z_d(rz), op_z_d(rz2), op_z_d(rz3), {}, {}}} } inst_zip2_pb_pb_pb :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8) -> Instruction { return Instruction{mnemonic = .ZIP2, operand_count = 3, length = 4, ops = {op_reg(Register(REG_P | (u16(rz) & 0xF))), op_reg(Register(REG_P | (u16(rz2) & 0xF))), op_reg(Register(REG_P | (u16(rz3) & 0xF))), {}, {}}} } -emit_zip2_v8b_v8b_v8b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_zip2_v8b_v8b_v8b(dst, src, src2)) } -emit_zip2_v16b_v16b_v16b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_zip2_v16b_v16b_v16b(dst, src, src2)) } -emit_zip2_v4h_v4h_v4h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_zip2_v4h_v4h_v4h(dst, src, src2)) } -emit_zip2_v8h_v8h_v8h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_zip2_v8h_v8h_v8h(dst, src, src2)) } -emit_zip2_v2s_v2s_v2s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_zip2_v2s_v2s_v2s(dst, src, src2)) } -emit_zip2_v4s_v4s_v4s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_zip2_v4s_v4s_v4s(dst, src, src2)) } -emit_zip2_v2d_v2d_v2d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_zip2_v2d_v2d_v2d(dst, src, src2)) } -emit_zip2_zb_zb_zb :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append(instructions, inst_zip2_zb_zb_zb(rz, rz2, rz3)) } -emit_zip2_zh_zh_zh :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append(instructions, inst_zip2_zh_zh_zh(rz, rz2, rz3)) } -emit_zip2_zs_zs_zs :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append(instructions, inst_zip2_zs_zs_zs(rz, rz2, rz3)) } -emit_zip2_zd_zd_zd :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append(instructions, inst_zip2_zd_zd_zd(rz, rz2, rz3)) } -emit_zip2_pb_pb_pb :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append(instructions, inst_zip2_pb_pb_pb(rz, rz2, rz3)) } +emit_zip2_v8b_v8b_v8b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_zip2_v8b_v8b_v8b(dst, src, src2)) } +emit_zip2_v16b_v16b_v16b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_zip2_v16b_v16b_v16b(dst, src, src2)) } +emit_zip2_v4h_v4h_v4h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_zip2_v4h_v4h_v4h(dst, src, src2)) } +emit_zip2_v8h_v8h_v8h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_zip2_v8h_v8h_v8h(dst, src, src2)) } +emit_zip2_v2s_v2s_v2s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_zip2_v2s_v2s_v2s(dst, src, src2)) } +emit_zip2_v4s_v4s_v4s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_zip2_v4s_v4s_v4s(dst, src, src2)) } +emit_zip2_v2d_v2d_v2d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_zip2_v2d_v2d_v2d(dst, src, src2)) } +emit_zip2_zb_zb_zb :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append_elem(instructions, inst_zip2_zb_zb_zb(rz, rz2, rz3)) } +emit_zip2_zh_zh_zh :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append_elem(instructions, inst_zip2_zh_zh_zh(rz, rz2, rz3)) } +emit_zip2_zs_zs_zs :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append_elem(instructions, inst_zip2_zs_zs_zs(rz, rz2, rz3)) } +emit_zip2_zd_zd_zd :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append_elem(instructions, inst_zip2_zd_zd_zd(rz, rz2, rz3)) } +emit_zip2_pb_pb_pb :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append_elem(instructions, inst_zip2_pb_pb_pb(rz, rz2, rz3)) } inst_uzp1_v8b_v8b_v8b :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .UZP1, operand_count = 3, length = 4, ops = {op_v_8b(dst), op_v_8b(src), op_v_8b(src2), {}, {}}} } inst_uzp1_v16b_v16b_v16b :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .UZP1, operand_count = 3, length = 4, ops = {op_v_16b(dst), op_v_16b(src), op_v_16b(src2), {}, {}}} } inst_uzp1_v4h_v4h_v4h :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .UZP1, operand_count = 3, length = 4, ops = {op_v_4h(dst), op_v_4h(src), op_v_4h(src2), {}, {}}} } @@ -3243,18 +3271,18 @@ inst_uzp1_zh_zh_zh :: #force_inline proc "contextless" (rz: u8, rz2: inst_uzp1_zs_zs_zs :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8) -> Instruction { return Instruction{mnemonic = .UZP1, operand_count = 3, length = 4, ops = {op_z_s(rz), op_z_s(rz2), op_z_s(rz3), {}, {}}} } inst_uzp1_zd_zd_zd :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8) -> Instruction { return Instruction{mnemonic = .UZP1, operand_count = 3, length = 4, ops = {op_z_d(rz), op_z_d(rz2), op_z_d(rz3), {}, {}}} } inst_uzp1_pb_pb_pb :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8) -> Instruction { return Instruction{mnemonic = .UZP1, operand_count = 3, length = 4, ops = {op_reg(Register(REG_P | (u16(rz) & 0xF))), op_reg(Register(REG_P | (u16(rz2) & 0xF))), op_reg(Register(REG_P | (u16(rz3) & 0xF))), {}, {}}} } -emit_uzp1_v8b_v8b_v8b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_uzp1_v8b_v8b_v8b(dst, src, src2)) } -emit_uzp1_v16b_v16b_v16b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_uzp1_v16b_v16b_v16b(dst, src, src2)) } -emit_uzp1_v4h_v4h_v4h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_uzp1_v4h_v4h_v4h(dst, src, src2)) } -emit_uzp1_v8h_v8h_v8h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_uzp1_v8h_v8h_v8h(dst, src, src2)) } -emit_uzp1_v2s_v2s_v2s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_uzp1_v2s_v2s_v2s(dst, src, src2)) } -emit_uzp1_v4s_v4s_v4s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_uzp1_v4s_v4s_v4s(dst, src, src2)) } -emit_uzp1_v2d_v2d_v2d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_uzp1_v2d_v2d_v2d(dst, src, src2)) } -emit_uzp1_zb_zb_zb :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append(instructions, inst_uzp1_zb_zb_zb(rz, rz2, rz3)) } -emit_uzp1_zh_zh_zh :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append(instructions, inst_uzp1_zh_zh_zh(rz, rz2, rz3)) } -emit_uzp1_zs_zs_zs :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append(instructions, inst_uzp1_zs_zs_zs(rz, rz2, rz3)) } -emit_uzp1_zd_zd_zd :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append(instructions, inst_uzp1_zd_zd_zd(rz, rz2, rz3)) } -emit_uzp1_pb_pb_pb :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append(instructions, inst_uzp1_pb_pb_pb(rz, rz2, rz3)) } +emit_uzp1_v8b_v8b_v8b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_uzp1_v8b_v8b_v8b(dst, src, src2)) } +emit_uzp1_v16b_v16b_v16b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_uzp1_v16b_v16b_v16b(dst, src, src2)) } +emit_uzp1_v4h_v4h_v4h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_uzp1_v4h_v4h_v4h(dst, src, src2)) } +emit_uzp1_v8h_v8h_v8h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_uzp1_v8h_v8h_v8h(dst, src, src2)) } +emit_uzp1_v2s_v2s_v2s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_uzp1_v2s_v2s_v2s(dst, src, src2)) } +emit_uzp1_v4s_v4s_v4s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_uzp1_v4s_v4s_v4s(dst, src, src2)) } +emit_uzp1_v2d_v2d_v2d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_uzp1_v2d_v2d_v2d(dst, src, src2)) } +emit_uzp1_zb_zb_zb :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append_elem(instructions, inst_uzp1_zb_zb_zb(rz, rz2, rz3)) } +emit_uzp1_zh_zh_zh :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append_elem(instructions, inst_uzp1_zh_zh_zh(rz, rz2, rz3)) } +emit_uzp1_zs_zs_zs :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append_elem(instructions, inst_uzp1_zs_zs_zs(rz, rz2, rz3)) } +emit_uzp1_zd_zd_zd :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append_elem(instructions, inst_uzp1_zd_zd_zd(rz, rz2, rz3)) } +emit_uzp1_pb_pb_pb :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append_elem(instructions, inst_uzp1_pb_pb_pb(rz, rz2, rz3)) } inst_uzp2_v8b_v8b_v8b :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .UZP2, operand_count = 3, length = 4, ops = {op_v_8b(dst), op_v_8b(src), op_v_8b(src2), {}, {}}} } inst_uzp2_v16b_v16b_v16b :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .UZP2, operand_count = 3, length = 4, ops = {op_v_16b(dst), op_v_16b(src), op_v_16b(src2), {}, {}}} } inst_uzp2_v4h_v4h_v4h :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .UZP2, operand_count = 3, length = 4, ops = {op_v_4h(dst), op_v_4h(src), op_v_4h(src2), {}, {}}} } @@ -3267,18 +3295,18 @@ inst_uzp2_zh_zh_zh :: #force_inline proc "contextless" (rz: u8, rz2: inst_uzp2_zs_zs_zs :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8) -> Instruction { return Instruction{mnemonic = .UZP2, operand_count = 3, length = 4, ops = {op_z_s(rz), op_z_s(rz2), op_z_s(rz3), {}, {}}} } inst_uzp2_zd_zd_zd :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8) -> Instruction { return Instruction{mnemonic = .UZP2, operand_count = 3, length = 4, ops = {op_z_d(rz), op_z_d(rz2), op_z_d(rz3), {}, {}}} } inst_uzp2_pb_pb_pb :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8) -> Instruction { return Instruction{mnemonic = .UZP2, operand_count = 3, length = 4, ops = {op_reg(Register(REG_P | (u16(rz) & 0xF))), op_reg(Register(REG_P | (u16(rz2) & 0xF))), op_reg(Register(REG_P | (u16(rz3) & 0xF))), {}, {}}} } -emit_uzp2_v8b_v8b_v8b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_uzp2_v8b_v8b_v8b(dst, src, src2)) } -emit_uzp2_v16b_v16b_v16b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_uzp2_v16b_v16b_v16b(dst, src, src2)) } -emit_uzp2_v4h_v4h_v4h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_uzp2_v4h_v4h_v4h(dst, src, src2)) } -emit_uzp2_v8h_v8h_v8h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_uzp2_v8h_v8h_v8h(dst, src, src2)) } -emit_uzp2_v2s_v2s_v2s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_uzp2_v2s_v2s_v2s(dst, src, src2)) } -emit_uzp2_v4s_v4s_v4s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_uzp2_v4s_v4s_v4s(dst, src, src2)) } -emit_uzp2_v2d_v2d_v2d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_uzp2_v2d_v2d_v2d(dst, src, src2)) } -emit_uzp2_zb_zb_zb :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append(instructions, inst_uzp2_zb_zb_zb(rz, rz2, rz3)) } -emit_uzp2_zh_zh_zh :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append(instructions, inst_uzp2_zh_zh_zh(rz, rz2, rz3)) } -emit_uzp2_zs_zs_zs :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append(instructions, inst_uzp2_zs_zs_zs(rz, rz2, rz3)) } -emit_uzp2_zd_zd_zd :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append(instructions, inst_uzp2_zd_zd_zd(rz, rz2, rz3)) } -emit_uzp2_pb_pb_pb :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append(instructions, inst_uzp2_pb_pb_pb(rz, rz2, rz3)) } +emit_uzp2_v8b_v8b_v8b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_uzp2_v8b_v8b_v8b(dst, src, src2)) } +emit_uzp2_v16b_v16b_v16b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_uzp2_v16b_v16b_v16b(dst, src, src2)) } +emit_uzp2_v4h_v4h_v4h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_uzp2_v4h_v4h_v4h(dst, src, src2)) } +emit_uzp2_v8h_v8h_v8h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_uzp2_v8h_v8h_v8h(dst, src, src2)) } +emit_uzp2_v2s_v2s_v2s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_uzp2_v2s_v2s_v2s(dst, src, src2)) } +emit_uzp2_v4s_v4s_v4s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_uzp2_v4s_v4s_v4s(dst, src, src2)) } +emit_uzp2_v2d_v2d_v2d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_uzp2_v2d_v2d_v2d(dst, src, src2)) } +emit_uzp2_zb_zb_zb :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append_elem(instructions, inst_uzp2_zb_zb_zb(rz, rz2, rz3)) } +emit_uzp2_zh_zh_zh :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append_elem(instructions, inst_uzp2_zh_zh_zh(rz, rz2, rz3)) } +emit_uzp2_zs_zs_zs :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append_elem(instructions, inst_uzp2_zs_zs_zs(rz, rz2, rz3)) } +emit_uzp2_zd_zd_zd :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append_elem(instructions, inst_uzp2_zd_zd_zd(rz, rz2, rz3)) } +emit_uzp2_pb_pb_pb :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append_elem(instructions, inst_uzp2_pb_pb_pb(rz, rz2, rz3)) } inst_trn1_v8b_v8b_v8b :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .TRN1, operand_count = 3, length = 4, ops = {op_v_8b(dst), op_v_8b(src), op_v_8b(src2), {}, {}}} } inst_trn1_v16b_v16b_v16b :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .TRN1, operand_count = 3, length = 4, ops = {op_v_16b(dst), op_v_16b(src), op_v_16b(src2), {}, {}}} } inst_trn1_v4h_v4h_v4h :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .TRN1, operand_count = 3, length = 4, ops = {op_v_4h(dst), op_v_4h(src), op_v_4h(src2), {}, {}}} } @@ -3291,18 +3319,18 @@ inst_trn1_zh_zh_zh :: #force_inline proc "contextless" (rz: u8, rz2: inst_trn1_zs_zs_zs :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8) -> Instruction { return Instruction{mnemonic = .TRN1, operand_count = 3, length = 4, ops = {op_z_s(rz), op_z_s(rz2), op_z_s(rz3), {}, {}}} } inst_trn1_zd_zd_zd :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8) -> Instruction { return Instruction{mnemonic = .TRN1, operand_count = 3, length = 4, ops = {op_z_d(rz), op_z_d(rz2), op_z_d(rz3), {}, {}}} } inst_trn1_pb_pb_pb :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8) -> Instruction { return Instruction{mnemonic = .TRN1, operand_count = 3, length = 4, ops = {op_reg(Register(REG_P | (u16(rz) & 0xF))), op_reg(Register(REG_P | (u16(rz2) & 0xF))), op_reg(Register(REG_P | (u16(rz3) & 0xF))), {}, {}}} } -emit_trn1_v8b_v8b_v8b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_trn1_v8b_v8b_v8b(dst, src, src2)) } -emit_trn1_v16b_v16b_v16b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_trn1_v16b_v16b_v16b(dst, src, src2)) } -emit_trn1_v4h_v4h_v4h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_trn1_v4h_v4h_v4h(dst, src, src2)) } -emit_trn1_v8h_v8h_v8h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_trn1_v8h_v8h_v8h(dst, src, src2)) } -emit_trn1_v2s_v2s_v2s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_trn1_v2s_v2s_v2s(dst, src, src2)) } -emit_trn1_v4s_v4s_v4s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_trn1_v4s_v4s_v4s(dst, src, src2)) } -emit_trn1_v2d_v2d_v2d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_trn1_v2d_v2d_v2d(dst, src, src2)) } -emit_trn1_zb_zb_zb :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append(instructions, inst_trn1_zb_zb_zb(rz, rz2, rz3)) } -emit_trn1_zh_zh_zh :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append(instructions, inst_trn1_zh_zh_zh(rz, rz2, rz3)) } -emit_trn1_zs_zs_zs :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append(instructions, inst_trn1_zs_zs_zs(rz, rz2, rz3)) } -emit_trn1_zd_zd_zd :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append(instructions, inst_trn1_zd_zd_zd(rz, rz2, rz3)) } -emit_trn1_pb_pb_pb :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append(instructions, inst_trn1_pb_pb_pb(rz, rz2, rz3)) } +emit_trn1_v8b_v8b_v8b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_trn1_v8b_v8b_v8b(dst, src, src2)) } +emit_trn1_v16b_v16b_v16b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_trn1_v16b_v16b_v16b(dst, src, src2)) } +emit_trn1_v4h_v4h_v4h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_trn1_v4h_v4h_v4h(dst, src, src2)) } +emit_trn1_v8h_v8h_v8h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_trn1_v8h_v8h_v8h(dst, src, src2)) } +emit_trn1_v2s_v2s_v2s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_trn1_v2s_v2s_v2s(dst, src, src2)) } +emit_trn1_v4s_v4s_v4s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_trn1_v4s_v4s_v4s(dst, src, src2)) } +emit_trn1_v2d_v2d_v2d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_trn1_v2d_v2d_v2d(dst, src, src2)) } +emit_trn1_zb_zb_zb :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append_elem(instructions, inst_trn1_zb_zb_zb(rz, rz2, rz3)) } +emit_trn1_zh_zh_zh :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append_elem(instructions, inst_trn1_zh_zh_zh(rz, rz2, rz3)) } +emit_trn1_zs_zs_zs :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append_elem(instructions, inst_trn1_zs_zs_zs(rz, rz2, rz3)) } +emit_trn1_zd_zd_zd :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append_elem(instructions, inst_trn1_zd_zd_zd(rz, rz2, rz3)) } +emit_trn1_pb_pb_pb :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append_elem(instructions, inst_trn1_pb_pb_pb(rz, rz2, rz3)) } inst_trn2_v8b_v8b_v8b :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .TRN2, operand_count = 3, length = 4, ops = {op_v_8b(dst), op_v_8b(src), op_v_8b(src2), {}, {}}} } inst_trn2_v16b_v16b_v16b :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .TRN2, operand_count = 3, length = 4, ops = {op_v_16b(dst), op_v_16b(src), op_v_16b(src2), {}, {}}} } inst_trn2_v4h_v4h_v4h :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .TRN2, operand_count = 3, length = 4, ops = {op_v_4h(dst), op_v_4h(src), op_v_4h(src2), {}, {}}} } @@ -3315,56 +3343,56 @@ inst_trn2_zh_zh_zh :: #force_inline proc "contextless" (rz: u8, rz2: inst_trn2_zs_zs_zs :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8) -> Instruction { return Instruction{mnemonic = .TRN2, operand_count = 3, length = 4, ops = {op_z_s(rz), op_z_s(rz2), op_z_s(rz3), {}, {}}} } inst_trn2_zd_zd_zd :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8) -> Instruction { return Instruction{mnemonic = .TRN2, operand_count = 3, length = 4, ops = {op_z_d(rz), op_z_d(rz2), op_z_d(rz3), {}, {}}} } inst_trn2_pb_pb_pb :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8) -> Instruction { return Instruction{mnemonic = .TRN2, operand_count = 3, length = 4, ops = {op_reg(Register(REG_P | (u16(rz) & 0xF))), op_reg(Register(REG_P | (u16(rz2) & 0xF))), op_reg(Register(REG_P | (u16(rz3) & 0xF))), {}, {}}} } -emit_trn2_v8b_v8b_v8b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_trn2_v8b_v8b_v8b(dst, src, src2)) } -emit_trn2_v16b_v16b_v16b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_trn2_v16b_v16b_v16b(dst, src, src2)) } -emit_trn2_v4h_v4h_v4h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_trn2_v4h_v4h_v4h(dst, src, src2)) } -emit_trn2_v8h_v8h_v8h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_trn2_v8h_v8h_v8h(dst, src, src2)) } -emit_trn2_v2s_v2s_v2s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_trn2_v2s_v2s_v2s(dst, src, src2)) } -emit_trn2_v4s_v4s_v4s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_trn2_v4s_v4s_v4s(dst, src, src2)) } -emit_trn2_v2d_v2d_v2d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_trn2_v2d_v2d_v2d(dst, src, src2)) } -emit_trn2_zb_zb_zb :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append(instructions, inst_trn2_zb_zb_zb(rz, rz2, rz3)) } -emit_trn2_zh_zh_zh :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append(instructions, inst_trn2_zh_zh_zh(rz, rz2, rz3)) } -emit_trn2_zs_zs_zs :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append(instructions, inst_trn2_zs_zs_zs(rz, rz2, rz3)) } -emit_trn2_zd_zd_zd :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append(instructions, inst_trn2_zd_zd_zd(rz, rz2, rz3)) } -emit_trn2_pb_pb_pb :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append(instructions, inst_trn2_pb_pb_pb(rz, rz2, rz3)) } +emit_trn2_v8b_v8b_v8b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_trn2_v8b_v8b_v8b(dst, src, src2)) } +emit_trn2_v16b_v16b_v16b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_trn2_v16b_v16b_v16b(dst, src, src2)) } +emit_trn2_v4h_v4h_v4h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_trn2_v4h_v4h_v4h(dst, src, src2)) } +emit_trn2_v8h_v8h_v8h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_trn2_v8h_v8h_v8h(dst, src, src2)) } +emit_trn2_v2s_v2s_v2s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_trn2_v2s_v2s_v2s(dst, src, src2)) } +emit_trn2_v4s_v4s_v4s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_trn2_v4s_v4s_v4s(dst, src, src2)) } +emit_trn2_v2d_v2d_v2d :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_trn2_v2d_v2d_v2d(dst, src, src2)) } +emit_trn2_zb_zb_zb :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append_elem(instructions, inst_trn2_zb_zb_zb(rz, rz2, rz3)) } +emit_trn2_zh_zh_zh :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append_elem(instructions, inst_trn2_zh_zh_zh(rz, rz2, rz3)) } +emit_trn2_zs_zs_zs :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append_elem(instructions, inst_trn2_zs_zs_zs(rz, rz2, rz3)) } +emit_trn2_zd_zd_zd :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append_elem(instructions, inst_trn2_zd_zd_zd(rz, rz2, rz3)) } +emit_trn2_pb_pb_pb :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append_elem(instructions, inst_trn2_pb_pb_pb(rz, rz2, rz3)) } inst_not_v8b_v8b :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .NOT, operand_count = 2, length = 4, ops = {op_v_8b(dst), op_v_8b(src), {}, {}, {}}} } inst_not_v16b_v16b :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .NOT, operand_count = 2, length = 4, ops = {op_v_16b(dst), op_v_16b(src), {}, {}, {}}} } inst_not_pb_p_pb :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8) -> Instruction { return Instruction{mnemonic = .NOT, operand_count = 3, length = 4, ops = {op_reg(Register(REG_P | (u16(rz) & 0xF))), op_reg(Register(REG_P | (u16(rz2) & 0xF))), op_reg(Register(REG_P | (u16(rz3) & 0xF))), {}, {}}} } -emit_not_v8b_v8b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_not_v8b_v8b(dst, src)) } -emit_not_v16b_v16b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_not_v16b_v16b(dst, src)) } -emit_not_pb_p_pb :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append(instructions, inst_not_pb_p_pb(rz, rz2, rz3)) } +emit_not_v8b_v8b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_not_v8b_v8b(dst, src)) } +emit_not_v16b_v16b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_not_v16b_v16b(dst, src)) } +emit_not_pb_p_pb :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append_elem(instructions, inst_not_pb_p_pb(rz, rz2, rz3)) } inst_rev64_v8b_v8b :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .REV64, operand_count = 2, length = 4, ops = {op_v_8b(dst), op_v_8b(src), {}, {}, {}}} } inst_rev64_v16b_v16b :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .REV64, operand_count = 2, length = 4, ops = {op_v_16b(dst), op_v_16b(src), {}, {}, {}}} } inst_rev64_v4h_v4h :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .REV64, operand_count = 2, length = 4, ops = {op_v_4h(dst), op_v_4h(src), {}, {}, {}}} } inst_rev64_v8h_v8h :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .REV64, operand_count = 2, length = 4, ops = {op_v_8h(dst), op_v_8h(src), {}, {}, {}}} } inst_rev64_v2s_v2s :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .REV64, operand_count = 2, length = 4, ops = {op_v_2s(dst), op_v_2s(src), {}, {}, {}}} } inst_rev64_v4s_v4s :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .REV64, operand_count = 2, length = 4, ops = {op_v_4s(dst), op_v_4s(src), {}, {}, {}}} } -emit_rev64_v8b_v8b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_rev64_v8b_v8b(dst, src)) } -emit_rev64_v16b_v16b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_rev64_v16b_v16b(dst, src)) } -emit_rev64_v4h_v4h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_rev64_v4h_v4h(dst, src)) } -emit_rev64_v8h_v8h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_rev64_v8h_v8h(dst, src)) } -emit_rev64_v2s_v2s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_rev64_v2s_v2s(dst, src)) } -emit_rev64_v4s_v4s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_rev64_v4s_v4s(dst, src)) } +emit_rev64_v8b_v8b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_rev64_v8b_v8b(dst, src)) } +emit_rev64_v16b_v16b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_rev64_v16b_v16b(dst, src)) } +emit_rev64_v4h_v4h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_rev64_v4h_v4h(dst, src)) } +emit_rev64_v8h_v8h :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_rev64_v8h_v8h(dst, src)) } +emit_rev64_v2s_v2s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_rev64_v2s_v2s(dst, src)) } +emit_rev64_v4s_v4s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_rev64_v4s_v4s(dst, src)) } inst_cnt_v8b_v8b :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .CNT, operand_count = 2, length = 4, ops = {op_v_8b(dst), op_v_8b(src), {}, {}, {}}} } inst_cnt_v16b_v16b :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .CNT, operand_count = 2, length = 4, ops = {op_v_16b(dst), op_v_16b(src), {}, {}, {}}} } inst_cnt_zb_p_zb :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8) -> Instruction { return Instruction{mnemonic = .CNT, operand_count = 3, length = 4, ops = {op_z_b(rz), op_reg(Register(REG_P | (u16(rz2) & 0xF))), op_z_b(rz3), {}, {}}} } inst_cnt_zh_p_zh :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8) -> Instruction { return Instruction{mnemonic = .CNT, operand_count = 3, length = 4, ops = {op_z_h(rz), op_reg(Register(REG_P | (u16(rz2) & 0xF))), op_z_h(rz3), {}, {}}} } inst_cnt_zs_p_zs :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8) -> Instruction { return Instruction{mnemonic = .CNT, operand_count = 3, length = 4, ops = {op_z_s(rz), op_reg(Register(REG_P | (u16(rz2) & 0xF))), op_z_s(rz3), {}, {}}} } inst_cnt_zd_p_zd :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8) -> Instruction { return Instruction{mnemonic = .CNT, operand_count = 3, length = 4, ops = {op_z_d(rz), op_reg(Register(REG_P | (u16(rz2) & 0xF))), op_z_d(rz3), {}, {}}} } -emit_cnt_v8b_v8b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_cnt_v8b_v8b(dst, src)) } -emit_cnt_v16b_v16b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_cnt_v16b_v16b(dst, src)) } -emit_cnt_zb_p_zb :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append(instructions, inst_cnt_zb_p_zb(rz, rz2, rz3)) } -emit_cnt_zh_p_zh :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append(instructions, inst_cnt_zh_p_zh(rz, rz2, rz3)) } -emit_cnt_zs_p_zs :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append(instructions, inst_cnt_zs_p_zs(rz, rz2, rz3)) } -emit_cnt_zd_p_zd :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append(instructions, inst_cnt_zd_p_zd(rz, rz2, rz3)) } +emit_cnt_v8b_v8b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_cnt_v8b_v8b(dst, src)) } +emit_cnt_v16b_v16b :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_cnt_v16b_v16b(dst, src)) } +emit_cnt_zb_p_zb :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append_elem(instructions, inst_cnt_zb_p_zb(rz, rz2, rz3)) } +emit_cnt_zh_p_zh :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append_elem(instructions, inst_cnt_zh_p_zh(rz, rz2, rz3)) } +emit_cnt_zs_p_zs :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append_elem(instructions, inst_cnt_zs_p_zs(rz, rz2, rz3)) } +emit_cnt_zd_p_zd :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append_elem(instructions, inst_cnt_zd_p_zd(rz, rz2, rz3)) } inst_urecpe_v2s_v2s :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .URECPE, operand_count = 2, length = 4, ops = {op_v_2s(dst), op_v_2s(src), {}, {}, {}}} } inst_urecpe_v4s_v4s :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .URECPE, operand_count = 2, length = 4, ops = {op_v_4s(dst), op_v_4s(src), {}, {}, {}}} } -emit_urecpe_v2s_v2s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_urecpe_v2s_v2s(dst, src)) } -emit_urecpe_v4s_v4s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_urecpe_v4s_v4s(dst, src)) } +emit_urecpe_v2s_v2s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_urecpe_v2s_v2s(dst, src)) } +emit_urecpe_v4s_v4s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_urecpe_v4s_v4s(dst, src)) } inst_ursqrte_v2s_v2s :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .URSQRTE, operand_count = 2, length = 4, ops = {op_v_2s(dst), op_v_2s(src), {}, {}, {}}} } inst_ursqrte_v4s_v4s :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .URSQRTE, operand_count = 2, length = 4, ops = {op_v_4s(dst), op_v_4s(src), {}, {}, {}}} } -emit_ursqrte_v2s_v2s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_ursqrte_v2s_v2s(dst, src)) } -emit_ursqrte_v4s_v4s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_ursqrte_v4s_v4s(dst, src)) } +emit_ursqrte_v2s_v2s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_ursqrte_v2s_v2s(dst, src)) } +emit_ursqrte_v4s_v4s :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_ursqrte_v4s_v4s(dst, src)) } inst_movi_v8b_i :: #force_inline proc "contextless" (dst: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .MOVI, operand_count = 2, length = 4, ops = {op_v_8b(dst), op_imm(imm, 1), {}, {}, {}}} } inst_movi_v16b_i :: #force_inline proc "contextless" (dst: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .MOVI, operand_count = 2, length = 4, ops = {op_v_16b(dst), op_imm(imm, 1), {}, {}, {}}} } inst_movi_v4h_i :: #force_inline proc "contextless" (dst: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .MOVI, operand_count = 2, length = 4, ops = {op_v_4h(dst), op_imm(imm, 1), {}, {}, {}}} } @@ -3372,21 +3400,21 @@ inst_movi_v8h_i :: #force_inline proc "contextless" (dst: Register inst_movi_v2s_i :: #force_inline proc "contextless" (dst: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .MOVI, operand_count = 2, length = 4, ops = {op_v_2s(dst), op_imm(imm, 1), {}, {}, {}}} } inst_movi_v4s_i :: #force_inline proc "contextless" (dst: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .MOVI, operand_count = 2, length = 4, ops = {op_v_4s(dst), op_imm(imm, 1), {}, {}, {}}} } inst_movi_v2d_i :: #force_inline proc "contextless" (dst: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .MOVI, operand_count = 2, length = 4, ops = {op_v_2d(dst), op_imm(imm, 1), {}, {}, {}}} } -emit_movi_v8b_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64) { append(instructions, inst_movi_v8b_i(dst, imm)) } -emit_movi_v16b_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64) { append(instructions, inst_movi_v16b_i(dst, imm)) } -emit_movi_v4h_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64) { append(instructions, inst_movi_v4h_i(dst, imm)) } -emit_movi_v8h_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64) { append(instructions, inst_movi_v8h_i(dst, imm)) } -emit_movi_v2s_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64) { append(instructions, inst_movi_v2s_i(dst, imm)) } -emit_movi_v4s_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64) { append(instructions, inst_movi_v4s_i(dst, imm)) } -emit_movi_v2d_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64) { append(instructions, inst_movi_v2d_i(dst, imm)) } +emit_movi_v8b_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64) { append_elem(instructions, inst_movi_v8b_i(dst, imm)) } +emit_movi_v16b_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64) { append_elem(instructions, inst_movi_v16b_i(dst, imm)) } +emit_movi_v4h_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64) { append_elem(instructions, inst_movi_v4h_i(dst, imm)) } +emit_movi_v8h_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64) { append_elem(instructions, inst_movi_v8h_i(dst, imm)) } +emit_movi_v2s_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64) { append_elem(instructions, inst_movi_v2s_i(dst, imm)) } +emit_movi_v4s_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64) { append_elem(instructions, inst_movi_v4s_i(dst, imm)) } +emit_movi_v2d_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64) { append_elem(instructions, inst_movi_v2d_i(dst, imm)) } inst_mvni_v4h_i :: #force_inline proc "contextless" (dst: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .MVNI, operand_count = 2, length = 4, ops = {op_v_4h(dst), op_imm(imm, 1), {}, {}, {}}} } inst_mvni_v8h_i :: #force_inline proc "contextless" (dst: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .MVNI, operand_count = 2, length = 4, ops = {op_v_8h(dst), op_imm(imm, 1), {}, {}, {}}} } inst_mvni_v2s_i :: #force_inline proc "contextless" (dst: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .MVNI, operand_count = 2, length = 4, ops = {op_v_2s(dst), op_imm(imm, 1), {}, {}, {}}} } inst_mvni_v4s_i :: #force_inline proc "contextless" (dst: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .MVNI, operand_count = 2, length = 4, ops = {op_v_4s(dst), op_imm(imm, 1), {}, {}, {}}} } -emit_mvni_v4h_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64) { append(instructions, inst_mvni_v4h_i(dst, imm)) } -emit_mvni_v8h_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64) { append(instructions, inst_mvni_v8h_i(dst, imm)) } -emit_mvni_v2s_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64) { append(instructions, inst_mvni_v2s_i(dst, imm)) } -emit_mvni_v4s_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64) { append(instructions, inst_mvni_v4s_i(dst, imm)) } +emit_mvni_v4h_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64) { append_elem(instructions, inst_mvni_v4h_i(dst, imm)) } +emit_mvni_v8h_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64) { append_elem(instructions, inst_mvni_v8h_i(dst, imm)) } +emit_mvni_v2s_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64) { append_elem(instructions, inst_mvni_v2s_i(dst, imm)) } +emit_mvni_v4s_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64) { append_elem(instructions, inst_mvni_v4s_i(dst, imm)) } inst_ld1_v16b_m :: #force_inline proc "contextless" (dst: Register, mem: Memory) -> Instruction { return Instruction{mnemonic = .LD1, operand_count = 2, length = 4, ops = {op_v_list(dst, VSHAPE_16B, 1), op_mem(mem), {}, {}, {}}} } inst_ld1_v8h_m :: #force_inline proc "contextless" (dst: Register, mem: Memory) -> Instruction { return Instruction{mnemonic = .LD1, operand_count = 2, length = 4, ops = {op_v_list(dst, VSHAPE_8H, 1), op_mem(mem), {}, {}, {}}} } inst_ld1_v4s_m :: #force_inline proc "contextless" (dst: Register, mem: Memory) -> Instruction { return Instruction{mnemonic = .LD1, operand_count = 2, length = 4, ops = {op_v_list(dst, VSHAPE_4S, 1), op_mem(mem), {}, {}, {}}} } @@ -3395,44 +3423,44 @@ inst_ld1_veb_i_m :: #force_inline proc "contextless" (dst: Register inst_ld1_veh_i_m :: #force_inline proc "contextless" (dst: Register, imm: i64, mem: Memory) -> Instruction { return Instruction{mnemonic = .LD1, operand_count = 3, length = 4, ops = {op_v_list(dst, VSHAPE_ELEM_H, 1), op_lane_index(imm), op_mem(mem), {}, {}}} } inst_ld1_ves_i_m :: #force_inline proc "contextless" (dst: Register, imm: i64, mem: Memory) -> Instruction { return Instruction{mnemonic = .LD1, operand_count = 3, length = 4, ops = {op_v_list(dst, VSHAPE_ELEM_S, 1), op_lane_index(imm), op_mem(mem), {}, {}}} } inst_ld1_ved_i_m :: #force_inline proc "contextless" (dst: Register, imm: i64, mem: Memory) -> Instruction { return Instruction{mnemonic = .LD1, operand_count = 3, length = 4, ops = {op_v_list(dst, VSHAPE_ELEM_D, 1), op_lane_index(imm), op_mem(mem), {}, {}}} } -emit_ld1_v16b_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, mem: Memory) { append(instructions, inst_ld1_v16b_m(dst, mem)) } -emit_ld1_v8h_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, mem: Memory) { append(instructions, inst_ld1_v8h_m(dst, mem)) } -emit_ld1_v4s_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, mem: Memory) { append(instructions, inst_ld1_v4s_m(dst, mem)) } -emit_ld1_v2d_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, mem: Memory) { append(instructions, inst_ld1_v2d_m(dst, mem)) } -emit_ld1_veb_i_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64, mem: Memory) { append(instructions, inst_ld1_veb_i_m(dst, imm, mem)) } -emit_ld1_veh_i_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64, mem: Memory) { append(instructions, inst_ld1_veh_i_m(dst, imm, mem)) } -emit_ld1_ves_i_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64, mem: Memory) { append(instructions, inst_ld1_ves_i_m(dst, imm, mem)) } -emit_ld1_ved_i_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64, mem: Memory) { append(instructions, inst_ld1_ved_i_m(dst, imm, mem)) } +emit_ld1_v16b_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, mem: Memory) { append_elem(instructions, inst_ld1_v16b_m(dst, mem)) } +emit_ld1_v8h_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, mem: Memory) { append_elem(instructions, inst_ld1_v8h_m(dst, mem)) } +emit_ld1_v4s_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, mem: Memory) { append_elem(instructions, inst_ld1_v4s_m(dst, mem)) } +emit_ld1_v2d_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, mem: Memory) { append_elem(instructions, inst_ld1_v2d_m(dst, mem)) } +emit_ld1_veb_i_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64, mem: Memory) { append_elem(instructions, inst_ld1_veb_i_m(dst, imm, mem)) } +emit_ld1_veh_i_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64, mem: Memory) { append_elem(instructions, inst_ld1_veh_i_m(dst, imm, mem)) } +emit_ld1_ves_i_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64, mem: Memory) { append_elem(instructions, inst_ld1_ves_i_m(dst, imm, mem)) } +emit_ld1_ved_i_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64, mem: Memory) { append_elem(instructions, inst_ld1_ved_i_m(dst, imm, mem)) } inst_ld2_v16b_m :: #force_inline proc "contextless" (dst: Register, mem: Memory) -> Instruction { return Instruction{mnemonic = .LD2, operand_count = 2, length = 4, ops = {op_v_list(dst, VSHAPE_16B, 2), op_mem(mem), {}, {}, {}}} } inst_ld2_veb_i_m :: #force_inline proc "contextless" (dst: Register, imm: i64, mem: Memory) -> Instruction { return Instruction{mnemonic = .LD2, operand_count = 3, length = 4, ops = {op_v_list(dst, VSHAPE_ELEM_B, 2), op_lane_index(imm), op_mem(mem), {}, {}}} } inst_ld2_veh_i_m :: #force_inline proc "contextless" (dst: Register, imm: i64, mem: Memory) -> Instruction { return Instruction{mnemonic = .LD2, operand_count = 3, length = 4, ops = {op_v_list(dst, VSHAPE_ELEM_H, 2), op_lane_index(imm), op_mem(mem), {}, {}}} } inst_ld2_ves_i_m :: #force_inline proc "contextless" (dst: Register, imm: i64, mem: Memory) -> Instruction { return Instruction{mnemonic = .LD2, operand_count = 3, length = 4, ops = {op_v_list(dst, VSHAPE_ELEM_S, 2), op_lane_index(imm), op_mem(mem), {}, {}}} } inst_ld2_ved_i_m :: #force_inline proc "contextless" (dst: Register, imm: i64, mem: Memory) -> Instruction { return Instruction{mnemonic = .LD2, operand_count = 3, length = 4, ops = {op_v_list(dst, VSHAPE_ELEM_D, 2), op_lane_index(imm), op_mem(mem), {}, {}}} } -emit_ld2_v16b_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, mem: Memory) { append(instructions, inst_ld2_v16b_m(dst, mem)) } -emit_ld2_veb_i_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64, mem: Memory) { append(instructions, inst_ld2_veb_i_m(dst, imm, mem)) } -emit_ld2_veh_i_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64, mem: Memory) { append(instructions, inst_ld2_veh_i_m(dst, imm, mem)) } -emit_ld2_ves_i_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64, mem: Memory) { append(instructions, inst_ld2_ves_i_m(dst, imm, mem)) } -emit_ld2_ved_i_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64, mem: Memory) { append(instructions, inst_ld2_ved_i_m(dst, imm, mem)) } +emit_ld2_v16b_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, mem: Memory) { append_elem(instructions, inst_ld2_v16b_m(dst, mem)) } +emit_ld2_veb_i_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64, mem: Memory) { append_elem(instructions, inst_ld2_veb_i_m(dst, imm, mem)) } +emit_ld2_veh_i_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64, mem: Memory) { append_elem(instructions, inst_ld2_veh_i_m(dst, imm, mem)) } +emit_ld2_ves_i_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64, mem: Memory) { append_elem(instructions, inst_ld2_ves_i_m(dst, imm, mem)) } +emit_ld2_ved_i_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64, mem: Memory) { append_elem(instructions, inst_ld2_ved_i_m(dst, imm, mem)) } inst_ld3_v16b_m :: #force_inline proc "contextless" (dst: Register, mem: Memory) -> Instruction { return Instruction{mnemonic = .LD3, operand_count = 2, length = 4, ops = {op_v_list(dst, VSHAPE_16B, 3), op_mem(mem), {}, {}, {}}} } inst_ld3_veb_i_m :: #force_inline proc "contextless" (dst: Register, imm: i64, mem: Memory) -> Instruction { return Instruction{mnemonic = .LD3, operand_count = 3, length = 4, ops = {op_v_list(dst, VSHAPE_ELEM_B, 3), op_lane_index(imm), op_mem(mem), {}, {}}} } inst_ld3_veh_i_m :: #force_inline proc "contextless" (dst: Register, imm: i64, mem: Memory) -> Instruction { return Instruction{mnemonic = .LD3, operand_count = 3, length = 4, ops = {op_v_list(dst, VSHAPE_ELEM_H, 3), op_lane_index(imm), op_mem(mem), {}, {}}} } inst_ld3_ves_i_m :: #force_inline proc "contextless" (dst: Register, imm: i64, mem: Memory) -> Instruction { return Instruction{mnemonic = .LD3, operand_count = 3, length = 4, ops = {op_v_list(dst, VSHAPE_ELEM_S, 3), op_lane_index(imm), op_mem(mem), {}, {}}} } inst_ld3_ved_i_m :: #force_inline proc "contextless" (dst: Register, imm: i64, mem: Memory) -> Instruction { return Instruction{mnemonic = .LD3, operand_count = 3, length = 4, ops = {op_v_list(dst, VSHAPE_ELEM_D, 3), op_lane_index(imm), op_mem(mem), {}, {}}} } -emit_ld3_v16b_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, mem: Memory) { append(instructions, inst_ld3_v16b_m(dst, mem)) } -emit_ld3_veb_i_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64, mem: Memory) { append(instructions, inst_ld3_veb_i_m(dst, imm, mem)) } -emit_ld3_veh_i_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64, mem: Memory) { append(instructions, inst_ld3_veh_i_m(dst, imm, mem)) } -emit_ld3_ves_i_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64, mem: Memory) { append(instructions, inst_ld3_ves_i_m(dst, imm, mem)) } -emit_ld3_ved_i_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64, mem: Memory) { append(instructions, inst_ld3_ved_i_m(dst, imm, mem)) } +emit_ld3_v16b_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, mem: Memory) { append_elem(instructions, inst_ld3_v16b_m(dst, mem)) } +emit_ld3_veb_i_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64, mem: Memory) { append_elem(instructions, inst_ld3_veb_i_m(dst, imm, mem)) } +emit_ld3_veh_i_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64, mem: Memory) { append_elem(instructions, inst_ld3_veh_i_m(dst, imm, mem)) } +emit_ld3_ves_i_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64, mem: Memory) { append_elem(instructions, inst_ld3_ves_i_m(dst, imm, mem)) } +emit_ld3_ved_i_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64, mem: Memory) { append_elem(instructions, inst_ld3_ved_i_m(dst, imm, mem)) } inst_ld4_v16b_m :: #force_inline proc "contextless" (dst: Register, mem: Memory) -> Instruction { return Instruction{mnemonic = .LD4, operand_count = 2, length = 4, ops = {op_v_list(dst, VSHAPE_16B, 4), op_mem(mem), {}, {}, {}}} } inst_ld4_veb_i_m :: #force_inline proc "contextless" (dst: Register, imm: i64, mem: Memory) -> Instruction { return Instruction{mnemonic = .LD4, operand_count = 3, length = 4, ops = {op_v_list(dst, VSHAPE_ELEM_B, 4), op_lane_index(imm), op_mem(mem), {}, {}}} } inst_ld4_veh_i_m :: #force_inline proc "contextless" (dst: Register, imm: i64, mem: Memory) -> Instruction { return Instruction{mnemonic = .LD4, operand_count = 3, length = 4, ops = {op_v_list(dst, VSHAPE_ELEM_H, 4), op_lane_index(imm), op_mem(mem), {}, {}}} } inst_ld4_ves_i_m :: #force_inline proc "contextless" (dst: Register, imm: i64, mem: Memory) -> Instruction { return Instruction{mnemonic = .LD4, operand_count = 3, length = 4, ops = {op_v_list(dst, VSHAPE_ELEM_S, 4), op_lane_index(imm), op_mem(mem), {}, {}}} } inst_ld4_ved_i_m :: #force_inline proc "contextless" (dst: Register, imm: i64, mem: Memory) -> Instruction { return Instruction{mnemonic = .LD4, operand_count = 3, length = 4, ops = {op_v_list(dst, VSHAPE_ELEM_D, 4), op_lane_index(imm), op_mem(mem), {}, {}}} } -emit_ld4_v16b_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, mem: Memory) { append(instructions, inst_ld4_v16b_m(dst, mem)) } -emit_ld4_veb_i_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64, mem: Memory) { append(instructions, inst_ld4_veb_i_m(dst, imm, mem)) } -emit_ld4_veh_i_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64, mem: Memory) { append(instructions, inst_ld4_veh_i_m(dst, imm, mem)) } -emit_ld4_ves_i_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64, mem: Memory) { append(instructions, inst_ld4_ves_i_m(dst, imm, mem)) } -emit_ld4_ved_i_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64, mem: Memory) { append(instructions, inst_ld4_ved_i_m(dst, imm, mem)) } +emit_ld4_v16b_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, mem: Memory) { append_elem(instructions, inst_ld4_v16b_m(dst, mem)) } +emit_ld4_veb_i_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64, mem: Memory) { append_elem(instructions, inst_ld4_veb_i_m(dst, imm, mem)) } +emit_ld4_veh_i_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64, mem: Memory) { append_elem(instructions, inst_ld4_veh_i_m(dst, imm, mem)) } +emit_ld4_ves_i_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64, mem: Memory) { append_elem(instructions, inst_ld4_ves_i_m(dst, imm, mem)) } +emit_ld4_ved_i_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64, mem: Memory) { append_elem(instructions, inst_ld4_ved_i_m(dst, imm, mem)) } inst_st1_v16b_m :: #force_inline proc "contextless" (dst: Register, mem: Memory) -> Instruction { return Instruction{mnemonic = .ST1, operand_count = 2, length = 4, ops = {op_v_list(dst, VSHAPE_16B, 1), op_mem(mem), {}, {}, {}}} } inst_st1_v8h_m :: #force_inline proc "contextless" (dst: Register, mem: Memory) -> Instruction { return Instruction{mnemonic = .ST1, operand_count = 2, length = 4, ops = {op_v_list(dst, VSHAPE_8H, 1), op_mem(mem), {}, {}, {}}} } inst_st1_v4s_m :: #force_inline proc "contextless" (dst: Register, mem: Memory) -> Instruction { return Instruction{mnemonic = .ST1, operand_count = 2, length = 4, ops = {op_v_list(dst, VSHAPE_4S, 1), op_mem(mem), {}, {}, {}}} } @@ -3441,644 +3469,644 @@ inst_st1_veb_i_m :: #force_inline proc "contextless" (dst: Register inst_st1_veh_i_m :: #force_inline proc "contextless" (dst: Register, imm: i64, mem: Memory) -> Instruction { return Instruction{mnemonic = .ST1, operand_count = 3, length = 4, ops = {op_v_list(dst, VSHAPE_ELEM_H, 1), op_lane_index(imm), op_mem(mem), {}, {}}} } inst_st1_ves_i_m :: #force_inline proc "contextless" (dst: Register, imm: i64, mem: Memory) -> Instruction { return Instruction{mnemonic = .ST1, operand_count = 3, length = 4, ops = {op_v_list(dst, VSHAPE_ELEM_S, 1), op_lane_index(imm), op_mem(mem), {}, {}}} } inst_st1_ved_i_m :: #force_inline proc "contextless" (dst: Register, imm: i64, mem: Memory) -> Instruction { return Instruction{mnemonic = .ST1, operand_count = 3, length = 4, ops = {op_v_list(dst, VSHAPE_ELEM_D, 1), op_lane_index(imm), op_mem(mem), {}, {}}} } -emit_st1_v16b_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, mem: Memory) { append(instructions, inst_st1_v16b_m(dst, mem)) } -emit_st1_v8h_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, mem: Memory) { append(instructions, inst_st1_v8h_m(dst, mem)) } -emit_st1_v4s_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, mem: Memory) { append(instructions, inst_st1_v4s_m(dst, mem)) } -emit_st1_v2d_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, mem: Memory) { append(instructions, inst_st1_v2d_m(dst, mem)) } -emit_st1_veb_i_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64, mem: Memory) { append(instructions, inst_st1_veb_i_m(dst, imm, mem)) } -emit_st1_veh_i_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64, mem: Memory) { append(instructions, inst_st1_veh_i_m(dst, imm, mem)) } -emit_st1_ves_i_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64, mem: Memory) { append(instructions, inst_st1_ves_i_m(dst, imm, mem)) } -emit_st1_ved_i_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64, mem: Memory) { append(instructions, inst_st1_ved_i_m(dst, imm, mem)) } +emit_st1_v16b_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, mem: Memory) { append_elem(instructions, inst_st1_v16b_m(dst, mem)) } +emit_st1_v8h_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, mem: Memory) { append_elem(instructions, inst_st1_v8h_m(dst, mem)) } +emit_st1_v4s_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, mem: Memory) { append_elem(instructions, inst_st1_v4s_m(dst, mem)) } +emit_st1_v2d_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, mem: Memory) { append_elem(instructions, inst_st1_v2d_m(dst, mem)) } +emit_st1_veb_i_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64, mem: Memory) { append_elem(instructions, inst_st1_veb_i_m(dst, imm, mem)) } +emit_st1_veh_i_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64, mem: Memory) { append_elem(instructions, inst_st1_veh_i_m(dst, imm, mem)) } +emit_st1_ves_i_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64, mem: Memory) { append_elem(instructions, inst_st1_ves_i_m(dst, imm, mem)) } +emit_st1_ved_i_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64, mem: Memory) { append_elem(instructions, inst_st1_ved_i_m(dst, imm, mem)) } inst_st2_v16b_m :: #force_inline proc "contextless" (dst: Register, mem: Memory) -> Instruction { return Instruction{mnemonic = .ST2, operand_count = 2, length = 4, ops = {op_v_list(dst, VSHAPE_16B, 2), op_mem(mem), {}, {}, {}}} } inst_st2_veb_i_m :: #force_inline proc "contextless" (dst: Register, imm: i64, mem: Memory) -> Instruction { return Instruction{mnemonic = .ST2, operand_count = 3, length = 4, ops = {op_v_list(dst, VSHAPE_ELEM_B, 2), op_lane_index(imm), op_mem(mem), {}, {}}} } inst_st2_veh_i_m :: #force_inline proc "contextless" (dst: Register, imm: i64, mem: Memory) -> Instruction { return Instruction{mnemonic = .ST2, operand_count = 3, length = 4, ops = {op_v_list(dst, VSHAPE_ELEM_H, 2), op_lane_index(imm), op_mem(mem), {}, {}}} } inst_st2_ves_i_m :: #force_inline proc "contextless" (dst: Register, imm: i64, mem: Memory) -> Instruction { return Instruction{mnemonic = .ST2, operand_count = 3, length = 4, ops = {op_v_list(dst, VSHAPE_ELEM_S, 2), op_lane_index(imm), op_mem(mem), {}, {}}} } inst_st2_ved_i_m :: #force_inline proc "contextless" (dst: Register, imm: i64, mem: Memory) -> Instruction { return Instruction{mnemonic = .ST2, operand_count = 3, length = 4, ops = {op_v_list(dst, VSHAPE_ELEM_D, 2), op_lane_index(imm), op_mem(mem), {}, {}}} } -emit_st2_v16b_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, mem: Memory) { append(instructions, inst_st2_v16b_m(dst, mem)) } -emit_st2_veb_i_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64, mem: Memory) { append(instructions, inst_st2_veb_i_m(dst, imm, mem)) } -emit_st2_veh_i_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64, mem: Memory) { append(instructions, inst_st2_veh_i_m(dst, imm, mem)) } -emit_st2_ves_i_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64, mem: Memory) { append(instructions, inst_st2_ves_i_m(dst, imm, mem)) } -emit_st2_ved_i_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64, mem: Memory) { append(instructions, inst_st2_ved_i_m(dst, imm, mem)) } +emit_st2_v16b_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, mem: Memory) { append_elem(instructions, inst_st2_v16b_m(dst, mem)) } +emit_st2_veb_i_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64, mem: Memory) { append_elem(instructions, inst_st2_veb_i_m(dst, imm, mem)) } +emit_st2_veh_i_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64, mem: Memory) { append_elem(instructions, inst_st2_veh_i_m(dst, imm, mem)) } +emit_st2_ves_i_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64, mem: Memory) { append_elem(instructions, inst_st2_ves_i_m(dst, imm, mem)) } +emit_st2_ved_i_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64, mem: Memory) { append_elem(instructions, inst_st2_ved_i_m(dst, imm, mem)) } inst_st3_v16b_m :: #force_inline proc "contextless" (dst: Register, mem: Memory) -> Instruction { return Instruction{mnemonic = .ST3, operand_count = 2, length = 4, ops = {op_v_list(dst, VSHAPE_16B, 3), op_mem(mem), {}, {}, {}}} } inst_st3_veb_i_m :: #force_inline proc "contextless" (dst: Register, imm: i64, mem: Memory) -> Instruction { return Instruction{mnemonic = .ST3, operand_count = 3, length = 4, ops = {op_v_list(dst, VSHAPE_ELEM_B, 3), op_lane_index(imm), op_mem(mem), {}, {}}} } inst_st3_veh_i_m :: #force_inline proc "contextless" (dst: Register, imm: i64, mem: Memory) -> Instruction { return Instruction{mnemonic = .ST3, operand_count = 3, length = 4, ops = {op_v_list(dst, VSHAPE_ELEM_H, 3), op_lane_index(imm), op_mem(mem), {}, {}}} } inst_st3_ves_i_m :: #force_inline proc "contextless" (dst: Register, imm: i64, mem: Memory) -> Instruction { return Instruction{mnemonic = .ST3, operand_count = 3, length = 4, ops = {op_v_list(dst, VSHAPE_ELEM_S, 3), op_lane_index(imm), op_mem(mem), {}, {}}} } inst_st3_ved_i_m :: #force_inline proc "contextless" (dst: Register, imm: i64, mem: Memory) -> Instruction { return Instruction{mnemonic = .ST3, operand_count = 3, length = 4, ops = {op_v_list(dst, VSHAPE_ELEM_D, 3), op_lane_index(imm), op_mem(mem), {}, {}}} } -emit_st3_v16b_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, mem: Memory) { append(instructions, inst_st3_v16b_m(dst, mem)) } -emit_st3_veb_i_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64, mem: Memory) { append(instructions, inst_st3_veb_i_m(dst, imm, mem)) } -emit_st3_veh_i_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64, mem: Memory) { append(instructions, inst_st3_veh_i_m(dst, imm, mem)) } -emit_st3_ves_i_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64, mem: Memory) { append(instructions, inst_st3_ves_i_m(dst, imm, mem)) } -emit_st3_ved_i_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64, mem: Memory) { append(instructions, inst_st3_ved_i_m(dst, imm, mem)) } +emit_st3_v16b_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, mem: Memory) { append_elem(instructions, inst_st3_v16b_m(dst, mem)) } +emit_st3_veb_i_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64, mem: Memory) { append_elem(instructions, inst_st3_veb_i_m(dst, imm, mem)) } +emit_st3_veh_i_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64, mem: Memory) { append_elem(instructions, inst_st3_veh_i_m(dst, imm, mem)) } +emit_st3_ves_i_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64, mem: Memory) { append_elem(instructions, inst_st3_ves_i_m(dst, imm, mem)) } +emit_st3_ved_i_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64, mem: Memory) { append_elem(instructions, inst_st3_ved_i_m(dst, imm, mem)) } inst_st4_v16b_m :: #force_inline proc "contextless" (dst: Register, mem: Memory) -> Instruction { return Instruction{mnemonic = .ST4, operand_count = 2, length = 4, ops = {op_v_list(dst, VSHAPE_16B, 4), op_mem(mem), {}, {}, {}}} } inst_st4_veb_i_m :: #force_inline proc "contextless" (dst: Register, imm: i64, mem: Memory) -> Instruction { return Instruction{mnemonic = .ST4, operand_count = 3, length = 4, ops = {op_v_list(dst, VSHAPE_ELEM_B, 4), op_lane_index(imm), op_mem(mem), {}, {}}} } inst_st4_veh_i_m :: #force_inline proc "contextless" (dst: Register, imm: i64, mem: Memory) -> Instruction { return Instruction{mnemonic = .ST4, operand_count = 3, length = 4, ops = {op_v_list(dst, VSHAPE_ELEM_H, 4), op_lane_index(imm), op_mem(mem), {}, {}}} } inst_st4_ves_i_m :: #force_inline proc "contextless" (dst: Register, imm: i64, mem: Memory) -> Instruction { return Instruction{mnemonic = .ST4, operand_count = 3, length = 4, ops = {op_v_list(dst, VSHAPE_ELEM_S, 4), op_lane_index(imm), op_mem(mem), {}, {}}} } inst_st4_ved_i_m :: #force_inline proc "contextless" (dst: Register, imm: i64, mem: Memory) -> Instruction { return Instruction{mnemonic = .ST4, operand_count = 3, length = 4, ops = {op_v_list(dst, VSHAPE_ELEM_D, 4), op_lane_index(imm), op_mem(mem), {}, {}}} } -emit_st4_v16b_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, mem: Memory) { append(instructions, inst_st4_v16b_m(dst, mem)) } -emit_st4_veb_i_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64, mem: Memory) { append(instructions, inst_st4_veb_i_m(dst, imm, mem)) } -emit_st4_veh_i_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64, mem: Memory) { append(instructions, inst_st4_veh_i_m(dst, imm, mem)) } -emit_st4_ves_i_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64, mem: Memory) { append(instructions, inst_st4_ves_i_m(dst, imm, mem)) } -emit_st4_ved_i_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64, mem: Memory) { append(instructions, inst_st4_ved_i_m(dst, imm, mem)) } +emit_st4_v16b_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, mem: Memory) { append_elem(instructions, inst_st4_v16b_m(dst, mem)) } +emit_st4_veb_i_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64, mem: Memory) { append_elem(instructions, inst_st4_veb_i_m(dst, imm, mem)) } +emit_st4_veh_i_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64, mem: Memory) { append_elem(instructions, inst_st4_veh_i_m(dst, imm, mem)) } +emit_st4_ves_i_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64, mem: Memory) { append_elem(instructions, inst_st4_ves_i_m(dst, imm, mem)) } +emit_st4_ved_i_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64, mem: Memory) { append_elem(instructions, inst_st4_ved_i_m(dst, imm, mem)) } inst_ld1r_v16b_m :: #force_inline proc "contextless" (dst: Register, mem: Memory) -> Instruction { return Instruction{mnemonic = .LD1R, operand_count = 2, length = 4, ops = {op_v_list(dst, VSHAPE_16B, 1), op_mem(mem), {}, {}, {}}} } -emit_ld1r_v16b_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, mem: Memory) { append(instructions, inst_ld1r_v16b_m(dst, mem)) } +emit_ld1r_v16b_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, mem: Memory) { append_elem(instructions, inst_ld1r_v16b_m(dst, mem)) } inst_ld2r_v16b_m :: #force_inline proc "contextless" (dst: Register, mem: Memory) -> Instruction { return Instruction{mnemonic = .LD2R, operand_count = 2, length = 4, ops = {op_v_list(dst, VSHAPE_16B, 2), op_mem(mem), {}, {}, {}}} } -emit_ld2r_v16b_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, mem: Memory) { append(instructions, inst_ld2r_v16b_m(dst, mem)) } +emit_ld2r_v16b_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, mem: Memory) { append_elem(instructions, inst_ld2r_v16b_m(dst, mem)) } inst_ld3r_v16b_m :: #force_inline proc "contextless" (dst: Register, mem: Memory) -> Instruction { return Instruction{mnemonic = .LD3R, operand_count = 2, length = 4, ops = {op_v_list(dst, VSHAPE_16B, 3), op_mem(mem), {}, {}, {}}} } -emit_ld3r_v16b_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, mem: Memory) { append(instructions, inst_ld3r_v16b_m(dst, mem)) } +emit_ld3r_v16b_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, mem: Memory) { append_elem(instructions, inst_ld3r_v16b_m(dst, mem)) } inst_ld4r_v16b_m :: #force_inline proc "contextless" (dst: Register, mem: Memory) -> Instruction { return Instruction{mnemonic = .LD4R, operand_count = 2, length = 4, ops = {op_v_list(dst, VSHAPE_16B, 4), op_mem(mem), {}, {}, {}}} } -emit_ld4r_v16b_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, mem: Memory) { append(instructions, inst_ld4r_v16b_m(dst, mem)) } +emit_ld4r_v16b_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, mem: Memory) { append_elem(instructions, inst_ld4r_v16b_m(dst, mem)) } inst_subr_zb_p_zb_zb :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8, rz4: u8) -> Instruction { return Instruction{mnemonic = .SUBR, operand_count = 4, length = 4, ops = {op_z_b(rz), op_reg(Register(REG_P | (u16(rz2) & 0xF))), op_z_b(rz3), op_z_b(rz4), {}}} } inst_subr_zh_p_zh_zh :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8, rz4: u8) -> Instruction { return Instruction{mnemonic = .SUBR, operand_count = 4, length = 4, ops = {op_z_h(rz), op_reg(Register(REG_P | (u16(rz2) & 0xF))), op_z_h(rz3), op_z_h(rz4), {}}} } inst_subr_zs_p_zs_zs :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8, rz4: u8) -> Instruction { return Instruction{mnemonic = .SUBR, operand_count = 4, length = 4, ops = {op_z_s(rz), op_reg(Register(REG_P | (u16(rz2) & 0xF))), op_z_s(rz3), op_z_s(rz4), {}}} } inst_subr_zd_p_zd_zd :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8, rz4: u8) -> Instruction { return Instruction{mnemonic = .SUBR, operand_count = 4, length = 4, ops = {op_z_d(rz), op_reg(Register(REG_P | (u16(rz2) & 0xF))), op_z_d(rz3), op_z_d(rz4), {}}} } -emit_subr_zb_p_zb_zb :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append(instructions, inst_subr_zb_p_zb_zb(rz, rz2, rz3, rz4)) } -emit_subr_zh_p_zh_zh :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append(instructions, inst_subr_zh_p_zh_zh(rz, rz2, rz3, rz4)) } -emit_subr_zs_p_zs_zs :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append(instructions, inst_subr_zs_p_zs_zs(rz, rz2, rz3, rz4)) } -emit_subr_zd_p_zd_zd :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append(instructions, inst_subr_zd_p_zd_zd(rz, rz2, rz3, rz4)) } +emit_subr_zb_p_zb_zb :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append_elem(instructions, inst_subr_zb_p_zb_zb(rz, rz2, rz3, rz4)) } +emit_subr_zh_p_zh_zh :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append_elem(instructions, inst_subr_zh_p_zh_zh(rz, rz2, rz3, rz4)) } +emit_subr_zs_p_zs_zs :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append_elem(instructions, inst_subr_zs_p_zs_zs(rz, rz2, rz3, rz4)) } +emit_subr_zd_p_zd_zd :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append_elem(instructions, inst_subr_zd_p_zd_zd(rz, rz2, rz3, rz4)) } inst_asrr_zb_p_zb_zb :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8, rz4: u8) -> Instruction { return Instruction{mnemonic = .ASRR, operand_count = 4, length = 4, ops = {op_z_b(rz), op_reg(Register(REG_P | (u16(rz2) & 0xF))), op_z_b(rz3), op_z_b(rz4), {}}} } inst_asrr_zh_p_zh_zh :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8, rz4: u8) -> Instruction { return Instruction{mnemonic = .ASRR, operand_count = 4, length = 4, ops = {op_z_h(rz), op_reg(Register(REG_P | (u16(rz2) & 0xF))), op_z_h(rz3), op_z_h(rz4), {}}} } inst_asrr_zs_p_zs_zs :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8, rz4: u8) -> Instruction { return Instruction{mnemonic = .ASRR, operand_count = 4, length = 4, ops = {op_z_s(rz), op_reg(Register(REG_P | (u16(rz2) & 0xF))), op_z_s(rz3), op_z_s(rz4), {}}} } inst_asrr_zd_p_zd_zd :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8, rz4: u8) -> Instruction { return Instruction{mnemonic = .ASRR, operand_count = 4, length = 4, ops = {op_z_d(rz), op_reg(Register(REG_P | (u16(rz2) & 0xF))), op_z_d(rz3), op_z_d(rz4), {}}} } -emit_asrr_zb_p_zb_zb :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append(instructions, inst_asrr_zb_p_zb_zb(rz, rz2, rz3, rz4)) } -emit_asrr_zh_p_zh_zh :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append(instructions, inst_asrr_zh_p_zh_zh(rz, rz2, rz3, rz4)) } -emit_asrr_zs_p_zs_zs :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append(instructions, inst_asrr_zs_p_zs_zs(rz, rz2, rz3, rz4)) } -emit_asrr_zd_p_zd_zd :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append(instructions, inst_asrr_zd_p_zd_zd(rz, rz2, rz3, rz4)) } +emit_asrr_zb_p_zb_zb :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append_elem(instructions, inst_asrr_zb_p_zb_zb(rz, rz2, rz3, rz4)) } +emit_asrr_zh_p_zh_zh :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append_elem(instructions, inst_asrr_zh_p_zh_zh(rz, rz2, rz3, rz4)) } +emit_asrr_zs_p_zs_zs :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append_elem(instructions, inst_asrr_zs_p_zs_zs(rz, rz2, rz3, rz4)) } +emit_asrr_zd_p_zd_zd :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append_elem(instructions, inst_asrr_zd_p_zd_zd(rz, rz2, rz3, rz4)) } inst_lslr_zb_p_zb_zb :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8, rz4: u8) -> Instruction { return Instruction{mnemonic = .LSLR, operand_count = 4, length = 4, ops = {op_z_b(rz), op_reg(Register(REG_P | (u16(rz2) & 0xF))), op_z_b(rz3), op_z_b(rz4), {}}} } inst_lslr_zh_p_zh_zh :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8, rz4: u8) -> Instruction { return Instruction{mnemonic = .LSLR, operand_count = 4, length = 4, ops = {op_z_h(rz), op_reg(Register(REG_P | (u16(rz2) & 0xF))), op_z_h(rz3), op_z_h(rz4), {}}} } inst_lslr_zs_p_zs_zs :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8, rz4: u8) -> Instruction { return Instruction{mnemonic = .LSLR, operand_count = 4, length = 4, ops = {op_z_s(rz), op_reg(Register(REG_P | (u16(rz2) & 0xF))), op_z_s(rz3), op_z_s(rz4), {}}} } inst_lslr_zd_p_zd_zd :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8, rz4: u8) -> Instruction { return Instruction{mnemonic = .LSLR, operand_count = 4, length = 4, ops = {op_z_d(rz), op_reg(Register(REG_P | (u16(rz2) & 0xF))), op_z_d(rz3), op_z_d(rz4), {}}} } -emit_lslr_zb_p_zb_zb :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append(instructions, inst_lslr_zb_p_zb_zb(rz, rz2, rz3, rz4)) } -emit_lslr_zh_p_zh_zh :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append(instructions, inst_lslr_zh_p_zh_zh(rz, rz2, rz3, rz4)) } -emit_lslr_zs_p_zs_zs :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append(instructions, inst_lslr_zs_p_zs_zs(rz, rz2, rz3, rz4)) } -emit_lslr_zd_p_zd_zd :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append(instructions, inst_lslr_zd_p_zd_zd(rz, rz2, rz3, rz4)) } +emit_lslr_zb_p_zb_zb :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append_elem(instructions, inst_lslr_zb_p_zb_zb(rz, rz2, rz3, rz4)) } +emit_lslr_zh_p_zh_zh :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append_elem(instructions, inst_lslr_zh_p_zh_zh(rz, rz2, rz3, rz4)) } +emit_lslr_zs_p_zs_zs :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append_elem(instructions, inst_lslr_zs_p_zs_zs(rz, rz2, rz3, rz4)) } +emit_lslr_zd_p_zd_zd :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append_elem(instructions, inst_lslr_zd_p_zd_zd(rz, rz2, rz3, rz4)) } inst_lsrr_zb_p_zb_zb :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8, rz4: u8) -> Instruction { return Instruction{mnemonic = .LSRR, operand_count = 4, length = 4, ops = {op_z_b(rz), op_reg(Register(REG_P | (u16(rz2) & 0xF))), op_z_b(rz3), op_z_b(rz4), {}}} } inst_lsrr_zh_p_zh_zh :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8, rz4: u8) -> Instruction { return Instruction{mnemonic = .LSRR, operand_count = 4, length = 4, ops = {op_z_h(rz), op_reg(Register(REG_P | (u16(rz2) & 0xF))), op_z_h(rz3), op_z_h(rz4), {}}} } inst_lsrr_zs_p_zs_zs :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8, rz4: u8) -> Instruction { return Instruction{mnemonic = .LSRR, operand_count = 4, length = 4, ops = {op_z_s(rz), op_reg(Register(REG_P | (u16(rz2) & 0xF))), op_z_s(rz3), op_z_s(rz4), {}}} } inst_lsrr_zd_p_zd_zd :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8, rz4: u8) -> Instruction { return Instruction{mnemonic = .LSRR, operand_count = 4, length = 4, ops = {op_z_d(rz), op_reg(Register(REG_P | (u16(rz2) & 0xF))), op_z_d(rz3), op_z_d(rz4), {}}} } -emit_lsrr_zb_p_zb_zb :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append(instructions, inst_lsrr_zb_p_zb_zb(rz, rz2, rz3, rz4)) } -emit_lsrr_zh_p_zh_zh :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append(instructions, inst_lsrr_zh_p_zh_zh(rz, rz2, rz3, rz4)) } -emit_lsrr_zs_p_zs_zs :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append(instructions, inst_lsrr_zs_p_zs_zs(rz, rz2, rz3, rz4)) } -emit_lsrr_zd_p_zd_zd :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append(instructions, inst_lsrr_zd_p_zd_zd(rz, rz2, rz3, rz4)) } +emit_lsrr_zb_p_zb_zb :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append_elem(instructions, inst_lsrr_zb_p_zb_zb(rz, rz2, rz3, rz4)) } +emit_lsrr_zh_p_zh_zh :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append_elem(instructions, inst_lsrr_zh_p_zh_zh(rz, rz2, rz3, rz4)) } +emit_lsrr_zs_p_zs_zs :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append_elem(instructions, inst_lsrr_zs_p_zs_zs(rz, rz2, rz3, rz4)) } +emit_lsrr_zd_p_zd_zd :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append_elem(instructions, inst_lsrr_zd_p_zd_zd(rz, rz2, rz3, rz4)) } inst_ftsmul_zh_zh_zh :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8) -> Instruction { return Instruction{mnemonic = .FTSMUL, operand_count = 3, length = 4, ops = {op_z_h(rz), op_z_h(rz2), op_z_h(rz3), {}, {}}} } inst_ftsmul_zs_zs_zs :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8) -> Instruction { return Instruction{mnemonic = .FTSMUL, operand_count = 3, length = 4, ops = {op_z_s(rz), op_z_s(rz2), op_z_s(rz3), {}, {}}} } inst_ftsmul_zd_zd_zd :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8) -> Instruction { return Instruction{mnemonic = .FTSMUL, operand_count = 3, length = 4, ops = {op_z_d(rz), op_z_d(rz2), op_z_d(rz3), {}, {}}} } -emit_ftsmul_zh_zh_zh :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append(instructions, inst_ftsmul_zh_zh_zh(rz, rz2, rz3)) } -emit_ftsmul_zs_zs_zs :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append(instructions, inst_ftsmul_zs_zs_zs(rz, rz2, rz3)) } -emit_ftsmul_zd_zd_zd :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append(instructions, inst_ftsmul_zd_zd_zd(rz, rz2, rz3)) } +emit_ftsmul_zh_zh_zh :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append_elem(instructions, inst_ftsmul_zh_zh_zh(rz, rz2, rz3)) } +emit_ftsmul_zs_zs_zs :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append_elem(instructions, inst_ftsmul_zs_zs_zs(rz, rz2, rz3)) } +emit_ftsmul_zd_zd_zd :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append_elem(instructions, inst_ftsmul_zd_zd_zd(rz, rz2, rz3)) } inst_fsubr_zh_p_zh_zh :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8, rz4: u8) -> Instruction { return Instruction{mnemonic = .FSUBR, operand_count = 4, length = 4, ops = {op_z_h(rz), op_reg(Register(REG_P | (u16(rz2) & 0xF))), op_z_h(rz3), op_z_h(rz4), {}}} } inst_fsubr_zs_p_zs_zs :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8, rz4: u8) -> Instruction { return Instruction{mnemonic = .FSUBR, operand_count = 4, length = 4, ops = {op_z_s(rz), op_reg(Register(REG_P | (u16(rz2) & 0xF))), op_z_s(rz3), op_z_s(rz4), {}}} } inst_fsubr_zd_p_zd_zd :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8, rz4: u8) -> Instruction { return Instruction{mnemonic = .FSUBR, operand_count = 4, length = 4, ops = {op_z_d(rz), op_reg(Register(REG_P | (u16(rz2) & 0xF))), op_z_d(rz3), op_z_d(rz4), {}}} } -emit_fsubr_zh_p_zh_zh :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append(instructions, inst_fsubr_zh_p_zh_zh(rz, rz2, rz3, rz4)) } -emit_fsubr_zs_p_zs_zs :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append(instructions, inst_fsubr_zs_p_zs_zs(rz, rz2, rz3, rz4)) } -emit_fsubr_zd_p_zd_zd :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append(instructions, inst_fsubr_zd_p_zd_zd(rz, rz2, rz3, rz4)) } +emit_fsubr_zh_p_zh_zh :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append_elem(instructions, inst_fsubr_zh_p_zh_zh(rz, rz2, rz3, rz4)) } +emit_fsubr_zs_p_zs_zs :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append_elem(instructions, inst_fsubr_zs_p_zs_zs(rz, rz2, rz3, rz4)) } +emit_fsubr_zd_p_zd_zd :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append_elem(instructions, inst_fsubr_zd_p_zd_zd(rz, rz2, rz3, rz4)) } inst_fdivr_zh_p_zh_zh :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8, rz4: u8) -> Instruction { return Instruction{mnemonic = .FDIVR, operand_count = 4, length = 4, ops = {op_z_h(rz), op_reg(Register(REG_P | (u16(rz2) & 0xF))), op_z_h(rz3), op_z_h(rz4), {}}} } inst_fdivr_zs_p_zs_zs :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8, rz4: u8) -> Instruction { return Instruction{mnemonic = .FDIVR, operand_count = 4, length = 4, ops = {op_z_s(rz), op_reg(Register(REG_P | (u16(rz2) & 0xF))), op_z_s(rz3), op_z_s(rz4), {}}} } inst_fdivr_zd_p_zd_zd :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8, rz4: u8) -> Instruction { return Instruction{mnemonic = .FDIVR, operand_count = 4, length = 4, ops = {op_z_d(rz), op_reg(Register(REG_P | (u16(rz2) & 0xF))), op_z_d(rz3), op_z_d(rz4), {}}} } -emit_fdivr_zh_p_zh_zh :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append(instructions, inst_fdivr_zh_p_zh_zh(rz, rz2, rz3, rz4)) } -emit_fdivr_zs_p_zs_zs :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append(instructions, inst_fdivr_zs_p_zs_zs(rz, rz2, rz3, rz4)) } -emit_fdivr_zd_p_zd_zd :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append(instructions, inst_fdivr_zd_p_zd_zd(rz, rz2, rz3, rz4)) } +emit_fdivr_zh_p_zh_zh :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append_elem(instructions, inst_fdivr_zh_p_zh_zh(rz, rz2, rz3, rz4)) } +emit_fdivr_zs_p_zs_zs :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append_elem(instructions, inst_fdivr_zs_p_zs_zs(rz, rz2, rz3, rz4)) } +emit_fdivr_zd_p_zd_zd :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append_elem(instructions, inst_fdivr_zd_p_zd_zd(rz, rz2, rz3, rz4)) } inst_fnmla_zh_p_zh_zh :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8, rz4: u8) -> Instruction { return Instruction{mnemonic = .FNMLA, operand_count = 4, length = 4, ops = {op_z_h(rz), op_reg(Register(REG_P | (u16(rz2) & 0xF))), op_z_h(rz3), op_z_h(rz4), {}}} } inst_fnmla_zs_p_zs_zs :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8, rz4: u8) -> Instruction { return Instruction{mnemonic = .FNMLA, operand_count = 4, length = 4, ops = {op_z_s(rz), op_reg(Register(REG_P | (u16(rz2) & 0xF))), op_z_s(rz3), op_z_s(rz4), {}}} } inst_fnmla_zd_p_zd_zd :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8, rz4: u8) -> Instruction { return Instruction{mnemonic = .FNMLA, operand_count = 4, length = 4, ops = {op_z_d(rz), op_reg(Register(REG_P | (u16(rz2) & 0xF))), op_z_d(rz3), op_z_d(rz4), {}}} } -emit_fnmla_zh_p_zh_zh :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append(instructions, inst_fnmla_zh_p_zh_zh(rz, rz2, rz3, rz4)) } -emit_fnmla_zs_p_zs_zs :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append(instructions, inst_fnmla_zs_p_zs_zs(rz, rz2, rz3, rz4)) } -emit_fnmla_zd_p_zd_zd :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append(instructions, inst_fnmla_zd_p_zd_zd(rz, rz2, rz3, rz4)) } +emit_fnmla_zh_p_zh_zh :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append_elem(instructions, inst_fnmla_zh_p_zh_zh(rz, rz2, rz3, rz4)) } +emit_fnmla_zs_p_zs_zs :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append_elem(instructions, inst_fnmla_zs_p_zs_zs(rz, rz2, rz3, rz4)) } +emit_fnmla_zd_p_zd_zd :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append_elem(instructions, inst_fnmla_zd_p_zd_zd(rz, rz2, rz3, rz4)) } inst_fnmls_zh_p_zh_zh :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8, rz4: u8) -> Instruction { return Instruction{mnemonic = .FNMLS, operand_count = 4, length = 4, ops = {op_z_h(rz), op_reg(Register(REG_P | (u16(rz2) & 0xF))), op_z_h(rz3), op_z_h(rz4), {}}} } inst_fnmls_zs_p_zs_zs :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8, rz4: u8) -> Instruction { return Instruction{mnemonic = .FNMLS, operand_count = 4, length = 4, ops = {op_z_s(rz), op_reg(Register(REG_P | (u16(rz2) & 0xF))), op_z_s(rz3), op_z_s(rz4), {}}} } inst_fnmls_zd_p_zd_zd :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8, rz4: u8) -> Instruction { return Instruction{mnemonic = .FNMLS, operand_count = 4, length = 4, ops = {op_z_d(rz), op_reg(Register(REG_P | (u16(rz2) & 0xF))), op_z_d(rz3), op_z_d(rz4), {}}} } -emit_fnmls_zh_p_zh_zh :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append(instructions, inst_fnmls_zh_p_zh_zh(rz, rz2, rz3, rz4)) } -emit_fnmls_zs_p_zs_zs :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append(instructions, inst_fnmls_zs_p_zs_zs(rz, rz2, rz3, rz4)) } -emit_fnmls_zd_p_zd_zd :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append(instructions, inst_fnmls_zd_p_zd_zd(rz, rz2, rz3, rz4)) } +emit_fnmls_zh_p_zh_zh :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append_elem(instructions, inst_fnmls_zh_p_zh_zh(rz, rz2, rz3, rz4)) } +emit_fnmls_zs_p_zs_zs :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append_elem(instructions, inst_fnmls_zs_p_zs_zs(rz, rz2, rz3, rz4)) } +emit_fnmls_zd_p_zd_zd :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append_elem(instructions, inst_fnmls_zd_p_zd_zd(rz, rz2, rz3, rz4)) } inst_nand_pb_p_pb_pb :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8, rz4: u8) -> Instruction { return Instruction{mnemonic = .NAND, operand_count = 4, length = 4, ops = {op_reg(Register(REG_P | (u16(rz) & 0xF))), op_reg(Register(REG_P | (u16(rz2) & 0xF))), op_reg(Register(REG_P | (u16(rz3) & 0xF))), op_reg(Register(REG_P | (u16(rz4) & 0xF))), {}}} } -emit_nand_pb_p_pb_pb :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append(instructions, inst_nand_pb_p_pb_pb(rz, rz2, rz3, rz4)) } +emit_nand_pb_p_pb_pb :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append_elem(instructions, inst_nand_pb_p_pb_pb(rz, rz2, rz3, rz4)) } inst_nor_pb_p_pb_pb :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8, rz4: u8) -> Instruction { return Instruction{mnemonic = .NOR, operand_count = 4, length = 4, ops = {op_reg(Register(REG_P | (u16(rz) & 0xF))), op_reg(Register(REG_P | (u16(rz2) & 0xF))), op_reg(Register(REG_P | (u16(rz3) & 0xF))), op_reg(Register(REG_P | (u16(rz4) & 0xF))), {}}} } -emit_nor_pb_p_pb_pb :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append(instructions, inst_nor_pb_p_pb_pb(rz, rz2, rz3, rz4)) } +emit_nor_pb_p_pb_pb :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append_elem(instructions, inst_nor_pb_p_pb_pb(rz, rz2, rz3, rz4)) } inst_sel_pb_p_pb_pb :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8, rz4: u8) -> Instruction { return Instruction{mnemonic = .SEL, operand_count = 4, length = 4, ops = {op_reg(Register(REG_P | (u16(rz) & 0xF))), op_reg(Register(REG_P | (u16(rz2) & 0xF))), op_reg(Register(REG_P | (u16(rz3) & 0xF))), op_reg(Register(REG_P | (u16(rz4) & 0xF))), {}}} } -emit_sel_pb_p_pb_pb :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append(instructions, inst_sel_pb_p_pb_pb(rz, rz2, rz3, rz4)) } +emit_sel_pb_p_pb_pb :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append_elem(instructions, inst_sel_pb_p_pb_pb(rz, rz2, rz3, rz4)) } inst_orrs_pb_p_pb_pb :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8, rz4: u8) -> Instruction { return Instruction{mnemonic = .ORRS, operand_count = 4, length = 4, ops = {op_reg(Register(REG_P | (u16(rz) & 0xF))), op_reg(Register(REG_P | (u16(rz2) & 0xF))), op_reg(Register(REG_P | (u16(rz3) & 0xF))), op_reg(Register(REG_P | (u16(rz4) & 0xF))), {}}} } -emit_orrs_pb_p_pb_pb :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append(instructions, inst_orrs_pb_p_pb_pb(rz, rz2, rz3, rz4)) } +emit_orrs_pb_p_pb_pb :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append_elem(instructions, inst_orrs_pb_p_pb_pb(rz, rz2, rz3, rz4)) } inst_eors_pb_p_pb_pb :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8, rz4: u8) -> Instruction { return Instruction{mnemonic = .EORS, operand_count = 4, length = 4, ops = {op_reg(Register(REG_P | (u16(rz) & 0xF))), op_reg(Register(REG_P | (u16(rz2) & 0xF))), op_reg(Register(REG_P | (u16(rz3) & 0xF))), op_reg(Register(REG_P | (u16(rz4) & 0xF))), {}}} } -emit_eors_pb_p_pb_pb :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append(instructions, inst_eors_pb_p_pb_pb(rz, rz2, rz3, rz4)) } +emit_eors_pb_p_pb_pb :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append_elem(instructions, inst_eors_pb_p_pb_pb(rz, rz2, rz3, rz4)) } inst_nands_pb_p_pb_pb :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8, rz4: u8) -> Instruction { return Instruction{mnemonic = .NANDS, operand_count = 4, length = 4, ops = {op_reg(Register(REG_P | (u16(rz) & 0xF))), op_reg(Register(REG_P | (u16(rz2) & 0xF))), op_reg(Register(REG_P | (u16(rz3) & 0xF))), op_reg(Register(REG_P | (u16(rz4) & 0xF))), {}}} } -emit_nands_pb_p_pb_pb :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append(instructions, inst_nands_pb_p_pb_pb(rz, rz2, rz3, rz4)) } +emit_nands_pb_p_pb_pb :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append_elem(instructions, inst_nands_pb_p_pb_pb(rz, rz2, rz3, rz4)) } inst_nors_pb_p_pb_pb :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8, rz4: u8) -> Instruction { return Instruction{mnemonic = .NORS, operand_count = 4, length = 4, ops = {op_reg(Register(REG_P | (u16(rz) & 0xF))), op_reg(Register(REG_P | (u16(rz2) & 0xF))), op_reg(Register(REG_P | (u16(rz3) & 0xF))), op_reg(Register(REG_P | (u16(rz4) & 0xF))), {}}} } -emit_nors_pb_p_pb_pb :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append(instructions, inst_nors_pb_p_pb_pb(rz, rz2, rz3, rz4)) } +emit_nors_pb_p_pb_pb :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append_elem(instructions, inst_nors_pb_p_pb_pb(rz, rz2, rz3, rz4)) } inst_orns_pb_p_pb_pb :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8, rz4: u8) -> Instruction { return Instruction{mnemonic = .ORNS, operand_count = 4, length = 4, ops = {op_reg(Register(REG_P | (u16(rz) & 0xF))), op_reg(Register(REG_P | (u16(rz2) & 0xF))), op_reg(Register(REG_P | (u16(rz3) & 0xF))), op_reg(Register(REG_P | (u16(rz4) & 0xF))), {}}} } -emit_orns_pb_p_pb_pb :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append(instructions, inst_orns_pb_p_pb_pb(rz, rz2, rz3, rz4)) } +emit_orns_pb_p_pb_pb :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append_elem(instructions, inst_orns_pb_p_pb_pb(rz, rz2, rz3, rz4)) } inst_movs_pb_p_p :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8) -> Instruction { return Instruction{mnemonic = .MOVS, operand_count = 3, length = 4, ops = {op_reg(Register(REG_P | (u16(rz) & 0xF))), op_reg(Register(REG_P | (u16(rz2) & 0xF))), op_reg(Register(REG_P | (u16(rz3) & 0xF))), {}, {}}} } -emit_movs_pb_p_p :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append(instructions, inst_movs_pb_p_p(rz, rz2, rz3)) } +emit_movs_pb_p_p :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append_elem(instructions, inst_movs_pb_p_p(rz, rz2, rz3)) } inst_ptrue_pb_i :: #force_inline proc "contextless" (rz: u8, imm: i64) -> Instruction { return Instruction{mnemonic = .PTRUE, operand_count = 2, length = 4, ops = {op_reg(Register(REG_P | (u16(rz) & 0xF))), op_imm(imm, 4), {}, {}, {}}} } -emit_ptrue_pb_i :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, imm: i64) { append(instructions, inst_ptrue_pb_i(rz, imm)) } +emit_ptrue_pb_i :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, imm: i64) { append_elem(instructions, inst_ptrue_pb_i(rz, imm)) } inst_ptrues_pb_i :: #force_inline proc "contextless" (rz: u8, imm: i64) -> Instruction { return Instruction{mnemonic = .PTRUES, operand_count = 2, length = 4, ops = {op_reg(Register(REG_P | (u16(rz) & 0xF))), op_imm(imm, 4), {}, {}, {}}} } -emit_ptrues_pb_i :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, imm: i64) { append(instructions, inst_ptrues_pb_i(rz, imm)) } +emit_ptrues_pb_i :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, imm: i64) { append_elem(instructions, inst_ptrues_pb_i(rz, imm)) } inst_pfalse_pb :: #force_inline proc "contextless" (rz: u8) -> Instruction { return Instruction{mnemonic = .PFALSE, operand_count = 1, length = 4, ops = {op_reg(Register(REG_P | (u16(rz) & 0xF))), {}, {}, {}, {}}} } -emit_pfalse_pb :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8) { append(instructions, inst_pfalse_pb(rz)) } +emit_pfalse_pb :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8) { append_elem(instructions, inst_pfalse_pb(rz)) } inst_pfirst_pb_p_pb :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8) -> Instruction { return Instruction{mnemonic = .PFIRST, operand_count = 3, length = 4, ops = {op_reg(Register(REG_P | (u16(rz) & 0xF))), op_reg(Register(REG_P | (u16(rz2) & 0xF))), op_reg(Register(REG_P | (u16(rz3) & 0xF))), {}, {}}} } -emit_pfirst_pb_p_pb :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append(instructions, inst_pfirst_pb_p_pb(rz, rz2, rz3)) } +emit_pfirst_pb_p_pb :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append_elem(instructions, inst_pfirst_pb_p_pb(rz, rz2, rz3)) } inst_pnext_pb_p_pb :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8) -> Instruction { return Instruction{mnemonic = .PNEXT, operand_count = 3, length = 4, ops = {op_reg(Register(REG_P | (u16(rz) & 0xF))), op_reg(Register(REG_P | (u16(rz2) & 0xF))), op_reg(Register(REG_P | (u16(rz3) & 0xF))), {}, {}}} } -emit_pnext_pb_p_pb :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append(instructions, inst_pnext_pb_p_pb(rz, rz2, rz3)) } +emit_pnext_pb_p_pb :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append_elem(instructions, inst_pnext_pb_p_pb(rz, rz2, rz3)) } inst_brka_pb_p_pb :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8) -> Instruction { return Instruction{mnemonic = .BRKA, operand_count = 3, length = 4, ops = {op_reg(Register(REG_P | (u16(rz) & 0xF))), op_reg(Register(REG_P | (u16(rz2) & 0xF))), op_reg(Register(REG_P | (u16(rz3) & 0xF))), {}, {}}} } -emit_brka_pb_p_pb :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append(instructions, inst_brka_pb_p_pb(rz, rz2, rz3)) } +emit_brka_pb_p_pb :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append_elem(instructions, inst_brka_pb_p_pb(rz, rz2, rz3)) } inst_brkb_pb_p_pb :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8) -> Instruction { return Instruction{mnemonic = .BRKB, operand_count = 3, length = 4, ops = {op_reg(Register(REG_P | (u16(rz) & 0xF))), op_reg(Register(REG_P | (u16(rz2) & 0xF))), op_reg(Register(REG_P | (u16(rz3) & 0xF))), {}, {}}} } -emit_brkb_pb_p_pb :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append(instructions, inst_brkb_pb_p_pb(rz, rz2, rz3)) } +emit_brkb_pb_p_pb :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append_elem(instructions, inst_brkb_pb_p_pb(rz, rz2, rz3)) } inst_brkas_pb_p_pb :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8) -> Instruction { return Instruction{mnemonic = .BRKAS, operand_count = 3, length = 4, ops = {op_reg(Register(REG_P | (u16(rz) & 0xF))), op_reg(Register(REG_P | (u16(rz2) & 0xF))), op_reg(Register(REG_P | (u16(rz3) & 0xF))), {}, {}}} } -emit_brkas_pb_p_pb :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append(instructions, inst_brkas_pb_p_pb(rz, rz2, rz3)) } +emit_brkas_pb_p_pb :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append_elem(instructions, inst_brkas_pb_p_pb(rz, rz2, rz3)) } inst_brkbs_pb_p_pb :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8) -> Instruction { return Instruction{mnemonic = .BRKBS, operand_count = 3, length = 4, ops = {op_reg(Register(REG_P | (u16(rz) & 0xF))), op_reg(Register(REG_P | (u16(rz2) & 0xF))), op_reg(Register(REG_P | (u16(rz3) & 0xF))), {}, {}}} } -emit_brkbs_pb_p_pb :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append(instructions, inst_brkbs_pb_p_pb(rz, rz2, rz3)) } +emit_brkbs_pb_p_pb :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append_elem(instructions, inst_brkbs_pb_p_pb(rz, rz2, rz3)) } inst_brkpa_pb_p_pb_pb :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8, rz4: u8) -> Instruction { return Instruction{mnemonic = .BRKPA, operand_count = 4, length = 4, ops = {op_reg(Register(REG_P | (u16(rz) & 0xF))), op_reg(Register(REG_P | (u16(rz2) & 0xF))), op_reg(Register(REG_P | (u16(rz3) & 0xF))), op_reg(Register(REG_P | (u16(rz4) & 0xF))), {}}} } -emit_brkpa_pb_p_pb_pb :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append(instructions, inst_brkpa_pb_p_pb_pb(rz, rz2, rz3, rz4)) } +emit_brkpa_pb_p_pb_pb :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append_elem(instructions, inst_brkpa_pb_p_pb_pb(rz, rz2, rz3, rz4)) } inst_brkpb_pb_p_pb_pb :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8, rz4: u8) -> Instruction { return Instruction{mnemonic = .BRKPB, operand_count = 4, length = 4, ops = {op_reg(Register(REG_P | (u16(rz) & 0xF))), op_reg(Register(REG_P | (u16(rz2) & 0xF))), op_reg(Register(REG_P | (u16(rz3) & 0xF))), op_reg(Register(REG_P | (u16(rz4) & 0xF))), {}}} } -emit_brkpb_pb_p_pb_pb :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append(instructions, inst_brkpb_pb_p_pb_pb(rz, rz2, rz3, rz4)) } +emit_brkpb_pb_p_pb_pb :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append_elem(instructions, inst_brkpb_pb_p_pb_pb(rz, rz2, rz3, rz4)) } inst_brkn_pb_p_pb_pb :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8, rz4: u8) -> Instruction { return Instruction{mnemonic = .BRKN, operand_count = 4, length = 4, ops = {op_reg(Register(REG_P | (u16(rz) & 0xF))), op_reg(Register(REG_P | (u16(rz2) & 0xF))), op_reg(Register(REG_P | (u16(rz3) & 0xF))), op_reg(Register(REG_P | (u16(rz4) & 0xF))), {}}} } -emit_brkn_pb_p_pb_pb :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append(instructions, inst_brkn_pb_p_pb_pb(rz, rz2, rz3, rz4)) } +emit_brkn_pb_p_pb_pb :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append_elem(instructions, inst_brkn_pb_p_pb_pb(rz, rz2, rz3, rz4)) } inst_rdffr_pb :: #force_inline proc "contextless" (rz: u8) -> Instruction { return Instruction{mnemonic = .RDFFR, operand_count = 1, length = 4, ops = {op_reg(Register(REG_P | (u16(rz) & 0xF))), {}, {}, {}, {}}} } -emit_rdffr_pb :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8) { append(instructions, inst_rdffr_pb(rz)) } +emit_rdffr_pb :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8) { append_elem(instructions, inst_rdffr_pb(rz)) } inst_wrffr_pb :: #force_inline proc "contextless" (rz: u8) -> Instruction { return Instruction{mnemonic = .WRFFR, operand_count = 1, length = 4, ops = {op_reg(Register(REG_P | (u16(rz) & 0xF))), {}, {}, {}, {}}} } -emit_wrffr_pb :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8) { append(instructions, inst_wrffr_pb(rz)) } +emit_wrffr_pb :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8) { append_elem(instructions, inst_wrffr_pb(rz)) } inst_setffr_none :: #force_inline proc "contextless" () -> Instruction { return inst_none(.SETFFR) } -emit_setffr_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_setffr_none()) } +emit_setffr_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_setffr_none()) } inst_cmpeq_pb_p_zb_zb :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8, rz4: u8) -> Instruction { return Instruction{mnemonic = .CMPEQ, operand_count = 4, length = 4, ops = {op_reg(Register(REG_P | (u16(rz) & 0xF))), op_reg(Register(REG_P | (u16(rz2) & 0xF))), op_z_b(rz3), op_z_b(rz4), {}}} } inst_cmpeq_ph_p_zh_zh :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8, rz4: u8) -> Instruction { return Instruction{mnemonic = .CMPEQ, operand_count = 4, length = 4, ops = {op_reg(Register(REG_P | (u16(rz) & 0xF))), op_reg(Register(REG_P | (u16(rz2) & 0xF))), op_z_h(rz3), op_z_h(rz4), {}}} } inst_cmpeq_ps_p_zs_zs :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8, rz4: u8) -> Instruction { return Instruction{mnemonic = .CMPEQ, operand_count = 4, length = 4, ops = {op_reg(Register(REG_P | (u16(rz) & 0xF))), op_reg(Register(REG_P | (u16(rz2) & 0xF))), op_z_s(rz3), op_z_s(rz4), {}}} } inst_cmpeq_pd_p_zd_zd :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8, rz4: u8) -> Instruction { return Instruction{mnemonic = .CMPEQ, operand_count = 4, length = 4, ops = {op_reg(Register(REG_P | (u16(rz) & 0xF))), op_reg(Register(REG_P | (u16(rz2) & 0xF))), op_z_d(rz3), op_z_d(rz4), {}}} } -emit_cmpeq_pb_p_zb_zb :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append(instructions, inst_cmpeq_pb_p_zb_zb(rz, rz2, rz3, rz4)) } -emit_cmpeq_ph_p_zh_zh :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append(instructions, inst_cmpeq_ph_p_zh_zh(rz, rz2, rz3, rz4)) } -emit_cmpeq_ps_p_zs_zs :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append(instructions, inst_cmpeq_ps_p_zs_zs(rz, rz2, rz3, rz4)) } -emit_cmpeq_pd_p_zd_zd :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append(instructions, inst_cmpeq_pd_p_zd_zd(rz, rz2, rz3, rz4)) } +emit_cmpeq_pb_p_zb_zb :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append_elem(instructions, inst_cmpeq_pb_p_zb_zb(rz, rz2, rz3, rz4)) } +emit_cmpeq_ph_p_zh_zh :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append_elem(instructions, inst_cmpeq_ph_p_zh_zh(rz, rz2, rz3, rz4)) } +emit_cmpeq_ps_p_zs_zs :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append_elem(instructions, inst_cmpeq_ps_p_zs_zs(rz, rz2, rz3, rz4)) } +emit_cmpeq_pd_p_zd_zd :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append_elem(instructions, inst_cmpeq_pd_p_zd_zd(rz, rz2, rz3, rz4)) } inst_cmpne_pb_p_zb_zb :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8, rz4: u8) -> Instruction { return Instruction{mnemonic = .CMPNE, operand_count = 4, length = 4, ops = {op_reg(Register(REG_P | (u16(rz) & 0xF))), op_reg(Register(REG_P | (u16(rz2) & 0xF))), op_z_b(rz3), op_z_b(rz4), {}}} } inst_cmpne_ph_p_zh_zh :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8, rz4: u8) -> Instruction { return Instruction{mnemonic = .CMPNE, operand_count = 4, length = 4, ops = {op_reg(Register(REG_P | (u16(rz) & 0xF))), op_reg(Register(REG_P | (u16(rz2) & 0xF))), op_z_h(rz3), op_z_h(rz4), {}}} } inst_cmpne_ps_p_zs_zs :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8, rz4: u8) -> Instruction { return Instruction{mnemonic = .CMPNE, operand_count = 4, length = 4, ops = {op_reg(Register(REG_P | (u16(rz) & 0xF))), op_reg(Register(REG_P | (u16(rz2) & 0xF))), op_z_s(rz3), op_z_s(rz4), {}}} } inst_cmpne_pd_p_zd_zd :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8, rz4: u8) -> Instruction { return Instruction{mnemonic = .CMPNE, operand_count = 4, length = 4, ops = {op_reg(Register(REG_P | (u16(rz) & 0xF))), op_reg(Register(REG_P | (u16(rz2) & 0xF))), op_z_d(rz3), op_z_d(rz4), {}}} } -emit_cmpne_pb_p_zb_zb :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append(instructions, inst_cmpne_pb_p_zb_zb(rz, rz2, rz3, rz4)) } -emit_cmpne_ph_p_zh_zh :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append(instructions, inst_cmpne_ph_p_zh_zh(rz, rz2, rz3, rz4)) } -emit_cmpne_ps_p_zs_zs :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append(instructions, inst_cmpne_ps_p_zs_zs(rz, rz2, rz3, rz4)) } -emit_cmpne_pd_p_zd_zd :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append(instructions, inst_cmpne_pd_p_zd_zd(rz, rz2, rz3, rz4)) } +emit_cmpne_pb_p_zb_zb :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append_elem(instructions, inst_cmpne_pb_p_zb_zb(rz, rz2, rz3, rz4)) } +emit_cmpne_ph_p_zh_zh :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append_elem(instructions, inst_cmpne_ph_p_zh_zh(rz, rz2, rz3, rz4)) } +emit_cmpne_ps_p_zs_zs :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append_elem(instructions, inst_cmpne_ps_p_zs_zs(rz, rz2, rz3, rz4)) } +emit_cmpne_pd_p_zd_zd :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append_elem(instructions, inst_cmpne_pd_p_zd_zd(rz, rz2, rz3, rz4)) } inst_cmpge_pb_p_zb_zb :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8, rz4: u8) -> Instruction { return Instruction{mnemonic = .CMPGE, operand_count = 4, length = 4, ops = {op_reg(Register(REG_P | (u16(rz) & 0xF))), op_reg(Register(REG_P | (u16(rz2) & 0xF))), op_z_b(rz3), op_z_b(rz4), {}}} } inst_cmpge_ph_p_zh_zh :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8, rz4: u8) -> Instruction { return Instruction{mnemonic = .CMPGE, operand_count = 4, length = 4, ops = {op_reg(Register(REG_P | (u16(rz) & 0xF))), op_reg(Register(REG_P | (u16(rz2) & 0xF))), op_z_h(rz3), op_z_h(rz4), {}}} } inst_cmpge_ps_p_zs_zs :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8, rz4: u8) -> Instruction { return Instruction{mnemonic = .CMPGE, operand_count = 4, length = 4, ops = {op_reg(Register(REG_P | (u16(rz) & 0xF))), op_reg(Register(REG_P | (u16(rz2) & 0xF))), op_z_s(rz3), op_z_s(rz4), {}}} } inst_cmpge_pd_p_zd_zd :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8, rz4: u8) -> Instruction { return Instruction{mnemonic = .CMPGE, operand_count = 4, length = 4, ops = {op_reg(Register(REG_P | (u16(rz) & 0xF))), op_reg(Register(REG_P | (u16(rz2) & 0xF))), op_z_d(rz3), op_z_d(rz4), {}}} } -emit_cmpge_pb_p_zb_zb :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append(instructions, inst_cmpge_pb_p_zb_zb(rz, rz2, rz3, rz4)) } -emit_cmpge_ph_p_zh_zh :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append(instructions, inst_cmpge_ph_p_zh_zh(rz, rz2, rz3, rz4)) } -emit_cmpge_ps_p_zs_zs :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append(instructions, inst_cmpge_ps_p_zs_zs(rz, rz2, rz3, rz4)) } -emit_cmpge_pd_p_zd_zd :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append(instructions, inst_cmpge_pd_p_zd_zd(rz, rz2, rz3, rz4)) } +emit_cmpge_pb_p_zb_zb :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append_elem(instructions, inst_cmpge_pb_p_zb_zb(rz, rz2, rz3, rz4)) } +emit_cmpge_ph_p_zh_zh :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append_elem(instructions, inst_cmpge_ph_p_zh_zh(rz, rz2, rz3, rz4)) } +emit_cmpge_ps_p_zs_zs :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append_elem(instructions, inst_cmpge_ps_p_zs_zs(rz, rz2, rz3, rz4)) } +emit_cmpge_pd_p_zd_zd :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append_elem(instructions, inst_cmpge_pd_p_zd_zd(rz, rz2, rz3, rz4)) } inst_cmpgt_pb_p_zb_zb :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8, rz4: u8) -> Instruction { return Instruction{mnemonic = .CMPGT, operand_count = 4, length = 4, ops = {op_reg(Register(REG_P | (u16(rz) & 0xF))), op_reg(Register(REG_P | (u16(rz2) & 0xF))), op_z_b(rz3), op_z_b(rz4), {}}} } inst_cmpgt_ph_p_zh_zh :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8, rz4: u8) -> Instruction { return Instruction{mnemonic = .CMPGT, operand_count = 4, length = 4, ops = {op_reg(Register(REG_P | (u16(rz) & 0xF))), op_reg(Register(REG_P | (u16(rz2) & 0xF))), op_z_h(rz3), op_z_h(rz4), {}}} } inst_cmpgt_ps_p_zs_zs :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8, rz4: u8) -> Instruction { return Instruction{mnemonic = .CMPGT, operand_count = 4, length = 4, ops = {op_reg(Register(REG_P | (u16(rz) & 0xF))), op_reg(Register(REG_P | (u16(rz2) & 0xF))), op_z_s(rz3), op_z_s(rz4), {}}} } inst_cmpgt_pd_p_zd_zd :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8, rz4: u8) -> Instruction { return Instruction{mnemonic = .CMPGT, operand_count = 4, length = 4, ops = {op_reg(Register(REG_P | (u16(rz) & 0xF))), op_reg(Register(REG_P | (u16(rz2) & 0xF))), op_z_d(rz3), op_z_d(rz4), {}}} } -emit_cmpgt_pb_p_zb_zb :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append(instructions, inst_cmpgt_pb_p_zb_zb(rz, rz2, rz3, rz4)) } -emit_cmpgt_ph_p_zh_zh :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append(instructions, inst_cmpgt_ph_p_zh_zh(rz, rz2, rz3, rz4)) } -emit_cmpgt_ps_p_zs_zs :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append(instructions, inst_cmpgt_ps_p_zs_zs(rz, rz2, rz3, rz4)) } -emit_cmpgt_pd_p_zd_zd :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append(instructions, inst_cmpgt_pd_p_zd_zd(rz, rz2, rz3, rz4)) } +emit_cmpgt_pb_p_zb_zb :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append_elem(instructions, inst_cmpgt_pb_p_zb_zb(rz, rz2, rz3, rz4)) } +emit_cmpgt_ph_p_zh_zh :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append_elem(instructions, inst_cmpgt_ph_p_zh_zh(rz, rz2, rz3, rz4)) } +emit_cmpgt_ps_p_zs_zs :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append_elem(instructions, inst_cmpgt_ps_p_zs_zs(rz, rz2, rz3, rz4)) } +emit_cmpgt_pd_p_zd_zd :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append_elem(instructions, inst_cmpgt_pd_p_zd_zd(rz, rz2, rz3, rz4)) } inst_cmple_pb_p_zb_zb :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8, rz4: u8) -> Instruction { return Instruction{mnemonic = .CMPLE, operand_count = 4, length = 4, ops = {op_reg(Register(REG_P | (u16(rz) & 0xF))), op_reg(Register(REG_P | (u16(rz2) & 0xF))), op_z_b(rz3), op_z_b(rz4), {}}} } inst_cmple_ph_p_zh_zh :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8, rz4: u8) -> Instruction { return Instruction{mnemonic = .CMPLE, operand_count = 4, length = 4, ops = {op_reg(Register(REG_P | (u16(rz) & 0xF))), op_reg(Register(REG_P | (u16(rz2) & 0xF))), op_z_h(rz3), op_z_h(rz4), {}}} } inst_cmple_ps_p_zs_zs :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8, rz4: u8) -> Instruction { return Instruction{mnemonic = .CMPLE, operand_count = 4, length = 4, ops = {op_reg(Register(REG_P | (u16(rz) & 0xF))), op_reg(Register(REG_P | (u16(rz2) & 0xF))), op_z_s(rz3), op_z_s(rz4), {}}} } inst_cmple_pd_p_zd_zd :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8, rz4: u8) -> Instruction { return Instruction{mnemonic = .CMPLE, operand_count = 4, length = 4, ops = {op_reg(Register(REG_P | (u16(rz) & 0xF))), op_reg(Register(REG_P | (u16(rz2) & 0xF))), op_z_d(rz3), op_z_d(rz4), {}}} } -emit_cmple_pb_p_zb_zb :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append(instructions, inst_cmple_pb_p_zb_zb(rz, rz2, rz3, rz4)) } -emit_cmple_ph_p_zh_zh :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append(instructions, inst_cmple_ph_p_zh_zh(rz, rz2, rz3, rz4)) } -emit_cmple_ps_p_zs_zs :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append(instructions, inst_cmple_ps_p_zs_zs(rz, rz2, rz3, rz4)) } -emit_cmple_pd_p_zd_zd :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append(instructions, inst_cmple_pd_p_zd_zd(rz, rz2, rz3, rz4)) } +emit_cmple_pb_p_zb_zb :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append_elem(instructions, inst_cmple_pb_p_zb_zb(rz, rz2, rz3, rz4)) } +emit_cmple_ph_p_zh_zh :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append_elem(instructions, inst_cmple_ph_p_zh_zh(rz, rz2, rz3, rz4)) } +emit_cmple_ps_p_zs_zs :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append_elem(instructions, inst_cmple_ps_p_zs_zs(rz, rz2, rz3, rz4)) } +emit_cmple_pd_p_zd_zd :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append_elem(instructions, inst_cmple_pd_p_zd_zd(rz, rz2, rz3, rz4)) } inst_cmplt_pb_p_zb_zb :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8, rz4: u8) -> Instruction { return Instruction{mnemonic = .CMPLT, operand_count = 4, length = 4, ops = {op_reg(Register(REG_P | (u16(rz) & 0xF))), op_reg(Register(REG_P | (u16(rz2) & 0xF))), op_z_b(rz3), op_z_b(rz4), {}}} } inst_cmplt_ph_p_zh_zh :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8, rz4: u8) -> Instruction { return Instruction{mnemonic = .CMPLT, operand_count = 4, length = 4, ops = {op_reg(Register(REG_P | (u16(rz) & 0xF))), op_reg(Register(REG_P | (u16(rz2) & 0xF))), op_z_h(rz3), op_z_h(rz4), {}}} } inst_cmplt_ps_p_zs_zs :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8, rz4: u8) -> Instruction { return Instruction{mnemonic = .CMPLT, operand_count = 4, length = 4, ops = {op_reg(Register(REG_P | (u16(rz) & 0xF))), op_reg(Register(REG_P | (u16(rz2) & 0xF))), op_z_s(rz3), op_z_s(rz4), {}}} } inst_cmplt_pd_p_zd_zd :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8, rz4: u8) -> Instruction { return Instruction{mnemonic = .CMPLT, operand_count = 4, length = 4, ops = {op_reg(Register(REG_P | (u16(rz) & 0xF))), op_reg(Register(REG_P | (u16(rz2) & 0xF))), op_z_d(rz3), op_z_d(rz4), {}}} } -emit_cmplt_pb_p_zb_zb :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append(instructions, inst_cmplt_pb_p_zb_zb(rz, rz2, rz3, rz4)) } -emit_cmplt_ph_p_zh_zh :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append(instructions, inst_cmplt_ph_p_zh_zh(rz, rz2, rz3, rz4)) } -emit_cmplt_ps_p_zs_zs :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append(instructions, inst_cmplt_ps_p_zs_zs(rz, rz2, rz3, rz4)) } -emit_cmplt_pd_p_zd_zd :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append(instructions, inst_cmplt_pd_p_zd_zd(rz, rz2, rz3, rz4)) } +emit_cmplt_pb_p_zb_zb :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append_elem(instructions, inst_cmplt_pb_p_zb_zb(rz, rz2, rz3, rz4)) } +emit_cmplt_ph_p_zh_zh :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append_elem(instructions, inst_cmplt_ph_p_zh_zh(rz, rz2, rz3, rz4)) } +emit_cmplt_ps_p_zs_zs :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append_elem(instructions, inst_cmplt_ps_p_zs_zs(rz, rz2, rz3, rz4)) } +emit_cmplt_pd_p_zd_zd :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append_elem(instructions, inst_cmplt_pd_p_zd_zd(rz, rz2, rz3, rz4)) } inst_cmphi_pb_p_zb_zb :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8, rz4: u8) -> Instruction { return Instruction{mnemonic = .CMPHI, operand_count = 4, length = 4, ops = {op_reg(Register(REG_P | (u16(rz) & 0xF))), op_reg(Register(REG_P | (u16(rz2) & 0xF))), op_z_b(rz3), op_z_b(rz4), {}}} } inst_cmphi_ph_p_zh_zh :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8, rz4: u8) -> Instruction { return Instruction{mnemonic = .CMPHI, operand_count = 4, length = 4, ops = {op_reg(Register(REG_P | (u16(rz) & 0xF))), op_reg(Register(REG_P | (u16(rz2) & 0xF))), op_z_h(rz3), op_z_h(rz4), {}}} } inst_cmphi_ps_p_zs_zs :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8, rz4: u8) -> Instruction { return Instruction{mnemonic = .CMPHI, operand_count = 4, length = 4, ops = {op_reg(Register(REG_P | (u16(rz) & 0xF))), op_reg(Register(REG_P | (u16(rz2) & 0xF))), op_z_s(rz3), op_z_s(rz4), {}}} } inst_cmphi_pd_p_zd_zd :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8, rz4: u8) -> Instruction { return Instruction{mnemonic = .CMPHI, operand_count = 4, length = 4, ops = {op_reg(Register(REG_P | (u16(rz) & 0xF))), op_reg(Register(REG_P | (u16(rz2) & 0xF))), op_z_d(rz3), op_z_d(rz4), {}}} } -emit_cmphi_pb_p_zb_zb :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append(instructions, inst_cmphi_pb_p_zb_zb(rz, rz2, rz3, rz4)) } -emit_cmphi_ph_p_zh_zh :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append(instructions, inst_cmphi_ph_p_zh_zh(rz, rz2, rz3, rz4)) } -emit_cmphi_ps_p_zs_zs :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append(instructions, inst_cmphi_ps_p_zs_zs(rz, rz2, rz3, rz4)) } -emit_cmphi_pd_p_zd_zd :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append(instructions, inst_cmphi_pd_p_zd_zd(rz, rz2, rz3, rz4)) } +emit_cmphi_pb_p_zb_zb :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append_elem(instructions, inst_cmphi_pb_p_zb_zb(rz, rz2, rz3, rz4)) } +emit_cmphi_ph_p_zh_zh :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append_elem(instructions, inst_cmphi_ph_p_zh_zh(rz, rz2, rz3, rz4)) } +emit_cmphi_ps_p_zs_zs :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append_elem(instructions, inst_cmphi_ps_p_zs_zs(rz, rz2, rz3, rz4)) } +emit_cmphi_pd_p_zd_zd :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append_elem(instructions, inst_cmphi_pd_p_zd_zd(rz, rz2, rz3, rz4)) } inst_cmphs_pb_p_zb_zb :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8, rz4: u8) -> Instruction { return Instruction{mnemonic = .CMPHS, operand_count = 4, length = 4, ops = {op_reg(Register(REG_P | (u16(rz) & 0xF))), op_reg(Register(REG_P | (u16(rz2) & 0xF))), op_z_b(rz3), op_z_b(rz4), {}}} } inst_cmphs_ph_p_zh_zh :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8, rz4: u8) -> Instruction { return Instruction{mnemonic = .CMPHS, operand_count = 4, length = 4, ops = {op_reg(Register(REG_P | (u16(rz) & 0xF))), op_reg(Register(REG_P | (u16(rz2) & 0xF))), op_z_h(rz3), op_z_h(rz4), {}}} } inst_cmphs_ps_p_zs_zs :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8, rz4: u8) -> Instruction { return Instruction{mnemonic = .CMPHS, operand_count = 4, length = 4, ops = {op_reg(Register(REG_P | (u16(rz) & 0xF))), op_reg(Register(REG_P | (u16(rz2) & 0xF))), op_z_s(rz3), op_z_s(rz4), {}}} } inst_cmphs_pd_p_zd_zd :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8, rz4: u8) -> Instruction { return Instruction{mnemonic = .CMPHS, operand_count = 4, length = 4, ops = {op_reg(Register(REG_P | (u16(rz) & 0xF))), op_reg(Register(REG_P | (u16(rz2) & 0xF))), op_z_d(rz3), op_z_d(rz4), {}}} } -emit_cmphs_pb_p_zb_zb :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append(instructions, inst_cmphs_pb_p_zb_zb(rz, rz2, rz3, rz4)) } -emit_cmphs_ph_p_zh_zh :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append(instructions, inst_cmphs_ph_p_zh_zh(rz, rz2, rz3, rz4)) } -emit_cmphs_ps_p_zs_zs :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append(instructions, inst_cmphs_ps_p_zs_zs(rz, rz2, rz3, rz4)) } -emit_cmphs_pd_p_zd_zd :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append(instructions, inst_cmphs_pd_p_zd_zd(rz, rz2, rz3, rz4)) } +emit_cmphs_pb_p_zb_zb :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append_elem(instructions, inst_cmphs_pb_p_zb_zb(rz, rz2, rz3, rz4)) } +emit_cmphs_ph_p_zh_zh :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append_elem(instructions, inst_cmphs_ph_p_zh_zh(rz, rz2, rz3, rz4)) } +emit_cmphs_ps_p_zs_zs :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append_elem(instructions, inst_cmphs_ps_p_zs_zs(rz, rz2, rz3, rz4)) } +emit_cmphs_pd_p_zd_zd :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append_elem(instructions, inst_cmphs_pd_p_zd_zd(rz, rz2, rz3, rz4)) } inst_cmplo_pb_p_zb_zb :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8, rz4: u8) -> Instruction { return Instruction{mnemonic = .CMPLO, operand_count = 4, length = 4, ops = {op_reg(Register(REG_P | (u16(rz) & 0xF))), op_reg(Register(REG_P | (u16(rz2) & 0xF))), op_z_b(rz3), op_z_b(rz4), {}}} } inst_cmplo_ph_p_zh_zh :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8, rz4: u8) -> Instruction { return Instruction{mnemonic = .CMPLO, operand_count = 4, length = 4, ops = {op_reg(Register(REG_P | (u16(rz) & 0xF))), op_reg(Register(REG_P | (u16(rz2) & 0xF))), op_z_h(rz3), op_z_h(rz4), {}}} } inst_cmplo_ps_p_zs_zs :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8, rz4: u8) -> Instruction { return Instruction{mnemonic = .CMPLO, operand_count = 4, length = 4, ops = {op_reg(Register(REG_P | (u16(rz) & 0xF))), op_reg(Register(REG_P | (u16(rz2) & 0xF))), op_z_s(rz3), op_z_s(rz4), {}}} } inst_cmplo_pd_p_zd_zd :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8, rz4: u8) -> Instruction { return Instruction{mnemonic = .CMPLO, operand_count = 4, length = 4, ops = {op_reg(Register(REG_P | (u16(rz) & 0xF))), op_reg(Register(REG_P | (u16(rz2) & 0xF))), op_z_d(rz3), op_z_d(rz4), {}}} } -emit_cmplo_pb_p_zb_zb :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append(instructions, inst_cmplo_pb_p_zb_zb(rz, rz2, rz3, rz4)) } -emit_cmplo_ph_p_zh_zh :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append(instructions, inst_cmplo_ph_p_zh_zh(rz, rz2, rz3, rz4)) } -emit_cmplo_ps_p_zs_zs :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append(instructions, inst_cmplo_ps_p_zs_zs(rz, rz2, rz3, rz4)) } -emit_cmplo_pd_p_zd_zd :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append(instructions, inst_cmplo_pd_p_zd_zd(rz, rz2, rz3, rz4)) } +emit_cmplo_pb_p_zb_zb :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append_elem(instructions, inst_cmplo_pb_p_zb_zb(rz, rz2, rz3, rz4)) } +emit_cmplo_ph_p_zh_zh :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append_elem(instructions, inst_cmplo_ph_p_zh_zh(rz, rz2, rz3, rz4)) } +emit_cmplo_ps_p_zs_zs :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append_elem(instructions, inst_cmplo_ps_p_zs_zs(rz, rz2, rz3, rz4)) } +emit_cmplo_pd_p_zd_zd :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append_elem(instructions, inst_cmplo_pd_p_zd_zd(rz, rz2, rz3, rz4)) } inst_cmpls_pb_p_zb_zb :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8, rz4: u8) -> Instruction { return Instruction{mnemonic = .CMPLS, operand_count = 4, length = 4, ops = {op_reg(Register(REG_P | (u16(rz) & 0xF))), op_reg(Register(REG_P | (u16(rz2) & 0xF))), op_z_b(rz3), op_z_b(rz4), {}}} } inst_cmpls_ph_p_zh_zh :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8, rz4: u8) -> Instruction { return Instruction{mnemonic = .CMPLS, operand_count = 4, length = 4, ops = {op_reg(Register(REG_P | (u16(rz) & 0xF))), op_reg(Register(REG_P | (u16(rz2) & 0xF))), op_z_h(rz3), op_z_h(rz4), {}}} } inst_cmpls_ps_p_zs_zs :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8, rz4: u8) -> Instruction { return Instruction{mnemonic = .CMPLS, operand_count = 4, length = 4, ops = {op_reg(Register(REG_P | (u16(rz) & 0xF))), op_reg(Register(REG_P | (u16(rz2) & 0xF))), op_z_s(rz3), op_z_s(rz4), {}}} } inst_cmpls_pd_p_zd_zd :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8, rz4: u8) -> Instruction { return Instruction{mnemonic = .CMPLS, operand_count = 4, length = 4, ops = {op_reg(Register(REG_P | (u16(rz) & 0xF))), op_reg(Register(REG_P | (u16(rz2) & 0xF))), op_z_d(rz3), op_z_d(rz4), {}}} } -emit_cmpls_pb_p_zb_zb :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append(instructions, inst_cmpls_pb_p_zb_zb(rz, rz2, rz3, rz4)) } -emit_cmpls_ph_p_zh_zh :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append(instructions, inst_cmpls_ph_p_zh_zh(rz, rz2, rz3, rz4)) } -emit_cmpls_ps_p_zs_zs :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append(instructions, inst_cmpls_ps_p_zs_zs(rz, rz2, rz3, rz4)) } -emit_cmpls_pd_p_zd_zd :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append(instructions, inst_cmpls_pd_p_zd_zd(rz, rz2, rz3, rz4)) } +emit_cmpls_pb_p_zb_zb :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append_elem(instructions, inst_cmpls_pb_p_zb_zb(rz, rz2, rz3, rz4)) } +emit_cmpls_ph_p_zh_zh :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append_elem(instructions, inst_cmpls_ph_p_zh_zh(rz, rz2, rz3, rz4)) } +emit_cmpls_ps_p_zs_zs :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append_elem(instructions, inst_cmpls_ps_p_zs_zs(rz, rz2, rz3, rz4)) } +emit_cmpls_pd_p_zd_zd :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append_elem(instructions, inst_cmpls_pd_p_zd_zd(rz, rz2, rz3, rz4)) } inst_fcmne_ph_p_zh_zh :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8, rz4: u8) -> Instruction { return Instruction{mnemonic = .FCMNE, operand_count = 4, length = 4, ops = {op_reg(Register(REG_P | (u16(rz) & 0xF))), op_reg(Register(REG_P | (u16(rz2) & 0xF))), op_z_h(rz3), op_z_h(rz4), {}}} } inst_fcmne_ps_p_zs_zs :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8, rz4: u8) -> Instruction { return Instruction{mnemonic = .FCMNE, operand_count = 4, length = 4, ops = {op_reg(Register(REG_P | (u16(rz) & 0xF))), op_reg(Register(REG_P | (u16(rz2) & 0xF))), op_z_s(rz3), op_z_s(rz4), {}}} } inst_fcmne_pd_p_zd_zd :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8, rz4: u8) -> Instruction { return Instruction{mnemonic = .FCMNE, operand_count = 4, length = 4, ops = {op_reg(Register(REG_P | (u16(rz) & 0xF))), op_reg(Register(REG_P | (u16(rz2) & 0xF))), op_z_d(rz3), op_z_d(rz4), {}}} } -emit_fcmne_ph_p_zh_zh :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append(instructions, inst_fcmne_ph_p_zh_zh(rz, rz2, rz3, rz4)) } -emit_fcmne_ps_p_zs_zs :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append(instructions, inst_fcmne_ps_p_zs_zs(rz, rz2, rz3, rz4)) } -emit_fcmne_pd_p_zd_zd :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append(instructions, inst_fcmne_pd_p_zd_zd(rz, rz2, rz3, rz4)) } +emit_fcmne_ph_p_zh_zh :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append_elem(instructions, inst_fcmne_ph_p_zh_zh(rz, rz2, rz3, rz4)) } +emit_fcmne_ps_p_zs_zs :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append_elem(instructions, inst_fcmne_ps_p_zs_zs(rz, rz2, rz3, rz4)) } +emit_fcmne_pd_p_zd_zd :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append_elem(instructions, inst_fcmne_pd_p_zd_zd(rz, rz2, rz3, rz4)) } inst_fcmuo_ph_p_zh_zh :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8, rz4: u8) -> Instruction { return Instruction{mnemonic = .FCMUO, operand_count = 4, length = 4, ops = {op_reg(Register(REG_P | (u16(rz) & 0xF))), op_reg(Register(REG_P | (u16(rz2) & 0xF))), op_z_h(rz3), op_z_h(rz4), {}}} } inst_fcmuo_ps_p_zs_zs :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8, rz4: u8) -> Instruction { return Instruction{mnemonic = .FCMUO, operand_count = 4, length = 4, ops = {op_reg(Register(REG_P | (u16(rz) & 0xF))), op_reg(Register(REG_P | (u16(rz2) & 0xF))), op_z_s(rz3), op_z_s(rz4), {}}} } inst_fcmuo_pd_p_zd_zd :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8, rz4: u8) -> Instruction { return Instruction{mnemonic = .FCMUO, operand_count = 4, length = 4, ops = {op_reg(Register(REG_P | (u16(rz) & 0xF))), op_reg(Register(REG_P | (u16(rz2) & 0xF))), op_z_d(rz3), op_z_d(rz4), {}}} } -emit_fcmuo_ph_p_zh_zh :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append(instructions, inst_fcmuo_ph_p_zh_zh(rz, rz2, rz3, rz4)) } -emit_fcmuo_ps_p_zs_zs :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append(instructions, inst_fcmuo_ps_p_zs_zs(rz, rz2, rz3, rz4)) } -emit_fcmuo_pd_p_zd_zd :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append(instructions, inst_fcmuo_pd_p_zd_zd(rz, rz2, rz3, rz4)) } +emit_fcmuo_ph_p_zh_zh :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append_elem(instructions, inst_fcmuo_ph_p_zh_zh(rz, rz2, rz3, rz4)) } +emit_fcmuo_ps_p_zs_zs :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append_elem(instructions, inst_fcmuo_ps_p_zs_zs(rz, rz2, rz3, rz4)) } +emit_fcmuo_pd_p_zd_zd :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append_elem(instructions, inst_fcmuo_pd_p_zd_zd(rz, rz2, rz3, rz4)) } inst_insr_zb_r :: #force_inline proc "contextless" (rz: u8, src: Register) -> Instruction { return Instruction{mnemonic = .INSR, operand_count = 2, length = 4, ops = {op_z_b(rz), op_reg(src), {}, {}, {}}} } inst_insr_zh_r :: #force_inline proc "contextless" (rz: u8, src: Register) -> Instruction { return Instruction{mnemonic = .INSR, operand_count = 2, length = 4, ops = {op_z_h(rz), op_reg(src), {}, {}, {}}} } inst_insr_zs_r :: #force_inline proc "contextless" (rz: u8, src: Register) -> Instruction { return Instruction{mnemonic = .INSR, operand_count = 2, length = 4, ops = {op_z_s(rz), op_reg(src), {}, {}, {}}} } inst_insr_zd_r :: #force_inline proc "contextless" (rz: u8, src: Register) -> Instruction { return Instruction{mnemonic = .INSR, operand_count = 2, length = 4, ops = {op_z_d(rz), op_reg(src), {}, {}, {}}} } -emit_insr_zb_r :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, src: Register) { append(instructions, inst_insr_zb_r(rz, src)) } -emit_insr_zh_r :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, src: Register) { append(instructions, inst_insr_zh_r(rz, src)) } -emit_insr_zs_r :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, src: Register) { append(instructions, inst_insr_zs_r(rz, src)) } -emit_insr_zd_r :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, src: Register) { append(instructions, inst_insr_zd_r(rz, src)) } +emit_insr_zb_r :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, src: Register) { append_elem(instructions, inst_insr_zb_r(rz, src)) } +emit_insr_zh_r :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, src: Register) { append_elem(instructions, inst_insr_zh_r(rz, src)) } +emit_insr_zs_r :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, src: Register) { append_elem(instructions, inst_insr_zs_r(rz, src)) } +emit_insr_zd_r :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, src: Register) { append_elem(instructions, inst_insr_zd_r(rz, src)) } inst_cpy_zb_p_r :: #force_inline proc "contextless" (rz: u8, rz2: u8, src: Register) -> Instruction { return Instruction{mnemonic = .CPY, operand_count = 3, length = 4, ops = {op_z_b(rz), op_reg(Register(REG_P | (u16(rz2) & 0xF))), op_reg(src), {}, {}}} } inst_cpy_zh_p_r :: #force_inline proc "contextless" (rz: u8, rz2: u8, src: Register) -> Instruction { return Instruction{mnemonic = .CPY, operand_count = 3, length = 4, ops = {op_z_h(rz), op_reg(Register(REG_P | (u16(rz2) & 0xF))), op_reg(src), {}, {}}} } inst_cpy_zs_p_r :: #force_inline proc "contextless" (rz: u8, rz2: u8, src: Register) -> Instruction { return Instruction{mnemonic = .CPY, operand_count = 3, length = 4, ops = {op_z_s(rz), op_reg(Register(REG_P | (u16(rz2) & 0xF))), op_reg(src), {}, {}}} } inst_cpy_zd_p_r :: #force_inline proc "contextless" (rz: u8, rz2: u8, src: Register) -> Instruction { return Instruction{mnemonic = .CPY, operand_count = 3, length = 4, ops = {op_z_d(rz), op_reg(Register(REG_P | (u16(rz2) & 0xF))), op_reg(src), {}, {}}} } -emit_cpy_zb_p_r :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, src: Register) { append(instructions, inst_cpy_zb_p_r(rz, rz2, src)) } -emit_cpy_zh_p_r :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, src: Register) { append(instructions, inst_cpy_zh_p_r(rz, rz2, src)) } -emit_cpy_zs_p_r :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, src: Register) { append(instructions, inst_cpy_zs_p_r(rz, rz2, src)) } -emit_cpy_zd_p_r :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, src: Register) { append(instructions, inst_cpy_zd_p_r(rz, rz2, src)) } +emit_cpy_zb_p_r :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, src: Register) { append_elem(instructions, inst_cpy_zb_p_r(rz, rz2, src)) } +emit_cpy_zh_p_r :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, src: Register) { append_elem(instructions, inst_cpy_zh_p_r(rz, rz2, src)) } +emit_cpy_zs_p_r :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, src: Register) { append_elem(instructions, inst_cpy_zs_p_r(rz, rz2, src)) } +emit_cpy_zd_p_r :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, src: Register) { append_elem(instructions, inst_cpy_zd_p_r(rz, rz2, src)) } inst_compact_zs_p_zs :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8) -> Instruction { return Instruction{mnemonic = .COMPACT, operand_count = 3, length = 4, ops = {op_z_s(rz), op_reg(Register(REG_P | (u16(rz2) & 0xF))), op_z_s(rz3), {}, {}}} } inst_compact_zd_p_zd :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8) -> Instruction { return Instruction{mnemonic = .COMPACT, operand_count = 3, length = 4, ops = {op_z_d(rz), op_reg(Register(REG_P | (u16(rz2) & 0xF))), op_z_d(rz3), {}, {}}} } -emit_compact_zs_p_zs :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append(instructions, inst_compact_zs_p_zs(rz, rz2, rz3)) } -emit_compact_zd_p_zd :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append(instructions, inst_compact_zd_p_zd(rz, rz2, rz3)) } +emit_compact_zs_p_zs :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append_elem(instructions, inst_compact_zs_p_zs(rz, rz2, rz3)) } +emit_compact_zd_p_zd :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append_elem(instructions, inst_compact_zd_p_zd(rz, rz2, rz3)) } inst_ld1b_zb_p_m :: #force_inline proc "contextless" (rz: u8, rz2: u8, mem: Memory) -> Instruction { return Instruction{mnemonic = .LD1B, operand_count = 3, length = 4, ops = {op_v_list(Register(REG_Z | (u16(rz) & 0x1F)), ZSHAPE_B, 1), op_reg(Register(REG_P | (u16(rz2) & 0xF))), op_mem(mem), {}, {}}} } inst_ld1b_zs_p_m :: #force_inline proc "contextless" (rz: u8, rz2: u8, mem: Memory) -> Instruction { return Instruction{mnemonic = .LD1B, operand_count = 3, length = 4, ops = {op_v_list(Register(REG_Z | (u16(rz) & 0x1F)), ZSHAPE_S, 1), op_reg(Register(REG_P | (u16(rz2) & 0xF))), op_mem(mem), {}, {}}} } inst_ld1b_zd_p_m :: #force_inline proc "contextless" (rz: u8, rz2: u8, mem: Memory) -> Instruction { return Instruction{mnemonic = .LD1B, operand_count = 3, length = 4, ops = {op_v_list(Register(REG_Z | (u16(rz) & 0x1F)), ZSHAPE_D, 1), op_reg(Register(REG_P | (u16(rz2) & 0xF))), op_mem(mem), {}, {}}} } inst_ld1b_i_p_m :: #force_inline proc "contextless" (imm: i64, rz1: u8, mem: Memory) -> Instruction { return Instruction{mnemonic = .LD1B, operand_count = 3, length = 4, ops = {op_imm(imm, 4), op_reg(Register(REG_P | (u16(rz1) & 0xF))), op_mem(mem), {}, {}}} } inst_ld1b_zpb_pnz_m :: #force_inline proc "contextless" (rz: u8, rz2: u8, mem: Memory) -> Instruction { return Instruction{mnemonic = .LD1B, operand_count = 3, length = 4, ops = {op_z_b(rz), op_reg(Register(REG_PN | (8 + (u16(rz2) & 0x7)))), op_mem(mem), {}, {}}} } inst_ld1b_zqb_pnz_m :: #force_inline proc "contextless" (rz: u8, rz2: u8, mem: Memory) -> Instruction { return Instruction{mnemonic = .LD1B, operand_count = 3, length = 4, ops = {op_z_b(rz), op_reg(Register(REG_PN | (8 + (u16(rz2) & 0x7)))), op_mem(mem), {}, {}}} } -emit_ld1b_zb_p_m :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, mem: Memory) { append(instructions, inst_ld1b_zb_p_m(rz, rz2, mem)) } -emit_ld1b_zs_p_m :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, mem: Memory) { append(instructions, inst_ld1b_zs_p_m(rz, rz2, mem)) } -emit_ld1b_zd_p_m :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, mem: Memory) { append(instructions, inst_ld1b_zd_p_m(rz, rz2, mem)) } -emit_ld1b_i_p_m :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, rz1: u8, mem: Memory) { append(instructions, inst_ld1b_i_p_m(imm, rz1, mem)) } -emit_ld1b_zpb_pnz_m :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, mem: Memory) { append(instructions, inst_ld1b_zpb_pnz_m(rz, rz2, mem)) } -emit_ld1b_zqb_pnz_m :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, mem: Memory) { append(instructions, inst_ld1b_zqb_pnz_m(rz, rz2, mem)) } +emit_ld1b_zb_p_m :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, mem: Memory) { append_elem(instructions, inst_ld1b_zb_p_m(rz, rz2, mem)) } +emit_ld1b_zs_p_m :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, mem: Memory) { append_elem(instructions, inst_ld1b_zs_p_m(rz, rz2, mem)) } +emit_ld1b_zd_p_m :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, mem: Memory) { append_elem(instructions, inst_ld1b_zd_p_m(rz, rz2, mem)) } +emit_ld1b_i_p_m :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, rz1: u8, mem: Memory) { append_elem(instructions, inst_ld1b_i_p_m(imm, rz1, mem)) } +emit_ld1b_zpb_pnz_m :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, mem: Memory) { append_elem(instructions, inst_ld1b_zpb_pnz_m(rz, rz2, mem)) } +emit_ld1b_zqb_pnz_m :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, mem: Memory) { append_elem(instructions, inst_ld1b_zqb_pnz_m(rz, rz2, mem)) } inst_ld1h_zh_p_m :: #force_inline proc "contextless" (rz: u8, rz2: u8, mem: Memory) -> Instruction { return Instruction{mnemonic = .LD1H, operand_count = 3, length = 4, ops = {op_v_list(Register(REG_Z | (u16(rz) & 0x1F)), ZSHAPE_H, 1), op_reg(Register(REG_P | (u16(rz2) & 0xF))), op_mem(mem), {}, {}}} } inst_ld1h_zs_p_m :: #force_inline proc "contextless" (rz: u8, rz2: u8, mem: Memory) -> Instruction { return Instruction{mnemonic = .LD1H, operand_count = 3, length = 4, ops = {op_v_list(Register(REG_Z | (u16(rz) & 0x1F)), ZSHAPE_S, 1), op_reg(Register(REG_P | (u16(rz2) & 0xF))), op_mem(mem), {}, {}}} } inst_ld1h_zd_p_m :: #force_inline proc "contextless" (rz: u8, rz2: u8, mem: Memory) -> Instruction { return Instruction{mnemonic = .LD1H, operand_count = 3, length = 4, ops = {op_v_list(Register(REG_Z | (u16(rz) & 0x1F)), ZSHAPE_D, 1), op_reg(Register(REG_P | (u16(rz2) & 0xF))), op_mem(mem), {}, {}}} } inst_ld1h_i_p_m :: #force_inline proc "contextless" (imm: i64, rz1: u8, mem: Memory) -> Instruction { return Instruction{mnemonic = .LD1H, operand_count = 3, length = 4, ops = {op_imm(imm, 4), op_reg(Register(REG_P | (u16(rz1) & 0xF))), op_mem(mem), {}, {}}} } inst_ld1h_zph_pnz_m :: #force_inline proc "contextless" (rz: u8, rz2: u8, mem: Memory) -> Instruction { return Instruction{mnemonic = .LD1H, operand_count = 3, length = 4, ops = {op_z_h(rz), op_reg(Register(REG_PN | (8 + (u16(rz2) & 0x7)))), op_mem(mem), {}, {}}} } inst_ld1h_zqh_pnz_m :: #force_inline proc "contextless" (rz: u8, rz2: u8, mem: Memory) -> Instruction { return Instruction{mnemonic = .LD1H, operand_count = 3, length = 4, ops = {op_z_h(rz), op_reg(Register(REG_PN | (8 + (u16(rz2) & 0x7)))), op_mem(mem), {}, {}}} } -emit_ld1h_zh_p_m :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, mem: Memory) { append(instructions, inst_ld1h_zh_p_m(rz, rz2, mem)) } -emit_ld1h_zs_p_m :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, mem: Memory) { append(instructions, inst_ld1h_zs_p_m(rz, rz2, mem)) } -emit_ld1h_zd_p_m :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, mem: Memory) { append(instructions, inst_ld1h_zd_p_m(rz, rz2, mem)) } -emit_ld1h_i_p_m :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, rz1: u8, mem: Memory) { append(instructions, inst_ld1h_i_p_m(imm, rz1, mem)) } -emit_ld1h_zph_pnz_m :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, mem: Memory) { append(instructions, inst_ld1h_zph_pnz_m(rz, rz2, mem)) } -emit_ld1h_zqh_pnz_m :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, mem: Memory) { append(instructions, inst_ld1h_zqh_pnz_m(rz, rz2, mem)) } +emit_ld1h_zh_p_m :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, mem: Memory) { append_elem(instructions, inst_ld1h_zh_p_m(rz, rz2, mem)) } +emit_ld1h_zs_p_m :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, mem: Memory) { append_elem(instructions, inst_ld1h_zs_p_m(rz, rz2, mem)) } +emit_ld1h_zd_p_m :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, mem: Memory) { append_elem(instructions, inst_ld1h_zd_p_m(rz, rz2, mem)) } +emit_ld1h_i_p_m :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, rz1: u8, mem: Memory) { append_elem(instructions, inst_ld1h_i_p_m(imm, rz1, mem)) } +emit_ld1h_zph_pnz_m :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, mem: Memory) { append_elem(instructions, inst_ld1h_zph_pnz_m(rz, rz2, mem)) } +emit_ld1h_zqh_pnz_m :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, mem: Memory) { append_elem(instructions, inst_ld1h_zqh_pnz_m(rz, rz2, mem)) } inst_ld1w_zs_p_m :: #force_inline proc "contextless" (rz: u8, rz2: u8, mem: Memory) -> Instruction { return Instruction{mnemonic = .LD1W, operand_count = 3, length = 4, ops = {op_v_list(Register(REG_Z | (u16(rz) & 0x1F)), ZSHAPE_S, 1), op_reg(Register(REG_P | (u16(rz2) & 0xF))), op_mem(mem), {}, {}}} } inst_ld1w_zd_p_m :: #force_inline proc "contextless" (rz: u8, rz2: u8, mem: Memory) -> Instruction { return Instruction{mnemonic = .LD1W, operand_count = 3, length = 4, ops = {op_v_list(Register(REG_Z | (u16(rz) & 0x1F)), ZSHAPE_D, 1), op_reg(Register(REG_P | (u16(rz2) & 0xF))), op_mem(mem), {}, {}}} } inst_ld1w_i_p_m :: #force_inline proc "contextless" (imm: i64, rz1: u8, mem: Memory) -> Instruction { return Instruction{mnemonic = .LD1W, operand_count = 3, length = 4, ops = {op_imm(imm, 4), op_reg(Register(REG_P | (u16(rz1) & 0xF))), op_mem(mem), {}, {}}} } inst_ld1w_zps_pnz_m :: #force_inline proc "contextless" (rz: u8, rz2: u8, mem: Memory) -> Instruction { return Instruction{mnemonic = .LD1W, operand_count = 3, length = 4, ops = {op_z_s(rz), op_reg(Register(REG_PN | (8 + (u16(rz2) & 0x7)))), op_mem(mem), {}, {}}} } inst_ld1w_zqs_pnz_m :: #force_inline proc "contextless" (rz: u8, rz2: u8, mem: Memory) -> Instruction { return Instruction{mnemonic = .LD1W, operand_count = 3, length = 4, ops = {op_z_s(rz), op_reg(Register(REG_PN | (8 + (u16(rz2) & 0x7)))), op_mem(mem), {}, {}}} } -emit_ld1w_zs_p_m :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, mem: Memory) { append(instructions, inst_ld1w_zs_p_m(rz, rz2, mem)) } -emit_ld1w_zd_p_m :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, mem: Memory) { append(instructions, inst_ld1w_zd_p_m(rz, rz2, mem)) } -emit_ld1w_i_p_m :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, rz1: u8, mem: Memory) { append(instructions, inst_ld1w_i_p_m(imm, rz1, mem)) } -emit_ld1w_zps_pnz_m :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, mem: Memory) { append(instructions, inst_ld1w_zps_pnz_m(rz, rz2, mem)) } -emit_ld1w_zqs_pnz_m :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, mem: Memory) { append(instructions, inst_ld1w_zqs_pnz_m(rz, rz2, mem)) } +emit_ld1w_zs_p_m :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, mem: Memory) { append_elem(instructions, inst_ld1w_zs_p_m(rz, rz2, mem)) } +emit_ld1w_zd_p_m :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, mem: Memory) { append_elem(instructions, inst_ld1w_zd_p_m(rz, rz2, mem)) } +emit_ld1w_i_p_m :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, rz1: u8, mem: Memory) { append_elem(instructions, inst_ld1w_i_p_m(imm, rz1, mem)) } +emit_ld1w_zps_pnz_m :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, mem: Memory) { append_elem(instructions, inst_ld1w_zps_pnz_m(rz, rz2, mem)) } +emit_ld1w_zqs_pnz_m :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, mem: Memory) { append_elem(instructions, inst_ld1w_zqs_pnz_m(rz, rz2, mem)) } inst_ld1d_zd_p_m :: #force_inline proc "contextless" (rz: u8, rz2: u8, mem: Memory) -> Instruction { return Instruction{mnemonic = .LD1D, operand_count = 3, length = 4, ops = {op_v_list(Register(REG_Z | (u16(rz) & 0x1F)), ZSHAPE_D, 1), op_reg(Register(REG_P | (u16(rz2) & 0xF))), op_mem(mem), {}, {}}} } inst_ld1d_i_p_m :: #force_inline proc "contextless" (imm: i64, rz1: u8, mem: Memory) -> Instruction { return Instruction{mnemonic = .LD1D, operand_count = 3, length = 4, ops = {op_imm(imm, 4), op_reg(Register(REG_P | (u16(rz1) & 0xF))), op_mem(mem), {}, {}}} } inst_ld1d_zpd_pnz_m :: #force_inline proc "contextless" (rz: u8, rz2: u8, mem: Memory) -> Instruction { return Instruction{mnemonic = .LD1D, operand_count = 3, length = 4, ops = {op_z_d(rz), op_reg(Register(REG_PN | (8 + (u16(rz2) & 0x7)))), op_mem(mem), {}, {}}} } inst_ld1d_zqd_pnz_m :: #force_inline proc "contextless" (rz: u8, rz2: u8, mem: Memory) -> Instruction { return Instruction{mnemonic = .LD1D, operand_count = 3, length = 4, ops = {op_z_d(rz), op_reg(Register(REG_PN | (8 + (u16(rz2) & 0x7)))), op_mem(mem), {}, {}}} } -emit_ld1d_zd_p_m :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, mem: Memory) { append(instructions, inst_ld1d_zd_p_m(rz, rz2, mem)) } -emit_ld1d_i_p_m :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, rz1: u8, mem: Memory) { append(instructions, inst_ld1d_i_p_m(imm, rz1, mem)) } -emit_ld1d_zpd_pnz_m :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, mem: Memory) { append(instructions, inst_ld1d_zpd_pnz_m(rz, rz2, mem)) } -emit_ld1d_zqd_pnz_m :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, mem: Memory) { append(instructions, inst_ld1d_zqd_pnz_m(rz, rz2, mem)) } +emit_ld1d_zd_p_m :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, mem: Memory) { append_elem(instructions, inst_ld1d_zd_p_m(rz, rz2, mem)) } +emit_ld1d_i_p_m :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, rz1: u8, mem: Memory) { append_elem(instructions, inst_ld1d_i_p_m(imm, rz1, mem)) } +emit_ld1d_zpd_pnz_m :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, mem: Memory) { append_elem(instructions, inst_ld1d_zpd_pnz_m(rz, rz2, mem)) } +emit_ld1d_zqd_pnz_m :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, mem: Memory) { append_elem(instructions, inst_ld1d_zqd_pnz_m(rz, rz2, mem)) } inst_ld1sb_zh_p_m :: #force_inline proc "contextless" (rz: u8, rz2: u8, mem: Memory) -> Instruction { return Instruction{mnemonic = .LD1SB, operand_count = 3, length = 4, ops = {op_v_list(Register(REG_Z | (u16(rz) & 0x1F)), ZSHAPE_H, 1), op_reg(Register(REG_P | (u16(rz2) & 0xF))), op_mem(mem), {}, {}}} } inst_ld1sb_zs_p_m :: #force_inline proc "contextless" (rz: u8, rz2: u8, mem: Memory) -> Instruction { return Instruction{mnemonic = .LD1SB, operand_count = 3, length = 4, ops = {op_v_list(Register(REG_Z | (u16(rz) & 0x1F)), ZSHAPE_S, 1), op_reg(Register(REG_P | (u16(rz2) & 0xF))), op_mem(mem), {}, {}}} } inst_ld1sb_zd_p_m :: #force_inline proc "contextless" (rz: u8, rz2: u8, mem: Memory) -> Instruction { return Instruction{mnemonic = .LD1SB, operand_count = 3, length = 4, ops = {op_v_list(Register(REG_Z | (u16(rz) & 0x1F)), ZSHAPE_D, 1), op_reg(Register(REG_P | (u16(rz2) & 0xF))), op_mem(mem), {}, {}}} } -emit_ld1sb_zh_p_m :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, mem: Memory) { append(instructions, inst_ld1sb_zh_p_m(rz, rz2, mem)) } -emit_ld1sb_zs_p_m :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, mem: Memory) { append(instructions, inst_ld1sb_zs_p_m(rz, rz2, mem)) } -emit_ld1sb_zd_p_m :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, mem: Memory) { append(instructions, inst_ld1sb_zd_p_m(rz, rz2, mem)) } +emit_ld1sb_zh_p_m :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, mem: Memory) { append_elem(instructions, inst_ld1sb_zh_p_m(rz, rz2, mem)) } +emit_ld1sb_zs_p_m :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, mem: Memory) { append_elem(instructions, inst_ld1sb_zs_p_m(rz, rz2, mem)) } +emit_ld1sb_zd_p_m :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, mem: Memory) { append_elem(instructions, inst_ld1sb_zd_p_m(rz, rz2, mem)) } inst_ld1sh_zd_p_m :: #force_inline proc "contextless" (rz: u8, rz2: u8, mem: Memory) -> Instruction { return Instruction{mnemonic = .LD1SH, operand_count = 3, length = 4, ops = {op_v_list(Register(REG_Z | (u16(rz) & 0x1F)), ZSHAPE_D, 1), op_reg(Register(REG_P | (u16(rz2) & 0xF))), op_mem(mem), {}, {}}} } inst_ld1sh_zs_p_m :: #force_inline proc "contextless" (rz: u8, rz2: u8, mem: Memory) -> Instruction { return Instruction{mnemonic = .LD1SH, operand_count = 3, length = 4, ops = {op_v_list(Register(REG_Z | (u16(rz) & 0x1F)), ZSHAPE_S, 1), op_reg(Register(REG_P | (u16(rz2) & 0xF))), op_mem(mem), {}, {}}} } -emit_ld1sh_zd_p_m :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, mem: Memory) { append(instructions, inst_ld1sh_zd_p_m(rz, rz2, mem)) } -emit_ld1sh_zs_p_m :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, mem: Memory) { append(instructions, inst_ld1sh_zs_p_m(rz, rz2, mem)) } +emit_ld1sh_zd_p_m :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, mem: Memory) { append_elem(instructions, inst_ld1sh_zd_p_m(rz, rz2, mem)) } +emit_ld1sh_zs_p_m :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, mem: Memory) { append_elem(instructions, inst_ld1sh_zs_p_m(rz, rz2, mem)) } inst_ld1sw_zd_p_m :: #force_inline proc "contextless" (rz: u8, rz2: u8, mem: Memory) -> Instruction { return Instruction{mnemonic = .LD1SW, operand_count = 3, length = 4, ops = {op_v_list(Register(REG_Z | (u16(rz) & 0x1F)), ZSHAPE_D, 1), op_reg(Register(REG_P | (u16(rz2) & 0xF))), op_mem(mem), {}, {}}} } -emit_ld1sw_zd_p_m :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, mem: Memory) { append(instructions, inst_ld1sw_zd_p_m(rz, rz2, mem)) } +emit_ld1sw_zd_p_m :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, mem: Memory) { append_elem(instructions, inst_ld1sw_zd_p_m(rz, rz2, mem)) } inst_st1b_zb_p_m :: #force_inline proc "contextless" (rz: u8, rz2: u8, mem: Memory) -> Instruction { return Instruction{mnemonic = .ST1B, operand_count = 3, length = 4, ops = {op_v_list(Register(REG_Z | (u16(rz) & 0x1F)), ZSHAPE_B, 1), op_reg(Register(REG_P | (u16(rz2) & 0xF))), op_mem(mem), {}, {}}} } inst_st1b_zs_p_m :: #force_inline proc "contextless" (rz: u8, rz2: u8, mem: Memory) -> Instruction { return Instruction{mnemonic = .ST1B, operand_count = 3, length = 4, ops = {op_v_list(Register(REG_Z | (u16(rz) & 0x1F)), ZSHAPE_S, 1), op_reg(Register(REG_P | (u16(rz2) & 0xF))), op_mem(mem), {}, {}}} } inst_st1b_zd_p_m :: #force_inline proc "contextless" (rz: u8, rz2: u8, mem: Memory) -> Instruction { return Instruction{mnemonic = .ST1B, operand_count = 3, length = 4, ops = {op_v_list(Register(REG_Z | (u16(rz) & 0x1F)), ZSHAPE_D, 1), op_reg(Register(REG_P | (u16(rz2) & 0xF))), op_mem(mem), {}, {}}} } inst_st1b_i_p_m :: #force_inline proc "contextless" (imm: i64, rz1: u8, mem: Memory) -> Instruction { return Instruction{mnemonic = .ST1B, operand_count = 3, length = 4, ops = {op_imm(imm, 4), op_reg(Register(REG_P | (u16(rz1) & 0xF))), op_mem(mem), {}, {}}} } inst_st1b_zpb_pn_m :: #force_inline proc "contextless" (rz: u8, rz2: u8, mem: Memory) -> Instruction { return Instruction{mnemonic = .ST1B, operand_count = 3, length = 4, ops = {op_z_b(rz), op_reg(Register(REG_PN | (8 + (u16(rz2) & 0x7)))), op_mem(mem), {}, {}}} } inst_st1b_zqb_pn_m :: #force_inline proc "contextless" (rz: u8, rz2: u8, mem: Memory) -> Instruction { return Instruction{mnemonic = .ST1B, operand_count = 3, length = 4, ops = {op_z_b(rz), op_reg(Register(REG_PN | (8 + (u16(rz2) & 0x7)))), op_mem(mem), {}, {}}} } -emit_st1b_zb_p_m :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, mem: Memory) { append(instructions, inst_st1b_zb_p_m(rz, rz2, mem)) } -emit_st1b_zs_p_m :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, mem: Memory) { append(instructions, inst_st1b_zs_p_m(rz, rz2, mem)) } -emit_st1b_zd_p_m :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, mem: Memory) { append(instructions, inst_st1b_zd_p_m(rz, rz2, mem)) } -emit_st1b_i_p_m :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, rz1: u8, mem: Memory) { append(instructions, inst_st1b_i_p_m(imm, rz1, mem)) } -emit_st1b_zpb_pn_m :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, mem: Memory) { append(instructions, inst_st1b_zpb_pn_m(rz, rz2, mem)) } -emit_st1b_zqb_pn_m :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, mem: Memory) { append(instructions, inst_st1b_zqb_pn_m(rz, rz2, mem)) } +emit_st1b_zb_p_m :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, mem: Memory) { append_elem(instructions, inst_st1b_zb_p_m(rz, rz2, mem)) } +emit_st1b_zs_p_m :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, mem: Memory) { append_elem(instructions, inst_st1b_zs_p_m(rz, rz2, mem)) } +emit_st1b_zd_p_m :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, mem: Memory) { append_elem(instructions, inst_st1b_zd_p_m(rz, rz2, mem)) } +emit_st1b_i_p_m :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, rz1: u8, mem: Memory) { append_elem(instructions, inst_st1b_i_p_m(imm, rz1, mem)) } +emit_st1b_zpb_pn_m :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, mem: Memory) { append_elem(instructions, inst_st1b_zpb_pn_m(rz, rz2, mem)) } +emit_st1b_zqb_pn_m :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, mem: Memory) { append_elem(instructions, inst_st1b_zqb_pn_m(rz, rz2, mem)) } inst_st1h_zh_p_m :: #force_inline proc "contextless" (rz: u8, rz2: u8, mem: Memory) -> Instruction { return Instruction{mnemonic = .ST1H, operand_count = 3, length = 4, ops = {op_v_list(Register(REG_Z | (u16(rz) & 0x1F)), ZSHAPE_H, 1), op_reg(Register(REG_P | (u16(rz2) & 0xF))), op_mem(mem), {}, {}}} } inst_st1h_zd_p_m :: #force_inline proc "contextless" (rz: u8, rz2: u8, mem: Memory) -> Instruction { return Instruction{mnemonic = .ST1H, operand_count = 3, length = 4, ops = {op_v_list(Register(REG_Z | (u16(rz) & 0x1F)), ZSHAPE_D, 1), op_reg(Register(REG_P | (u16(rz2) & 0xF))), op_mem(mem), {}, {}}} } inst_st1h_i_p_m :: #force_inline proc "contextless" (imm: i64, rz1: u8, mem: Memory) -> Instruction { return Instruction{mnemonic = .ST1H, operand_count = 3, length = 4, ops = {op_imm(imm, 4), op_reg(Register(REG_P | (u16(rz1) & 0xF))), op_mem(mem), {}, {}}} } inst_st1h_zph_pn_m :: #force_inline proc "contextless" (rz: u8, rz2: u8, mem: Memory) -> Instruction { return Instruction{mnemonic = .ST1H, operand_count = 3, length = 4, ops = {op_z_h(rz), op_reg(Register(REG_PN | (8 + (u16(rz2) & 0x7)))), op_mem(mem), {}, {}}} } inst_st1h_zqh_pn_m :: #force_inline proc "contextless" (rz: u8, rz2: u8, mem: Memory) -> Instruction { return Instruction{mnemonic = .ST1H, operand_count = 3, length = 4, ops = {op_z_h(rz), op_reg(Register(REG_PN | (8 + (u16(rz2) & 0x7)))), op_mem(mem), {}, {}}} } inst_st1h_zs_p_m :: #force_inline proc "contextless" (rz: u8, rz2: u8, mem: Memory) -> Instruction { return Instruction{mnemonic = .ST1H, operand_count = 3, length = 4, ops = {op_v_list(Register(REG_Z | (u16(rz) & 0x1F)), ZSHAPE_S, 1), op_reg(Register(REG_P | (u16(rz2) & 0xF))), op_mem(mem), {}, {}}} } -emit_st1h_zh_p_m :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, mem: Memory) { append(instructions, inst_st1h_zh_p_m(rz, rz2, mem)) } -emit_st1h_zd_p_m :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, mem: Memory) { append(instructions, inst_st1h_zd_p_m(rz, rz2, mem)) } -emit_st1h_i_p_m :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, rz1: u8, mem: Memory) { append(instructions, inst_st1h_i_p_m(imm, rz1, mem)) } -emit_st1h_zph_pn_m :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, mem: Memory) { append(instructions, inst_st1h_zph_pn_m(rz, rz2, mem)) } -emit_st1h_zqh_pn_m :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, mem: Memory) { append(instructions, inst_st1h_zqh_pn_m(rz, rz2, mem)) } -emit_st1h_zs_p_m :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, mem: Memory) { append(instructions, inst_st1h_zs_p_m(rz, rz2, mem)) } +emit_st1h_zh_p_m :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, mem: Memory) { append_elem(instructions, inst_st1h_zh_p_m(rz, rz2, mem)) } +emit_st1h_zd_p_m :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, mem: Memory) { append_elem(instructions, inst_st1h_zd_p_m(rz, rz2, mem)) } +emit_st1h_i_p_m :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, rz1: u8, mem: Memory) { append_elem(instructions, inst_st1h_i_p_m(imm, rz1, mem)) } +emit_st1h_zph_pn_m :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, mem: Memory) { append_elem(instructions, inst_st1h_zph_pn_m(rz, rz2, mem)) } +emit_st1h_zqh_pn_m :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, mem: Memory) { append_elem(instructions, inst_st1h_zqh_pn_m(rz, rz2, mem)) } +emit_st1h_zs_p_m :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, mem: Memory) { append_elem(instructions, inst_st1h_zs_p_m(rz, rz2, mem)) } inst_st1w_zs_p_m :: #force_inline proc "contextless" (rz: u8, rz2: u8, mem: Memory) -> Instruction { return Instruction{mnemonic = .ST1W, operand_count = 3, length = 4, ops = {op_v_list(Register(REG_Z | (u16(rz) & 0x1F)), ZSHAPE_S, 1), op_reg(Register(REG_P | (u16(rz2) & 0xF))), op_mem(mem), {}, {}}} } inst_st1w_zd_p_m :: #force_inline proc "contextless" (rz: u8, rz2: u8, mem: Memory) -> Instruction { return Instruction{mnemonic = .ST1W, operand_count = 3, length = 4, ops = {op_v_list(Register(REG_Z | (u16(rz) & 0x1F)), ZSHAPE_D, 1), op_reg(Register(REG_P | (u16(rz2) & 0xF))), op_mem(mem), {}, {}}} } inst_st1w_i_p_m :: #force_inline proc "contextless" (imm: i64, rz1: u8, mem: Memory) -> Instruction { return Instruction{mnemonic = .ST1W, operand_count = 3, length = 4, ops = {op_imm(imm, 4), op_reg(Register(REG_P | (u16(rz1) & 0xF))), op_mem(mem), {}, {}}} } inst_st1w_zps_pn_m :: #force_inline proc "contextless" (rz: u8, rz2: u8, mem: Memory) -> Instruction { return Instruction{mnemonic = .ST1W, operand_count = 3, length = 4, ops = {op_z_s(rz), op_reg(Register(REG_PN | (8 + (u16(rz2) & 0x7)))), op_mem(mem), {}, {}}} } inst_st1w_zqs_pn_m :: #force_inline proc "contextless" (rz: u8, rz2: u8, mem: Memory) -> Instruction { return Instruction{mnemonic = .ST1W, operand_count = 3, length = 4, ops = {op_z_s(rz), op_reg(Register(REG_PN | (8 + (u16(rz2) & 0x7)))), op_mem(mem), {}, {}}} } -emit_st1w_zs_p_m :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, mem: Memory) { append(instructions, inst_st1w_zs_p_m(rz, rz2, mem)) } -emit_st1w_zd_p_m :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, mem: Memory) { append(instructions, inst_st1w_zd_p_m(rz, rz2, mem)) } -emit_st1w_i_p_m :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, rz1: u8, mem: Memory) { append(instructions, inst_st1w_i_p_m(imm, rz1, mem)) } -emit_st1w_zps_pn_m :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, mem: Memory) { append(instructions, inst_st1w_zps_pn_m(rz, rz2, mem)) } -emit_st1w_zqs_pn_m :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, mem: Memory) { append(instructions, inst_st1w_zqs_pn_m(rz, rz2, mem)) } +emit_st1w_zs_p_m :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, mem: Memory) { append_elem(instructions, inst_st1w_zs_p_m(rz, rz2, mem)) } +emit_st1w_zd_p_m :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, mem: Memory) { append_elem(instructions, inst_st1w_zd_p_m(rz, rz2, mem)) } +emit_st1w_i_p_m :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, rz1: u8, mem: Memory) { append_elem(instructions, inst_st1w_i_p_m(imm, rz1, mem)) } +emit_st1w_zps_pn_m :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, mem: Memory) { append_elem(instructions, inst_st1w_zps_pn_m(rz, rz2, mem)) } +emit_st1w_zqs_pn_m :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, mem: Memory) { append_elem(instructions, inst_st1w_zqs_pn_m(rz, rz2, mem)) } inst_st1d_zd_p_m :: #force_inline proc "contextless" (rz: u8, rz2: u8, mem: Memory) -> Instruction { return Instruction{mnemonic = .ST1D, operand_count = 3, length = 4, ops = {op_v_list(Register(REG_Z | (u16(rz) & 0x1F)), ZSHAPE_D, 1), op_reg(Register(REG_P | (u16(rz2) & 0xF))), op_mem(mem), {}, {}}} } inst_st1d_i_p_m :: #force_inline proc "contextless" (imm: i64, rz1: u8, mem: Memory) -> Instruction { return Instruction{mnemonic = .ST1D, operand_count = 3, length = 4, ops = {op_imm(imm, 4), op_reg(Register(REG_P | (u16(rz1) & 0xF))), op_mem(mem), {}, {}}} } inst_st1d_zpd_pn_m :: #force_inline proc "contextless" (rz: u8, rz2: u8, mem: Memory) -> Instruction { return Instruction{mnemonic = .ST1D, operand_count = 3, length = 4, ops = {op_z_d(rz), op_reg(Register(REG_PN | (8 + (u16(rz2) & 0x7)))), op_mem(mem), {}, {}}} } inst_st1d_zqd_pn_m :: #force_inline proc "contextless" (rz: u8, rz2: u8, mem: Memory) -> Instruction { return Instruction{mnemonic = .ST1D, operand_count = 3, length = 4, ops = {op_z_d(rz), op_reg(Register(REG_PN | (8 + (u16(rz2) & 0x7)))), op_mem(mem), {}, {}}} } -emit_st1d_zd_p_m :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, mem: Memory) { append(instructions, inst_st1d_zd_p_m(rz, rz2, mem)) } -emit_st1d_i_p_m :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, rz1: u8, mem: Memory) { append(instructions, inst_st1d_i_p_m(imm, rz1, mem)) } -emit_st1d_zpd_pn_m :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, mem: Memory) { append(instructions, inst_st1d_zpd_pn_m(rz, rz2, mem)) } -emit_st1d_zqd_pn_m :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, mem: Memory) { append(instructions, inst_st1d_zqd_pn_m(rz, rz2, mem)) } +emit_st1d_zd_p_m :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, mem: Memory) { append_elem(instructions, inst_st1d_zd_p_m(rz, rz2, mem)) } +emit_st1d_i_p_m :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, rz1: u8, mem: Memory) { append_elem(instructions, inst_st1d_i_p_m(imm, rz1, mem)) } +emit_st1d_zpd_pn_m :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, mem: Memory) { append_elem(instructions, inst_st1d_zpd_pn_m(rz, rz2, mem)) } +emit_st1d_zqd_pn_m :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, mem: Memory) { append_elem(instructions, inst_st1d_zqd_pn_m(rz, rz2, mem)) } inst_ldff1b_zb_p_m :: #force_inline proc "contextless" (rz: u8, rz2: u8, mem: Memory) -> Instruction { return Instruction{mnemonic = .LDFF1B, operand_count = 3, length = 4, ops = {op_v_list(Register(REG_Z | (u16(rz) & 0x1F)), ZSHAPE_B, 1), op_reg(Register(REG_P | (u16(rz2) & 0xF))), op_mem(mem), {}, {}}} } -emit_ldff1b_zb_p_m :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, mem: Memory) { append(instructions, inst_ldff1b_zb_p_m(rz, rz2, mem)) } +emit_ldff1b_zb_p_m :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, mem: Memory) { append_elem(instructions, inst_ldff1b_zb_p_m(rz, rz2, mem)) } inst_ldff1h_zh_p_m :: #force_inline proc "contextless" (rz: u8, rz2: u8, mem: Memory) -> Instruction { return Instruction{mnemonic = .LDFF1H, operand_count = 3, length = 4, ops = {op_v_list(Register(REG_Z | (u16(rz) & 0x1F)), ZSHAPE_H, 1), op_reg(Register(REG_P | (u16(rz2) & 0xF))), op_mem(mem), {}, {}}} } -emit_ldff1h_zh_p_m :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, mem: Memory) { append(instructions, inst_ldff1h_zh_p_m(rz, rz2, mem)) } +emit_ldff1h_zh_p_m :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, mem: Memory) { append_elem(instructions, inst_ldff1h_zh_p_m(rz, rz2, mem)) } inst_ldff1w_zs_p_m :: #force_inline proc "contextless" (rz: u8, rz2: u8, mem: Memory) -> Instruction { return Instruction{mnemonic = .LDFF1W, operand_count = 3, length = 4, ops = {op_v_list(Register(REG_Z | (u16(rz) & 0x1F)), ZSHAPE_S, 1), op_reg(Register(REG_P | (u16(rz2) & 0xF))), op_mem(mem), {}, {}}} } -emit_ldff1w_zs_p_m :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, mem: Memory) { append(instructions, inst_ldff1w_zs_p_m(rz, rz2, mem)) } +emit_ldff1w_zs_p_m :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, mem: Memory) { append_elem(instructions, inst_ldff1w_zs_p_m(rz, rz2, mem)) } inst_ldff1d_zd_p_m :: #force_inline proc "contextless" (rz: u8, rz2: u8, mem: Memory) -> Instruction { return Instruction{mnemonic = .LDFF1D, operand_count = 3, length = 4, ops = {op_v_list(Register(REG_Z | (u16(rz) & 0x1F)), ZSHAPE_D, 1), op_reg(Register(REG_P | (u16(rz2) & 0xF))), op_mem(mem), {}, {}}} } -emit_ldff1d_zd_p_m :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, mem: Memory) { append(instructions, inst_ldff1d_zd_p_m(rz, rz2, mem)) } +emit_ldff1d_zd_p_m :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, mem: Memory) { append_elem(instructions, inst_ldff1d_zd_p_m(rz, rz2, mem)) } inst_whilege_pb_r_r :: #force_inline proc "contextless" (rz: u8, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .WHILEGE, operand_count = 3, length = 4, ops = {op_reg(Register(REG_P | (u16(rz) & 0xF))), op_reg(src), op_reg(src2), {}, {}}} } inst_whilege_ph_r_r :: #force_inline proc "contextless" (rz: u8, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .WHILEGE, operand_count = 3, length = 4, ops = {op_reg(Register(REG_P | (u16(rz) & 0xF))), op_reg(src), op_reg(src2), {}, {}}} } inst_whilege_ps_r_r :: #force_inline proc "contextless" (rz: u8, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .WHILEGE, operand_count = 3, length = 4, ops = {op_reg(Register(REG_P | (u16(rz) & 0xF))), op_reg(src), op_reg(src2), {}, {}}} } inst_whilege_pd_r_r :: #force_inline proc "contextless" (rz: u8, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .WHILEGE, operand_count = 3, length = 4, ops = {op_reg(Register(REG_P | (u16(rz) & 0xF))), op_reg(src), op_reg(src2), {}, {}}} } -emit_whilege_pb_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, src: Register, src2: Register) { append(instructions, inst_whilege_pb_r_r(rz, src, src2)) } -emit_whilege_ph_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, src: Register, src2: Register) { append(instructions, inst_whilege_ph_r_r(rz, src, src2)) } -emit_whilege_ps_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, src: Register, src2: Register) { append(instructions, inst_whilege_ps_r_r(rz, src, src2)) } -emit_whilege_pd_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, src: Register, src2: Register) { append(instructions, inst_whilege_pd_r_r(rz, src, src2)) } +emit_whilege_pb_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, src: Register, src2: Register) { append_elem(instructions, inst_whilege_pb_r_r(rz, src, src2)) } +emit_whilege_ph_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, src: Register, src2: Register) { append_elem(instructions, inst_whilege_ph_r_r(rz, src, src2)) } +emit_whilege_ps_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, src: Register, src2: Register) { append_elem(instructions, inst_whilege_ps_r_r(rz, src, src2)) } +emit_whilege_pd_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, src: Register, src2: Register) { append_elem(instructions, inst_whilege_pd_r_r(rz, src, src2)) } inst_whilegt_pb_r_r :: #force_inline proc "contextless" (rz: u8, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .WHILEGT, operand_count = 3, length = 4, ops = {op_reg(Register(REG_P | (u16(rz) & 0xF))), op_reg(src), op_reg(src2), {}, {}}} } inst_whilegt_ph_r_r :: #force_inline proc "contextless" (rz: u8, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .WHILEGT, operand_count = 3, length = 4, ops = {op_reg(Register(REG_P | (u16(rz) & 0xF))), op_reg(src), op_reg(src2), {}, {}}} } inst_whilegt_ps_r_r :: #force_inline proc "contextless" (rz: u8, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .WHILEGT, operand_count = 3, length = 4, ops = {op_reg(Register(REG_P | (u16(rz) & 0xF))), op_reg(src), op_reg(src2), {}, {}}} } inst_whilegt_pd_r_r :: #force_inline proc "contextless" (rz: u8, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .WHILEGT, operand_count = 3, length = 4, ops = {op_reg(Register(REG_P | (u16(rz) & 0xF))), op_reg(src), op_reg(src2), {}, {}}} } -emit_whilegt_pb_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, src: Register, src2: Register) { append(instructions, inst_whilegt_pb_r_r(rz, src, src2)) } -emit_whilegt_ph_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, src: Register, src2: Register) { append(instructions, inst_whilegt_ph_r_r(rz, src, src2)) } -emit_whilegt_ps_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, src: Register, src2: Register) { append(instructions, inst_whilegt_ps_r_r(rz, src, src2)) } -emit_whilegt_pd_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, src: Register, src2: Register) { append(instructions, inst_whilegt_pd_r_r(rz, src, src2)) } +emit_whilegt_pb_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, src: Register, src2: Register) { append_elem(instructions, inst_whilegt_pb_r_r(rz, src, src2)) } +emit_whilegt_ph_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, src: Register, src2: Register) { append_elem(instructions, inst_whilegt_ph_r_r(rz, src, src2)) } +emit_whilegt_ps_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, src: Register, src2: Register) { append_elem(instructions, inst_whilegt_ps_r_r(rz, src, src2)) } +emit_whilegt_pd_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, src: Register, src2: Register) { append_elem(instructions, inst_whilegt_pd_r_r(rz, src, src2)) } inst_whilele_pb_r_r :: #force_inline proc "contextless" (rz: u8, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .WHILELE, operand_count = 3, length = 4, ops = {op_reg(Register(REG_P | (u16(rz) & 0xF))), op_reg(src), op_reg(src2), {}, {}}} } inst_whilele_ph_r_r :: #force_inline proc "contextless" (rz: u8, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .WHILELE, operand_count = 3, length = 4, ops = {op_reg(Register(REG_P | (u16(rz) & 0xF))), op_reg(src), op_reg(src2), {}, {}}} } inst_whilele_ps_r_r :: #force_inline proc "contextless" (rz: u8, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .WHILELE, operand_count = 3, length = 4, ops = {op_reg(Register(REG_P | (u16(rz) & 0xF))), op_reg(src), op_reg(src2), {}, {}}} } inst_whilele_pd_r_r :: #force_inline proc "contextless" (rz: u8, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .WHILELE, operand_count = 3, length = 4, ops = {op_reg(Register(REG_P | (u16(rz) & 0xF))), op_reg(src), op_reg(src2), {}, {}}} } -emit_whilele_pb_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, src: Register, src2: Register) { append(instructions, inst_whilele_pb_r_r(rz, src, src2)) } -emit_whilele_ph_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, src: Register, src2: Register) { append(instructions, inst_whilele_ph_r_r(rz, src, src2)) } -emit_whilele_ps_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, src: Register, src2: Register) { append(instructions, inst_whilele_ps_r_r(rz, src, src2)) } -emit_whilele_pd_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, src: Register, src2: Register) { append(instructions, inst_whilele_pd_r_r(rz, src, src2)) } +emit_whilele_pb_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, src: Register, src2: Register) { append_elem(instructions, inst_whilele_pb_r_r(rz, src, src2)) } +emit_whilele_ph_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, src: Register, src2: Register) { append_elem(instructions, inst_whilele_ph_r_r(rz, src, src2)) } +emit_whilele_ps_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, src: Register, src2: Register) { append_elem(instructions, inst_whilele_ps_r_r(rz, src, src2)) } +emit_whilele_pd_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, src: Register, src2: Register) { append_elem(instructions, inst_whilele_pd_r_r(rz, src, src2)) } inst_whilelt_pb_r_r :: #force_inline proc "contextless" (rz: u8, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .WHILELT, operand_count = 3, length = 4, ops = {op_reg(Register(REG_P | (u16(rz) & 0xF))), op_reg(src), op_reg(src2), {}, {}}} } inst_whilelt_ph_r_r :: #force_inline proc "contextless" (rz: u8, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .WHILELT, operand_count = 3, length = 4, ops = {op_reg(Register(REG_P | (u16(rz) & 0xF))), op_reg(src), op_reg(src2), {}, {}}} } inst_whilelt_ps_r_r :: #force_inline proc "contextless" (rz: u8, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .WHILELT, operand_count = 3, length = 4, ops = {op_reg(Register(REG_P | (u16(rz) & 0xF))), op_reg(src), op_reg(src2), {}, {}}} } inst_whilelt_pd_r_r :: #force_inline proc "contextless" (rz: u8, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .WHILELT, operand_count = 3, length = 4, ops = {op_reg(Register(REG_P | (u16(rz) & 0xF))), op_reg(src), op_reg(src2), {}, {}}} } -emit_whilelt_pb_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, src: Register, src2: Register) { append(instructions, inst_whilelt_pb_r_r(rz, src, src2)) } -emit_whilelt_ph_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, src: Register, src2: Register) { append(instructions, inst_whilelt_ph_r_r(rz, src, src2)) } -emit_whilelt_ps_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, src: Register, src2: Register) { append(instructions, inst_whilelt_ps_r_r(rz, src, src2)) } -emit_whilelt_pd_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, src: Register, src2: Register) { append(instructions, inst_whilelt_pd_r_r(rz, src, src2)) } +emit_whilelt_pb_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, src: Register, src2: Register) { append_elem(instructions, inst_whilelt_pb_r_r(rz, src, src2)) } +emit_whilelt_ph_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, src: Register, src2: Register) { append_elem(instructions, inst_whilelt_ph_r_r(rz, src, src2)) } +emit_whilelt_ps_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, src: Register, src2: Register) { append_elem(instructions, inst_whilelt_ps_r_r(rz, src, src2)) } +emit_whilelt_pd_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, src: Register, src2: Register) { append_elem(instructions, inst_whilelt_pd_r_r(rz, src, src2)) } inst_whilehi_pb_r_r :: #force_inline proc "contextless" (rz: u8, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .WHILEHI, operand_count = 3, length = 4, ops = {op_reg(Register(REG_P | (u16(rz) & 0xF))), op_reg(src), op_reg(src2), {}, {}}} } inst_whilehi_ph_r_r :: #force_inline proc "contextless" (rz: u8, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .WHILEHI, operand_count = 3, length = 4, ops = {op_reg(Register(REG_P | (u16(rz) & 0xF))), op_reg(src), op_reg(src2), {}, {}}} } inst_whilehi_ps_r_r :: #force_inline proc "contextless" (rz: u8, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .WHILEHI, operand_count = 3, length = 4, ops = {op_reg(Register(REG_P | (u16(rz) & 0xF))), op_reg(src), op_reg(src2), {}, {}}} } inst_whilehi_pd_r_r :: #force_inline proc "contextless" (rz: u8, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .WHILEHI, operand_count = 3, length = 4, ops = {op_reg(Register(REG_P | (u16(rz) & 0xF))), op_reg(src), op_reg(src2), {}, {}}} } -emit_whilehi_pb_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, src: Register, src2: Register) { append(instructions, inst_whilehi_pb_r_r(rz, src, src2)) } -emit_whilehi_ph_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, src: Register, src2: Register) { append(instructions, inst_whilehi_ph_r_r(rz, src, src2)) } -emit_whilehi_ps_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, src: Register, src2: Register) { append(instructions, inst_whilehi_ps_r_r(rz, src, src2)) } -emit_whilehi_pd_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, src: Register, src2: Register) { append(instructions, inst_whilehi_pd_r_r(rz, src, src2)) } +emit_whilehi_pb_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, src: Register, src2: Register) { append_elem(instructions, inst_whilehi_pb_r_r(rz, src, src2)) } +emit_whilehi_ph_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, src: Register, src2: Register) { append_elem(instructions, inst_whilehi_ph_r_r(rz, src, src2)) } +emit_whilehi_ps_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, src: Register, src2: Register) { append_elem(instructions, inst_whilehi_ps_r_r(rz, src, src2)) } +emit_whilehi_pd_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, src: Register, src2: Register) { append_elem(instructions, inst_whilehi_pd_r_r(rz, src, src2)) } inst_whilehs_pb_r_r :: #force_inline proc "contextless" (rz: u8, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .WHILEHS, operand_count = 3, length = 4, ops = {op_reg(Register(REG_P | (u16(rz) & 0xF))), op_reg(src), op_reg(src2), {}, {}}} } inst_whilehs_ph_r_r :: #force_inline proc "contextless" (rz: u8, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .WHILEHS, operand_count = 3, length = 4, ops = {op_reg(Register(REG_P | (u16(rz) & 0xF))), op_reg(src), op_reg(src2), {}, {}}} } inst_whilehs_ps_r_r :: #force_inline proc "contextless" (rz: u8, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .WHILEHS, operand_count = 3, length = 4, ops = {op_reg(Register(REG_P | (u16(rz) & 0xF))), op_reg(src), op_reg(src2), {}, {}}} } inst_whilehs_pd_r_r :: #force_inline proc "contextless" (rz: u8, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .WHILEHS, operand_count = 3, length = 4, ops = {op_reg(Register(REG_P | (u16(rz) & 0xF))), op_reg(src), op_reg(src2), {}, {}}} } -emit_whilehs_pb_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, src: Register, src2: Register) { append(instructions, inst_whilehs_pb_r_r(rz, src, src2)) } -emit_whilehs_ph_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, src: Register, src2: Register) { append(instructions, inst_whilehs_ph_r_r(rz, src, src2)) } -emit_whilehs_ps_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, src: Register, src2: Register) { append(instructions, inst_whilehs_ps_r_r(rz, src, src2)) } -emit_whilehs_pd_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, src: Register, src2: Register) { append(instructions, inst_whilehs_pd_r_r(rz, src, src2)) } +emit_whilehs_pb_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, src: Register, src2: Register) { append_elem(instructions, inst_whilehs_pb_r_r(rz, src, src2)) } +emit_whilehs_ph_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, src: Register, src2: Register) { append_elem(instructions, inst_whilehs_ph_r_r(rz, src, src2)) } +emit_whilehs_ps_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, src: Register, src2: Register) { append_elem(instructions, inst_whilehs_ps_r_r(rz, src, src2)) } +emit_whilehs_pd_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, src: Register, src2: Register) { append_elem(instructions, inst_whilehs_pd_r_r(rz, src, src2)) } inst_whilelo_pb_r_r :: #force_inline proc "contextless" (rz: u8, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .WHILELO, operand_count = 3, length = 4, ops = {op_reg(Register(REG_P | (u16(rz) & 0xF))), op_reg(src), op_reg(src2), {}, {}}} } inst_whilelo_ph_r_r :: #force_inline proc "contextless" (rz: u8, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .WHILELO, operand_count = 3, length = 4, ops = {op_reg(Register(REG_P | (u16(rz) & 0xF))), op_reg(src), op_reg(src2), {}, {}}} } inst_whilelo_ps_r_r :: #force_inline proc "contextless" (rz: u8, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .WHILELO, operand_count = 3, length = 4, ops = {op_reg(Register(REG_P | (u16(rz) & 0xF))), op_reg(src), op_reg(src2), {}, {}}} } inst_whilelo_pd_r_r :: #force_inline proc "contextless" (rz: u8, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .WHILELO, operand_count = 3, length = 4, ops = {op_reg(Register(REG_P | (u16(rz) & 0xF))), op_reg(src), op_reg(src2), {}, {}}} } -emit_whilelo_pb_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, src: Register, src2: Register) { append(instructions, inst_whilelo_pb_r_r(rz, src, src2)) } -emit_whilelo_ph_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, src: Register, src2: Register) { append(instructions, inst_whilelo_ph_r_r(rz, src, src2)) } -emit_whilelo_ps_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, src: Register, src2: Register) { append(instructions, inst_whilelo_ps_r_r(rz, src, src2)) } -emit_whilelo_pd_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, src: Register, src2: Register) { append(instructions, inst_whilelo_pd_r_r(rz, src, src2)) } +emit_whilelo_pb_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, src: Register, src2: Register) { append_elem(instructions, inst_whilelo_pb_r_r(rz, src, src2)) } +emit_whilelo_ph_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, src: Register, src2: Register) { append_elem(instructions, inst_whilelo_ph_r_r(rz, src, src2)) } +emit_whilelo_ps_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, src: Register, src2: Register) { append_elem(instructions, inst_whilelo_ps_r_r(rz, src, src2)) } +emit_whilelo_pd_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, src: Register, src2: Register) { append_elem(instructions, inst_whilelo_pd_r_r(rz, src, src2)) } inst_whilels_pb_r_r :: #force_inline proc "contextless" (rz: u8, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .WHILELS, operand_count = 3, length = 4, ops = {op_reg(Register(REG_P | (u16(rz) & 0xF))), op_reg(src), op_reg(src2), {}, {}}} } inst_whilels_ph_r_r :: #force_inline proc "contextless" (rz: u8, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .WHILELS, operand_count = 3, length = 4, ops = {op_reg(Register(REG_P | (u16(rz) & 0xF))), op_reg(src), op_reg(src2), {}, {}}} } inst_whilels_ps_r_r :: #force_inline proc "contextless" (rz: u8, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .WHILELS, operand_count = 3, length = 4, ops = {op_reg(Register(REG_P | (u16(rz) & 0xF))), op_reg(src), op_reg(src2), {}, {}}} } inst_whilels_pd_r_r :: #force_inline proc "contextless" (rz: u8, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .WHILELS, operand_count = 3, length = 4, ops = {op_reg(Register(REG_P | (u16(rz) & 0xF))), op_reg(src), op_reg(src2), {}, {}}} } -emit_whilels_pb_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, src: Register, src2: Register) { append(instructions, inst_whilels_pb_r_r(rz, src, src2)) } -emit_whilels_ph_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, src: Register, src2: Register) { append(instructions, inst_whilels_ph_r_r(rz, src, src2)) } -emit_whilels_ps_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, src: Register, src2: Register) { append(instructions, inst_whilels_ps_r_r(rz, src, src2)) } -emit_whilels_pd_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, src: Register, src2: Register) { append(instructions, inst_whilels_pd_r_r(rz, src, src2)) } +emit_whilels_pb_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, src: Register, src2: Register) { append_elem(instructions, inst_whilels_pb_r_r(rz, src, src2)) } +emit_whilels_ph_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, src: Register, src2: Register) { append_elem(instructions, inst_whilels_ph_r_r(rz, src, src2)) } +emit_whilels_ps_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, src: Register, src2: Register) { append_elem(instructions, inst_whilels_ps_r_r(rz, src, src2)) } +emit_whilels_pd_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, src: Register, src2: Register) { append_elem(instructions, inst_whilels_pd_r_r(rz, src, src2)) } inst_sqrdmlah_zb_zb_zb :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8) -> Instruction { return Instruction{mnemonic = .SQRDMLAH, operand_count = 3, length = 4, ops = {op_z_b(rz), op_z_b(rz2), op_z_b(rz3), {}, {}}} } inst_sqrdmlah_zh_zh_zh :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8) -> Instruction { return Instruction{mnemonic = .SQRDMLAH, operand_count = 3, length = 4, ops = {op_z_h(rz), op_z_h(rz2), op_z_h(rz3), {}, {}}} } inst_sqrdmlah_zs_zs_zs :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8) -> Instruction { return Instruction{mnemonic = .SQRDMLAH, operand_count = 3, length = 4, ops = {op_z_s(rz), op_z_s(rz2), op_z_s(rz3), {}, {}}} } inst_sqrdmlah_zd_zd_zd :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8) -> Instruction { return Instruction{mnemonic = .SQRDMLAH, operand_count = 3, length = 4, ops = {op_z_d(rz), op_z_d(rz2), op_z_d(rz3), {}, {}}} } -emit_sqrdmlah_zb_zb_zb :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append(instructions, inst_sqrdmlah_zb_zb_zb(rz, rz2, rz3)) } -emit_sqrdmlah_zh_zh_zh :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append(instructions, inst_sqrdmlah_zh_zh_zh(rz, rz2, rz3)) } -emit_sqrdmlah_zs_zs_zs :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append(instructions, inst_sqrdmlah_zs_zs_zs(rz, rz2, rz3)) } -emit_sqrdmlah_zd_zd_zd :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append(instructions, inst_sqrdmlah_zd_zd_zd(rz, rz2, rz3)) } +emit_sqrdmlah_zb_zb_zb :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append_elem(instructions, inst_sqrdmlah_zb_zb_zb(rz, rz2, rz3)) } +emit_sqrdmlah_zh_zh_zh :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append_elem(instructions, inst_sqrdmlah_zh_zh_zh(rz, rz2, rz3)) } +emit_sqrdmlah_zs_zs_zs :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append_elem(instructions, inst_sqrdmlah_zs_zs_zs(rz, rz2, rz3)) } +emit_sqrdmlah_zd_zd_zd :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append_elem(instructions, inst_sqrdmlah_zd_zd_zd(rz, rz2, rz3)) } inst_sqrdmlsh_zb_zb_zb :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8) -> Instruction { return Instruction{mnemonic = .SQRDMLSH, operand_count = 3, length = 4, ops = {op_z_b(rz), op_z_b(rz2), op_z_b(rz3), {}, {}}} } inst_sqrdmlsh_zh_zh_zh :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8) -> Instruction { return Instruction{mnemonic = .SQRDMLSH, operand_count = 3, length = 4, ops = {op_z_h(rz), op_z_h(rz2), op_z_h(rz3), {}, {}}} } inst_sqrdmlsh_zs_zs_zs :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8) -> Instruction { return Instruction{mnemonic = .SQRDMLSH, operand_count = 3, length = 4, ops = {op_z_s(rz), op_z_s(rz2), op_z_s(rz3), {}, {}}} } inst_sqrdmlsh_zd_zd_zd :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8) -> Instruction { return Instruction{mnemonic = .SQRDMLSH, operand_count = 3, length = 4, ops = {op_z_d(rz), op_z_d(rz2), op_z_d(rz3), {}, {}}} } -emit_sqrdmlsh_zb_zb_zb :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append(instructions, inst_sqrdmlsh_zb_zb_zb(rz, rz2, rz3)) } -emit_sqrdmlsh_zh_zh_zh :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append(instructions, inst_sqrdmlsh_zh_zh_zh(rz, rz2, rz3)) } -emit_sqrdmlsh_zs_zs_zs :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append(instructions, inst_sqrdmlsh_zs_zs_zs(rz, rz2, rz3)) } -emit_sqrdmlsh_zd_zd_zd :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append(instructions, inst_sqrdmlsh_zd_zd_zd(rz, rz2, rz3)) } +emit_sqrdmlsh_zb_zb_zb :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append_elem(instructions, inst_sqrdmlsh_zb_zb_zb(rz, rz2, rz3)) } +emit_sqrdmlsh_zh_zh_zh :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append_elem(instructions, inst_sqrdmlsh_zh_zh_zh(rz, rz2, rz3)) } +emit_sqrdmlsh_zs_zs_zs :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append_elem(instructions, inst_sqrdmlsh_zs_zs_zs(rz, rz2, rz3)) } +emit_sqrdmlsh_zd_zd_zd :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append_elem(instructions, inst_sqrdmlsh_zd_zd_zd(rz, rz2, rz3)) } inst_adclb_zs_zs_zs :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8) -> Instruction { return Instruction{mnemonic = .ADCLB, operand_count = 3, length = 4, ops = {op_z_s(rz), op_z_s(rz2), op_z_s(rz3), {}, {}}} } inst_adclb_zd_zd_zd :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8) -> Instruction { return Instruction{mnemonic = .ADCLB, operand_count = 3, length = 4, ops = {op_z_d(rz), op_z_d(rz2), op_z_d(rz3), {}, {}}} } -emit_adclb_zs_zs_zs :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append(instructions, inst_adclb_zs_zs_zs(rz, rz2, rz3)) } -emit_adclb_zd_zd_zd :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append(instructions, inst_adclb_zd_zd_zd(rz, rz2, rz3)) } +emit_adclb_zs_zs_zs :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append_elem(instructions, inst_adclb_zs_zs_zs(rz, rz2, rz3)) } +emit_adclb_zd_zd_zd :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append_elem(instructions, inst_adclb_zd_zd_zd(rz, rz2, rz3)) } inst_adclt_zs_zs_zs :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8) -> Instruction { return Instruction{mnemonic = .ADCLT, operand_count = 3, length = 4, ops = {op_z_s(rz), op_z_s(rz2), op_z_s(rz3), {}, {}}} } inst_adclt_zd_zd_zd :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8) -> Instruction { return Instruction{mnemonic = .ADCLT, operand_count = 3, length = 4, ops = {op_z_d(rz), op_z_d(rz2), op_z_d(rz3), {}, {}}} } -emit_adclt_zs_zs_zs :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append(instructions, inst_adclt_zs_zs_zs(rz, rz2, rz3)) } -emit_adclt_zd_zd_zd :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append(instructions, inst_adclt_zd_zd_zd(rz, rz2, rz3)) } +emit_adclt_zs_zs_zs :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append_elem(instructions, inst_adclt_zs_zs_zs(rz, rz2, rz3)) } +emit_adclt_zd_zd_zd :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append_elem(instructions, inst_adclt_zd_zd_zd(rz, rz2, rz3)) } inst_sbclb_zs_zs_zs :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8) -> Instruction { return Instruction{mnemonic = .SBCLB, operand_count = 3, length = 4, ops = {op_z_s(rz), op_z_s(rz2), op_z_s(rz3), {}, {}}} } inst_sbclb_zd_zd_zd :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8) -> Instruction { return Instruction{mnemonic = .SBCLB, operand_count = 3, length = 4, ops = {op_z_d(rz), op_z_d(rz2), op_z_d(rz3), {}, {}}} } -emit_sbclb_zs_zs_zs :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append(instructions, inst_sbclb_zs_zs_zs(rz, rz2, rz3)) } -emit_sbclb_zd_zd_zd :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append(instructions, inst_sbclb_zd_zd_zd(rz, rz2, rz3)) } +emit_sbclb_zs_zs_zs :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append_elem(instructions, inst_sbclb_zs_zs_zs(rz, rz2, rz3)) } +emit_sbclb_zd_zd_zd :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append_elem(instructions, inst_sbclb_zd_zd_zd(rz, rz2, rz3)) } inst_sbclt_zs_zs_zs :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8) -> Instruction { return Instruction{mnemonic = .SBCLT, operand_count = 3, length = 4, ops = {op_z_s(rz), op_z_s(rz2), op_z_s(rz3), {}, {}}} } inst_sbclt_zd_zd_zd :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8) -> Instruction { return Instruction{mnemonic = .SBCLT, operand_count = 3, length = 4, ops = {op_z_d(rz), op_z_d(rz2), op_z_d(rz3), {}, {}}} } -emit_sbclt_zs_zs_zs :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append(instructions, inst_sbclt_zs_zs_zs(rz, rz2, rz3)) } -emit_sbclt_zd_zd_zd :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append(instructions, inst_sbclt_zd_zd_zd(rz, rz2, rz3)) } +emit_sbclt_zs_zs_zs :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append_elem(instructions, inst_sbclt_zs_zs_zs(rz, rz2, rz3)) } +emit_sbclt_zd_zd_zd :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append_elem(instructions, inst_sbclt_zd_zd_zd(rz, rz2, rz3)) } inst_match_pb_p_zb_zb :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8, rz4: u8) -> Instruction { return Instruction{mnemonic = .MATCH, operand_count = 4, length = 4, ops = {op_reg(Register(REG_P | (u16(rz) & 0xF))), op_reg(Register(REG_P | (u16(rz2) & 0xF))), op_z_b(rz3), op_z_b(rz4), {}}} } inst_match_ph_p_zh_zh :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8, rz4: u8) -> Instruction { return Instruction{mnemonic = .MATCH, operand_count = 4, length = 4, ops = {op_reg(Register(REG_P | (u16(rz) & 0xF))), op_reg(Register(REG_P | (u16(rz2) & 0xF))), op_z_h(rz3), op_z_h(rz4), {}}} } -emit_match_pb_p_zb_zb :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append(instructions, inst_match_pb_p_zb_zb(rz, rz2, rz3, rz4)) } -emit_match_ph_p_zh_zh :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append(instructions, inst_match_ph_p_zh_zh(rz, rz2, rz3, rz4)) } +emit_match_pb_p_zb_zb :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append_elem(instructions, inst_match_pb_p_zb_zb(rz, rz2, rz3, rz4)) } +emit_match_ph_p_zh_zh :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append_elem(instructions, inst_match_ph_p_zh_zh(rz, rz2, rz3, rz4)) } inst_nmatch_pb_p_zb_zb :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8, rz4: u8) -> Instruction { return Instruction{mnemonic = .NMATCH, operand_count = 4, length = 4, ops = {op_reg(Register(REG_P | (u16(rz) & 0xF))), op_reg(Register(REG_P | (u16(rz2) & 0xF))), op_z_b(rz3), op_z_b(rz4), {}}} } inst_nmatch_ph_p_zh_zh :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8, rz4: u8) -> Instruction { return Instruction{mnemonic = .NMATCH, operand_count = 4, length = 4, ops = {op_reg(Register(REG_P | (u16(rz) & 0xF))), op_reg(Register(REG_P | (u16(rz2) & 0xF))), op_z_h(rz3), op_z_h(rz4), {}}} } -emit_nmatch_pb_p_zb_zb :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append(instructions, inst_nmatch_pb_p_zb_zb(rz, rz2, rz3, rz4)) } -emit_nmatch_ph_p_zh_zh :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append(instructions, inst_nmatch_ph_p_zh_zh(rz, rz2, rz3, rz4)) } +emit_nmatch_pb_p_zb_zb :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append_elem(instructions, inst_nmatch_pb_p_zb_zb(rz, rz2, rz3, rz4)) } +emit_nmatch_ph_p_zh_zh :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append_elem(instructions, inst_nmatch_ph_p_zh_zh(rz, rz2, rz3, rz4)) } inst_histcnt_zs_p_zs_zs :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8, rz4: u8) -> Instruction { return Instruction{mnemonic = .HISTCNT, operand_count = 4, length = 4, ops = {op_z_s(rz), op_reg(Register(REG_P | (u16(rz2) & 0xF))), op_z_s(rz3), op_z_s(rz4), {}}} } inst_histcnt_zd_p_zd_zd :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8, rz4: u8) -> Instruction { return Instruction{mnemonic = .HISTCNT, operand_count = 4, length = 4, ops = {op_z_d(rz), op_reg(Register(REG_P | (u16(rz2) & 0xF))), op_z_d(rz3), op_z_d(rz4), {}}} } -emit_histcnt_zs_p_zs_zs :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append(instructions, inst_histcnt_zs_p_zs_zs(rz, rz2, rz3, rz4)) } -emit_histcnt_zd_p_zd_zd :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append(instructions, inst_histcnt_zd_p_zd_zd(rz, rz2, rz3, rz4)) } +emit_histcnt_zs_p_zs_zs :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append_elem(instructions, inst_histcnt_zs_p_zs_zs(rz, rz2, rz3, rz4)) } +emit_histcnt_zd_p_zd_zd :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append_elem(instructions, inst_histcnt_zd_p_zd_zd(rz, rz2, rz3, rz4)) } inst_histseg_zb_zb_zb :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8) -> Instruction { return Instruction{mnemonic = .HISTSEG, operand_count = 3, length = 4, ops = {op_z_b(rz), op_z_b(rz2), op_z_b(rz3), {}, {}}} } -emit_histseg_zb_zb_zb :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append(instructions, inst_histseg_zb_zb_zb(rz, rz2, rz3)) } +emit_histseg_zb_zb_zb :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append_elem(instructions, inst_histseg_zb_zb_zb(rz, rz2, rz3)) } inst_smstart_none :: #force_inline proc "contextless" () -> Instruction { return inst_none(.SMSTART) } -emit_smstart_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_smstart_none()) } +emit_smstart_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_smstart_none()) } inst_smstop_none :: #force_inline proc "contextless" () -> Instruction { return inst_none(.SMSTOP) } -emit_smstop_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_smstop_none()) } +emit_smstop_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_smstop_none()) } inst_rdsvl_r_i :: #force_inline proc "contextless" (dst: Register, imm: i64) -> Instruction { return inst_r_i(.RDSVL, dst, imm) } -emit_rdsvl_r_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64) { append(instructions, inst_rdsvl_r_i(dst, imm)) } +emit_rdsvl_r_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64) { append_elem(instructions, inst_rdsvl_r_i(dst, imm)) } inst_addha_i_p_p_zs :: #force_inline proc "contextless" (imm: i64, rz1: u8, rz2: u8, rz3: u8) -> Instruction { return Instruction{mnemonic = .ADDHA, operand_count = 4, length = 4, ops = {op_imm(imm, 4), op_reg(Register(REG_P | (u16(rz1) & 0xF))), op_reg(Register(REG_P | (u16(rz2) & 0xF))), op_z_s(rz3), {}}} } -emit_addha_i_p_p_zs :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, rz1: u8, rz2: u8, rz3: u8) { append(instructions, inst_addha_i_p_p_zs(imm, rz1, rz2, rz3)) } +emit_addha_i_p_p_zs :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, rz1: u8, rz2: u8, rz3: u8) { append_elem(instructions, inst_addha_i_p_p_zs(imm, rz1, rz2, rz3)) } inst_addva_i_p_p_zs :: #force_inline proc "contextless" (imm: i64, rz1: u8, rz2: u8, rz3: u8) -> Instruction { return Instruction{mnemonic = .ADDVA, operand_count = 4, length = 4, ops = {op_imm(imm, 4), op_reg(Register(REG_P | (u16(rz1) & 0xF))), op_reg(Register(REG_P | (u16(rz2) & 0xF))), op_z_s(rz3), {}}} } -emit_addva_i_p_p_zs :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, rz1: u8, rz2: u8, rz3: u8) { append(instructions, inst_addva_i_p_p_zs(imm, rz1, rz2, rz3)) } +emit_addva_i_p_p_zs :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, rz1: u8, rz2: u8, rz3: u8) { append_elem(instructions, inst_addva_i_p_p_zs(imm, rz1, rz2, rz3)) } inst_zero_i :: #force_inline proc "contextless" (imm: i64) -> Instruction { return Instruction{mnemonic = .ZERO, operand_count = 1, length = 4, ops = {op_imm(imm, 4), {}, {}, {}, {}}} } -emit_zero_i :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64) { append(instructions, inst_zero_i(imm)) } +emit_zero_i :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64) { append_elem(instructions, inst_zero_i(imm)) } inst_fmopa_i_p_p_zs_zs :: #force_inline proc "contextless" (imm: i64, rz1: u8, rz2: u8, rz3: u8, rz4: u8) -> Instruction { return Instruction{mnemonic = .FMOPA, operand_count = 5, length = 4, ops = {op_imm(imm, 4), op_reg(Register(REG_P | (u16(rz1) & 0xF))), op_reg(Register(REG_P | (u16(rz2) & 0xF))), op_z_s(rz3), op_z_s(rz4)}} } -emit_fmopa_i_p_p_zs_zs :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, rz1: u8, rz2: u8, rz3: u8, rz4: u8) { append(instructions, inst_fmopa_i_p_p_zs_zs(imm, rz1, rz2, rz3, rz4)) } +emit_fmopa_i_p_p_zs_zs :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, rz1: u8, rz2: u8, rz3: u8, rz4: u8) { append_elem(instructions, inst_fmopa_i_p_p_zs_zs(imm, rz1, rz2, rz3, rz4)) } inst_fmops_i_p_p_zs_zs :: #force_inline proc "contextless" (imm: i64, rz1: u8, rz2: u8, rz3: u8, rz4: u8) -> Instruction { return Instruction{mnemonic = .FMOPS, operand_count = 5, length = 4, ops = {op_imm(imm, 4), op_reg(Register(REG_P | (u16(rz1) & 0xF))), op_reg(Register(REG_P | (u16(rz2) & 0xF))), op_z_s(rz3), op_z_s(rz4)}} } -emit_fmops_i_p_p_zs_zs :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, rz1: u8, rz2: u8, rz3: u8, rz4: u8) { append(instructions, inst_fmops_i_p_p_zs_zs(imm, rz1, rz2, rz3, rz4)) } +emit_fmops_i_p_p_zs_zs :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, rz1: u8, rz2: u8, rz3: u8, rz4: u8) { append_elem(instructions, inst_fmops_i_p_p_zs_zs(imm, rz1, rz2, rz3, rz4)) } inst_bfmopa_i_p_p_zh_zh :: #force_inline proc "contextless" (imm: i64, rz1: u8, rz2: u8, rz3: u8, rz4: u8) -> Instruction { return Instruction{mnemonic = .BFMOPA, operand_count = 5, length = 4, ops = {op_imm(imm, 4), op_reg(Register(REG_P | (u16(rz1) & 0xF))), op_reg(Register(REG_P | (u16(rz2) & 0xF))), op_z_h(rz3), op_z_h(rz4)}} } -emit_bfmopa_i_p_p_zh_zh :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, rz1: u8, rz2: u8, rz3: u8, rz4: u8) { append(instructions, inst_bfmopa_i_p_p_zh_zh(imm, rz1, rz2, rz3, rz4)) } +emit_bfmopa_i_p_p_zh_zh :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, rz1: u8, rz2: u8, rz3: u8, rz4: u8) { append_elem(instructions, inst_bfmopa_i_p_p_zh_zh(imm, rz1, rz2, rz3, rz4)) } inst_bfmops_i_p_p_zh_zh :: #force_inline proc "contextless" (imm: i64, rz1: u8, rz2: u8, rz3: u8, rz4: u8) -> Instruction { return Instruction{mnemonic = .BFMOPS, operand_count = 5, length = 4, ops = {op_imm(imm, 4), op_reg(Register(REG_P | (u16(rz1) & 0xF))), op_reg(Register(REG_P | (u16(rz2) & 0xF))), op_z_h(rz3), op_z_h(rz4)}} } -emit_bfmops_i_p_p_zh_zh :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, rz1: u8, rz2: u8, rz3: u8, rz4: u8) { append(instructions, inst_bfmops_i_p_p_zh_zh(imm, rz1, rz2, rz3, rz4)) } +emit_bfmops_i_p_p_zh_zh :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, rz1: u8, rz2: u8, rz3: u8, rz4: u8) { append_elem(instructions, inst_bfmops_i_p_p_zh_zh(imm, rz1, rz2, rz3, rz4)) } inst_smopa_i_p_p_zb_zb :: #force_inline proc "contextless" (imm: i64, rz1: u8, rz2: u8, rz3: u8, rz4: u8) -> Instruction { return Instruction{mnemonic = .SMOPA, operand_count = 5, length = 4, ops = {op_imm(imm, 4), op_reg(Register(REG_P | (u16(rz1) & 0xF))), op_reg(Register(REG_P | (u16(rz2) & 0xF))), op_z_b(rz3), op_z_b(rz4)}} } inst_smopa_i_p_p_zh_zh :: #force_inline proc "contextless" (imm: i64, rz1: u8, rz2: u8, rz3: u8, rz4: u8) -> Instruction { return Instruction{mnemonic = .SMOPA, operand_count = 5, length = 4, ops = {op_imm(imm, 4), op_reg(Register(REG_P | (u16(rz1) & 0xF))), op_reg(Register(REG_P | (u16(rz2) & 0xF))), op_z_h(rz3), op_z_h(rz4)}} } -emit_smopa_i_p_p_zb_zb :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, rz1: u8, rz2: u8, rz3: u8, rz4: u8) { append(instructions, inst_smopa_i_p_p_zb_zb(imm, rz1, rz2, rz3, rz4)) } -emit_smopa_i_p_p_zh_zh :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, rz1: u8, rz2: u8, rz3: u8, rz4: u8) { append(instructions, inst_smopa_i_p_p_zh_zh(imm, rz1, rz2, rz3, rz4)) } +emit_smopa_i_p_p_zb_zb :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, rz1: u8, rz2: u8, rz3: u8, rz4: u8) { append_elem(instructions, inst_smopa_i_p_p_zb_zb(imm, rz1, rz2, rz3, rz4)) } +emit_smopa_i_p_p_zh_zh :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, rz1: u8, rz2: u8, rz3: u8, rz4: u8) { append_elem(instructions, inst_smopa_i_p_p_zh_zh(imm, rz1, rz2, rz3, rz4)) } inst_smops_i_p_p_zb_zb :: #force_inline proc "contextless" (imm: i64, rz1: u8, rz2: u8, rz3: u8, rz4: u8) -> Instruction { return Instruction{mnemonic = .SMOPS, operand_count = 5, length = 4, ops = {op_imm(imm, 4), op_reg(Register(REG_P | (u16(rz1) & 0xF))), op_reg(Register(REG_P | (u16(rz2) & 0xF))), op_z_b(rz3), op_z_b(rz4)}} } inst_smops_i_p_p_zh_zh :: #force_inline proc "contextless" (imm: i64, rz1: u8, rz2: u8, rz3: u8, rz4: u8) -> Instruction { return Instruction{mnemonic = .SMOPS, operand_count = 5, length = 4, ops = {op_imm(imm, 4), op_reg(Register(REG_P | (u16(rz1) & 0xF))), op_reg(Register(REG_P | (u16(rz2) & 0xF))), op_z_h(rz3), op_z_h(rz4)}} } -emit_smops_i_p_p_zb_zb :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, rz1: u8, rz2: u8, rz3: u8, rz4: u8) { append(instructions, inst_smops_i_p_p_zb_zb(imm, rz1, rz2, rz3, rz4)) } -emit_smops_i_p_p_zh_zh :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, rz1: u8, rz2: u8, rz3: u8, rz4: u8) { append(instructions, inst_smops_i_p_p_zh_zh(imm, rz1, rz2, rz3, rz4)) } +emit_smops_i_p_p_zb_zb :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, rz1: u8, rz2: u8, rz3: u8, rz4: u8) { append_elem(instructions, inst_smops_i_p_p_zb_zb(imm, rz1, rz2, rz3, rz4)) } +emit_smops_i_p_p_zh_zh :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, rz1: u8, rz2: u8, rz3: u8, rz4: u8) { append_elem(instructions, inst_smops_i_p_p_zh_zh(imm, rz1, rz2, rz3, rz4)) } inst_umopa_i_p_p_zb_zb :: #force_inline proc "contextless" (imm: i64, rz1: u8, rz2: u8, rz3: u8, rz4: u8) -> Instruction { return Instruction{mnemonic = .UMOPA, operand_count = 5, length = 4, ops = {op_imm(imm, 4), op_reg(Register(REG_P | (u16(rz1) & 0xF))), op_reg(Register(REG_P | (u16(rz2) & 0xF))), op_z_b(rz3), op_z_b(rz4)}} } inst_umopa_i_p_p_zh_zh :: #force_inline proc "contextless" (imm: i64, rz1: u8, rz2: u8, rz3: u8, rz4: u8) -> Instruction { return Instruction{mnemonic = .UMOPA, operand_count = 5, length = 4, ops = {op_imm(imm, 4), op_reg(Register(REG_P | (u16(rz1) & 0xF))), op_reg(Register(REG_P | (u16(rz2) & 0xF))), op_z_h(rz3), op_z_h(rz4)}} } -emit_umopa_i_p_p_zb_zb :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, rz1: u8, rz2: u8, rz3: u8, rz4: u8) { append(instructions, inst_umopa_i_p_p_zb_zb(imm, rz1, rz2, rz3, rz4)) } -emit_umopa_i_p_p_zh_zh :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, rz1: u8, rz2: u8, rz3: u8, rz4: u8) { append(instructions, inst_umopa_i_p_p_zh_zh(imm, rz1, rz2, rz3, rz4)) } +emit_umopa_i_p_p_zb_zb :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, rz1: u8, rz2: u8, rz3: u8, rz4: u8) { append_elem(instructions, inst_umopa_i_p_p_zb_zb(imm, rz1, rz2, rz3, rz4)) } +emit_umopa_i_p_p_zh_zh :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, rz1: u8, rz2: u8, rz3: u8, rz4: u8) { append_elem(instructions, inst_umopa_i_p_p_zh_zh(imm, rz1, rz2, rz3, rz4)) } inst_umops_i_p_p_zb_zb :: #force_inline proc "contextless" (imm: i64, rz1: u8, rz2: u8, rz3: u8, rz4: u8) -> Instruction { return Instruction{mnemonic = .UMOPS, operand_count = 5, length = 4, ops = {op_imm(imm, 4), op_reg(Register(REG_P | (u16(rz1) & 0xF))), op_reg(Register(REG_P | (u16(rz2) & 0xF))), op_z_b(rz3), op_z_b(rz4)}} } inst_umops_i_p_p_zh_zh :: #force_inline proc "contextless" (imm: i64, rz1: u8, rz2: u8, rz3: u8, rz4: u8) -> Instruction { return Instruction{mnemonic = .UMOPS, operand_count = 5, length = 4, ops = {op_imm(imm, 4), op_reg(Register(REG_P | (u16(rz1) & 0xF))), op_reg(Register(REG_P | (u16(rz2) & 0xF))), op_z_h(rz3), op_z_h(rz4)}} } -emit_umops_i_p_p_zb_zb :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, rz1: u8, rz2: u8, rz3: u8, rz4: u8) { append(instructions, inst_umops_i_p_p_zb_zb(imm, rz1, rz2, rz3, rz4)) } -emit_umops_i_p_p_zh_zh :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, rz1: u8, rz2: u8, rz3: u8, rz4: u8) { append(instructions, inst_umops_i_p_p_zh_zh(imm, rz1, rz2, rz3, rz4)) } +emit_umops_i_p_p_zb_zb :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, rz1: u8, rz2: u8, rz3: u8, rz4: u8) { append_elem(instructions, inst_umops_i_p_p_zb_zb(imm, rz1, rz2, rz3, rz4)) } +emit_umops_i_p_p_zh_zh :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, rz1: u8, rz2: u8, rz3: u8, rz4: u8) { append_elem(instructions, inst_umops_i_p_p_zh_zh(imm, rz1, rz2, rz3, rz4)) } inst_usmopa_i_p_p_zb_zb :: #force_inline proc "contextless" (imm: i64, rz1: u8, rz2: u8, rz3: u8, rz4: u8) -> Instruction { return Instruction{mnemonic = .USMOPA, operand_count = 5, length = 4, ops = {op_imm(imm, 4), op_reg(Register(REG_P | (u16(rz1) & 0xF))), op_reg(Register(REG_P | (u16(rz2) & 0xF))), op_z_b(rz3), op_z_b(rz4)}} } -emit_usmopa_i_p_p_zb_zb :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, rz1: u8, rz2: u8, rz3: u8, rz4: u8) { append(instructions, inst_usmopa_i_p_p_zb_zb(imm, rz1, rz2, rz3, rz4)) } +emit_usmopa_i_p_p_zb_zb :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, rz1: u8, rz2: u8, rz3: u8, rz4: u8) { append_elem(instructions, inst_usmopa_i_p_p_zb_zb(imm, rz1, rz2, rz3, rz4)) } inst_sumopa_i_p_p_zb_zb :: #force_inline proc "contextless" (imm: i64, rz1: u8, rz2: u8, rz3: u8, rz4: u8) -> Instruction { return Instruction{mnemonic = .SUMOPA, operand_count = 5, length = 4, ops = {op_imm(imm, 4), op_reg(Register(REG_P | (u16(rz1) & 0xF))), op_reg(Register(REG_P | (u16(rz2) & 0xF))), op_z_b(rz3), op_z_b(rz4)}} } -emit_sumopa_i_p_p_zb_zb :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, rz1: u8, rz2: u8, rz3: u8, rz4: u8) { append(instructions, inst_sumopa_i_p_p_zb_zb(imm, rz1, rz2, rz3, rz4)) } +emit_sumopa_i_p_p_zb_zb :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, rz1: u8, rz2: u8, rz3: u8, rz4: u8) { append_elem(instructions, inst_sumopa_i_p_p_zb_zb(imm, rz1, rz2, rz3, rz4)) } inst_cntb_r_i_i :: #force_inline proc "contextless" (dst: Register, imm: i64, imm2: i64) -> Instruction { return Instruction{mnemonic = .CNTB, operand_count = 3, length = 4, ops = {op_reg(dst), op_imm(imm, 4), op_imm(imm2, 4), {}, {}}} } -emit_cntb_r_i_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64, imm2: i64) { append(instructions, inst_cntb_r_i_i(dst, imm, imm2)) } +emit_cntb_r_i_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64, imm2: i64) { append_elem(instructions, inst_cntb_r_i_i(dst, imm, imm2)) } inst_cnth_r_i_i :: #force_inline proc "contextless" (dst: Register, imm: i64, imm2: i64) -> Instruction { return Instruction{mnemonic = .CNTH, operand_count = 3, length = 4, ops = {op_reg(dst), op_imm(imm, 4), op_imm(imm2, 4), {}, {}}} } -emit_cnth_r_i_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64, imm2: i64) { append(instructions, inst_cnth_r_i_i(dst, imm, imm2)) } +emit_cnth_r_i_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64, imm2: i64) { append_elem(instructions, inst_cnth_r_i_i(dst, imm, imm2)) } inst_cntw_r_i_i :: #force_inline proc "contextless" (dst: Register, imm: i64, imm2: i64) -> Instruction { return Instruction{mnemonic = .CNTW, operand_count = 3, length = 4, ops = {op_reg(dst), op_imm(imm, 4), op_imm(imm2, 4), {}, {}}} } -emit_cntw_r_i_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64, imm2: i64) { append(instructions, inst_cntw_r_i_i(dst, imm, imm2)) } +emit_cntw_r_i_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64, imm2: i64) { append_elem(instructions, inst_cntw_r_i_i(dst, imm, imm2)) } inst_cntd_r_i_i :: #force_inline proc "contextless" (dst: Register, imm: i64, imm2: i64) -> Instruction { return Instruction{mnemonic = .CNTD, operand_count = 3, length = 4, ops = {op_reg(dst), op_imm(imm, 4), op_imm(imm2, 4), {}, {}}} } -emit_cntd_r_i_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64, imm2: i64) { append(instructions, inst_cntd_r_i_i(dst, imm, imm2)) } +emit_cntd_r_i_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64, imm2: i64) { append_elem(instructions, inst_cntd_r_i_i(dst, imm, imm2)) } inst_incb_r_i_i :: #force_inline proc "contextless" (dst: Register, imm: i64, imm2: i64) -> Instruction { return Instruction{mnemonic = .INCB, operand_count = 3, length = 4, ops = {op_reg(dst), op_imm(imm, 4), op_imm(imm2, 4), {}, {}}} } -emit_incb_r_i_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64, imm2: i64) { append(instructions, inst_incb_r_i_i(dst, imm, imm2)) } +emit_incb_r_i_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64, imm2: i64) { append_elem(instructions, inst_incb_r_i_i(dst, imm, imm2)) } inst_inch_r_i_i :: #force_inline proc "contextless" (dst: Register, imm: i64, imm2: i64) -> Instruction { return Instruction{mnemonic = .INCH, operand_count = 3, length = 4, ops = {op_reg(dst), op_imm(imm, 4), op_imm(imm2, 4), {}, {}}} } inst_inch_zh_i_i :: #force_inline proc "contextless" (rz: u8, imm: i64, imm2: i64) -> Instruction { return Instruction{mnemonic = .INCH, operand_count = 3, length = 4, ops = {op_z_h(rz), op_imm(imm, 4), op_imm(imm2, 4), {}, {}}} } -emit_inch_r_i_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64, imm2: i64) { append(instructions, inst_inch_r_i_i(dst, imm, imm2)) } -emit_inch_zh_i_i :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, imm: i64, imm2: i64) { append(instructions, inst_inch_zh_i_i(rz, imm, imm2)) } +emit_inch_r_i_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64, imm2: i64) { append_elem(instructions, inst_inch_r_i_i(dst, imm, imm2)) } +emit_inch_zh_i_i :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, imm: i64, imm2: i64) { append_elem(instructions, inst_inch_zh_i_i(rz, imm, imm2)) } inst_incw_r_i_i :: #force_inline proc "contextless" (dst: Register, imm: i64, imm2: i64) -> Instruction { return Instruction{mnemonic = .INCW, operand_count = 3, length = 4, ops = {op_reg(dst), op_imm(imm, 4), op_imm(imm2, 4), {}, {}}} } inst_incw_zs_i_i :: #force_inline proc "contextless" (rz: u8, imm: i64, imm2: i64) -> Instruction { return Instruction{mnemonic = .INCW, operand_count = 3, length = 4, ops = {op_z_s(rz), op_imm(imm, 4), op_imm(imm2, 4), {}, {}}} } -emit_incw_r_i_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64, imm2: i64) { append(instructions, inst_incw_r_i_i(dst, imm, imm2)) } -emit_incw_zs_i_i :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, imm: i64, imm2: i64) { append(instructions, inst_incw_zs_i_i(rz, imm, imm2)) } +emit_incw_r_i_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64, imm2: i64) { append_elem(instructions, inst_incw_r_i_i(dst, imm, imm2)) } +emit_incw_zs_i_i :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, imm: i64, imm2: i64) { append_elem(instructions, inst_incw_zs_i_i(rz, imm, imm2)) } inst_incd_r_i_i :: #force_inline proc "contextless" (dst: Register, imm: i64, imm2: i64) -> Instruction { return Instruction{mnemonic = .INCD, operand_count = 3, length = 4, ops = {op_reg(dst), op_imm(imm, 4), op_imm(imm2, 4), {}, {}}} } inst_incd_zd_i_i :: #force_inline proc "contextless" (rz: u8, imm: i64, imm2: i64) -> Instruction { return Instruction{mnemonic = .INCD, operand_count = 3, length = 4, ops = {op_z_d(rz), op_imm(imm, 4), op_imm(imm2, 4), {}, {}}} } -emit_incd_r_i_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64, imm2: i64) { append(instructions, inst_incd_r_i_i(dst, imm, imm2)) } -emit_incd_zd_i_i :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, imm: i64, imm2: i64) { append(instructions, inst_incd_zd_i_i(rz, imm, imm2)) } +emit_incd_r_i_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64, imm2: i64) { append_elem(instructions, inst_incd_r_i_i(dst, imm, imm2)) } +emit_incd_zd_i_i :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, imm: i64, imm2: i64) { append_elem(instructions, inst_incd_zd_i_i(rz, imm, imm2)) } inst_decb_r_i_i :: #force_inline proc "contextless" (dst: Register, imm: i64, imm2: i64) -> Instruction { return Instruction{mnemonic = .DECB, operand_count = 3, length = 4, ops = {op_reg(dst), op_imm(imm, 4), op_imm(imm2, 4), {}, {}}} } -emit_decb_r_i_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64, imm2: i64) { append(instructions, inst_decb_r_i_i(dst, imm, imm2)) } +emit_decb_r_i_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64, imm2: i64) { append_elem(instructions, inst_decb_r_i_i(dst, imm, imm2)) } inst_dech_r_i_i :: #force_inline proc "contextless" (dst: Register, imm: i64, imm2: i64) -> Instruction { return Instruction{mnemonic = .DECH, operand_count = 3, length = 4, ops = {op_reg(dst), op_imm(imm, 4), op_imm(imm2, 4), {}, {}}} } inst_dech_zh_i_i :: #force_inline proc "contextless" (rz: u8, imm: i64, imm2: i64) -> Instruction { return Instruction{mnemonic = .DECH, operand_count = 3, length = 4, ops = {op_z_h(rz), op_imm(imm, 4), op_imm(imm2, 4), {}, {}}} } -emit_dech_r_i_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64, imm2: i64) { append(instructions, inst_dech_r_i_i(dst, imm, imm2)) } -emit_dech_zh_i_i :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, imm: i64, imm2: i64) { append(instructions, inst_dech_zh_i_i(rz, imm, imm2)) } +emit_dech_r_i_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64, imm2: i64) { append_elem(instructions, inst_dech_r_i_i(dst, imm, imm2)) } +emit_dech_zh_i_i :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, imm: i64, imm2: i64) { append_elem(instructions, inst_dech_zh_i_i(rz, imm, imm2)) } inst_decw_r_i_i :: #force_inline proc "contextless" (dst: Register, imm: i64, imm2: i64) -> Instruction { return Instruction{mnemonic = .DECW, operand_count = 3, length = 4, ops = {op_reg(dst), op_imm(imm, 4), op_imm(imm2, 4), {}, {}}} } inst_decw_zs_i_i :: #force_inline proc "contextless" (rz: u8, imm: i64, imm2: i64) -> Instruction { return Instruction{mnemonic = .DECW, operand_count = 3, length = 4, ops = {op_z_s(rz), op_imm(imm, 4), op_imm(imm2, 4), {}, {}}} } -emit_decw_r_i_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64, imm2: i64) { append(instructions, inst_decw_r_i_i(dst, imm, imm2)) } -emit_decw_zs_i_i :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, imm: i64, imm2: i64) { append(instructions, inst_decw_zs_i_i(rz, imm, imm2)) } +emit_decw_r_i_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64, imm2: i64) { append_elem(instructions, inst_decw_r_i_i(dst, imm, imm2)) } +emit_decw_zs_i_i :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, imm: i64, imm2: i64) { append_elem(instructions, inst_decw_zs_i_i(rz, imm, imm2)) } inst_decd_r_i_i :: #force_inline proc "contextless" (dst: Register, imm: i64, imm2: i64) -> Instruction { return Instruction{mnemonic = .DECD, operand_count = 3, length = 4, ops = {op_reg(dst), op_imm(imm, 4), op_imm(imm2, 4), {}, {}}} } inst_decd_zd_i_i :: #force_inline proc "contextless" (rz: u8, imm: i64, imm2: i64) -> Instruction { return Instruction{mnemonic = .DECD, operand_count = 3, length = 4, ops = {op_z_d(rz), op_imm(imm, 4), op_imm(imm2, 4), {}, {}}} } -emit_decd_r_i_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64, imm2: i64) { append(instructions, inst_decd_r_i_i(dst, imm, imm2)) } -emit_decd_zd_i_i :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, imm: i64, imm2: i64) { append(instructions, inst_decd_zd_i_i(rz, imm, imm2)) } +emit_decd_r_i_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64, imm2: i64) { append_elem(instructions, inst_decd_r_i_i(dst, imm, imm2)) } +emit_decd_zd_i_i :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, imm: i64, imm2: i64) { append_elem(instructions, inst_decd_zd_i_i(rz, imm, imm2)) } inst_sqincb_r_i_i :: #force_inline proc "contextless" (dst: Register, imm: i64, imm2: i64) -> Instruction { return Instruction{mnemonic = .SQINCB, operand_count = 3, length = 4, ops = {op_reg(dst), op_imm(imm, 4), op_imm(imm2, 4), {}, {}}} } inst_sqincb_r_r_i_i :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64, imm2: i64) -> Instruction { return Instruction{mnemonic = .SQINCB, operand_count = 4, length = 4, ops = {op_reg(dst), op_reg(src), op_imm(imm, 4), op_imm(imm2, 4), {}}} } -emit_sqincb_r_i_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64, imm2: i64) { append(instructions, inst_sqincb_r_i_i(dst, imm, imm2)) } -emit_sqincb_r_r_i_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64, imm2: i64) { append(instructions, inst_sqincb_r_r_i_i(dst, src, imm, imm2)) } +emit_sqincb_r_i_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64, imm2: i64) { append_elem(instructions, inst_sqincb_r_i_i(dst, imm, imm2)) } +emit_sqincb_r_r_i_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64, imm2: i64) { append_elem(instructions, inst_sqincb_r_r_i_i(dst, src, imm, imm2)) } inst_sqinch_r_i_i :: #force_inline proc "contextless" (dst: Register, imm: i64, imm2: i64) -> Instruction { return Instruction{mnemonic = .SQINCH, operand_count = 3, length = 4, ops = {op_reg(dst), op_imm(imm, 4), op_imm(imm2, 4), {}, {}}} } inst_sqinch_r_r_i_i :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64, imm2: i64) -> Instruction { return Instruction{mnemonic = .SQINCH, operand_count = 4, length = 4, ops = {op_reg(dst), op_reg(src), op_imm(imm, 4), op_imm(imm2, 4), {}}} } inst_sqinch_zh_i_i :: #force_inline proc "contextless" (rz: u8, imm: i64, imm2: i64) -> Instruction { return Instruction{mnemonic = .SQINCH, operand_count = 3, length = 4, ops = {op_z_h(rz), op_imm(imm, 4), op_imm(imm2, 4), {}, {}}} } -emit_sqinch_r_i_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64, imm2: i64) { append(instructions, inst_sqinch_r_i_i(dst, imm, imm2)) } -emit_sqinch_r_r_i_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64, imm2: i64) { append(instructions, inst_sqinch_r_r_i_i(dst, src, imm, imm2)) } -emit_sqinch_zh_i_i :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, imm: i64, imm2: i64) { append(instructions, inst_sqinch_zh_i_i(rz, imm, imm2)) } +emit_sqinch_r_i_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64, imm2: i64) { append_elem(instructions, inst_sqinch_r_i_i(dst, imm, imm2)) } +emit_sqinch_r_r_i_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64, imm2: i64) { append_elem(instructions, inst_sqinch_r_r_i_i(dst, src, imm, imm2)) } +emit_sqinch_zh_i_i :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, imm: i64, imm2: i64) { append_elem(instructions, inst_sqinch_zh_i_i(rz, imm, imm2)) } inst_sqincw_r_i_i :: #force_inline proc "contextless" (dst: Register, imm: i64, imm2: i64) -> Instruction { return Instruction{mnemonic = .SQINCW, operand_count = 3, length = 4, ops = {op_reg(dst), op_imm(imm, 4), op_imm(imm2, 4), {}, {}}} } inst_sqincw_r_r_i_i :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64, imm2: i64) -> Instruction { return Instruction{mnemonic = .SQINCW, operand_count = 4, length = 4, ops = {op_reg(dst), op_reg(src), op_imm(imm, 4), op_imm(imm2, 4), {}}} } inst_sqincw_zs_i_i :: #force_inline proc "contextless" (rz: u8, imm: i64, imm2: i64) -> Instruction { return Instruction{mnemonic = .SQINCW, operand_count = 3, length = 4, ops = {op_z_s(rz), op_imm(imm, 4), op_imm(imm2, 4), {}, {}}} } -emit_sqincw_r_i_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64, imm2: i64) { append(instructions, inst_sqincw_r_i_i(dst, imm, imm2)) } -emit_sqincw_r_r_i_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64, imm2: i64) { append(instructions, inst_sqincw_r_r_i_i(dst, src, imm, imm2)) } -emit_sqincw_zs_i_i :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, imm: i64, imm2: i64) { append(instructions, inst_sqincw_zs_i_i(rz, imm, imm2)) } +emit_sqincw_r_i_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64, imm2: i64) { append_elem(instructions, inst_sqincw_r_i_i(dst, imm, imm2)) } +emit_sqincw_r_r_i_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64, imm2: i64) { append_elem(instructions, inst_sqincw_r_r_i_i(dst, src, imm, imm2)) } +emit_sqincw_zs_i_i :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, imm: i64, imm2: i64) { append_elem(instructions, inst_sqincw_zs_i_i(rz, imm, imm2)) } inst_sqincd_r_i_i :: #force_inline proc "contextless" (dst: Register, imm: i64, imm2: i64) -> Instruction { return Instruction{mnemonic = .SQINCD, operand_count = 3, length = 4, ops = {op_reg(dst), op_imm(imm, 4), op_imm(imm2, 4), {}, {}}} } inst_sqincd_r_r_i_i :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64, imm2: i64) -> Instruction { return Instruction{mnemonic = .SQINCD, operand_count = 4, length = 4, ops = {op_reg(dst), op_reg(src), op_imm(imm, 4), op_imm(imm2, 4), {}}} } inst_sqincd_zd_i_i :: #force_inline proc "contextless" (rz: u8, imm: i64, imm2: i64) -> Instruction { return Instruction{mnemonic = .SQINCD, operand_count = 3, length = 4, ops = {op_z_d(rz), op_imm(imm, 4), op_imm(imm2, 4), {}, {}}} } -emit_sqincd_r_i_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64, imm2: i64) { append(instructions, inst_sqincd_r_i_i(dst, imm, imm2)) } -emit_sqincd_r_r_i_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64, imm2: i64) { append(instructions, inst_sqincd_r_r_i_i(dst, src, imm, imm2)) } -emit_sqincd_zd_i_i :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, imm: i64, imm2: i64) { append(instructions, inst_sqincd_zd_i_i(rz, imm, imm2)) } +emit_sqincd_r_i_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64, imm2: i64) { append_elem(instructions, inst_sqincd_r_i_i(dst, imm, imm2)) } +emit_sqincd_r_r_i_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64, imm2: i64) { append_elem(instructions, inst_sqincd_r_r_i_i(dst, src, imm, imm2)) } +emit_sqincd_zd_i_i :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, imm: i64, imm2: i64) { append_elem(instructions, inst_sqincd_zd_i_i(rz, imm, imm2)) } inst_sqdecb_r_i_i :: #force_inline proc "contextless" (dst: Register, imm: i64, imm2: i64) -> Instruction { return Instruction{mnemonic = .SQDECB, operand_count = 3, length = 4, ops = {op_reg(dst), op_imm(imm, 4), op_imm(imm2, 4), {}, {}}} } inst_sqdecb_r_r_i_i :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64, imm2: i64) -> Instruction { return Instruction{mnemonic = .SQDECB, operand_count = 4, length = 4, ops = {op_reg(dst), op_reg(src), op_imm(imm, 4), op_imm(imm2, 4), {}}} } -emit_sqdecb_r_i_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64, imm2: i64) { append(instructions, inst_sqdecb_r_i_i(dst, imm, imm2)) } -emit_sqdecb_r_r_i_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64, imm2: i64) { append(instructions, inst_sqdecb_r_r_i_i(dst, src, imm, imm2)) } +emit_sqdecb_r_i_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64, imm2: i64) { append_elem(instructions, inst_sqdecb_r_i_i(dst, imm, imm2)) } +emit_sqdecb_r_r_i_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64, imm2: i64) { append_elem(instructions, inst_sqdecb_r_r_i_i(dst, src, imm, imm2)) } inst_sqdech_r_i_i :: #force_inline proc "contextless" (dst: Register, imm: i64, imm2: i64) -> Instruction { return Instruction{mnemonic = .SQDECH, operand_count = 3, length = 4, ops = {op_reg(dst), op_imm(imm, 4), op_imm(imm2, 4), {}, {}}} } inst_sqdech_r_r_i_i :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64, imm2: i64) -> Instruction { return Instruction{mnemonic = .SQDECH, operand_count = 4, length = 4, ops = {op_reg(dst), op_reg(src), op_imm(imm, 4), op_imm(imm2, 4), {}}} } inst_sqdech_zh_i_i :: #force_inline proc "contextless" (rz: u8, imm: i64, imm2: i64) -> Instruction { return Instruction{mnemonic = .SQDECH, operand_count = 3, length = 4, ops = {op_z_h(rz), op_imm(imm, 4), op_imm(imm2, 4), {}, {}}} } -emit_sqdech_r_i_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64, imm2: i64) { append(instructions, inst_sqdech_r_i_i(dst, imm, imm2)) } -emit_sqdech_r_r_i_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64, imm2: i64) { append(instructions, inst_sqdech_r_r_i_i(dst, src, imm, imm2)) } -emit_sqdech_zh_i_i :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, imm: i64, imm2: i64) { append(instructions, inst_sqdech_zh_i_i(rz, imm, imm2)) } +emit_sqdech_r_i_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64, imm2: i64) { append_elem(instructions, inst_sqdech_r_i_i(dst, imm, imm2)) } +emit_sqdech_r_r_i_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64, imm2: i64) { append_elem(instructions, inst_sqdech_r_r_i_i(dst, src, imm, imm2)) } +emit_sqdech_zh_i_i :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, imm: i64, imm2: i64) { append_elem(instructions, inst_sqdech_zh_i_i(rz, imm, imm2)) } inst_sqdecw_r_i_i :: #force_inline proc "contextless" (dst: Register, imm: i64, imm2: i64) -> Instruction { return Instruction{mnemonic = .SQDECW, operand_count = 3, length = 4, ops = {op_reg(dst), op_imm(imm, 4), op_imm(imm2, 4), {}, {}}} } inst_sqdecw_r_r_i_i :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64, imm2: i64) -> Instruction { return Instruction{mnemonic = .SQDECW, operand_count = 4, length = 4, ops = {op_reg(dst), op_reg(src), op_imm(imm, 4), op_imm(imm2, 4), {}}} } inst_sqdecw_zs_i_i :: #force_inline proc "contextless" (rz: u8, imm: i64, imm2: i64) -> Instruction { return Instruction{mnemonic = .SQDECW, operand_count = 3, length = 4, ops = {op_z_s(rz), op_imm(imm, 4), op_imm(imm2, 4), {}, {}}} } -emit_sqdecw_r_i_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64, imm2: i64) { append(instructions, inst_sqdecw_r_i_i(dst, imm, imm2)) } -emit_sqdecw_r_r_i_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64, imm2: i64) { append(instructions, inst_sqdecw_r_r_i_i(dst, src, imm, imm2)) } -emit_sqdecw_zs_i_i :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, imm: i64, imm2: i64) { append(instructions, inst_sqdecw_zs_i_i(rz, imm, imm2)) } +emit_sqdecw_r_i_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64, imm2: i64) { append_elem(instructions, inst_sqdecw_r_i_i(dst, imm, imm2)) } +emit_sqdecw_r_r_i_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64, imm2: i64) { append_elem(instructions, inst_sqdecw_r_r_i_i(dst, src, imm, imm2)) } +emit_sqdecw_zs_i_i :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, imm: i64, imm2: i64) { append_elem(instructions, inst_sqdecw_zs_i_i(rz, imm, imm2)) } inst_sqdecd_r_i_i :: #force_inline proc "contextless" (dst: Register, imm: i64, imm2: i64) -> Instruction { return Instruction{mnemonic = .SQDECD, operand_count = 3, length = 4, ops = {op_reg(dst), op_imm(imm, 4), op_imm(imm2, 4), {}, {}}} } inst_sqdecd_r_r_i_i :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64, imm2: i64) -> Instruction { return Instruction{mnemonic = .SQDECD, operand_count = 4, length = 4, ops = {op_reg(dst), op_reg(src), op_imm(imm, 4), op_imm(imm2, 4), {}}} } inst_sqdecd_zd_i_i :: #force_inline proc "contextless" (rz: u8, imm: i64, imm2: i64) -> Instruction { return Instruction{mnemonic = .SQDECD, operand_count = 3, length = 4, ops = {op_z_d(rz), op_imm(imm, 4), op_imm(imm2, 4), {}, {}}} } -emit_sqdecd_r_i_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64, imm2: i64) { append(instructions, inst_sqdecd_r_i_i(dst, imm, imm2)) } -emit_sqdecd_r_r_i_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64, imm2: i64) { append(instructions, inst_sqdecd_r_r_i_i(dst, src, imm, imm2)) } -emit_sqdecd_zd_i_i :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, imm: i64, imm2: i64) { append(instructions, inst_sqdecd_zd_i_i(rz, imm, imm2)) } +emit_sqdecd_r_i_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64, imm2: i64) { append_elem(instructions, inst_sqdecd_r_i_i(dst, imm, imm2)) } +emit_sqdecd_r_r_i_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64, imm2: i64) { append_elem(instructions, inst_sqdecd_r_r_i_i(dst, src, imm, imm2)) } +emit_sqdecd_zd_i_i :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, imm: i64, imm2: i64) { append_elem(instructions, inst_sqdecd_zd_i_i(rz, imm, imm2)) } inst_uqincb_r_i_i :: #force_inline proc "contextless" (dst: Register, imm: i64, imm2: i64) -> Instruction { return Instruction{mnemonic = .UQINCB, operand_count = 3, length = 4, ops = {op_reg(dst), op_imm(imm, 4), op_imm(imm2, 4), {}, {}}} } -emit_uqincb_r_i_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64, imm2: i64) { append(instructions, inst_uqincb_r_i_i(dst, imm, imm2)) } +emit_uqincb_r_i_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64, imm2: i64) { append_elem(instructions, inst_uqincb_r_i_i(dst, imm, imm2)) } inst_uqinch_r_i_i :: #force_inline proc "contextless" (dst: Register, imm: i64, imm2: i64) -> Instruction { return Instruction{mnemonic = .UQINCH, operand_count = 3, length = 4, ops = {op_reg(dst), op_imm(imm, 4), op_imm(imm2, 4), {}, {}}} } inst_uqinch_zh_i_i :: #force_inline proc "contextless" (rz: u8, imm: i64, imm2: i64) -> Instruction { return Instruction{mnemonic = .UQINCH, operand_count = 3, length = 4, ops = {op_z_h(rz), op_imm(imm, 4), op_imm(imm2, 4), {}, {}}} } -emit_uqinch_r_i_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64, imm2: i64) { append(instructions, inst_uqinch_r_i_i(dst, imm, imm2)) } -emit_uqinch_zh_i_i :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, imm: i64, imm2: i64) { append(instructions, inst_uqinch_zh_i_i(rz, imm, imm2)) } +emit_uqinch_r_i_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64, imm2: i64) { append_elem(instructions, inst_uqinch_r_i_i(dst, imm, imm2)) } +emit_uqinch_zh_i_i :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, imm: i64, imm2: i64) { append_elem(instructions, inst_uqinch_zh_i_i(rz, imm, imm2)) } inst_uqincw_r_i_i :: #force_inline proc "contextless" (dst: Register, imm: i64, imm2: i64) -> Instruction { return Instruction{mnemonic = .UQINCW, operand_count = 3, length = 4, ops = {op_reg(dst), op_imm(imm, 4), op_imm(imm2, 4), {}, {}}} } inst_uqincw_zs_i_i :: #force_inline proc "contextless" (rz: u8, imm: i64, imm2: i64) -> Instruction { return Instruction{mnemonic = .UQINCW, operand_count = 3, length = 4, ops = {op_z_s(rz), op_imm(imm, 4), op_imm(imm2, 4), {}, {}}} } -emit_uqincw_r_i_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64, imm2: i64) { append(instructions, inst_uqincw_r_i_i(dst, imm, imm2)) } -emit_uqincw_zs_i_i :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, imm: i64, imm2: i64) { append(instructions, inst_uqincw_zs_i_i(rz, imm, imm2)) } +emit_uqincw_r_i_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64, imm2: i64) { append_elem(instructions, inst_uqincw_r_i_i(dst, imm, imm2)) } +emit_uqincw_zs_i_i :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, imm: i64, imm2: i64) { append_elem(instructions, inst_uqincw_zs_i_i(rz, imm, imm2)) } inst_uqincd_r_i_i :: #force_inline proc "contextless" (dst: Register, imm: i64, imm2: i64) -> Instruction { return Instruction{mnemonic = .UQINCD, operand_count = 3, length = 4, ops = {op_reg(dst), op_imm(imm, 4), op_imm(imm2, 4), {}, {}}} } inst_uqincd_zd_i_i :: #force_inline proc "contextless" (rz: u8, imm: i64, imm2: i64) -> Instruction { return Instruction{mnemonic = .UQINCD, operand_count = 3, length = 4, ops = {op_z_d(rz), op_imm(imm, 4), op_imm(imm2, 4), {}, {}}} } -emit_uqincd_r_i_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64, imm2: i64) { append(instructions, inst_uqincd_r_i_i(dst, imm, imm2)) } -emit_uqincd_zd_i_i :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, imm: i64, imm2: i64) { append(instructions, inst_uqincd_zd_i_i(rz, imm, imm2)) } +emit_uqincd_r_i_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64, imm2: i64) { append_elem(instructions, inst_uqincd_r_i_i(dst, imm, imm2)) } +emit_uqincd_zd_i_i :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, imm: i64, imm2: i64) { append_elem(instructions, inst_uqincd_zd_i_i(rz, imm, imm2)) } inst_uqdecb_r_i_i :: #force_inline proc "contextless" (dst: Register, imm: i64, imm2: i64) -> Instruction { return Instruction{mnemonic = .UQDECB, operand_count = 3, length = 4, ops = {op_reg(dst), op_imm(imm, 4), op_imm(imm2, 4), {}, {}}} } -emit_uqdecb_r_i_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64, imm2: i64) { append(instructions, inst_uqdecb_r_i_i(dst, imm, imm2)) } +emit_uqdecb_r_i_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64, imm2: i64) { append_elem(instructions, inst_uqdecb_r_i_i(dst, imm, imm2)) } inst_uqdech_r_i_i :: #force_inline proc "contextless" (dst: Register, imm: i64, imm2: i64) -> Instruction { return Instruction{mnemonic = .UQDECH, operand_count = 3, length = 4, ops = {op_reg(dst), op_imm(imm, 4), op_imm(imm2, 4), {}, {}}} } inst_uqdech_zh_i_i :: #force_inline proc "contextless" (rz: u8, imm: i64, imm2: i64) -> Instruction { return Instruction{mnemonic = .UQDECH, operand_count = 3, length = 4, ops = {op_z_h(rz), op_imm(imm, 4), op_imm(imm2, 4), {}, {}}} } -emit_uqdech_r_i_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64, imm2: i64) { append(instructions, inst_uqdech_r_i_i(dst, imm, imm2)) } -emit_uqdech_zh_i_i :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, imm: i64, imm2: i64) { append(instructions, inst_uqdech_zh_i_i(rz, imm, imm2)) } +emit_uqdech_r_i_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64, imm2: i64) { append_elem(instructions, inst_uqdech_r_i_i(dst, imm, imm2)) } +emit_uqdech_zh_i_i :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, imm: i64, imm2: i64) { append_elem(instructions, inst_uqdech_zh_i_i(rz, imm, imm2)) } inst_uqdecw_r_i_i :: #force_inline proc "contextless" (dst: Register, imm: i64, imm2: i64) -> Instruction { return Instruction{mnemonic = .UQDECW, operand_count = 3, length = 4, ops = {op_reg(dst), op_imm(imm, 4), op_imm(imm2, 4), {}, {}}} } inst_uqdecw_zs_i_i :: #force_inline proc "contextless" (rz: u8, imm: i64, imm2: i64) -> Instruction { return Instruction{mnemonic = .UQDECW, operand_count = 3, length = 4, ops = {op_z_s(rz), op_imm(imm, 4), op_imm(imm2, 4), {}, {}}} } -emit_uqdecw_r_i_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64, imm2: i64) { append(instructions, inst_uqdecw_r_i_i(dst, imm, imm2)) } -emit_uqdecw_zs_i_i :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, imm: i64, imm2: i64) { append(instructions, inst_uqdecw_zs_i_i(rz, imm, imm2)) } +emit_uqdecw_r_i_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64, imm2: i64) { append_elem(instructions, inst_uqdecw_r_i_i(dst, imm, imm2)) } +emit_uqdecw_zs_i_i :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, imm: i64, imm2: i64) { append_elem(instructions, inst_uqdecw_zs_i_i(rz, imm, imm2)) } inst_uqdecd_r_i_i :: #force_inline proc "contextless" (dst: Register, imm: i64, imm2: i64) -> Instruction { return Instruction{mnemonic = .UQDECD, operand_count = 3, length = 4, ops = {op_reg(dst), op_imm(imm, 4), op_imm(imm2, 4), {}, {}}} } inst_uqdecd_zd_i_i :: #force_inline proc "contextless" (rz: u8, imm: i64, imm2: i64) -> Instruction { return Instruction{mnemonic = .UQDECD, operand_count = 3, length = 4, ops = {op_z_d(rz), op_imm(imm, 4), op_imm(imm2, 4), {}, {}}} } -emit_uqdecd_r_i_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64, imm2: i64) { append(instructions, inst_uqdecd_r_i_i(dst, imm, imm2)) } -emit_uqdecd_zd_i_i :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, imm: i64, imm2: i64) { append(instructions, inst_uqdecd_zd_i_i(rz, imm, imm2)) } +emit_uqdecd_r_i_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64, imm2: i64) { append_elem(instructions, inst_uqdecd_r_i_i(dst, imm, imm2)) } +emit_uqdecd_zd_i_i :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, imm: i64, imm2: i64) { append_elem(instructions, inst_uqdecd_zd_i_i(rz, imm, imm2)) } inst_cntp_r_p_pb :: #force_inline proc "contextless" (dst: Register, rz1: u8, rz2: u8) -> Instruction { return Instruction{mnemonic = .CNTP, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(Register(REG_P | (u16(rz1) & 0xF))), op_reg(Register(REG_P | (u16(rz2) & 0xF))), {}, {}}} } inst_cntp_r_p_ph :: #force_inline proc "contextless" (dst: Register, rz1: u8, rz2: u8) -> Instruction { return Instruction{mnemonic = .CNTP, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(Register(REG_P | (u16(rz1) & 0xF))), op_reg(Register(REG_P | (u16(rz2) & 0xF))), {}, {}}} } inst_cntp_r_p_ps :: #force_inline proc "contextless" (dst: Register, rz1: u8, rz2: u8) -> Instruction { return Instruction{mnemonic = .CNTP, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(Register(REG_P | (u16(rz1) & 0xF))), op_reg(Register(REG_P | (u16(rz2) & 0xF))), {}, {}}} } inst_cntp_r_p_pd :: #force_inline proc "contextless" (dst: Register, rz1: u8, rz2: u8) -> Instruction { return Instruction{mnemonic = .CNTP, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(Register(REG_P | (u16(rz1) & 0xF))), op_reg(Register(REG_P | (u16(rz2) & 0xF))), {}, {}}} } -emit_cntp_r_p_pb :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, rz1: u8, rz2: u8) { append(instructions, inst_cntp_r_p_pb(dst, rz1, rz2)) } -emit_cntp_r_p_ph :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, rz1: u8, rz2: u8) { append(instructions, inst_cntp_r_p_ph(dst, rz1, rz2)) } -emit_cntp_r_p_ps :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, rz1: u8, rz2: u8) { append(instructions, inst_cntp_r_p_ps(dst, rz1, rz2)) } -emit_cntp_r_p_pd :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, rz1: u8, rz2: u8) { append(instructions, inst_cntp_r_p_pd(dst, rz1, rz2)) } +emit_cntp_r_p_pb :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, rz1: u8, rz2: u8) { append_elem(instructions, inst_cntp_r_p_pb(dst, rz1, rz2)) } +emit_cntp_r_p_ph :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, rz1: u8, rz2: u8) { append_elem(instructions, inst_cntp_r_p_ph(dst, rz1, rz2)) } +emit_cntp_r_p_ps :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, rz1: u8, rz2: u8) { append_elem(instructions, inst_cntp_r_p_ps(dst, rz1, rz2)) } +emit_cntp_r_p_pd :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, rz1: u8, rz2: u8) { append_elem(instructions, inst_cntp_r_p_pd(dst, rz1, rz2)) } inst_incp_r_pb :: #force_inline proc "contextless" (dst: Register, rz1: u8) -> Instruction { return Instruction{mnemonic = .INCP, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(Register(REG_P | (u16(rz1) & 0xF))), {}, {}, {}}} } inst_incp_r_ph :: #force_inline proc "contextless" (dst: Register, rz1: u8) -> Instruction { return Instruction{mnemonic = .INCP, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(Register(REG_P | (u16(rz1) & 0xF))), {}, {}, {}}} } inst_incp_r_ps :: #force_inline proc "contextless" (dst: Register, rz1: u8) -> Instruction { return Instruction{mnemonic = .INCP, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(Register(REG_P | (u16(rz1) & 0xF))), {}, {}, {}}} } @@ -4086,13 +4114,13 @@ inst_incp_r_pd :: #force_inline proc "contextless" (dst: Register inst_incp_zh_ph :: #force_inline proc "contextless" (rz: u8, rz2: u8) -> Instruction { return Instruction{mnemonic = .INCP, operand_count = 2, length = 4, ops = {op_z_h(rz), op_reg(Register(REG_P | (u16(rz2) & 0xF))), {}, {}, {}}} } inst_incp_zs_ps :: #force_inline proc "contextless" (rz: u8, rz2: u8) -> Instruction { return Instruction{mnemonic = .INCP, operand_count = 2, length = 4, ops = {op_z_s(rz), op_reg(Register(REG_P | (u16(rz2) & 0xF))), {}, {}, {}}} } inst_incp_zd_pd :: #force_inline proc "contextless" (rz: u8, rz2: u8) -> Instruction { return Instruction{mnemonic = .INCP, operand_count = 2, length = 4, ops = {op_z_d(rz), op_reg(Register(REG_P | (u16(rz2) & 0xF))), {}, {}, {}}} } -emit_incp_r_pb :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, rz1: u8) { append(instructions, inst_incp_r_pb(dst, rz1)) } -emit_incp_r_ph :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, rz1: u8) { append(instructions, inst_incp_r_ph(dst, rz1)) } -emit_incp_r_ps :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, rz1: u8) { append(instructions, inst_incp_r_ps(dst, rz1)) } -emit_incp_r_pd :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, rz1: u8) { append(instructions, inst_incp_r_pd(dst, rz1)) } -emit_incp_zh_ph :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8) { append(instructions, inst_incp_zh_ph(rz, rz2)) } -emit_incp_zs_ps :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8) { append(instructions, inst_incp_zs_ps(rz, rz2)) } -emit_incp_zd_pd :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8) { append(instructions, inst_incp_zd_pd(rz, rz2)) } +emit_incp_r_pb :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, rz1: u8) { append_elem(instructions, inst_incp_r_pb(dst, rz1)) } +emit_incp_r_ph :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, rz1: u8) { append_elem(instructions, inst_incp_r_ph(dst, rz1)) } +emit_incp_r_ps :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, rz1: u8) { append_elem(instructions, inst_incp_r_ps(dst, rz1)) } +emit_incp_r_pd :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, rz1: u8) { append_elem(instructions, inst_incp_r_pd(dst, rz1)) } +emit_incp_zh_ph :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8) { append_elem(instructions, inst_incp_zh_ph(rz, rz2)) } +emit_incp_zs_ps :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8) { append_elem(instructions, inst_incp_zs_ps(rz, rz2)) } +emit_incp_zd_pd :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8) { append_elem(instructions, inst_incp_zd_pd(rz, rz2)) } inst_decp_r_pb :: #force_inline proc "contextless" (dst: Register, rz1: u8) -> Instruction { return Instruction{mnemonic = .DECP, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(Register(REG_P | (u16(rz1) & 0xF))), {}, {}, {}}} } inst_decp_r_ph :: #force_inline proc "contextless" (dst: Register, rz1: u8) -> Instruction { return Instruction{mnemonic = .DECP, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(Register(REG_P | (u16(rz1) & 0xF))), {}, {}, {}}} } inst_decp_r_ps :: #force_inline proc "contextless" (dst: Register, rz1: u8) -> Instruction { return Instruction{mnemonic = .DECP, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(Register(REG_P | (u16(rz1) & 0xF))), {}, {}, {}}} } @@ -4100,13 +4128,13 @@ inst_decp_r_pd :: #force_inline proc "contextless" (dst: Register inst_decp_zh_ph :: #force_inline proc "contextless" (rz: u8, rz2: u8) -> Instruction { return Instruction{mnemonic = .DECP, operand_count = 2, length = 4, ops = {op_z_h(rz), op_reg(Register(REG_P | (u16(rz2) & 0xF))), {}, {}, {}}} } inst_decp_zs_ps :: #force_inline proc "contextless" (rz: u8, rz2: u8) -> Instruction { return Instruction{mnemonic = .DECP, operand_count = 2, length = 4, ops = {op_z_s(rz), op_reg(Register(REG_P | (u16(rz2) & 0xF))), {}, {}, {}}} } inst_decp_zd_pd :: #force_inline proc "contextless" (rz: u8, rz2: u8) -> Instruction { return Instruction{mnemonic = .DECP, operand_count = 2, length = 4, ops = {op_z_d(rz), op_reg(Register(REG_P | (u16(rz2) & 0xF))), {}, {}, {}}} } -emit_decp_r_pb :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, rz1: u8) { append(instructions, inst_decp_r_pb(dst, rz1)) } -emit_decp_r_ph :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, rz1: u8) { append(instructions, inst_decp_r_ph(dst, rz1)) } -emit_decp_r_ps :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, rz1: u8) { append(instructions, inst_decp_r_ps(dst, rz1)) } -emit_decp_r_pd :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, rz1: u8) { append(instructions, inst_decp_r_pd(dst, rz1)) } -emit_decp_zh_ph :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8) { append(instructions, inst_decp_zh_ph(rz, rz2)) } -emit_decp_zs_ps :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8) { append(instructions, inst_decp_zs_ps(rz, rz2)) } -emit_decp_zd_pd :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8) { append(instructions, inst_decp_zd_pd(rz, rz2)) } +emit_decp_r_pb :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, rz1: u8) { append_elem(instructions, inst_decp_r_pb(dst, rz1)) } +emit_decp_r_ph :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, rz1: u8) { append_elem(instructions, inst_decp_r_ph(dst, rz1)) } +emit_decp_r_ps :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, rz1: u8) { append_elem(instructions, inst_decp_r_ps(dst, rz1)) } +emit_decp_r_pd :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, rz1: u8) { append_elem(instructions, inst_decp_r_pd(dst, rz1)) } +emit_decp_zh_ph :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8) { append_elem(instructions, inst_decp_zh_ph(rz, rz2)) } +emit_decp_zs_ps :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8) { append_elem(instructions, inst_decp_zs_ps(rz, rz2)) } +emit_decp_zd_pd :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8) { append_elem(instructions, inst_decp_zd_pd(rz, rz2)) } inst_sqincp_r_pb :: #force_inline proc "contextless" (dst: Register, rz1: u8) -> Instruction { return Instruction{mnemonic = .SQINCP, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(Register(REG_P | (u16(rz1) & 0xF))), {}, {}, {}}} } inst_sqincp_r_ph :: #force_inline proc "contextless" (dst: Register, rz1: u8) -> Instruction { return Instruction{mnemonic = .SQINCP, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(Register(REG_P | (u16(rz1) & 0xF))), {}, {}, {}}} } inst_sqincp_r_ps :: #force_inline proc "contextless" (dst: Register, rz1: u8) -> Instruction { return Instruction{mnemonic = .SQINCP, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(Register(REG_P | (u16(rz1) & 0xF))), {}, {}, {}}} } @@ -4118,17 +4146,17 @@ inst_sqincp_r_pd_r :: #force_inline proc "contextless" (dst: Register inst_sqincp_zh_ph :: #force_inline proc "contextless" (rz: u8, rz2: u8) -> Instruction { return Instruction{mnemonic = .SQINCP, operand_count = 2, length = 4, ops = {op_z_h(rz), op_reg(Register(REG_P | (u16(rz2) & 0xF))), {}, {}, {}}} } inst_sqincp_zs_ps :: #force_inline proc "contextless" (rz: u8, rz2: u8) -> Instruction { return Instruction{mnemonic = .SQINCP, operand_count = 2, length = 4, ops = {op_z_s(rz), op_reg(Register(REG_P | (u16(rz2) & 0xF))), {}, {}, {}}} } inst_sqincp_zd_pd :: #force_inline proc "contextless" (rz: u8, rz2: u8) -> Instruction { return Instruction{mnemonic = .SQINCP, operand_count = 2, length = 4, ops = {op_z_d(rz), op_reg(Register(REG_P | (u16(rz2) & 0xF))), {}, {}, {}}} } -emit_sqincp_r_pb :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, rz1: u8) { append(instructions, inst_sqincp_r_pb(dst, rz1)) } -emit_sqincp_r_ph :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, rz1: u8) { append(instructions, inst_sqincp_r_ph(dst, rz1)) } -emit_sqincp_r_ps :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, rz1: u8) { append(instructions, inst_sqincp_r_ps(dst, rz1)) } -emit_sqincp_r_pd :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, rz1: u8) { append(instructions, inst_sqincp_r_pd(dst, rz1)) } -emit_sqincp_r_pb_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, rz1: u8, src: Register) { append(instructions, inst_sqincp_r_pb_r(dst, rz1, src)) } -emit_sqincp_r_ph_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, rz1: u8, src: Register) { append(instructions, inst_sqincp_r_ph_r(dst, rz1, src)) } -emit_sqincp_r_ps_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, rz1: u8, src: Register) { append(instructions, inst_sqincp_r_ps_r(dst, rz1, src)) } -emit_sqincp_r_pd_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, rz1: u8, src: Register) { append(instructions, inst_sqincp_r_pd_r(dst, rz1, src)) } -emit_sqincp_zh_ph :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8) { append(instructions, inst_sqincp_zh_ph(rz, rz2)) } -emit_sqincp_zs_ps :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8) { append(instructions, inst_sqincp_zs_ps(rz, rz2)) } -emit_sqincp_zd_pd :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8) { append(instructions, inst_sqincp_zd_pd(rz, rz2)) } +emit_sqincp_r_pb :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, rz1: u8) { append_elem(instructions, inst_sqincp_r_pb(dst, rz1)) } +emit_sqincp_r_ph :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, rz1: u8) { append_elem(instructions, inst_sqincp_r_ph(dst, rz1)) } +emit_sqincp_r_ps :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, rz1: u8) { append_elem(instructions, inst_sqincp_r_ps(dst, rz1)) } +emit_sqincp_r_pd :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, rz1: u8) { append_elem(instructions, inst_sqincp_r_pd(dst, rz1)) } +emit_sqincp_r_pb_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, rz1: u8, src: Register) { append_elem(instructions, inst_sqincp_r_pb_r(dst, rz1, src)) } +emit_sqincp_r_ph_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, rz1: u8, src: Register) { append_elem(instructions, inst_sqincp_r_ph_r(dst, rz1, src)) } +emit_sqincp_r_ps_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, rz1: u8, src: Register) { append_elem(instructions, inst_sqincp_r_ps_r(dst, rz1, src)) } +emit_sqincp_r_pd_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, rz1: u8, src: Register) { append_elem(instructions, inst_sqincp_r_pd_r(dst, rz1, src)) } +emit_sqincp_zh_ph :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8) { append_elem(instructions, inst_sqincp_zh_ph(rz, rz2)) } +emit_sqincp_zs_ps :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8) { append_elem(instructions, inst_sqincp_zs_ps(rz, rz2)) } +emit_sqincp_zd_pd :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8) { append_elem(instructions, inst_sqincp_zd_pd(rz, rz2)) } inst_sqdecp_r_pb :: #force_inline proc "contextless" (dst: Register, rz1: u8) -> Instruction { return Instruction{mnemonic = .SQDECP, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(Register(REG_P | (u16(rz1) & 0xF))), {}, {}, {}}} } inst_sqdecp_r_ph :: #force_inline proc "contextless" (dst: Register, rz1: u8) -> Instruction { return Instruction{mnemonic = .SQDECP, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(Register(REG_P | (u16(rz1) & 0xF))), {}, {}, {}}} } inst_sqdecp_r_ps :: #force_inline proc "contextless" (dst: Register, rz1: u8) -> Instruction { return Instruction{mnemonic = .SQDECP, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(Register(REG_P | (u16(rz1) & 0xF))), {}, {}, {}}} } @@ -4140,17 +4168,17 @@ inst_sqdecp_r_pd_r :: #force_inline proc "contextless" (dst: Register inst_sqdecp_zh_ph :: #force_inline proc "contextless" (rz: u8, rz2: u8) -> Instruction { return Instruction{mnemonic = .SQDECP, operand_count = 2, length = 4, ops = {op_z_h(rz), op_reg(Register(REG_P | (u16(rz2) & 0xF))), {}, {}, {}}} } inst_sqdecp_zs_ps :: #force_inline proc "contextless" (rz: u8, rz2: u8) -> Instruction { return Instruction{mnemonic = .SQDECP, operand_count = 2, length = 4, ops = {op_z_s(rz), op_reg(Register(REG_P | (u16(rz2) & 0xF))), {}, {}, {}}} } inst_sqdecp_zd_pd :: #force_inline proc "contextless" (rz: u8, rz2: u8) -> Instruction { return Instruction{mnemonic = .SQDECP, operand_count = 2, length = 4, ops = {op_z_d(rz), op_reg(Register(REG_P | (u16(rz2) & 0xF))), {}, {}, {}}} } -emit_sqdecp_r_pb :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, rz1: u8) { append(instructions, inst_sqdecp_r_pb(dst, rz1)) } -emit_sqdecp_r_ph :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, rz1: u8) { append(instructions, inst_sqdecp_r_ph(dst, rz1)) } -emit_sqdecp_r_ps :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, rz1: u8) { append(instructions, inst_sqdecp_r_ps(dst, rz1)) } -emit_sqdecp_r_pd :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, rz1: u8) { append(instructions, inst_sqdecp_r_pd(dst, rz1)) } -emit_sqdecp_r_pb_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, rz1: u8, src: Register) { append(instructions, inst_sqdecp_r_pb_r(dst, rz1, src)) } -emit_sqdecp_r_ph_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, rz1: u8, src: Register) { append(instructions, inst_sqdecp_r_ph_r(dst, rz1, src)) } -emit_sqdecp_r_ps_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, rz1: u8, src: Register) { append(instructions, inst_sqdecp_r_ps_r(dst, rz1, src)) } -emit_sqdecp_r_pd_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, rz1: u8, src: Register) { append(instructions, inst_sqdecp_r_pd_r(dst, rz1, src)) } -emit_sqdecp_zh_ph :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8) { append(instructions, inst_sqdecp_zh_ph(rz, rz2)) } -emit_sqdecp_zs_ps :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8) { append(instructions, inst_sqdecp_zs_ps(rz, rz2)) } -emit_sqdecp_zd_pd :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8) { append(instructions, inst_sqdecp_zd_pd(rz, rz2)) } +emit_sqdecp_r_pb :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, rz1: u8) { append_elem(instructions, inst_sqdecp_r_pb(dst, rz1)) } +emit_sqdecp_r_ph :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, rz1: u8) { append_elem(instructions, inst_sqdecp_r_ph(dst, rz1)) } +emit_sqdecp_r_ps :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, rz1: u8) { append_elem(instructions, inst_sqdecp_r_ps(dst, rz1)) } +emit_sqdecp_r_pd :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, rz1: u8) { append_elem(instructions, inst_sqdecp_r_pd(dst, rz1)) } +emit_sqdecp_r_pb_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, rz1: u8, src: Register) { append_elem(instructions, inst_sqdecp_r_pb_r(dst, rz1, src)) } +emit_sqdecp_r_ph_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, rz1: u8, src: Register) { append_elem(instructions, inst_sqdecp_r_ph_r(dst, rz1, src)) } +emit_sqdecp_r_ps_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, rz1: u8, src: Register) { append_elem(instructions, inst_sqdecp_r_ps_r(dst, rz1, src)) } +emit_sqdecp_r_pd_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, rz1: u8, src: Register) { append_elem(instructions, inst_sqdecp_r_pd_r(dst, rz1, src)) } +emit_sqdecp_zh_ph :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8) { append_elem(instructions, inst_sqdecp_zh_ph(rz, rz2)) } +emit_sqdecp_zs_ps :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8) { append_elem(instructions, inst_sqdecp_zs_ps(rz, rz2)) } +emit_sqdecp_zd_pd :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8) { append_elem(instructions, inst_sqdecp_zd_pd(rz, rz2)) } inst_uqincp_r_pb :: #force_inline proc "contextless" (dst: Register, rz1: u8) -> Instruction { return Instruction{mnemonic = .UQINCP, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(Register(REG_P | (u16(rz1) & 0xF))), {}, {}, {}}} } inst_uqincp_r_ph :: #force_inline proc "contextless" (dst: Register, rz1: u8) -> Instruction { return Instruction{mnemonic = .UQINCP, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(Register(REG_P | (u16(rz1) & 0xF))), {}, {}, {}}} } inst_uqincp_r_ps :: #force_inline proc "contextless" (dst: Register, rz1: u8) -> Instruction { return Instruction{mnemonic = .UQINCP, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(Register(REG_P | (u16(rz1) & 0xF))), {}, {}, {}}} } @@ -4158,13 +4186,13 @@ inst_uqincp_r_pd :: #force_inline proc "contextless" (dst: Register inst_uqincp_zh_ph :: #force_inline proc "contextless" (rz: u8, rz2: u8) -> Instruction { return Instruction{mnemonic = .UQINCP, operand_count = 2, length = 4, ops = {op_z_h(rz), op_reg(Register(REG_P | (u16(rz2) & 0xF))), {}, {}, {}}} } inst_uqincp_zs_ps :: #force_inline proc "contextless" (rz: u8, rz2: u8) -> Instruction { return Instruction{mnemonic = .UQINCP, operand_count = 2, length = 4, ops = {op_z_s(rz), op_reg(Register(REG_P | (u16(rz2) & 0xF))), {}, {}, {}}} } inst_uqincp_zd_pd :: #force_inline proc "contextless" (rz: u8, rz2: u8) -> Instruction { return Instruction{mnemonic = .UQINCP, operand_count = 2, length = 4, ops = {op_z_d(rz), op_reg(Register(REG_P | (u16(rz2) & 0xF))), {}, {}, {}}} } -emit_uqincp_r_pb :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, rz1: u8) { append(instructions, inst_uqincp_r_pb(dst, rz1)) } -emit_uqincp_r_ph :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, rz1: u8) { append(instructions, inst_uqincp_r_ph(dst, rz1)) } -emit_uqincp_r_ps :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, rz1: u8) { append(instructions, inst_uqincp_r_ps(dst, rz1)) } -emit_uqincp_r_pd :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, rz1: u8) { append(instructions, inst_uqincp_r_pd(dst, rz1)) } -emit_uqincp_zh_ph :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8) { append(instructions, inst_uqincp_zh_ph(rz, rz2)) } -emit_uqincp_zs_ps :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8) { append(instructions, inst_uqincp_zs_ps(rz, rz2)) } -emit_uqincp_zd_pd :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8) { append(instructions, inst_uqincp_zd_pd(rz, rz2)) } +emit_uqincp_r_pb :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, rz1: u8) { append_elem(instructions, inst_uqincp_r_pb(dst, rz1)) } +emit_uqincp_r_ph :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, rz1: u8) { append_elem(instructions, inst_uqincp_r_ph(dst, rz1)) } +emit_uqincp_r_ps :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, rz1: u8) { append_elem(instructions, inst_uqincp_r_ps(dst, rz1)) } +emit_uqincp_r_pd :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, rz1: u8) { append_elem(instructions, inst_uqincp_r_pd(dst, rz1)) } +emit_uqincp_zh_ph :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8) { append_elem(instructions, inst_uqincp_zh_ph(rz, rz2)) } +emit_uqincp_zs_ps :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8) { append_elem(instructions, inst_uqincp_zs_ps(rz, rz2)) } +emit_uqincp_zd_pd :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8) { append_elem(instructions, inst_uqincp_zd_pd(rz, rz2)) } inst_uqdecp_r_pb :: #force_inline proc "contextless" (dst: Register, rz1: u8) -> Instruction { return Instruction{mnemonic = .UQDECP, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(Register(REG_P | (u16(rz1) & 0xF))), {}, {}, {}}} } inst_uqdecp_r_ph :: #force_inline proc "contextless" (dst: Register, rz1: u8) -> Instruction { return Instruction{mnemonic = .UQDECP, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(Register(REG_P | (u16(rz1) & 0xF))), {}, {}, {}}} } inst_uqdecp_r_ps :: #force_inline proc "contextless" (dst: Register, rz1: u8) -> Instruction { return Instruction{mnemonic = .UQDECP, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(Register(REG_P | (u16(rz1) & 0xF))), {}, {}, {}}} } @@ -4172,63 +4200,63 @@ inst_uqdecp_r_pd :: #force_inline proc "contextless" (dst: Register inst_uqdecp_zh_ph :: #force_inline proc "contextless" (rz: u8, rz2: u8) -> Instruction { return Instruction{mnemonic = .UQDECP, operand_count = 2, length = 4, ops = {op_z_h(rz), op_reg(Register(REG_P | (u16(rz2) & 0xF))), {}, {}, {}}} } inst_uqdecp_zs_ps :: #force_inline proc "contextless" (rz: u8, rz2: u8) -> Instruction { return Instruction{mnemonic = .UQDECP, operand_count = 2, length = 4, ops = {op_z_s(rz), op_reg(Register(REG_P | (u16(rz2) & 0xF))), {}, {}, {}}} } inst_uqdecp_zd_pd :: #force_inline proc "contextless" (rz: u8, rz2: u8) -> Instruction { return Instruction{mnemonic = .UQDECP, operand_count = 2, length = 4, ops = {op_z_d(rz), op_reg(Register(REG_P | (u16(rz2) & 0xF))), {}, {}, {}}} } -emit_uqdecp_r_pb :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, rz1: u8) { append(instructions, inst_uqdecp_r_pb(dst, rz1)) } -emit_uqdecp_r_ph :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, rz1: u8) { append(instructions, inst_uqdecp_r_ph(dst, rz1)) } -emit_uqdecp_r_ps :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, rz1: u8) { append(instructions, inst_uqdecp_r_ps(dst, rz1)) } -emit_uqdecp_r_pd :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, rz1: u8) { append(instructions, inst_uqdecp_r_pd(dst, rz1)) } -emit_uqdecp_zh_ph :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8) { append(instructions, inst_uqdecp_zh_ph(rz, rz2)) } -emit_uqdecp_zs_ps :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8) { append(instructions, inst_uqdecp_zs_ps(rz, rz2)) } -emit_uqdecp_zd_pd :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8) { append(instructions, inst_uqdecp_zd_pd(rz, rz2)) } +emit_uqdecp_r_pb :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, rz1: u8) { append_elem(instructions, inst_uqdecp_r_pb(dst, rz1)) } +emit_uqdecp_r_ph :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, rz1: u8) { append_elem(instructions, inst_uqdecp_r_ph(dst, rz1)) } +emit_uqdecp_r_ps :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, rz1: u8) { append_elem(instructions, inst_uqdecp_r_ps(dst, rz1)) } +emit_uqdecp_r_pd :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, rz1: u8) { append_elem(instructions, inst_uqdecp_r_pd(dst, rz1)) } +emit_uqdecp_zh_ph :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8) { append_elem(instructions, inst_uqdecp_zh_ph(rz, rz2)) } +emit_uqdecp_zs_ps :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8) { append_elem(instructions, inst_uqdecp_zs_ps(rz, rz2)) } +emit_uqdecp_zd_pd :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8) { append_elem(instructions, inst_uqdecp_zd_pd(rz, rz2)) } inst_ld1q_i_p_m :: #force_inline proc "contextless" (imm: i64, rz1: u8, mem: Memory) -> Instruction { return Instruction{mnemonic = .LD1Q, operand_count = 3, length = 4, ops = {op_imm(imm, 4), op_reg(Register(REG_P | (u16(rz1) & 0xF))), op_mem(mem), {}, {}}} } -emit_ld1q_i_p_m :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, rz1: u8, mem: Memory) { append(instructions, inst_ld1q_i_p_m(imm, rz1, mem)) } +emit_ld1q_i_p_m :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, rz1: u8, mem: Memory) { append_elem(instructions, inst_ld1q_i_p_m(imm, rz1, mem)) } inst_st1q_i_p_m :: #force_inline proc "contextless" (imm: i64, rz1: u8, mem: Memory) -> Instruction { return Instruction{mnemonic = .ST1Q, operand_count = 3, length = 4, ops = {op_imm(imm, 4), op_reg(Register(REG_P | (u16(rz1) & 0xF))), op_mem(mem), {}, {}}} } -emit_st1q_i_p_m :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, rz1: u8, mem: Memory) { append(instructions, inst_st1q_i_p_m(imm, rz1, mem)) } +emit_st1q_i_p_m :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, rz1: u8, mem: Memory) { append_elem(instructions, inst_st1q_i_p_m(imm, rz1, mem)) } inst_mova_zb_p_i :: #force_inline proc "contextless" (rz: u8, rz2: u8, imm: i64) -> Instruction { return Instruction{mnemonic = .MOVA, operand_count = 3, length = 4, ops = {op_z_b(rz), op_reg(Register(REG_P | (u16(rz2) & 0xF))), op_imm(imm, 4), {}, {}}} } inst_mova_i_p_zb :: #force_inline proc "contextless" (imm: i64, rz1: u8, rz2: u8) -> Instruction { return Instruction{mnemonic = .MOVA, operand_count = 3, length = 4, ops = {op_imm(imm, 4), op_reg(Register(REG_P | (u16(rz1) & 0xF))), op_z_b(rz2), {}, {}}} } -emit_mova_zb_p_i :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, imm: i64) { append(instructions, inst_mova_zb_p_i(rz, rz2, imm)) } -emit_mova_i_p_zb :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, rz1: u8, rz2: u8) { append(instructions, inst_mova_i_p_zb(imm, rz1, rz2)) } +emit_mova_zb_p_i :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, imm: i64) { append_elem(instructions, inst_mova_zb_p_i(rz, rz2, imm)) } +emit_mova_i_p_zb :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, rz1: u8, rz2: u8) { append_elem(instructions, inst_mova_i_p_zb(imm, rz1, rz2)) } inst_fcmla_v4h_v4h_v4h_i :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .FCMLA, operand_count = 4, length = 4, ops = {op_v_4h(dst), op_v_4h(src), op_v_4h(src2), op_imm(imm, 1), {}}} } inst_fcmla_v8h_v8h_v8h_i :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .FCMLA, operand_count = 4, length = 4, ops = {op_v_8h(dst), op_v_8h(src), op_v_8h(src2), op_imm(imm, 1), {}}} } inst_fcmla_v4s_v4s_v4s_i :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .FCMLA, operand_count = 4, length = 4, ops = {op_v_4s(dst), op_v_4s(src), op_v_4s(src2), op_imm(imm, 1), {}}} } inst_fcmla_v2d_v2d_v2d_i :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .FCMLA, operand_count = 4, length = 4, ops = {op_v_2d(dst), op_v_2d(src), op_v_2d(src2), op_imm(imm, 1), {}}} } -emit_fcmla_v4h_v4h_v4h_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, imm: i64) { append(instructions, inst_fcmla_v4h_v4h_v4h_i(dst, src, src2, imm)) } -emit_fcmla_v8h_v8h_v8h_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, imm: i64) { append(instructions, inst_fcmla_v8h_v8h_v8h_i(dst, src, src2, imm)) } -emit_fcmla_v4s_v4s_v4s_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, imm: i64) { append(instructions, inst_fcmla_v4s_v4s_v4s_i(dst, src, src2, imm)) } -emit_fcmla_v2d_v2d_v2d_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, imm: i64) { append(instructions, inst_fcmla_v2d_v2d_v2d_i(dst, src, src2, imm)) } +emit_fcmla_v4h_v4h_v4h_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, imm: i64) { append_elem(instructions, inst_fcmla_v4h_v4h_v4h_i(dst, src, src2, imm)) } +emit_fcmla_v8h_v8h_v8h_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, imm: i64) { append_elem(instructions, inst_fcmla_v8h_v8h_v8h_i(dst, src, src2, imm)) } +emit_fcmla_v4s_v4s_v4s_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, imm: i64) { append_elem(instructions, inst_fcmla_v4s_v4s_v4s_i(dst, src, src2, imm)) } +emit_fcmla_v2d_v2d_v2d_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, imm: i64) { append_elem(instructions, inst_fcmla_v2d_v2d_v2d_i(dst, src, src2, imm)) } inst_fcadd_v4h_v4h_v4h_i :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .FCADD, operand_count = 4, length = 4, ops = {op_v_4h(dst), op_v_4h(src), op_v_4h(src2), op_imm(imm, 1), {}}} } inst_fcadd_v8h_v8h_v8h_i :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .FCADD, operand_count = 4, length = 4, ops = {op_v_8h(dst), op_v_8h(src), op_v_8h(src2), op_imm(imm, 1), {}}} } inst_fcadd_v4s_v4s_v4s_i :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .FCADD, operand_count = 4, length = 4, ops = {op_v_4s(dst), op_v_4s(src), op_v_4s(src2), op_imm(imm, 1), {}}} } inst_fcadd_v2d_v2d_v2d_i :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .FCADD, operand_count = 4, length = 4, ops = {op_v_2d(dst), op_v_2d(src), op_v_2d(src2), op_imm(imm, 1), {}}} } -emit_fcadd_v4h_v4h_v4h_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, imm: i64) { append(instructions, inst_fcadd_v4h_v4h_v4h_i(dst, src, src2, imm)) } -emit_fcadd_v8h_v8h_v8h_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, imm: i64) { append(instructions, inst_fcadd_v8h_v8h_v8h_i(dst, src, src2, imm)) } -emit_fcadd_v4s_v4s_v4s_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, imm: i64) { append(instructions, inst_fcadd_v4s_v4s_v4s_i(dst, src, src2, imm)) } -emit_fcadd_v2d_v2d_v2d_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, imm: i64) { append(instructions, inst_fcadd_v2d_v2d_v2d_i(dst, src, src2, imm)) } +emit_fcadd_v4h_v4h_v4h_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, imm: i64) { append_elem(instructions, inst_fcadd_v4h_v4h_v4h_i(dst, src, src2, imm)) } +emit_fcadd_v8h_v8h_v8h_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, imm: i64) { append_elem(instructions, inst_fcadd_v8h_v8h_v8h_i(dst, src, src2, imm)) } +emit_fcadd_v4s_v4s_v4s_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, imm: i64) { append_elem(instructions, inst_fcadd_v4s_v4s_v4s_i(dst, src, src2, imm)) } +emit_fcadd_v2d_v2d_v2d_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, imm: i64) { append_elem(instructions, inst_fcadd_v2d_v2d_v2d_i(dst, src, src2, imm)) } inst_prfb_i_p_m :: #force_inline proc "contextless" (imm: i64, rz1: u8, mem: Memory) -> Instruction { return Instruction{mnemonic = .PRFB, operand_count = 3, length = 4, ops = {op_imm(imm, 1), op_reg(Register(REG_P | (u16(rz1) & 0xF))), op_mem(mem), {}, {}}} } -emit_prfb_i_p_m :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, rz1: u8, mem: Memory) { append(instructions, inst_prfb_i_p_m(imm, rz1, mem)) } +emit_prfb_i_p_m :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, rz1: u8, mem: Memory) { append_elem(instructions, inst_prfb_i_p_m(imm, rz1, mem)) } inst_prfh_i_p_m :: #force_inline proc "contextless" (imm: i64, rz1: u8, mem: Memory) -> Instruction { return Instruction{mnemonic = .PRFH, operand_count = 3, length = 4, ops = {op_imm(imm, 1), op_reg(Register(REG_P | (u16(rz1) & 0xF))), op_mem(mem), {}, {}}} } -emit_prfh_i_p_m :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, rz1: u8, mem: Memory) { append(instructions, inst_prfh_i_p_m(imm, rz1, mem)) } +emit_prfh_i_p_m :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, rz1: u8, mem: Memory) { append_elem(instructions, inst_prfh_i_p_m(imm, rz1, mem)) } inst_prfw_i_p_m :: #force_inline proc "contextless" (imm: i64, rz1: u8, mem: Memory) -> Instruction { return Instruction{mnemonic = .PRFW, operand_count = 3, length = 4, ops = {op_imm(imm, 1), op_reg(Register(REG_P | (u16(rz1) & 0xF))), op_mem(mem), {}, {}}} } -emit_prfw_i_p_m :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, rz1: u8, mem: Memory) { append(instructions, inst_prfw_i_p_m(imm, rz1, mem)) } +emit_prfw_i_p_m :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, rz1: u8, mem: Memory) { append_elem(instructions, inst_prfw_i_p_m(imm, rz1, mem)) } inst_prfd_i_p_m :: #force_inline proc "contextless" (imm: i64, rz1: u8, mem: Memory) -> Instruction { return Instruction{mnemonic = .PRFD, operand_count = 3, length = 4, ops = {op_imm(imm, 1), op_reg(Register(REG_P | (u16(rz1) & 0xF))), op_mem(mem), {}, {}}} } -emit_prfd_i_p_m :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, rz1: u8, mem: Memory) { append(instructions, inst_prfd_i_p_m(imm, rz1, mem)) } +emit_prfd_i_p_m :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, rz1: u8, mem: Memory) { append_elem(instructions, inst_prfd_i_p_m(imm, rz1, mem)) } inst_ldnt1b_zb_p_m :: #force_inline proc "contextless" (rz: u8, rz2: u8, mem: Memory) -> Instruction { return Instruction{mnemonic = .LDNT1B, operand_count = 3, length = 4, ops = {op_v_list(Register(REG_Z | (u16(rz) & 0x1F)), ZSHAPE_B, 1), op_reg(Register(REG_P | (u16(rz2) & 0xF))), op_mem(mem), {}, {}}} } -emit_ldnt1b_zb_p_m :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, mem: Memory) { append(instructions, inst_ldnt1b_zb_p_m(rz, rz2, mem)) } +emit_ldnt1b_zb_p_m :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, mem: Memory) { append_elem(instructions, inst_ldnt1b_zb_p_m(rz, rz2, mem)) } inst_ldnt1h_zh_p_m :: #force_inline proc "contextless" (rz: u8, rz2: u8, mem: Memory) -> Instruction { return Instruction{mnemonic = .LDNT1H, operand_count = 3, length = 4, ops = {op_v_list(Register(REG_Z | (u16(rz) & 0x1F)), ZSHAPE_H, 1), op_reg(Register(REG_P | (u16(rz2) & 0xF))), op_mem(mem), {}, {}}} } -emit_ldnt1h_zh_p_m :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, mem: Memory) { append(instructions, inst_ldnt1h_zh_p_m(rz, rz2, mem)) } +emit_ldnt1h_zh_p_m :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, mem: Memory) { append_elem(instructions, inst_ldnt1h_zh_p_m(rz, rz2, mem)) } inst_ldnt1w_zs_p_m :: #force_inline proc "contextless" (rz: u8, rz2: u8, mem: Memory) -> Instruction { return Instruction{mnemonic = .LDNT1W, operand_count = 3, length = 4, ops = {op_v_list(Register(REG_Z | (u16(rz) & 0x1F)), ZSHAPE_S, 1), op_reg(Register(REG_P | (u16(rz2) & 0xF))), op_mem(mem), {}, {}}} } -emit_ldnt1w_zs_p_m :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, mem: Memory) { append(instructions, inst_ldnt1w_zs_p_m(rz, rz2, mem)) } +emit_ldnt1w_zs_p_m :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, mem: Memory) { append_elem(instructions, inst_ldnt1w_zs_p_m(rz, rz2, mem)) } inst_ldnt1d_zd_p_m :: #force_inline proc "contextless" (rz: u8, rz2: u8, mem: Memory) -> Instruction { return Instruction{mnemonic = .LDNT1D, operand_count = 3, length = 4, ops = {op_v_list(Register(REG_Z | (u16(rz) & 0x1F)), ZSHAPE_D, 1), op_reg(Register(REG_P | (u16(rz2) & 0xF))), op_mem(mem), {}, {}}} } -emit_ldnt1d_zd_p_m :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, mem: Memory) { append(instructions, inst_ldnt1d_zd_p_m(rz, rz2, mem)) } +emit_ldnt1d_zd_p_m :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, mem: Memory) { append_elem(instructions, inst_ldnt1d_zd_p_m(rz, rz2, mem)) } inst_stnt1b_zb_p_m :: #force_inline proc "contextless" (rz: u8, rz2: u8, mem: Memory) -> Instruction { return Instruction{mnemonic = .STNT1B, operand_count = 3, length = 4, ops = {op_v_list(Register(REG_Z | (u16(rz) & 0x1F)), ZSHAPE_B, 1), op_reg(Register(REG_P | (u16(rz2) & 0xF))), op_mem(mem), {}, {}}} } -emit_stnt1b_zb_p_m :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, mem: Memory) { append(instructions, inst_stnt1b_zb_p_m(rz, rz2, mem)) } +emit_stnt1b_zb_p_m :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, mem: Memory) { append_elem(instructions, inst_stnt1b_zb_p_m(rz, rz2, mem)) } inst_stnt1h_zh_p_m :: #force_inline proc "contextless" (rz: u8, rz2: u8, mem: Memory) -> Instruction { return Instruction{mnemonic = .STNT1H, operand_count = 3, length = 4, ops = {op_v_list(Register(REG_Z | (u16(rz) & 0x1F)), ZSHAPE_H, 1), op_reg(Register(REG_P | (u16(rz2) & 0xF))), op_mem(mem), {}, {}}} } -emit_stnt1h_zh_p_m :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, mem: Memory) { append(instructions, inst_stnt1h_zh_p_m(rz, rz2, mem)) } +emit_stnt1h_zh_p_m :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, mem: Memory) { append_elem(instructions, inst_stnt1h_zh_p_m(rz, rz2, mem)) } inst_stnt1w_zs_p_m :: #force_inline proc "contextless" (rz: u8, rz2: u8, mem: Memory) -> Instruction { return Instruction{mnemonic = .STNT1W, operand_count = 3, length = 4, ops = {op_v_list(Register(REG_Z | (u16(rz) & 0x1F)), ZSHAPE_S, 1), op_reg(Register(REG_P | (u16(rz2) & 0xF))), op_mem(mem), {}, {}}} } -emit_stnt1w_zs_p_m :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, mem: Memory) { append(instructions, inst_stnt1w_zs_p_m(rz, rz2, mem)) } +emit_stnt1w_zs_p_m :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, mem: Memory) { append_elem(instructions, inst_stnt1w_zs_p_m(rz, rz2, mem)) } inst_stnt1d_zd_p_m :: #force_inline proc "contextless" (rz: u8, rz2: u8, mem: Memory) -> Instruction { return Instruction{mnemonic = .STNT1D, operand_count = 3, length = 4, ops = {op_v_list(Register(REG_Z | (u16(rz) & 0x1F)), ZSHAPE_D, 1), op_reg(Register(REG_P | (u16(rz2) & 0xF))), op_mem(mem), {}, {}}} } -emit_stnt1d_zd_p_m :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, mem: Memory) { append(instructions, inst_stnt1d_zd_p_m(rz, rz2, mem)) } +emit_stnt1d_zd_p_m :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, mem: Memory) { append_elem(instructions, inst_stnt1d_zd_p_m(rz, rz2, mem)) } inst_splice_zb_p_zb_zb :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8, rz4: u8) -> Instruction { return Instruction{mnemonic = .SPLICE, operand_count = 4, length = 4, ops = {op_z_b(rz), op_reg(Register(REG_P | (u16(rz2) & 0xF))), op_z_b(rz3), op_z_b(rz4), {}}} } -emit_splice_zb_p_zb_zb :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append(instructions, inst_splice_zb_p_zb_zb(rz, rz2, rz3, rz4)) } +emit_splice_zb_p_zb_zb :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append_elem(instructions, inst_splice_zb_p_zb_zb(rz, rz2, rz3, rz4)) } inst_index_zb_i_i :: #force_inline proc "contextless" (rz: u8, imm: i64, imm2: i64) -> Instruction { return Instruction{mnemonic = .INDEX, operand_count = 3, length = 4, ops = {op_z_b(rz), op_imm(imm, 1), op_imm(imm2, 1), {}, {}}} } inst_index_zb_i_r :: #force_inline proc "contextless" (rz: u8, imm: i64, src: Register) -> Instruction { return Instruction{mnemonic = .INDEX, operand_count = 3, length = 4, ops = {op_z_b(rz), op_imm(imm, 1), op_reg(src), {}, {}}} } inst_index_zb_r_i :: #force_inline proc "contextless" (rz: u8, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .INDEX, operand_count = 3, length = 4, ops = {op_z_b(rz), op_reg(src), op_imm(imm, 1), {}, {}}} } @@ -4245,366 +4273,366 @@ inst_index_zd_i_i :: #force_inline proc "contextless" (rz: u8, imm: inst_index_zd_i_r :: #force_inline proc "contextless" (rz: u8, imm: i64, src: Register) -> Instruction { return Instruction{mnemonic = .INDEX, operand_count = 3, length = 4, ops = {op_z_d(rz), op_imm(imm, 1), op_reg(src), {}, {}}} } inst_index_zd_r_i :: #force_inline proc "contextless" (rz: u8, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .INDEX, operand_count = 3, length = 4, ops = {op_z_d(rz), op_reg(src), op_imm(imm, 1), {}, {}}} } inst_index_zd_r_r :: #force_inline proc "contextless" (rz: u8, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .INDEX, operand_count = 3, length = 4, ops = {op_z_d(rz), op_reg(src), op_reg(src2), {}, {}}} } -emit_index_zb_i_i :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, imm: i64, imm2: i64) { append(instructions, inst_index_zb_i_i(rz, imm, imm2)) } -emit_index_zb_i_r :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, imm: i64, src: Register) { append(instructions, inst_index_zb_i_r(rz, imm, src)) } -emit_index_zb_r_i :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, src: Register, imm: i64) { append(instructions, inst_index_zb_r_i(rz, src, imm)) } -emit_index_zb_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, src: Register, src2: Register) { append(instructions, inst_index_zb_r_r(rz, src, src2)) } -emit_index_zh_i_i :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, imm: i64, imm2: i64) { append(instructions, inst_index_zh_i_i(rz, imm, imm2)) } -emit_index_zh_i_r :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, imm: i64, src: Register) { append(instructions, inst_index_zh_i_r(rz, imm, src)) } -emit_index_zh_r_i :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, src: Register, imm: i64) { append(instructions, inst_index_zh_r_i(rz, src, imm)) } -emit_index_zh_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, src: Register, src2: Register) { append(instructions, inst_index_zh_r_r(rz, src, src2)) } -emit_index_zs_i_i :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, imm: i64, imm2: i64) { append(instructions, inst_index_zs_i_i(rz, imm, imm2)) } -emit_index_zs_i_r :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, imm: i64, src: Register) { append(instructions, inst_index_zs_i_r(rz, imm, src)) } -emit_index_zs_r_i :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, src: Register, imm: i64) { append(instructions, inst_index_zs_r_i(rz, src, imm)) } -emit_index_zs_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, src: Register, src2: Register) { append(instructions, inst_index_zs_r_r(rz, src, src2)) } -emit_index_zd_i_i :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, imm: i64, imm2: i64) { append(instructions, inst_index_zd_i_i(rz, imm, imm2)) } -emit_index_zd_i_r :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, imm: i64, src: Register) { append(instructions, inst_index_zd_i_r(rz, imm, src)) } -emit_index_zd_r_i :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, src: Register, imm: i64) { append(instructions, inst_index_zd_r_i(rz, src, imm)) } -emit_index_zd_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, src: Register, src2: Register) { append(instructions, inst_index_zd_r_r(rz, src, src2)) } +emit_index_zb_i_i :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, imm: i64, imm2: i64) { append_elem(instructions, inst_index_zb_i_i(rz, imm, imm2)) } +emit_index_zb_i_r :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, imm: i64, src: Register) { append_elem(instructions, inst_index_zb_i_r(rz, imm, src)) } +emit_index_zb_r_i :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, src: Register, imm: i64) { append_elem(instructions, inst_index_zb_r_i(rz, src, imm)) } +emit_index_zb_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, src: Register, src2: Register) { append_elem(instructions, inst_index_zb_r_r(rz, src, src2)) } +emit_index_zh_i_i :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, imm: i64, imm2: i64) { append_elem(instructions, inst_index_zh_i_i(rz, imm, imm2)) } +emit_index_zh_i_r :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, imm: i64, src: Register) { append_elem(instructions, inst_index_zh_i_r(rz, imm, src)) } +emit_index_zh_r_i :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, src: Register, imm: i64) { append_elem(instructions, inst_index_zh_r_i(rz, src, imm)) } +emit_index_zh_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, src: Register, src2: Register) { append_elem(instructions, inst_index_zh_r_r(rz, src, src2)) } +emit_index_zs_i_i :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, imm: i64, imm2: i64) { append_elem(instructions, inst_index_zs_i_i(rz, imm, imm2)) } +emit_index_zs_i_r :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, imm: i64, src: Register) { append_elem(instructions, inst_index_zs_i_r(rz, imm, src)) } +emit_index_zs_r_i :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, src: Register, imm: i64) { append_elem(instructions, inst_index_zs_r_i(rz, src, imm)) } +emit_index_zs_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, src: Register, src2: Register) { append_elem(instructions, inst_index_zs_r_r(rz, src, src2)) } +emit_index_zd_i_i :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, imm: i64, imm2: i64) { append_elem(instructions, inst_index_zd_i_i(rz, imm, imm2)) } +emit_index_zd_i_r :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, imm: i64, src: Register) { append_elem(instructions, inst_index_zd_i_r(rz, imm, src)) } +emit_index_zd_r_i :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, src: Register, imm: i64) { append_elem(instructions, inst_index_zd_r_i(rz, src, imm)) } +emit_index_zd_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, src: Register, src2: Register) { append_elem(instructions, inst_index_zd_r_r(rz, src, src2)) } inst_bsl1n_zd_zd_zd_zd :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8, rz4: u8) -> Instruction { return Instruction{mnemonic = .BSL1N, operand_count = 4, length = 4, ops = {op_z_d(rz), op_z_d(rz2), op_z_d(rz3), op_z_d(rz4), {}}} } -emit_bsl1n_zd_zd_zd_zd :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append(instructions, inst_bsl1n_zd_zd_zd_zd(rz, rz2, rz3, rz4)) } +emit_bsl1n_zd_zd_zd_zd :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append_elem(instructions, inst_bsl1n_zd_zd_zd_zd(rz, rz2, rz3, rz4)) } inst_bsl2n_zd_zd_zd_zd :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8, rz4: u8) -> Instruction { return Instruction{mnemonic = .BSL2N, operand_count = 4, length = 4, ops = {op_z_d(rz), op_z_d(rz2), op_z_d(rz3), op_z_d(rz4), {}}} } -emit_bsl2n_zd_zd_zd_zd :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append(instructions, inst_bsl2n_zd_zd_zd_zd(rz, rz2, rz3, rz4)) } +emit_bsl2n_zd_zd_zd_zd :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append_elem(instructions, inst_bsl2n_zd_zd_zd_zd(rz, rz2, rz3, rz4)) } inst_nbsl_zd_zd_zd_zd :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8, rz4: u8) -> Instruction { return Instruction{mnemonic = .NBSL, operand_count = 4, length = 4, ops = {op_z_d(rz), op_z_d(rz2), op_z_d(rz3), op_z_d(rz4), {}}} } -emit_nbsl_zd_zd_zd_zd :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append(instructions, inst_nbsl_zd_zd_zd_zd(rz, rz2, rz3, rz4)) } +emit_nbsl_zd_zd_zd_zd :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append_elem(instructions, inst_nbsl_zd_zd_zd_zd(rz, rz2, rz3, rz4)) } inst_pmul_zb_zb_zb :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8) -> Instruction { return Instruction{mnemonic = .PMUL, operand_count = 3, length = 4, ops = {op_z_b(rz), op_z_b(rz2), op_z_b(rz3), {}, {}}} } -emit_pmul_zb_zb_zb :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append(instructions, inst_pmul_zb_zb_zb(rz, rz2, rz3)) } +emit_pmul_zb_zb_zb :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append_elem(instructions, inst_pmul_zb_zb_zb(rz, rz2, rz3)) } inst_pmullb_zd_zs_zs :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8) -> Instruction { return Instruction{mnemonic = .PMULLB, operand_count = 3, length = 4, ops = {op_z_d(rz), op_z_s(rz2), op_z_s(rz3), {}, {}}} } -emit_pmullb_zd_zs_zs :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append(instructions, inst_pmullb_zd_zs_zs(rz, rz2, rz3)) } +emit_pmullb_zd_zs_zs :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append_elem(instructions, inst_pmullb_zd_zs_zs(rz, rz2, rz3)) } inst_pmullt_zd_zs_zs :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8) -> Instruction { return Instruction{mnemonic = .PMULLT, operand_count = 3, length = 4, ops = {op_z_d(rz), op_z_s(rz2), op_z_s(rz3), {}, {}}} } -emit_pmullt_zd_zs_zs :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append(instructions, inst_pmullt_zd_zs_zs(rz, rz2, rz3)) } +emit_pmullt_zd_zs_zs :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append_elem(instructions, inst_pmullt_zd_zs_zs(rz, rz2, rz3)) } inst_bfcvtnt_zh_p_zs :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8) -> Instruction { return Instruction{mnemonic = .BFCVTNT, operand_count = 3, length = 4, ops = {op_z_h(rz), op_reg(Register(REG_P | (u16(rz2) & 0xF))), op_z_s(rz3), {}, {}}} } -emit_bfcvtnt_zh_p_zs :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append(instructions, inst_bfcvtnt_zh_p_zs(rz, rz2, rz3)) } +emit_bfcvtnt_zh_p_zs :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append_elem(instructions, inst_bfcvtnt_zh_p_zs(rz, rz2, rz3)) } inst_ldraa_r_m :: #force_inline proc "contextless" (dst: Register, mem: Memory) -> Instruction { return inst_ldst(.LDRAA, dst, mem) } -emit_ldraa_r_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, mem: Memory) { append(instructions, inst_ldraa_r_m(dst, mem)) } +emit_ldraa_r_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, mem: Memory) { append_elem(instructions, inst_ldraa_r_m(dst, mem)) } inst_ldrab_r_m :: #force_inline proc "contextless" (dst: Register, mem: Memory) -> Instruction { return inst_ldst(.LDRAB, dst, mem) } -emit_ldrab_r_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, mem: Memory) { append(instructions, inst_ldrab_r_m(dst, mem)) } +emit_ldrab_r_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, mem: Memory) { append_elem(instructions, inst_ldrab_r_m(dst, mem)) } inst_tstart_r :: #force_inline proc "contextless" (dst: Register) -> Instruction { return inst_r(.TSTART, dst) } -emit_tstart_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register) { append(instructions, inst_tstart_r(dst)) } +emit_tstart_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register) { append_elem(instructions, inst_tstart_r(dst)) } inst_tcommit_none :: #force_inline proc "contextless" () -> Instruction { return inst_none(.TCOMMIT) } -emit_tcommit_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_tcommit_none()) } +emit_tcommit_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_tcommit_none()) } inst_tcancel_i :: #force_inline proc "contextless" (imm: i64) -> Instruction { return Instruction{mnemonic = .TCANCEL, operand_count = 1, length = 4, ops = {op_imm(imm, 2), {}, {}, {}, {}}} } -emit_tcancel_i :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64) { append(instructions, inst_tcancel_i(imm)) } +emit_tcancel_i :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64) { append_elem(instructions, inst_tcancel_i(imm)) } inst_ttest_r :: #force_inline proc "contextless" (dst: Register) -> Instruction { return inst_r(.TTEST, dst) } -emit_ttest_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register) { append(instructions, inst_ttest_r(dst)) } +emit_ttest_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register) { append_elem(instructions, inst_ttest_r(dst)) } inst_wfet_r :: #force_inline proc "contextless" (dst: Register) -> Instruction { return inst_r(.WFET, dst) } -emit_wfet_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register) { append(instructions, inst_wfet_r(dst)) } +emit_wfet_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register) { append_elem(instructions, inst_wfet_r(dst)) } inst_wfit_r :: #force_inline proc "contextless" (dst: Register) -> Instruction { return inst_r(.WFIT, dst) } -emit_wfit_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register) { append(instructions, inst_wfit_r(dst)) } +emit_wfit_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register) { append_elem(instructions, inst_wfit_r(dst)) } inst_bc_eq_l :: #force_inline proc "contextless" (label: u32) -> Instruction { return inst_branch(.BC_EQ, label) } -emit_bc_eq_l :: #force_inline proc(instructions: ^[dynamic]Instruction, label: u32) { append(instructions, inst_bc_eq_l(label)) } +emit_bc_eq_l :: #force_inline proc(instructions: ^[dynamic]Instruction, label: u32) { append_elem(instructions, inst_bc_eq_l(label)) } inst_bc_ne_l :: #force_inline proc "contextless" (label: u32) -> Instruction { return inst_branch(.BC_NE, label) } -emit_bc_ne_l :: #force_inline proc(instructions: ^[dynamic]Instruction, label: u32) { append(instructions, inst_bc_ne_l(label)) } +emit_bc_ne_l :: #force_inline proc(instructions: ^[dynamic]Instruction, label: u32) { append_elem(instructions, inst_bc_ne_l(label)) } inst_bc_cs_l :: #force_inline proc "contextless" (label: u32) -> Instruction { return inst_branch(.BC_CS, label) } -emit_bc_cs_l :: #force_inline proc(instructions: ^[dynamic]Instruction, label: u32) { append(instructions, inst_bc_cs_l(label)) } +emit_bc_cs_l :: #force_inline proc(instructions: ^[dynamic]Instruction, label: u32) { append_elem(instructions, inst_bc_cs_l(label)) } inst_bc_cc_l :: #force_inline proc "contextless" (label: u32) -> Instruction { return inst_branch(.BC_CC, label) } -emit_bc_cc_l :: #force_inline proc(instructions: ^[dynamic]Instruction, label: u32) { append(instructions, inst_bc_cc_l(label)) } +emit_bc_cc_l :: #force_inline proc(instructions: ^[dynamic]Instruction, label: u32) { append_elem(instructions, inst_bc_cc_l(label)) } inst_bc_mi_l :: #force_inline proc "contextless" (label: u32) -> Instruction { return inst_branch(.BC_MI, label) } -emit_bc_mi_l :: #force_inline proc(instructions: ^[dynamic]Instruction, label: u32) { append(instructions, inst_bc_mi_l(label)) } +emit_bc_mi_l :: #force_inline proc(instructions: ^[dynamic]Instruction, label: u32) { append_elem(instructions, inst_bc_mi_l(label)) } inst_bc_pl_l :: #force_inline proc "contextless" (label: u32) -> Instruction { return inst_branch(.BC_PL, label) } -emit_bc_pl_l :: #force_inline proc(instructions: ^[dynamic]Instruction, label: u32) { append(instructions, inst_bc_pl_l(label)) } +emit_bc_pl_l :: #force_inline proc(instructions: ^[dynamic]Instruction, label: u32) { append_elem(instructions, inst_bc_pl_l(label)) } inst_bc_vs_l :: #force_inline proc "contextless" (label: u32) -> Instruction { return inst_branch(.BC_VS, label) } -emit_bc_vs_l :: #force_inline proc(instructions: ^[dynamic]Instruction, label: u32) { append(instructions, inst_bc_vs_l(label)) } +emit_bc_vs_l :: #force_inline proc(instructions: ^[dynamic]Instruction, label: u32) { append_elem(instructions, inst_bc_vs_l(label)) } inst_bc_vc_l :: #force_inline proc "contextless" (label: u32) -> Instruction { return inst_branch(.BC_VC, label) } -emit_bc_vc_l :: #force_inline proc(instructions: ^[dynamic]Instruction, label: u32) { append(instructions, inst_bc_vc_l(label)) } +emit_bc_vc_l :: #force_inline proc(instructions: ^[dynamic]Instruction, label: u32) { append_elem(instructions, inst_bc_vc_l(label)) } inst_bc_hi_l :: #force_inline proc "contextless" (label: u32) -> Instruction { return inst_branch(.BC_HI, label) } -emit_bc_hi_l :: #force_inline proc(instructions: ^[dynamic]Instruction, label: u32) { append(instructions, inst_bc_hi_l(label)) } +emit_bc_hi_l :: #force_inline proc(instructions: ^[dynamic]Instruction, label: u32) { append_elem(instructions, inst_bc_hi_l(label)) } inst_bc_ls_l :: #force_inline proc "contextless" (label: u32) -> Instruction { return inst_branch(.BC_LS, label) } -emit_bc_ls_l :: #force_inline proc(instructions: ^[dynamic]Instruction, label: u32) { append(instructions, inst_bc_ls_l(label)) } +emit_bc_ls_l :: #force_inline proc(instructions: ^[dynamic]Instruction, label: u32) { append_elem(instructions, inst_bc_ls_l(label)) } inst_bc_ge_l :: #force_inline proc "contextless" (label: u32) -> Instruction { return inst_branch(.BC_GE, label) } -emit_bc_ge_l :: #force_inline proc(instructions: ^[dynamic]Instruction, label: u32) { append(instructions, inst_bc_ge_l(label)) } +emit_bc_ge_l :: #force_inline proc(instructions: ^[dynamic]Instruction, label: u32) { append_elem(instructions, inst_bc_ge_l(label)) } inst_bc_lt_l :: #force_inline proc "contextless" (label: u32) -> Instruction { return inst_branch(.BC_LT, label) } -emit_bc_lt_l :: #force_inline proc(instructions: ^[dynamic]Instruction, label: u32) { append(instructions, inst_bc_lt_l(label)) } +emit_bc_lt_l :: #force_inline proc(instructions: ^[dynamic]Instruction, label: u32) { append_elem(instructions, inst_bc_lt_l(label)) } inst_bc_gt_l :: #force_inline proc "contextless" (label: u32) -> Instruction { return inst_branch(.BC_GT, label) } -emit_bc_gt_l :: #force_inline proc(instructions: ^[dynamic]Instruction, label: u32) { append(instructions, inst_bc_gt_l(label)) } +emit_bc_gt_l :: #force_inline proc(instructions: ^[dynamic]Instruction, label: u32) { append_elem(instructions, inst_bc_gt_l(label)) } inst_bc_le_l :: #force_inline proc "contextless" (label: u32) -> Instruction { return inst_branch(.BC_LE, label) } -emit_bc_le_l :: #force_inline proc(instructions: ^[dynamic]Instruction, label: u32) { append(instructions, inst_bc_le_l(label)) } +emit_bc_le_l :: #force_inline proc(instructions: ^[dynamic]Instruction, label: u32) { append_elem(instructions, inst_bc_le_l(label)) } inst_bc_al_l :: #force_inline proc "contextless" (label: u32) -> Instruction { return inst_branch(.BC_AL, label) } -emit_bc_al_l :: #force_inline proc(instructions: ^[dynamic]Instruction, label: u32) { append(instructions, inst_bc_al_l(label)) } +emit_bc_al_l :: #force_inline proc(instructions: ^[dynamic]Instruction, label: u32) { append_elem(instructions, inst_bc_al_l(label)) } inst_bc_nv_l :: #force_inline proc "contextless" (label: u32) -> Instruction { return inst_branch(.BC_NV, label) } -emit_bc_nv_l :: #force_inline proc(instructions: ^[dynamic]Instruction, label: u32) { append(instructions, inst_bc_nv_l(label)) } +emit_bc_nv_l :: #force_inline proc(instructions: ^[dynamic]Instruction, label: u32) { append_elem(instructions, inst_bc_nv_l(label)) } inst_uxtb_r_r :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return inst_r_r(.UXTB, dst, src) } -emit_uxtb_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_uxtb_r_r(dst, src)) } +emit_uxtb_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_uxtb_r_r(dst, src)) } inst_uxth_r_r :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return inst_r_r(.UXTH, dst, src) } -emit_uxth_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_uxth_r_r(dst, src)) } +emit_uxth_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_uxth_r_r(dst, src)) } inst_uxtw_r_r :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return inst_r_r(.UXTW, dst, src) } -emit_uxtw_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_uxtw_r_r(dst, src)) } +emit_uxtw_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_uxtw_r_r(dst, src)) } inst_sxtb_r_r :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return inst_r_r(.SXTB, dst, src) } -emit_sxtb_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_sxtb_r_r(dst, src)) } +emit_sxtb_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_sxtb_r_r(dst, src)) } inst_sxth_r_r :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return inst_r_r(.SXTH, dst, src) } -emit_sxth_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_sxth_r_r(dst, src)) } +emit_sxth_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_sxth_r_r(dst, src)) } inst_sxtw_r_r :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return inst_r_r(.SXTW, dst, src) } -emit_sxtw_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_sxtw_r_r(dst, src)) } +emit_sxtw_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_sxtw_r_r(dst, src)) } inst_adc_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return inst_r_r_r(.ADC, dst, src, src2) } -emit_adc_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_adc_r_r_r(dst, src, src2)) } +emit_adc_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_adc_r_r_r(dst, src, src2)) } inst_adcs_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return inst_r_r_r(.ADCS, dst, src, src2) } -emit_adcs_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_adcs_r_r_r(dst, src, src2)) } +emit_adcs_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_adcs_r_r_r(dst, src, src2)) } inst_sbc_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return inst_r_r_r(.SBC, dst, src, src2) } -emit_sbc_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_sbc_r_r_r(dst, src, src2)) } +emit_sbc_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_sbc_r_r_r(dst, src, src2)) } inst_sbcs_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return inst_r_r_r(.SBCS, dst, src, src2) } -emit_sbcs_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_sbcs_r_r_r(dst, src, src2)) } +emit_sbcs_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_sbcs_r_r_r(dst, src, src2)) } inst_ngc_r_r :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return inst_r_r(.NGC, dst, src) } -emit_ngc_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_ngc_r_r(dst, src)) } +emit_ngc_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_ngc_r_r(dst, src)) } inst_ngcs_r_r :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return inst_r_r(.NGCS, dst, src) } -emit_ngcs_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_ngcs_r_r(dst, src)) } +emit_ngcs_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_ngcs_r_r(dst, src)) } inst_ldapur_r_m :: #force_inline proc "contextless" (dst: Register, mem: Memory) -> Instruction { return inst_ldst(.LDAPUR, dst, mem) } -emit_ldapur_r_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, mem: Memory) { append(instructions, inst_ldapur_r_m(dst, mem)) } +emit_ldapur_r_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, mem: Memory) { append_elem(instructions, inst_ldapur_r_m(dst, mem)) } inst_stlur_r_m :: #force_inline proc "contextless" (dst: Register, mem: Memory) -> Instruction { return inst_ldst(.STLUR, dst, mem) } -emit_stlur_r_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, mem: Memory) { append(instructions, inst_stlur_r_m(dst, mem)) } +emit_stlur_r_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, mem: Memory) { append_elem(instructions, inst_stlur_r_m(dst, mem)) } inst_ldapurb_r_m :: #force_inline proc "contextless" (dst: Register, mem: Memory) -> Instruction { return inst_ldst(.LDAPURB, dst, mem) } -emit_ldapurb_r_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, mem: Memory) { append(instructions, inst_ldapurb_r_m(dst, mem)) } +emit_ldapurb_r_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, mem: Memory) { append_elem(instructions, inst_ldapurb_r_m(dst, mem)) } inst_stlurb_r_m :: #force_inline proc "contextless" (dst: Register, mem: Memory) -> Instruction { return inst_ldst(.STLURB, dst, mem) } -emit_stlurb_r_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, mem: Memory) { append(instructions, inst_stlurb_r_m(dst, mem)) } +emit_stlurb_r_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, mem: Memory) { append_elem(instructions, inst_stlurb_r_m(dst, mem)) } inst_ldapurh_r_m :: #force_inline proc "contextless" (dst: Register, mem: Memory) -> Instruction { return inst_ldst(.LDAPURH, dst, mem) } -emit_ldapurh_r_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, mem: Memory) { append(instructions, inst_ldapurh_r_m(dst, mem)) } +emit_ldapurh_r_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, mem: Memory) { append_elem(instructions, inst_ldapurh_r_m(dst, mem)) } inst_stlurh_r_m :: #force_inline proc "contextless" (dst: Register, mem: Memory) -> Instruction { return inst_ldst(.STLURH, dst, mem) } -emit_stlurh_r_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, mem: Memory) { append(instructions, inst_stlurh_r_m(dst, mem)) } +emit_stlurh_r_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, mem: Memory) { append_elem(instructions, inst_stlurh_r_m(dst, mem)) } inst_ldapursb_r_m :: #force_inline proc "contextless" (dst: Register, mem: Memory) -> Instruction { return inst_ldst(.LDAPURSB, dst, mem) } -emit_ldapursb_r_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, mem: Memory) { append(instructions, inst_ldapursb_r_m(dst, mem)) } +emit_ldapursb_r_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, mem: Memory) { append_elem(instructions, inst_ldapursb_r_m(dst, mem)) } inst_ldapursh_r_m :: #force_inline proc "contextless" (dst: Register, mem: Memory) -> Instruction { return inst_ldst(.LDAPURSH, dst, mem) } -emit_ldapursh_r_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, mem: Memory) { append(instructions, inst_ldapursh_r_m(dst, mem)) } +emit_ldapursh_r_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, mem: Memory) { append_elem(instructions, inst_ldapursh_r_m(dst, mem)) } inst_ldapursw_r_m :: #force_inline proc "contextless" (dst: Register, mem: Memory) -> Instruction { return inst_ldst(.LDAPURSW, dst, mem) } -emit_ldapursw_r_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, mem: Memory) { append(instructions, inst_ldapursw_r_m(dst, mem)) } +emit_ldapursw_r_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, mem: Memory) { append_elem(instructions, inst_ldapursw_r_m(dst, mem)) } inst_bfadd_zh_p_zh_zh :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8, rz4: u8) -> Instruction { return Instruction{mnemonic = .BFADD, operand_count = 4, length = 4, ops = {op_z_h(rz), op_reg(Register(REG_P | (u16(rz2) & 0xF))), op_z_h(rz3), op_z_h(rz4), {}}} } inst_bfadd_zh_zh_zh :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8) -> Instruction { return Instruction{mnemonic = .BFADD, operand_count = 3, length = 4, ops = {op_z_h(rz), op_z_h(rz2), op_z_h(rz3), {}, {}}} } -emit_bfadd_zh_p_zh_zh :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append(instructions, inst_bfadd_zh_p_zh_zh(rz, rz2, rz3, rz4)) } -emit_bfadd_zh_zh_zh :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append(instructions, inst_bfadd_zh_zh_zh(rz, rz2, rz3)) } +emit_bfadd_zh_p_zh_zh :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append_elem(instructions, inst_bfadd_zh_p_zh_zh(rz, rz2, rz3, rz4)) } +emit_bfadd_zh_zh_zh :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append_elem(instructions, inst_bfadd_zh_zh_zh(rz, rz2, rz3)) } inst_bfsub_zh_p_zh_zh :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8, rz4: u8) -> Instruction { return Instruction{mnemonic = .BFSUB, operand_count = 4, length = 4, ops = {op_z_h(rz), op_reg(Register(REG_P | (u16(rz2) & 0xF))), op_z_h(rz3), op_z_h(rz4), {}}} } inst_bfsub_zh_zh_zh :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8) -> Instruction { return Instruction{mnemonic = .BFSUB, operand_count = 3, length = 4, ops = {op_z_h(rz), op_z_h(rz2), op_z_h(rz3), {}, {}}} } -emit_bfsub_zh_p_zh_zh :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append(instructions, inst_bfsub_zh_p_zh_zh(rz, rz2, rz3, rz4)) } -emit_bfsub_zh_zh_zh :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append(instructions, inst_bfsub_zh_zh_zh(rz, rz2, rz3)) } +emit_bfsub_zh_p_zh_zh :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append_elem(instructions, inst_bfsub_zh_p_zh_zh(rz, rz2, rz3, rz4)) } +emit_bfsub_zh_zh_zh :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append_elem(instructions, inst_bfsub_zh_zh_zh(rz, rz2, rz3)) } inst_bfmul_zh_p_zh_zh :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8, rz4: u8) -> Instruction { return Instruction{mnemonic = .BFMUL, operand_count = 4, length = 4, ops = {op_z_h(rz), op_reg(Register(REG_P | (u16(rz2) & 0xF))), op_z_h(rz3), op_z_h(rz4), {}}} } inst_bfmul_zh_zh_zh :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8) -> Instruction { return Instruction{mnemonic = .BFMUL, operand_count = 3, length = 4, ops = {op_z_h(rz), op_z_h(rz2), op_z_h(rz3), {}, {}}} } -emit_bfmul_zh_p_zh_zh :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append(instructions, inst_bfmul_zh_p_zh_zh(rz, rz2, rz3, rz4)) } -emit_bfmul_zh_zh_zh :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append(instructions, inst_bfmul_zh_zh_zh(rz, rz2, rz3)) } +emit_bfmul_zh_p_zh_zh :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append_elem(instructions, inst_bfmul_zh_p_zh_zh(rz, rz2, rz3, rz4)) } +emit_bfmul_zh_zh_zh :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append_elem(instructions, inst_bfmul_zh_zh_zh(rz, rz2, rz3)) } inst_bfmla_zh_p_zh_zh :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8, rz4: u8) -> Instruction { return Instruction{mnemonic = .BFMLA, operand_count = 4, length = 4, ops = {op_z_h(rz), op_reg(Register(REG_P | (u16(rz2) & 0xF))), op_z_h(rz3), op_z_h(rz4), {}}} } -emit_bfmla_zh_p_zh_zh :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append(instructions, inst_bfmla_zh_p_zh_zh(rz, rz2, rz3, rz4)) } +emit_bfmla_zh_p_zh_zh :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append_elem(instructions, inst_bfmla_zh_p_zh_zh(rz, rz2, rz3, rz4)) } inst_bfmls_zh_p_zh_zh :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8, rz4: u8) -> Instruction { return Instruction{mnemonic = .BFMLS, operand_count = 4, length = 4, ops = {op_z_h(rz), op_reg(Register(REG_P | (u16(rz2) & 0xF))), op_z_h(rz3), op_z_h(rz4), {}}} } -emit_bfmls_zh_p_zh_zh :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append(instructions, inst_bfmls_zh_p_zh_zh(rz, rz2, rz3, rz4)) } +emit_bfmls_zh_p_zh_zh :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append_elem(instructions, inst_bfmls_zh_p_zh_zh(rz, rz2, rz3, rz4)) } inst_sb_none :: #force_inline proc "contextless" () -> Instruction { return inst_none(.SB) } -emit_sb_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_sb_none()) } +emit_sb_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_sb_none()) } inst_csdb_none :: #force_inline proc "contextless" () -> Instruction { return inst_none(.CSDB) } -emit_csdb_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_csdb_none()) } +emit_csdb_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_csdb_none()) } inst_dgh_none :: #force_inline proc "contextless" () -> Instruction { return inst_none(.DGH) } -emit_dgh_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_dgh_none()) } +emit_dgh_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_dgh_none()) } inst_psb_csync_none :: #force_inline proc "contextless" () -> Instruction { return inst_none(.PSB_CSYNC) } -emit_psb_csync_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_psb_csync_none()) } +emit_psb_csync_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_psb_csync_none()) } inst_tsb_csync_none :: #force_inline proc "contextless" () -> Instruction { return inst_none(.TSB_CSYNC) } -emit_tsb_csync_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_tsb_csync_none()) } +emit_tsb_csync_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_tsb_csync_none()) } inst_bti_j_none :: #force_inline proc "contextless" () -> Instruction { return inst_none(.BTI_J) } -emit_bti_j_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_bti_j_none()) } +emit_bti_j_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_bti_j_none()) } inst_bti_c_none :: #force_inline proc "contextless" () -> Instruction { return inst_none(.BTI_C) } -emit_bti_c_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_bti_c_none()) } +emit_bti_c_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_bti_c_none()) } inst_bti_jc_none :: #force_inline proc "contextless" () -> Instruction { return inst_none(.BTI_JC) } -emit_bti_jc_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_bti_jc_none()) } +emit_bti_jc_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_bti_jc_none()) } inst_bfclamp_zh_zh_zh :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8) -> Instruction { return Instruction{mnemonic = .BFCLAMP, operand_count = 3, length = 4, ops = {op_z_h(rz), op_z_h(rz2), op_z_h(rz3), {}, {}}} } -emit_bfclamp_zh_zh_zh :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append(instructions, inst_bfclamp_zh_zh_zh(rz, rz2, rz3)) } +emit_bfclamp_zh_zh_zh :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append_elem(instructions, inst_bfclamp_zh_zh_zh(rz, rz2, rz3)) } inst_bfmaxnm_zh_p_zh_zh :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8, rz4: u8) -> Instruction { return Instruction{mnemonic = .BFMAXNM, operand_count = 4, length = 4, ops = {op_z_h(rz), op_reg(Register(REG_P | (u16(rz2) & 0xF))), op_z_h(rz3), op_z_h(rz4), {}}} } -emit_bfmaxnm_zh_p_zh_zh :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append(instructions, inst_bfmaxnm_zh_p_zh_zh(rz, rz2, rz3, rz4)) } +emit_bfmaxnm_zh_p_zh_zh :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append_elem(instructions, inst_bfmaxnm_zh_p_zh_zh(rz, rz2, rz3, rz4)) } inst_bfminnm_zh_p_zh_zh :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8, rz4: u8) -> Instruction { return Instruction{mnemonic = .BFMINNM, operand_count = 4, length = 4, ops = {op_z_h(rz), op_reg(Register(REG_P | (u16(rz2) & 0xF))), op_z_h(rz3), op_z_h(rz4), {}}} } -emit_bfminnm_zh_p_zh_zh :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append(instructions, inst_bfminnm_zh_p_zh_zh(rz, rz2, rz3, rz4)) } +emit_bfminnm_zh_p_zh_zh :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8, rz4: u8) { append_elem(instructions, inst_bfminnm_zh_p_zh_zh(rz, rz2, rz3, rz4)) } inst_luti2_zpb_zt_z_i :: #force_inline proc "contextless" (rz: u8, rz2: u8, imm: i64) -> Instruction { return Instruction{mnemonic = .LUTI2, operand_count = 4, length = 4, ops = {op_z_b(rz), op_reg(ZT0), op_reg(Register(REG_Z | (u16(rz2) & 0x1F))), op_lane_index(imm), {}}} } inst_luti2_zph_zt_z_i :: #force_inline proc "contextless" (rz: u8, rz2: u8, imm: i64) -> Instruction { return Instruction{mnemonic = .LUTI2, operand_count = 4, length = 4, ops = {op_z_h(rz), op_reg(ZT0), op_reg(Register(REG_Z | (u16(rz2) & 0x1F))), op_lane_index(imm), {}}} } inst_luti2_zps_zt_z_i :: #force_inline proc "contextless" (rz: u8, rz2: u8, imm: i64) -> Instruction { return Instruction{mnemonic = .LUTI2, operand_count = 4, length = 4, ops = {op_z_s(rz), op_reg(ZT0), op_reg(Register(REG_Z | (u16(rz2) & 0x1F))), op_lane_index(imm), {}}} } -emit_luti2_zpb_zt_z_i :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, imm: i64) { append(instructions, inst_luti2_zpb_zt_z_i(rz, rz2, imm)) } -emit_luti2_zph_zt_z_i :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, imm: i64) { append(instructions, inst_luti2_zph_zt_z_i(rz, rz2, imm)) } -emit_luti2_zps_zt_z_i :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, imm: i64) { append(instructions, inst_luti2_zps_zt_z_i(rz, rz2, imm)) } +emit_luti2_zpb_zt_z_i :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, imm: i64) { append_elem(instructions, inst_luti2_zpb_zt_z_i(rz, rz2, imm)) } +emit_luti2_zph_zt_z_i :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, imm: i64) { append_elem(instructions, inst_luti2_zph_zt_z_i(rz, rz2, imm)) } +emit_luti2_zps_zt_z_i :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, imm: i64) { append_elem(instructions, inst_luti2_zps_zt_z_i(rz, rz2, imm)) } inst_luti4_zpb_zt_z_i :: #force_inline proc "contextless" (rz: u8, rz2: u8, imm: i64) -> Instruction { return Instruction{mnemonic = .LUTI4, operand_count = 4, length = 4, ops = {op_z_b(rz), op_reg(ZT0), op_reg(Register(REG_Z | (u16(rz2) & 0x1F))), op_lane_index(imm), {}}} } inst_luti4_zph_zt_z_i :: #force_inline proc "contextless" (rz: u8, rz2: u8, imm: i64) -> Instruction { return Instruction{mnemonic = .LUTI4, operand_count = 4, length = 4, ops = {op_z_h(rz), op_reg(ZT0), op_reg(Register(REG_Z | (u16(rz2) & 0x1F))), op_lane_index(imm), {}}} } inst_luti4_zps_zt_z_i :: #force_inline proc "contextless" (rz: u8, rz2: u8, imm: i64) -> Instruction { return Instruction{mnemonic = .LUTI4, operand_count = 4, length = 4, ops = {op_z_s(rz), op_reg(ZT0), op_reg(Register(REG_Z | (u16(rz2) & 0x1F))), op_lane_index(imm), {}}} } -emit_luti4_zpb_zt_z_i :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, imm: i64) { append(instructions, inst_luti4_zpb_zt_z_i(rz, rz2, imm)) } -emit_luti4_zph_zt_z_i :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, imm: i64) { append(instructions, inst_luti4_zph_zt_z_i(rz, rz2, imm)) } -emit_luti4_zps_zt_z_i :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, imm: i64) { append(instructions, inst_luti4_zps_zt_z_i(rz, rz2, imm)) } +emit_luti4_zpb_zt_z_i :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, imm: i64) { append_elem(instructions, inst_luti4_zpb_zt_z_i(rz, rz2, imm)) } +emit_luti4_zph_zt_z_i :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, imm: i64) { append_elem(instructions, inst_luti4_zph_zt_z_i(rz, rz2, imm)) } +emit_luti4_zps_zt_z_i :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, imm: i64) { append_elem(instructions, inst_luti4_zps_zt_z_i(rz, rz2, imm)) } inst_zip_zpb_zb_zb :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8) -> Instruction { return Instruction{mnemonic = .ZIP, operand_count = 3, length = 4, ops = {op_z_b(rz), op_z_b(rz2), op_z_b(rz3), {}, {}}} } inst_zip_zqb_zqb :: #force_inline proc "contextless" (rz: u8, rz2: u8) -> Instruction { return Instruction{mnemonic = .ZIP, operand_count = 2, length = 4, ops = {op_z_b(rz), op_z_b(rz2), {}, {}, {}}} } -emit_zip_zpb_zb_zb :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append(instructions, inst_zip_zpb_zb_zb(rz, rz2, rz3)) } -emit_zip_zqb_zqb :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8) { append(instructions, inst_zip_zqb_zqb(rz, rz2)) } +emit_zip_zpb_zb_zb :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append_elem(instructions, inst_zip_zpb_zb_zb(rz, rz2, rz3)) } +emit_zip_zqb_zqb :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8) { append_elem(instructions, inst_zip_zqb_zqb(rz, rz2)) } inst_uzp_zpb_zb_zb :: #force_inline proc "contextless" (rz: u8, rz2: u8, rz3: u8) -> Instruction { return Instruction{mnemonic = .UZP, operand_count = 3, length = 4, ops = {op_z_b(rz), op_z_b(rz2), op_z_b(rz3), {}, {}}} } inst_uzp_zqb_zqb :: #force_inline proc "contextless" (rz: u8, rz2: u8) -> Instruction { return Instruction{mnemonic = .UZP, operand_count = 2, length = 4, ops = {op_z_b(rz), op_z_b(rz2), {}, {}, {}}} } -emit_uzp_zpb_zb_zb :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append(instructions, inst_uzp_zpb_zb_zb(rz, rz2, rz3)) } -emit_uzp_zqb_zqb :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8) { append(instructions, inst_uzp_zqb_zqb(rz, rz2)) } +emit_uzp_zpb_zb_zb :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8, rz3: u8) { append_elem(instructions, inst_uzp_zpb_zb_zb(rz, rz2, rz3)) } +emit_uzp_zqb_zqb :: #force_inline proc(instructions: ^[dynamic]Instruction, rz: u8, rz2: u8) { append_elem(instructions, inst_uzp_zqb_zqb(rz, rz2)) } inst_tlbi_rpalos_r :: #force_inline proc "contextless" (dst: Register) -> Instruction { return inst_r(.TLBI_RPALOS, dst) } -emit_tlbi_rpalos_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register) { append(instructions, inst_tlbi_rpalos_r(dst)) } +emit_tlbi_rpalos_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register) { append_elem(instructions, inst_tlbi_rpalos_r(dst)) } inst_tlbi_rpaos_r :: #force_inline proc "contextless" (dst: Register) -> Instruction { return inst_r(.TLBI_RPAOS, dst) } -emit_tlbi_rpaos_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register) { append(instructions, inst_tlbi_rpaos_r(dst)) } +emit_tlbi_rpaos_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register) { append_elem(instructions, inst_tlbi_rpaos_r(dst)) } inst_at_s1e1a_r :: #force_inline proc "contextless" (dst: Register) -> Instruction { return inst_r(.AT_S1E1A, dst) } -emit_at_s1e1a_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register) { append(instructions, inst_at_s1e1a_r(dst)) } +emit_at_s1e1a_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register) { append_elem(instructions, inst_at_s1e1a_r(dst)) } inst_dc_cipapa_r :: #force_inline proc "contextless" (dst: Register) -> Instruction { return inst_r(.DC_CIPAPA, dst) } -emit_dc_cipapa_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register) { append(instructions, inst_dc_cipapa_r(dst)) } +emit_dc_cipapa_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register) { append_elem(instructions, inst_dc_cipapa_r(dst)) } inst_dc_cigdpapa_r :: #force_inline proc "contextless" (dst: Register) -> Instruction { return inst_r(.DC_CIGDPAPA, dst) } -emit_dc_cigdpapa_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register) { append(instructions, inst_dc_cigdpapa_r(dst)) } +emit_dc_cigdpapa_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register) { append_elem(instructions, inst_dc_cigdpapa_r(dst)) } inst_tlbi_paall_none :: #force_inline proc "contextless" () -> Instruction { return inst_none(.TLBI_PAALL) } -emit_tlbi_paall_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_tlbi_paall_none()) } +emit_tlbi_paall_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_tlbi_paall_none()) } inst_tlbi_paallos_none :: #force_inline proc "contextless" () -> Instruction { return inst_none(.TLBI_PAALLOS) } -emit_tlbi_paallos_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_tlbi_paallos_none()) } +emit_tlbi_paallos_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_tlbi_paallos_none()) } inst_amx_ldx_r :: #force_inline proc "contextless" (dst: Register) -> Instruction { return inst_r(.AMX_LDX, dst) } -emit_amx_ldx_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register) { append(instructions, inst_amx_ldx_r(dst)) } +emit_amx_ldx_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register) { append_elem(instructions, inst_amx_ldx_r(dst)) } inst_amx_ldy_r :: #force_inline proc "contextless" (dst: Register) -> Instruction { return inst_r(.AMX_LDY, dst) } -emit_amx_ldy_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register) { append(instructions, inst_amx_ldy_r(dst)) } +emit_amx_ldy_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register) { append_elem(instructions, inst_amx_ldy_r(dst)) } inst_amx_stx_r :: #force_inline proc "contextless" (dst: Register) -> Instruction { return inst_r(.AMX_STX, dst) } -emit_amx_stx_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register) { append(instructions, inst_amx_stx_r(dst)) } +emit_amx_stx_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register) { append_elem(instructions, inst_amx_stx_r(dst)) } inst_amx_sty_r :: #force_inline proc "contextless" (dst: Register) -> Instruction { return inst_r(.AMX_STY, dst) } -emit_amx_sty_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register) { append(instructions, inst_amx_sty_r(dst)) } +emit_amx_sty_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register) { append_elem(instructions, inst_amx_sty_r(dst)) } inst_amx_ldz_r :: #force_inline proc "contextless" (dst: Register) -> Instruction { return inst_r(.AMX_LDZ, dst) } -emit_amx_ldz_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register) { append(instructions, inst_amx_ldz_r(dst)) } +emit_amx_ldz_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register) { append_elem(instructions, inst_amx_ldz_r(dst)) } inst_amx_stz_r :: #force_inline proc "contextless" (dst: Register) -> Instruction { return inst_r(.AMX_STZ, dst) } -emit_amx_stz_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register) { append(instructions, inst_amx_stz_r(dst)) } +emit_amx_stz_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register) { append_elem(instructions, inst_amx_stz_r(dst)) } inst_amx_ldzi_r :: #force_inline proc "contextless" (dst: Register) -> Instruction { return inst_r(.AMX_LDZI, dst) } -emit_amx_ldzi_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register) { append(instructions, inst_amx_ldzi_r(dst)) } +emit_amx_ldzi_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register) { append_elem(instructions, inst_amx_ldzi_r(dst)) } inst_amx_stzi_r :: #force_inline proc "contextless" (dst: Register) -> Instruction { return inst_r(.AMX_STZI, dst) } -emit_amx_stzi_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register) { append(instructions, inst_amx_stzi_r(dst)) } +emit_amx_stzi_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register) { append_elem(instructions, inst_amx_stzi_r(dst)) } inst_amx_extrx_r :: #force_inline proc "contextless" (dst: Register) -> Instruction { return inst_r(.AMX_EXTRX, dst) } -emit_amx_extrx_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register) { append(instructions, inst_amx_extrx_r(dst)) } +emit_amx_extrx_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register) { append_elem(instructions, inst_amx_extrx_r(dst)) } inst_amx_extry_r :: #force_inline proc "contextless" (dst: Register) -> Instruction { return inst_r(.AMX_EXTRY, dst) } -emit_amx_extry_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register) { append(instructions, inst_amx_extry_r(dst)) } +emit_amx_extry_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register) { append_elem(instructions, inst_amx_extry_r(dst)) } inst_amx_fma64_r :: #force_inline proc "contextless" (dst: Register) -> Instruction { return inst_r(.AMX_FMA64, dst) } -emit_amx_fma64_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register) { append(instructions, inst_amx_fma64_r(dst)) } +emit_amx_fma64_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register) { append_elem(instructions, inst_amx_fma64_r(dst)) } inst_amx_fms64_r :: #force_inline proc "contextless" (dst: Register) -> Instruction { return inst_r(.AMX_FMS64, dst) } -emit_amx_fms64_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register) { append(instructions, inst_amx_fms64_r(dst)) } +emit_amx_fms64_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register) { append_elem(instructions, inst_amx_fms64_r(dst)) } inst_amx_fma32_r :: #force_inline proc "contextless" (dst: Register) -> Instruction { return inst_r(.AMX_FMA32, dst) } -emit_amx_fma32_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register) { append(instructions, inst_amx_fma32_r(dst)) } +emit_amx_fma32_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register) { append_elem(instructions, inst_amx_fma32_r(dst)) } inst_amx_fms32_r :: #force_inline proc "contextless" (dst: Register) -> Instruction { return inst_r(.AMX_FMS32, dst) } -emit_amx_fms32_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register) { append(instructions, inst_amx_fms32_r(dst)) } +emit_amx_fms32_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register) { append_elem(instructions, inst_amx_fms32_r(dst)) } inst_amx_mac16_r :: #force_inline proc "contextless" (dst: Register) -> Instruction { return inst_r(.AMX_MAC16, dst) } -emit_amx_mac16_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register) { append(instructions, inst_amx_mac16_r(dst)) } +emit_amx_mac16_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register) { append_elem(instructions, inst_amx_mac16_r(dst)) } inst_amx_fma16_r :: #force_inline proc "contextless" (dst: Register) -> Instruction { return inst_r(.AMX_FMA16, dst) } -emit_amx_fma16_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register) { append(instructions, inst_amx_fma16_r(dst)) } +emit_amx_fma16_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register) { append_elem(instructions, inst_amx_fma16_r(dst)) } inst_amx_fms16_r :: #force_inline proc "contextless" (dst: Register) -> Instruction { return inst_r(.AMX_FMS16, dst) } -emit_amx_fms16_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register) { append(instructions, inst_amx_fms16_r(dst)) } +emit_amx_fms16_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register) { append_elem(instructions, inst_amx_fms16_r(dst)) } inst_amx_set_none :: #force_inline proc "contextless" () -> Instruction { return inst_none(.AMX_SET) } -emit_amx_set_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_amx_set_none()) } +emit_amx_set_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_amx_set_none()) } inst_amx_clr_none :: #force_inline proc "contextless" () -> Instruction { return inst_none(.AMX_CLR) } -emit_amx_clr_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_amx_clr_none()) } +emit_amx_clr_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_amx_clr_none()) } inst_amx_vecint_r :: #force_inline proc "contextless" (dst: Register) -> Instruction { return inst_r(.AMX_VECINT, dst) } -emit_amx_vecint_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register) { append(instructions, inst_amx_vecint_r(dst)) } +emit_amx_vecint_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register) { append_elem(instructions, inst_amx_vecint_r(dst)) } inst_amx_vecfp_r :: #force_inline proc "contextless" (dst: Register) -> Instruction { return inst_r(.AMX_VECFP, dst) } -emit_amx_vecfp_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register) { append(instructions, inst_amx_vecfp_r(dst)) } +emit_amx_vecfp_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register) { append_elem(instructions, inst_amx_vecfp_r(dst)) } inst_amx_matint_r :: #force_inline proc "contextless" (dst: Register) -> Instruction { return inst_r(.AMX_MATINT, dst) } -emit_amx_matint_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register) { append(instructions, inst_amx_matint_r(dst)) } +emit_amx_matint_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register) { append_elem(instructions, inst_amx_matint_r(dst)) } inst_amx_matfp_r :: #force_inline proc "contextless" (dst: Register) -> Instruction { return inst_r(.AMX_MATFP, dst) } -emit_amx_matfp_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register) { append(instructions, inst_amx_matfp_r(dst)) } +emit_amx_matfp_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register) { append_elem(instructions, inst_amx_matfp_r(dst)) } inst_amx_genlut_r :: #force_inline proc "contextless" (dst: Register) -> Instruction { return inst_r(.AMX_GENLUT, dst) } -emit_amx_genlut_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register) { append(instructions, inst_amx_genlut_r(dst)) } +emit_amx_genlut_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register) { append_elem(instructions, inst_amx_genlut_r(dst)) } inst_cpyp_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return inst_r_r_r(.CPYP, dst, src, src2) } -emit_cpyp_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_cpyp_r_r_r(dst, src, src2)) } +emit_cpyp_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_cpyp_r_r_r(dst, src, src2)) } inst_cpym_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return inst_r_r_r(.CPYM, dst, src, src2) } -emit_cpym_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_cpym_r_r_r(dst, src, src2)) } +emit_cpym_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_cpym_r_r_r(dst, src, src2)) } inst_cpye_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return inst_r_r_r(.CPYE, dst, src, src2) } -emit_cpye_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_cpye_r_r_r(dst, src, src2)) } +emit_cpye_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_cpye_r_r_r(dst, src, src2)) } inst_cpyfp_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return inst_r_r_r(.CPYFP, dst, src, src2) } -emit_cpyfp_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_cpyfp_r_r_r(dst, src, src2)) } +emit_cpyfp_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_cpyfp_r_r_r(dst, src, src2)) } inst_cpyfm_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return inst_r_r_r(.CPYFM, dst, src, src2) } -emit_cpyfm_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_cpyfm_r_r_r(dst, src, src2)) } +emit_cpyfm_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_cpyfm_r_r_r(dst, src, src2)) } inst_cpyfe_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return inst_r_r_r(.CPYFE, dst, src, src2) } -emit_cpyfe_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_cpyfe_r_r_r(dst, src, src2)) } +emit_cpyfe_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_cpyfe_r_r_r(dst, src, src2)) } inst_setp_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return inst_r_r_r(.SETP, dst, src, src2) } -emit_setp_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_setp_r_r_r(dst, src, src2)) } +emit_setp_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_setp_r_r_r(dst, src, src2)) } inst_setm_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return inst_r_r_r(.SETM, dst, src, src2) } -emit_setm_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_setm_r_r_r(dst, src, src2)) } +emit_setm_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_setm_r_r_r(dst, src, src2)) } inst_sete_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return inst_r_r_r(.SETE, dst, src, src2) } -emit_sete_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_sete_r_r_r(dst, src, src2)) } +emit_sete_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_sete_r_r_r(dst, src, src2)) } inst_dc_ivac_r :: #force_inline proc "contextless" (dst: Register) -> Instruction { return inst_r(.DC_IVAC, dst) } -emit_dc_ivac_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register) { append(instructions, inst_dc_ivac_r(dst)) } +emit_dc_ivac_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register) { append_elem(instructions, inst_dc_ivac_r(dst)) } inst_dc_isw_r :: #force_inline proc "contextless" (dst: Register) -> Instruction { return inst_r(.DC_ISW, dst) } -emit_dc_isw_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register) { append(instructions, inst_dc_isw_r(dst)) } +emit_dc_isw_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register) { append_elem(instructions, inst_dc_isw_r(dst)) } inst_dc_csw_r :: #force_inline proc "contextless" (dst: Register) -> Instruction { return inst_r(.DC_CSW, dst) } -emit_dc_csw_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register) { append(instructions, inst_dc_csw_r(dst)) } +emit_dc_csw_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register) { append_elem(instructions, inst_dc_csw_r(dst)) } inst_dc_cisw_r :: #force_inline proc "contextless" (dst: Register) -> Instruction { return inst_r(.DC_CISW, dst) } -emit_dc_cisw_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register) { append(instructions, inst_dc_cisw_r(dst)) } +emit_dc_cisw_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register) { append_elem(instructions, inst_dc_cisw_r(dst)) } inst_dc_zva_r :: #force_inline proc "contextless" (dst: Register) -> Instruction { return inst_r(.DC_ZVA, dst) } -emit_dc_zva_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register) { append(instructions, inst_dc_zva_r(dst)) } +emit_dc_zva_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register) { append_elem(instructions, inst_dc_zva_r(dst)) } inst_dc_cvac_r :: #force_inline proc "contextless" (dst: Register) -> Instruction { return inst_r(.DC_CVAC, dst) } -emit_dc_cvac_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register) { append(instructions, inst_dc_cvac_r(dst)) } +emit_dc_cvac_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register) { append_elem(instructions, inst_dc_cvac_r(dst)) } inst_dc_cvau_r :: #force_inline proc "contextless" (dst: Register) -> Instruction { return inst_r(.DC_CVAU, dst) } -emit_dc_cvau_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register) { append(instructions, inst_dc_cvau_r(dst)) } +emit_dc_cvau_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register) { append_elem(instructions, inst_dc_cvau_r(dst)) } inst_dc_civac_r :: #force_inline proc "contextless" (dst: Register) -> Instruction { return inst_r(.DC_CIVAC, dst) } -emit_dc_civac_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register) { append(instructions, inst_dc_civac_r(dst)) } +emit_dc_civac_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register) { append_elem(instructions, inst_dc_civac_r(dst)) } inst_ic_ialluis_none :: #force_inline proc "contextless" () -> Instruction { return inst_none(.IC_IALLUIS) } -emit_ic_ialluis_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_ic_ialluis_none()) } +emit_ic_ialluis_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_ic_ialluis_none()) } inst_ic_iallu_none :: #force_inline proc "contextless" () -> Instruction { return inst_none(.IC_IALLU) } -emit_ic_iallu_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_ic_iallu_none()) } +emit_ic_iallu_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_ic_iallu_none()) } inst_ic_ivau_r :: #force_inline proc "contextless" (dst: Register) -> Instruction { return inst_r(.IC_IVAU, dst) } -emit_ic_ivau_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register) { append(instructions, inst_ic_ivau_r(dst)) } +emit_ic_ivau_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register) { append_elem(instructions, inst_ic_ivau_r(dst)) } inst_at_s1e1r_r :: #force_inline proc "contextless" (dst: Register) -> Instruction { return inst_r(.AT_S1E1R, dst) } -emit_at_s1e1r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register) { append(instructions, inst_at_s1e1r_r(dst)) } +emit_at_s1e1r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register) { append_elem(instructions, inst_at_s1e1r_r(dst)) } inst_at_s1e1w_r :: #force_inline proc "contextless" (dst: Register) -> Instruction { return inst_r(.AT_S1E1W, dst) } -emit_at_s1e1w_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register) { append(instructions, inst_at_s1e1w_r(dst)) } +emit_at_s1e1w_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register) { append_elem(instructions, inst_at_s1e1w_r(dst)) } inst_at_s1e0r_r :: #force_inline proc "contextless" (dst: Register) -> Instruction { return inst_r(.AT_S1E0R, dst) } -emit_at_s1e0r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register) { append(instructions, inst_at_s1e0r_r(dst)) } +emit_at_s1e0r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register) { append_elem(instructions, inst_at_s1e0r_r(dst)) } inst_at_s1e0w_r :: #force_inline proc "contextless" (dst: Register) -> Instruction { return inst_r(.AT_S1E0W, dst) } -emit_at_s1e0w_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register) { append(instructions, inst_at_s1e0w_r(dst)) } +emit_at_s1e0w_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register) { append_elem(instructions, inst_at_s1e0w_r(dst)) } inst_at_s1e2r_r :: #force_inline proc "contextless" (dst: Register) -> Instruction { return inst_r(.AT_S1E2R, dst) } -emit_at_s1e2r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register) { append(instructions, inst_at_s1e2r_r(dst)) } +emit_at_s1e2r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register) { append_elem(instructions, inst_at_s1e2r_r(dst)) } inst_at_s1e2w_r :: #force_inline proc "contextless" (dst: Register) -> Instruction { return inst_r(.AT_S1E2W, dst) } -emit_at_s1e2w_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register) { append(instructions, inst_at_s1e2w_r(dst)) } +emit_at_s1e2w_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register) { append_elem(instructions, inst_at_s1e2w_r(dst)) } inst_at_s1e3r_r :: #force_inline proc "contextless" (dst: Register) -> Instruction { return inst_r(.AT_S1E3R, dst) } -emit_at_s1e3r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register) { append(instructions, inst_at_s1e3r_r(dst)) } +emit_at_s1e3r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register) { append_elem(instructions, inst_at_s1e3r_r(dst)) } inst_at_s1e3w_r :: #force_inline proc "contextless" (dst: Register) -> Instruction { return inst_r(.AT_S1E3W, dst) } -emit_at_s1e3w_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register) { append(instructions, inst_at_s1e3w_r(dst)) } +emit_at_s1e3w_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register) { append_elem(instructions, inst_at_s1e3w_r(dst)) } inst_at_s12e1r_r :: #force_inline proc "contextless" (dst: Register) -> Instruction { return inst_r(.AT_S12E1R, dst) } -emit_at_s12e1r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register) { append(instructions, inst_at_s12e1r_r(dst)) } +emit_at_s12e1r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register) { append_elem(instructions, inst_at_s12e1r_r(dst)) } inst_at_s12e1w_r :: #force_inline proc "contextless" (dst: Register) -> Instruction { return inst_r(.AT_S12E1W, dst) } -emit_at_s12e1w_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register) { append(instructions, inst_at_s12e1w_r(dst)) } +emit_at_s12e1w_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register) { append_elem(instructions, inst_at_s12e1w_r(dst)) } inst_at_s12e0r_r :: #force_inline proc "contextless" (dst: Register) -> Instruction { return inst_r(.AT_S12E0R, dst) } -emit_at_s12e0r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register) { append(instructions, inst_at_s12e0r_r(dst)) } +emit_at_s12e0r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register) { append_elem(instructions, inst_at_s12e0r_r(dst)) } inst_at_s12e0w_r :: #force_inline proc "contextless" (dst: Register) -> Instruction { return inst_r(.AT_S12E0W, dst) } -emit_at_s12e0w_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register) { append(instructions, inst_at_s12e0w_r(dst)) } +emit_at_s12e0w_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register) { append_elem(instructions, inst_at_s12e0w_r(dst)) } inst_tlbi_vmalle1_none :: #force_inline proc "contextless" () -> Instruction { return inst_none(.TLBI_VMALLE1) } -emit_tlbi_vmalle1_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_tlbi_vmalle1_none()) } +emit_tlbi_vmalle1_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_tlbi_vmalle1_none()) } inst_tlbi_vmalle1is_none :: #force_inline proc "contextless" () -> Instruction { return inst_none(.TLBI_VMALLE1IS) } -emit_tlbi_vmalle1is_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_tlbi_vmalle1is_none()) } +emit_tlbi_vmalle1is_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_tlbi_vmalle1is_none()) } inst_tlbi_vae1_r :: #force_inline proc "contextless" (dst: Register) -> Instruction { return inst_r(.TLBI_VAE1, dst) } -emit_tlbi_vae1_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register) { append(instructions, inst_tlbi_vae1_r(dst)) } +emit_tlbi_vae1_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register) { append_elem(instructions, inst_tlbi_vae1_r(dst)) } inst_tlbi_vae1is_r :: #force_inline proc "contextless" (dst: Register) -> Instruction { return inst_r(.TLBI_VAE1IS, dst) } -emit_tlbi_vae1is_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register) { append(instructions, inst_tlbi_vae1is_r(dst)) } +emit_tlbi_vae1is_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register) { append_elem(instructions, inst_tlbi_vae1is_r(dst)) } inst_tlbi_aside1_r :: #force_inline proc "contextless" (dst: Register) -> Instruction { return inst_r(.TLBI_ASIDE1, dst) } -emit_tlbi_aside1_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register) { append(instructions, inst_tlbi_aside1_r(dst)) } +emit_tlbi_aside1_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register) { append_elem(instructions, inst_tlbi_aside1_r(dst)) } inst_tlbi_aside1is_r :: #force_inline proc "contextless" (dst: Register) -> Instruction { return inst_r(.TLBI_ASIDE1IS, dst) } -emit_tlbi_aside1is_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register) { append(instructions, inst_tlbi_aside1is_r(dst)) } +emit_tlbi_aside1is_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register) { append_elem(instructions, inst_tlbi_aside1is_r(dst)) } inst_tlbi_vaae1_r :: #force_inline proc "contextless" (dst: Register) -> Instruction { return inst_r(.TLBI_VAAE1, dst) } -emit_tlbi_vaae1_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register) { append(instructions, inst_tlbi_vaae1_r(dst)) } +emit_tlbi_vaae1_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register) { append_elem(instructions, inst_tlbi_vaae1_r(dst)) } inst_tlbi_vaae1is_r :: #force_inline proc "contextless" (dst: Register) -> Instruction { return inst_r(.TLBI_VAAE1IS, dst) } -emit_tlbi_vaae1is_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register) { append(instructions, inst_tlbi_vaae1is_r(dst)) } +emit_tlbi_vaae1is_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register) { append_elem(instructions, inst_tlbi_vaae1is_r(dst)) } inst_tlbi_vale1_r :: #force_inline proc "contextless" (dst: Register) -> Instruction { return inst_r(.TLBI_VALE1, dst) } -emit_tlbi_vale1_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register) { append(instructions, inst_tlbi_vale1_r(dst)) } +emit_tlbi_vale1_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register) { append_elem(instructions, inst_tlbi_vale1_r(dst)) } inst_tlbi_vale1is_r :: #force_inline proc "contextless" (dst: Register) -> Instruction { return inst_r(.TLBI_VALE1IS, dst) } -emit_tlbi_vale1is_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register) { append(instructions, inst_tlbi_vale1is_r(dst)) } +emit_tlbi_vale1is_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register) { append_elem(instructions, inst_tlbi_vale1is_r(dst)) } inst_tlbi_vaale1_r :: #force_inline proc "contextless" (dst: Register) -> Instruction { return inst_r(.TLBI_VAALE1, dst) } -emit_tlbi_vaale1_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register) { append(instructions, inst_tlbi_vaale1_r(dst)) } +emit_tlbi_vaale1_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register) { append_elem(instructions, inst_tlbi_vaale1_r(dst)) } inst_tlbi_vaale1is_r :: #force_inline proc "contextless" (dst: Register) -> Instruction { return inst_r(.TLBI_VAALE1IS, dst) } -emit_tlbi_vaale1is_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register) { append(instructions, inst_tlbi_vaale1is_r(dst)) } +emit_tlbi_vaale1is_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register) { append_elem(instructions, inst_tlbi_vaale1is_r(dst)) } inst_tlbi_alle1_none :: #force_inline proc "contextless" () -> Instruction { return inst_none(.TLBI_ALLE1) } -emit_tlbi_alle1_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_tlbi_alle1_none()) } +emit_tlbi_alle1_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_tlbi_alle1_none()) } inst_tlbi_alle1is_none :: #force_inline proc "contextless" () -> Instruction { return inst_none(.TLBI_ALLE1IS) } -emit_tlbi_alle1is_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_tlbi_alle1is_none()) } +emit_tlbi_alle1is_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_tlbi_alle1is_none()) } inst_tlbi_alle2_none :: #force_inline proc "contextless" () -> Instruction { return inst_none(.TLBI_ALLE2) } -emit_tlbi_alle2_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_tlbi_alle2_none()) } +emit_tlbi_alle2_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_tlbi_alle2_none()) } inst_tlbi_alle2is_none :: #force_inline proc "contextless" () -> Instruction { return inst_none(.TLBI_ALLE2IS) } -emit_tlbi_alle2is_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_tlbi_alle2is_none()) } +emit_tlbi_alle2is_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_tlbi_alle2is_none()) } inst_tlbi_alle3_none :: #force_inline proc "contextless" () -> Instruction { return inst_none(.TLBI_ALLE3) } -emit_tlbi_alle3_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_tlbi_alle3_none()) } +emit_tlbi_alle3_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_tlbi_alle3_none()) } inst_tlbi_alle3is_none :: #force_inline proc "contextless" () -> Instruction { return inst_none(.TLBI_ALLE3IS) } -emit_tlbi_alle3is_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_tlbi_alle3is_none()) } +emit_tlbi_alle3is_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_tlbi_alle3is_none()) } inst_prfm_i_m :: #force_inline proc "contextless" (imm: i64, mem: Memory) -> Instruction { return Instruction{mnemonic = .PRFM, operand_count = 2, length = 4, ops = {op_imm(imm, 1), op_mem(mem), {}, {}, {}}} } inst_prfm_i_l :: #force_inline proc "contextless" (imm: i64, label: u32) -> Instruction { return Instruction{mnemonic = .PRFM, operand_count = 2, length = 4, ops = {op_imm(imm, 1), op_label(label, 4), {}, {}, {}}} } -emit_prfm_i_m :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, mem: Memory) { append(instructions, inst_prfm_i_m(imm, mem)) } -emit_prfm_i_l :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, label: u32) { append(instructions, inst_prfm_i_l(imm, label)) } +emit_prfm_i_m :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, mem: Memory) { append_elem(instructions, inst_prfm_i_m(imm, mem)) } +emit_prfm_i_l :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, label: u32) { append_elem(instructions, inst_prfm_i_l(imm, label)) } inst_prfum_i_m :: #force_inline proc "contextless" (imm: i64, mem: Memory) -> Instruction { return Instruction{mnemonic = .PRFUM, operand_count = 2, length = 4, ops = {op_imm(imm, 1), op_mem(mem), {}, {}, {}}} } -emit_prfum_i_m :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, mem: Memory) { append(instructions, inst_prfum_i_m(imm, mem)) } +emit_prfum_i_m :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, mem: Memory) { append_elem(instructions, inst_prfum_i_m(imm, mem)) } inst_negs_r_sh :: #force_inline proc "contextless" (dst: Register, src: Register, src_shift: Shift_Type, src_amount: u8) -> Instruction { return Instruction{mnemonic = .NEGS, operand_count = 2, length = 4, ops = {op_reg(dst), op_shifted(src, src_shift, src_amount), {}, {}, {}}} } -emit_negs_r_sh :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src_shift: Shift_Type, src_amount: u8) { append(instructions, inst_negs_r_sh(dst, src, src_shift, src_amount)) } +emit_negs_r_sh :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src_shift: Shift_Type, src_amount: u8) { append_elem(instructions, inst_negs_r_sh(dst, src, src_shift, src_amount)) } inst_cmp_r_sh :: #force_inline proc "contextless" (dst: Register, src: Register, src_shift: Shift_Type, src_amount: u8) -> Instruction { return Instruction{mnemonic = .CMP, operand_count = 2, length = 4, ops = {op_reg(dst), op_shifted(src, src_shift, src_amount), {}, {}, {}}} } inst_cmp_r_ex :: #force_inline proc "contextless" (dst: Register, src: Register, src_ext: Extend, src_amount: u8) -> Instruction { return Instruction{mnemonic = .CMP, operand_count = 2, length = 4, ops = {op_reg(dst), op_extended(src, src_ext, src_amount), {}, {}, {}}} } inst_cmp_r_i :: #force_inline proc "contextless" (dst: Register, imm: i64) -> Instruction { return inst_r_i(.CMP, dst, imm) } -emit_cmp_r_sh :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src_shift: Shift_Type, src_amount: u8) { append(instructions, inst_cmp_r_sh(dst, src, src_shift, src_amount)) } -emit_cmp_r_ex :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src_ext: Extend, src_amount: u8) { append(instructions, inst_cmp_r_ex(dst, src, src_ext, src_amount)) } -emit_cmp_r_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64) { append(instructions, inst_cmp_r_i(dst, imm)) } +emit_cmp_r_sh :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src_shift: Shift_Type, src_amount: u8) { append_elem(instructions, inst_cmp_r_sh(dst, src, src_shift, src_amount)) } +emit_cmp_r_ex :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src_ext: Extend, src_amount: u8) { append_elem(instructions, inst_cmp_r_ex(dst, src, src_ext, src_amount)) } +emit_cmp_r_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64) { append_elem(instructions, inst_cmp_r_i(dst, imm)) } inst_cmn_r_sh :: #force_inline proc "contextless" (dst: Register, src: Register, src_shift: Shift_Type, src_amount: u8) -> Instruction { return Instruction{mnemonic = .CMN, operand_count = 2, length = 4, ops = {op_reg(dst), op_shifted(src, src_shift, src_amount), {}, {}, {}}} } inst_cmn_r_ex :: #force_inline proc "contextless" (dst: Register, src: Register, src_ext: Extend, src_amount: u8) -> Instruction { return Instruction{mnemonic = .CMN, operand_count = 2, length = 4, ops = {op_reg(dst), op_extended(src, src_ext, src_amount), {}, {}, {}}} } inst_cmn_r_i :: #force_inline proc "contextless" (dst: Register, imm: i64) -> Instruction { return inst_r_i(.CMN, dst, imm) } -emit_cmn_r_sh :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src_shift: Shift_Type, src_amount: u8) { append(instructions, inst_cmn_r_sh(dst, src, src_shift, src_amount)) } -emit_cmn_r_ex :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src_ext: Extend, src_amount: u8) { append(instructions, inst_cmn_r_ex(dst, src, src_ext, src_amount)) } -emit_cmn_r_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64) { append(instructions, inst_cmn_r_i(dst, imm)) } +emit_cmn_r_sh :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src_shift: Shift_Type, src_amount: u8) { append_elem(instructions, inst_cmn_r_sh(dst, src, src_shift, src_amount)) } +emit_cmn_r_ex :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src_ext: Extend, src_amount: u8) { append_elem(instructions, inst_cmn_r_ex(dst, src, src_ext, src_amount)) } +emit_cmn_r_i :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64) { append_elem(instructions, inst_cmn_r_i(dst, imm)) } // ============================================================================= // Overload Groups diff --git a/core/rexcode/isa/arm64/tools/gen_mnemonic_builders.odin b/core/rexcode/isa/arm64/tools/gen_mnemonic_builders.odin index 17943cd22..c97c3e37c 100644 --- a/core/rexcode/isa/arm64/tools/gen_mnemonic_builders.odin +++ b/core/rexcode/isa/arm64/tools/gen_mnemonic_builders.odin @@ -686,7 +686,7 @@ write_emit_proc :: proc(sb: ^strings.Builder, entry: Proc_Entry, pad: int) { for n := pad - len(entry.proc_name); n > 0; n -= 1 { strings.write_byte(sb, ' ') } strings.write_string(sb, " :: #force_inline proc(") strings.write_string(sb, strings.to_string(pstr)) - strings.write_string(sb, ") { append(instructions, ") + strings.write_string(sb, ") { append_elem(instructions, ") strings.write_string(sb, entry.proc_name) strings.write_byte(sb, '(') strings.write_string(sb, strings.to_string(astr)) diff --git a/core/rexcode/isa/mips/mnemonic_builders.odin b/core/rexcode/isa/mips/mnemonic_builders.odin index 530a901f9..ed24a2ed9 100644 --- a/core/rexcode/isa/mips/mnemonic_builders.odin +++ b/core/rexcode/isa/mips/mnemonic_builders.odin @@ -29,2061 +29,2061 @@ package rexcode_mips // ============================================================================= inst_add_r_r_r :: #force_inline proc "contextless" (dst: GPR, src: GPR, src2: GPR) -> Instruction { return Instruction{mnemonic = .ADD, operand_count = 3, length = 4, ops = {op_gpr(dst), op_gpr(src), op_gpr(src2), {}}} } -emit_add_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, src2: GPR) { append(instructions, inst_add_r_r_r(dst, src, src2)) } +emit_add_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, src2: GPR) { append_elem(instructions, inst_add_r_r_r(dst, src, src2)) } inst_addu_r_r_r :: #force_inline proc "contextless" (dst: GPR, src: GPR, src2: GPR) -> Instruction { return Instruction{mnemonic = .ADDU, operand_count = 3, length = 4, ops = {op_gpr(dst), op_gpr(src), op_gpr(src2), {}}} } -emit_addu_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, src2: GPR) { append(instructions, inst_addu_r_r_r(dst, src, src2)) } +emit_addu_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, src2: GPR) { append_elem(instructions, inst_addu_r_r_r(dst, src, src2)) } inst_sub_r_r_r :: #force_inline proc "contextless" (dst: GPR, src: GPR, src2: GPR) -> Instruction { return Instruction{mnemonic = .SUB, operand_count = 3, length = 4, ops = {op_gpr(dst), op_gpr(src), op_gpr(src2), {}}} } -emit_sub_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, src2: GPR) { append(instructions, inst_sub_r_r_r(dst, src, src2)) } +emit_sub_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, src2: GPR) { append_elem(instructions, inst_sub_r_r_r(dst, src, src2)) } inst_subu_r_r_r :: #force_inline proc "contextless" (dst: GPR, src: GPR, src2: GPR) -> Instruction { return Instruction{mnemonic = .SUBU, operand_count = 3, length = 4, ops = {op_gpr(dst), op_gpr(src), op_gpr(src2), {}}} } -emit_subu_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, src2: GPR) { append(instructions, inst_subu_r_r_r(dst, src, src2)) } +emit_subu_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, src2: GPR) { append_elem(instructions, inst_subu_r_r_r(dst, src, src2)) } inst_mult_r_r :: #force_inline proc "contextless" (dst: GPR, src: GPR) -> Instruction { return Instruction{mnemonic = .MULT, operand_count = 2, length = 4, ops = {op_gpr(dst), op_gpr(src), {}, {}}} } -emit_mult_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR) { append(instructions, inst_mult_r_r(dst, src)) } +emit_mult_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR) { append_elem(instructions, inst_mult_r_r(dst, src)) } inst_multu_r_r :: #force_inline proc "contextless" (dst: GPR, src: GPR) -> Instruction { return Instruction{mnemonic = .MULTU, operand_count = 2, length = 4, ops = {op_gpr(dst), op_gpr(src), {}, {}}} } -emit_multu_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR) { append(instructions, inst_multu_r_r(dst, src)) } +emit_multu_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR) { append_elem(instructions, inst_multu_r_r(dst, src)) } inst_div_r_r :: #force_inline proc "contextless" (dst: GPR, src: GPR) -> Instruction { return Instruction{mnemonic = .DIV, operand_count = 2, length = 4, ops = {op_gpr(dst), op_gpr(src), {}, {}}} } inst_div_r_r_r :: #force_inline proc "contextless" (dst: GPR, src: GPR, src2: GPR) -> Instruction { return Instruction{mnemonic = .DIV, operand_count = 3, length = 4, ops = {op_gpr(dst), op_gpr(src), op_gpr(src2), {}}} } -emit_div_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR) { append(instructions, inst_div_r_r(dst, src)) } -emit_div_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, src2: GPR) { append(instructions, inst_div_r_r_r(dst, src, src2)) } +emit_div_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR) { append_elem(instructions, inst_div_r_r(dst, src)) } +emit_div_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, src2: GPR) { append_elem(instructions, inst_div_r_r_r(dst, src, src2)) } inst_divu_r_r :: #force_inline proc "contextless" (dst: GPR, src: GPR) -> Instruction { return Instruction{mnemonic = .DIVU, operand_count = 2, length = 4, ops = {op_gpr(dst), op_gpr(src), {}, {}}} } inst_divu_r_r_r :: #force_inline proc "contextless" (dst: GPR, src: GPR, src2: GPR) -> Instruction { return Instruction{mnemonic = .DIVU, operand_count = 3, length = 4, ops = {op_gpr(dst), op_gpr(src), op_gpr(src2), {}}} } -emit_divu_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR) { append(instructions, inst_divu_r_r(dst, src)) } -emit_divu_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, src2: GPR) { append(instructions, inst_divu_r_r_r(dst, src, src2)) } +emit_divu_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR) { append_elem(instructions, inst_divu_r_r(dst, src)) } +emit_divu_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, src2: GPR) { append_elem(instructions, inst_divu_r_r_r(dst, src, src2)) } inst_mfhi_r :: #force_inline proc "contextless" (dst: GPR) -> Instruction { return Instruction{mnemonic = .MFHI, operand_count = 1, length = 4, ops = {op_gpr(dst), {}, {}, {}}} } -emit_mfhi_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR) { append(instructions, inst_mfhi_r(dst)) } +emit_mfhi_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR) { append_elem(instructions, inst_mfhi_r(dst)) } inst_mflo_r :: #force_inline proc "contextless" (dst: GPR) -> Instruction { return Instruction{mnemonic = .MFLO, operand_count = 1, length = 4, ops = {op_gpr(dst), {}, {}, {}}} } -emit_mflo_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR) { append(instructions, inst_mflo_r(dst)) } +emit_mflo_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR) { append_elem(instructions, inst_mflo_r(dst)) } inst_mthi_r :: #force_inline proc "contextless" (dst: GPR) -> Instruction { return Instruction{mnemonic = .MTHI, operand_count = 1, length = 4, ops = {op_gpr(dst), {}, {}, {}}} } -emit_mthi_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR) { append(instructions, inst_mthi_r(dst)) } +emit_mthi_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR) { append_elem(instructions, inst_mthi_r(dst)) } inst_mtlo_r :: #force_inline proc "contextless" (dst: GPR) -> Instruction { return Instruction{mnemonic = .MTLO, operand_count = 1, length = 4, ops = {op_gpr(dst), {}, {}, {}}} } -emit_mtlo_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR) { append(instructions, inst_mtlo_r(dst)) } +emit_mtlo_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR) { append_elem(instructions, inst_mtlo_r(dst)) } inst_and_r_r_r :: #force_inline proc "contextless" (dst: GPR, src: GPR, src2: GPR) -> Instruction { return Instruction{mnemonic = .AND, operand_count = 3, length = 4, ops = {op_gpr(dst), op_gpr(src), op_gpr(src2), {}}} } -emit_and_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, src2: GPR) { append(instructions, inst_and_r_r_r(dst, src, src2)) } +emit_and_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, src2: GPR) { append_elem(instructions, inst_and_r_r_r(dst, src, src2)) } inst_or_r_r_r :: #force_inline proc "contextless" (dst: GPR, src: GPR, src2: GPR) -> Instruction { return Instruction{mnemonic = .OR, operand_count = 3, length = 4, ops = {op_gpr(dst), op_gpr(src), op_gpr(src2), {}}} } -emit_or_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, src2: GPR) { append(instructions, inst_or_r_r_r(dst, src, src2)) } +emit_or_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, src2: GPR) { append_elem(instructions, inst_or_r_r_r(dst, src, src2)) } inst_xor_r_r_r :: #force_inline proc "contextless" (dst: GPR, src: GPR, src2: GPR) -> Instruction { return Instruction{mnemonic = .XOR, operand_count = 3, length = 4, ops = {op_gpr(dst), op_gpr(src), op_gpr(src2), {}}} } -emit_xor_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, src2: GPR) { append(instructions, inst_xor_r_r_r(dst, src, src2)) } +emit_xor_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, src2: GPR) { append_elem(instructions, inst_xor_r_r_r(dst, src, src2)) } inst_nor_r_r_r :: #force_inline proc "contextless" (dst: GPR, src: GPR, src2: GPR) -> Instruction { return Instruction{mnemonic = .NOR, operand_count = 3, length = 4, ops = {op_gpr(dst), op_gpr(src), op_gpr(src2), {}}} } -emit_nor_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, src2: GPR) { append(instructions, inst_nor_r_r_r(dst, src, src2)) } +emit_nor_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, src2: GPR) { append_elem(instructions, inst_nor_r_r_r(dst, src, src2)) } inst_slt_r_r_r :: #force_inline proc "contextless" (dst: GPR, src: GPR, src2: GPR) -> Instruction { return Instruction{mnemonic = .SLT, operand_count = 3, length = 4, ops = {op_gpr(dst), op_gpr(src), op_gpr(src2), {}}} } -emit_slt_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, src2: GPR) { append(instructions, inst_slt_r_r_r(dst, src, src2)) } +emit_slt_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, src2: GPR) { append_elem(instructions, inst_slt_r_r_r(dst, src, src2)) } inst_sltu_r_r_r :: #force_inline proc "contextless" (dst: GPR, src: GPR, src2: GPR) -> Instruction { return Instruction{mnemonic = .SLTU, operand_count = 3, length = 4, ops = {op_gpr(dst), op_gpr(src), op_gpr(src2), {}}} } -emit_sltu_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, src2: GPR) { append(instructions, inst_sltu_r_r_r(dst, src, src2)) } +emit_sltu_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, src2: GPR) { append_elem(instructions, inst_sltu_r_r_r(dst, src, src2)) } inst_sll_r_r_i5 :: #force_inline proc "contextless" (dst: GPR, src: GPR, imm: i64) -> Instruction { return Instruction{mnemonic = .SLL, operand_count = 3, length = 4, ops = {op_gpr(dst), op_gpr(src), op_imm(imm, 1), {}}} } -emit_sll_r_r_i5 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, imm: i64) { append(instructions, inst_sll_r_r_i5(dst, src, imm)) } +emit_sll_r_r_i5 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, imm: i64) { append_elem(instructions, inst_sll_r_r_i5(dst, src, imm)) } inst_srl_r_r_i5 :: #force_inline proc "contextless" (dst: GPR, src: GPR, imm: i64) -> Instruction { return Instruction{mnemonic = .SRL, operand_count = 3, length = 4, ops = {op_gpr(dst), op_gpr(src), op_imm(imm, 1), {}}} } -emit_srl_r_r_i5 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, imm: i64) { append(instructions, inst_srl_r_r_i5(dst, src, imm)) } +emit_srl_r_r_i5 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, imm: i64) { append_elem(instructions, inst_srl_r_r_i5(dst, src, imm)) } inst_sra_r_r_i5 :: #force_inline proc "contextless" (dst: GPR, src: GPR, imm: i64) -> Instruction { return Instruction{mnemonic = .SRA, operand_count = 3, length = 4, ops = {op_gpr(dst), op_gpr(src), op_imm(imm, 1), {}}} } -emit_sra_r_r_i5 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, imm: i64) { append(instructions, inst_sra_r_r_i5(dst, src, imm)) } +emit_sra_r_r_i5 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, imm: i64) { append_elem(instructions, inst_sra_r_r_i5(dst, src, imm)) } inst_sllv_r_r_r :: #force_inline proc "contextless" (dst: GPR, src: GPR, src2: GPR) -> Instruction { return Instruction{mnemonic = .SLLV, operand_count = 3, length = 4, ops = {op_gpr(dst), op_gpr(src), op_gpr(src2), {}}} } -emit_sllv_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, src2: GPR) { append(instructions, inst_sllv_r_r_r(dst, src, src2)) } +emit_sllv_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, src2: GPR) { append_elem(instructions, inst_sllv_r_r_r(dst, src, src2)) } inst_srlv_r_r_r :: #force_inline proc "contextless" (dst: GPR, src: GPR, src2: GPR) -> Instruction { return Instruction{mnemonic = .SRLV, operand_count = 3, length = 4, ops = {op_gpr(dst), op_gpr(src), op_gpr(src2), {}}} } -emit_srlv_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, src2: GPR) { append(instructions, inst_srlv_r_r_r(dst, src, src2)) } +emit_srlv_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, src2: GPR) { append_elem(instructions, inst_srlv_r_r_r(dst, src, src2)) } inst_srav_r_r_r :: #force_inline proc "contextless" (dst: GPR, src: GPR, src2: GPR) -> Instruction { return Instruction{mnemonic = .SRAV, operand_count = 3, length = 4, ops = {op_gpr(dst), op_gpr(src), op_gpr(src2), {}}} } -emit_srav_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, src2: GPR) { append(instructions, inst_srav_r_r_r(dst, src, src2)) } +emit_srav_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, src2: GPR) { append_elem(instructions, inst_srav_r_r_r(dst, src, src2)) } inst_addi_r_r_i16 :: #force_inline proc "contextless" (dst: GPR, src: GPR, imm: i64) -> Instruction { return Instruction{mnemonic = .ADDI, operand_count = 3, length = 4, ops = {op_gpr(dst), op_gpr(src), op_imm(imm, 2), {}}} } -emit_addi_r_r_i16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, imm: i64) { append(instructions, inst_addi_r_r_i16(dst, src, imm)) } +emit_addi_r_r_i16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, imm: i64) { append_elem(instructions, inst_addi_r_r_i16(dst, src, imm)) } inst_addiu_r_r_i16 :: #force_inline proc "contextless" (dst: GPR, src: GPR, imm: i64) -> Instruction { return Instruction{mnemonic = .ADDIU, operand_count = 3, length = 4, ops = {op_gpr(dst), op_gpr(src), op_imm(imm, 2), {}}} } -emit_addiu_r_r_i16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, imm: i64) { append(instructions, inst_addiu_r_r_i16(dst, src, imm)) } +emit_addiu_r_r_i16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, imm: i64) { append_elem(instructions, inst_addiu_r_r_i16(dst, src, imm)) } inst_slti_r_r_i16 :: #force_inline proc "contextless" (dst: GPR, src: GPR, imm: i64) -> Instruction { return Instruction{mnemonic = .SLTI, operand_count = 3, length = 4, ops = {op_gpr(dst), op_gpr(src), op_imm(imm, 2), {}}} } -emit_slti_r_r_i16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, imm: i64) { append(instructions, inst_slti_r_r_i16(dst, src, imm)) } +emit_slti_r_r_i16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, imm: i64) { append_elem(instructions, inst_slti_r_r_i16(dst, src, imm)) } inst_sltiu_r_r_i16 :: #force_inline proc "contextless" (dst: GPR, src: GPR, imm: i64) -> Instruction { return Instruction{mnemonic = .SLTIU, operand_count = 3, length = 4, ops = {op_gpr(dst), op_gpr(src), op_imm(imm, 2), {}}} } -emit_sltiu_r_r_i16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, imm: i64) { append(instructions, inst_sltiu_r_r_i16(dst, src, imm)) } +emit_sltiu_r_r_i16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, imm: i64) { append_elem(instructions, inst_sltiu_r_r_i16(dst, src, imm)) } inst_andi_r_r_u16 :: #force_inline proc "contextless" (dst: GPR, src: GPR, imm: i64) -> Instruction { return Instruction{mnemonic = .ANDI, operand_count = 3, length = 4, ops = {op_gpr(dst), op_gpr(src), op_imm(imm, 2), {}}} } -emit_andi_r_r_u16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, imm: i64) { append(instructions, inst_andi_r_r_u16(dst, src, imm)) } +emit_andi_r_r_u16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, imm: i64) { append_elem(instructions, inst_andi_r_r_u16(dst, src, imm)) } inst_ori_r_r_u16 :: #force_inline proc "contextless" (dst: GPR, src: GPR, imm: i64) -> Instruction { return Instruction{mnemonic = .ORI, operand_count = 3, length = 4, ops = {op_gpr(dst), op_gpr(src), op_imm(imm, 2), {}}} } -emit_ori_r_r_u16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, imm: i64) { append(instructions, inst_ori_r_r_u16(dst, src, imm)) } +emit_ori_r_r_u16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, imm: i64) { append_elem(instructions, inst_ori_r_r_u16(dst, src, imm)) } inst_xori_r_r_u16 :: #force_inline proc "contextless" (dst: GPR, src: GPR, imm: i64) -> Instruction { return Instruction{mnemonic = .XORI, operand_count = 3, length = 4, ops = {op_gpr(dst), op_gpr(src), op_imm(imm, 2), {}}} } -emit_xori_r_r_u16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, imm: i64) { append(instructions, inst_xori_r_r_u16(dst, src, imm)) } +emit_xori_r_r_u16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, imm: i64) { append_elem(instructions, inst_xori_r_r_u16(dst, src, imm)) } inst_lui_r_u16 :: #force_inline proc "contextless" (dst: GPR, imm: i64) -> Instruction { return Instruction{mnemonic = .LUI, operand_count = 2, length = 4, ops = {op_gpr(dst), op_imm(imm, 2), {}, {}}} } -emit_lui_r_u16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, imm: i64) { append(instructions, inst_lui_r_u16(dst, imm)) } +emit_lui_r_u16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, imm: i64) { append_elem(instructions, inst_lui_r_u16(dst, imm)) } inst_beq_r_r_rel :: #force_inline proc "contextless" (dst: GPR, src: GPR, target: u32) -> Instruction { return Instruction{mnemonic = .BEQ, operand_count = 3, length = 4, ops = {op_gpr(dst), op_gpr(src), op_label(target), {}}} } -emit_beq_r_r_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, target: u32) { append(instructions, inst_beq_r_r_rel(dst, src, target)) } +emit_beq_r_r_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, target: u32) { append_elem(instructions, inst_beq_r_r_rel(dst, src, target)) } inst_bne_r_r_rel :: #force_inline proc "contextless" (dst: GPR, src: GPR, target: u32) -> Instruction { return Instruction{mnemonic = .BNE, operand_count = 3, length = 4, ops = {op_gpr(dst), op_gpr(src), op_label(target), {}}} } -emit_bne_r_r_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, target: u32) { append(instructions, inst_bne_r_r_rel(dst, src, target)) } +emit_bne_r_r_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, target: u32) { append_elem(instructions, inst_bne_r_r_rel(dst, src, target)) } inst_blez_r_rel :: #force_inline proc "contextless" (dst: GPR, target: u32) -> Instruction { return Instruction{mnemonic = .BLEZ, operand_count = 2, length = 4, ops = {op_gpr(dst), op_label(target), {}, {}}} } -emit_blez_r_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, target: u32) { append(instructions, inst_blez_r_rel(dst, target)) } +emit_blez_r_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, target: u32) { append_elem(instructions, inst_blez_r_rel(dst, target)) } inst_bgtz_r_rel :: #force_inline proc "contextless" (dst: GPR, target: u32) -> Instruction { return Instruction{mnemonic = .BGTZ, operand_count = 2, length = 4, ops = {op_gpr(dst), op_label(target), {}, {}}} } -emit_bgtz_r_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, target: u32) { append(instructions, inst_bgtz_r_rel(dst, target)) } +emit_bgtz_r_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, target: u32) { append_elem(instructions, inst_bgtz_r_rel(dst, target)) } inst_bltz_r_rel :: #force_inline proc "contextless" (dst: GPR, target: u32) -> Instruction { return Instruction{mnemonic = .BLTZ, operand_count = 2, length = 4, ops = {op_gpr(dst), op_label(target), {}, {}}} } -emit_bltz_r_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, target: u32) { append(instructions, inst_bltz_r_rel(dst, target)) } +emit_bltz_r_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, target: u32) { append_elem(instructions, inst_bltz_r_rel(dst, target)) } inst_bgez_r_rel :: #force_inline proc "contextless" (dst: GPR, target: u32) -> Instruction { return Instruction{mnemonic = .BGEZ, operand_count = 2, length = 4, ops = {op_gpr(dst), op_label(target), {}, {}}} } -emit_bgez_r_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, target: u32) { append(instructions, inst_bgez_r_rel(dst, target)) } +emit_bgez_r_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, target: u32) { append_elem(instructions, inst_bgez_r_rel(dst, target)) } inst_bltzal_r_rel :: #force_inline proc "contextless" (dst: GPR, target: u32) -> Instruction { return Instruction{mnemonic = .BLTZAL, operand_count = 2, length = 4, ops = {op_gpr(dst), op_label(target), {}, {}}} } -emit_bltzal_r_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, target: u32) { append(instructions, inst_bltzal_r_rel(dst, target)) } +emit_bltzal_r_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, target: u32) { append_elem(instructions, inst_bltzal_r_rel(dst, target)) } inst_bgezal_r_rel :: #force_inline proc "contextless" (dst: GPR, target: u32) -> Instruction { return Instruction{mnemonic = .BGEZAL, operand_count = 2, length = 4, ops = {op_gpr(dst), op_label(target), {}, {}}} } -emit_bgezal_r_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, target: u32) { append(instructions, inst_bgezal_r_rel(dst, target)) } +emit_bgezal_r_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, target: u32) { append_elem(instructions, inst_bgezal_r_rel(dst, target)) } inst_j_j :: #force_inline proc "contextless" (target: u32) -> Instruction { return Instruction{mnemonic = .J, operand_count = 1, length = 4, ops = {op_label(target), {}, {}, {}}} } -emit_j_j :: #force_inline proc(instructions: ^[dynamic]Instruction, target: u32) { append(instructions, inst_j_j(target)) } +emit_j_j :: #force_inline proc(instructions: ^[dynamic]Instruction, target: u32) { append_elem(instructions, inst_j_j(target)) } inst_jal_j :: #force_inline proc "contextless" (target: u32) -> Instruction { return Instruction{mnemonic = .JAL, operand_count = 1, length = 4, ops = {op_label(target), {}, {}, {}}} } -emit_jal_j :: #force_inline proc(instructions: ^[dynamic]Instruction, target: u32) { append(instructions, inst_jal_j(target)) } +emit_jal_j :: #force_inline proc(instructions: ^[dynamic]Instruction, target: u32) { append_elem(instructions, inst_jal_j(target)) } inst_jr_r :: #force_inline proc "contextless" (dst: GPR) -> Instruction { return Instruction{mnemonic = .JR, operand_count = 1, length = 4, ops = {op_gpr(dst), {}, {}, {}}} } -emit_jr_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR) { append(instructions, inst_jr_r(dst)) } +emit_jr_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR) { append_elem(instructions, inst_jr_r(dst)) } inst_jalr_r_r :: #force_inline proc "contextless" (dst: GPR, src: GPR) -> Instruction { return Instruction{mnemonic = .JALR, operand_count = 2, length = 4, ops = {op_gpr(dst), op_gpr(src), {}, {}}} } -emit_jalr_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR) { append(instructions, inst_jalr_r_r(dst, src)) } +emit_jalr_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR) { append_elem(instructions, inst_jalr_r_r(dst, src)) } inst_lb_r_m :: #force_inline proc "contextless" (dst: GPR, mem: Memory) -> Instruction { return Instruction{mnemonic = .LB, operand_count = 2, length = 4, ops = {op_gpr(dst), op_mem(mem, 4), {}, {}}} } -emit_lb_r_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, mem: Memory) { append(instructions, inst_lb_r_m(dst, mem)) } +emit_lb_r_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, mem: Memory) { append_elem(instructions, inst_lb_r_m(dst, mem)) } inst_lh_r_m :: #force_inline proc "contextless" (dst: GPR, mem: Memory) -> Instruction { return Instruction{mnemonic = .LH, operand_count = 2, length = 4, ops = {op_gpr(dst), op_mem(mem, 4), {}, {}}} } -emit_lh_r_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, mem: Memory) { append(instructions, inst_lh_r_m(dst, mem)) } +emit_lh_r_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, mem: Memory) { append_elem(instructions, inst_lh_r_m(dst, mem)) } inst_lw_r_m :: #force_inline proc "contextless" (dst: GPR, mem: Memory) -> Instruction { return Instruction{mnemonic = .LW, operand_count = 2, length = 4, ops = {op_gpr(dst), op_mem(mem, 4), {}, {}}} } -emit_lw_r_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, mem: Memory) { append(instructions, inst_lw_r_m(dst, mem)) } +emit_lw_r_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, mem: Memory) { append_elem(instructions, inst_lw_r_m(dst, mem)) } inst_lbu_r_m :: #force_inline proc "contextless" (dst: GPR, mem: Memory) -> Instruction { return Instruction{mnemonic = .LBU, operand_count = 2, length = 4, ops = {op_gpr(dst), op_mem(mem, 4), {}, {}}} } -emit_lbu_r_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, mem: Memory) { append(instructions, inst_lbu_r_m(dst, mem)) } +emit_lbu_r_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, mem: Memory) { append_elem(instructions, inst_lbu_r_m(dst, mem)) } inst_lhu_r_m :: #force_inline proc "contextless" (dst: GPR, mem: Memory) -> Instruction { return Instruction{mnemonic = .LHU, operand_count = 2, length = 4, ops = {op_gpr(dst), op_mem(mem, 4), {}, {}}} } -emit_lhu_r_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, mem: Memory) { append(instructions, inst_lhu_r_m(dst, mem)) } +emit_lhu_r_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, mem: Memory) { append_elem(instructions, inst_lhu_r_m(dst, mem)) } inst_lwl_r_m :: #force_inline proc "contextless" (dst: GPR, mem: Memory) -> Instruction { return Instruction{mnemonic = .LWL, operand_count = 2, length = 4, ops = {op_gpr(dst), op_mem(mem, 4), {}, {}}} } -emit_lwl_r_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, mem: Memory) { append(instructions, inst_lwl_r_m(dst, mem)) } +emit_lwl_r_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, mem: Memory) { append_elem(instructions, inst_lwl_r_m(dst, mem)) } inst_lwr_r_m :: #force_inline proc "contextless" (dst: GPR, mem: Memory) -> Instruction { return Instruction{mnemonic = .LWR, operand_count = 2, length = 4, ops = {op_gpr(dst), op_mem(mem, 4), {}, {}}} } -emit_lwr_r_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, mem: Memory) { append(instructions, inst_lwr_r_m(dst, mem)) } +emit_lwr_r_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, mem: Memory) { append_elem(instructions, inst_lwr_r_m(dst, mem)) } inst_sb_r_m :: #force_inline proc "contextless" (dst: GPR, mem: Memory) -> Instruction { return Instruction{mnemonic = .SB, operand_count = 2, length = 4, ops = {op_gpr(dst), op_mem(mem, 4), {}, {}}} } -emit_sb_r_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, mem: Memory) { append(instructions, inst_sb_r_m(dst, mem)) } +emit_sb_r_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, mem: Memory) { append_elem(instructions, inst_sb_r_m(dst, mem)) } inst_sh_r_m :: #force_inline proc "contextless" (dst: GPR, mem: Memory) -> Instruction { return Instruction{mnemonic = .SH, operand_count = 2, length = 4, ops = {op_gpr(dst), op_mem(mem, 4), {}, {}}} } -emit_sh_r_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, mem: Memory) { append(instructions, inst_sh_r_m(dst, mem)) } +emit_sh_r_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, mem: Memory) { append_elem(instructions, inst_sh_r_m(dst, mem)) } inst_sw_r_m :: #force_inline proc "contextless" (dst: GPR, mem: Memory) -> Instruction { return Instruction{mnemonic = .SW, operand_count = 2, length = 4, ops = {op_gpr(dst), op_mem(mem, 4), {}, {}}} } -emit_sw_r_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, mem: Memory) { append(instructions, inst_sw_r_m(dst, mem)) } +emit_sw_r_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, mem: Memory) { append_elem(instructions, inst_sw_r_m(dst, mem)) } inst_swl_r_m :: #force_inline proc "contextless" (dst: GPR, mem: Memory) -> Instruction { return Instruction{mnemonic = .SWL, operand_count = 2, length = 4, ops = {op_gpr(dst), op_mem(mem, 4), {}, {}}} } -emit_swl_r_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, mem: Memory) { append(instructions, inst_swl_r_m(dst, mem)) } +emit_swl_r_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, mem: Memory) { append_elem(instructions, inst_swl_r_m(dst, mem)) } inst_swr_r_m :: #force_inline proc "contextless" (dst: GPR, mem: Memory) -> Instruction { return Instruction{mnemonic = .SWR, operand_count = 2, length = 4, ops = {op_gpr(dst), op_mem(mem, 4), {}, {}}} } -emit_swr_r_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, mem: Memory) { append(instructions, inst_swr_r_m(dst, mem)) } +emit_swr_r_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, mem: Memory) { append_elem(instructions, inst_swr_r_m(dst, mem)) } inst_syscall_i20 :: #force_inline proc "contextless" (imm: i64) -> Instruction { return Instruction{mnemonic = .SYSCALL, operand_count = 1, length = 4, ops = {op_imm(imm, 4), {}, {}, {}}} } -emit_syscall_i20 :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64) { append(instructions, inst_syscall_i20(imm)) } +emit_syscall_i20 :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64) { append_elem(instructions, inst_syscall_i20(imm)) } inst_break_i20 :: #force_inline proc "contextless" (imm: i64) -> Instruction { return Instruction{mnemonic = .BREAK, operand_count = 1, length = 4, ops = {op_imm(imm, 4), {}, {}, {}}} } -emit_break_i20 :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64) { append(instructions, inst_break_i20(imm)) } +emit_break_i20 :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64) { append_elem(instructions, inst_break_i20(imm)) } inst_nop_none :: #force_inline proc "contextless" () -> Instruction { return Instruction{mnemonic = .NOP, operand_count = 0, length = 4, ops = {{}, {}, {}, {}}} } -emit_nop_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_nop_none()) } +emit_nop_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_nop_none()) } inst_ll_r_m :: #force_inline proc "contextless" (dst: GPR, mem: Memory) -> Instruction { return Instruction{mnemonic = .LL, operand_count = 2, length = 4, ops = {op_gpr(dst), op_mem(mem, 4), {}, {}}} } -emit_ll_r_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, mem: Memory) { append(instructions, inst_ll_r_m(dst, mem)) } +emit_ll_r_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, mem: Memory) { append_elem(instructions, inst_ll_r_m(dst, mem)) } inst_sc_r_m :: #force_inline proc "contextless" (dst: GPR, mem: Memory) -> Instruction { return Instruction{mnemonic = .SC, operand_count = 2, length = 4, ops = {op_gpr(dst), op_mem(mem, 4), {}, {}}} } -emit_sc_r_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, mem: Memory) { append(instructions, inst_sc_r_m(dst, mem)) } +emit_sc_r_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, mem: Memory) { append_elem(instructions, inst_sc_r_m(dst, mem)) } inst_sync_i5 :: #force_inline proc "contextless" (imm: i64) -> Instruction { return Instruction{mnemonic = .SYNC, operand_count = 1, length = 4, ops = {op_imm(imm, 1), {}, {}, {}}} } -emit_sync_i5 :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64) { append(instructions, inst_sync_i5(imm)) } +emit_sync_i5 :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64) { append_elem(instructions, inst_sync_i5(imm)) } inst_tgei_r_i16 :: #force_inline proc "contextless" (dst: GPR, imm: i64) -> Instruction { return Instruction{mnemonic = .TGEI, operand_count = 2, length = 4, ops = {op_gpr(dst), op_imm(imm, 2), {}, {}}} } -emit_tgei_r_i16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, imm: i64) { append(instructions, inst_tgei_r_i16(dst, imm)) } +emit_tgei_r_i16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, imm: i64) { append_elem(instructions, inst_tgei_r_i16(dst, imm)) } inst_tgeiu_r_i16 :: #force_inline proc "contextless" (dst: GPR, imm: i64) -> Instruction { return Instruction{mnemonic = .TGEIU, operand_count = 2, length = 4, ops = {op_gpr(dst), op_imm(imm, 2), {}, {}}} } -emit_tgeiu_r_i16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, imm: i64) { append(instructions, inst_tgeiu_r_i16(dst, imm)) } +emit_tgeiu_r_i16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, imm: i64) { append_elem(instructions, inst_tgeiu_r_i16(dst, imm)) } inst_tlti_r_i16 :: #force_inline proc "contextless" (dst: GPR, imm: i64) -> Instruction { return Instruction{mnemonic = .TLTI, operand_count = 2, length = 4, ops = {op_gpr(dst), op_imm(imm, 2), {}, {}}} } -emit_tlti_r_i16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, imm: i64) { append(instructions, inst_tlti_r_i16(dst, imm)) } +emit_tlti_r_i16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, imm: i64) { append_elem(instructions, inst_tlti_r_i16(dst, imm)) } inst_tltiu_r_i16 :: #force_inline proc "contextless" (dst: GPR, imm: i64) -> Instruction { return Instruction{mnemonic = .TLTIU, operand_count = 2, length = 4, ops = {op_gpr(dst), op_imm(imm, 2), {}, {}}} } -emit_tltiu_r_i16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, imm: i64) { append(instructions, inst_tltiu_r_i16(dst, imm)) } +emit_tltiu_r_i16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, imm: i64) { append_elem(instructions, inst_tltiu_r_i16(dst, imm)) } inst_teqi_r_i16 :: #force_inline proc "contextless" (dst: GPR, imm: i64) -> Instruction { return Instruction{mnemonic = .TEQI, operand_count = 2, length = 4, ops = {op_gpr(dst), op_imm(imm, 2), {}, {}}} } -emit_teqi_r_i16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, imm: i64) { append(instructions, inst_teqi_r_i16(dst, imm)) } +emit_teqi_r_i16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, imm: i64) { append_elem(instructions, inst_teqi_r_i16(dst, imm)) } inst_tnei_r_i16 :: #force_inline proc "contextless" (dst: GPR, imm: i64) -> Instruction { return Instruction{mnemonic = .TNEI, operand_count = 2, length = 4, ops = {op_gpr(dst), op_imm(imm, 2), {}, {}}} } -emit_tnei_r_i16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, imm: i64) { append(instructions, inst_tnei_r_i16(dst, imm)) } +emit_tnei_r_i16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, imm: i64) { append_elem(instructions, inst_tnei_r_i16(dst, imm)) } inst_tge_r_r :: #force_inline proc "contextless" (dst: GPR, src: GPR) -> Instruction { return Instruction{mnemonic = .TGE, operand_count = 2, length = 4, ops = {op_gpr(dst), op_gpr(src), {}, {}}} } -emit_tge_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR) { append(instructions, inst_tge_r_r(dst, src)) } +emit_tge_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR) { append_elem(instructions, inst_tge_r_r(dst, src)) } inst_tgeu_r_r :: #force_inline proc "contextless" (dst: GPR, src: GPR) -> Instruction { return Instruction{mnemonic = .TGEU, operand_count = 2, length = 4, ops = {op_gpr(dst), op_gpr(src), {}, {}}} } -emit_tgeu_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR) { append(instructions, inst_tgeu_r_r(dst, src)) } +emit_tgeu_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR) { append_elem(instructions, inst_tgeu_r_r(dst, src)) } inst_tlt_r_r :: #force_inline proc "contextless" (dst: GPR, src: GPR) -> Instruction { return Instruction{mnemonic = .TLT, operand_count = 2, length = 4, ops = {op_gpr(dst), op_gpr(src), {}, {}}} } -emit_tlt_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR) { append(instructions, inst_tlt_r_r(dst, src)) } +emit_tlt_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR) { append_elem(instructions, inst_tlt_r_r(dst, src)) } inst_tltu_r_r :: #force_inline proc "contextless" (dst: GPR, src: GPR) -> Instruction { return Instruction{mnemonic = .TLTU, operand_count = 2, length = 4, ops = {op_gpr(dst), op_gpr(src), {}, {}}} } -emit_tltu_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR) { append(instructions, inst_tltu_r_r(dst, src)) } +emit_tltu_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR) { append_elem(instructions, inst_tltu_r_r(dst, src)) } inst_teq_r_r :: #force_inline proc "contextless" (dst: GPR, src: GPR) -> Instruction { return Instruction{mnemonic = .TEQ, operand_count = 2, length = 4, ops = {op_gpr(dst), op_gpr(src), {}, {}}} } -emit_teq_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR) { append(instructions, inst_teq_r_r(dst, src)) } +emit_teq_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR) { append_elem(instructions, inst_teq_r_r(dst, src)) } inst_tne_r_r :: #force_inline proc "contextless" (dst: GPR, src: GPR) -> Instruction { return Instruction{mnemonic = .TNE, operand_count = 2, length = 4, ops = {op_gpr(dst), op_gpr(src), {}, {}}} } -emit_tne_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR) { append(instructions, inst_tne_r_r(dst, src)) } +emit_tne_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR) { append_elem(instructions, inst_tne_r_r(dst, src)) } inst_beql_r_r_rel :: #force_inline proc "contextless" (dst: GPR, src: GPR, target: u32) -> Instruction { return Instruction{mnemonic = .BEQL, operand_count = 3, length = 4, ops = {op_gpr(dst), op_gpr(src), op_label(target), {}}} } -emit_beql_r_r_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, target: u32) { append(instructions, inst_beql_r_r_rel(dst, src, target)) } +emit_beql_r_r_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, target: u32) { append_elem(instructions, inst_beql_r_r_rel(dst, src, target)) } inst_bnel_r_r_rel :: #force_inline proc "contextless" (dst: GPR, src: GPR, target: u32) -> Instruction { return Instruction{mnemonic = .BNEL, operand_count = 3, length = 4, ops = {op_gpr(dst), op_gpr(src), op_label(target), {}}} } -emit_bnel_r_r_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, target: u32) { append(instructions, inst_bnel_r_r_rel(dst, src, target)) } +emit_bnel_r_r_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, target: u32) { append_elem(instructions, inst_bnel_r_r_rel(dst, src, target)) } inst_blezl_r_rel :: #force_inline proc "contextless" (dst: GPR, target: u32) -> Instruction { return Instruction{mnemonic = .BLEZL, operand_count = 2, length = 4, ops = {op_gpr(dst), op_label(target), {}, {}}} } -emit_blezl_r_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, target: u32) { append(instructions, inst_blezl_r_rel(dst, target)) } +emit_blezl_r_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, target: u32) { append_elem(instructions, inst_blezl_r_rel(dst, target)) } inst_bgtzl_r_rel :: #force_inline proc "contextless" (dst: GPR, target: u32) -> Instruction { return Instruction{mnemonic = .BGTZL, operand_count = 2, length = 4, ops = {op_gpr(dst), op_label(target), {}, {}}} } -emit_bgtzl_r_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, target: u32) { append(instructions, inst_bgtzl_r_rel(dst, target)) } +emit_bgtzl_r_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, target: u32) { append_elem(instructions, inst_bgtzl_r_rel(dst, target)) } inst_bltzl_r_rel :: #force_inline proc "contextless" (dst: GPR, target: u32) -> Instruction { return Instruction{mnemonic = .BLTZL, operand_count = 2, length = 4, ops = {op_gpr(dst), op_label(target), {}, {}}} } -emit_bltzl_r_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, target: u32) { append(instructions, inst_bltzl_r_rel(dst, target)) } +emit_bltzl_r_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, target: u32) { append_elem(instructions, inst_bltzl_r_rel(dst, target)) } inst_bgezl_r_rel :: #force_inline proc "contextless" (dst: GPR, target: u32) -> Instruction { return Instruction{mnemonic = .BGEZL, operand_count = 2, length = 4, ops = {op_gpr(dst), op_label(target), {}, {}}} } -emit_bgezl_r_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, target: u32) { append(instructions, inst_bgezl_r_rel(dst, target)) } +emit_bgezl_r_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, target: u32) { append_elem(instructions, inst_bgezl_r_rel(dst, target)) } inst_bltzall_r_rel :: #force_inline proc "contextless" (dst: GPR, target: u32) -> Instruction { return Instruction{mnemonic = .BLTZALL, operand_count = 2, length = 4, ops = {op_gpr(dst), op_label(target), {}, {}}} } -emit_bltzall_r_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, target: u32) { append(instructions, inst_bltzall_r_rel(dst, target)) } +emit_bltzall_r_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, target: u32) { append_elem(instructions, inst_bltzall_r_rel(dst, target)) } inst_bgezall_r_rel :: #force_inline proc "contextless" (dst: GPR, target: u32) -> Instruction { return Instruction{mnemonic = .BGEZALL, operand_count = 2, length = 4, ops = {op_gpr(dst), op_label(target), {}, {}}} } -emit_bgezall_r_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, target: u32) { append(instructions, inst_bgezall_r_rel(dst, target)) } +emit_bgezall_r_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, target: u32) { append_elem(instructions, inst_bgezall_r_rel(dst, target)) } inst_dadd_r_r_r :: #force_inline proc "contextless" (dst: GPR, src: GPR, src2: GPR) -> Instruction { return Instruction{mnemonic = .DADD, operand_count = 3, length = 4, ops = {op_gpr(dst), op_gpr(src), op_gpr(src2), {}}} } -emit_dadd_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, src2: GPR) { append(instructions, inst_dadd_r_r_r(dst, src, src2)) } +emit_dadd_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, src2: GPR) { append_elem(instructions, inst_dadd_r_r_r(dst, src, src2)) } inst_daddu_r_r_r :: #force_inline proc "contextless" (dst: GPR, src: GPR, src2: GPR) -> Instruction { return Instruction{mnemonic = .DADDU, operand_count = 3, length = 4, ops = {op_gpr(dst), op_gpr(src), op_gpr(src2), {}}} } -emit_daddu_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, src2: GPR) { append(instructions, inst_daddu_r_r_r(dst, src, src2)) } +emit_daddu_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, src2: GPR) { append_elem(instructions, inst_daddu_r_r_r(dst, src, src2)) } inst_dsub_r_r_r :: #force_inline proc "contextless" (dst: GPR, src: GPR, src2: GPR) -> Instruction { return Instruction{mnemonic = .DSUB, operand_count = 3, length = 4, ops = {op_gpr(dst), op_gpr(src), op_gpr(src2), {}}} } -emit_dsub_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, src2: GPR) { append(instructions, inst_dsub_r_r_r(dst, src, src2)) } +emit_dsub_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, src2: GPR) { append_elem(instructions, inst_dsub_r_r_r(dst, src, src2)) } inst_dsubu_r_r_r :: #force_inline proc "contextless" (dst: GPR, src: GPR, src2: GPR) -> Instruction { return Instruction{mnemonic = .DSUBU, operand_count = 3, length = 4, ops = {op_gpr(dst), op_gpr(src), op_gpr(src2), {}}} } -emit_dsubu_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, src2: GPR) { append(instructions, inst_dsubu_r_r_r(dst, src, src2)) } +emit_dsubu_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, src2: GPR) { append_elem(instructions, inst_dsubu_r_r_r(dst, src, src2)) } inst_daddi_r_r_i16 :: #force_inline proc "contextless" (dst: GPR, src: GPR, imm: i64) -> Instruction { return Instruction{mnemonic = .DADDI, operand_count = 3, length = 4, ops = {op_gpr(dst), op_gpr(src), op_imm(imm, 2), {}}} } -emit_daddi_r_r_i16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, imm: i64) { append(instructions, inst_daddi_r_r_i16(dst, src, imm)) } +emit_daddi_r_r_i16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, imm: i64) { append_elem(instructions, inst_daddi_r_r_i16(dst, src, imm)) } inst_daddiu_r_r_i16 :: #force_inline proc "contextless" (dst: GPR, src: GPR, imm: i64) -> Instruction { return Instruction{mnemonic = .DADDIU, operand_count = 3, length = 4, ops = {op_gpr(dst), op_gpr(src), op_imm(imm, 2), {}}} } -emit_daddiu_r_r_i16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, imm: i64) { append(instructions, inst_daddiu_r_r_i16(dst, src, imm)) } +emit_daddiu_r_r_i16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, imm: i64) { append_elem(instructions, inst_daddiu_r_r_i16(dst, src, imm)) } inst_dmult_r_r :: #force_inline proc "contextless" (dst: GPR, src: GPR) -> Instruction { return Instruction{mnemonic = .DMULT, operand_count = 2, length = 4, ops = {op_gpr(dst), op_gpr(src), {}, {}}} } -emit_dmult_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR) { append(instructions, inst_dmult_r_r(dst, src)) } +emit_dmult_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR) { append_elem(instructions, inst_dmult_r_r(dst, src)) } inst_dmultu_r_r :: #force_inline proc "contextless" (dst: GPR, src: GPR) -> Instruction { return Instruction{mnemonic = .DMULTU, operand_count = 2, length = 4, ops = {op_gpr(dst), op_gpr(src), {}, {}}} } -emit_dmultu_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR) { append(instructions, inst_dmultu_r_r(dst, src)) } +emit_dmultu_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR) { append_elem(instructions, inst_dmultu_r_r(dst, src)) } inst_ddiv_r_r :: #force_inline proc "contextless" (dst: GPR, src: GPR) -> Instruction { return Instruction{mnemonic = .DDIV, operand_count = 2, length = 4, ops = {op_gpr(dst), op_gpr(src), {}, {}}} } inst_ddiv_r_r_r :: #force_inline proc "contextless" (dst: GPR, src: GPR, src2: GPR) -> Instruction { return Instruction{mnemonic = .DDIV, operand_count = 3, length = 4, ops = {op_gpr(dst), op_gpr(src), op_gpr(src2), {}}} } -emit_ddiv_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR) { append(instructions, inst_ddiv_r_r(dst, src)) } -emit_ddiv_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, src2: GPR) { append(instructions, inst_ddiv_r_r_r(dst, src, src2)) } +emit_ddiv_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR) { append_elem(instructions, inst_ddiv_r_r(dst, src)) } +emit_ddiv_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, src2: GPR) { append_elem(instructions, inst_ddiv_r_r_r(dst, src, src2)) } inst_ddivu_r_r :: #force_inline proc "contextless" (dst: GPR, src: GPR) -> Instruction { return Instruction{mnemonic = .DDIVU, operand_count = 2, length = 4, ops = {op_gpr(dst), op_gpr(src), {}, {}}} } inst_ddivu_r_r_r :: #force_inline proc "contextless" (dst: GPR, src: GPR, src2: GPR) -> Instruction { return Instruction{mnemonic = .DDIVU, operand_count = 3, length = 4, ops = {op_gpr(dst), op_gpr(src), op_gpr(src2), {}}} } -emit_ddivu_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR) { append(instructions, inst_ddivu_r_r(dst, src)) } -emit_ddivu_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, src2: GPR) { append(instructions, inst_ddivu_r_r_r(dst, src, src2)) } +emit_ddivu_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR) { append_elem(instructions, inst_ddivu_r_r(dst, src)) } +emit_ddivu_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, src2: GPR) { append_elem(instructions, inst_ddivu_r_r_r(dst, src, src2)) } inst_dsll_r_r_i5 :: #force_inline proc "contextless" (dst: GPR, src: GPR, imm: i64) -> Instruction { return Instruction{mnemonic = .DSLL, operand_count = 3, length = 4, ops = {op_gpr(dst), op_gpr(src), op_imm(imm, 1), {}}} } -emit_dsll_r_r_i5 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, imm: i64) { append(instructions, inst_dsll_r_r_i5(dst, src, imm)) } +emit_dsll_r_r_i5 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, imm: i64) { append_elem(instructions, inst_dsll_r_r_i5(dst, src, imm)) } inst_dsrl_r_r_i5 :: #force_inline proc "contextless" (dst: GPR, src: GPR, imm: i64) -> Instruction { return Instruction{mnemonic = .DSRL, operand_count = 3, length = 4, ops = {op_gpr(dst), op_gpr(src), op_imm(imm, 1), {}}} } -emit_dsrl_r_r_i5 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, imm: i64) { append(instructions, inst_dsrl_r_r_i5(dst, src, imm)) } +emit_dsrl_r_r_i5 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, imm: i64) { append_elem(instructions, inst_dsrl_r_r_i5(dst, src, imm)) } inst_dsra_r_r_i5 :: #force_inline proc "contextless" (dst: GPR, src: GPR, imm: i64) -> Instruction { return Instruction{mnemonic = .DSRA, operand_count = 3, length = 4, ops = {op_gpr(dst), op_gpr(src), op_imm(imm, 1), {}}} } -emit_dsra_r_r_i5 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, imm: i64) { append(instructions, inst_dsra_r_r_i5(dst, src, imm)) } +emit_dsra_r_r_i5 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, imm: i64) { append_elem(instructions, inst_dsra_r_r_i5(dst, src, imm)) } inst_dsllv_r_r_r :: #force_inline proc "contextless" (dst: GPR, src: GPR, src2: GPR) -> Instruction { return Instruction{mnemonic = .DSLLV, operand_count = 3, length = 4, ops = {op_gpr(dst), op_gpr(src), op_gpr(src2), {}}} } -emit_dsllv_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, src2: GPR) { append(instructions, inst_dsllv_r_r_r(dst, src, src2)) } +emit_dsllv_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, src2: GPR) { append_elem(instructions, inst_dsllv_r_r_r(dst, src, src2)) } inst_dsrlv_r_r_r :: #force_inline proc "contextless" (dst: GPR, src: GPR, src2: GPR) -> Instruction { return Instruction{mnemonic = .DSRLV, operand_count = 3, length = 4, ops = {op_gpr(dst), op_gpr(src), op_gpr(src2), {}}} } -emit_dsrlv_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, src2: GPR) { append(instructions, inst_dsrlv_r_r_r(dst, src, src2)) } +emit_dsrlv_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, src2: GPR) { append_elem(instructions, inst_dsrlv_r_r_r(dst, src, src2)) } inst_dsrav_r_r_r :: #force_inline proc "contextless" (dst: GPR, src: GPR, src2: GPR) -> Instruction { return Instruction{mnemonic = .DSRAV, operand_count = 3, length = 4, ops = {op_gpr(dst), op_gpr(src), op_gpr(src2), {}}} } -emit_dsrav_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, src2: GPR) { append(instructions, inst_dsrav_r_r_r(dst, src, src2)) } +emit_dsrav_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, src2: GPR) { append_elem(instructions, inst_dsrav_r_r_r(dst, src, src2)) } inst_dsll32_r_r_i5 :: #force_inline proc "contextless" (dst: GPR, src: GPR, imm: i64) -> Instruction { return Instruction{mnemonic = .DSLL32, operand_count = 3, length = 4, ops = {op_gpr(dst), op_gpr(src), op_imm(imm, 1), {}}} } -emit_dsll32_r_r_i5 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, imm: i64) { append(instructions, inst_dsll32_r_r_i5(dst, src, imm)) } +emit_dsll32_r_r_i5 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, imm: i64) { append_elem(instructions, inst_dsll32_r_r_i5(dst, src, imm)) } inst_dsrl32_r_r_i5 :: #force_inline proc "contextless" (dst: GPR, src: GPR, imm: i64) -> Instruction { return Instruction{mnemonic = .DSRL32, operand_count = 3, length = 4, ops = {op_gpr(dst), op_gpr(src), op_imm(imm, 1), {}}} } -emit_dsrl32_r_r_i5 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, imm: i64) { append(instructions, inst_dsrl32_r_r_i5(dst, src, imm)) } +emit_dsrl32_r_r_i5 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, imm: i64) { append_elem(instructions, inst_dsrl32_r_r_i5(dst, src, imm)) } inst_dsra32_r_r_i5 :: #force_inline proc "contextless" (dst: GPR, src: GPR, imm: i64) -> Instruction { return Instruction{mnemonic = .DSRA32, operand_count = 3, length = 4, ops = {op_gpr(dst), op_gpr(src), op_imm(imm, 1), {}}} } -emit_dsra32_r_r_i5 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, imm: i64) { append(instructions, inst_dsra32_r_r_i5(dst, src, imm)) } +emit_dsra32_r_r_i5 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, imm: i64) { append_elem(instructions, inst_dsra32_r_r_i5(dst, src, imm)) } inst_ld_r_m :: #force_inline proc "contextless" (dst: GPR, mem: Memory) -> Instruction { return Instruction{mnemonic = .LD, operand_count = 2, length = 4, ops = {op_gpr(dst), op_mem(mem, 4), {}, {}}} } -emit_ld_r_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, mem: Memory) { append(instructions, inst_ld_r_m(dst, mem)) } +emit_ld_r_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, mem: Memory) { append_elem(instructions, inst_ld_r_m(dst, mem)) } inst_ldl_r_m :: #force_inline proc "contextless" (dst: GPR, mem: Memory) -> Instruction { return Instruction{mnemonic = .LDL, operand_count = 2, length = 4, ops = {op_gpr(dst), op_mem(mem, 4), {}, {}}} } -emit_ldl_r_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, mem: Memory) { append(instructions, inst_ldl_r_m(dst, mem)) } +emit_ldl_r_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, mem: Memory) { append_elem(instructions, inst_ldl_r_m(dst, mem)) } inst_ldr_r_m :: #force_inline proc "contextless" (dst: GPR, mem: Memory) -> Instruction { return Instruction{mnemonic = .LDR, operand_count = 2, length = 4, ops = {op_gpr(dst), op_mem(mem, 4), {}, {}}} } -emit_ldr_r_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, mem: Memory) { append(instructions, inst_ldr_r_m(dst, mem)) } +emit_ldr_r_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, mem: Memory) { append_elem(instructions, inst_ldr_r_m(dst, mem)) } inst_lwu_r_m :: #force_inline proc "contextless" (dst: GPR, mem: Memory) -> Instruction { return Instruction{mnemonic = .LWU, operand_count = 2, length = 4, ops = {op_gpr(dst), op_mem(mem, 4), {}, {}}} } -emit_lwu_r_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, mem: Memory) { append(instructions, inst_lwu_r_m(dst, mem)) } +emit_lwu_r_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, mem: Memory) { append_elem(instructions, inst_lwu_r_m(dst, mem)) } inst_sd_r_m :: #force_inline proc "contextless" (dst: GPR, mem: Memory) -> Instruction { return Instruction{mnemonic = .SD, operand_count = 2, length = 4, ops = {op_gpr(dst), op_mem(mem, 4), {}, {}}} } -emit_sd_r_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, mem: Memory) { append(instructions, inst_sd_r_m(dst, mem)) } +emit_sd_r_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, mem: Memory) { append_elem(instructions, inst_sd_r_m(dst, mem)) } inst_sdl_r_m :: #force_inline proc "contextless" (dst: GPR, mem: Memory) -> Instruction { return Instruction{mnemonic = .SDL, operand_count = 2, length = 4, ops = {op_gpr(dst), op_mem(mem, 4), {}, {}}} } -emit_sdl_r_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, mem: Memory) { append(instructions, inst_sdl_r_m(dst, mem)) } +emit_sdl_r_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, mem: Memory) { append_elem(instructions, inst_sdl_r_m(dst, mem)) } inst_sdr_r_m :: #force_inline proc "contextless" (dst: GPR, mem: Memory) -> Instruction { return Instruction{mnemonic = .SDR, operand_count = 2, length = 4, ops = {op_gpr(dst), op_mem(mem, 4), {}, {}}} } -emit_sdr_r_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, mem: Memory) { append(instructions, inst_sdr_r_m(dst, mem)) } +emit_sdr_r_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, mem: Memory) { append_elem(instructions, inst_sdr_r_m(dst, mem)) } inst_lld_r_m :: #force_inline proc "contextless" (dst: GPR, mem: Memory) -> Instruction { return Instruction{mnemonic = .LLD, operand_count = 2, length = 4, ops = {op_gpr(dst), op_mem(mem, 4), {}, {}}} } -emit_lld_r_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, mem: Memory) { append(instructions, inst_lld_r_m(dst, mem)) } +emit_lld_r_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, mem: Memory) { append_elem(instructions, inst_lld_r_m(dst, mem)) } inst_scd_r_m :: #force_inline proc "contextless" (dst: GPR, mem: Memory) -> Instruction { return Instruction{mnemonic = .SCD, operand_count = 2, length = 4, ops = {op_gpr(dst), op_mem(mem, 4), {}, {}}} } -emit_scd_r_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, mem: Memory) { append(instructions, inst_scd_r_m(dst, mem)) } +emit_scd_r_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, mem: Memory) { append_elem(instructions, inst_scd_r_m(dst, mem)) } inst_movn_r_r_r :: #force_inline proc "contextless" (dst: GPR, src: GPR, src2: GPR) -> Instruction { return Instruction{mnemonic = .MOVN, operand_count = 3, length = 4, ops = {op_gpr(dst), op_gpr(src), op_gpr(src2), {}}} } -emit_movn_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, src2: GPR) { append(instructions, inst_movn_r_r_r(dst, src, src2)) } +emit_movn_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, src2: GPR) { append_elem(instructions, inst_movn_r_r_r(dst, src, src2)) } inst_movz_r_r_r :: #force_inline proc "contextless" (dst: GPR, src: GPR, src2: GPR) -> Instruction { return Instruction{mnemonic = .MOVZ, operand_count = 3, length = 4, ops = {op_gpr(dst), op_gpr(src), op_gpr(src2), {}}} } -emit_movz_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, src2: GPR) { append(instructions, inst_movz_r_r_r(dst, src, src2)) } +emit_movz_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, src2: GPR) { append_elem(instructions, inst_movz_r_r_r(dst, src, src2)) } inst_movf_r_r_cc :: #force_inline proc "contextless" (dst: GPR, src: GPR, imm: i64) -> Instruction { return Instruction{mnemonic = .MOVF, operand_count = 3, length = 4, ops = {op_gpr(dst), op_gpr(src), op_imm(imm, 1), {}}} } -emit_movf_r_r_cc :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, imm: i64) { append(instructions, inst_movf_r_r_cc(dst, src, imm)) } +emit_movf_r_r_cc :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, imm: i64) { append_elem(instructions, inst_movf_r_r_cc(dst, src, imm)) } inst_movt_r_r_cc :: #force_inline proc "contextless" (dst: GPR, src: GPR, imm: i64) -> Instruction { return Instruction{mnemonic = .MOVT, operand_count = 3, length = 4, ops = {op_gpr(dst), op_gpr(src), op_imm(imm, 1), {}}} } -emit_movt_r_r_cc :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, imm: i64) { append(instructions, inst_movt_r_r_cc(dst, src, imm)) } +emit_movt_r_r_cc :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, imm: i64) { append_elem(instructions, inst_movt_r_r_cc(dst, src, imm)) } inst_pref_i5_m :: #force_inline proc "contextless" (imm: i64, mem: Memory) -> Instruction { return Instruction{mnemonic = .PREF, operand_count = 2, length = 4, ops = {op_imm(imm, 1), op_mem(mem, 4), {}, {}}} } -emit_pref_i5_m :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, mem: Memory) { append(instructions, inst_pref_i5_m(imm, mem)) } +emit_pref_i5_m :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, mem: Memory) { append_elem(instructions, inst_pref_i5_m(imm, mem)) } inst_prefx_i5_r_r :: #force_inline proc "contextless" (imm: i64, dst: GPR, src: GPR) -> Instruction { return Instruction{mnemonic = .PREFX, operand_count = 3, length = 4, ops = {op_imm(imm, 1), op_gpr(dst), op_gpr(src), {}}} } -emit_prefx_i5_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, dst: GPR, src: GPR) { append(instructions, inst_prefx_i5_r_r(imm, dst, src)) } +emit_prefx_i5_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, dst: GPR, src: GPR) { append_elem(instructions, inst_prefx_i5_r_r(imm, dst, src)) } inst_lwxc1_f_r_r :: #force_inline proc "contextless" (dst: FPR, src: GPR, src2: GPR) -> Instruction { return Instruction{mnemonic = .LWXC1, operand_count = 3, length = 4, ops = {op_fpr(dst), op_gpr(src), op_gpr(src2), {}}} } -emit_lwxc1_f_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: FPR, src: GPR, src2: GPR) { append(instructions, inst_lwxc1_f_r_r(dst, src, src2)) } +emit_lwxc1_f_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: FPR, src: GPR, src2: GPR) { append_elem(instructions, inst_lwxc1_f_r_r(dst, src, src2)) } inst_swxc1_f_r_r :: #force_inline proc "contextless" (dst: FPR, src: GPR, src2: GPR) -> Instruction { return Instruction{mnemonic = .SWXC1, operand_count = 3, length = 4, ops = {op_fpr(dst), op_gpr(src), op_gpr(src2), {}}} } -emit_swxc1_f_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: FPR, src: GPR, src2: GPR) { append(instructions, inst_swxc1_f_r_r(dst, src, src2)) } +emit_swxc1_f_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: FPR, src: GPR, src2: GPR) { append_elem(instructions, inst_swxc1_f_r_r(dst, src, src2)) } inst_ldxc1_f_r_r :: #force_inline proc "contextless" (dst: FPR, src: GPR, src2: GPR) -> Instruction { return Instruction{mnemonic = .LDXC1, operand_count = 3, length = 4, ops = {op_fpr(dst), op_gpr(src), op_gpr(src2), {}}} } -emit_ldxc1_f_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: FPR, src: GPR, src2: GPR) { append(instructions, inst_ldxc1_f_r_r(dst, src, src2)) } +emit_ldxc1_f_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: FPR, src: GPR, src2: GPR) { append_elem(instructions, inst_ldxc1_f_r_r(dst, src, src2)) } inst_sdxc1_f_r_r :: #force_inline proc "contextless" (dst: FPR, src: GPR, src2: GPR) -> Instruction { return Instruction{mnemonic = .SDXC1, operand_count = 3, length = 4, ops = {op_fpr(dst), op_gpr(src), op_gpr(src2), {}}} } -emit_sdxc1_f_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: FPR, src: GPR, src2: GPR) { append(instructions, inst_sdxc1_f_r_r(dst, src, src2)) } +emit_sdxc1_f_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: FPR, src: GPR, src2: GPR) { append_elem(instructions, inst_sdxc1_f_r_r(dst, src, src2)) } inst_clz_r_r :: #force_inline proc "contextless" (dst: GPR, src: GPR) -> Instruction { return Instruction{mnemonic = .CLZ, operand_count = 2, length = 4, ops = {op_gpr(dst), op_gpr(src), {}, {}}} } -emit_clz_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR) { append(instructions, inst_clz_r_r(dst, src)) } +emit_clz_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR) { append_elem(instructions, inst_clz_r_r(dst, src)) } inst_clo_r_r :: #force_inline proc "contextless" (dst: GPR, src: GPR) -> Instruction { return Instruction{mnemonic = .CLO, operand_count = 2, length = 4, ops = {op_gpr(dst), op_gpr(src), {}, {}}} } -emit_clo_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR) { append(instructions, inst_clo_r_r(dst, src)) } +emit_clo_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR) { append_elem(instructions, inst_clo_r_r(dst, src)) } inst_dclz_r_r :: #force_inline proc "contextless" (dst: GPR, src: GPR) -> Instruction { return Instruction{mnemonic = .DCLZ, operand_count = 2, length = 4, ops = {op_gpr(dst), op_gpr(src), {}, {}}} } -emit_dclz_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR) { append(instructions, inst_dclz_r_r(dst, src)) } +emit_dclz_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR) { append_elem(instructions, inst_dclz_r_r(dst, src)) } inst_dclo_r_r :: #force_inline proc "contextless" (dst: GPR, src: GPR) -> Instruction { return Instruction{mnemonic = .DCLO, operand_count = 2, length = 4, ops = {op_gpr(dst), op_gpr(src), {}, {}}} } -emit_dclo_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR) { append(instructions, inst_dclo_r_r(dst, src)) } +emit_dclo_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR) { append_elem(instructions, inst_dclo_r_r(dst, src)) } inst_mul_r_r_r :: #force_inline proc "contextless" (dst: GPR, src: GPR, src2: GPR) -> Instruction { return Instruction{mnemonic = .MUL, operand_count = 3, length = 4, ops = {op_gpr(dst), op_gpr(src), op_gpr(src2), {}}} } -emit_mul_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, src2: GPR) { append(instructions, inst_mul_r_r_r(dst, src, src2)) } +emit_mul_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, src2: GPR) { append_elem(instructions, inst_mul_r_r_r(dst, src, src2)) } inst_madd_r_r :: #force_inline proc "contextless" (dst: GPR, src: GPR) -> Instruction { return Instruction{mnemonic = .MADD, operand_count = 2, length = 4, ops = {op_gpr(dst), op_gpr(src), {}, {}}} } inst_madd_r_r_r :: #force_inline proc "contextless" (dst: GPR, src: GPR, src2: GPR) -> Instruction { return Instruction{mnemonic = .MADD, operand_count = 3, length = 4, ops = {op_gpr(dst), op_gpr(src), op_gpr(src2), {}}} } -emit_madd_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR) { append(instructions, inst_madd_r_r(dst, src)) } -emit_madd_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, src2: GPR) { append(instructions, inst_madd_r_r_r(dst, src, src2)) } +emit_madd_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR) { append_elem(instructions, inst_madd_r_r(dst, src)) } +emit_madd_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, src2: GPR) { append_elem(instructions, inst_madd_r_r_r(dst, src, src2)) } inst_maddu_r_r :: #force_inline proc "contextless" (dst: GPR, src: GPR) -> Instruction { return Instruction{mnemonic = .MADDU, operand_count = 2, length = 4, ops = {op_gpr(dst), op_gpr(src), {}, {}}} } inst_maddu_r_r_r :: #force_inline proc "contextless" (dst: GPR, src: GPR, src2: GPR) -> Instruction { return Instruction{mnemonic = .MADDU, operand_count = 3, length = 4, ops = {op_gpr(dst), op_gpr(src), op_gpr(src2), {}}} } -emit_maddu_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR) { append(instructions, inst_maddu_r_r(dst, src)) } -emit_maddu_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, src2: GPR) { append(instructions, inst_maddu_r_r_r(dst, src, src2)) } +emit_maddu_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR) { append_elem(instructions, inst_maddu_r_r(dst, src)) } +emit_maddu_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, src2: GPR) { append_elem(instructions, inst_maddu_r_r_r(dst, src, src2)) } inst_msub_r_r :: #force_inline proc "contextless" (dst: GPR, src: GPR) -> Instruction { return Instruction{mnemonic = .MSUB, operand_count = 2, length = 4, ops = {op_gpr(dst), op_gpr(src), {}, {}}} } inst_msub_r_r_r :: #force_inline proc "contextless" (dst: GPR, src: GPR, src2: GPR) -> Instruction { return Instruction{mnemonic = .MSUB, operand_count = 3, length = 4, ops = {op_gpr(dst), op_gpr(src), op_gpr(src2), {}}} } -emit_msub_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR) { append(instructions, inst_msub_r_r(dst, src)) } -emit_msub_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, src2: GPR) { append(instructions, inst_msub_r_r_r(dst, src, src2)) } +emit_msub_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR) { append_elem(instructions, inst_msub_r_r(dst, src)) } +emit_msub_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, src2: GPR) { append_elem(instructions, inst_msub_r_r_r(dst, src, src2)) } inst_msubu_r_r :: #force_inline proc "contextless" (dst: GPR, src: GPR) -> Instruction { return Instruction{mnemonic = .MSUBU, operand_count = 2, length = 4, ops = {op_gpr(dst), op_gpr(src), {}, {}}} } inst_msubu_r_r_r :: #force_inline proc "contextless" (dst: GPR, src: GPR, src2: GPR) -> Instruction { return Instruction{mnemonic = .MSUBU, operand_count = 3, length = 4, ops = {op_gpr(dst), op_gpr(src), op_gpr(src2), {}}} } -emit_msubu_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR) { append(instructions, inst_msubu_r_r(dst, src)) } -emit_msubu_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, src2: GPR) { append(instructions, inst_msubu_r_r_r(dst, src, src2)) } +emit_msubu_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR) { append_elem(instructions, inst_msubu_r_r(dst, src)) } +emit_msubu_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, src2: GPR) { append_elem(instructions, inst_msubu_r_r_r(dst, src, src2)) } inst_sdbbp_i20 :: #force_inline proc "contextless" (imm: i64) -> Instruction { return Instruction{mnemonic = .SDBBP, operand_count = 1, length = 4, ops = {op_imm(imm, 4), {}, {}, {}}} } -emit_sdbbp_i20 :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64) { append(instructions, inst_sdbbp_i20(imm)) } +emit_sdbbp_i20 :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64) { append_elem(instructions, inst_sdbbp_i20(imm)) } inst_ssnop_none :: #force_inline proc "contextless" () -> Instruction { return Instruction{mnemonic = .SSNOP, operand_count = 0, length = 4, ops = {{}, {}, {}, {}}} } -emit_ssnop_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_ssnop_none()) } +emit_ssnop_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_ssnop_none()) } inst_ehb_none :: #force_inline proc "contextless" () -> Instruction { return Instruction{mnemonic = .EHB, operand_count = 0, length = 4, ops = {{}, {}, {}, {}}} } -emit_ehb_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_ehb_none()) } +emit_ehb_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_ehb_none()) } inst_pause_none :: #force_inline proc "contextless" () -> Instruction { return Instruction{mnemonic = .PAUSE, operand_count = 0, length = 4, ops = {{}, {}, {}, {}}} } -emit_pause_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_pause_none()) } +emit_pause_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_pause_none()) } inst_ext_r_r_i5_i5 :: #force_inline proc "contextless" (dst: GPR, src: GPR, imm: i64, imm2: i64) -> Instruction { return Instruction{mnemonic = .EXT, operand_count = 4, length = 4, ops = {op_gpr(dst), op_gpr(src), op_imm(imm, 1), op_imm(imm2, 1)}} } -emit_ext_r_r_i5_i5 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, imm: i64, imm2: i64) { append(instructions, inst_ext_r_r_i5_i5(dst, src, imm, imm2)) } +emit_ext_r_r_i5_i5 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, imm: i64, imm2: i64) { append_elem(instructions, inst_ext_r_r_i5_i5(dst, src, imm, imm2)) } inst_ins_r_r_i5_i5 :: #force_inline proc "contextless" (dst: GPR, src: GPR, imm: i64, imm2: i64) -> Instruction { return Instruction{mnemonic = .INS, operand_count = 4, length = 4, ops = {op_gpr(dst), op_gpr(src), op_imm(imm, 1), op_imm(imm2, 1)}} } -emit_ins_r_r_i5_i5 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, imm: i64, imm2: i64) { append(instructions, inst_ins_r_r_i5_i5(dst, src, imm, imm2)) } +emit_ins_r_r_i5_i5 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, imm: i64, imm2: i64) { append_elem(instructions, inst_ins_r_r_i5_i5(dst, src, imm, imm2)) } inst_dext_r_r_i5_i5 :: #force_inline proc "contextless" (dst: GPR, src: GPR, imm: i64, imm2: i64) -> Instruction { return Instruction{mnemonic = .DEXT, operand_count = 4, length = 4, ops = {op_gpr(dst), op_gpr(src), op_imm(imm, 1), op_imm(imm2, 1)}} } -emit_dext_r_r_i5_i5 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, imm: i64, imm2: i64) { append(instructions, inst_dext_r_r_i5_i5(dst, src, imm, imm2)) } +emit_dext_r_r_i5_i5 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, imm: i64, imm2: i64) { append_elem(instructions, inst_dext_r_r_i5_i5(dst, src, imm, imm2)) } inst_dextm_r_r_i5_i5 :: #force_inline proc "contextless" (dst: GPR, src: GPR, imm: i64, imm2: i64) -> Instruction { return Instruction{mnemonic = .DEXTM, operand_count = 4, length = 4, ops = {op_gpr(dst), op_gpr(src), op_imm(imm, 1), op_imm(imm2, 1)}} } -emit_dextm_r_r_i5_i5 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, imm: i64, imm2: i64) { append(instructions, inst_dextm_r_r_i5_i5(dst, src, imm, imm2)) } +emit_dextm_r_r_i5_i5 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, imm: i64, imm2: i64) { append_elem(instructions, inst_dextm_r_r_i5_i5(dst, src, imm, imm2)) } inst_dextu_r_r_i5_i5 :: #force_inline proc "contextless" (dst: GPR, src: GPR, imm: i64, imm2: i64) -> Instruction { return Instruction{mnemonic = .DEXTU, operand_count = 4, length = 4, ops = {op_gpr(dst), op_gpr(src), op_imm(imm, 1), op_imm(imm2, 1)}} } -emit_dextu_r_r_i5_i5 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, imm: i64, imm2: i64) { append(instructions, inst_dextu_r_r_i5_i5(dst, src, imm, imm2)) } +emit_dextu_r_r_i5_i5 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, imm: i64, imm2: i64) { append_elem(instructions, inst_dextu_r_r_i5_i5(dst, src, imm, imm2)) } inst_dins_r_r_i5_i5 :: #force_inline proc "contextless" (dst: GPR, src: GPR, imm: i64, imm2: i64) -> Instruction { return Instruction{mnemonic = .DINS, operand_count = 4, length = 4, ops = {op_gpr(dst), op_gpr(src), op_imm(imm, 1), op_imm(imm2, 1)}} } -emit_dins_r_r_i5_i5 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, imm: i64, imm2: i64) { append(instructions, inst_dins_r_r_i5_i5(dst, src, imm, imm2)) } +emit_dins_r_r_i5_i5 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, imm: i64, imm2: i64) { append_elem(instructions, inst_dins_r_r_i5_i5(dst, src, imm, imm2)) } inst_dinsm_r_r_i5_i5 :: #force_inline proc "contextless" (dst: GPR, src: GPR, imm: i64, imm2: i64) -> Instruction { return Instruction{mnemonic = .DINSM, operand_count = 4, length = 4, ops = {op_gpr(dst), op_gpr(src), op_imm(imm, 1), op_imm(imm2, 1)}} } -emit_dinsm_r_r_i5_i5 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, imm: i64, imm2: i64) { append(instructions, inst_dinsm_r_r_i5_i5(dst, src, imm, imm2)) } +emit_dinsm_r_r_i5_i5 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, imm: i64, imm2: i64) { append_elem(instructions, inst_dinsm_r_r_i5_i5(dst, src, imm, imm2)) } inst_dinsu_r_r_i5_i5 :: #force_inline proc "contextless" (dst: GPR, src: GPR, imm: i64, imm2: i64) -> Instruction { return Instruction{mnemonic = .DINSU, operand_count = 4, length = 4, ops = {op_gpr(dst), op_gpr(src), op_imm(imm, 1), op_imm(imm2, 1)}} } -emit_dinsu_r_r_i5_i5 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, imm: i64, imm2: i64) { append(instructions, inst_dinsu_r_r_i5_i5(dst, src, imm, imm2)) } +emit_dinsu_r_r_i5_i5 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, imm: i64, imm2: i64) { append_elem(instructions, inst_dinsu_r_r_i5_i5(dst, src, imm, imm2)) } inst_rotr_r_r_i5 :: #force_inline proc "contextless" (dst: GPR, src: GPR, imm: i64) -> Instruction { return Instruction{mnemonic = .ROTR, operand_count = 3, length = 4, ops = {op_gpr(dst), op_gpr(src), op_imm(imm, 1), {}}} } -emit_rotr_r_r_i5 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, imm: i64) { append(instructions, inst_rotr_r_r_i5(dst, src, imm)) } +emit_rotr_r_r_i5 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, imm: i64) { append_elem(instructions, inst_rotr_r_r_i5(dst, src, imm)) } inst_rotrv_r_r_r :: #force_inline proc "contextless" (dst: GPR, src: GPR, src2: GPR) -> Instruction { return Instruction{mnemonic = .ROTRV, operand_count = 3, length = 4, ops = {op_gpr(dst), op_gpr(src), op_gpr(src2), {}}} } -emit_rotrv_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, src2: GPR) { append(instructions, inst_rotrv_r_r_r(dst, src, src2)) } +emit_rotrv_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, src2: GPR) { append_elem(instructions, inst_rotrv_r_r_r(dst, src, src2)) } inst_drotr_r_r_i5 :: #force_inline proc "contextless" (dst: GPR, src: GPR, imm: i64) -> Instruction { return Instruction{mnemonic = .DROTR, operand_count = 3, length = 4, ops = {op_gpr(dst), op_gpr(src), op_imm(imm, 1), {}}} } -emit_drotr_r_r_i5 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, imm: i64) { append(instructions, inst_drotr_r_r_i5(dst, src, imm)) } +emit_drotr_r_r_i5 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, imm: i64) { append_elem(instructions, inst_drotr_r_r_i5(dst, src, imm)) } inst_drotrv_r_r_r :: #force_inline proc "contextless" (dst: GPR, src: GPR, src2: GPR) -> Instruction { return Instruction{mnemonic = .DROTRV, operand_count = 3, length = 4, ops = {op_gpr(dst), op_gpr(src), op_gpr(src2), {}}} } -emit_drotrv_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, src2: GPR) { append(instructions, inst_drotrv_r_r_r(dst, src, src2)) } +emit_drotrv_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, src2: GPR) { append_elem(instructions, inst_drotrv_r_r_r(dst, src, src2)) } inst_drotr32_r_r_i5 :: #force_inline proc "contextless" (dst: GPR, src: GPR, imm: i64) -> Instruction { return Instruction{mnemonic = .DROTR32, operand_count = 3, length = 4, ops = {op_gpr(dst), op_gpr(src), op_imm(imm, 1), {}}} } -emit_drotr32_r_r_i5 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, imm: i64) { append(instructions, inst_drotr32_r_r_i5(dst, src, imm)) } +emit_drotr32_r_r_i5 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, imm: i64) { append_elem(instructions, inst_drotr32_r_r_i5(dst, src, imm)) } inst_wsbh_r_r :: #force_inline proc "contextless" (dst: GPR, src: GPR) -> Instruction { return Instruction{mnemonic = .WSBH, operand_count = 2, length = 4, ops = {op_gpr(dst), op_gpr(src), {}, {}}} } -emit_wsbh_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR) { append(instructions, inst_wsbh_r_r(dst, src)) } +emit_wsbh_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR) { append_elem(instructions, inst_wsbh_r_r(dst, src)) } inst_dsbh_r_r :: #force_inline proc "contextless" (dst: GPR, src: GPR) -> Instruction { return Instruction{mnemonic = .DSBH, operand_count = 2, length = 4, ops = {op_gpr(dst), op_gpr(src), {}, {}}} } -emit_dsbh_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR) { append(instructions, inst_dsbh_r_r(dst, src)) } +emit_dsbh_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR) { append_elem(instructions, inst_dsbh_r_r(dst, src)) } inst_dshd_r_r :: #force_inline proc "contextless" (dst: GPR, src: GPR) -> Instruction { return Instruction{mnemonic = .DSHD, operand_count = 2, length = 4, ops = {op_gpr(dst), op_gpr(src), {}, {}}} } -emit_dshd_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR) { append(instructions, inst_dshd_r_r(dst, src)) } +emit_dshd_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR) { append_elem(instructions, inst_dshd_r_r(dst, src)) } inst_seb_r_r :: #force_inline proc "contextless" (dst: GPR, src: GPR) -> Instruction { return Instruction{mnemonic = .SEB, operand_count = 2, length = 4, ops = {op_gpr(dst), op_gpr(src), {}, {}}} } -emit_seb_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR) { append(instructions, inst_seb_r_r(dst, src)) } +emit_seb_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR) { append_elem(instructions, inst_seb_r_r(dst, src)) } inst_seh_r_r :: #force_inline proc "contextless" (dst: GPR, src: GPR) -> Instruction { return Instruction{mnemonic = .SEH, operand_count = 2, length = 4, ops = {op_gpr(dst), op_gpr(src), {}, {}}} } -emit_seh_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR) { append(instructions, inst_seh_r_r(dst, src)) } +emit_seh_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR) { append_elem(instructions, inst_seh_r_r(dst, src)) } inst_rdhwr_r_r :: #force_inline proc "contextless" (dst: GPR, src: GPR) -> Instruction { return Instruction{mnemonic = .RDHWR, operand_count = 2, length = 4, ops = {op_gpr(dst), op_gpr(src), {}, {}}} } -emit_rdhwr_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR) { append(instructions, inst_rdhwr_r_r(dst, src)) } +emit_rdhwr_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR) { append_elem(instructions, inst_rdhwr_r_r(dst, src)) } inst_rdpgpr_r_r :: #force_inline proc "contextless" (dst: GPR, src: GPR) -> Instruction { return Instruction{mnemonic = .RDPGPR, operand_count = 2, length = 4, ops = {op_gpr(dst), op_gpr(src), {}, {}}} } -emit_rdpgpr_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR) { append(instructions, inst_rdpgpr_r_r(dst, src)) } +emit_rdpgpr_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR) { append_elem(instructions, inst_rdpgpr_r_r(dst, src)) } inst_wrpgpr_r_r :: #force_inline proc "contextless" (dst: GPR, src: GPR) -> Instruction { return Instruction{mnemonic = .WRPGPR, operand_count = 2, length = 4, ops = {op_gpr(dst), op_gpr(src), {}, {}}} } -emit_wrpgpr_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR) { append(instructions, inst_wrpgpr_r_r(dst, src)) } +emit_wrpgpr_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR) { append_elem(instructions, inst_wrpgpr_r_r(dst, src)) } inst_di_r :: #force_inline proc "contextless" (dst: GPR) -> Instruction { return Instruction{mnemonic = .DI, operand_count = 1, length = 4, ops = {op_gpr(dst), {}, {}, {}}} } -emit_di_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR) { append(instructions, inst_di_r(dst)) } +emit_di_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR) { append_elem(instructions, inst_di_r(dst)) } inst_ei_r :: #force_inline proc "contextless" (dst: GPR) -> Instruction { return Instruction{mnemonic = .EI, operand_count = 1, length = 4, ops = {op_gpr(dst), {}, {}, {}}} } -emit_ei_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR) { append(instructions, inst_ei_r(dst)) } +emit_ei_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR) { append_elem(instructions, inst_ei_r(dst)) } inst_eret_none :: #force_inline proc "contextless" () -> Instruction { return Instruction{mnemonic = .ERET, operand_count = 0, length = 4, ops = {{}, {}, {}, {}}} } -emit_eret_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_eret_none()) } +emit_eret_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_eret_none()) } inst_deret_none :: #force_inline proc "contextless" () -> Instruction { return Instruction{mnemonic = .DERET, operand_count = 0, length = 4, ops = {{}, {}, {}, {}}} } -emit_deret_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_deret_none()) } +emit_deret_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_deret_none()) } inst_wait_none :: #force_inline proc "contextless" () -> Instruction { return Instruction{mnemonic = .WAIT, operand_count = 0, length = 4, ops = {{}, {}, {}, {}}} } -emit_wait_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_wait_none()) } +emit_wait_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_wait_none()) } inst_bc_rel26 :: #force_inline proc "contextless" (target: u32) -> Instruction { return Instruction{mnemonic = .BC, operand_count = 1, length = 4, ops = {op_label(target), {}, {}, {}}} } -emit_bc_rel26 :: #force_inline proc(instructions: ^[dynamic]Instruction, target: u32) { append(instructions, inst_bc_rel26(target)) } +emit_bc_rel26 :: #force_inline proc(instructions: ^[dynamic]Instruction, target: u32) { append_elem(instructions, inst_bc_rel26(target)) } inst_balc_rel26 :: #force_inline proc "contextless" (target: u32) -> Instruction { return Instruction{mnemonic = .BALC, operand_count = 1, length = 4, ops = {op_label(target), {}, {}, {}}} } -emit_balc_rel26 :: #force_inline proc(instructions: ^[dynamic]Instruction, target: u32) { append(instructions, inst_balc_rel26(target)) } +emit_balc_rel26 :: #force_inline proc(instructions: ^[dynamic]Instruction, target: u32) { append_elem(instructions, inst_balc_rel26(target)) } inst_beqc_r_r_rel :: #force_inline proc "contextless" (dst: GPR, src: GPR, target: u32) -> Instruction { return Instruction{mnemonic = .BEQC, operand_count = 3, length = 4, ops = {op_gpr(dst), op_gpr(src), op_label(target), {}}} } -emit_beqc_r_r_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, target: u32) { append(instructions, inst_beqc_r_r_rel(dst, src, target)) } +emit_beqc_r_r_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, target: u32) { append_elem(instructions, inst_beqc_r_r_rel(dst, src, target)) } inst_bnec_r_r_rel :: #force_inline proc "contextless" (dst: GPR, src: GPR, target: u32) -> Instruction { return Instruction{mnemonic = .BNEC, operand_count = 3, length = 4, ops = {op_gpr(dst), op_gpr(src), op_label(target), {}}} } -emit_bnec_r_r_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, target: u32) { append(instructions, inst_bnec_r_r_rel(dst, src, target)) } +emit_bnec_r_r_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, target: u32) { append_elem(instructions, inst_bnec_r_r_rel(dst, src, target)) } inst_bltc_r_r_rel :: #force_inline proc "contextless" (dst: GPR, src: GPR, target: u32) -> Instruction { return Instruction{mnemonic = .BLTC, operand_count = 3, length = 4, ops = {op_gpr(dst), op_gpr(src), op_label(target), {}}} } -emit_bltc_r_r_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, target: u32) { append(instructions, inst_bltc_r_r_rel(dst, src, target)) } +emit_bltc_r_r_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, target: u32) { append_elem(instructions, inst_bltc_r_r_rel(dst, src, target)) } inst_bgec_r_r_rel :: #force_inline proc "contextless" (dst: GPR, src: GPR, target: u32) -> Instruction { return Instruction{mnemonic = .BGEC, operand_count = 3, length = 4, ops = {op_gpr(dst), op_gpr(src), op_label(target), {}}} } -emit_bgec_r_r_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, target: u32) { append(instructions, inst_bgec_r_r_rel(dst, src, target)) } +emit_bgec_r_r_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, target: u32) { append_elem(instructions, inst_bgec_r_r_rel(dst, src, target)) } inst_bltuc_r_r_rel :: #force_inline proc "contextless" (dst: GPR, src: GPR, target: u32) -> Instruction { return Instruction{mnemonic = .BLTUC, operand_count = 3, length = 4, ops = {op_gpr(dst), op_gpr(src), op_label(target), {}}} } -emit_bltuc_r_r_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, target: u32) { append(instructions, inst_bltuc_r_r_rel(dst, src, target)) } +emit_bltuc_r_r_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, target: u32) { append_elem(instructions, inst_bltuc_r_r_rel(dst, src, target)) } inst_bgeuc_r_r_rel :: #force_inline proc "contextless" (dst: GPR, src: GPR, target: u32) -> Instruction { return Instruction{mnemonic = .BGEUC, operand_count = 3, length = 4, ops = {op_gpr(dst), op_gpr(src), op_label(target), {}}} } -emit_bgeuc_r_r_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, target: u32) { append(instructions, inst_bgeuc_r_r_rel(dst, src, target)) } +emit_bgeuc_r_r_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, target: u32) { append_elem(instructions, inst_bgeuc_r_r_rel(dst, src, target)) } inst_blezc_r_rel :: #force_inline proc "contextless" (dst: GPR, target: u32) -> Instruction { return Instruction{mnemonic = .BLEZC, operand_count = 2, length = 4, ops = {op_gpr(dst), op_label(target), {}, {}}} } -emit_blezc_r_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, target: u32) { append(instructions, inst_blezc_r_rel(dst, target)) } +emit_blezc_r_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, target: u32) { append_elem(instructions, inst_blezc_r_rel(dst, target)) } inst_bgezc_r_rel :: #force_inline proc "contextless" (dst: GPR, target: u32) -> Instruction { return Instruction{mnemonic = .BGEZC, operand_count = 2, length = 4, ops = {op_gpr(dst), op_label(target), {}, {}}} } -emit_bgezc_r_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, target: u32) { append(instructions, inst_bgezc_r_rel(dst, target)) } +emit_bgezc_r_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, target: u32) { append_elem(instructions, inst_bgezc_r_rel(dst, target)) } inst_bgtzc_r_rel :: #force_inline proc "contextless" (dst: GPR, target: u32) -> Instruction { return Instruction{mnemonic = .BGTZC, operand_count = 2, length = 4, ops = {op_gpr(dst), op_label(target), {}, {}}} } -emit_bgtzc_r_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, target: u32) { append(instructions, inst_bgtzc_r_rel(dst, target)) } +emit_bgtzc_r_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, target: u32) { append_elem(instructions, inst_bgtzc_r_rel(dst, target)) } inst_bltzc_r_rel :: #force_inline proc "contextless" (dst: GPR, target: u32) -> Instruction { return Instruction{mnemonic = .BLTZC, operand_count = 2, length = 4, ops = {op_gpr(dst), op_label(target), {}, {}}} } -emit_bltzc_r_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, target: u32) { append(instructions, inst_bltzc_r_rel(dst, target)) } +emit_bltzc_r_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, target: u32) { append_elem(instructions, inst_bltzc_r_rel(dst, target)) } inst_beqzc_r_rel21 :: #force_inline proc "contextless" (dst: GPR, target: u32) -> Instruction { return Instruction{mnemonic = .BEQZC, operand_count = 2, length = 4, ops = {op_gpr(dst), op_label(target), {}, {}}} } -emit_beqzc_r_rel21 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, target: u32) { append(instructions, inst_beqzc_r_rel21(dst, target)) } +emit_beqzc_r_rel21 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, target: u32) { append_elem(instructions, inst_beqzc_r_rel21(dst, target)) } inst_bnezc_r_rel21 :: #force_inline proc "contextless" (dst: GPR, target: u32) -> Instruction { return Instruction{mnemonic = .BNEZC, operand_count = 2, length = 4, ops = {op_gpr(dst), op_label(target), {}, {}}} } -emit_bnezc_r_rel21 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, target: u32) { append(instructions, inst_bnezc_r_rel21(dst, target)) } +emit_bnezc_r_rel21 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, target: u32) { append_elem(instructions, inst_bnezc_r_rel21(dst, target)) } inst_bc1eqz_f_rel :: #force_inline proc "contextless" (dst: FPR, target: u32) -> Instruction { return Instruction{mnemonic = .BC1EQZ, operand_count = 2, length = 4, ops = {op_fpr(dst), op_label(target), {}, {}}} } -emit_bc1eqz_f_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: FPR, target: u32) { append(instructions, inst_bc1eqz_f_rel(dst, target)) } +emit_bc1eqz_f_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: FPR, target: u32) { append_elem(instructions, inst_bc1eqz_f_rel(dst, target)) } inst_bc1nez_f_rel :: #force_inline proc "contextless" (dst: FPR, target: u32) -> Instruction { return Instruction{mnemonic = .BC1NEZ, operand_count = 2, length = 4, ops = {op_fpr(dst), op_label(target), {}, {}}} } -emit_bc1nez_f_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: FPR, target: u32) { append(instructions, inst_bc1nez_f_rel(dst, target)) } +emit_bc1nez_f_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: FPR, target: u32) { append_elem(instructions, inst_bc1nez_f_rel(dst, target)) } inst_bc2eqz_c2_rel :: #force_inline proc "contextless" (dst: GTE_DataReg, target: u32) -> Instruction { return Instruction{mnemonic = .BC2EQZ, operand_count = 2, length = 4, ops = {op_gte_data(dst), op_label(target), {}, {}}} } -emit_bc2eqz_c2_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GTE_DataReg, target: u32) { append(instructions, inst_bc2eqz_c2_rel(dst, target)) } +emit_bc2eqz_c2_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GTE_DataReg, target: u32) { append_elem(instructions, inst_bc2eqz_c2_rel(dst, target)) } inst_bc2nez_c2_rel :: #force_inline proc "contextless" (dst: GTE_DataReg, target: u32) -> Instruction { return Instruction{mnemonic = .BC2NEZ, operand_count = 2, length = 4, ops = {op_gte_data(dst), op_label(target), {}, {}}} } -emit_bc2nez_c2_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GTE_DataReg, target: u32) { append(instructions, inst_bc2nez_c2_rel(dst, target)) } +emit_bc2nez_c2_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GTE_DataReg, target: u32) { append_elem(instructions, inst_bc2nez_c2_rel(dst, target)) } inst_jic_r_i16 :: #force_inline proc "contextless" (dst: GPR, imm: i64) -> Instruction { return Instruction{mnemonic = .JIC, operand_count = 2, length = 4, ops = {op_gpr(dst), op_imm(imm, 2), {}, {}}} } -emit_jic_r_i16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, imm: i64) { append(instructions, inst_jic_r_i16(dst, imm)) } +emit_jic_r_i16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, imm: i64) { append_elem(instructions, inst_jic_r_i16(dst, imm)) } inst_jialc_r_i16 :: #force_inline proc "contextless" (dst: GPR, imm: i64) -> Instruction { return Instruction{mnemonic = .JIALC, operand_count = 2, length = 4, ops = {op_gpr(dst), op_imm(imm, 2), {}, {}}} } -emit_jialc_r_i16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, imm: i64) { append(instructions, inst_jialc_r_i16(dst, imm)) } +emit_jialc_r_i16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, imm: i64) { append_elem(instructions, inst_jialc_r_i16(dst, imm)) } inst_muh_r_r_r :: #force_inline proc "contextless" (dst: GPR, src: GPR, src2: GPR) -> Instruction { return Instruction{mnemonic = .MUH, operand_count = 3, length = 4, ops = {op_gpr(dst), op_gpr(src), op_gpr(src2), {}}} } -emit_muh_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, src2: GPR) { append(instructions, inst_muh_r_r_r(dst, src, src2)) } +emit_muh_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, src2: GPR) { append_elem(instructions, inst_muh_r_r_r(dst, src, src2)) } inst_mulu_r_r_r :: #force_inline proc "contextless" (dst: GPR, src: GPR, src2: GPR) -> Instruction { return Instruction{mnemonic = .MULU, operand_count = 3, length = 4, ops = {op_gpr(dst), op_gpr(src), op_gpr(src2), {}}} } -emit_mulu_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, src2: GPR) { append(instructions, inst_mulu_r_r_r(dst, src, src2)) } +emit_mulu_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, src2: GPR) { append_elem(instructions, inst_mulu_r_r_r(dst, src, src2)) } inst_muhu_r_r_r :: #force_inline proc "contextless" (dst: GPR, src: GPR, src2: GPR) -> Instruction { return Instruction{mnemonic = .MUHU, operand_count = 3, length = 4, ops = {op_gpr(dst), op_gpr(src), op_gpr(src2), {}}} } -emit_muhu_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, src2: GPR) { append(instructions, inst_muhu_r_r_r(dst, src, src2)) } +emit_muhu_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, src2: GPR) { append_elem(instructions, inst_muhu_r_r_r(dst, src, src2)) } inst_mod_r_r_r :: #force_inline proc "contextless" (dst: GPR, src: GPR, src2: GPR) -> Instruction { return Instruction{mnemonic = .MOD, operand_count = 3, length = 4, ops = {op_gpr(dst), op_gpr(src), op_gpr(src2), {}}} } -emit_mod_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, src2: GPR) { append(instructions, inst_mod_r_r_r(dst, src, src2)) } +emit_mod_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, src2: GPR) { append_elem(instructions, inst_mod_r_r_r(dst, src, src2)) } inst_modu_r_r_r :: #force_inline proc "contextless" (dst: GPR, src: GPR, src2: GPR) -> Instruction { return Instruction{mnemonic = .MODU, operand_count = 3, length = 4, ops = {op_gpr(dst), op_gpr(src), op_gpr(src2), {}}} } -emit_modu_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, src2: GPR) { append(instructions, inst_modu_r_r_r(dst, src, src2)) } +emit_modu_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, src2: GPR) { append_elem(instructions, inst_modu_r_r_r(dst, src, src2)) } inst_dmul_r_r_r :: #force_inline proc "contextless" (dst: GPR, src: GPR, src2: GPR) -> Instruction { return Instruction{mnemonic = .DMUL, operand_count = 3, length = 4, ops = {op_gpr(dst), op_gpr(src), op_gpr(src2), {}}} } -emit_dmul_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, src2: GPR) { append(instructions, inst_dmul_r_r_r(dst, src, src2)) } +emit_dmul_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, src2: GPR) { append_elem(instructions, inst_dmul_r_r_r(dst, src, src2)) } inst_dmuh_r_r_r :: #force_inline proc "contextless" (dst: GPR, src: GPR, src2: GPR) -> Instruction { return Instruction{mnemonic = .DMUH, operand_count = 3, length = 4, ops = {op_gpr(dst), op_gpr(src), op_gpr(src2), {}}} } -emit_dmuh_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, src2: GPR) { append(instructions, inst_dmuh_r_r_r(dst, src, src2)) } +emit_dmuh_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, src2: GPR) { append_elem(instructions, inst_dmuh_r_r_r(dst, src, src2)) } inst_dmulu_r_r_r :: #force_inline proc "contextless" (dst: GPR, src: GPR, src2: GPR) -> Instruction { return Instruction{mnemonic = .DMULU, operand_count = 3, length = 4, ops = {op_gpr(dst), op_gpr(src), op_gpr(src2), {}}} } -emit_dmulu_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, src2: GPR) { append(instructions, inst_dmulu_r_r_r(dst, src, src2)) } +emit_dmulu_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, src2: GPR) { append_elem(instructions, inst_dmulu_r_r_r(dst, src, src2)) } inst_dmuhu_r_r_r :: #force_inline proc "contextless" (dst: GPR, src: GPR, src2: GPR) -> Instruction { return Instruction{mnemonic = .DMUHU, operand_count = 3, length = 4, ops = {op_gpr(dst), op_gpr(src), op_gpr(src2), {}}} } -emit_dmuhu_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, src2: GPR) { append(instructions, inst_dmuhu_r_r_r(dst, src, src2)) } +emit_dmuhu_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, src2: GPR) { append_elem(instructions, inst_dmuhu_r_r_r(dst, src, src2)) } inst_dmod_r_r_r :: #force_inline proc "contextless" (dst: GPR, src: GPR, src2: GPR) -> Instruction { return Instruction{mnemonic = .DMOD, operand_count = 3, length = 4, ops = {op_gpr(dst), op_gpr(src), op_gpr(src2), {}}} } -emit_dmod_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, src2: GPR) { append(instructions, inst_dmod_r_r_r(dst, src, src2)) } +emit_dmod_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, src2: GPR) { append_elem(instructions, inst_dmod_r_r_r(dst, src, src2)) } inst_dmodu_r_r_r :: #force_inline proc "contextless" (dst: GPR, src: GPR, src2: GPR) -> Instruction { return Instruction{mnemonic = .DMODU, operand_count = 3, length = 4, ops = {op_gpr(dst), op_gpr(src), op_gpr(src2), {}}} } -emit_dmodu_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, src2: GPR) { append(instructions, inst_dmodu_r_r_r(dst, src, src2)) } +emit_dmodu_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, src2: GPR) { append_elem(instructions, inst_dmodu_r_r_r(dst, src, src2)) } inst_aui_r_r_u16 :: #force_inline proc "contextless" (dst: GPR, src: GPR, imm: i64) -> Instruction { return Instruction{mnemonic = .AUI, operand_count = 3, length = 4, ops = {op_gpr(dst), op_gpr(src), op_imm(imm, 2), {}}} } -emit_aui_r_r_u16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, imm: i64) { append(instructions, inst_aui_r_r_u16(dst, src, imm)) } +emit_aui_r_r_u16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, imm: i64) { append_elem(instructions, inst_aui_r_r_u16(dst, src, imm)) } inst_auipc_r_i16 :: #force_inline proc "contextless" (dst: GPR, imm: i64) -> Instruction { return Instruction{mnemonic = .AUIPC, operand_count = 2, length = 4, ops = {op_gpr(dst), op_imm(imm, 2), {}, {}}} } -emit_auipc_r_i16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, imm: i64) { append(instructions, inst_auipc_r_i16(dst, imm)) } +emit_auipc_r_i16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, imm: i64) { append_elem(instructions, inst_auipc_r_i16(dst, imm)) } inst_aluipc_r_i16 :: #force_inline proc "contextless" (dst: GPR, imm: i64) -> Instruction { return Instruction{mnemonic = .ALUIPC, operand_count = 2, length = 4, ops = {op_gpr(dst), op_imm(imm, 2), {}, {}}} } -emit_aluipc_r_i16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, imm: i64) { append(instructions, inst_aluipc_r_i16(dst, imm)) } +emit_aluipc_r_i16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, imm: i64) { append_elem(instructions, inst_aluipc_r_i16(dst, imm)) } inst_daui_r_r_u16 :: #force_inline proc "contextless" (dst: GPR, src: GPR, imm: i64) -> Instruction { return Instruction{mnemonic = .DAUI, operand_count = 3, length = 4, ops = {op_gpr(dst), op_gpr(src), op_imm(imm, 2), {}}} } -emit_daui_r_r_u16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, imm: i64) { append(instructions, inst_daui_r_r_u16(dst, src, imm)) } +emit_daui_r_r_u16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, imm: i64) { append_elem(instructions, inst_daui_r_r_u16(dst, src, imm)) } inst_dahi_r_u16 :: #force_inline proc "contextless" (dst: GPR, imm: i64) -> Instruction { return Instruction{mnemonic = .DAHI, operand_count = 2, length = 4, ops = {op_gpr(dst), op_imm(imm, 2), {}, {}}} } -emit_dahi_r_u16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, imm: i64) { append(instructions, inst_dahi_r_u16(dst, imm)) } +emit_dahi_r_u16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, imm: i64) { append_elem(instructions, inst_dahi_r_u16(dst, imm)) } inst_dati_r_u16 :: #force_inline proc "contextless" (dst: GPR, imm: i64) -> Instruction { return Instruction{mnemonic = .DATI, operand_count = 2, length = 4, ops = {op_gpr(dst), op_imm(imm, 2), {}, {}}} } -emit_dati_r_u16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, imm: i64) { append(instructions, inst_dati_r_u16(dst, imm)) } +emit_dati_r_u16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, imm: i64) { append_elem(instructions, inst_dati_r_u16(dst, imm)) } inst_align_r_r_r_i5 :: #force_inline proc "contextless" (dst: GPR, src: GPR, src2: GPR, imm: i64) -> Instruction { return Instruction{mnemonic = .ALIGN, operand_count = 4, length = 4, ops = {op_gpr(dst), op_gpr(src), op_gpr(src2), op_imm(imm, 1)}} } -emit_align_r_r_r_i5 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, src2: GPR, imm: i64) { append(instructions, inst_align_r_r_r_i5(dst, src, src2, imm)) } +emit_align_r_r_r_i5 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, src2: GPR, imm: i64) { append_elem(instructions, inst_align_r_r_r_i5(dst, src, src2, imm)) } inst_dalign_r_r_r_i5 :: #force_inline proc "contextless" (dst: GPR, src: GPR, src2: GPR, imm: i64) -> Instruction { return Instruction{mnemonic = .DALIGN, operand_count = 4, length = 4, ops = {op_gpr(dst), op_gpr(src), op_gpr(src2), op_imm(imm, 1)}} } -emit_dalign_r_r_r_i5 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, src2: GPR, imm: i64) { append(instructions, inst_dalign_r_r_r_i5(dst, src, src2, imm)) } +emit_dalign_r_r_r_i5 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, src2: GPR, imm: i64) { append_elem(instructions, inst_dalign_r_r_r_i5(dst, src, src2, imm)) } inst_bitswap_r_r :: #force_inline proc "contextless" (dst: GPR, src: GPR) -> Instruction { return Instruction{mnemonic = .BITSWAP, operand_count = 2, length = 4, ops = {op_gpr(dst), op_gpr(src), {}, {}}} } -emit_bitswap_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR) { append(instructions, inst_bitswap_r_r(dst, src)) } +emit_bitswap_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR) { append_elem(instructions, inst_bitswap_r_r(dst, src)) } inst_dbitswap_r_r :: #force_inline proc "contextless" (dst: GPR, src: GPR) -> Instruction { return Instruction{mnemonic = .DBITSWAP, operand_count = 2, length = 4, ops = {op_gpr(dst), op_gpr(src), {}, {}}} } -emit_dbitswap_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR) { append(instructions, inst_dbitswap_r_r(dst, src)) } +emit_dbitswap_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR) { append_elem(instructions, inst_dbitswap_r_r(dst, src)) } inst_lsa_r_r_r_i5 :: #force_inline proc "contextless" (dst: GPR, src: GPR, src2: GPR, imm: i64) -> Instruction { return Instruction{mnemonic = .LSA, operand_count = 4, length = 4, ops = {op_gpr(dst), op_gpr(src), op_gpr(src2), op_imm(imm, 1)}} } -emit_lsa_r_r_r_i5 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, src2: GPR, imm: i64) { append(instructions, inst_lsa_r_r_r_i5(dst, src, src2, imm)) } +emit_lsa_r_r_r_i5 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, src2: GPR, imm: i64) { append_elem(instructions, inst_lsa_r_r_r_i5(dst, src, src2, imm)) } inst_dlsa_r_r_r_i5 :: #force_inline proc "contextless" (dst: GPR, src: GPR, src2: GPR, imm: i64) -> Instruction { return Instruction{mnemonic = .DLSA, operand_count = 4, length = 4, ops = {op_gpr(dst), op_gpr(src), op_gpr(src2), op_imm(imm, 1)}} } -emit_dlsa_r_r_r_i5 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, src2: GPR, imm: i64) { append(instructions, inst_dlsa_r_r_r_i5(dst, src, src2, imm)) } +emit_dlsa_r_r_r_i5 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, src2: GPR, imm: i64) { append_elem(instructions, inst_dlsa_r_r_r_i5(dst, src, src2, imm)) } inst_lwpc_r_rel :: #force_inline proc "contextless" (dst: GPR, target: u32) -> Instruction { return Instruction{mnemonic = .LWPC, operand_count = 2, length = 4, ops = {op_gpr(dst), op_label(target), {}, {}}} } -emit_lwpc_r_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, target: u32) { append(instructions, inst_lwpc_r_rel(dst, target)) } +emit_lwpc_r_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, target: u32) { append_elem(instructions, inst_lwpc_r_rel(dst, target)) } inst_lwupc_r_rel :: #force_inline proc "contextless" (dst: GPR, target: u32) -> Instruction { return Instruction{mnemonic = .LWUPC, operand_count = 2, length = 4, ops = {op_gpr(dst), op_label(target), {}, {}}} } -emit_lwupc_r_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, target: u32) { append(instructions, inst_lwupc_r_rel(dst, target)) } +emit_lwupc_r_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, target: u32) { append_elem(instructions, inst_lwupc_r_rel(dst, target)) } inst_ldpc_r_rel :: #force_inline proc "contextless" (dst: GPR, target: u32) -> Instruction { return Instruction{mnemonic = .LDPC, operand_count = 2, length = 4, ops = {op_gpr(dst), op_label(target), {}, {}}} } -emit_ldpc_r_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, target: u32) { append(instructions, inst_ldpc_r_rel(dst, target)) } +emit_ldpc_r_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, target: u32) { append_elem(instructions, inst_ldpc_r_rel(dst, target)) } inst_seleqz_r_r_r :: #force_inline proc "contextless" (dst: GPR, src: GPR, src2: GPR) -> Instruction { return Instruction{mnemonic = .SELEQZ, operand_count = 3, length = 4, ops = {op_gpr(dst), op_gpr(src), op_gpr(src2), {}}} } -emit_seleqz_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, src2: GPR) { append(instructions, inst_seleqz_r_r_r(dst, src, src2)) } +emit_seleqz_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, src2: GPR) { append_elem(instructions, inst_seleqz_r_r_r(dst, src, src2)) } inst_selnez_r_r_r :: #force_inline proc "contextless" (dst: GPR, src: GPR, src2: GPR) -> Instruction { return Instruction{mnemonic = .SELNEZ, operand_count = 3, length = 4, ops = {op_gpr(dst), op_gpr(src), op_gpr(src2), {}}} } -emit_selnez_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, src2: GPR) { append(instructions, inst_selnez_r_r_r(dst, src, src2)) } +emit_selnez_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, src2: GPR) { append_elem(instructions, inst_selnez_r_r_r(dst, src, src2)) } inst_crc32b_r_r :: #force_inline proc "contextless" (dst: GPR, src: GPR) -> Instruction { return Instruction{mnemonic = .CRC32B, operand_count = 2, length = 4, ops = {op_gpr(dst), op_gpr(src), {}, {}}} } -emit_crc32b_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR) { append(instructions, inst_crc32b_r_r(dst, src)) } +emit_crc32b_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR) { append_elem(instructions, inst_crc32b_r_r(dst, src)) } inst_crc32h_r_r :: #force_inline proc "contextless" (dst: GPR, src: GPR) -> Instruction { return Instruction{mnemonic = .CRC32H, operand_count = 2, length = 4, ops = {op_gpr(dst), op_gpr(src), {}, {}}} } -emit_crc32h_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR) { append(instructions, inst_crc32h_r_r(dst, src)) } +emit_crc32h_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR) { append_elem(instructions, inst_crc32h_r_r(dst, src)) } inst_crc32w_r_r :: #force_inline proc "contextless" (dst: GPR, src: GPR) -> Instruction { return Instruction{mnemonic = .CRC32W, operand_count = 2, length = 4, ops = {op_gpr(dst), op_gpr(src), {}, {}}} } -emit_crc32w_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR) { append(instructions, inst_crc32w_r_r(dst, src)) } +emit_crc32w_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR) { append_elem(instructions, inst_crc32w_r_r(dst, src)) } inst_crc32d_r_r :: #force_inline proc "contextless" (dst: GPR, src: GPR) -> Instruction { return Instruction{mnemonic = .CRC32D, operand_count = 2, length = 4, ops = {op_gpr(dst), op_gpr(src), {}, {}}} } -emit_crc32d_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR) { append(instructions, inst_crc32d_r_r(dst, src)) } +emit_crc32d_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR) { append_elem(instructions, inst_crc32d_r_r(dst, src)) } inst_crc32cb_r_r :: #force_inline proc "contextless" (dst: GPR, src: GPR) -> Instruction { return Instruction{mnemonic = .CRC32CB, operand_count = 2, length = 4, ops = {op_gpr(dst), op_gpr(src), {}, {}}} } -emit_crc32cb_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR) { append(instructions, inst_crc32cb_r_r(dst, src)) } +emit_crc32cb_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR) { append_elem(instructions, inst_crc32cb_r_r(dst, src)) } inst_crc32ch_r_r :: #force_inline proc "contextless" (dst: GPR, src: GPR) -> Instruction { return Instruction{mnemonic = .CRC32CH, operand_count = 2, length = 4, ops = {op_gpr(dst), op_gpr(src), {}, {}}} } -emit_crc32ch_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR) { append(instructions, inst_crc32ch_r_r(dst, src)) } +emit_crc32ch_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR) { append_elem(instructions, inst_crc32ch_r_r(dst, src)) } inst_crc32cw_r_r :: #force_inline proc "contextless" (dst: GPR, src: GPR) -> Instruction { return Instruction{mnemonic = .CRC32CW, operand_count = 2, length = 4, ops = {op_gpr(dst), op_gpr(src), {}, {}}} } -emit_crc32cw_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR) { append(instructions, inst_crc32cw_r_r(dst, src)) } +emit_crc32cw_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR) { append_elem(instructions, inst_crc32cw_r_r(dst, src)) } inst_crc32cd_r_r :: #force_inline proc "contextless" (dst: GPR, src: GPR) -> Instruction { return Instruction{mnemonic = .CRC32CD, operand_count = 2, length = 4, ops = {op_gpr(dst), op_gpr(src), {}, {}}} } -emit_crc32cd_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR) { append(instructions, inst_crc32cd_r_r(dst, src)) } +emit_crc32cd_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR) { append_elem(instructions, inst_crc32cd_r_r(dst, src)) } inst_sigrie_u16 :: #force_inline proc "contextless" (imm: i64) -> Instruction { return Instruction{mnemonic = .SIGRIE, operand_count = 1, length = 4, ops = {op_imm(imm, 2), {}, {}, {}}} } -emit_sigrie_u16 :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64) { append(instructions, inst_sigrie_u16(imm)) } +emit_sigrie_u16 :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64) { append_elem(instructions, inst_sigrie_u16(imm)) } inst_mfc1_r_f :: #force_inline proc "contextless" (dst: GPR, src: FPR) -> Instruction { return Instruction{mnemonic = .MFC1, operand_count = 2, length = 4, ops = {op_gpr(dst), op_fpr(src), {}, {}}} } -emit_mfc1_r_f :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: FPR) { append(instructions, inst_mfc1_r_f(dst, src)) } +emit_mfc1_r_f :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: FPR) { append_elem(instructions, inst_mfc1_r_f(dst, src)) } inst_mtc1_r_f :: #force_inline proc "contextless" (dst: GPR, src: FPR) -> Instruction { return Instruction{mnemonic = .MTC1, operand_count = 2, length = 4, ops = {op_gpr(dst), op_fpr(src), {}, {}}} } -emit_mtc1_r_f :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: FPR) { append(instructions, inst_mtc1_r_f(dst, src)) } +emit_mtc1_r_f :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: FPR) { append_elem(instructions, inst_mtc1_r_f(dst, src)) } inst_dmfc1_r_f :: #force_inline proc "contextless" (dst: GPR, src: FPR) -> Instruction { return Instruction{mnemonic = .DMFC1, operand_count = 2, length = 4, ops = {op_gpr(dst), op_fpr(src), {}, {}}} } -emit_dmfc1_r_f :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: FPR) { append(instructions, inst_dmfc1_r_f(dst, src)) } +emit_dmfc1_r_f :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: FPR) { append_elem(instructions, inst_dmfc1_r_f(dst, src)) } inst_dmtc1_r_f :: #force_inline proc "contextless" (dst: GPR, src: FPR) -> Instruction { return Instruction{mnemonic = .DMTC1, operand_count = 2, length = 4, ops = {op_gpr(dst), op_fpr(src), {}, {}}} } -emit_dmtc1_r_f :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: FPR) { append(instructions, inst_dmtc1_r_f(dst, src)) } +emit_dmtc1_r_f :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: FPR) { append_elem(instructions, inst_dmtc1_r_f(dst, src)) } inst_cfc1_r_fcr :: #force_inline proc "contextless" (dst: GPR, src: Register) -> Instruction { return Instruction{mnemonic = .CFC1, operand_count = 2, length = 4, ops = {op_gpr(dst), op_reg(src), {}, {}}} } -emit_cfc1_r_fcr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: Register) { append(instructions, inst_cfc1_r_fcr(dst, src)) } +emit_cfc1_r_fcr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: Register) { append_elem(instructions, inst_cfc1_r_fcr(dst, src)) } inst_ctc1_r_fcr :: #force_inline proc "contextless" (dst: GPR, src: Register) -> Instruction { return Instruction{mnemonic = .CTC1, operand_count = 2, length = 4, ops = {op_gpr(dst), op_reg(src), {}, {}}} } -emit_ctc1_r_fcr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: Register) { append(instructions, inst_ctc1_r_fcr(dst, src)) } +emit_ctc1_r_fcr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: Register) { append_elem(instructions, inst_ctc1_r_fcr(dst, src)) } inst_mfhc1_r_f :: #force_inline proc "contextless" (dst: GPR, src: FPR) -> Instruction { return Instruction{mnemonic = .MFHC1, operand_count = 2, length = 4, ops = {op_gpr(dst), op_fpr(src), {}, {}}} } -emit_mfhc1_r_f :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: FPR) { append(instructions, inst_mfhc1_r_f(dst, src)) } +emit_mfhc1_r_f :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: FPR) { append_elem(instructions, inst_mfhc1_r_f(dst, src)) } inst_mthc1_r_f :: #force_inline proc "contextless" (dst: GPR, src: FPR) -> Instruction { return Instruction{mnemonic = .MTHC1, operand_count = 2, length = 4, ops = {op_gpr(dst), op_fpr(src), {}, {}}} } -emit_mthc1_r_f :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: FPR) { append(instructions, inst_mthc1_r_f(dst, src)) } +emit_mthc1_r_f :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: FPR) { append_elem(instructions, inst_mthc1_r_f(dst, src)) } inst_lwc1_f_m :: #force_inline proc "contextless" (dst: FPR, mem: Memory) -> Instruction { return Instruction{mnemonic = .LWC1, operand_count = 2, length = 4, ops = {op_fpr(dst), op_mem(mem, 4), {}, {}}} } -emit_lwc1_f_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: FPR, mem: Memory) { append(instructions, inst_lwc1_f_m(dst, mem)) } +emit_lwc1_f_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: FPR, mem: Memory) { append_elem(instructions, inst_lwc1_f_m(dst, mem)) } inst_swc1_f_m :: #force_inline proc "contextless" (dst: FPR, mem: Memory) -> Instruction { return Instruction{mnemonic = .SWC1, operand_count = 2, length = 4, ops = {op_fpr(dst), op_mem(mem, 4), {}, {}}} } -emit_swc1_f_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: FPR, mem: Memory) { append(instructions, inst_swc1_f_m(dst, mem)) } +emit_swc1_f_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: FPR, mem: Memory) { append_elem(instructions, inst_swc1_f_m(dst, mem)) } inst_ldc1_f_m :: #force_inline proc "contextless" (dst: FPR, mem: Memory) -> Instruction { return Instruction{mnemonic = .LDC1, operand_count = 2, length = 4, ops = {op_fpr(dst), op_mem(mem, 4), {}, {}}} } -emit_ldc1_f_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: FPR, mem: Memory) { append(instructions, inst_ldc1_f_m(dst, mem)) } +emit_ldc1_f_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: FPR, mem: Memory) { append_elem(instructions, inst_ldc1_f_m(dst, mem)) } inst_sdc1_f_m :: #force_inline proc "contextless" (dst: FPR, mem: Memory) -> Instruction { return Instruction{mnemonic = .SDC1, operand_count = 2, length = 4, ops = {op_fpr(dst), op_mem(mem, 4), {}, {}}} } -emit_sdc1_f_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: FPR, mem: Memory) { append(instructions, inst_sdc1_f_m(dst, mem)) } +emit_sdc1_f_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: FPR, mem: Memory) { append_elem(instructions, inst_sdc1_f_m(dst, mem)) } inst_add_s_f_f_f :: #force_inline proc "contextless" (dst: FPR, src: FPR, src2: FPR) -> Instruction { return Instruction{mnemonic = .ADD_S, operand_count = 3, length = 4, ops = {op_fpr(dst), op_fpr(src), op_fpr(src2), {}}} } -emit_add_s_f_f_f :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: FPR, src: FPR, src2: FPR) { append(instructions, inst_add_s_f_f_f(dst, src, src2)) } +emit_add_s_f_f_f :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: FPR, src: FPR, src2: FPR) { append_elem(instructions, inst_add_s_f_f_f(dst, src, src2)) } inst_add_d_f_f_f :: #force_inline proc "contextless" (dst: FPR, src: FPR, src2: FPR) -> Instruction { return Instruction{mnemonic = .ADD_D, operand_count = 3, length = 4, ops = {op_fpr(dst), op_fpr(src), op_fpr(src2), {}}} } -emit_add_d_f_f_f :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: FPR, src: FPR, src2: FPR) { append(instructions, inst_add_d_f_f_f(dst, src, src2)) } +emit_add_d_f_f_f :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: FPR, src: FPR, src2: FPR) { append_elem(instructions, inst_add_d_f_f_f(dst, src, src2)) } inst_add_ps_f_f_f :: #force_inline proc "contextless" (dst: FPR, src: FPR, src2: FPR) -> Instruction { return Instruction{mnemonic = .ADD_PS, operand_count = 3, length = 4, ops = {op_fpr(dst), op_fpr(src), op_fpr(src2), {}}} } -emit_add_ps_f_f_f :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: FPR, src: FPR, src2: FPR) { append(instructions, inst_add_ps_f_f_f(dst, src, src2)) } +emit_add_ps_f_f_f :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: FPR, src: FPR, src2: FPR) { append_elem(instructions, inst_add_ps_f_f_f(dst, src, src2)) } inst_sub_s_f_f_f :: #force_inline proc "contextless" (dst: FPR, src: FPR, src2: FPR) -> Instruction { return Instruction{mnemonic = .SUB_S, operand_count = 3, length = 4, ops = {op_fpr(dst), op_fpr(src), op_fpr(src2), {}}} } -emit_sub_s_f_f_f :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: FPR, src: FPR, src2: FPR) { append(instructions, inst_sub_s_f_f_f(dst, src, src2)) } +emit_sub_s_f_f_f :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: FPR, src: FPR, src2: FPR) { append_elem(instructions, inst_sub_s_f_f_f(dst, src, src2)) } inst_sub_d_f_f_f :: #force_inline proc "contextless" (dst: FPR, src: FPR, src2: FPR) -> Instruction { return Instruction{mnemonic = .SUB_D, operand_count = 3, length = 4, ops = {op_fpr(dst), op_fpr(src), op_fpr(src2), {}}} } -emit_sub_d_f_f_f :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: FPR, src: FPR, src2: FPR) { append(instructions, inst_sub_d_f_f_f(dst, src, src2)) } +emit_sub_d_f_f_f :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: FPR, src: FPR, src2: FPR) { append_elem(instructions, inst_sub_d_f_f_f(dst, src, src2)) } inst_sub_ps_f_f_f :: #force_inline proc "contextless" (dst: FPR, src: FPR, src2: FPR) -> Instruction { return Instruction{mnemonic = .SUB_PS, operand_count = 3, length = 4, ops = {op_fpr(dst), op_fpr(src), op_fpr(src2), {}}} } -emit_sub_ps_f_f_f :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: FPR, src: FPR, src2: FPR) { append(instructions, inst_sub_ps_f_f_f(dst, src, src2)) } +emit_sub_ps_f_f_f :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: FPR, src: FPR, src2: FPR) { append_elem(instructions, inst_sub_ps_f_f_f(dst, src, src2)) } inst_mul_s_f_f_f :: #force_inline proc "contextless" (dst: FPR, src: FPR, src2: FPR) -> Instruction { return Instruction{mnemonic = .MUL_S, operand_count = 3, length = 4, ops = {op_fpr(dst), op_fpr(src), op_fpr(src2), {}}} } -emit_mul_s_f_f_f :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: FPR, src: FPR, src2: FPR) { append(instructions, inst_mul_s_f_f_f(dst, src, src2)) } +emit_mul_s_f_f_f :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: FPR, src: FPR, src2: FPR) { append_elem(instructions, inst_mul_s_f_f_f(dst, src, src2)) } inst_mul_d_f_f_f :: #force_inline proc "contextless" (dst: FPR, src: FPR, src2: FPR) -> Instruction { return Instruction{mnemonic = .MUL_D, operand_count = 3, length = 4, ops = {op_fpr(dst), op_fpr(src), op_fpr(src2), {}}} } -emit_mul_d_f_f_f :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: FPR, src: FPR, src2: FPR) { append(instructions, inst_mul_d_f_f_f(dst, src, src2)) } +emit_mul_d_f_f_f :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: FPR, src: FPR, src2: FPR) { append_elem(instructions, inst_mul_d_f_f_f(dst, src, src2)) } inst_mul_ps_f_f_f :: #force_inline proc "contextless" (dst: FPR, src: FPR, src2: FPR) -> Instruction { return Instruction{mnemonic = .MUL_PS, operand_count = 3, length = 4, ops = {op_fpr(dst), op_fpr(src), op_fpr(src2), {}}} } -emit_mul_ps_f_f_f :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: FPR, src: FPR, src2: FPR) { append(instructions, inst_mul_ps_f_f_f(dst, src, src2)) } +emit_mul_ps_f_f_f :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: FPR, src: FPR, src2: FPR) { append_elem(instructions, inst_mul_ps_f_f_f(dst, src, src2)) } inst_div_s_f_f_f :: #force_inline proc "contextless" (dst: FPR, src: FPR, src2: FPR) -> Instruction { return Instruction{mnemonic = .DIV_S, operand_count = 3, length = 4, ops = {op_fpr(dst), op_fpr(src), op_fpr(src2), {}}} } -emit_div_s_f_f_f :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: FPR, src: FPR, src2: FPR) { append(instructions, inst_div_s_f_f_f(dst, src, src2)) } +emit_div_s_f_f_f :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: FPR, src: FPR, src2: FPR) { append_elem(instructions, inst_div_s_f_f_f(dst, src, src2)) } inst_div_d_f_f_f :: #force_inline proc "contextless" (dst: FPR, src: FPR, src2: FPR) -> Instruction { return Instruction{mnemonic = .DIV_D, operand_count = 3, length = 4, ops = {op_fpr(dst), op_fpr(src), op_fpr(src2), {}}} } -emit_div_d_f_f_f :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: FPR, src: FPR, src2: FPR) { append(instructions, inst_div_d_f_f_f(dst, src, src2)) } +emit_div_d_f_f_f :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: FPR, src: FPR, src2: FPR) { append_elem(instructions, inst_div_d_f_f_f(dst, src, src2)) } inst_sqrt_s_f_f :: #force_inline proc "contextless" (dst: FPR, src: FPR) -> Instruction { return Instruction{mnemonic = .SQRT_S, operand_count = 2, length = 4, ops = {op_fpr(dst), op_fpr(src), {}, {}}} } -emit_sqrt_s_f_f :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: FPR, src: FPR) { append(instructions, inst_sqrt_s_f_f(dst, src)) } +emit_sqrt_s_f_f :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: FPR, src: FPR) { append_elem(instructions, inst_sqrt_s_f_f(dst, src)) } inst_sqrt_d_f_f :: #force_inline proc "contextless" (dst: FPR, src: FPR) -> Instruction { return Instruction{mnemonic = .SQRT_D, operand_count = 2, length = 4, ops = {op_fpr(dst), op_fpr(src), {}, {}}} } -emit_sqrt_d_f_f :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: FPR, src: FPR) { append(instructions, inst_sqrt_d_f_f(dst, src)) } +emit_sqrt_d_f_f :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: FPR, src: FPR) { append_elem(instructions, inst_sqrt_d_f_f(dst, src)) } inst_abs_s_f_f :: #force_inline proc "contextless" (dst: FPR, src: FPR) -> Instruction { return Instruction{mnemonic = .ABS_S, operand_count = 2, length = 4, ops = {op_fpr(dst), op_fpr(src), {}, {}}} } -emit_abs_s_f_f :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: FPR, src: FPR) { append(instructions, inst_abs_s_f_f(dst, src)) } +emit_abs_s_f_f :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: FPR, src: FPR) { append_elem(instructions, inst_abs_s_f_f(dst, src)) } inst_abs_d_f_f :: #force_inline proc "contextless" (dst: FPR, src: FPR) -> Instruction { return Instruction{mnemonic = .ABS_D, operand_count = 2, length = 4, ops = {op_fpr(dst), op_fpr(src), {}, {}}} } -emit_abs_d_f_f :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: FPR, src: FPR) { append(instructions, inst_abs_d_f_f(dst, src)) } +emit_abs_d_f_f :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: FPR, src: FPR) { append_elem(instructions, inst_abs_d_f_f(dst, src)) } inst_abs_ps_f_f :: #force_inline proc "contextless" (dst: FPR, src: FPR) -> Instruction { return Instruction{mnemonic = .ABS_PS, operand_count = 2, length = 4, ops = {op_fpr(dst), op_fpr(src), {}, {}}} } -emit_abs_ps_f_f :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: FPR, src: FPR) { append(instructions, inst_abs_ps_f_f(dst, src)) } +emit_abs_ps_f_f :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: FPR, src: FPR) { append_elem(instructions, inst_abs_ps_f_f(dst, src)) } inst_neg_s_f_f :: #force_inline proc "contextless" (dst: FPR, src: FPR) -> Instruction { return Instruction{mnemonic = .NEG_S, operand_count = 2, length = 4, ops = {op_fpr(dst), op_fpr(src), {}, {}}} } -emit_neg_s_f_f :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: FPR, src: FPR) { append(instructions, inst_neg_s_f_f(dst, src)) } +emit_neg_s_f_f :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: FPR, src: FPR) { append_elem(instructions, inst_neg_s_f_f(dst, src)) } inst_neg_d_f_f :: #force_inline proc "contextless" (dst: FPR, src: FPR) -> Instruction { return Instruction{mnemonic = .NEG_D, operand_count = 2, length = 4, ops = {op_fpr(dst), op_fpr(src), {}, {}}} } -emit_neg_d_f_f :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: FPR, src: FPR) { append(instructions, inst_neg_d_f_f(dst, src)) } +emit_neg_d_f_f :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: FPR, src: FPR) { append_elem(instructions, inst_neg_d_f_f(dst, src)) } inst_neg_ps_f_f :: #force_inline proc "contextless" (dst: FPR, src: FPR) -> Instruction { return Instruction{mnemonic = .NEG_PS, operand_count = 2, length = 4, ops = {op_fpr(dst), op_fpr(src), {}, {}}} } -emit_neg_ps_f_f :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: FPR, src: FPR) { append(instructions, inst_neg_ps_f_f(dst, src)) } +emit_neg_ps_f_f :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: FPR, src: FPR) { append_elem(instructions, inst_neg_ps_f_f(dst, src)) } inst_mov_s_f_f :: #force_inline proc "contextless" (dst: FPR, src: FPR) -> Instruction { return Instruction{mnemonic = .MOV_S, operand_count = 2, length = 4, ops = {op_fpr(dst), op_fpr(src), {}, {}}} } -emit_mov_s_f_f :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: FPR, src: FPR) { append(instructions, inst_mov_s_f_f(dst, src)) } +emit_mov_s_f_f :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: FPR, src: FPR) { append_elem(instructions, inst_mov_s_f_f(dst, src)) } inst_mov_d_f_f :: #force_inline proc "contextless" (dst: FPR, src: FPR) -> Instruction { return Instruction{mnemonic = .MOV_D, operand_count = 2, length = 4, ops = {op_fpr(dst), op_fpr(src), {}, {}}} } -emit_mov_d_f_f :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: FPR, src: FPR) { append(instructions, inst_mov_d_f_f(dst, src)) } +emit_mov_d_f_f :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: FPR, src: FPR) { append_elem(instructions, inst_mov_d_f_f(dst, src)) } inst_mov_ps_f_f :: #force_inline proc "contextless" (dst: FPR, src: FPR) -> Instruction { return Instruction{mnemonic = .MOV_PS, operand_count = 2, length = 4, ops = {op_fpr(dst), op_fpr(src), {}, {}}} } -emit_mov_ps_f_f :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: FPR, src: FPR) { append(instructions, inst_mov_ps_f_f(dst, src)) } +emit_mov_ps_f_f :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: FPR, src: FPR) { append_elem(instructions, inst_mov_ps_f_f(dst, src)) } inst_recip_s_f_f :: #force_inline proc "contextless" (dst: FPR, src: FPR) -> Instruction { return Instruction{mnemonic = .RECIP_S, operand_count = 2, length = 4, ops = {op_fpr(dst), op_fpr(src), {}, {}}} } -emit_recip_s_f_f :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: FPR, src: FPR) { append(instructions, inst_recip_s_f_f(dst, src)) } +emit_recip_s_f_f :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: FPR, src: FPR) { append_elem(instructions, inst_recip_s_f_f(dst, src)) } inst_recip_d_f_f :: #force_inline proc "contextless" (dst: FPR, src: FPR) -> Instruction { return Instruction{mnemonic = .RECIP_D, operand_count = 2, length = 4, ops = {op_fpr(dst), op_fpr(src), {}, {}}} } -emit_recip_d_f_f :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: FPR, src: FPR) { append(instructions, inst_recip_d_f_f(dst, src)) } +emit_recip_d_f_f :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: FPR, src: FPR) { append_elem(instructions, inst_recip_d_f_f(dst, src)) } inst_rsqrt_s_f_f :: #force_inline proc "contextless" (dst: FPR, src: FPR) -> Instruction { return Instruction{mnemonic = .RSQRT_S, operand_count = 2, length = 4, ops = {op_fpr(dst), op_fpr(src), {}, {}}} } -emit_rsqrt_s_f_f :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: FPR, src: FPR) { append(instructions, inst_rsqrt_s_f_f(dst, src)) } +emit_rsqrt_s_f_f :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: FPR, src: FPR) { append_elem(instructions, inst_rsqrt_s_f_f(dst, src)) } inst_rsqrt_d_f_f :: #force_inline proc "contextless" (dst: FPR, src: FPR) -> Instruction { return Instruction{mnemonic = .RSQRT_D, operand_count = 2, length = 4, ops = {op_fpr(dst), op_fpr(src), {}, {}}} } -emit_rsqrt_d_f_f :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: FPR, src: FPR) { append(instructions, inst_rsqrt_d_f_f(dst, src)) } +emit_rsqrt_d_f_f :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: FPR, src: FPR) { append_elem(instructions, inst_rsqrt_d_f_f(dst, src)) } inst_madd_s_f_f_f_f :: #force_inline proc "contextless" (dst: FPR, src: FPR, src2: FPR, src3: FPR) -> Instruction { return Instruction{mnemonic = .MADD_S, operand_count = 4, length = 4, ops = {op_fpr(dst), op_fpr(src), op_fpr(src2), op_fpr(src3)}} } -emit_madd_s_f_f_f_f :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: FPR, src: FPR, src2: FPR, src3: FPR) { append(instructions, inst_madd_s_f_f_f_f(dst, src, src2, src3)) } +emit_madd_s_f_f_f_f :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: FPR, src: FPR, src2: FPR, src3: FPR) { append_elem(instructions, inst_madd_s_f_f_f_f(dst, src, src2, src3)) } inst_madd_d_f_f_f_f :: #force_inline proc "contextless" (dst: FPR, src: FPR, src2: FPR, src3: FPR) -> Instruction { return Instruction{mnemonic = .MADD_D, operand_count = 4, length = 4, ops = {op_fpr(dst), op_fpr(src), op_fpr(src2), op_fpr(src3)}} } -emit_madd_d_f_f_f_f :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: FPR, src: FPR, src2: FPR, src3: FPR) { append(instructions, inst_madd_d_f_f_f_f(dst, src, src2, src3)) } +emit_madd_d_f_f_f_f :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: FPR, src: FPR, src2: FPR, src3: FPR) { append_elem(instructions, inst_madd_d_f_f_f_f(dst, src, src2, src3)) } inst_madd_ps_f_f_f_f :: #force_inline proc "contextless" (dst: FPR, src: FPR, src2: FPR, src3: FPR) -> Instruction { return Instruction{mnemonic = .MADD_PS, operand_count = 4, length = 4, ops = {op_fpr(dst), op_fpr(src), op_fpr(src2), op_fpr(src3)}} } -emit_madd_ps_f_f_f_f :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: FPR, src: FPR, src2: FPR, src3: FPR) { append(instructions, inst_madd_ps_f_f_f_f(dst, src, src2, src3)) } +emit_madd_ps_f_f_f_f :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: FPR, src: FPR, src2: FPR, src3: FPR) { append_elem(instructions, inst_madd_ps_f_f_f_f(dst, src, src2, src3)) } inst_msub_s_f_f_f_f :: #force_inline proc "contextless" (dst: FPR, src: FPR, src2: FPR, src3: FPR) -> Instruction { return Instruction{mnemonic = .MSUB_S, operand_count = 4, length = 4, ops = {op_fpr(dst), op_fpr(src), op_fpr(src2), op_fpr(src3)}} } -emit_msub_s_f_f_f_f :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: FPR, src: FPR, src2: FPR, src3: FPR) { append(instructions, inst_msub_s_f_f_f_f(dst, src, src2, src3)) } +emit_msub_s_f_f_f_f :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: FPR, src: FPR, src2: FPR, src3: FPR) { append_elem(instructions, inst_msub_s_f_f_f_f(dst, src, src2, src3)) } inst_msub_d_f_f_f_f :: #force_inline proc "contextless" (dst: FPR, src: FPR, src2: FPR, src3: FPR) -> Instruction { return Instruction{mnemonic = .MSUB_D, operand_count = 4, length = 4, ops = {op_fpr(dst), op_fpr(src), op_fpr(src2), op_fpr(src3)}} } -emit_msub_d_f_f_f_f :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: FPR, src: FPR, src2: FPR, src3: FPR) { append(instructions, inst_msub_d_f_f_f_f(dst, src, src2, src3)) } +emit_msub_d_f_f_f_f :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: FPR, src: FPR, src2: FPR, src3: FPR) { append_elem(instructions, inst_msub_d_f_f_f_f(dst, src, src2, src3)) } inst_msub_ps_f_f_f_f :: #force_inline proc "contextless" (dst: FPR, src: FPR, src2: FPR, src3: FPR) -> Instruction { return Instruction{mnemonic = .MSUB_PS, operand_count = 4, length = 4, ops = {op_fpr(dst), op_fpr(src), op_fpr(src2), op_fpr(src3)}} } -emit_msub_ps_f_f_f_f :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: FPR, src: FPR, src2: FPR, src3: FPR) { append(instructions, inst_msub_ps_f_f_f_f(dst, src, src2, src3)) } +emit_msub_ps_f_f_f_f :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: FPR, src: FPR, src2: FPR, src3: FPR) { append_elem(instructions, inst_msub_ps_f_f_f_f(dst, src, src2, src3)) } inst_nmadd_s_f_f_f_f :: #force_inline proc "contextless" (dst: FPR, src: FPR, src2: FPR, src3: FPR) -> Instruction { return Instruction{mnemonic = .NMADD_S, operand_count = 4, length = 4, ops = {op_fpr(dst), op_fpr(src), op_fpr(src2), op_fpr(src3)}} } -emit_nmadd_s_f_f_f_f :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: FPR, src: FPR, src2: FPR, src3: FPR) { append(instructions, inst_nmadd_s_f_f_f_f(dst, src, src2, src3)) } +emit_nmadd_s_f_f_f_f :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: FPR, src: FPR, src2: FPR, src3: FPR) { append_elem(instructions, inst_nmadd_s_f_f_f_f(dst, src, src2, src3)) } inst_nmadd_d_f_f_f_f :: #force_inline proc "contextless" (dst: FPR, src: FPR, src2: FPR, src3: FPR) -> Instruction { return Instruction{mnemonic = .NMADD_D, operand_count = 4, length = 4, ops = {op_fpr(dst), op_fpr(src), op_fpr(src2), op_fpr(src3)}} } -emit_nmadd_d_f_f_f_f :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: FPR, src: FPR, src2: FPR, src3: FPR) { append(instructions, inst_nmadd_d_f_f_f_f(dst, src, src2, src3)) } +emit_nmadd_d_f_f_f_f :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: FPR, src: FPR, src2: FPR, src3: FPR) { append_elem(instructions, inst_nmadd_d_f_f_f_f(dst, src, src2, src3)) } inst_nmadd_ps_f_f_f_f :: #force_inline proc "contextless" (dst: FPR, src: FPR, src2: FPR, src3: FPR) -> Instruction { return Instruction{mnemonic = .NMADD_PS, operand_count = 4, length = 4, ops = {op_fpr(dst), op_fpr(src), op_fpr(src2), op_fpr(src3)}} } -emit_nmadd_ps_f_f_f_f :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: FPR, src: FPR, src2: FPR, src3: FPR) { append(instructions, inst_nmadd_ps_f_f_f_f(dst, src, src2, src3)) } +emit_nmadd_ps_f_f_f_f :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: FPR, src: FPR, src2: FPR, src3: FPR) { append_elem(instructions, inst_nmadd_ps_f_f_f_f(dst, src, src2, src3)) } inst_nmsub_s_f_f_f_f :: #force_inline proc "contextless" (dst: FPR, src: FPR, src2: FPR, src3: FPR) -> Instruction { return Instruction{mnemonic = .NMSUB_S, operand_count = 4, length = 4, ops = {op_fpr(dst), op_fpr(src), op_fpr(src2), op_fpr(src3)}} } -emit_nmsub_s_f_f_f_f :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: FPR, src: FPR, src2: FPR, src3: FPR) { append(instructions, inst_nmsub_s_f_f_f_f(dst, src, src2, src3)) } +emit_nmsub_s_f_f_f_f :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: FPR, src: FPR, src2: FPR, src3: FPR) { append_elem(instructions, inst_nmsub_s_f_f_f_f(dst, src, src2, src3)) } inst_nmsub_d_f_f_f_f :: #force_inline proc "contextless" (dst: FPR, src: FPR, src2: FPR, src3: FPR) -> Instruction { return Instruction{mnemonic = .NMSUB_D, operand_count = 4, length = 4, ops = {op_fpr(dst), op_fpr(src), op_fpr(src2), op_fpr(src3)}} } -emit_nmsub_d_f_f_f_f :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: FPR, src: FPR, src2: FPR, src3: FPR) { append(instructions, inst_nmsub_d_f_f_f_f(dst, src, src2, src3)) } +emit_nmsub_d_f_f_f_f :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: FPR, src: FPR, src2: FPR, src3: FPR) { append_elem(instructions, inst_nmsub_d_f_f_f_f(dst, src, src2, src3)) } inst_nmsub_ps_f_f_f_f :: #force_inline proc "contextless" (dst: FPR, src: FPR, src2: FPR, src3: FPR) -> Instruction { return Instruction{mnemonic = .NMSUB_PS, operand_count = 4, length = 4, ops = {op_fpr(dst), op_fpr(src), op_fpr(src2), op_fpr(src3)}} } -emit_nmsub_ps_f_f_f_f :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: FPR, src: FPR, src2: FPR, src3: FPR) { append(instructions, inst_nmsub_ps_f_f_f_f(dst, src, src2, src3)) } +emit_nmsub_ps_f_f_f_f :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: FPR, src: FPR, src2: FPR, src3: FPR) { append_elem(instructions, inst_nmsub_ps_f_f_f_f(dst, src, src2, src3)) } inst_movn_s_f_f_r :: #force_inline proc "contextless" (dst: FPR, src: FPR, src2: GPR) -> Instruction { return Instruction{mnemonic = .MOVN_S, operand_count = 3, length = 4, ops = {op_fpr(dst), op_fpr(src), op_gpr(src2), {}}} } -emit_movn_s_f_f_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: FPR, src: FPR, src2: GPR) { append(instructions, inst_movn_s_f_f_r(dst, src, src2)) } +emit_movn_s_f_f_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: FPR, src: FPR, src2: GPR) { append_elem(instructions, inst_movn_s_f_f_r(dst, src, src2)) } inst_movn_d_f_f_r :: #force_inline proc "contextless" (dst: FPR, src: FPR, src2: GPR) -> Instruction { return Instruction{mnemonic = .MOVN_D, operand_count = 3, length = 4, ops = {op_fpr(dst), op_fpr(src), op_gpr(src2), {}}} } -emit_movn_d_f_f_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: FPR, src: FPR, src2: GPR) { append(instructions, inst_movn_d_f_f_r(dst, src, src2)) } +emit_movn_d_f_f_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: FPR, src: FPR, src2: GPR) { append_elem(instructions, inst_movn_d_f_f_r(dst, src, src2)) } inst_movn_ps_f_f_r :: #force_inline proc "contextless" (dst: FPR, src: FPR, src2: GPR) -> Instruction { return Instruction{mnemonic = .MOVN_PS, operand_count = 3, length = 4, ops = {op_fpr(dst), op_fpr(src), op_gpr(src2), {}}} } -emit_movn_ps_f_f_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: FPR, src: FPR, src2: GPR) { append(instructions, inst_movn_ps_f_f_r(dst, src, src2)) } +emit_movn_ps_f_f_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: FPR, src: FPR, src2: GPR) { append_elem(instructions, inst_movn_ps_f_f_r(dst, src, src2)) } inst_movz_s_f_f_r :: #force_inline proc "contextless" (dst: FPR, src: FPR, src2: GPR) -> Instruction { return Instruction{mnemonic = .MOVZ_S, operand_count = 3, length = 4, ops = {op_fpr(dst), op_fpr(src), op_gpr(src2), {}}} } -emit_movz_s_f_f_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: FPR, src: FPR, src2: GPR) { append(instructions, inst_movz_s_f_f_r(dst, src, src2)) } +emit_movz_s_f_f_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: FPR, src: FPR, src2: GPR) { append_elem(instructions, inst_movz_s_f_f_r(dst, src, src2)) } inst_movz_d_f_f_r :: #force_inline proc "contextless" (dst: FPR, src: FPR, src2: GPR) -> Instruction { return Instruction{mnemonic = .MOVZ_D, operand_count = 3, length = 4, ops = {op_fpr(dst), op_fpr(src), op_gpr(src2), {}}} } -emit_movz_d_f_f_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: FPR, src: FPR, src2: GPR) { append(instructions, inst_movz_d_f_f_r(dst, src, src2)) } +emit_movz_d_f_f_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: FPR, src: FPR, src2: GPR) { append_elem(instructions, inst_movz_d_f_f_r(dst, src, src2)) } inst_movz_ps_f_f_r :: #force_inline proc "contextless" (dst: FPR, src: FPR, src2: GPR) -> Instruction { return Instruction{mnemonic = .MOVZ_PS, operand_count = 3, length = 4, ops = {op_fpr(dst), op_fpr(src), op_gpr(src2), {}}} } -emit_movz_ps_f_f_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: FPR, src: FPR, src2: GPR) { append(instructions, inst_movz_ps_f_f_r(dst, src, src2)) } +emit_movz_ps_f_f_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: FPR, src: FPR, src2: GPR) { append_elem(instructions, inst_movz_ps_f_f_r(dst, src, src2)) } inst_movf_s_f_f_cc :: #force_inline proc "contextless" (dst: FPR, src: FPR, imm: i64) -> Instruction { return Instruction{mnemonic = .MOVF_S, operand_count = 3, length = 4, ops = {op_fpr(dst), op_fpr(src), op_imm(imm, 1), {}}} } -emit_movf_s_f_f_cc :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: FPR, src: FPR, imm: i64) { append(instructions, inst_movf_s_f_f_cc(dst, src, imm)) } +emit_movf_s_f_f_cc :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: FPR, src: FPR, imm: i64) { append_elem(instructions, inst_movf_s_f_f_cc(dst, src, imm)) } inst_movf_d_f_f_cc :: #force_inline proc "contextless" (dst: FPR, src: FPR, imm: i64) -> Instruction { return Instruction{mnemonic = .MOVF_D, operand_count = 3, length = 4, ops = {op_fpr(dst), op_fpr(src), op_imm(imm, 1), {}}} } -emit_movf_d_f_f_cc :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: FPR, src: FPR, imm: i64) { append(instructions, inst_movf_d_f_f_cc(dst, src, imm)) } +emit_movf_d_f_f_cc :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: FPR, src: FPR, imm: i64) { append_elem(instructions, inst_movf_d_f_f_cc(dst, src, imm)) } inst_movf_ps_f_f_cc :: #force_inline proc "contextless" (dst: FPR, src: FPR, imm: i64) -> Instruction { return Instruction{mnemonic = .MOVF_PS, operand_count = 3, length = 4, ops = {op_fpr(dst), op_fpr(src), op_imm(imm, 1), {}}} } -emit_movf_ps_f_f_cc :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: FPR, src: FPR, imm: i64) { append(instructions, inst_movf_ps_f_f_cc(dst, src, imm)) } +emit_movf_ps_f_f_cc :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: FPR, src: FPR, imm: i64) { append_elem(instructions, inst_movf_ps_f_f_cc(dst, src, imm)) } inst_movt_s_f_f_cc :: #force_inline proc "contextless" (dst: FPR, src: FPR, imm: i64) -> Instruction { return Instruction{mnemonic = .MOVT_S, operand_count = 3, length = 4, ops = {op_fpr(dst), op_fpr(src), op_imm(imm, 1), {}}} } -emit_movt_s_f_f_cc :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: FPR, src: FPR, imm: i64) { append(instructions, inst_movt_s_f_f_cc(dst, src, imm)) } +emit_movt_s_f_f_cc :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: FPR, src: FPR, imm: i64) { append_elem(instructions, inst_movt_s_f_f_cc(dst, src, imm)) } inst_movt_d_f_f_cc :: #force_inline proc "contextless" (dst: FPR, src: FPR, imm: i64) -> Instruction { return Instruction{mnemonic = .MOVT_D, operand_count = 3, length = 4, ops = {op_fpr(dst), op_fpr(src), op_imm(imm, 1), {}}} } -emit_movt_d_f_f_cc :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: FPR, src: FPR, imm: i64) { append(instructions, inst_movt_d_f_f_cc(dst, src, imm)) } +emit_movt_d_f_f_cc :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: FPR, src: FPR, imm: i64) { append_elem(instructions, inst_movt_d_f_f_cc(dst, src, imm)) } inst_movt_ps_f_f_cc :: #force_inline proc "contextless" (dst: FPR, src: FPR, imm: i64) -> Instruction { return Instruction{mnemonic = .MOVT_PS, operand_count = 3, length = 4, ops = {op_fpr(dst), op_fpr(src), op_imm(imm, 1), {}}} } -emit_movt_ps_f_f_cc :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: FPR, src: FPR, imm: i64) { append(instructions, inst_movt_ps_f_f_cc(dst, src, imm)) } +emit_movt_ps_f_f_cc :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: FPR, src: FPR, imm: i64) { append_elem(instructions, inst_movt_ps_f_f_cc(dst, src, imm)) } inst_cvt_s_d_f_f :: #force_inline proc "contextless" (dst: FPR, src: FPR) -> Instruction { return Instruction{mnemonic = .CVT_S_D, operand_count = 2, length = 4, ops = {op_fpr(dst), op_fpr(src), {}, {}}} } -emit_cvt_s_d_f_f :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: FPR, src: FPR) { append(instructions, inst_cvt_s_d_f_f(dst, src)) } +emit_cvt_s_d_f_f :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: FPR, src: FPR) { append_elem(instructions, inst_cvt_s_d_f_f(dst, src)) } inst_cvt_s_w_f_f :: #force_inline proc "contextless" (dst: FPR, src: FPR) -> Instruction { return Instruction{mnemonic = .CVT_S_W, operand_count = 2, length = 4, ops = {op_fpr(dst), op_fpr(src), {}, {}}} } -emit_cvt_s_w_f_f :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: FPR, src: FPR) { append(instructions, inst_cvt_s_w_f_f(dst, src)) } +emit_cvt_s_w_f_f :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: FPR, src: FPR) { append_elem(instructions, inst_cvt_s_w_f_f(dst, src)) } inst_cvt_s_l_f_f :: #force_inline proc "contextless" (dst: FPR, src: FPR) -> Instruction { return Instruction{mnemonic = .CVT_S_L, operand_count = 2, length = 4, ops = {op_fpr(dst), op_fpr(src), {}, {}}} } -emit_cvt_s_l_f_f :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: FPR, src: FPR) { append(instructions, inst_cvt_s_l_f_f(dst, src)) } +emit_cvt_s_l_f_f :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: FPR, src: FPR) { append_elem(instructions, inst_cvt_s_l_f_f(dst, src)) } inst_cvt_d_s_f_f :: #force_inline proc "contextless" (dst: FPR, src: FPR) -> Instruction { return Instruction{mnemonic = .CVT_D_S, operand_count = 2, length = 4, ops = {op_fpr(dst), op_fpr(src), {}, {}}} } -emit_cvt_d_s_f_f :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: FPR, src: FPR) { append(instructions, inst_cvt_d_s_f_f(dst, src)) } +emit_cvt_d_s_f_f :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: FPR, src: FPR) { append_elem(instructions, inst_cvt_d_s_f_f(dst, src)) } inst_cvt_d_w_f_f :: #force_inline proc "contextless" (dst: FPR, src: FPR) -> Instruction { return Instruction{mnemonic = .CVT_D_W, operand_count = 2, length = 4, ops = {op_fpr(dst), op_fpr(src), {}, {}}} } -emit_cvt_d_w_f_f :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: FPR, src: FPR) { append(instructions, inst_cvt_d_w_f_f(dst, src)) } +emit_cvt_d_w_f_f :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: FPR, src: FPR) { append_elem(instructions, inst_cvt_d_w_f_f(dst, src)) } inst_cvt_d_l_f_f :: #force_inline proc "contextless" (dst: FPR, src: FPR) -> Instruction { return Instruction{mnemonic = .CVT_D_L, operand_count = 2, length = 4, ops = {op_fpr(dst), op_fpr(src), {}, {}}} } -emit_cvt_d_l_f_f :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: FPR, src: FPR) { append(instructions, inst_cvt_d_l_f_f(dst, src)) } +emit_cvt_d_l_f_f :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: FPR, src: FPR) { append_elem(instructions, inst_cvt_d_l_f_f(dst, src)) } inst_cvt_w_s_f_f :: #force_inline proc "contextless" (dst: FPR, src: FPR) -> Instruction { return Instruction{mnemonic = .CVT_W_S, operand_count = 2, length = 4, ops = {op_fpr(dst), op_fpr(src), {}, {}}} } -emit_cvt_w_s_f_f :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: FPR, src: FPR) { append(instructions, inst_cvt_w_s_f_f(dst, src)) } +emit_cvt_w_s_f_f :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: FPR, src: FPR) { append_elem(instructions, inst_cvt_w_s_f_f(dst, src)) } inst_cvt_w_d_f_f :: #force_inline proc "contextless" (dst: FPR, src: FPR) -> Instruction { return Instruction{mnemonic = .CVT_W_D, operand_count = 2, length = 4, ops = {op_fpr(dst), op_fpr(src), {}, {}}} } -emit_cvt_w_d_f_f :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: FPR, src: FPR) { append(instructions, inst_cvt_w_d_f_f(dst, src)) } +emit_cvt_w_d_f_f :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: FPR, src: FPR) { append_elem(instructions, inst_cvt_w_d_f_f(dst, src)) } inst_cvt_l_s_f_f :: #force_inline proc "contextless" (dst: FPR, src: FPR) -> Instruction { return Instruction{mnemonic = .CVT_L_S, operand_count = 2, length = 4, ops = {op_fpr(dst), op_fpr(src), {}, {}}} } -emit_cvt_l_s_f_f :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: FPR, src: FPR) { append(instructions, inst_cvt_l_s_f_f(dst, src)) } +emit_cvt_l_s_f_f :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: FPR, src: FPR) { append_elem(instructions, inst_cvt_l_s_f_f(dst, src)) } inst_cvt_l_d_f_f :: #force_inline proc "contextless" (dst: FPR, src: FPR) -> Instruction { return Instruction{mnemonic = .CVT_L_D, operand_count = 2, length = 4, ops = {op_fpr(dst), op_fpr(src), {}, {}}} } -emit_cvt_l_d_f_f :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: FPR, src: FPR) { append(instructions, inst_cvt_l_d_f_f(dst, src)) } +emit_cvt_l_d_f_f :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: FPR, src: FPR) { append_elem(instructions, inst_cvt_l_d_f_f(dst, src)) } inst_cvt_ps_s_f_f_f :: #force_inline proc "contextless" (dst: FPR, src: FPR, src2: FPR) -> Instruction { return Instruction{mnemonic = .CVT_PS_S, operand_count = 3, length = 4, ops = {op_fpr(dst), op_fpr(src), op_fpr(src2), {}}} } -emit_cvt_ps_s_f_f_f :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: FPR, src: FPR, src2: FPR) { append(instructions, inst_cvt_ps_s_f_f_f(dst, src, src2)) } +emit_cvt_ps_s_f_f_f :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: FPR, src: FPR, src2: FPR) { append_elem(instructions, inst_cvt_ps_s_f_f_f(dst, src, src2)) } inst_cvt_s_pu_f_f :: #force_inline proc "contextless" (dst: FPR, src: FPR) -> Instruction { return Instruction{mnemonic = .CVT_S_PU, operand_count = 2, length = 4, ops = {op_fpr(dst), op_fpr(src), {}, {}}} } -emit_cvt_s_pu_f_f :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: FPR, src: FPR) { append(instructions, inst_cvt_s_pu_f_f(dst, src)) } +emit_cvt_s_pu_f_f :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: FPR, src: FPR) { append_elem(instructions, inst_cvt_s_pu_f_f(dst, src)) } inst_cvt_s_pl_f_f :: #force_inline proc "contextless" (dst: FPR, src: FPR) -> Instruction { return Instruction{mnemonic = .CVT_S_PL, operand_count = 2, length = 4, ops = {op_fpr(dst), op_fpr(src), {}, {}}} } -emit_cvt_s_pl_f_f :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: FPR, src: FPR) { append(instructions, inst_cvt_s_pl_f_f(dst, src)) } +emit_cvt_s_pl_f_f :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: FPR, src: FPR) { append_elem(instructions, inst_cvt_s_pl_f_f(dst, src)) } inst_pll_ps_f_f_f :: #force_inline proc "contextless" (dst: FPR, src: FPR, src2: FPR) -> Instruction { return Instruction{mnemonic = .PLL_PS, operand_count = 3, length = 4, ops = {op_fpr(dst), op_fpr(src), op_fpr(src2), {}}} } -emit_pll_ps_f_f_f :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: FPR, src: FPR, src2: FPR) { append(instructions, inst_pll_ps_f_f_f(dst, src, src2)) } +emit_pll_ps_f_f_f :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: FPR, src: FPR, src2: FPR) { append_elem(instructions, inst_pll_ps_f_f_f(dst, src, src2)) } inst_plu_ps_f_f_f :: #force_inline proc "contextless" (dst: FPR, src: FPR, src2: FPR) -> Instruction { return Instruction{mnemonic = .PLU_PS, operand_count = 3, length = 4, ops = {op_fpr(dst), op_fpr(src), op_fpr(src2), {}}} } -emit_plu_ps_f_f_f :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: FPR, src: FPR, src2: FPR) { append(instructions, inst_plu_ps_f_f_f(dst, src, src2)) } +emit_plu_ps_f_f_f :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: FPR, src: FPR, src2: FPR) { append_elem(instructions, inst_plu_ps_f_f_f(dst, src, src2)) } inst_pul_ps_f_f_f :: #force_inline proc "contextless" (dst: FPR, src: FPR, src2: FPR) -> Instruction { return Instruction{mnemonic = .PUL_PS, operand_count = 3, length = 4, ops = {op_fpr(dst), op_fpr(src), op_fpr(src2), {}}} } -emit_pul_ps_f_f_f :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: FPR, src: FPR, src2: FPR) { append(instructions, inst_pul_ps_f_f_f(dst, src, src2)) } +emit_pul_ps_f_f_f :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: FPR, src: FPR, src2: FPR) { append_elem(instructions, inst_pul_ps_f_f_f(dst, src, src2)) } inst_puu_ps_f_f_f :: #force_inline proc "contextless" (dst: FPR, src: FPR, src2: FPR) -> Instruction { return Instruction{mnemonic = .PUU_PS, operand_count = 3, length = 4, ops = {op_fpr(dst), op_fpr(src), op_fpr(src2), {}}} } -emit_puu_ps_f_f_f :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: FPR, src: FPR, src2: FPR) { append(instructions, inst_puu_ps_f_f_f(dst, src, src2)) } +emit_puu_ps_f_f_f :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: FPR, src: FPR, src2: FPR) { append_elem(instructions, inst_puu_ps_f_f_f(dst, src, src2)) } inst_round_w_s_f_f :: #force_inline proc "contextless" (dst: FPR, src: FPR) -> Instruction { return Instruction{mnemonic = .ROUND_W_S, operand_count = 2, length = 4, ops = {op_fpr(dst), op_fpr(src), {}, {}}} } -emit_round_w_s_f_f :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: FPR, src: FPR) { append(instructions, inst_round_w_s_f_f(dst, src)) } +emit_round_w_s_f_f :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: FPR, src: FPR) { append_elem(instructions, inst_round_w_s_f_f(dst, src)) } inst_round_w_d_f_f :: #force_inline proc "contextless" (dst: FPR, src: FPR) -> Instruction { return Instruction{mnemonic = .ROUND_W_D, operand_count = 2, length = 4, ops = {op_fpr(dst), op_fpr(src), {}, {}}} } -emit_round_w_d_f_f :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: FPR, src: FPR) { append(instructions, inst_round_w_d_f_f(dst, src)) } +emit_round_w_d_f_f :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: FPR, src: FPR) { append_elem(instructions, inst_round_w_d_f_f(dst, src)) } inst_round_l_s_f_f :: #force_inline proc "contextless" (dst: FPR, src: FPR) -> Instruction { return Instruction{mnemonic = .ROUND_L_S, operand_count = 2, length = 4, ops = {op_fpr(dst), op_fpr(src), {}, {}}} } -emit_round_l_s_f_f :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: FPR, src: FPR) { append(instructions, inst_round_l_s_f_f(dst, src)) } +emit_round_l_s_f_f :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: FPR, src: FPR) { append_elem(instructions, inst_round_l_s_f_f(dst, src)) } inst_round_l_d_f_f :: #force_inline proc "contextless" (dst: FPR, src: FPR) -> Instruction { return Instruction{mnemonic = .ROUND_L_D, operand_count = 2, length = 4, ops = {op_fpr(dst), op_fpr(src), {}, {}}} } -emit_round_l_d_f_f :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: FPR, src: FPR) { append(instructions, inst_round_l_d_f_f(dst, src)) } +emit_round_l_d_f_f :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: FPR, src: FPR) { append_elem(instructions, inst_round_l_d_f_f(dst, src)) } inst_trunc_w_s_f_f :: #force_inline proc "contextless" (dst: FPR, src: FPR) -> Instruction { return Instruction{mnemonic = .TRUNC_W_S, operand_count = 2, length = 4, ops = {op_fpr(dst), op_fpr(src), {}, {}}} } -emit_trunc_w_s_f_f :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: FPR, src: FPR) { append(instructions, inst_trunc_w_s_f_f(dst, src)) } +emit_trunc_w_s_f_f :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: FPR, src: FPR) { append_elem(instructions, inst_trunc_w_s_f_f(dst, src)) } inst_trunc_w_d_f_f :: #force_inline proc "contextless" (dst: FPR, src: FPR) -> Instruction { return Instruction{mnemonic = .TRUNC_W_D, operand_count = 2, length = 4, ops = {op_fpr(dst), op_fpr(src), {}, {}}} } -emit_trunc_w_d_f_f :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: FPR, src: FPR) { append(instructions, inst_trunc_w_d_f_f(dst, src)) } +emit_trunc_w_d_f_f :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: FPR, src: FPR) { append_elem(instructions, inst_trunc_w_d_f_f(dst, src)) } inst_trunc_l_s_f_f :: #force_inline proc "contextless" (dst: FPR, src: FPR) -> Instruction { return Instruction{mnemonic = .TRUNC_L_S, operand_count = 2, length = 4, ops = {op_fpr(dst), op_fpr(src), {}, {}}} } -emit_trunc_l_s_f_f :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: FPR, src: FPR) { append(instructions, inst_trunc_l_s_f_f(dst, src)) } +emit_trunc_l_s_f_f :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: FPR, src: FPR) { append_elem(instructions, inst_trunc_l_s_f_f(dst, src)) } inst_trunc_l_d_f_f :: #force_inline proc "contextless" (dst: FPR, src: FPR) -> Instruction { return Instruction{mnemonic = .TRUNC_L_D, operand_count = 2, length = 4, ops = {op_fpr(dst), op_fpr(src), {}, {}}} } -emit_trunc_l_d_f_f :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: FPR, src: FPR) { append(instructions, inst_trunc_l_d_f_f(dst, src)) } +emit_trunc_l_d_f_f :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: FPR, src: FPR) { append_elem(instructions, inst_trunc_l_d_f_f(dst, src)) } inst_ceil_w_s_f_f :: #force_inline proc "contextless" (dst: FPR, src: FPR) -> Instruction { return Instruction{mnemonic = .CEIL_W_S, operand_count = 2, length = 4, ops = {op_fpr(dst), op_fpr(src), {}, {}}} } -emit_ceil_w_s_f_f :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: FPR, src: FPR) { append(instructions, inst_ceil_w_s_f_f(dst, src)) } +emit_ceil_w_s_f_f :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: FPR, src: FPR) { append_elem(instructions, inst_ceil_w_s_f_f(dst, src)) } inst_ceil_w_d_f_f :: #force_inline proc "contextless" (dst: FPR, src: FPR) -> Instruction { return Instruction{mnemonic = .CEIL_W_D, operand_count = 2, length = 4, ops = {op_fpr(dst), op_fpr(src), {}, {}}} } -emit_ceil_w_d_f_f :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: FPR, src: FPR) { append(instructions, inst_ceil_w_d_f_f(dst, src)) } +emit_ceil_w_d_f_f :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: FPR, src: FPR) { append_elem(instructions, inst_ceil_w_d_f_f(dst, src)) } inst_ceil_l_s_f_f :: #force_inline proc "contextless" (dst: FPR, src: FPR) -> Instruction { return Instruction{mnemonic = .CEIL_L_S, operand_count = 2, length = 4, ops = {op_fpr(dst), op_fpr(src), {}, {}}} } -emit_ceil_l_s_f_f :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: FPR, src: FPR) { append(instructions, inst_ceil_l_s_f_f(dst, src)) } +emit_ceil_l_s_f_f :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: FPR, src: FPR) { append_elem(instructions, inst_ceil_l_s_f_f(dst, src)) } inst_ceil_l_d_f_f :: #force_inline proc "contextless" (dst: FPR, src: FPR) -> Instruction { return Instruction{mnemonic = .CEIL_L_D, operand_count = 2, length = 4, ops = {op_fpr(dst), op_fpr(src), {}, {}}} } -emit_ceil_l_d_f_f :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: FPR, src: FPR) { append(instructions, inst_ceil_l_d_f_f(dst, src)) } +emit_ceil_l_d_f_f :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: FPR, src: FPR) { append_elem(instructions, inst_ceil_l_d_f_f(dst, src)) } inst_floor_w_s_f_f :: #force_inline proc "contextless" (dst: FPR, src: FPR) -> Instruction { return Instruction{mnemonic = .FLOOR_W_S, operand_count = 2, length = 4, ops = {op_fpr(dst), op_fpr(src), {}, {}}} } -emit_floor_w_s_f_f :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: FPR, src: FPR) { append(instructions, inst_floor_w_s_f_f(dst, src)) } +emit_floor_w_s_f_f :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: FPR, src: FPR) { append_elem(instructions, inst_floor_w_s_f_f(dst, src)) } inst_floor_w_d_f_f :: #force_inline proc "contextless" (dst: FPR, src: FPR) -> Instruction { return Instruction{mnemonic = .FLOOR_W_D, operand_count = 2, length = 4, ops = {op_fpr(dst), op_fpr(src), {}, {}}} } -emit_floor_w_d_f_f :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: FPR, src: FPR) { append(instructions, inst_floor_w_d_f_f(dst, src)) } +emit_floor_w_d_f_f :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: FPR, src: FPR) { append_elem(instructions, inst_floor_w_d_f_f(dst, src)) } inst_floor_l_s_f_f :: #force_inline proc "contextless" (dst: FPR, src: FPR) -> Instruction { return Instruction{mnemonic = .FLOOR_L_S, operand_count = 2, length = 4, ops = {op_fpr(dst), op_fpr(src), {}, {}}} } -emit_floor_l_s_f_f :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: FPR, src: FPR) { append(instructions, inst_floor_l_s_f_f(dst, src)) } +emit_floor_l_s_f_f :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: FPR, src: FPR) { append_elem(instructions, inst_floor_l_s_f_f(dst, src)) } inst_floor_l_d_f_f :: #force_inline proc "contextless" (dst: FPR, src: FPR) -> Instruction { return Instruction{mnemonic = .FLOOR_L_D, operand_count = 2, length = 4, ops = {op_fpr(dst), op_fpr(src), {}, {}}} } -emit_floor_l_d_f_f :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: FPR, src: FPR) { append(instructions, inst_floor_l_d_f_f(dst, src)) } +emit_floor_l_d_f_f :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: FPR, src: FPR) { append_elem(instructions, inst_floor_l_d_f_f(dst, src)) } inst_c_f_s_f_f_cc :: #force_inline proc "contextless" (dst: FPR, src: FPR, imm: i64) -> Instruction { return Instruction{mnemonic = .C_F_S, operand_count = 3, length = 4, ops = {op_fpr(dst), op_fpr(src), op_imm(imm, 1), {}}} } -emit_c_f_s_f_f_cc :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: FPR, src: FPR, imm: i64) { append(instructions, inst_c_f_s_f_f_cc(dst, src, imm)) } +emit_c_f_s_f_f_cc :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: FPR, src: FPR, imm: i64) { append_elem(instructions, inst_c_f_s_f_f_cc(dst, src, imm)) } inst_c_f_d_f_f_cc :: #force_inline proc "contextless" (dst: FPR, src: FPR, imm: i64) -> Instruction { return Instruction{mnemonic = .C_F_D, operand_count = 3, length = 4, ops = {op_fpr(dst), op_fpr(src), op_imm(imm, 1), {}}} } -emit_c_f_d_f_f_cc :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: FPR, src: FPR, imm: i64) { append(instructions, inst_c_f_d_f_f_cc(dst, src, imm)) } +emit_c_f_d_f_f_cc :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: FPR, src: FPR, imm: i64) { append_elem(instructions, inst_c_f_d_f_f_cc(dst, src, imm)) } inst_c_f_ps_f_f_cc :: #force_inline proc "contextless" (dst: FPR, src: FPR, imm: i64) -> Instruction { return Instruction{mnemonic = .C_F_PS, operand_count = 3, length = 4, ops = {op_fpr(dst), op_fpr(src), op_imm(imm, 1), {}}} } -emit_c_f_ps_f_f_cc :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: FPR, src: FPR, imm: i64) { append(instructions, inst_c_f_ps_f_f_cc(dst, src, imm)) } +emit_c_f_ps_f_f_cc :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: FPR, src: FPR, imm: i64) { append_elem(instructions, inst_c_f_ps_f_f_cc(dst, src, imm)) } inst_c_un_s_f_f_cc :: #force_inline proc "contextless" (dst: FPR, src: FPR, imm: i64) -> Instruction { return Instruction{mnemonic = .C_UN_S, operand_count = 3, length = 4, ops = {op_fpr(dst), op_fpr(src), op_imm(imm, 1), {}}} } -emit_c_un_s_f_f_cc :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: FPR, src: FPR, imm: i64) { append(instructions, inst_c_un_s_f_f_cc(dst, src, imm)) } +emit_c_un_s_f_f_cc :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: FPR, src: FPR, imm: i64) { append_elem(instructions, inst_c_un_s_f_f_cc(dst, src, imm)) } inst_c_un_d_f_f_cc :: #force_inline proc "contextless" (dst: FPR, src: FPR, imm: i64) -> Instruction { return Instruction{mnemonic = .C_UN_D, operand_count = 3, length = 4, ops = {op_fpr(dst), op_fpr(src), op_imm(imm, 1), {}}} } -emit_c_un_d_f_f_cc :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: FPR, src: FPR, imm: i64) { append(instructions, inst_c_un_d_f_f_cc(dst, src, imm)) } +emit_c_un_d_f_f_cc :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: FPR, src: FPR, imm: i64) { append_elem(instructions, inst_c_un_d_f_f_cc(dst, src, imm)) } inst_c_un_ps_f_f_cc :: #force_inline proc "contextless" (dst: FPR, src: FPR, imm: i64) -> Instruction { return Instruction{mnemonic = .C_UN_PS, operand_count = 3, length = 4, ops = {op_fpr(dst), op_fpr(src), op_imm(imm, 1), {}}} } -emit_c_un_ps_f_f_cc :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: FPR, src: FPR, imm: i64) { append(instructions, inst_c_un_ps_f_f_cc(dst, src, imm)) } +emit_c_un_ps_f_f_cc :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: FPR, src: FPR, imm: i64) { append_elem(instructions, inst_c_un_ps_f_f_cc(dst, src, imm)) } inst_c_eq_s_f_f_cc :: #force_inline proc "contextless" (dst: FPR, src: FPR, imm: i64) -> Instruction { return Instruction{mnemonic = .C_EQ_S, operand_count = 3, length = 4, ops = {op_fpr(dst), op_fpr(src), op_imm(imm, 1), {}}} } -emit_c_eq_s_f_f_cc :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: FPR, src: FPR, imm: i64) { append(instructions, inst_c_eq_s_f_f_cc(dst, src, imm)) } +emit_c_eq_s_f_f_cc :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: FPR, src: FPR, imm: i64) { append_elem(instructions, inst_c_eq_s_f_f_cc(dst, src, imm)) } inst_c_eq_d_f_f_cc :: #force_inline proc "contextless" (dst: FPR, src: FPR, imm: i64) -> Instruction { return Instruction{mnemonic = .C_EQ_D, operand_count = 3, length = 4, ops = {op_fpr(dst), op_fpr(src), op_imm(imm, 1), {}}} } -emit_c_eq_d_f_f_cc :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: FPR, src: FPR, imm: i64) { append(instructions, inst_c_eq_d_f_f_cc(dst, src, imm)) } +emit_c_eq_d_f_f_cc :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: FPR, src: FPR, imm: i64) { append_elem(instructions, inst_c_eq_d_f_f_cc(dst, src, imm)) } inst_c_eq_ps_f_f_cc :: #force_inline proc "contextless" (dst: FPR, src: FPR, imm: i64) -> Instruction { return Instruction{mnemonic = .C_EQ_PS, operand_count = 3, length = 4, ops = {op_fpr(dst), op_fpr(src), op_imm(imm, 1), {}}} } -emit_c_eq_ps_f_f_cc :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: FPR, src: FPR, imm: i64) { append(instructions, inst_c_eq_ps_f_f_cc(dst, src, imm)) } +emit_c_eq_ps_f_f_cc :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: FPR, src: FPR, imm: i64) { append_elem(instructions, inst_c_eq_ps_f_f_cc(dst, src, imm)) } inst_c_ueq_s_f_f_cc :: #force_inline proc "contextless" (dst: FPR, src: FPR, imm: i64) -> Instruction { return Instruction{mnemonic = .C_UEQ_S, operand_count = 3, length = 4, ops = {op_fpr(dst), op_fpr(src), op_imm(imm, 1), {}}} } -emit_c_ueq_s_f_f_cc :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: FPR, src: FPR, imm: i64) { append(instructions, inst_c_ueq_s_f_f_cc(dst, src, imm)) } +emit_c_ueq_s_f_f_cc :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: FPR, src: FPR, imm: i64) { append_elem(instructions, inst_c_ueq_s_f_f_cc(dst, src, imm)) } inst_c_ueq_d_f_f_cc :: #force_inline proc "contextless" (dst: FPR, src: FPR, imm: i64) -> Instruction { return Instruction{mnemonic = .C_UEQ_D, operand_count = 3, length = 4, ops = {op_fpr(dst), op_fpr(src), op_imm(imm, 1), {}}} } -emit_c_ueq_d_f_f_cc :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: FPR, src: FPR, imm: i64) { append(instructions, inst_c_ueq_d_f_f_cc(dst, src, imm)) } +emit_c_ueq_d_f_f_cc :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: FPR, src: FPR, imm: i64) { append_elem(instructions, inst_c_ueq_d_f_f_cc(dst, src, imm)) } inst_c_ueq_ps_f_f_cc :: #force_inline proc "contextless" (dst: FPR, src: FPR, imm: i64) -> Instruction { return Instruction{mnemonic = .C_UEQ_PS, operand_count = 3, length = 4, ops = {op_fpr(dst), op_fpr(src), op_imm(imm, 1), {}}} } -emit_c_ueq_ps_f_f_cc :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: FPR, src: FPR, imm: i64) { append(instructions, inst_c_ueq_ps_f_f_cc(dst, src, imm)) } +emit_c_ueq_ps_f_f_cc :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: FPR, src: FPR, imm: i64) { append_elem(instructions, inst_c_ueq_ps_f_f_cc(dst, src, imm)) } inst_c_olt_s_f_f_cc :: #force_inline proc "contextless" (dst: FPR, src: FPR, imm: i64) -> Instruction { return Instruction{mnemonic = .C_OLT_S, operand_count = 3, length = 4, ops = {op_fpr(dst), op_fpr(src), op_imm(imm, 1), {}}} } -emit_c_olt_s_f_f_cc :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: FPR, src: FPR, imm: i64) { append(instructions, inst_c_olt_s_f_f_cc(dst, src, imm)) } +emit_c_olt_s_f_f_cc :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: FPR, src: FPR, imm: i64) { append_elem(instructions, inst_c_olt_s_f_f_cc(dst, src, imm)) } inst_c_olt_d_f_f_cc :: #force_inline proc "contextless" (dst: FPR, src: FPR, imm: i64) -> Instruction { return Instruction{mnemonic = .C_OLT_D, operand_count = 3, length = 4, ops = {op_fpr(dst), op_fpr(src), op_imm(imm, 1), {}}} } -emit_c_olt_d_f_f_cc :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: FPR, src: FPR, imm: i64) { append(instructions, inst_c_olt_d_f_f_cc(dst, src, imm)) } +emit_c_olt_d_f_f_cc :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: FPR, src: FPR, imm: i64) { append_elem(instructions, inst_c_olt_d_f_f_cc(dst, src, imm)) } inst_c_olt_ps_f_f_cc :: #force_inline proc "contextless" (dst: FPR, src: FPR, imm: i64) -> Instruction { return Instruction{mnemonic = .C_OLT_PS, operand_count = 3, length = 4, ops = {op_fpr(dst), op_fpr(src), op_imm(imm, 1), {}}} } -emit_c_olt_ps_f_f_cc :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: FPR, src: FPR, imm: i64) { append(instructions, inst_c_olt_ps_f_f_cc(dst, src, imm)) } +emit_c_olt_ps_f_f_cc :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: FPR, src: FPR, imm: i64) { append_elem(instructions, inst_c_olt_ps_f_f_cc(dst, src, imm)) } inst_c_ult_s_f_f_cc :: #force_inline proc "contextless" (dst: FPR, src: FPR, imm: i64) -> Instruction { return Instruction{mnemonic = .C_ULT_S, operand_count = 3, length = 4, ops = {op_fpr(dst), op_fpr(src), op_imm(imm, 1), {}}} } -emit_c_ult_s_f_f_cc :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: FPR, src: FPR, imm: i64) { append(instructions, inst_c_ult_s_f_f_cc(dst, src, imm)) } +emit_c_ult_s_f_f_cc :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: FPR, src: FPR, imm: i64) { append_elem(instructions, inst_c_ult_s_f_f_cc(dst, src, imm)) } inst_c_ult_d_f_f_cc :: #force_inline proc "contextless" (dst: FPR, src: FPR, imm: i64) -> Instruction { return Instruction{mnemonic = .C_ULT_D, operand_count = 3, length = 4, ops = {op_fpr(dst), op_fpr(src), op_imm(imm, 1), {}}} } -emit_c_ult_d_f_f_cc :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: FPR, src: FPR, imm: i64) { append(instructions, inst_c_ult_d_f_f_cc(dst, src, imm)) } +emit_c_ult_d_f_f_cc :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: FPR, src: FPR, imm: i64) { append_elem(instructions, inst_c_ult_d_f_f_cc(dst, src, imm)) } inst_c_ult_ps_f_f_cc :: #force_inline proc "contextless" (dst: FPR, src: FPR, imm: i64) -> Instruction { return Instruction{mnemonic = .C_ULT_PS, operand_count = 3, length = 4, ops = {op_fpr(dst), op_fpr(src), op_imm(imm, 1), {}}} } -emit_c_ult_ps_f_f_cc :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: FPR, src: FPR, imm: i64) { append(instructions, inst_c_ult_ps_f_f_cc(dst, src, imm)) } +emit_c_ult_ps_f_f_cc :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: FPR, src: FPR, imm: i64) { append_elem(instructions, inst_c_ult_ps_f_f_cc(dst, src, imm)) } inst_c_ole_s_f_f_cc :: #force_inline proc "contextless" (dst: FPR, src: FPR, imm: i64) -> Instruction { return Instruction{mnemonic = .C_OLE_S, operand_count = 3, length = 4, ops = {op_fpr(dst), op_fpr(src), op_imm(imm, 1), {}}} } -emit_c_ole_s_f_f_cc :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: FPR, src: FPR, imm: i64) { append(instructions, inst_c_ole_s_f_f_cc(dst, src, imm)) } +emit_c_ole_s_f_f_cc :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: FPR, src: FPR, imm: i64) { append_elem(instructions, inst_c_ole_s_f_f_cc(dst, src, imm)) } inst_c_ole_d_f_f_cc :: #force_inline proc "contextless" (dst: FPR, src: FPR, imm: i64) -> Instruction { return Instruction{mnemonic = .C_OLE_D, operand_count = 3, length = 4, ops = {op_fpr(dst), op_fpr(src), op_imm(imm, 1), {}}} } -emit_c_ole_d_f_f_cc :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: FPR, src: FPR, imm: i64) { append(instructions, inst_c_ole_d_f_f_cc(dst, src, imm)) } +emit_c_ole_d_f_f_cc :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: FPR, src: FPR, imm: i64) { append_elem(instructions, inst_c_ole_d_f_f_cc(dst, src, imm)) } inst_c_ole_ps_f_f_cc :: #force_inline proc "contextless" (dst: FPR, src: FPR, imm: i64) -> Instruction { return Instruction{mnemonic = .C_OLE_PS, operand_count = 3, length = 4, ops = {op_fpr(dst), op_fpr(src), op_imm(imm, 1), {}}} } -emit_c_ole_ps_f_f_cc :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: FPR, src: FPR, imm: i64) { append(instructions, inst_c_ole_ps_f_f_cc(dst, src, imm)) } +emit_c_ole_ps_f_f_cc :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: FPR, src: FPR, imm: i64) { append_elem(instructions, inst_c_ole_ps_f_f_cc(dst, src, imm)) } inst_c_ule_s_f_f_cc :: #force_inline proc "contextless" (dst: FPR, src: FPR, imm: i64) -> Instruction { return Instruction{mnemonic = .C_ULE_S, operand_count = 3, length = 4, ops = {op_fpr(dst), op_fpr(src), op_imm(imm, 1), {}}} } -emit_c_ule_s_f_f_cc :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: FPR, src: FPR, imm: i64) { append(instructions, inst_c_ule_s_f_f_cc(dst, src, imm)) } +emit_c_ule_s_f_f_cc :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: FPR, src: FPR, imm: i64) { append_elem(instructions, inst_c_ule_s_f_f_cc(dst, src, imm)) } inst_c_ule_d_f_f_cc :: #force_inline proc "contextless" (dst: FPR, src: FPR, imm: i64) -> Instruction { return Instruction{mnemonic = .C_ULE_D, operand_count = 3, length = 4, ops = {op_fpr(dst), op_fpr(src), op_imm(imm, 1), {}}} } -emit_c_ule_d_f_f_cc :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: FPR, src: FPR, imm: i64) { append(instructions, inst_c_ule_d_f_f_cc(dst, src, imm)) } +emit_c_ule_d_f_f_cc :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: FPR, src: FPR, imm: i64) { append_elem(instructions, inst_c_ule_d_f_f_cc(dst, src, imm)) } inst_c_ule_ps_f_f_cc :: #force_inline proc "contextless" (dst: FPR, src: FPR, imm: i64) -> Instruction { return Instruction{mnemonic = .C_ULE_PS, operand_count = 3, length = 4, ops = {op_fpr(dst), op_fpr(src), op_imm(imm, 1), {}}} } -emit_c_ule_ps_f_f_cc :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: FPR, src: FPR, imm: i64) { append(instructions, inst_c_ule_ps_f_f_cc(dst, src, imm)) } +emit_c_ule_ps_f_f_cc :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: FPR, src: FPR, imm: i64) { append_elem(instructions, inst_c_ule_ps_f_f_cc(dst, src, imm)) } inst_c_sf_s_f_f_cc :: #force_inline proc "contextless" (dst: FPR, src: FPR, imm: i64) -> Instruction { return Instruction{mnemonic = .C_SF_S, operand_count = 3, length = 4, ops = {op_fpr(dst), op_fpr(src), op_imm(imm, 1), {}}} } -emit_c_sf_s_f_f_cc :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: FPR, src: FPR, imm: i64) { append(instructions, inst_c_sf_s_f_f_cc(dst, src, imm)) } +emit_c_sf_s_f_f_cc :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: FPR, src: FPR, imm: i64) { append_elem(instructions, inst_c_sf_s_f_f_cc(dst, src, imm)) } inst_c_sf_d_f_f_cc :: #force_inline proc "contextless" (dst: FPR, src: FPR, imm: i64) -> Instruction { return Instruction{mnemonic = .C_SF_D, operand_count = 3, length = 4, ops = {op_fpr(dst), op_fpr(src), op_imm(imm, 1), {}}} } -emit_c_sf_d_f_f_cc :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: FPR, src: FPR, imm: i64) { append(instructions, inst_c_sf_d_f_f_cc(dst, src, imm)) } +emit_c_sf_d_f_f_cc :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: FPR, src: FPR, imm: i64) { append_elem(instructions, inst_c_sf_d_f_f_cc(dst, src, imm)) } inst_c_sf_ps_f_f_cc :: #force_inline proc "contextless" (dst: FPR, src: FPR, imm: i64) -> Instruction { return Instruction{mnemonic = .C_SF_PS, operand_count = 3, length = 4, ops = {op_fpr(dst), op_fpr(src), op_imm(imm, 1), {}}} } -emit_c_sf_ps_f_f_cc :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: FPR, src: FPR, imm: i64) { append(instructions, inst_c_sf_ps_f_f_cc(dst, src, imm)) } +emit_c_sf_ps_f_f_cc :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: FPR, src: FPR, imm: i64) { append_elem(instructions, inst_c_sf_ps_f_f_cc(dst, src, imm)) } inst_c_ngle_s_f_f_cc :: #force_inline proc "contextless" (dst: FPR, src: FPR, imm: i64) -> Instruction { return Instruction{mnemonic = .C_NGLE_S, operand_count = 3, length = 4, ops = {op_fpr(dst), op_fpr(src), op_imm(imm, 1), {}}} } -emit_c_ngle_s_f_f_cc :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: FPR, src: FPR, imm: i64) { append(instructions, inst_c_ngle_s_f_f_cc(dst, src, imm)) } +emit_c_ngle_s_f_f_cc :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: FPR, src: FPR, imm: i64) { append_elem(instructions, inst_c_ngle_s_f_f_cc(dst, src, imm)) } inst_c_ngle_d_f_f_cc :: #force_inline proc "contextless" (dst: FPR, src: FPR, imm: i64) -> Instruction { return Instruction{mnemonic = .C_NGLE_D, operand_count = 3, length = 4, ops = {op_fpr(dst), op_fpr(src), op_imm(imm, 1), {}}} } -emit_c_ngle_d_f_f_cc :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: FPR, src: FPR, imm: i64) { append(instructions, inst_c_ngle_d_f_f_cc(dst, src, imm)) } +emit_c_ngle_d_f_f_cc :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: FPR, src: FPR, imm: i64) { append_elem(instructions, inst_c_ngle_d_f_f_cc(dst, src, imm)) } inst_c_ngle_ps_f_f_cc :: #force_inline proc "contextless" (dst: FPR, src: FPR, imm: i64) -> Instruction { return Instruction{mnemonic = .C_NGLE_PS, operand_count = 3, length = 4, ops = {op_fpr(dst), op_fpr(src), op_imm(imm, 1), {}}} } -emit_c_ngle_ps_f_f_cc :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: FPR, src: FPR, imm: i64) { append(instructions, inst_c_ngle_ps_f_f_cc(dst, src, imm)) } +emit_c_ngle_ps_f_f_cc :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: FPR, src: FPR, imm: i64) { append_elem(instructions, inst_c_ngle_ps_f_f_cc(dst, src, imm)) } inst_c_seq_s_f_f_cc :: #force_inline proc "contextless" (dst: FPR, src: FPR, imm: i64) -> Instruction { return Instruction{mnemonic = .C_SEQ_S, operand_count = 3, length = 4, ops = {op_fpr(dst), op_fpr(src), op_imm(imm, 1), {}}} } -emit_c_seq_s_f_f_cc :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: FPR, src: FPR, imm: i64) { append(instructions, inst_c_seq_s_f_f_cc(dst, src, imm)) } +emit_c_seq_s_f_f_cc :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: FPR, src: FPR, imm: i64) { append_elem(instructions, inst_c_seq_s_f_f_cc(dst, src, imm)) } inst_c_seq_d_f_f_cc :: #force_inline proc "contextless" (dst: FPR, src: FPR, imm: i64) -> Instruction { return Instruction{mnemonic = .C_SEQ_D, operand_count = 3, length = 4, ops = {op_fpr(dst), op_fpr(src), op_imm(imm, 1), {}}} } -emit_c_seq_d_f_f_cc :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: FPR, src: FPR, imm: i64) { append(instructions, inst_c_seq_d_f_f_cc(dst, src, imm)) } +emit_c_seq_d_f_f_cc :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: FPR, src: FPR, imm: i64) { append_elem(instructions, inst_c_seq_d_f_f_cc(dst, src, imm)) } inst_c_seq_ps_f_f_cc :: #force_inline proc "contextless" (dst: FPR, src: FPR, imm: i64) -> Instruction { return Instruction{mnemonic = .C_SEQ_PS, operand_count = 3, length = 4, ops = {op_fpr(dst), op_fpr(src), op_imm(imm, 1), {}}} } -emit_c_seq_ps_f_f_cc :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: FPR, src: FPR, imm: i64) { append(instructions, inst_c_seq_ps_f_f_cc(dst, src, imm)) } +emit_c_seq_ps_f_f_cc :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: FPR, src: FPR, imm: i64) { append_elem(instructions, inst_c_seq_ps_f_f_cc(dst, src, imm)) } inst_c_ngl_s_f_f_cc :: #force_inline proc "contextless" (dst: FPR, src: FPR, imm: i64) -> Instruction { return Instruction{mnemonic = .C_NGL_S, operand_count = 3, length = 4, ops = {op_fpr(dst), op_fpr(src), op_imm(imm, 1), {}}} } -emit_c_ngl_s_f_f_cc :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: FPR, src: FPR, imm: i64) { append(instructions, inst_c_ngl_s_f_f_cc(dst, src, imm)) } +emit_c_ngl_s_f_f_cc :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: FPR, src: FPR, imm: i64) { append_elem(instructions, inst_c_ngl_s_f_f_cc(dst, src, imm)) } inst_c_ngl_d_f_f_cc :: #force_inline proc "contextless" (dst: FPR, src: FPR, imm: i64) -> Instruction { return Instruction{mnemonic = .C_NGL_D, operand_count = 3, length = 4, ops = {op_fpr(dst), op_fpr(src), op_imm(imm, 1), {}}} } -emit_c_ngl_d_f_f_cc :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: FPR, src: FPR, imm: i64) { append(instructions, inst_c_ngl_d_f_f_cc(dst, src, imm)) } +emit_c_ngl_d_f_f_cc :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: FPR, src: FPR, imm: i64) { append_elem(instructions, inst_c_ngl_d_f_f_cc(dst, src, imm)) } inst_c_ngl_ps_f_f_cc :: #force_inline proc "contextless" (dst: FPR, src: FPR, imm: i64) -> Instruction { return Instruction{mnemonic = .C_NGL_PS, operand_count = 3, length = 4, ops = {op_fpr(dst), op_fpr(src), op_imm(imm, 1), {}}} } -emit_c_ngl_ps_f_f_cc :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: FPR, src: FPR, imm: i64) { append(instructions, inst_c_ngl_ps_f_f_cc(dst, src, imm)) } +emit_c_ngl_ps_f_f_cc :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: FPR, src: FPR, imm: i64) { append_elem(instructions, inst_c_ngl_ps_f_f_cc(dst, src, imm)) } inst_c_lt_s_f_f_cc :: #force_inline proc "contextless" (dst: FPR, src: FPR, imm: i64) -> Instruction { return Instruction{mnemonic = .C_LT_S, operand_count = 3, length = 4, ops = {op_fpr(dst), op_fpr(src), op_imm(imm, 1), {}}} } -emit_c_lt_s_f_f_cc :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: FPR, src: FPR, imm: i64) { append(instructions, inst_c_lt_s_f_f_cc(dst, src, imm)) } +emit_c_lt_s_f_f_cc :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: FPR, src: FPR, imm: i64) { append_elem(instructions, inst_c_lt_s_f_f_cc(dst, src, imm)) } inst_c_lt_d_f_f_cc :: #force_inline proc "contextless" (dst: FPR, src: FPR, imm: i64) -> Instruction { return Instruction{mnemonic = .C_LT_D, operand_count = 3, length = 4, ops = {op_fpr(dst), op_fpr(src), op_imm(imm, 1), {}}} } -emit_c_lt_d_f_f_cc :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: FPR, src: FPR, imm: i64) { append(instructions, inst_c_lt_d_f_f_cc(dst, src, imm)) } +emit_c_lt_d_f_f_cc :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: FPR, src: FPR, imm: i64) { append_elem(instructions, inst_c_lt_d_f_f_cc(dst, src, imm)) } inst_c_lt_ps_f_f_cc :: #force_inline proc "contextless" (dst: FPR, src: FPR, imm: i64) -> Instruction { return Instruction{mnemonic = .C_LT_PS, operand_count = 3, length = 4, ops = {op_fpr(dst), op_fpr(src), op_imm(imm, 1), {}}} } -emit_c_lt_ps_f_f_cc :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: FPR, src: FPR, imm: i64) { append(instructions, inst_c_lt_ps_f_f_cc(dst, src, imm)) } +emit_c_lt_ps_f_f_cc :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: FPR, src: FPR, imm: i64) { append_elem(instructions, inst_c_lt_ps_f_f_cc(dst, src, imm)) } inst_c_nge_s_f_f_cc :: #force_inline proc "contextless" (dst: FPR, src: FPR, imm: i64) -> Instruction { return Instruction{mnemonic = .C_NGE_S, operand_count = 3, length = 4, ops = {op_fpr(dst), op_fpr(src), op_imm(imm, 1), {}}} } -emit_c_nge_s_f_f_cc :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: FPR, src: FPR, imm: i64) { append(instructions, inst_c_nge_s_f_f_cc(dst, src, imm)) } +emit_c_nge_s_f_f_cc :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: FPR, src: FPR, imm: i64) { append_elem(instructions, inst_c_nge_s_f_f_cc(dst, src, imm)) } inst_c_nge_d_f_f_cc :: #force_inline proc "contextless" (dst: FPR, src: FPR, imm: i64) -> Instruction { return Instruction{mnemonic = .C_NGE_D, operand_count = 3, length = 4, ops = {op_fpr(dst), op_fpr(src), op_imm(imm, 1), {}}} } -emit_c_nge_d_f_f_cc :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: FPR, src: FPR, imm: i64) { append(instructions, inst_c_nge_d_f_f_cc(dst, src, imm)) } +emit_c_nge_d_f_f_cc :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: FPR, src: FPR, imm: i64) { append_elem(instructions, inst_c_nge_d_f_f_cc(dst, src, imm)) } inst_c_nge_ps_f_f_cc :: #force_inline proc "contextless" (dst: FPR, src: FPR, imm: i64) -> Instruction { return Instruction{mnemonic = .C_NGE_PS, operand_count = 3, length = 4, ops = {op_fpr(dst), op_fpr(src), op_imm(imm, 1), {}}} } -emit_c_nge_ps_f_f_cc :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: FPR, src: FPR, imm: i64) { append(instructions, inst_c_nge_ps_f_f_cc(dst, src, imm)) } +emit_c_nge_ps_f_f_cc :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: FPR, src: FPR, imm: i64) { append_elem(instructions, inst_c_nge_ps_f_f_cc(dst, src, imm)) } inst_c_le_s_f_f_cc :: #force_inline proc "contextless" (dst: FPR, src: FPR, imm: i64) -> Instruction { return Instruction{mnemonic = .C_LE_S, operand_count = 3, length = 4, ops = {op_fpr(dst), op_fpr(src), op_imm(imm, 1), {}}} } -emit_c_le_s_f_f_cc :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: FPR, src: FPR, imm: i64) { append(instructions, inst_c_le_s_f_f_cc(dst, src, imm)) } +emit_c_le_s_f_f_cc :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: FPR, src: FPR, imm: i64) { append_elem(instructions, inst_c_le_s_f_f_cc(dst, src, imm)) } inst_c_le_d_f_f_cc :: #force_inline proc "contextless" (dst: FPR, src: FPR, imm: i64) -> Instruction { return Instruction{mnemonic = .C_LE_D, operand_count = 3, length = 4, ops = {op_fpr(dst), op_fpr(src), op_imm(imm, 1), {}}} } -emit_c_le_d_f_f_cc :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: FPR, src: FPR, imm: i64) { append(instructions, inst_c_le_d_f_f_cc(dst, src, imm)) } +emit_c_le_d_f_f_cc :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: FPR, src: FPR, imm: i64) { append_elem(instructions, inst_c_le_d_f_f_cc(dst, src, imm)) } inst_c_le_ps_f_f_cc :: #force_inline proc "contextless" (dst: FPR, src: FPR, imm: i64) -> Instruction { return Instruction{mnemonic = .C_LE_PS, operand_count = 3, length = 4, ops = {op_fpr(dst), op_fpr(src), op_imm(imm, 1), {}}} } -emit_c_le_ps_f_f_cc :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: FPR, src: FPR, imm: i64) { append(instructions, inst_c_le_ps_f_f_cc(dst, src, imm)) } +emit_c_le_ps_f_f_cc :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: FPR, src: FPR, imm: i64) { append_elem(instructions, inst_c_le_ps_f_f_cc(dst, src, imm)) } inst_c_ngt_s_f_f_cc :: #force_inline proc "contextless" (dst: FPR, src: FPR, imm: i64) -> Instruction { return Instruction{mnemonic = .C_NGT_S, operand_count = 3, length = 4, ops = {op_fpr(dst), op_fpr(src), op_imm(imm, 1), {}}} } -emit_c_ngt_s_f_f_cc :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: FPR, src: FPR, imm: i64) { append(instructions, inst_c_ngt_s_f_f_cc(dst, src, imm)) } +emit_c_ngt_s_f_f_cc :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: FPR, src: FPR, imm: i64) { append_elem(instructions, inst_c_ngt_s_f_f_cc(dst, src, imm)) } inst_c_ngt_d_f_f_cc :: #force_inline proc "contextless" (dst: FPR, src: FPR, imm: i64) -> Instruction { return Instruction{mnemonic = .C_NGT_D, operand_count = 3, length = 4, ops = {op_fpr(dst), op_fpr(src), op_imm(imm, 1), {}}} } -emit_c_ngt_d_f_f_cc :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: FPR, src: FPR, imm: i64) { append(instructions, inst_c_ngt_d_f_f_cc(dst, src, imm)) } +emit_c_ngt_d_f_f_cc :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: FPR, src: FPR, imm: i64) { append_elem(instructions, inst_c_ngt_d_f_f_cc(dst, src, imm)) } inst_c_ngt_ps_f_f_cc :: #force_inline proc "contextless" (dst: FPR, src: FPR, imm: i64) -> Instruction { return Instruction{mnemonic = .C_NGT_PS, operand_count = 3, length = 4, ops = {op_fpr(dst), op_fpr(src), op_imm(imm, 1), {}}} } -emit_c_ngt_ps_f_f_cc :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: FPR, src: FPR, imm: i64) { append(instructions, inst_c_ngt_ps_f_f_cc(dst, src, imm)) } +emit_c_ngt_ps_f_f_cc :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: FPR, src: FPR, imm: i64) { append_elem(instructions, inst_c_ngt_ps_f_f_cc(dst, src, imm)) } inst_bc1f_cc_rel :: #force_inline proc "contextless" (imm: i64, target: u32) -> Instruction { return Instruction{mnemonic = .BC1F, operand_count = 2, length = 4, ops = {op_imm(imm, 1), op_label(target), {}, {}}} } -emit_bc1f_cc_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, target: u32) { append(instructions, inst_bc1f_cc_rel(imm, target)) } +emit_bc1f_cc_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, target: u32) { append_elem(instructions, inst_bc1f_cc_rel(imm, target)) } inst_bc1t_cc_rel :: #force_inline proc "contextless" (imm: i64, target: u32) -> Instruction { return Instruction{mnemonic = .BC1T, operand_count = 2, length = 4, ops = {op_imm(imm, 1), op_label(target), {}, {}}} } -emit_bc1t_cc_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, target: u32) { append(instructions, inst_bc1t_cc_rel(imm, target)) } +emit_bc1t_cc_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, target: u32) { append_elem(instructions, inst_bc1t_cc_rel(imm, target)) } inst_bc1fl_cc_rel :: #force_inline proc "contextless" (imm: i64, target: u32) -> Instruction { return Instruction{mnemonic = .BC1FL, operand_count = 2, length = 4, ops = {op_imm(imm, 1), op_label(target), {}, {}}} } -emit_bc1fl_cc_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, target: u32) { append(instructions, inst_bc1fl_cc_rel(imm, target)) } +emit_bc1fl_cc_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, target: u32) { append_elem(instructions, inst_bc1fl_cc_rel(imm, target)) } inst_bc1tl_cc_rel :: #force_inline proc "contextless" (imm: i64, target: u32) -> Instruction { return Instruction{mnemonic = .BC1TL, operand_count = 2, length = 4, ops = {op_imm(imm, 1), op_label(target), {}, {}}} } -emit_bc1tl_cc_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, target: u32) { append(instructions, inst_bc1tl_cc_rel(imm, target)) } +emit_bc1tl_cc_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, target: u32) { append_elem(instructions, inst_bc1tl_cc_rel(imm, target)) } inst_mfc0_r_c0_sel :: #force_inline proc "contextless" (dst: GPR, src: CP0_Reg, imm: i64) -> Instruction { return Instruction{mnemonic = .MFC0, operand_count = 3, length = 4, ops = {op_gpr(dst), op_cp0(src), op_imm(imm, 1), {}}} } -emit_mfc0_r_c0_sel :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: CP0_Reg, imm: i64) { append(instructions, inst_mfc0_r_c0_sel(dst, src, imm)) } +emit_mfc0_r_c0_sel :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: CP0_Reg, imm: i64) { append_elem(instructions, inst_mfc0_r_c0_sel(dst, src, imm)) } inst_mtc0_r_c0_sel :: #force_inline proc "contextless" (dst: GPR, src: CP0_Reg, imm: i64) -> Instruction { return Instruction{mnemonic = .MTC0, operand_count = 3, length = 4, ops = {op_gpr(dst), op_cp0(src), op_imm(imm, 1), {}}} } -emit_mtc0_r_c0_sel :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: CP0_Reg, imm: i64) { append(instructions, inst_mtc0_r_c0_sel(dst, src, imm)) } +emit_mtc0_r_c0_sel :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: CP0_Reg, imm: i64) { append_elem(instructions, inst_mtc0_r_c0_sel(dst, src, imm)) } inst_dmfc0_r_c0_sel :: #force_inline proc "contextless" (dst: GPR, src: CP0_Reg, imm: i64) -> Instruction { return Instruction{mnemonic = .DMFC0, operand_count = 3, length = 4, ops = {op_gpr(dst), op_cp0(src), op_imm(imm, 1), {}}} } -emit_dmfc0_r_c0_sel :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: CP0_Reg, imm: i64) { append(instructions, inst_dmfc0_r_c0_sel(dst, src, imm)) } +emit_dmfc0_r_c0_sel :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: CP0_Reg, imm: i64) { append_elem(instructions, inst_dmfc0_r_c0_sel(dst, src, imm)) } inst_dmtc0_r_c0_sel :: #force_inline proc "contextless" (dst: GPR, src: CP0_Reg, imm: i64) -> Instruction { return Instruction{mnemonic = .DMTC0, operand_count = 3, length = 4, ops = {op_gpr(dst), op_cp0(src), op_imm(imm, 1), {}}} } -emit_dmtc0_r_c0_sel :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: CP0_Reg, imm: i64) { append(instructions, inst_dmtc0_r_c0_sel(dst, src, imm)) } +emit_dmtc0_r_c0_sel :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: CP0_Reg, imm: i64) { append_elem(instructions, inst_dmtc0_r_c0_sel(dst, src, imm)) } inst_mfhc0_r_c0_sel :: #force_inline proc "contextless" (dst: GPR, src: CP0_Reg, imm: i64) -> Instruction { return Instruction{mnemonic = .MFHC0, operand_count = 3, length = 4, ops = {op_gpr(dst), op_cp0(src), op_imm(imm, 1), {}}} } -emit_mfhc0_r_c0_sel :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: CP0_Reg, imm: i64) { append(instructions, inst_mfhc0_r_c0_sel(dst, src, imm)) } +emit_mfhc0_r_c0_sel :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: CP0_Reg, imm: i64) { append_elem(instructions, inst_mfhc0_r_c0_sel(dst, src, imm)) } inst_mthc0_r_c0_sel :: #force_inline proc "contextless" (dst: GPR, src: CP0_Reg, imm: i64) -> Instruction { return Instruction{mnemonic = .MTHC0, operand_count = 3, length = 4, ops = {op_gpr(dst), op_cp0(src), op_imm(imm, 1), {}}} } -emit_mthc0_r_c0_sel :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: CP0_Reg, imm: i64) { append(instructions, inst_mthc0_r_c0_sel(dst, src, imm)) } +emit_mthc0_r_c0_sel :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: CP0_Reg, imm: i64) { append_elem(instructions, inst_mthc0_r_c0_sel(dst, src, imm)) } inst_tlbp_none :: #force_inline proc "contextless" () -> Instruction { return Instruction{mnemonic = .TLBP, operand_count = 0, length = 4, ops = {{}, {}, {}, {}}} } -emit_tlbp_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_tlbp_none()) } +emit_tlbp_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_tlbp_none()) } inst_tlbr_none :: #force_inline proc "contextless" () -> Instruction { return Instruction{mnemonic = .TLBR, operand_count = 0, length = 4, ops = {{}, {}, {}, {}}} } -emit_tlbr_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_tlbr_none()) } +emit_tlbr_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_tlbr_none()) } inst_tlbwi_none :: #force_inline proc "contextless" () -> Instruction { return Instruction{mnemonic = .TLBWI, operand_count = 0, length = 4, ops = {{}, {}, {}, {}}} } -emit_tlbwi_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_tlbwi_none()) } +emit_tlbwi_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_tlbwi_none()) } inst_tlbwr_none :: #force_inline proc "contextless" () -> Instruction { return Instruction{mnemonic = .TLBWR, operand_count = 0, length = 4, ops = {{}, {}, {}, {}}} } -emit_tlbwr_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_tlbwr_none()) } +emit_tlbwr_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_tlbwr_none()) } inst_cache_i5_m :: #force_inline proc "contextless" (imm: i64, mem: Memory) -> Instruction { return Instruction{mnemonic = .CACHE, operand_count = 2, length = 4, ops = {op_imm(imm, 1), op_mem(mem, 4), {}, {}}} } -emit_cache_i5_m :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, mem: Memory) { append(instructions, inst_cache_i5_m(imm, mem)) } +emit_cache_i5_m :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, mem: Memory) { append_elem(instructions, inst_cache_i5_m(imm, mem)) } inst_mfc2_r_c2 :: #force_inline proc "contextless" (dst: GPR, src: GTE_DataReg) -> Instruction { return Instruction{mnemonic = .MFC2, operand_count = 2, length = 4, ops = {op_gpr(dst), op_gte_data(src), {}, {}}} } -emit_mfc2_r_c2 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GTE_DataReg) { append(instructions, inst_mfc2_r_c2(dst, src)) } +emit_mfc2_r_c2 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GTE_DataReg) { append_elem(instructions, inst_mfc2_r_c2(dst, src)) } inst_mtc2_r_c2 :: #force_inline proc "contextless" (dst: GPR, src: GTE_DataReg) -> Instruction { return Instruction{mnemonic = .MTC2, operand_count = 2, length = 4, ops = {op_gpr(dst), op_gte_data(src), {}, {}}} } -emit_mtc2_r_c2 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GTE_DataReg) { append(instructions, inst_mtc2_r_c2(dst, src)) } +emit_mtc2_r_c2 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GTE_DataReg) { append_elem(instructions, inst_mtc2_r_c2(dst, src)) } inst_cfc2_r_c2c :: #force_inline proc "contextless" (dst: GPR, src: GTE_CtrlReg) -> Instruction { return Instruction{mnemonic = .CFC2, operand_count = 2, length = 4, ops = {op_gpr(dst), op_gte_ctrl(src), {}, {}}} } -emit_cfc2_r_c2c :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GTE_CtrlReg) { append(instructions, inst_cfc2_r_c2c(dst, src)) } +emit_cfc2_r_c2c :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GTE_CtrlReg) { append_elem(instructions, inst_cfc2_r_c2c(dst, src)) } inst_ctc2_r_c2c :: #force_inline proc "contextless" (dst: GPR, src: GTE_CtrlReg) -> Instruction { return Instruction{mnemonic = .CTC2, operand_count = 2, length = 4, ops = {op_gpr(dst), op_gte_ctrl(src), {}, {}}} } -emit_ctc2_r_c2c :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GTE_CtrlReg) { append(instructions, inst_ctc2_r_c2c(dst, src)) } +emit_ctc2_r_c2c :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GTE_CtrlReg) { append_elem(instructions, inst_ctc2_r_c2c(dst, src)) } inst_lwc2_c2_m :: #force_inline proc "contextless" (dst: GTE_DataReg, mem: Memory) -> Instruction { return Instruction{mnemonic = .LWC2, operand_count = 2, length = 4, ops = {op_gte_data(dst), op_mem(mem, 4), {}, {}}} } -emit_lwc2_c2_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GTE_DataReg, mem: Memory) { append(instructions, inst_lwc2_c2_m(dst, mem)) } +emit_lwc2_c2_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GTE_DataReg, mem: Memory) { append_elem(instructions, inst_lwc2_c2_m(dst, mem)) } inst_swc2_c2_m :: #force_inline proc "contextless" (dst: GTE_DataReg, mem: Memory) -> Instruction { return Instruction{mnemonic = .SWC2, operand_count = 2, length = 4, ops = {op_gte_data(dst), op_mem(mem, 4), {}, {}}} } -emit_swc2_c2_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GTE_DataReg, mem: Memory) { append(instructions, inst_swc2_c2_m(dst, mem)) } +emit_swc2_c2_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GTE_DataReg, mem: Memory) { append_elem(instructions, inst_swc2_c2_m(dst, mem)) } inst_ldc2_c2_m :: #force_inline proc "contextless" (dst: GTE_DataReg, mem: Memory) -> Instruction { return Instruction{mnemonic = .LDC2, operand_count = 2, length = 4, ops = {op_gte_data(dst), op_mem(mem, 4), {}, {}}} } -emit_ldc2_c2_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GTE_DataReg, mem: Memory) { append(instructions, inst_ldc2_c2_m(dst, mem)) } +emit_ldc2_c2_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GTE_DataReg, mem: Memory) { append_elem(instructions, inst_ldc2_c2_m(dst, mem)) } inst_sdc2_c2_m :: #force_inline proc "contextless" (dst: GTE_DataReg, mem: Memory) -> Instruction { return Instruction{mnemonic = .SDC2, operand_count = 2, length = 4, ops = {op_gte_data(dst), op_mem(mem, 4), {}, {}}} } -emit_sdc2_c2_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GTE_DataReg, mem: Memory) { append(instructions, inst_sdc2_c2_m(dst, mem)) } +emit_sdc2_c2_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GTE_DataReg, mem: Memory) { append_elem(instructions, inst_sdc2_c2_m(dst, mem)) } inst_rtps_none :: #force_inline proc "contextless" () -> Instruction { return Instruction{mnemonic = .RTPS, operand_count = 0, length = 4, ops = {{}, {}, {}, {}}} } -emit_rtps_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_rtps_none()) } +emit_rtps_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_rtps_none()) } inst_rtpt_none :: #force_inline proc "contextless" () -> Instruction { return Instruction{mnemonic = .RTPT, operand_count = 0, length = 4, ops = {{}, {}, {}, {}}} } -emit_rtpt_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_rtpt_none()) } +emit_rtpt_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_rtpt_none()) } inst_dpcs_none :: #force_inline proc "contextless" () -> Instruction { return Instruction{mnemonic = .DPCS, operand_count = 0, length = 4, ops = {{}, {}, {}, {}}} } -emit_dpcs_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_dpcs_none()) } +emit_dpcs_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_dpcs_none()) } inst_dpct_none :: #force_inline proc "contextless" () -> Instruction { return Instruction{mnemonic = .DPCT, operand_count = 0, length = 4, ops = {{}, {}, {}, {}}} } -emit_dpct_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_dpct_none()) } +emit_dpct_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_dpct_none()) } inst_intpl_none :: #force_inline proc "contextless" () -> Instruction { return Instruction{mnemonic = .INTPL, operand_count = 0, length = 4, ops = {{}, {}, {}, {}}} } -emit_intpl_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_intpl_none()) } +emit_intpl_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_intpl_none()) } inst_mvmva_none :: #force_inline proc "contextless" () -> Instruction { return Instruction{mnemonic = .MVMVA, operand_count = 0, length = 4, ops = {{}, {}, {}, {}}} } -emit_mvmva_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_mvmva_none()) } +emit_mvmva_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_mvmva_none()) } inst_ncds_none :: #force_inline proc "contextless" () -> Instruction { return Instruction{mnemonic = .NCDS, operand_count = 0, length = 4, ops = {{}, {}, {}, {}}} } -emit_ncds_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_ncds_none()) } +emit_ncds_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_ncds_none()) } inst_ncdt_none :: #force_inline proc "contextless" () -> Instruction { return Instruction{mnemonic = .NCDT, operand_count = 0, length = 4, ops = {{}, {}, {}, {}}} } -emit_ncdt_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_ncdt_none()) } +emit_ncdt_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_ncdt_none()) } inst_nccs_none :: #force_inline proc "contextless" () -> Instruction { return Instruction{mnemonic = .NCCS, operand_count = 0, length = 4, ops = {{}, {}, {}, {}}} } -emit_nccs_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_nccs_none()) } +emit_nccs_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_nccs_none()) } inst_ncct_none :: #force_inline proc "contextless" () -> Instruction { return Instruction{mnemonic = .NCCT, operand_count = 0, length = 4, ops = {{}, {}, {}, {}}} } -emit_ncct_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_ncct_none()) } +emit_ncct_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_ncct_none()) } inst_ncs_none :: #force_inline proc "contextless" () -> Instruction { return Instruction{mnemonic = .NCS, operand_count = 0, length = 4, ops = {{}, {}, {}, {}}} } -emit_ncs_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_ncs_none()) } +emit_ncs_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_ncs_none()) } inst_nct_none :: #force_inline proc "contextless" () -> Instruction { return Instruction{mnemonic = .NCT, operand_count = 0, length = 4, ops = {{}, {}, {}, {}}} } -emit_nct_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_nct_none()) } +emit_nct_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_nct_none()) } inst_cdp_none :: #force_inline proc "contextless" () -> Instruction { return Instruction{mnemonic = .CDP, operand_count = 0, length = 4, ops = {{}, {}, {}, {}}} } -emit_cdp_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_cdp_none()) } +emit_cdp_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_cdp_none()) } inst_cc_none :: #force_inline proc "contextless" () -> Instruction { return Instruction{mnemonic = .CC, operand_count = 0, length = 4, ops = {{}, {}, {}, {}}} } -emit_cc_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_cc_none()) } +emit_cc_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_cc_none()) } inst_nclip_none :: #force_inline proc "contextless" () -> Instruction { return Instruction{mnemonic = .NCLIP, operand_count = 0, length = 4, ops = {{}, {}, {}, {}}} } -emit_nclip_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_nclip_none()) } +emit_nclip_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_nclip_none()) } inst_avsz3_none :: #force_inline proc "contextless" () -> Instruction { return Instruction{mnemonic = .AVSZ3, operand_count = 0, length = 4, ops = {{}, {}, {}, {}}} } -emit_avsz3_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_avsz3_none()) } +emit_avsz3_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_avsz3_none()) } inst_avsz4_none :: #force_inline proc "contextless" () -> Instruction { return Instruction{mnemonic = .AVSZ4, operand_count = 0, length = 4, ops = {{}, {}, {}, {}}} } -emit_avsz4_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_avsz4_none()) } +emit_avsz4_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_avsz4_none()) } inst_op_none :: #force_inline proc "contextless" () -> Instruction { return Instruction{mnemonic = .OP, operand_count = 0, length = 4, ops = {{}, {}, {}, {}}} } -emit_op_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_op_none()) } +emit_op_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_op_none()) } inst_gpf_none :: #force_inline proc "contextless" () -> Instruction { return Instruction{mnemonic = .GPF, operand_count = 0, length = 4, ops = {{}, {}, {}, {}}} } -emit_gpf_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_gpf_none()) } +emit_gpf_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_gpf_none()) } inst_gpl_none :: #force_inline proc "contextless" () -> Instruction { return Instruction{mnemonic = .GPL, operand_count = 0, length = 4, ops = {{}, {}, {}, {}}} } -emit_gpl_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_gpl_none()) } +emit_gpl_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_gpl_none()) } inst_sqr_none :: #force_inline proc "contextless" () -> Instruction { return Instruction{mnemonic = .SQR, operand_count = 0, length = 4, ops = {{}, {}, {}, {}}} } -emit_sqr_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_sqr_none()) } +emit_sqr_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_sqr_none()) } inst_dcpl_none :: #force_inline proc "contextless" () -> Instruction { return Instruction{mnemonic = .DCPL, operand_count = 0, length = 4, ops = {{}, {}, {}, {}}} } -emit_dcpl_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_dcpl_none()) } +emit_dcpl_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_dcpl_none()) } inst_lq_r_m :: #force_inline proc "contextless" (dst: GPR, mem: Memory) -> Instruction { return Instruction{mnemonic = .LQ, operand_count = 2, length = 4, ops = {op_gpr(dst), op_mem(mem, 4), {}, {}}} } -emit_lq_r_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, mem: Memory) { append(instructions, inst_lq_r_m(dst, mem)) } +emit_lq_r_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, mem: Memory) { append_elem(instructions, inst_lq_r_m(dst, mem)) } inst_sq_r_m :: #force_inline proc "contextless" (dst: GPR, mem: Memory) -> Instruction { return Instruction{mnemonic = .SQ, operand_count = 2, length = 4, ops = {op_gpr(dst), op_mem(mem, 4), {}, {}}} } -emit_sq_r_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, mem: Memory) { append(instructions, inst_sq_r_m(dst, mem)) } +emit_sq_r_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, mem: Memory) { append_elem(instructions, inst_sq_r_m(dst, mem)) } inst_lqc2_c2_m :: #force_inline proc "contextless" (dst: GTE_DataReg, mem: Memory) -> Instruction { return Instruction{mnemonic = .LQC2, operand_count = 2, length = 4, ops = {op_gte_data(dst), op_mem(mem, 4), {}, {}}} } -emit_lqc2_c2_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GTE_DataReg, mem: Memory) { append(instructions, inst_lqc2_c2_m(dst, mem)) } +emit_lqc2_c2_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GTE_DataReg, mem: Memory) { append_elem(instructions, inst_lqc2_c2_m(dst, mem)) } inst_sqc2_c2_m :: #force_inline proc "contextless" (dst: GTE_DataReg, mem: Memory) -> Instruction { return Instruction{mnemonic = .SQC2, operand_count = 2, length = 4, ops = {op_gte_data(dst), op_mem(mem, 4), {}, {}}} } -emit_sqc2_c2_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GTE_DataReg, mem: Memory) { append(instructions, inst_sqc2_c2_m(dst, mem)) } +emit_sqc2_c2_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GTE_DataReg, mem: Memory) { append_elem(instructions, inst_sqc2_c2_m(dst, mem)) } inst_mfhi1_r :: #force_inline proc "contextless" (dst: GPR) -> Instruction { return Instruction{mnemonic = .MFHI1, operand_count = 1, length = 4, ops = {op_gpr(dst), {}, {}, {}}} } -emit_mfhi1_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR) { append(instructions, inst_mfhi1_r(dst)) } +emit_mfhi1_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR) { append_elem(instructions, inst_mfhi1_r(dst)) } inst_mflo1_r :: #force_inline proc "contextless" (dst: GPR) -> Instruction { return Instruction{mnemonic = .MFLO1, operand_count = 1, length = 4, ops = {op_gpr(dst), {}, {}, {}}} } -emit_mflo1_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR) { append(instructions, inst_mflo1_r(dst)) } +emit_mflo1_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR) { append_elem(instructions, inst_mflo1_r(dst)) } inst_mthi1_r :: #force_inline proc "contextless" (dst: GPR) -> Instruction { return Instruction{mnemonic = .MTHI1, operand_count = 1, length = 4, ops = {op_gpr(dst), {}, {}, {}}} } -emit_mthi1_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR) { append(instructions, inst_mthi1_r(dst)) } +emit_mthi1_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR) { append_elem(instructions, inst_mthi1_r(dst)) } inst_mtlo1_r :: #force_inline proc "contextless" (dst: GPR) -> Instruction { return Instruction{mnemonic = .MTLO1, operand_count = 1, length = 4, ops = {op_gpr(dst), {}, {}, {}}} } -emit_mtlo1_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR) { append(instructions, inst_mtlo1_r(dst)) } +emit_mtlo1_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR) { append_elem(instructions, inst_mtlo1_r(dst)) } inst_mult1_r_r :: #force_inline proc "contextless" (dst: GPR, src: GPR) -> Instruction { return Instruction{mnemonic = .MULT1, operand_count = 2, length = 4, ops = {op_gpr(dst), op_gpr(src), {}, {}}} } -emit_mult1_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR) { append(instructions, inst_mult1_r_r(dst, src)) } +emit_mult1_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR) { append_elem(instructions, inst_mult1_r_r(dst, src)) } inst_multu1_r_r :: #force_inline proc "contextless" (dst: GPR, src: GPR) -> Instruction { return Instruction{mnemonic = .MULTU1, operand_count = 2, length = 4, ops = {op_gpr(dst), op_gpr(src), {}, {}}} } -emit_multu1_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR) { append(instructions, inst_multu1_r_r(dst, src)) } +emit_multu1_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR) { append_elem(instructions, inst_multu1_r_r(dst, src)) } inst_div1_r_r :: #force_inline proc "contextless" (dst: GPR, src: GPR) -> Instruction { return Instruction{mnemonic = .DIV1, operand_count = 2, length = 4, ops = {op_gpr(dst), op_gpr(src), {}, {}}} } -emit_div1_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR) { append(instructions, inst_div1_r_r(dst, src)) } +emit_div1_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR) { append_elem(instructions, inst_div1_r_r(dst, src)) } inst_divu1_r_r :: #force_inline proc "contextless" (dst: GPR, src: GPR) -> Instruction { return Instruction{mnemonic = .DIVU1, operand_count = 2, length = 4, ops = {op_gpr(dst), op_gpr(src), {}, {}}} } -emit_divu1_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR) { append(instructions, inst_divu1_r_r(dst, src)) } +emit_divu1_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR) { append_elem(instructions, inst_divu1_r_r(dst, src)) } inst_madd1_r_r :: #force_inline proc "contextless" (dst: GPR, src: GPR) -> Instruction { return Instruction{mnemonic = .MADD1, operand_count = 2, length = 4, ops = {op_gpr(dst), op_gpr(src), {}, {}}} } -emit_madd1_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR) { append(instructions, inst_madd1_r_r(dst, src)) } +emit_madd1_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR) { append_elem(instructions, inst_madd1_r_r(dst, src)) } inst_maddu1_r_r :: #force_inline proc "contextless" (dst: GPR, src: GPR) -> Instruction { return Instruction{mnemonic = .MADDU1, operand_count = 2, length = 4, ops = {op_gpr(dst), op_gpr(src), {}, {}}} } -emit_maddu1_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR) { append(instructions, inst_maddu1_r_r(dst, src)) } +emit_maddu1_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR) { append_elem(instructions, inst_maddu1_r_r(dst, src)) } inst_msub1_r_r :: #force_inline proc "contextless" (dst: GPR, src: GPR) -> Instruction { return Instruction{mnemonic = .MSUB1, operand_count = 2, length = 4, ops = {op_gpr(dst), op_gpr(src), {}, {}}} } -emit_msub1_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR) { append(instructions, inst_msub1_r_r(dst, src)) } +emit_msub1_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR) { append_elem(instructions, inst_msub1_r_r(dst, src)) } inst_msubu1_r_r :: #force_inline proc "contextless" (dst: GPR, src: GPR) -> Instruction { return Instruction{mnemonic = .MSUBU1, operand_count = 2, length = 4, ops = {op_gpr(dst), op_gpr(src), {}, {}}} } -emit_msubu1_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR) { append(instructions, inst_msubu1_r_r(dst, src)) } +emit_msubu1_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR) { append_elem(instructions, inst_msubu1_r_r(dst, src)) } inst_pmfhl_lw_r :: #force_inline proc "contextless" (dst: GPR) -> Instruction { return Instruction{mnemonic = .PMFHL_LW, operand_count = 1, length = 4, ops = {op_gpr(dst), {}, {}, {}}} } -emit_pmfhl_lw_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR) { append(instructions, inst_pmfhl_lw_r(dst)) } +emit_pmfhl_lw_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR) { append_elem(instructions, inst_pmfhl_lw_r(dst)) } inst_pmfhl_uw_r :: #force_inline proc "contextless" (dst: GPR) -> Instruction { return Instruction{mnemonic = .PMFHL_UW, operand_count = 1, length = 4, ops = {op_gpr(dst), {}, {}, {}}} } -emit_pmfhl_uw_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR) { append(instructions, inst_pmfhl_uw_r(dst)) } +emit_pmfhl_uw_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR) { append_elem(instructions, inst_pmfhl_uw_r(dst)) } inst_pmfhl_lh_r :: #force_inline proc "contextless" (dst: GPR) -> Instruction { return Instruction{mnemonic = .PMFHL_LH, operand_count = 1, length = 4, ops = {op_gpr(dst), {}, {}, {}}} } -emit_pmfhl_lh_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR) { append(instructions, inst_pmfhl_lh_r(dst)) } +emit_pmfhl_lh_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR) { append_elem(instructions, inst_pmfhl_lh_r(dst)) } inst_pmfhl_sh_r :: #force_inline proc "contextless" (dst: GPR) -> Instruction { return Instruction{mnemonic = .PMFHL_SH, operand_count = 1, length = 4, ops = {op_gpr(dst), {}, {}, {}}} } -emit_pmfhl_sh_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR) { append(instructions, inst_pmfhl_sh_r(dst)) } +emit_pmfhl_sh_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR) { append_elem(instructions, inst_pmfhl_sh_r(dst)) } inst_pmfhl_slw_r :: #force_inline proc "contextless" (dst: GPR) -> Instruction { return Instruction{mnemonic = .PMFHL_SLW, operand_count = 1, length = 4, ops = {op_gpr(dst), {}, {}, {}}} } -emit_pmfhl_slw_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR) { append(instructions, inst_pmfhl_slw_r(dst)) } +emit_pmfhl_slw_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR) { append_elem(instructions, inst_pmfhl_slw_r(dst)) } inst_pmthl_lw_r :: #force_inline proc "contextless" (dst: GPR) -> Instruction { return Instruction{mnemonic = .PMTHL_LW, operand_count = 1, length = 4, ops = {op_gpr(dst), {}, {}, {}}} } -emit_pmthl_lw_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR) { append(instructions, inst_pmthl_lw_r(dst)) } +emit_pmthl_lw_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR) { append_elem(instructions, inst_pmthl_lw_r(dst)) } inst_paddb_r_r_r :: #force_inline proc "contextless" (dst: GPR, src: GPR, src2: GPR) -> Instruction { return Instruction{mnemonic = .PADDB, operand_count = 3, length = 4, ops = {op_gpr(dst), op_gpr(src), op_gpr(src2), {}}} } -emit_paddb_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, src2: GPR) { append(instructions, inst_paddb_r_r_r(dst, src, src2)) } +emit_paddb_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, src2: GPR) { append_elem(instructions, inst_paddb_r_r_r(dst, src, src2)) } inst_paddh_r_r_r :: #force_inline proc "contextless" (dst: GPR, src: GPR, src2: GPR) -> Instruction { return Instruction{mnemonic = .PADDH, operand_count = 3, length = 4, ops = {op_gpr(dst), op_gpr(src), op_gpr(src2), {}}} } -emit_paddh_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, src2: GPR) { append(instructions, inst_paddh_r_r_r(dst, src, src2)) } +emit_paddh_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, src2: GPR) { append_elem(instructions, inst_paddh_r_r_r(dst, src, src2)) } inst_paddw_r_r_r :: #force_inline proc "contextless" (dst: GPR, src: GPR, src2: GPR) -> Instruction { return Instruction{mnemonic = .PADDW, operand_count = 3, length = 4, ops = {op_gpr(dst), op_gpr(src), op_gpr(src2), {}}} } -emit_paddw_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, src2: GPR) { append(instructions, inst_paddw_r_r_r(dst, src, src2)) } +emit_paddw_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, src2: GPR) { append_elem(instructions, inst_paddw_r_r_r(dst, src, src2)) } inst_paddsb_r_r_r :: #force_inline proc "contextless" (dst: GPR, src: GPR, src2: GPR) -> Instruction { return Instruction{mnemonic = .PADDSB, operand_count = 3, length = 4, ops = {op_gpr(dst), op_gpr(src), op_gpr(src2), {}}} } -emit_paddsb_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, src2: GPR) { append(instructions, inst_paddsb_r_r_r(dst, src, src2)) } +emit_paddsb_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, src2: GPR) { append_elem(instructions, inst_paddsb_r_r_r(dst, src, src2)) } inst_paddsh_r_r_r :: #force_inline proc "contextless" (dst: GPR, src: GPR, src2: GPR) -> Instruction { return Instruction{mnemonic = .PADDSH, operand_count = 3, length = 4, ops = {op_gpr(dst), op_gpr(src), op_gpr(src2), {}}} } -emit_paddsh_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, src2: GPR) { append(instructions, inst_paddsh_r_r_r(dst, src, src2)) } +emit_paddsh_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, src2: GPR) { append_elem(instructions, inst_paddsh_r_r_r(dst, src, src2)) } inst_paddsw_r_r_r :: #force_inline proc "contextless" (dst: GPR, src: GPR, src2: GPR) -> Instruction { return Instruction{mnemonic = .PADDSW, operand_count = 3, length = 4, ops = {op_gpr(dst), op_gpr(src), op_gpr(src2), {}}} } -emit_paddsw_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, src2: GPR) { append(instructions, inst_paddsw_r_r_r(dst, src, src2)) } +emit_paddsw_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, src2: GPR) { append_elem(instructions, inst_paddsw_r_r_r(dst, src, src2)) } inst_paddub_r_r_r :: #force_inline proc "contextless" (dst: GPR, src: GPR, src2: GPR) -> Instruction { return Instruction{mnemonic = .PADDUB, operand_count = 3, length = 4, ops = {op_gpr(dst), op_gpr(src), op_gpr(src2), {}}} } -emit_paddub_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, src2: GPR) { append(instructions, inst_paddub_r_r_r(dst, src, src2)) } +emit_paddub_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, src2: GPR) { append_elem(instructions, inst_paddub_r_r_r(dst, src, src2)) } inst_padduh_r_r_r :: #force_inline proc "contextless" (dst: GPR, src: GPR, src2: GPR) -> Instruction { return Instruction{mnemonic = .PADDUH, operand_count = 3, length = 4, ops = {op_gpr(dst), op_gpr(src), op_gpr(src2), {}}} } -emit_padduh_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, src2: GPR) { append(instructions, inst_padduh_r_r_r(dst, src, src2)) } +emit_padduh_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, src2: GPR) { append_elem(instructions, inst_padduh_r_r_r(dst, src, src2)) } inst_padduw_r_r_r :: #force_inline proc "contextless" (dst: GPR, src: GPR, src2: GPR) -> Instruction { return Instruction{mnemonic = .PADDUW, operand_count = 3, length = 4, ops = {op_gpr(dst), op_gpr(src), op_gpr(src2), {}}} } -emit_padduw_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, src2: GPR) { append(instructions, inst_padduw_r_r_r(dst, src, src2)) } +emit_padduw_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, src2: GPR) { append_elem(instructions, inst_padduw_r_r_r(dst, src, src2)) } inst_psubb_r_r_r :: #force_inline proc "contextless" (dst: GPR, src: GPR, src2: GPR) -> Instruction { return Instruction{mnemonic = .PSUBB, operand_count = 3, length = 4, ops = {op_gpr(dst), op_gpr(src), op_gpr(src2), {}}} } -emit_psubb_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, src2: GPR) { append(instructions, inst_psubb_r_r_r(dst, src, src2)) } +emit_psubb_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, src2: GPR) { append_elem(instructions, inst_psubb_r_r_r(dst, src, src2)) } inst_psubh_r_r_r :: #force_inline proc "contextless" (dst: GPR, src: GPR, src2: GPR) -> Instruction { return Instruction{mnemonic = .PSUBH, operand_count = 3, length = 4, ops = {op_gpr(dst), op_gpr(src), op_gpr(src2), {}}} } -emit_psubh_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, src2: GPR) { append(instructions, inst_psubh_r_r_r(dst, src, src2)) } +emit_psubh_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, src2: GPR) { append_elem(instructions, inst_psubh_r_r_r(dst, src, src2)) } inst_psubw_r_r_r :: #force_inline proc "contextless" (dst: GPR, src: GPR, src2: GPR) -> Instruction { return Instruction{mnemonic = .PSUBW, operand_count = 3, length = 4, ops = {op_gpr(dst), op_gpr(src), op_gpr(src2), {}}} } -emit_psubw_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, src2: GPR) { append(instructions, inst_psubw_r_r_r(dst, src, src2)) } +emit_psubw_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, src2: GPR) { append_elem(instructions, inst_psubw_r_r_r(dst, src, src2)) } inst_psubsb_r_r_r :: #force_inline proc "contextless" (dst: GPR, src: GPR, src2: GPR) -> Instruction { return Instruction{mnemonic = .PSUBSB, operand_count = 3, length = 4, ops = {op_gpr(dst), op_gpr(src), op_gpr(src2), {}}} } -emit_psubsb_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, src2: GPR) { append(instructions, inst_psubsb_r_r_r(dst, src, src2)) } +emit_psubsb_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, src2: GPR) { append_elem(instructions, inst_psubsb_r_r_r(dst, src, src2)) } inst_psubsh_r_r_r :: #force_inline proc "contextless" (dst: GPR, src: GPR, src2: GPR) -> Instruction { return Instruction{mnemonic = .PSUBSH, operand_count = 3, length = 4, ops = {op_gpr(dst), op_gpr(src), op_gpr(src2), {}}} } -emit_psubsh_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, src2: GPR) { append(instructions, inst_psubsh_r_r_r(dst, src, src2)) } +emit_psubsh_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, src2: GPR) { append_elem(instructions, inst_psubsh_r_r_r(dst, src, src2)) } inst_psubsw_r_r_r :: #force_inline proc "contextless" (dst: GPR, src: GPR, src2: GPR) -> Instruction { return Instruction{mnemonic = .PSUBSW, operand_count = 3, length = 4, ops = {op_gpr(dst), op_gpr(src), op_gpr(src2), {}}} } -emit_psubsw_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, src2: GPR) { append(instructions, inst_psubsw_r_r_r(dst, src, src2)) } +emit_psubsw_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, src2: GPR) { append_elem(instructions, inst_psubsw_r_r_r(dst, src, src2)) } inst_psubub_r_r_r :: #force_inline proc "contextless" (dst: GPR, src: GPR, src2: GPR) -> Instruction { return Instruction{mnemonic = .PSUBUB, operand_count = 3, length = 4, ops = {op_gpr(dst), op_gpr(src), op_gpr(src2), {}}} } -emit_psubub_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, src2: GPR) { append(instructions, inst_psubub_r_r_r(dst, src, src2)) } +emit_psubub_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, src2: GPR) { append_elem(instructions, inst_psubub_r_r_r(dst, src, src2)) } inst_psubuh_r_r_r :: #force_inline proc "contextless" (dst: GPR, src: GPR, src2: GPR) -> Instruction { return Instruction{mnemonic = .PSUBUH, operand_count = 3, length = 4, ops = {op_gpr(dst), op_gpr(src), op_gpr(src2), {}}} } -emit_psubuh_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, src2: GPR) { append(instructions, inst_psubuh_r_r_r(dst, src, src2)) } +emit_psubuh_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, src2: GPR) { append_elem(instructions, inst_psubuh_r_r_r(dst, src, src2)) } inst_psubuw_r_r_r :: #force_inline proc "contextless" (dst: GPR, src: GPR, src2: GPR) -> Instruction { return Instruction{mnemonic = .PSUBUW, operand_count = 3, length = 4, ops = {op_gpr(dst), op_gpr(src), op_gpr(src2), {}}} } -emit_psubuw_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, src2: GPR) { append(instructions, inst_psubuw_r_r_r(dst, src, src2)) } +emit_psubuw_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, src2: GPR) { append_elem(instructions, inst_psubuw_r_r_r(dst, src, src2)) } inst_psllh_r_r_i5 :: #force_inline proc "contextless" (dst: GPR, src: GPR, imm: i64) -> Instruction { return Instruction{mnemonic = .PSLLH, operand_count = 3, length = 4, ops = {op_gpr(dst), op_gpr(src), op_imm(imm, 1), {}}} } -emit_psllh_r_r_i5 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, imm: i64) { append(instructions, inst_psllh_r_r_i5(dst, src, imm)) } +emit_psllh_r_r_i5 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, imm: i64) { append_elem(instructions, inst_psllh_r_r_i5(dst, src, imm)) } inst_psrlh_r_r_i5 :: #force_inline proc "contextless" (dst: GPR, src: GPR, imm: i64) -> Instruction { return Instruction{mnemonic = .PSRLH, operand_count = 3, length = 4, ops = {op_gpr(dst), op_gpr(src), op_imm(imm, 1), {}}} } -emit_psrlh_r_r_i5 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, imm: i64) { append(instructions, inst_psrlh_r_r_i5(dst, src, imm)) } +emit_psrlh_r_r_i5 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, imm: i64) { append_elem(instructions, inst_psrlh_r_r_i5(dst, src, imm)) } inst_psrah_r_r_i5 :: #force_inline proc "contextless" (dst: GPR, src: GPR, imm: i64) -> Instruction { return Instruction{mnemonic = .PSRAH, operand_count = 3, length = 4, ops = {op_gpr(dst), op_gpr(src), op_imm(imm, 1), {}}} } -emit_psrah_r_r_i5 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, imm: i64) { append(instructions, inst_psrah_r_r_i5(dst, src, imm)) } +emit_psrah_r_r_i5 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, imm: i64) { append_elem(instructions, inst_psrah_r_r_i5(dst, src, imm)) } inst_psllw_r_r_i5 :: #force_inline proc "contextless" (dst: GPR, src: GPR, imm: i64) -> Instruction { return Instruction{mnemonic = .PSLLW, operand_count = 3, length = 4, ops = {op_gpr(dst), op_gpr(src), op_imm(imm, 1), {}}} } -emit_psllw_r_r_i5 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, imm: i64) { append(instructions, inst_psllw_r_r_i5(dst, src, imm)) } +emit_psllw_r_r_i5 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, imm: i64) { append_elem(instructions, inst_psllw_r_r_i5(dst, src, imm)) } inst_psrlw_r_r_i5 :: #force_inline proc "contextless" (dst: GPR, src: GPR, imm: i64) -> Instruction { return Instruction{mnemonic = .PSRLW, operand_count = 3, length = 4, ops = {op_gpr(dst), op_gpr(src), op_imm(imm, 1), {}}} } -emit_psrlw_r_r_i5 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, imm: i64) { append(instructions, inst_psrlw_r_r_i5(dst, src, imm)) } +emit_psrlw_r_r_i5 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, imm: i64) { append_elem(instructions, inst_psrlw_r_r_i5(dst, src, imm)) } inst_psraw_r_r_i5 :: #force_inline proc "contextless" (dst: GPR, src: GPR, imm: i64) -> Instruction { return Instruction{mnemonic = .PSRAW, operand_count = 3, length = 4, ops = {op_gpr(dst), op_gpr(src), op_imm(imm, 1), {}}} } -emit_psraw_r_r_i5 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, imm: i64) { append(instructions, inst_psraw_r_r_i5(dst, src, imm)) } +emit_psraw_r_r_i5 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, imm: i64) { append_elem(instructions, inst_psraw_r_r_i5(dst, src, imm)) } inst_psllvw_r_r_r :: #force_inline proc "contextless" (dst: GPR, src: GPR, src2: GPR) -> Instruction { return Instruction{mnemonic = .PSLLVW, operand_count = 3, length = 4, ops = {op_gpr(dst), op_gpr(src), op_gpr(src2), {}}} } -emit_psllvw_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, src2: GPR) { append(instructions, inst_psllvw_r_r_r(dst, src, src2)) } +emit_psllvw_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, src2: GPR) { append_elem(instructions, inst_psllvw_r_r_r(dst, src, src2)) } inst_psrlvw_r_r_r :: #force_inline proc "contextless" (dst: GPR, src: GPR, src2: GPR) -> Instruction { return Instruction{mnemonic = .PSRLVW, operand_count = 3, length = 4, ops = {op_gpr(dst), op_gpr(src), op_gpr(src2), {}}} } -emit_psrlvw_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, src2: GPR) { append(instructions, inst_psrlvw_r_r_r(dst, src, src2)) } +emit_psrlvw_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, src2: GPR) { append_elem(instructions, inst_psrlvw_r_r_r(dst, src, src2)) } inst_psravw_r_r_r :: #force_inline proc "contextless" (dst: GPR, src: GPR, src2: GPR) -> Instruction { return Instruction{mnemonic = .PSRAVW, operand_count = 3, length = 4, ops = {op_gpr(dst), op_gpr(src), op_gpr(src2), {}}} } -emit_psravw_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, src2: GPR) { append(instructions, inst_psravw_r_r_r(dst, src, src2)) } +emit_psravw_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, src2: GPR) { append_elem(instructions, inst_psravw_r_r_r(dst, src, src2)) } inst_qfsrv_r_r_r :: #force_inline proc "contextless" (dst: GPR, src: GPR, src2: GPR) -> Instruction { return Instruction{mnemonic = .QFSRV, operand_count = 3, length = 4, ops = {op_gpr(dst), op_gpr(src), op_gpr(src2), {}}} } -emit_qfsrv_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, src2: GPR) { append(instructions, inst_qfsrv_r_r_r(dst, src, src2)) } +emit_qfsrv_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, src2: GPR) { append_elem(instructions, inst_qfsrv_r_r_r(dst, src, src2)) } inst_pand_r_r_r :: #force_inline proc "contextless" (dst: GPR, src: GPR, src2: GPR) -> Instruction { return Instruction{mnemonic = .PAND, operand_count = 3, length = 4, ops = {op_gpr(dst), op_gpr(src), op_gpr(src2), {}}} } -emit_pand_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, src2: GPR) { append(instructions, inst_pand_r_r_r(dst, src, src2)) } +emit_pand_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, src2: GPR) { append_elem(instructions, inst_pand_r_r_r(dst, src, src2)) } inst_por_r_r_r :: #force_inline proc "contextless" (dst: GPR, src: GPR, src2: GPR) -> Instruction { return Instruction{mnemonic = .POR, operand_count = 3, length = 4, ops = {op_gpr(dst), op_gpr(src), op_gpr(src2), {}}} } -emit_por_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, src2: GPR) { append(instructions, inst_por_r_r_r(dst, src, src2)) } +emit_por_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, src2: GPR) { append_elem(instructions, inst_por_r_r_r(dst, src, src2)) } inst_pxor_r_r_r :: #force_inline proc "contextless" (dst: GPR, src: GPR, src2: GPR) -> Instruction { return Instruction{mnemonic = .PXOR, operand_count = 3, length = 4, ops = {op_gpr(dst), op_gpr(src), op_gpr(src2), {}}} } -emit_pxor_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, src2: GPR) { append(instructions, inst_pxor_r_r_r(dst, src, src2)) } +emit_pxor_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, src2: GPR) { append_elem(instructions, inst_pxor_r_r_r(dst, src, src2)) } inst_pnor_r_r_r :: #force_inline proc "contextless" (dst: GPR, src: GPR, src2: GPR) -> Instruction { return Instruction{mnemonic = .PNOR, operand_count = 3, length = 4, ops = {op_gpr(dst), op_gpr(src), op_gpr(src2), {}}} } -emit_pnor_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, src2: GPR) { append(instructions, inst_pnor_r_r_r(dst, src, src2)) } +emit_pnor_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, src2: GPR) { append_elem(instructions, inst_pnor_r_r_r(dst, src, src2)) } inst_pceqb_r_r_r :: #force_inline proc "contextless" (dst: GPR, src: GPR, src2: GPR) -> Instruction { return Instruction{mnemonic = .PCEQB, operand_count = 3, length = 4, ops = {op_gpr(dst), op_gpr(src), op_gpr(src2), {}}} } -emit_pceqb_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, src2: GPR) { append(instructions, inst_pceqb_r_r_r(dst, src, src2)) } +emit_pceqb_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, src2: GPR) { append_elem(instructions, inst_pceqb_r_r_r(dst, src, src2)) } inst_pceqh_r_r_r :: #force_inline proc "contextless" (dst: GPR, src: GPR, src2: GPR) -> Instruction { return Instruction{mnemonic = .PCEQH, operand_count = 3, length = 4, ops = {op_gpr(dst), op_gpr(src), op_gpr(src2), {}}} } -emit_pceqh_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, src2: GPR) { append(instructions, inst_pceqh_r_r_r(dst, src, src2)) } +emit_pceqh_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, src2: GPR) { append_elem(instructions, inst_pceqh_r_r_r(dst, src, src2)) } inst_pceqw_r_r_r :: #force_inline proc "contextless" (dst: GPR, src: GPR, src2: GPR) -> Instruction { return Instruction{mnemonic = .PCEQW, operand_count = 3, length = 4, ops = {op_gpr(dst), op_gpr(src), op_gpr(src2), {}}} } -emit_pceqw_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, src2: GPR) { append(instructions, inst_pceqw_r_r_r(dst, src, src2)) } +emit_pceqw_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, src2: GPR) { append_elem(instructions, inst_pceqw_r_r_r(dst, src, src2)) } inst_pcgtb_r_r_r :: #force_inline proc "contextless" (dst: GPR, src: GPR, src2: GPR) -> Instruction { return Instruction{mnemonic = .PCGTB, operand_count = 3, length = 4, ops = {op_gpr(dst), op_gpr(src), op_gpr(src2), {}}} } -emit_pcgtb_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, src2: GPR) { append(instructions, inst_pcgtb_r_r_r(dst, src, src2)) } +emit_pcgtb_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, src2: GPR) { append_elem(instructions, inst_pcgtb_r_r_r(dst, src, src2)) } inst_pcgth_r_r_r :: #force_inline proc "contextless" (dst: GPR, src: GPR, src2: GPR) -> Instruction { return Instruction{mnemonic = .PCGTH, operand_count = 3, length = 4, ops = {op_gpr(dst), op_gpr(src), op_gpr(src2), {}}} } -emit_pcgth_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, src2: GPR) { append(instructions, inst_pcgth_r_r_r(dst, src, src2)) } +emit_pcgth_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, src2: GPR) { append_elem(instructions, inst_pcgth_r_r_r(dst, src, src2)) } inst_pcgtw_r_r_r :: #force_inline proc "contextless" (dst: GPR, src: GPR, src2: GPR) -> Instruction { return Instruction{mnemonic = .PCGTW, operand_count = 3, length = 4, ops = {op_gpr(dst), op_gpr(src), op_gpr(src2), {}}} } -emit_pcgtw_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, src2: GPR) { append(instructions, inst_pcgtw_r_r_r(dst, src, src2)) } +emit_pcgtw_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, src2: GPR) { append_elem(instructions, inst_pcgtw_r_r_r(dst, src, src2)) } inst_pmultw_r_r_r :: #force_inline proc "contextless" (dst: GPR, src: GPR, src2: GPR) -> Instruction { return Instruction{mnemonic = .PMULTW, operand_count = 3, length = 4, ops = {op_gpr(dst), op_gpr(src), op_gpr(src2), {}}} } -emit_pmultw_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, src2: GPR) { append(instructions, inst_pmultw_r_r_r(dst, src, src2)) } +emit_pmultw_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, src2: GPR) { append_elem(instructions, inst_pmultw_r_r_r(dst, src, src2)) } inst_pmultuw_r_r_r :: #force_inline proc "contextless" (dst: GPR, src: GPR, src2: GPR) -> Instruction { return Instruction{mnemonic = .PMULTUW, operand_count = 3, length = 4, ops = {op_gpr(dst), op_gpr(src), op_gpr(src2), {}}} } -emit_pmultuw_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, src2: GPR) { append(instructions, inst_pmultuw_r_r_r(dst, src, src2)) } +emit_pmultuw_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, src2: GPR) { append_elem(instructions, inst_pmultuw_r_r_r(dst, src, src2)) } inst_pmulth_r_r_r :: #force_inline proc "contextless" (dst: GPR, src: GPR, src2: GPR) -> Instruction { return Instruction{mnemonic = .PMULTH, operand_count = 3, length = 4, ops = {op_gpr(dst), op_gpr(src), op_gpr(src2), {}}} } -emit_pmulth_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, src2: GPR) { append(instructions, inst_pmulth_r_r_r(dst, src, src2)) } +emit_pmulth_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, src2: GPR) { append_elem(instructions, inst_pmulth_r_r_r(dst, src, src2)) } inst_pmaddw_r_r_r :: #force_inline proc "contextless" (dst: GPR, src: GPR, src2: GPR) -> Instruction { return Instruction{mnemonic = .PMADDW, operand_count = 3, length = 4, ops = {op_gpr(dst), op_gpr(src), op_gpr(src2), {}}} } -emit_pmaddw_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, src2: GPR) { append(instructions, inst_pmaddw_r_r_r(dst, src, src2)) } +emit_pmaddw_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, src2: GPR) { append_elem(instructions, inst_pmaddw_r_r_r(dst, src, src2)) } inst_pmadduw_r_r_r :: #force_inline proc "contextless" (dst: GPR, src: GPR, src2: GPR) -> Instruction { return Instruction{mnemonic = .PMADDUW, operand_count = 3, length = 4, ops = {op_gpr(dst), op_gpr(src), op_gpr(src2), {}}} } -emit_pmadduw_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, src2: GPR) { append(instructions, inst_pmadduw_r_r_r(dst, src, src2)) } +emit_pmadduw_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, src2: GPR) { append_elem(instructions, inst_pmadduw_r_r_r(dst, src, src2)) } inst_pmaddh_r_r_r :: #force_inline proc "contextless" (dst: GPR, src: GPR, src2: GPR) -> Instruction { return Instruction{mnemonic = .PMADDH, operand_count = 3, length = 4, ops = {op_gpr(dst), op_gpr(src), op_gpr(src2), {}}} } -emit_pmaddh_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, src2: GPR) { append(instructions, inst_pmaddh_r_r_r(dst, src, src2)) } +emit_pmaddh_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, src2: GPR) { append_elem(instructions, inst_pmaddh_r_r_r(dst, src, src2)) } inst_pmsubw_r_r_r :: #force_inline proc "contextless" (dst: GPR, src: GPR, src2: GPR) -> Instruction { return Instruction{mnemonic = .PMSUBW, operand_count = 3, length = 4, ops = {op_gpr(dst), op_gpr(src), op_gpr(src2), {}}} } -emit_pmsubw_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, src2: GPR) { append(instructions, inst_pmsubw_r_r_r(dst, src, src2)) } +emit_pmsubw_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, src2: GPR) { append_elem(instructions, inst_pmsubw_r_r_r(dst, src, src2)) } inst_pmsubh_r_r_r :: #force_inline proc "contextless" (dst: GPR, src: GPR, src2: GPR) -> Instruction { return Instruction{mnemonic = .PMSUBH, operand_count = 3, length = 4, ops = {op_gpr(dst), op_gpr(src), op_gpr(src2), {}}} } -emit_pmsubh_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, src2: GPR) { append(instructions, inst_pmsubh_r_r_r(dst, src, src2)) } +emit_pmsubh_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, src2: GPR) { append_elem(instructions, inst_pmsubh_r_r_r(dst, src, src2)) } inst_phmadh_r_r_r :: #force_inline proc "contextless" (dst: GPR, src: GPR, src2: GPR) -> Instruction { return Instruction{mnemonic = .PHMADH, operand_count = 3, length = 4, ops = {op_gpr(dst), op_gpr(src), op_gpr(src2), {}}} } -emit_phmadh_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, src2: GPR) { append(instructions, inst_phmadh_r_r_r(dst, src, src2)) } +emit_phmadh_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, src2: GPR) { append_elem(instructions, inst_phmadh_r_r_r(dst, src, src2)) } inst_phmsbh_r_r_r :: #force_inline proc "contextless" (dst: GPR, src: GPR, src2: GPR) -> Instruction { return Instruction{mnemonic = .PHMSBH, operand_count = 3, length = 4, ops = {op_gpr(dst), op_gpr(src), op_gpr(src2), {}}} } -emit_phmsbh_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, src2: GPR) { append(instructions, inst_phmsbh_r_r_r(dst, src, src2)) } +emit_phmsbh_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, src2: GPR) { append_elem(instructions, inst_phmsbh_r_r_r(dst, src, src2)) } inst_pdivw_r_r :: #force_inline proc "contextless" (dst: GPR, src: GPR) -> Instruction { return Instruction{mnemonic = .PDIVW, operand_count = 2, length = 4, ops = {op_gpr(dst), op_gpr(src), {}, {}}} } -emit_pdivw_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR) { append(instructions, inst_pdivw_r_r(dst, src)) } +emit_pdivw_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR) { append_elem(instructions, inst_pdivw_r_r(dst, src)) } inst_pdivuw_r_r :: #force_inline proc "contextless" (dst: GPR, src: GPR) -> Instruction { return Instruction{mnemonic = .PDIVUW, operand_count = 2, length = 4, ops = {op_gpr(dst), op_gpr(src), {}, {}}} } -emit_pdivuw_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR) { append(instructions, inst_pdivuw_r_r(dst, src)) } +emit_pdivuw_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR) { append_elem(instructions, inst_pdivuw_r_r(dst, src)) } inst_pdivbw_r_r :: #force_inline proc "contextless" (dst: GPR, src: GPR) -> Instruction { return Instruction{mnemonic = .PDIVBW, operand_count = 2, length = 4, ops = {op_gpr(dst), op_gpr(src), {}, {}}} } -emit_pdivbw_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR) { append(instructions, inst_pdivbw_r_r(dst, src)) } +emit_pdivbw_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR) { append_elem(instructions, inst_pdivbw_r_r(dst, src)) } inst_pcpyld_r_r_r :: #force_inline proc "contextless" (dst: GPR, src: GPR, src2: GPR) -> Instruction { return Instruction{mnemonic = .PCPYLD, operand_count = 3, length = 4, ops = {op_gpr(dst), op_gpr(src), op_gpr(src2), {}}} } -emit_pcpyld_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, src2: GPR) { append(instructions, inst_pcpyld_r_r_r(dst, src, src2)) } +emit_pcpyld_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, src2: GPR) { append_elem(instructions, inst_pcpyld_r_r_r(dst, src, src2)) } inst_pcpyud_r_r_r :: #force_inline proc "contextless" (dst: GPR, src: GPR, src2: GPR) -> Instruction { return Instruction{mnemonic = .PCPYUD, operand_count = 3, length = 4, ops = {op_gpr(dst), op_gpr(src), op_gpr(src2), {}}} } -emit_pcpyud_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, src2: GPR) { append(instructions, inst_pcpyud_r_r_r(dst, src, src2)) } +emit_pcpyud_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, src2: GPR) { append_elem(instructions, inst_pcpyud_r_r_r(dst, src, src2)) } inst_pcpyh_r_r :: #force_inline proc "contextless" (dst: GPR, src: GPR) -> Instruction { return Instruction{mnemonic = .PCPYH, operand_count = 2, length = 4, ops = {op_gpr(dst), op_gpr(src), {}, {}}} } -emit_pcpyh_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR) { append(instructions, inst_pcpyh_r_r(dst, src)) } +emit_pcpyh_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR) { append_elem(instructions, inst_pcpyh_r_r(dst, src)) } inst_pinth_r_r_r :: #force_inline proc "contextless" (dst: GPR, src: GPR, src2: GPR) -> Instruction { return Instruction{mnemonic = .PINTH, operand_count = 3, length = 4, ops = {op_gpr(dst), op_gpr(src), op_gpr(src2), {}}} } -emit_pinth_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, src2: GPR) { append(instructions, inst_pinth_r_r_r(dst, src, src2)) } +emit_pinth_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, src2: GPR) { append_elem(instructions, inst_pinth_r_r_r(dst, src, src2)) } inst_pintoh_r_r_r :: #force_inline proc "contextless" (dst: GPR, src: GPR, src2: GPR) -> Instruction { return Instruction{mnemonic = .PINTOH, operand_count = 3, length = 4, ops = {op_gpr(dst), op_gpr(src), op_gpr(src2), {}}} } -emit_pintoh_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, src2: GPR) { append(instructions, inst_pintoh_r_r_r(dst, src, src2)) } +emit_pintoh_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, src2: GPR) { append_elem(instructions, inst_pintoh_r_r_r(dst, src, src2)) } inst_pexeh_r_r :: #force_inline proc "contextless" (dst: GPR, src: GPR) -> Instruction { return Instruction{mnemonic = .PEXEH, operand_count = 2, length = 4, ops = {op_gpr(dst), op_gpr(src), {}, {}}} } -emit_pexeh_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR) { append(instructions, inst_pexeh_r_r(dst, src)) } +emit_pexeh_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR) { append_elem(instructions, inst_pexeh_r_r(dst, src)) } inst_pexew_r_r :: #force_inline proc "contextless" (dst: GPR, src: GPR) -> Instruction { return Instruction{mnemonic = .PEXEW, operand_count = 2, length = 4, ops = {op_gpr(dst), op_gpr(src), {}, {}}} } -emit_pexew_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR) { append(instructions, inst_pexew_r_r(dst, src)) } +emit_pexew_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR) { append_elem(instructions, inst_pexew_r_r(dst, src)) } inst_pexch_r_r :: #force_inline proc "contextless" (dst: GPR, src: GPR) -> Instruction { return Instruction{mnemonic = .PEXCH, operand_count = 2, length = 4, ops = {op_gpr(dst), op_gpr(src), {}, {}}} } -emit_pexch_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR) { append(instructions, inst_pexch_r_r(dst, src)) } +emit_pexch_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR) { append_elem(instructions, inst_pexch_r_r(dst, src)) } inst_pexcw_r_r :: #force_inline proc "contextless" (dst: GPR, src: GPR) -> Instruction { return Instruction{mnemonic = .PEXCW, operand_count = 2, length = 4, ops = {op_gpr(dst), op_gpr(src), {}, {}}} } -emit_pexcw_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR) { append(instructions, inst_pexcw_r_r(dst, src)) } +emit_pexcw_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR) { append_elem(instructions, inst_pexcw_r_r(dst, src)) } inst_prot3w_r_r :: #force_inline proc "contextless" (dst: GPR, src: GPR) -> Instruction { return Instruction{mnemonic = .PROT3W, operand_count = 2, length = 4, ops = {op_gpr(dst), op_gpr(src), {}, {}}} } -emit_prot3w_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR) { append(instructions, inst_prot3w_r_r(dst, src)) } +emit_prot3w_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR) { append_elem(instructions, inst_prot3w_r_r(dst, src)) } inst_ppacb_r_r_r :: #force_inline proc "contextless" (dst: GPR, src: GPR, src2: GPR) -> Instruction { return Instruction{mnemonic = .PPACB, operand_count = 3, length = 4, ops = {op_gpr(dst), op_gpr(src), op_gpr(src2), {}}} } -emit_ppacb_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, src2: GPR) { append(instructions, inst_ppacb_r_r_r(dst, src, src2)) } +emit_ppacb_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, src2: GPR) { append_elem(instructions, inst_ppacb_r_r_r(dst, src, src2)) } inst_ppach_r_r_r :: #force_inline proc "contextless" (dst: GPR, src: GPR, src2: GPR) -> Instruction { return Instruction{mnemonic = .PPACH, operand_count = 3, length = 4, ops = {op_gpr(dst), op_gpr(src), op_gpr(src2), {}}} } -emit_ppach_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, src2: GPR) { append(instructions, inst_ppach_r_r_r(dst, src, src2)) } +emit_ppach_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, src2: GPR) { append_elem(instructions, inst_ppach_r_r_r(dst, src, src2)) } inst_ppacw_r_r_r :: #force_inline proc "contextless" (dst: GPR, src: GPR, src2: GPR) -> Instruction { return Instruction{mnemonic = .PPACW, operand_count = 3, length = 4, ops = {op_gpr(dst), op_gpr(src), op_gpr(src2), {}}} } -emit_ppacw_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, src2: GPR) { append(instructions, inst_ppacw_r_r_r(dst, src, src2)) } +emit_ppacw_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, src2: GPR) { append_elem(instructions, inst_ppacw_r_r_r(dst, src, src2)) } inst_ppac5_r_r_r :: #force_inline proc "contextless" (dst: GPR, src: GPR, src2: GPR) -> Instruction { return Instruction{mnemonic = .PPAC5, operand_count = 3, length = 4, ops = {op_gpr(dst), op_gpr(src), op_gpr(src2), {}}} } -emit_ppac5_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, src2: GPR) { append(instructions, inst_ppac5_r_r_r(dst, src, src2)) } +emit_ppac5_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, src2: GPR) { append_elem(instructions, inst_ppac5_r_r_r(dst, src, src2)) } inst_pext5_r_r_r :: #force_inline proc "contextless" (dst: GPR, src: GPR, src2: GPR) -> Instruction { return Instruction{mnemonic = .PEXT5, operand_count = 3, length = 4, ops = {op_gpr(dst), op_gpr(src), op_gpr(src2), {}}} } -emit_pext5_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, src2: GPR) { append(instructions, inst_pext5_r_r_r(dst, src, src2)) } +emit_pext5_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, src2: GPR) { append_elem(instructions, inst_pext5_r_r_r(dst, src, src2)) } inst_pextlb_r_r_r :: #force_inline proc "contextless" (dst: GPR, src: GPR, src2: GPR) -> Instruction { return Instruction{mnemonic = .PEXTLB, operand_count = 3, length = 4, ops = {op_gpr(dst), op_gpr(src), op_gpr(src2), {}}} } -emit_pextlb_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, src2: GPR) { append(instructions, inst_pextlb_r_r_r(dst, src, src2)) } +emit_pextlb_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, src2: GPR) { append_elem(instructions, inst_pextlb_r_r_r(dst, src, src2)) } inst_pextlh_r_r_r :: #force_inline proc "contextless" (dst: GPR, src: GPR, src2: GPR) -> Instruction { return Instruction{mnemonic = .PEXTLH, operand_count = 3, length = 4, ops = {op_gpr(dst), op_gpr(src), op_gpr(src2), {}}} } -emit_pextlh_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, src2: GPR) { append(instructions, inst_pextlh_r_r_r(dst, src, src2)) } +emit_pextlh_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, src2: GPR) { append_elem(instructions, inst_pextlh_r_r_r(dst, src, src2)) } inst_pextlw_r_r_r :: #force_inline proc "contextless" (dst: GPR, src: GPR, src2: GPR) -> Instruction { return Instruction{mnemonic = .PEXTLW, operand_count = 3, length = 4, ops = {op_gpr(dst), op_gpr(src), op_gpr(src2), {}}} } -emit_pextlw_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, src2: GPR) { append(instructions, inst_pextlw_r_r_r(dst, src, src2)) } +emit_pextlw_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, src2: GPR) { append_elem(instructions, inst_pextlw_r_r_r(dst, src, src2)) } inst_pextub_r_r_r :: #force_inline proc "contextless" (dst: GPR, src: GPR, src2: GPR) -> Instruction { return Instruction{mnemonic = .PEXTUB, operand_count = 3, length = 4, ops = {op_gpr(dst), op_gpr(src), op_gpr(src2), {}}} } -emit_pextub_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, src2: GPR) { append(instructions, inst_pextub_r_r_r(dst, src, src2)) } +emit_pextub_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, src2: GPR) { append_elem(instructions, inst_pextub_r_r_r(dst, src, src2)) } inst_pextuh_r_r_r :: #force_inline proc "contextless" (dst: GPR, src: GPR, src2: GPR) -> Instruction { return Instruction{mnemonic = .PEXTUH, operand_count = 3, length = 4, ops = {op_gpr(dst), op_gpr(src), op_gpr(src2), {}}} } -emit_pextuh_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, src2: GPR) { append(instructions, inst_pextuh_r_r_r(dst, src, src2)) } +emit_pextuh_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, src2: GPR) { append_elem(instructions, inst_pextuh_r_r_r(dst, src, src2)) } inst_pextuw_r_r_r :: #force_inline proc "contextless" (dst: GPR, src: GPR, src2: GPR) -> Instruction { return Instruction{mnemonic = .PEXTUW, operand_count = 3, length = 4, ops = {op_gpr(dst), op_gpr(src), op_gpr(src2), {}}} } -emit_pextuw_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, src2: GPR) { append(instructions, inst_pextuw_r_r_r(dst, src, src2)) } +emit_pextuw_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, src2: GPR) { append_elem(instructions, inst_pextuw_r_r_r(dst, src, src2)) } inst_pmfhi_r :: #force_inline proc "contextless" (dst: GPR) -> Instruction { return Instruction{mnemonic = .PMFHI, operand_count = 1, length = 4, ops = {op_gpr(dst), {}, {}, {}}} } -emit_pmfhi_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR) { append(instructions, inst_pmfhi_r(dst)) } +emit_pmfhi_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR) { append_elem(instructions, inst_pmfhi_r(dst)) } inst_pmflo_r :: #force_inline proc "contextless" (dst: GPR) -> Instruction { return Instruction{mnemonic = .PMFLO, operand_count = 1, length = 4, ops = {op_gpr(dst), {}, {}, {}}} } -emit_pmflo_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR) { append(instructions, inst_pmflo_r(dst)) } +emit_pmflo_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR) { append_elem(instructions, inst_pmflo_r(dst)) } inst_pmthi_r :: #force_inline proc "contextless" (dst: GPR) -> Instruction { return Instruction{mnemonic = .PMTHI, operand_count = 1, length = 4, ops = {op_gpr(dst), {}, {}, {}}} } -emit_pmthi_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR) { append(instructions, inst_pmthi_r(dst)) } +emit_pmthi_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR) { append_elem(instructions, inst_pmthi_r(dst)) } inst_pmtlo_r :: #force_inline proc "contextless" (dst: GPR) -> Instruction { return Instruction{mnemonic = .PMTLO, operand_count = 1, length = 4, ops = {op_gpr(dst), {}, {}, {}}} } -emit_pmtlo_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR) { append(instructions, inst_pmtlo_r(dst)) } +emit_pmtlo_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR) { append_elem(instructions, inst_pmtlo_r(dst)) } inst_plzcw_r_r :: #force_inline proc "contextless" (dst: GPR, src: GPR) -> Instruction { return Instruction{mnemonic = .PLZCW, operand_count = 2, length = 4, ops = {op_gpr(dst), op_gpr(src), {}, {}}} } -emit_plzcw_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR) { append(instructions, inst_plzcw_r_r(dst, src)) } +emit_plzcw_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR) { append_elem(instructions, inst_plzcw_r_r(dst, src)) } inst_pabsh_r_r :: #force_inline proc "contextless" (dst: GPR, src: GPR) -> Instruction { return Instruction{mnemonic = .PABSH, operand_count = 2, length = 4, ops = {op_gpr(dst), op_gpr(src), {}, {}}} } -emit_pabsh_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR) { append(instructions, inst_pabsh_r_r(dst, src)) } +emit_pabsh_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR) { append_elem(instructions, inst_pabsh_r_r(dst, src)) } inst_pabsw_r_r :: #force_inline proc "contextless" (dst: GPR, src: GPR) -> Instruction { return Instruction{mnemonic = .PABSW, operand_count = 2, length = 4, ops = {op_gpr(dst), op_gpr(src), {}, {}}} } -emit_pabsw_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR) { append(instructions, inst_pabsw_r_r(dst, src)) } +emit_pabsw_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR) { append_elem(instructions, inst_pabsw_r_r(dst, src)) } inst_pmaxh_r_r_r :: #force_inline proc "contextless" (dst: GPR, src: GPR, src2: GPR) -> Instruction { return Instruction{mnemonic = .PMAXH, operand_count = 3, length = 4, ops = {op_gpr(dst), op_gpr(src), op_gpr(src2), {}}} } -emit_pmaxh_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, src2: GPR) { append(instructions, inst_pmaxh_r_r_r(dst, src, src2)) } +emit_pmaxh_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, src2: GPR) { append_elem(instructions, inst_pmaxh_r_r_r(dst, src, src2)) } inst_pmaxw_r_r_r :: #force_inline proc "contextless" (dst: GPR, src: GPR, src2: GPR) -> Instruction { return Instruction{mnemonic = .PMAXW, operand_count = 3, length = 4, ops = {op_gpr(dst), op_gpr(src), op_gpr(src2), {}}} } -emit_pmaxw_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, src2: GPR) { append(instructions, inst_pmaxw_r_r_r(dst, src, src2)) } +emit_pmaxw_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, src2: GPR) { append_elem(instructions, inst_pmaxw_r_r_r(dst, src, src2)) } inst_pminh_r_r_r :: #force_inline proc "contextless" (dst: GPR, src: GPR, src2: GPR) -> Instruction { return Instruction{mnemonic = .PMINH, operand_count = 3, length = 4, ops = {op_gpr(dst), op_gpr(src), op_gpr(src2), {}}} } -emit_pminh_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, src2: GPR) { append(instructions, inst_pminh_r_r_r(dst, src, src2)) } +emit_pminh_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, src2: GPR) { append_elem(instructions, inst_pminh_r_r_r(dst, src, src2)) } inst_pminw_r_r_r :: #force_inline proc "contextless" (dst: GPR, src: GPR, src2: GPR) -> Instruction { return Instruction{mnemonic = .PMINW, operand_count = 3, length = 4, ops = {op_gpr(dst), op_gpr(src), op_gpr(src2), {}}} } -emit_pminw_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, src2: GPR) { append(instructions, inst_pminw_r_r_r(dst, src, src2)) } +emit_pminw_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, src2: GPR) { append_elem(instructions, inst_pminw_r_r_r(dst, src, src2)) } inst_mfsa_r :: #force_inline proc "contextless" (dst: GPR) -> Instruction { return Instruction{mnemonic = .MFSA, operand_count = 1, length = 4, ops = {op_gpr(dst), {}, {}, {}}} } -emit_mfsa_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR) { append(instructions, inst_mfsa_r(dst)) } +emit_mfsa_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR) { append_elem(instructions, inst_mfsa_r(dst)) } inst_mtsa_r :: #force_inline proc "contextless" (dst: GPR) -> Instruction { return Instruction{mnemonic = .MTSA, operand_count = 1, length = 4, ops = {op_gpr(dst), {}, {}, {}}} } -emit_mtsa_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR) { append(instructions, inst_mtsa_r(dst)) } +emit_mtsa_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR) { append_elem(instructions, inst_mtsa_r(dst)) } inst_mtsab_r_i16 :: #force_inline proc "contextless" (dst: GPR, imm: i64) -> Instruction { return Instruction{mnemonic = .MTSAB, operand_count = 2, length = 4, ops = {op_gpr(dst), op_imm(imm, 2), {}, {}}} } -emit_mtsab_r_i16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, imm: i64) { append(instructions, inst_mtsab_r_i16(dst, imm)) } +emit_mtsab_r_i16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, imm: i64) { append_elem(instructions, inst_mtsab_r_i16(dst, imm)) } inst_mtsah_r_i16 :: #force_inline proc "contextless" (dst: GPR, imm: i64) -> Instruction { return Instruction{mnemonic = .MTSAH, operand_count = 2, length = 4, ops = {op_gpr(dst), op_imm(imm, 2), {}, {}}} } -emit_mtsah_r_i16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, imm: i64) { append(instructions, inst_mtsah_r_i16(dst, imm)) } +emit_mtsah_r_i16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, imm: i64) { append_elem(instructions, inst_mtsah_r_i16(dst, imm)) } inst_addq_ph_r_r_r :: #force_inline proc "contextless" (dst: GPR, src: GPR, src2: GPR) -> Instruction { return Instruction{mnemonic = .ADDQ_PH, operand_count = 3, length = 4, ops = {op_gpr(dst), op_gpr(src), op_gpr(src2), {}}} } -emit_addq_ph_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, src2: GPR) { append(instructions, inst_addq_ph_r_r_r(dst, src, src2)) } +emit_addq_ph_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, src2: GPR) { append_elem(instructions, inst_addq_ph_r_r_r(dst, src, src2)) } inst_addq_s_ph_r_r_r :: #force_inline proc "contextless" (dst: GPR, src: GPR, src2: GPR) -> Instruction { return Instruction{mnemonic = .ADDQ_S_PH, operand_count = 3, length = 4, ops = {op_gpr(dst), op_gpr(src), op_gpr(src2), {}}} } -emit_addq_s_ph_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, src2: GPR) { append(instructions, inst_addq_s_ph_r_r_r(dst, src, src2)) } +emit_addq_s_ph_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, src2: GPR) { append_elem(instructions, inst_addq_s_ph_r_r_r(dst, src, src2)) } inst_addq_s_w_r_r_r :: #force_inline proc "contextless" (dst: GPR, src: GPR, src2: GPR) -> Instruction { return Instruction{mnemonic = .ADDQ_S_W, operand_count = 3, length = 4, ops = {op_gpr(dst), op_gpr(src), op_gpr(src2), {}}} } -emit_addq_s_w_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, src2: GPR) { append(instructions, inst_addq_s_w_r_r_r(dst, src, src2)) } +emit_addq_s_w_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, src2: GPR) { append_elem(instructions, inst_addq_s_w_r_r_r(dst, src, src2)) } inst_subq_ph_r_r_r :: #force_inline proc "contextless" (dst: GPR, src: GPR, src2: GPR) -> Instruction { return Instruction{mnemonic = .SUBQ_PH, operand_count = 3, length = 4, ops = {op_gpr(dst), op_gpr(src), op_gpr(src2), {}}} } -emit_subq_ph_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, src2: GPR) { append(instructions, inst_subq_ph_r_r_r(dst, src, src2)) } +emit_subq_ph_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, src2: GPR) { append_elem(instructions, inst_subq_ph_r_r_r(dst, src, src2)) } inst_subq_s_ph_r_r_r :: #force_inline proc "contextless" (dst: GPR, src: GPR, src2: GPR) -> Instruction { return Instruction{mnemonic = .SUBQ_S_PH, operand_count = 3, length = 4, ops = {op_gpr(dst), op_gpr(src), op_gpr(src2), {}}} } -emit_subq_s_ph_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, src2: GPR) { append(instructions, inst_subq_s_ph_r_r_r(dst, src, src2)) } +emit_subq_s_ph_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, src2: GPR) { append_elem(instructions, inst_subq_s_ph_r_r_r(dst, src, src2)) } inst_subq_s_w_r_r_r :: #force_inline proc "contextless" (dst: GPR, src: GPR, src2: GPR) -> Instruction { return Instruction{mnemonic = .SUBQ_S_W, operand_count = 3, length = 4, ops = {op_gpr(dst), op_gpr(src), op_gpr(src2), {}}} } -emit_subq_s_w_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, src2: GPR) { append(instructions, inst_subq_s_w_r_r_r(dst, src, src2)) } +emit_subq_s_w_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, src2: GPR) { append_elem(instructions, inst_subq_s_w_r_r_r(dst, src, src2)) } inst_addu_qb_r_r_r :: #force_inline proc "contextless" (dst: GPR, src: GPR, src2: GPR) -> Instruction { return Instruction{mnemonic = .ADDU_QB, operand_count = 3, length = 4, ops = {op_gpr(dst), op_gpr(src), op_gpr(src2), {}}} } -emit_addu_qb_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, src2: GPR) { append(instructions, inst_addu_qb_r_r_r(dst, src, src2)) } +emit_addu_qb_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, src2: GPR) { append_elem(instructions, inst_addu_qb_r_r_r(dst, src, src2)) } inst_addu_s_qb_r_r_r :: #force_inline proc "contextless" (dst: GPR, src: GPR, src2: GPR) -> Instruction { return Instruction{mnemonic = .ADDU_S_QB, operand_count = 3, length = 4, ops = {op_gpr(dst), op_gpr(src), op_gpr(src2), {}}} } -emit_addu_s_qb_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, src2: GPR) { append(instructions, inst_addu_s_qb_r_r_r(dst, src, src2)) } +emit_addu_s_qb_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, src2: GPR) { append_elem(instructions, inst_addu_s_qb_r_r_r(dst, src, src2)) } inst_addu_ph_r_r_r :: #force_inline proc "contextless" (dst: GPR, src: GPR, src2: GPR) -> Instruction { return Instruction{mnemonic = .ADDU_PH, operand_count = 3, length = 4, ops = {op_gpr(dst), op_gpr(src), op_gpr(src2), {}}} } -emit_addu_ph_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, src2: GPR) { append(instructions, inst_addu_ph_r_r_r(dst, src, src2)) } +emit_addu_ph_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, src2: GPR) { append_elem(instructions, inst_addu_ph_r_r_r(dst, src, src2)) } inst_addu_s_ph_r_r_r :: #force_inline proc "contextless" (dst: GPR, src: GPR, src2: GPR) -> Instruction { return Instruction{mnemonic = .ADDU_S_PH, operand_count = 3, length = 4, ops = {op_gpr(dst), op_gpr(src), op_gpr(src2), {}}} } -emit_addu_s_ph_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, src2: GPR) { append(instructions, inst_addu_s_ph_r_r_r(dst, src, src2)) } +emit_addu_s_ph_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, src2: GPR) { append_elem(instructions, inst_addu_s_ph_r_r_r(dst, src, src2)) } inst_subu_qb_r_r_r :: #force_inline proc "contextless" (dst: GPR, src: GPR, src2: GPR) -> Instruction { return Instruction{mnemonic = .SUBU_QB, operand_count = 3, length = 4, ops = {op_gpr(dst), op_gpr(src), op_gpr(src2), {}}} } -emit_subu_qb_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, src2: GPR) { append(instructions, inst_subu_qb_r_r_r(dst, src, src2)) } +emit_subu_qb_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, src2: GPR) { append_elem(instructions, inst_subu_qb_r_r_r(dst, src, src2)) } inst_subu_s_qb_r_r_r :: #force_inline proc "contextless" (dst: GPR, src: GPR, src2: GPR) -> Instruction { return Instruction{mnemonic = .SUBU_S_QB, operand_count = 3, length = 4, ops = {op_gpr(dst), op_gpr(src), op_gpr(src2), {}}} } -emit_subu_s_qb_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, src2: GPR) { append(instructions, inst_subu_s_qb_r_r_r(dst, src, src2)) } +emit_subu_s_qb_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, src2: GPR) { append_elem(instructions, inst_subu_s_qb_r_r_r(dst, src, src2)) } inst_subu_ph_r_r_r :: #force_inline proc "contextless" (dst: GPR, src: GPR, src2: GPR) -> Instruction { return Instruction{mnemonic = .SUBU_PH, operand_count = 3, length = 4, ops = {op_gpr(dst), op_gpr(src), op_gpr(src2), {}}} } -emit_subu_ph_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, src2: GPR) { append(instructions, inst_subu_ph_r_r_r(dst, src, src2)) } +emit_subu_ph_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, src2: GPR) { append_elem(instructions, inst_subu_ph_r_r_r(dst, src, src2)) } inst_subu_s_ph_r_r_r :: #force_inline proc "contextless" (dst: GPR, src: GPR, src2: GPR) -> Instruction { return Instruction{mnemonic = .SUBU_S_PH, operand_count = 3, length = 4, ops = {op_gpr(dst), op_gpr(src), op_gpr(src2), {}}} } -emit_subu_s_ph_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, src2: GPR) { append(instructions, inst_subu_s_ph_r_r_r(dst, src, src2)) } +emit_subu_s_ph_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, src2: GPR) { append_elem(instructions, inst_subu_s_ph_r_r_r(dst, src, src2)) } inst_addsc_r_r_r :: #force_inline proc "contextless" (dst: GPR, src: GPR, src2: GPR) -> Instruction { return Instruction{mnemonic = .ADDSC, operand_count = 3, length = 4, ops = {op_gpr(dst), op_gpr(src), op_gpr(src2), {}}} } -emit_addsc_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, src2: GPR) { append(instructions, inst_addsc_r_r_r(dst, src, src2)) } +emit_addsc_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, src2: GPR) { append_elem(instructions, inst_addsc_r_r_r(dst, src, src2)) } inst_addwc_r_r_r :: #force_inline proc "contextless" (dst: GPR, src: GPR, src2: GPR) -> Instruction { return Instruction{mnemonic = .ADDWC, operand_count = 3, length = 4, ops = {op_gpr(dst), op_gpr(src), op_gpr(src2), {}}} } -emit_addwc_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, src2: GPR) { append(instructions, inst_addwc_r_r_r(dst, src, src2)) } +emit_addwc_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, src2: GPR) { append_elem(instructions, inst_addwc_r_r_r(dst, src, src2)) } inst_muleu_s_ph_qbl_r_r_r :: #force_inline proc "contextless" (dst: GPR, src: GPR, src2: GPR) -> Instruction { return Instruction{mnemonic = .MULEU_S_PH_QBL, operand_count = 3, length = 4, ops = {op_gpr(dst), op_gpr(src), op_gpr(src2), {}}} } -emit_muleu_s_ph_qbl_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, src2: GPR) { append(instructions, inst_muleu_s_ph_qbl_r_r_r(dst, src, src2)) } +emit_muleu_s_ph_qbl_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, src2: GPR) { append_elem(instructions, inst_muleu_s_ph_qbl_r_r_r(dst, src, src2)) } inst_muleu_s_ph_qbr_r_r_r :: #force_inline proc "contextless" (dst: GPR, src: GPR, src2: GPR) -> Instruction { return Instruction{mnemonic = .MULEU_S_PH_QBR, operand_count = 3, length = 4, ops = {op_gpr(dst), op_gpr(src), op_gpr(src2), {}}} } -emit_muleu_s_ph_qbr_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, src2: GPR) { append(instructions, inst_muleu_s_ph_qbr_r_r_r(dst, src, src2)) } +emit_muleu_s_ph_qbr_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, src2: GPR) { append_elem(instructions, inst_muleu_s_ph_qbr_r_r_r(dst, src, src2)) } inst_muleq_s_w_phl_r_r_r :: #force_inline proc "contextless" (dst: GPR, src: GPR, src2: GPR) -> Instruction { return Instruction{mnemonic = .MULEQ_S_W_PHL, operand_count = 3, length = 4, ops = {op_gpr(dst), op_gpr(src), op_gpr(src2), {}}} } -emit_muleq_s_w_phl_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, src2: GPR) { append(instructions, inst_muleq_s_w_phl_r_r_r(dst, src, src2)) } +emit_muleq_s_w_phl_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, src2: GPR) { append_elem(instructions, inst_muleq_s_w_phl_r_r_r(dst, src, src2)) } inst_muleq_s_w_phr_r_r_r :: #force_inline proc "contextless" (dst: GPR, src: GPR, src2: GPR) -> Instruction { return Instruction{mnemonic = .MULEQ_S_W_PHR, operand_count = 3, length = 4, ops = {op_gpr(dst), op_gpr(src), op_gpr(src2), {}}} } -emit_muleq_s_w_phr_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, src2: GPR) { append(instructions, inst_muleq_s_w_phr_r_r_r(dst, src, src2)) } +emit_muleq_s_w_phr_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, src2: GPR) { append_elem(instructions, inst_muleq_s_w_phr_r_r_r(dst, src, src2)) } inst_mulq_rs_ph_r_r_r :: #force_inline proc "contextless" (dst: GPR, src: GPR, src2: GPR) -> Instruction { return Instruction{mnemonic = .MULQ_RS_PH, operand_count = 3, length = 4, ops = {op_gpr(dst), op_gpr(src), op_gpr(src2), {}}} } -emit_mulq_rs_ph_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, src2: GPR) { append(instructions, inst_mulq_rs_ph_r_r_r(dst, src, src2)) } +emit_mulq_rs_ph_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, src2: GPR) { append_elem(instructions, inst_mulq_rs_ph_r_r_r(dst, src, src2)) } inst_mulq_s_ph_r_r_r :: #force_inline proc "contextless" (dst: GPR, src: GPR, src2: GPR) -> Instruction { return Instruction{mnemonic = .MULQ_S_PH, operand_count = 3, length = 4, ops = {op_gpr(dst), op_gpr(src), op_gpr(src2), {}}} } -emit_mulq_s_ph_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, src2: GPR) { append(instructions, inst_mulq_s_ph_r_r_r(dst, src, src2)) } +emit_mulq_s_ph_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, src2: GPR) { append_elem(instructions, inst_mulq_s_ph_r_r_r(dst, src, src2)) } inst_mulsaq_s_w_ph_i5_r_r :: #force_inline proc "contextless" (imm: i64, dst: GPR, src: GPR) -> Instruction { return Instruction{mnemonic = .MULSAQ_S_W_PH, operand_count = 3, length = 4, ops = {op_imm(imm, 1), op_gpr(dst), op_gpr(src), {}}} } -emit_mulsaq_s_w_ph_i5_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, dst: GPR, src: GPR) { append(instructions, inst_mulsaq_s_w_ph_i5_r_r(imm, dst, src)) } +emit_mulsaq_s_w_ph_i5_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, dst: GPR, src: GPR) { append_elem(instructions, inst_mulsaq_s_w_ph_i5_r_r(imm, dst, src)) } inst_dpaq_s_w_ph_i5_r_r :: #force_inline proc "contextless" (imm: i64, dst: GPR, src: GPR) -> Instruction { return Instruction{mnemonic = .DPAQ_S_W_PH, operand_count = 3, length = 4, ops = {op_imm(imm, 1), op_gpr(dst), op_gpr(src), {}}} } -emit_dpaq_s_w_ph_i5_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, dst: GPR, src: GPR) { append(instructions, inst_dpaq_s_w_ph_i5_r_r(imm, dst, src)) } +emit_dpaq_s_w_ph_i5_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, dst: GPR, src: GPR) { append_elem(instructions, inst_dpaq_s_w_ph_i5_r_r(imm, dst, src)) } inst_dpsq_s_w_ph_i5_r_r :: #force_inline proc "contextless" (imm: i64, dst: GPR, src: GPR) -> Instruction { return Instruction{mnemonic = .DPSQ_S_W_PH, operand_count = 3, length = 4, ops = {op_imm(imm, 1), op_gpr(dst), op_gpr(src), {}}} } -emit_dpsq_s_w_ph_i5_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, dst: GPR, src: GPR) { append(instructions, inst_dpsq_s_w_ph_i5_r_r(imm, dst, src)) } +emit_dpsq_s_w_ph_i5_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, dst: GPR, src: GPR) { append_elem(instructions, inst_dpsq_s_w_ph_i5_r_r(imm, dst, src)) } inst_dpaq_sa_l_w_i5_r_r :: #force_inline proc "contextless" (imm: i64, dst: GPR, src: GPR) -> Instruction { return Instruction{mnemonic = .DPAQ_SA_L_W, operand_count = 3, length = 4, ops = {op_imm(imm, 1), op_gpr(dst), op_gpr(src), {}}} } -emit_dpaq_sa_l_w_i5_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, dst: GPR, src: GPR) { append(instructions, inst_dpaq_sa_l_w_i5_r_r(imm, dst, src)) } +emit_dpaq_sa_l_w_i5_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, dst: GPR, src: GPR) { append_elem(instructions, inst_dpaq_sa_l_w_i5_r_r(imm, dst, src)) } inst_dpsq_sa_l_w_i5_r_r :: #force_inline proc "contextless" (imm: i64, dst: GPR, src: GPR) -> Instruction { return Instruction{mnemonic = .DPSQ_SA_L_W, operand_count = 3, length = 4, ops = {op_imm(imm, 1), op_gpr(dst), op_gpr(src), {}}} } -emit_dpsq_sa_l_w_i5_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, dst: GPR, src: GPR) { append(instructions, inst_dpsq_sa_l_w_i5_r_r(imm, dst, src)) } +emit_dpsq_sa_l_w_i5_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, dst: GPR, src: GPR) { append_elem(instructions, inst_dpsq_sa_l_w_i5_r_r(imm, dst, src)) } inst_dpau_h_qbl_i5_r_r :: #force_inline proc "contextless" (imm: i64, dst: GPR, src: GPR) -> Instruction { return Instruction{mnemonic = .DPAU_H_QBL, operand_count = 3, length = 4, ops = {op_imm(imm, 1), op_gpr(dst), op_gpr(src), {}}} } -emit_dpau_h_qbl_i5_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, dst: GPR, src: GPR) { append(instructions, inst_dpau_h_qbl_i5_r_r(imm, dst, src)) } +emit_dpau_h_qbl_i5_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, dst: GPR, src: GPR) { append_elem(instructions, inst_dpau_h_qbl_i5_r_r(imm, dst, src)) } inst_dpau_h_qbr_i5_r_r :: #force_inline proc "contextless" (imm: i64, dst: GPR, src: GPR) -> Instruction { return Instruction{mnemonic = .DPAU_H_QBR, operand_count = 3, length = 4, ops = {op_imm(imm, 1), op_gpr(dst), op_gpr(src), {}}} } -emit_dpau_h_qbr_i5_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, dst: GPR, src: GPR) { append(instructions, inst_dpau_h_qbr_i5_r_r(imm, dst, src)) } +emit_dpau_h_qbr_i5_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, dst: GPR, src: GPR) { append_elem(instructions, inst_dpau_h_qbr_i5_r_r(imm, dst, src)) } inst_dpsu_h_qbl_i5_r_r :: #force_inline proc "contextless" (imm: i64, dst: GPR, src: GPR) -> Instruction { return Instruction{mnemonic = .DPSU_H_QBL, operand_count = 3, length = 4, ops = {op_imm(imm, 1), op_gpr(dst), op_gpr(src), {}}} } -emit_dpsu_h_qbl_i5_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, dst: GPR, src: GPR) { append(instructions, inst_dpsu_h_qbl_i5_r_r(imm, dst, src)) } +emit_dpsu_h_qbl_i5_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, dst: GPR, src: GPR) { append_elem(instructions, inst_dpsu_h_qbl_i5_r_r(imm, dst, src)) } inst_dpsu_h_qbr_i5_r_r :: #force_inline proc "contextless" (imm: i64, dst: GPR, src: GPR) -> Instruction { return Instruction{mnemonic = .DPSU_H_QBR, operand_count = 3, length = 4, ops = {op_imm(imm, 1), op_gpr(dst), op_gpr(src), {}}} } -emit_dpsu_h_qbr_i5_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, dst: GPR, src: GPR) { append(instructions, inst_dpsu_h_qbr_i5_r_r(imm, dst, src)) } +emit_dpsu_h_qbr_i5_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, dst: GPR, src: GPR) { append_elem(instructions, inst_dpsu_h_qbr_i5_r_r(imm, dst, src)) } inst_dpa_w_ph_i5_r_r :: #force_inline proc "contextless" (imm: i64, dst: GPR, src: GPR) -> Instruction { return Instruction{mnemonic = .DPA_W_PH, operand_count = 3, length = 4, ops = {op_imm(imm, 1), op_gpr(dst), op_gpr(src), {}}} } -emit_dpa_w_ph_i5_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, dst: GPR, src: GPR) { append(instructions, inst_dpa_w_ph_i5_r_r(imm, dst, src)) } +emit_dpa_w_ph_i5_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, dst: GPR, src: GPR) { append_elem(instructions, inst_dpa_w_ph_i5_r_r(imm, dst, src)) } inst_dps_w_ph_i5_r_r :: #force_inline proc "contextless" (imm: i64, dst: GPR, src: GPR) -> Instruction { return Instruction{mnemonic = .DPS_W_PH, operand_count = 3, length = 4, ops = {op_imm(imm, 1), op_gpr(dst), op_gpr(src), {}}} } -emit_dps_w_ph_i5_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, dst: GPR, src: GPR) { append(instructions, inst_dps_w_ph_i5_r_r(imm, dst, src)) } +emit_dps_w_ph_i5_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, dst: GPR, src: GPR) { append_elem(instructions, inst_dps_w_ph_i5_r_r(imm, dst, src)) } inst_dpax_w_ph_i5_r_r :: #force_inline proc "contextless" (imm: i64, dst: GPR, src: GPR) -> Instruction { return Instruction{mnemonic = .DPAX_W_PH, operand_count = 3, length = 4, ops = {op_imm(imm, 1), op_gpr(dst), op_gpr(src), {}}} } -emit_dpax_w_ph_i5_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, dst: GPR, src: GPR) { append(instructions, inst_dpax_w_ph_i5_r_r(imm, dst, src)) } +emit_dpax_w_ph_i5_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, dst: GPR, src: GPR) { append_elem(instructions, inst_dpax_w_ph_i5_r_r(imm, dst, src)) } inst_dpsx_w_ph_i5_r_r :: #force_inline proc "contextless" (imm: i64, dst: GPR, src: GPR) -> Instruction { return Instruction{mnemonic = .DPSX_W_PH, operand_count = 3, length = 4, ops = {op_imm(imm, 1), op_gpr(dst), op_gpr(src), {}}} } -emit_dpsx_w_ph_i5_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, dst: GPR, src: GPR) { append(instructions, inst_dpsx_w_ph_i5_r_r(imm, dst, src)) } +emit_dpsx_w_ph_i5_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, dst: GPR, src: GPR) { append_elem(instructions, inst_dpsx_w_ph_i5_r_r(imm, dst, src)) } inst_maq_s_w_phl_i5_r_r :: #force_inline proc "contextless" (imm: i64, dst: GPR, src: GPR) -> Instruction { return Instruction{mnemonic = .MAQ_S_W_PHL, operand_count = 3, length = 4, ops = {op_imm(imm, 1), op_gpr(dst), op_gpr(src), {}}} } -emit_maq_s_w_phl_i5_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, dst: GPR, src: GPR) { append(instructions, inst_maq_s_w_phl_i5_r_r(imm, dst, src)) } +emit_maq_s_w_phl_i5_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, dst: GPR, src: GPR) { append_elem(instructions, inst_maq_s_w_phl_i5_r_r(imm, dst, src)) } inst_maq_s_w_phr_i5_r_r :: #force_inline proc "contextless" (imm: i64, dst: GPR, src: GPR) -> Instruction { return Instruction{mnemonic = .MAQ_S_W_PHR, operand_count = 3, length = 4, ops = {op_imm(imm, 1), op_gpr(dst), op_gpr(src), {}}} } -emit_maq_s_w_phr_i5_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, dst: GPR, src: GPR) { append(instructions, inst_maq_s_w_phr_i5_r_r(imm, dst, src)) } +emit_maq_s_w_phr_i5_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, dst: GPR, src: GPR) { append_elem(instructions, inst_maq_s_w_phr_i5_r_r(imm, dst, src)) } inst_maq_sa_w_phl_i5_r_r :: #force_inline proc "contextless" (imm: i64, dst: GPR, src: GPR) -> Instruction { return Instruction{mnemonic = .MAQ_SA_W_PHL, operand_count = 3, length = 4, ops = {op_imm(imm, 1), op_gpr(dst), op_gpr(src), {}}} } -emit_maq_sa_w_phl_i5_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, dst: GPR, src: GPR) { append(instructions, inst_maq_sa_w_phl_i5_r_r(imm, dst, src)) } +emit_maq_sa_w_phl_i5_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, dst: GPR, src: GPR) { append_elem(instructions, inst_maq_sa_w_phl_i5_r_r(imm, dst, src)) } inst_maq_sa_w_phr_i5_r_r :: #force_inline proc "contextless" (imm: i64, dst: GPR, src: GPR) -> Instruction { return Instruction{mnemonic = .MAQ_SA_W_PHR, operand_count = 3, length = 4, ops = {op_imm(imm, 1), op_gpr(dst), op_gpr(src), {}}} } -emit_maq_sa_w_phr_i5_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, dst: GPR, src: GPR) { append(instructions, inst_maq_sa_w_phr_i5_r_r(imm, dst, src)) } +emit_maq_sa_w_phr_i5_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, dst: GPR, src: GPR) { append_elem(instructions, inst_maq_sa_w_phr_i5_r_r(imm, dst, src)) } inst_extr_w_r_i5_i5 :: #force_inline proc "contextless" (dst: GPR, imm: i64, imm2: i64) -> Instruction { return Instruction{mnemonic = .EXTR_W, operand_count = 3, length = 4, ops = {op_gpr(dst), op_imm(imm, 1), op_imm(imm2, 1), {}}} } -emit_extr_w_r_i5_i5 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, imm: i64, imm2: i64) { append(instructions, inst_extr_w_r_i5_i5(dst, imm, imm2)) } +emit_extr_w_r_i5_i5 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, imm: i64, imm2: i64) { append_elem(instructions, inst_extr_w_r_i5_i5(dst, imm, imm2)) } inst_extr_r_w_r_i5_i5 :: #force_inline proc "contextless" (dst: GPR, imm: i64, imm2: i64) -> Instruction { return Instruction{mnemonic = .EXTR_R_W, operand_count = 3, length = 4, ops = {op_gpr(dst), op_imm(imm, 1), op_imm(imm2, 1), {}}} } -emit_extr_r_w_r_i5_i5 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, imm: i64, imm2: i64) { append(instructions, inst_extr_r_w_r_i5_i5(dst, imm, imm2)) } +emit_extr_r_w_r_i5_i5 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, imm: i64, imm2: i64) { append_elem(instructions, inst_extr_r_w_r_i5_i5(dst, imm, imm2)) } inst_extr_rs_w_r_i5_i5 :: #force_inline proc "contextless" (dst: GPR, imm: i64, imm2: i64) -> Instruction { return Instruction{mnemonic = .EXTR_RS_W, operand_count = 3, length = 4, ops = {op_gpr(dst), op_imm(imm, 1), op_imm(imm2, 1), {}}} } -emit_extr_rs_w_r_i5_i5 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, imm: i64, imm2: i64) { append(instructions, inst_extr_rs_w_r_i5_i5(dst, imm, imm2)) } +emit_extr_rs_w_r_i5_i5 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, imm: i64, imm2: i64) { append_elem(instructions, inst_extr_rs_w_r_i5_i5(dst, imm, imm2)) } inst_extr_s_h_r_i5_i5 :: #force_inline proc "contextless" (dst: GPR, imm: i64, imm2: i64) -> Instruction { return Instruction{mnemonic = .EXTR_S_H, operand_count = 3, length = 4, ops = {op_gpr(dst), op_imm(imm, 1), op_imm(imm2, 1), {}}} } -emit_extr_s_h_r_i5_i5 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, imm: i64, imm2: i64) { append(instructions, inst_extr_s_h_r_i5_i5(dst, imm, imm2)) } +emit_extr_s_h_r_i5_i5 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, imm: i64, imm2: i64) { append_elem(instructions, inst_extr_s_h_r_i5_i5(dst, imm, imm2)) } inst_extrv_w_r_i5_r :: #force_inline proc "contextless" (dst: GPR, imm: i64, src: GPR) -> Instruction { return Instruction{mnemonic = .EXTRV_W, operand_count = 3, length = 4, ops = {op_gpr(dst), op_imm(imm, 1), op_gpr(src), {}}} } -emit_extrv_w_r_i5_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, imm: i64, src: GPR) { append(instructions, inst_extrv_w_r_i5_r(dst, imm, src)) } +emit_extrv_w_r_i5_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, imm: i64, src: GPR) { append_elem(instructions, inst_extrv_w_r_i5_r(dst, imm, src)) } inst_extrv_r_w_r_i5_r :: #force_inline proc "contextless" (dst: GPR, imm: i64, src: GPR) -> Instruction { return Instruction{mnemonic = .EXTRV_R_W, operand_count = 3, length = 4, ops = {op_gpr(dst), op_imm(imm, 1), op_gpr(src), {}}} } -emit_extrv_r_w_r_i5_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, imm: i64, src: GPR) { append(instructions, inst_extrv_r_w_r_i5_r(dst, imm, src)) } +emit_extrv_r_w_r_i5_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, imm: i64, src: GPR) { append_elem(instructions, inst_extrv_r_w_r_i5_r(dst, imm, src)) } inst_extrv_rs_w_r_i5_r :: #force_inline proc "contextless" (dst: GPR, imm: i64, src: GPR) -> Instruction { return Instruction{mnemonic = .EXTRV_RS_W, operand_count = 3, length = 4, ops = {op_gpr(dst), op_imm(imm, 1), op_gpr(src), {}}} } -emit_extrv_rs_w_r_i5_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, imm: i64, src: GPR) { append(instructions, inst_extrv_rs_w_r_i5_r(dst, imm, src)) } +emit_extrv_rs_w_r_i5_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, imm: i64, src: GPR) { append_elem(instructions, inst_extrv_rs_w_r_i5_r(dst, imm, src)) } inst_extrv_s_h_r_i5_r :: #force_inline proc "contextless" (dst: GPR, imm: i64, src: GPR) -> Instruction { return Instruction{mnemonic = .EXTRV_S_H, operand_count = 3, length = 4, ops = {op_gpr(dst), op_imm(imm, 1), op_gpr(src), {}}} } -emit_extrv_s_h_r_i5_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, imm: i64, src: GPR) { append(instructions, inst_extrv_s_h_r_i5_r(dst, imm, src)) } +emit_extrv_s_h_r_i5_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, imm: i64, src: GPR) { append_elem(instructions, inst_extrv_s_h_r_i5_r(dst, imm, src)) } inst_extp_r_i5_i5 :: #force_inline proc "contextless" (dst: GPR, imm: i64, imm2: i64) -> Instruction { return Instruction{mnemonic = .EXTP, operand_count = 3, length = 4, ops = {op_gpr(dst), op_imm(imm, 1), op_imm(imm2, 1), {}}} } -emit_extp_r_i5_i5 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, imm: i64, imm2: i64) { append(instructions, inst_extp_r_i5_i5(dst, imm, imm2)) } +emit_extp_r_i5_i5 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, imm: i64, imm2: i64) { append_elem(instructions, inst_extp_r_i5_i5(dst, imm, imm2)) } inst_extpv_r_i5_r :: #force_inline proc "contextless" (dst: GPR, imm: i64, src: GPR) -> Instruction { return Instruction{mnemonic = .EXTPV, operand_count = 3, length = 4, ops = {op_gpr(dst), op_imm(imm, 1), op_gpr(src), {}}} } -emit_extpv_r_i5_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, imm: i64, src: GPR) { append(instructions, inst_extpv_r_i5_r(dst, imm, src)) } +emit_extpv_r_i5_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, imm: i64, src: GPR) { append_elem(instructions, inst_extpv_r_i5_r(dst, imm, src)) } inst_extpdp_r_i5_i5 :: #force_inline proc "contextless" (dst: GPR, imm: i64, imm2: i64) -> Instruction { return Instruction{mnemonic = .EXTPDP, operand_count = 3, length = 4, ops = {op_gpr(dst), op_imm(imm, 1), op_imm(imm2, 1), {}}} } -emit_extpdp_r_i5_i5 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, imm: i64, imm2: i64) { append(instructions, inst_extpdp_r_i5_i5(dst, imm, imm2)) } +emit_extpdp_r_i5_i5 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, imm: i64, imm2: i64) { append_elem(instructions, inst_extpdp_r_i5_i5(dst, imm, imm2)) } inst_extpdpv_r_i5_r :: #force_inline proc "contextless" (dst: GPR, imm: i64, src: GPR) -> Instruction { return Instruction{mnemonic = .EXTPDPV, operand_count = 3, length = 4, ops = {op_gpr(dst), op_imm(imm, 1), op_gpr(src), {}}} } -emit_extpdpv_r_i5_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, imm: i64, src: GPR) { append(instructions, inst_extpdpv_r_i5_r(dst, imm, src)) } +emit_extpdpv_r_i5_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, imm: i64, src: GPR) { append_elem(instructions, inst_extpdpv_r_i5_r(dst, imm, src)) } inst_shilo_i5_i5 :: #force_inline proc "contextless" (imm: i64, imm2: i64) -> Instruction { return Instruction{mnemonic = .SHILO, operand_count = 2, length = 4, ops = {op_imm(imm, 1), op_imm(imm2, 1), {}, {}}} } -emit_shilo_i5_i5 :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, imm2: i64) { append(instructions, inst_shilo_i5_i5(imm, imm2)) } +emit_shilo_i5_i5 :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, imm2: i64) { append_elem(instructions, inst_shilo_i5_i5(imm, imm2)) } inst_shilov_i5_r :: #force_inline proc "contextless" (imm: i64, dst: GPR) -> Instruction { return Instruction{mnemonic = .SHILOV, operand_count = 2, length = 4, ops = {op_imm(imm, 1), op_gpr(dst), {}, {}}} } -emit_shilov_i5_r :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, dst: GPR) { append(instructions, inst_shilov_i5_r(imm, dst)) } +emit_shilov_i5_r :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, dst: GPR) { append_elem(instructions, inst_shilov_i5_r(imm, dst)) } inst_mthlip_r_i5 :: #force_inline proc "contextless" (dst: GPR, imm: i64) -> Instruction { return Instruction{mnemonic = .MTHLIP, operand_count = 2, length = 4, ops = {op_gpr(dst), op_imm(imm, 1), {}, {}}} } -emit_mthlip_r_i5 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, imm: i64) { append(instructions, inst_mthlip_r_i5(dst, imm)) } +emit_mthlip_r_i5 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, imm: i64) { append_elem(instructions, inst_mthlip_r_i5(dst, imm)) } inst_wrdsp_r_i5 :: #force_inline proc "contextless" (dst: GPR, imm: i64) -> Instruction { return Instruction{mnemonic = .WRDSP, operand_count = 2, length = 4, ops = {op_gpr(dst), op_imm(imm, 1), {}, {}}} } -emit_wrdsp_r_i5 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, imm: i64) { append(instructions, inst_wrdsp_r_i5(dst, imm)) } +emit_wrdsp_r_i5 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, imm: i64) { append_elem(instructions, inst_wrdsp_r_i5(dst, imm)) } inst_rddsp_r_i5 :: #force_inline proc "contextless" (dst: GPR, imm: i64) -> Instruction { return Instruction{mnemonic = .RDDSP, operand_count = 2, length = 4, ops = {op_gpr(dst), op_imm(imm, 1), {}, {}}} } -emit_rddsp_r_i5 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, imm: i64) { append(instructions, inst_rddsp_r_i5(dst, imm)) } +emit_rddsp_r_i5 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, imm: i64) { append_elem(instructions, inst_rddsp_r_i5(dst, imm)) } inst_precrq_qb_ph_r_r_r :: #force_inline proc "contextless" (dst: GPR, src: GPR, src2: GPR) -> Instruction { return Instruction{mnemonic = .PRECRQ_QB_PH, operand_count = 3, length = 4, ops = {op_gpr(dst), op_gpr(src), op_gpr(src2), {}}} } -emit_precrq_qb_ph_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, src2: GPR) { append(instructions, inst_precrq_qb_ph_r_r_r(dst, src, src2)) } +emit_precrq_qb_ph_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, src2: GPR) { append_elem(instructions, inst_precrq_qb_ph_r_r_r(dst, src, src2)) } inst_precrq_ph_w_r_r_r :: #force_inline proc "contextless" (dst: GPR, src: GPR, src2: GPR) -> Instruction { return Instruction{mnemonic = .PRECRQ_PH_W, operand_count = 3, length = 4, ops = {op_gpr(dst), op_gpr(src), op_gpr(src2), {}}} } -emit_precrq_ph_w_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, src2: GPR) { append(instructions, inst_precrq_ph_w_r_r_r(dst, src, src2)) } +emit_precrq_ph_w_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, src2: GPR) { append_elem(instructions, inst_precrq_ph_w_r_r_r(dst, src, src2)) } inst_precrqu_s_qb_ph_r_r_r :: #force_inline proc "contextless" (dst: GPR, src: GPR, src2: GPR) -> Instruction { return Instruction{mnemonic = .PRECRQU_S_QB_PH, operand_count = 3, length = 4, ops = {op_gpr(dst), op_gpr(src), op_gpr(src2), {}}} } -emit_precrqu_s_qb_ph_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, src2: GPR) { append(instructions, inst_precrqu_s_qb_ph_r_r_r(dst, src, src2)) } +emit_precrqu_s_qb_ph_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, src2: GPR) { append_elem(instructions, inst_precrqu_s_qb_ph_r_r_r(dst, src, src2)) } inst_preceq_w_phl_r_r :: #force_inline proc "contextless" (dst: GPR, src: GPR) -> Instruction { return Instruction{mnemonic = .PRECEQ_W_PHL, operand_count = 2, length = 4, ops = {op_gpr(dst), op_gpr(src), {}, {}}} } -emit_preceq_w_phl_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR) { append(instructions, inst_preceq_w_phl_r_r(dst, src)) } +emit_preceq_w_phl_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR) { append_elem(instructions, inst_preceq_w_phl_r_r(dst, src)) } inst_preceq_w_phr_r_r :: #force_inline proc "contextless" (dst: GPR, src: GPR) -> Instruction { return Instruction{mnemonic = .PRECEQ_W_PHR, operand_count = 2, length = 4, ops = {op_gpr(dst), op_gpr(src), {}, {}}} } -emit_preceq_w_phr_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR) { append(instructions, inst_preceq_w_phr_r_r(dst, src)) } +emit_preceq_w_phr_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR) { append_elem(instructions, inst_preceq_w_phr_r_r(dst, src)) } inst_precequ_ph_qbl_r_r :: #force_inline proc "contextless" (dst: GPR, src: GPR) -> Instruction { return Instruction{mnemonic = .PRECEQU_PH_QBL, operand_count = 2, length = 4, ops = {op_gpr(dst), op_gpr(src), {}, {}}} } -emit_precequ_ph_qbl_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR) { append(instructions, inst_precequ_ph_qbl_r_r(dst, src)) } +emit_precequ_ph_qbl_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR) { append_elem(instructions, inst_precequ_ph_qbl_r_r(dst, src)) } inst_precequ_ph_qbr_r_r :: #force_inline proc "contextless" (dst: GPR, src: GPR) -> Instruction { return Instruction{mnemonic = .PRECEQU_PH_QBR, operand_count = 2, length = 4, ops = {op_gpr(dst), op_gpr(src), {}, {}}} } -emit_precequ_ph_qbr_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR) { append(instructions, inst_precequ_ph_qbr_r_r(dst, src)) } +emit_precequ_ph_qbr_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR) { append_elem(instructions, inst_precequ_ph_qbr_r_r(dst, src)) } inst_precequ_ph_qbla_r_r :: #force_inline proc "contextless" (dst: GPR, src: GPR) -> Instruction { return Instruction{mnemonic = .PRECEQU_PH_QBLA, operand_count = 2, length = 4, ops = {op_gpr(dst), op_gpr(src), {}, {}}} } -emit_precequ_ph_qbla_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR) { append(instructions, inst_precequ_ph_qbla_r_r(dst, src)) } +emit_precequ_ph_qbla_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR) { append_elem(instructions, inst_precequ_ph_qbla_r_r(dst, src)) } inst_precequ_ph_qbra_r_r :: #force_inline proc "contextless" (dst: GPR, src: GPR) -> Instruction { return Instruction{mnemonic = .PRECEQU_PH_QBRA, operand_count = 2, length = 4, ops = {op_gpr(dst), op_gpr(src), {}, {}}} } -emit_precequ_ph_qbra_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR) { append(instructions, inst_precequ_ph_qbra_r_r(dst, src)) } +emit_precequ_ph_qbra_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR) { append_elem(instructions, inst_precequ_ph_qbra_r_r(dst, src)) } inst_preceu_ph_qbl_r_r :: #force_inline proc "contextless" (dst: GPR, src: GPR) -> Instruction { return Instruction{mnemonic = .PRECEU_PH_QBL, operand_count = 2, length = 4, ops = {op_gpr(dst), op_gpr(src), {}, {}}} } -emit_preceu_ph_qbl_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR) { append(instructions, inst_preceu_ph_qbl_r_r(dst, src)) } +emit_preceu_ph_qbl_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR) { append_elem(instructions, inst_preceu_ph_qbl_r_r(dst, src)) } inst_preceu_ph_qbr_r_r :: #force_inline proc "contextless" (dst: GPR, src: GPR) -> Instruction { return Instruction{mnemonic = .PRECEU_PH_QBR, operand_count = 2, length = 4, ops = {op_gpr(dst), op_gpr(src), {}, {}}} } -emit_preceu_ph_qbr_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR) { append(instructions, inst_preceu_ph_qbr_r_r(dst, src)) } +emit_preceu_ph_qbr_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR) { append_elem(instructions, inst_preceu_ph_qbr_r_r(dst, src)) } inst_preceu_ph_qbla_r_r :: #force_inline proc "contextless" (dst: GPR, src: GPR) -> Instruction { return Instruction{mnemonic = .PRECEU_PH_QBLA, operand_count = 2, length = 4, ops = {op_gpr(dst), op_gpr(src), {}, {}}} } -emit_preceu_ph_qbla_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR) { append(instructions, inst_preceu_ph_qbla_r_r(dst, src)) } +emit_preceu_ph_qbla_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR) { append_elem(instructions, inst_preceu_ph_qbla_r_r(dst, src)) } inst_preceu_ph_qbra_r_r :: #force_inline proc "contextless" (dst: GPR, src: GPR) -> Instruction { return Instruction{mnemonic = .PRECEU_PH_QBRA, operand_count = 2, length = 4, ops = {op_gpr(dst), op_gpr(src), {}, {}}} } -emit_preceu_ph_qbra_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR) { append(instructions, inst_preceu_ph_qbra_r_r(dst, src)) } +emit_preceu_ph_qbra_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR) { append_elem(instructions, inst_preceu_ph_qbra_r_r(dst, src)) } inst_precrq_rs_ph_w_r_r_r :: #force_inline proc "contextless" (dst: GPR, src: GPR, src2: GPR) -> Instruction { return Instruction{mnemonic = .PRECRQ_RS_PH_W, operand_count = 3, length = 4, ops = {op_gpr(dst), op_gpr(src), op_gpr(src2), {}}} } -emit_precrq_rs_ph_w_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, src2: GPR) { append(instructions, inst_precrq_rs_ph_w_r_r_r(dst, src, src2)) } +emit_precrq_rs_ph_w_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, src2: GPR) { append_elem(instructions, inst_precrq_rs_ph_w_r_r_r(dst, src, src2)) } inst_cmpu_eq_qb_r_r :: #force_inline proc "contextless" (dst: GPR, src: GPR) -> Instruction { return Instruction{mnemonic = .CMPU_EQ_QB, operand_count = 2, length = 4, ops = {op_gpr(dst), op_gpr(src), {}, {}}} } -emit_cmpu_eq_qb_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR) { append(instructions, inst_cmpu_eq_qb_r_r(dst, src)) } +emit_cmpu_eq_qb_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR) { append_elem(instructions, inst_cmpu_eq_qb_r_r(dst, src)) } inst_cmpu_lt_qb_r_r :: #force_inline proc "contextless" (dst: GPR, src: GPR) -> Instruction { return Instruction{mnemonic = .CMPU_LT_QB, operand_count = 2, length = 4, ops = {op_gpr(dst), op_gpr(src), {}, {}}} } -emit_cmpu_lt_qb_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR) { append(instructions, inst_cmpu_lt_qb_r_r(dst, src)) } +emit_cmpu_lt_qb_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR) { append_elem(instructions, inst_cmpu_lt_qb_r_r(dst, src)) } inst_cmpu_le_qb_r_r :: #force_inline proc "contextless" (dst: GPR, src: GPR) -> Instruction { return Instruction{mnemonic = .CMPU_LE_QB, operand_count = 2, length = 4, ops = {op_gpr(dst), op_gpr(src), {}, {}}} } -emit_cmpu_le_qb_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR) { append(instructions, inst_cmpu_le_qb_r_r(dst, src)) } +emit_cmpu_le_qb_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR) { append_elem(instructions, inst_cmpu_le_qb_r_r(dst, src)) } inst_cmp_eq_ph_r_r :: #force_inline proc "contextless" (dst: GPR, src: GPR) -> Instruction { return Instruction{mnemonic = .CMP_EQ_PH, operand_count = 2, length = 4, ops = {op_gpr(dst), op_gpr(src), {}, {}}} } -emit_cmp_eq_ph_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR) { append(instructions, inst_cmp_eq_ph_r_r(dst, src)) } +emit_cmp_eq_ph_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR) { append_elem(instructions, inst_cmp_eq_ph_r_r(dst, src)) } inst_cmp_lt_ph_r_r :: #force_inline proc "contextless" (dst: GPR, src: GPR) -> Instruction { return Instruction{mnemonic = .CMP_LT_PH, operand_count = 2, length = 4, ops = {op_gpr(dst), op_gpr(src), {}, {}}} } -emit_cmp_lt_ph_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR) { append(instructions, inst_cmp_lt_ph_r_r(dst, src)) } +emit_cmp_lt_ph_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR) { append_elem(instructions, inst_cmp_lt_ph_r_r(dst, src)) } inst_cmp_le_ph_r_r :: #force_inline proc "contextless" (dst: GPR, src: GPR) -> Instruction { return Instruction{mnemonic = .CMP_LE_PH, operand_count = 2, length = 4, ops = {op_gpr(dst), op_gpr(src), {}, {}}} } -emit_cmp_le_ph_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR) { append(instructions, inst_cmp_le_ph_r_r(dst, src)) } +emit_cmp_le_ph_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR) { append_elem(instructions, inst_cmp_le_ph_r_r(dst, src)) } inst_cmpgu_eq_qb_r_r_r :: #force_inline proc "contextless" (dst: GPR, src: GPR, src2: GPR) -> Instruction { return Instruction{mnemonic = .CMPGU_EQ_QB, operand_count = 3, length = 4, ops = {op_gpr(dst), op_gpr(src), op_gpr(src2), {}}} } -emit_cmpgu_eq_qb_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, src2: GPR) { append(instructions, inst_cmpgu_eq_qb_r_r_r(dst, src, src2)) } +emit_cmpgu_eq_qb_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, src2: GPR) { append_elem(instructions, inst_cmpgu_eq_qb_r_r_r(dst, src, src2)) } inst_cmpgu_lt_qb_r_r_r :: #force_inline proc "contextless" (dst: GPR, src: GPR, src2: GPR) -> Instruction { return Instruction{mnemonic = .CMPGU_LT_QB, operand_count = 3, length = 4, ops = {op_gpr(dst), op_gpr(src), op_gpr(src2), {}}} } -emit_cmpgu_lt_qb_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, src2: GPR) { append(instructions, inst_cmpgu_lt_qb_r_r_r(dst, src, src2)) } +emit_cmpgu_lt_qb_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, src2: GPR) { append_elem(instructions, inst_cmpgu_lt_qb_r_r_r(dst, src, src2)) } inst_cmpgu_le_qb_r_r_r :: #force_inline proc "contextless" (dst: GPR, src: GPR, src2: GPR) -> Instruction { return Instruction{mnemonic = .CMPGU_LE_QB, operand_count = 3, length = 4, ops = {op_gpr(dst), op_gpr(src), op_gpr(src2), {}}} } -emit_cmpgu_le_qb_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, src2: GPR) { append(instructions, inst_cmpgu_le_qb_r_r_r(dst, src, src2)) } +emit_cmpgu_le_qb_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, src2: GPR) { append_elem(instructions, inst_cmpgu_le_qb_r_r_r(dst, src, src2)) } inst_pick_qb_r_r_r :: #force_inline proc "contextless" (dst: GPR, src: GPR, src2: GPR) -> Instruction { return Instruction{mnemonic = .PICK_QB, operand_count = 3, length = 4, ops = {op_gpr(dst), op_gpr(src), op_gpr(src2), {}}} } -emit_pick_qb_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, src2: GPR) { append(instructions, inst_pick_qb_r_r_r(dst, src, src2)) } +emit_pick_qb_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, src2: GPR) { append_elem(instructions, inst_pick_qb_r_r_r(dst, src, src2)) } inst_pick_ph_r_r_r :: #force_inline proc "contextless" (dst: GPR, src: GPR, src2: GPR) -> Instruction { return Instruction{mnemonic = .PICK_PH, operand_count = 3, length = 4, ops = {op_gpr(dst), op_gpr(src), op_gpr(src2), {}}} } -emit_pick_ph_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, src2: GPR) { append(instructions, inst_pick_ph_r_r_r(dst, src, src2)) } +emit_pick_ph_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, src2: GPR) { append_elem(instructions, inst_pick_ph_r_r_r(dst, src, src2)) } inst_shll_qb_r_r_i5 :: #force_inline proc "contextless" (dst: GPR, src: GPR, imm: i64) -> Instruction { return Instruction{mnemonic = .SHLL_QB, operand_count = 3, length = 4, ops = {op_gpr(dst), op_gpr(src), op_imm(imm, 1), {}}} } -emit_shll_qb_r_r_i5 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, imm: i64) { append(instructions, inst_shll_qb_r_r_i5(dst, src, imm)) } +emit_shll_qb_r_r_i5 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, imm: i64) { append_elem(instructions, inst_shll_qb_r_r_i5(dst, src, imm)) } inst_shll_ph_r_r_i5 :: #force_inline proc "contextless" (dst: GPR, src: GPR, imm: i64) -> Instruction { return Instruction{mnemonic = .SHLL_PH, operand_count = 3, length = 4, ops = {op_gpr(dst), op_gpr(src), op_imm(imm, 1), {}}} } -emit_shll_ph_r_r_i5 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, imm: i64) { append(instructions, inst_shll_ph_r_r_i5(dst, src, imm)) } +emit_shll_ph_r_r_i5 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, imm: i64) { append_elem(instructions, inst_shll_ph_r_r_i5(dst, src, imm)) } inst_shll_s_ph_r_r_i5 :: #force_inline proc "contextless" (dst: GPR, src: GPR, imm: i64) -> Instruction { return Instruction{mnemonic = .SHLL_S_PH, operand_count = 3, length = 4, ops = {op_gpr(dst), op_gpr(src), op_imm(imm, 1), {}}} } -emit_shll_s_ph_r_r_i5 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, imm: i64) { append(instructions, inst_shll_s_ph_r_r_i5(dst, src, imm)) } +emit_shll_s_ph_r_r_i5 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, imm: i64) { append_elem(instructions, inst_shll_s_ph_r_r_i5(dst, src, imm)) } inst_shll_s_w_r_r_i5 :: #force_inline proc "contextless" (dst: GPR, src: GPR, imm: i64) -> Instruction { return Instruction{mnemonic = .SHLL_S_W, operand_count = 3, length = 4, ops = {op_gpr(dst), op_gpr(src), op_imm(imm, 1), {}}} } -emit_shll_s_w_r_r_i5 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, imm: i64) { append(instructions, inst_shll_s_w_r_r_i5(dst, src, imm)) } +emit_shll_s_w_r_r_i5 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, imm: i64) { append_elem(instructions, inst_shll_s_w_r_r_i5(dst, src, imm)) } inst_shllv_qb_r_r_r :: #force_inline proc "contextless" (dst: GPR, src: GPR, src2: GPR) -> Instruction { return Instruction{mnemonic = .SHLLV_QB, operand_count = 3, length = 4, ops = {op_gpr(dst), op_gpr(src), op_gpr(src2), {}}} } -emit_shllv_qb_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, src2: GPR) { append(instructions, inst_shllv_qb_r_r_r(dst, src, src2)) } +emit_shllv_qb_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, src2: GPR) { append_elem(instructions, inst_shllv_qb_r_r_r(dst, src, src2)) } inst_shllv_ph_r_r_r :: #force_inline proc "contextless" (dst: GPR, src: GPR, src2: GPR) -> Instruction { return Instruction{mnemonic = .SHLLV_PH, operand_count = 3, length = 4, ops = {op_gpr(dst), op_gpr(src), op_gpr(src2), {}}} } -emit_shllv_ph_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, src2: GPR) { append(instructions, inst_shllv_ph_r_r_r(dst, src, src2)) } +emit_shllv_ph_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, src2: GPR) { append_elem(instructions, inst_shllv_ph_r_r_r(dst, src, src2)) } inst_shllv_s_ph_r_r_r :: #force_inline proc "contextless" (dst: GPR, src: GPR, src2: GPR) -> Instruction { return Instruction{mnemonic = .SHLLV_S_PH, operand_count = 3, length = 4, ops = {op_gpr(dst), op_gpr(src), op_gpr(src2), {}}} } -emit_shllv_s_ph_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, src2: GPR) { append(instructions, inst_shllv_s_ph_r_r_r(dst, src, src2)) } +emit_shllv_s_ph_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, src2: GPR) { append_elem(instructions, inst_shllv_s_ph_r_r_r(dst, src, src2)) } inst_shllv_s_w_r_r_r :: #force_inline proc "contextless" (dst: GPR, src: GPR, src2: GPR) -> Instruction { return Instruction{mnemonic = .SHLLV_S_W, operand_count = 3, length = 4, ops = {op_gpr(dst), op_gpr(src), op_gpr(src2), {}}} } -emit_shllv_s_w_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, src2: GPR) { append(instructions, inst_shllv_s_w_r_r_r(dst, src, src2)) } +emit_shllv_s_w_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, src2: GPR) { append_elem(instructions, inst_shllv_s_w_r_r_r(dst, src, src2)) } inst_shrl_qb_r_r_i5 :: #force_inline proc "contextless" (dst: GPR, src: GPR, imm: i64) -> Instruction { return Instruction{mnemonic = .SHRL_QB, operand_count = 3, length = 4, ops = {op_gpr(dst), op_gpr(src), op_imm(imm, 1), {}}} } -emit_shrl_qb_r_r_i5 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, imm: i64) { append(instructions, inst_shrl_qb_r_r_i5(dst, src, imm)) } +emit_shrl_qb_r_r_i5 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, imm: i64) { append_elem(instructions, inst_shrl_qb_r_r_i5(dst, src, imm)) } inst_shrl_ph_r_r_i5 :: #force_inline proc "contextless" (dst: GPR, src: GPR, imm: i64) -> Instruction { return Instruction{mnemonic = .SHRL_PH, operand_count = 3, length = 4, ops = {op_gpr(dst), op_gpr(src), op_imm(imm, 1), {}}} } -emit_shrl_ph_r_r_i5 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, imm: i64) { append(instructions, inst_shrl_ph_r_r_i5(dst, src, imm)) } +emit_shrl_ph_r_r_i5 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, imm: i64) { append_elem(instructions, inst_shrl_ph_r_r_i5(dst, src, imm)) } inst_shrlv_qb_r_r_r :: #force_inline proc "contextless" (dst: GPR, src: GPR, src2: GPR) -> Instruction { return Instruction{mnemonic = .SHRLV_QB, operand_count = 3, length = 4, ops = {op_gpr(dst), op_gpr(src), op_gpr(src2), {}}} } -emit_shrlv_qb_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, src2: GPR) { append(instructions, inst_shrlv_qb_r_r_r(dst, src, src2)) } +emit_shrlv_qb_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, src2: GPR) { append_elem(instructions, inst_shrlv_qb_r_r_r(dst, src, src2)) } inst_shrlv_ph_r_r_r :: #force_inline proc "contextless" (dst: GPR, src: GPR, src2: GPR) -> Instruction { return Instruction{mnemonic = .SHRLV_PH, operand_count = 3, length = 4, ops = {op_gpr(dst), op_gpr(src), op_gpr(src2), {}}} } -emit_shrlv_ph_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, src2: GPR) { append(instructions, inst_shrlv_ph_r_r_r(dst, src, src2)) } +emit_shrlv_ph_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, src2: GPR) { append_elem(instructions, inst_shrlv_ph_r_r_r(dst, src, src2)) } inst_shra_qb_r_r_i5 :: #force_inline proc "contextless" (dst: GPR, src: GPR, imm: i64) -> Instruction { return Instruction{mnemonic = .SHRA_QB, operand_count = 3, length = 4, ops = {op_gpr(dst), op_gpr(src), op_imm(imm, 1), {}}} } -emit_shra_qb_r_r_i5 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, imm: i64) { append(instructions, inst_shra_qb_r_r_i5(dst, src, imm)) } +emit_shra_qb_r_r_i5 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, imm: i64) { append_elem(instructions, inst_shra_qb_r_r_i5(dst, src, imm)) } inst_shra_r_qb_r_r_i5 :: #force_inline proc "contextless" (dst: GPR, src: GPR, imm: i64) -> Instruction { return Instruction{mnemonic = .SHRA_R_QB, operand_count = 3, length = 4, ops = {op_gpr(dst), op_gpr(src), op_imm(imm, 1), {}}} } -emit_shra_r_qb_r_r_i5 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, imm: i64) { append(instructions, inst_shra_r_qb_r_r_i5(dst, src, imm)) } +emit_shra_r_qb_r_r_i5 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, imm: i64) { append_elem(instructions, inst_shra_r_qb_r_r_i5(dst, src, imm)) } inst_shra_ph_r_r_i5 :: #force_inline proc "contextless" (dst: GPR, src: GPR, imm: i64) -> Instruction { return Instruction{mnemonic = .SHRA_PH, operand_count = 3, length = 4, ops = {op_gpr(dst), op_gpr(src), op_imm(imm, 1), {}}} } -emit_shra_ph_r_r_i5 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, imm: i64) { append(instructions, inst_shra_ph_r_r_i5(dst, src, imm)) } +emit_shra_ph_r_r_i5 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, imm: i64) { append_elem(instructions, inst_shra_ph_r_r_i5(dst, src, imm)) } inst_shra_r_ph_r_r_i5 :: #force_inline proc "contextless" (dst: GPR, src: GPR, imm: i64) -> Instruction { return Instruction{mnemonic = .SHRA_R_PH, operand_count = 3, length = 4, ops = {op_gpr(dst), op_gpr(src), op_imm(imm, 1), {}}} } -emit_shra_r_ph_r_r_i5 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, imm: i64) { append(instructions, inst_shra_r_ph_r_r_i5(dst, src, imm)) } +emit_shra_r_ph_r_r_i5 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, imm: i64) { append_elem(instructions, inst_shra_r_ph_r_r_i5(dst, src, imm)) } inst_shra_r_w_r_r_i5 :: #force_inline proc "contextless" (dst: GPR, src: GPR, imm: i64) -> Instruction { return Instruction{mnemonic = .SHRA_R_W, operand_count = 3, length = 4, ops = {op_gpr(dst), op_gpr(src), op_imm(imm, 1), {}}} } -emit_shra_r_w_r_r_i5 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, imm: i64) { append(instructions, inst_shra_r_w_r_r_i5(dst, src, imm)) } +emit_shra_r_w_r_r_i5 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, imm: i64) { append_elem(instructions, inst_shra_r_w_r_r_i5(dst, src, imm)) } inst_shrav_qb_r_r_r :: #force_inline proc "contextless" (dst: GPR, src: GPR, src2: GPR) -> Instruction { return Instruction{mnemonic = .SHRAV_QB, operand_count = 3, length = 4, ops = {op_gpr(dst), op_gpr(src), op_gpr(src2), {}}} } -emit_shrav_qb_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, src2: GPR) { append(instructions, inst_shrav_qb_r_r_r(dst, src, src2)) } +emit_shrav_qb_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, src2: GPR) { append_elem(instructions, inst_shrav_qb_r_r_r(dst, src, src2)) } inst_shrav_r_qb_r_r_r :: #force_inline proc "contextless" (dst: GPR, src: GPR, src2: GPR) -> Instruction { return Instruction{mnemonic = .SHRAV_R_QB, operand_count = 3, length = 4, ops = {op_gpr(dst), op_gpr(src), op_gpr(src2), {}}} } -emit_shrav_r_qb_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, src2: GPR) { append(instructions, inst_shrav_r_qb_r_r_r(dst, src, src2)) } +emit_shrav_r_qb_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, src2: GPR) { append_elem(instructions, inst_shrav_r_qb_r_r_r(dst, src, src2)) } inst_shrav_ph_r_r_r :: #force_inline proc "contextless" (dst: GPR, src: GPR, src2: GPR) -> Instruction { return Instruction{mnemonic = .SHRAV_PH, operand_count = 3, length = 4, ops = {op_gpr(dst), op_gpr(src), op_gpr(src2), {}}} } -emit_shrav_ph_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, src2: GPR) { append(instructions, inst_shrav_ph_r_r_r(dst, src, src2)) } +emit_shrav_ph_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, src2: GPR) { append_elem(instructions, inst_shrav_ph_r_r_r(dst, src, src2)) } inst_shrav_r_ph_r_r_r :: #force_inline proc "contextless" (dst: GPR, src: GPR, src2: GPR) -> Instruction { return Instruction{mnemonic = .SHRAV_R_PH, operand_count = 3, length = 4, ops = {op_gpr(dst), op_gpr(src), op_gpr(src2), {}}} } -emit_shrav_r_ph_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, src2: GPR) { append(instructions, inst_shrav_r_ph_r_r_r(dst, src, src2)) } +emit_shrav_r_ph_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, src2: GPR) { append_elem(instructions, inst_shrav_r_ph_r_r_r(dst, src, src2)) } inst_shrav_r_w_r_r_r :: #force_inline proc "contextless" (dst: GPR, src: GPR, src2: GPR) -> Instruction { return Instruction{mnemonic = .SHRAV_R_W, operand_count = 3, length = 4, ops = {op_gpr(dst), op_gpr(src), op_gpr(src2), {}}} } -emit_shrav_r_w_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, src2: GPR) { append(instructions, inst_shrav_r_w_r_r_r(dst, src, src2)) } +emit_shrav_r_w_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, src2: GPR) { append_elem(instructions, inst_shrav_r_w_r_r_r(dst, src, src2)) } inst_lbux_r_r_r :: #force_inline proc "contextless" (dst: GPR, src: GPR, src2: GPR) -> Instruction { return Instruction{mnemonic = .LBUX, operand_count = 3, length = 4, ops = {op_gpr(dst), op_gpr(src), op_gpr(src2), {}}} } -emit_lbux_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, src2: GPR) { append(instructions, inst_lbux_r_r_r(dst, src, src2)) } +emit_lbux_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, src2: GPR) { append_elem(instructions, inst_lbux_r_r_r(dst, src, src2)) } inst_lhx_r_r_r :: #force_inline proc "contextless" (dst: GPR, src: GPR, src2: GPR) -> Instruction { return Instruction{mnemonic = .LHX, operand_count = 3, length = 4, ops = {op_gpr(dst), op_gpr(src), op_gpr(src2), {}}} } -emit_lhx_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, src2: GPR) { append(instructions, inst_lhx_r_r_r(dst, src, src2)) } +emit_lhx_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, src2: GPR) { append_elem(instructions, inst_lhx_r_r_r(dst, src, src2)) } inst_lwx_r_r_r :: #force_inline proc "contextless" (dst: GPR, src: GPR, src2: GPR) -> Instruction { return Instruction{mnemonic = .LWX, operand_count = 3, length = 4, ops = {op_gpr(dst), op_gpr(src), op_gpr(src2), {}}} } -emit_lwx_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, src2: GPR) { append(instructions, inst_lwx_r_r_r(dst, src, src2)) } +emit_lwx_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR, src2: GPR) { append_elem(instructions, inst_lwx_r_r_r(dst, src, src2)) } inst_bposge32_rel :: #force_inline proc "contextless" (target: u32) -> Instruction { return Instruction{mnemonic = .BPOSGE32, operand_count = 1, length = 4, ops = {op_label(target), {}, {}, {}}} } -emit_bposge32_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, target: u32) { append(instructions, inst_bposge32_rel(target)) } +emit_bposge32_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, target: u32) { append_elem(instructions, inst_bposge32_rel(target)) } inst_insv_r_r :: #force_inline proc "contextless" (dst: GPR, src: GPR) -> Instruction { return Instruction{mnemonic = .INSV, operand_count = 2, length = 4, ops = {op_gpr(dst), op_gpr(src), {}, {}}} } -emit_insv_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR) { append(instructions, inst_insv_r_r(dst, src)) } +emit_insv_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR) { append_elem(instructions, inst_insv_r_r(dst, src)) } inst_bitrev_r_r :: #force_inline proc "contextless" (dst: GPR, src: GPR) -> Instruction { return Instruction{mnemonic = .BITREV, operand_count = 2, length = 4, ops = {op_gpr(dst), op_gpr(src), {}, {}}} } -emit_bitrev_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR) { append(instructions, inst_bitrev_r_r(dst, src)) } +emit_bitrev_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR) { append_elem(instructions, inst_bitrev_r_r(dst, src)) } inst_absq_s_ph_r_r :: #force_inline proc "contextless" (dst: GPR, src: GPR) -> Instruction { return Instruction{mnemonic = .ABSQ_S_PH, operand_count = 2, length = 4, ops = {op_gpr(dst), op_gpr(src), {}, {}}} } -emit_absq_s_ph_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR) { append(instructions, inst_absq_s_ph_r_r(dst, src)) } +emit_absq_s_ph_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR) { append_elem(instructions, inst_absq_s_ph_r_r(dst, src)) } inst_absq_s_w_r_r :: #force_inline proc "contextless" (dst: GPR, src: GPR) -> Instruction { return Instruction{mnemonic = .ABSQ_S_W, operand_count = 2, length = 4, ops = {op_gpr(dst), op_gpr(src), {}, {}}} } -emit_absq_s_w_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR) { append(instructions, inst_absq_s_w_r_r(dst, src)) } +emit_absq_s_w_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR) { append_elem(instructions, inst_absq_s_w_r_r(dst, src)) } inst_repl_ph_r_i5 :: #force_inline proc "contextless" (dst: GPR, imm: i64) -> Instruction { return Instruction{mnemonic = .REPL_PH, operand_count = 2, length = 4, ops = {op_gpr(dst), op_imm(imm, 1), {}, {}}} } -emit_repl_ph_r_i5 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, imm: i64) { append(instructions, inst_repl_ph_r_i5(dst, imm)) } +emit_repl_ph_r_i5 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, imm: i64) { append_elem(instructions, inst_repl_ph_r_i5(dst, imm)) } inst_replv_ph_r_r :: #force_inline proc "contextless" (dst: GPR, src: GPR) -> Instruction { return Instruction{mnemonic = .REPLV_PH, operand_count = 2, length = 4, ops = {op_gpr(dst), op_gpr(src), {}, {}}} } -emit_replv_ph_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR) { append(instructions, inst_replv_ph_r_r(dst, src)) } +emit_replv_ph_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR) { append_elem(instructions, inst_replv_ph_r_r(dst, src)) } inst_repl_qb_r_i5 :: #force_inline proc "contextless" (dst: GPR, imm: i64) -> Instruction { return Instruction{mnemonic = .REPL_QB, operand_count = 2, length = 4, ops = {op_gpr(dst), op_imm(imm, 1), {}, {}}} } -emit_repl_qb_r_i5 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, imm: i64) { append(instructions, inst_repl_qb_r_i5(dst, imm)) } +emit_repl_qb_r_i5 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, imm: i64) { append_elem(instructions, inst_repl_qb_r_i5(dst, imm)) } inst_replv_qb_r_r :: #force_inline proc "contextless" (dst: GPR, src: GPR) -> Instruction { return Instruction{mnemonic = .REPLV_QB, operand_count = 2, length = 4, ops = {op_gpr(dst), op_gpr(src), {}, {}}} } -emit_replv_qb_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR) { append(instructions, inst_replv_qb_r_r(dst, src)) } +emit_replv_qb_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: GPR) { append_elem(instructions, inst_replv_qb_r_r(dst, src)) } inst_addv_b_w_w_w :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .ADDV_B, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_addv_b_w_w_w :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_addv_b_w_w_w(dst, src, src2)) } +emit_addv_b_w_w_w :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_addv_b_w_w_w(dst, src, src2)) } inst_addv_h_w_w_w :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .ADDV_H, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_addv_h_w_w_w :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_addv_h_w_w_w(dst, src, src2)) } +emit_addv_h_w_w_w :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_addv_h_w_w_w(dst, src, src2)) } inst_addv_w_w_w_w :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .ADDV_W, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_addv_w_w_w_w :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_addv_w_w_w_w(dst, src, src2)) } +emit_addv_w_w_w_w :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_addv_w_w_w_w(dst, src, src2)) } inst_addv_d_w_w_w :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .ADDV_D, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_addv_d_w_w_w :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_addv_d_w_w_w(dst, src, src2)) } +emit_addv_d_w_w_w :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_addv_d_w_w_w(dst, src, src2)) } inst_subv_b_w_w_w :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .SUBV_B, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_subv_b_w_w_w :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_subv_b_w_w_w(dst, src, src2)) } +emit_subv_b_w_w_w :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_subv_b_w_w_w(dst, src, src2)) } inst_subv_h_w_w_w :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .SUBV_H, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_subv_h_w_w_w :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_subv_h_w_w_w(dst, src, src2)) } +emit_subv_h_w_w_w :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_subv_h_w_w_w(dst, src, src2)) } inst_subv_w_w_w_w :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .SUBV_W, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_subv_w_w_w_w :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_subv_w_w_w_w(dst, src, src2)) } +emit_subv_w_w_w_w :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_subv_w_w_w_w(dst, src, src2)) } inst_subv_d_w_w_w :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .SUBV_D, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_subv_d_w_w_w :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_subv_d_w_w_w(dst, src, src2)) } +emit_subv_d_w_w_w :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_subv_d_w_w_w(dst, src, src2)) } inst_adds_s_b_w_w_w :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .ADDS_S_B, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_adds_s_b_w_w_w :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_adds_s_b_w_w_w(dst, src, src2)) } +emit_adds_s_b_w_w_w :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_adds_s_b_w_w_w(dst, src, src2)) } inst_adds_s_h_w_w_w :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .ADDS_S_H, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_adds_s_h_w_w_w :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_adds_s_h_w_w_w(dst, src, src2)) } +emit_adds_s_h_w_w_w :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_adds_s_h_w_w_w(dst, src, src2)) } inst_adds_s_w_w_w_w :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .ADDS_S_W, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_adds_s_w_w_w_w :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_adds_s_w_w_w_w(dst, src, src2)) } +emit_adds_s_w_w_w_w :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_adds_s_w_w_w_w(dst, src, src2)) } inst_adds_s_d_w_w_w :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .ADDS_S_D, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_adds_s_d_w_w_w :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_adds_s_d_w_w_w(dst, src, src2)) } +emit_adds_s_d_w_w_w :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_adds_s_d_w_w_w(dst, src, src2)) } inst_adds_u_b_w_w_w :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .ADDS_U_B, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_adds_u_b_w_w_w :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_adds_u_b_w_w_w(dst, src, src2)) } +emit_adds_u_b_w_w_w :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_adds_u_b_w_w_w(dst, src, src2)) } inst_adds_u_h_w_w_w :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .ADDS_U_H, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_adds_u_h_w_w_w :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_adds_u_h_w_w_w(dst, src, src2)) } +emit_adds_u_h_w_w_w :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_adds_u_h_w_w_w(dst, src, src2)) } inst_adds_u_w_w_w_w :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .ADDS_U_W, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_adds_u_w_w_w_w :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_adds_u_w_w_w_w(dst, src, src2)) } +emit_adds_u_w_w_w_w :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_adds_u_w_w_w_w(dst, src, src2)) } inst_adds_u_d_w_w_w :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .ADDS_U_D, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_adds_u_d_w_w_w :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_adds_u_d_w_w_w(dst, src, src2)) } +emit_adds_u_d_w_w_w :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_adds_u_d_w_w_w(dst, src, src2)) } inst_subs_s_b_w_w_w :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .SUBS_S_B, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_subs_s_b_w_w_w :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_subs_s_b_w_w_w(dst, src, src2)) } +emit_subs_s_b_w_w_w :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_subs_s_b_w_w_w(dst, src, src2)) } inst_subs_s_h_w_w_w :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .SUBS_S_H, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_subs_s_h_w_w_w :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_subs_s_h_w_w_w(dst, src, src2)) } +emit_subs_s_h_w_w_w :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_subs_s_h_w_w_w(dst, src, src2)) } inst_subs_s_w_w_w_w :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .SUBS_S_W, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_subs_s_w_w_w_w :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_subs_s_w_w_w_w(dst, src, src2)) } +emit_subs_s_w_w_w_w :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_subs_s_w_w_w_w(dst, src, src2)) } inst_subs_s_d_w_w_w :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .SUBS_S_D, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_subs_s_d_w_w_w :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_subs_s_d_w_w_w(dst, src, src2)) } +emit_subs_s_d_w_w_w :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_subs_s_d_w_w_w(dst, src, src2)) } inst_subs_u_b_w_w_w :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .SUBS_U_B, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_subs_u_b_w_w_w :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_subs_u_b_w_w_w(dst, src, src2)) } +emit_subs_u_b_w_w_w :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_subs_u_b_w_w_w(dst, src, src2)) } inst_subs_u_h_w_w_w :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .SUBS_U_H, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_subs_u_h_w_w_w :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_subs_u_h_w_w_w(dst, src, src2)) } +emit_subs_u_h_w_w_w :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_subs_u_h_w_w_w(dst, src, src2)) } inst_subs_u_w_w_w_w :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .SUBS_U_W, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_subs_u_w_w_w_w :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_subs_u_w_w_w_w(dst, src, src2)) } +emit_subs_u_w_w_w_w :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_subs_u_w_w_w_w(dst, src, src2)) } inst_subs_u_d_w_w_w :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .SUBS_U_D, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_subs_u_d_w_w_w :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_subs_u_d_w_w_w(dst, src, src2)) } +emit_subs_u_d_w_w_w :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_subs_u_d_w_w_w(dst, src, src2)) } inst_mulv_b_w_w_w :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .MULV_B, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_mulv_b_w_w_w :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_mulv_b_w_w_w(dst, src, src2)) } +emit_mulv_b_w_w_w :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_mulv_b_w_w_w(dst, src, src2)) } inst_mulv_h_w_w_w :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .MULV_H, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_mulv_h_w_w_w :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_mulv_h_w_w_w(dst, src, src2)) } +emit_mulv_h_w_w_w :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_mulv_h_w_w_w(dst, src, src2)) } inst_mulv_w_w_w_w :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .MULV_W, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_mulv_w_w_w_w :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_mulv_w_w_w_w(dst, src, src2)) } +emit_mulv_w_w_w_w :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_mulv_w_w_w_w(dst, src, src2)) } inst_mulv_d_w_w_w :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .MULV_D, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_mulv_d_w_w_w :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_mulv_d_w_w_w(dst, src, src2)) } +emit_mulv_d_w_w_w :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_mulv_d_w_w_w(dst, src, src2)) } inst_div_s_b_w_w_w :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .DIV_S_B, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_div_s_b_w_w_w :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_div_s_b_w_w_w(dst, src, src2)) } +emit_div_s_b_w_w_w :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_div_s_b_w_w_w(dst, src, src2)) } inst_div_s_h_w_w_w :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .DIV_S_H, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_div_s_h_w_w_w :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_div_s_h_w_w_w(dst, src, src2)) } +emit_div_s_h_w_w_w :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_div_s_h_w_w_w(dst, src, src2)) } inst_div_s_w_w_w_w :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .DIV_S_W, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_div_s_w_w_w_w :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_div_s_w_w_w_w(dst, src, src2)) } +emit_div_s_w_w_w_w :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_div_s_w_w_w_w(dst, src, src2)) } inst_div_s_d_w_w_w :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .DIV_S_D, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_div_s_d_w_w_w :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_div_s_d_w_w_w(dst, src, src2)) } +emit_div_s_d_w_w_w :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_div_s_d_w_w_w(dst, src, src2)) } inst_div_u_b_w_w_w :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .DIV_U_B, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_div_u_b_w_w_w :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_div_u_b_w_w_w(dst, src, src2)) } +emit_div_u_b_w_w_w :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_div_u_b_w_w_w(dst, src, src2)) } inst_div_u_h_w_w_w :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .DIV_U_H, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_div_u_h_w_w_w :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_div_u_h_w_w_w(dst, src, src2)) } +emit_div_u_h_w_w_w :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_div_u_h_w_w_w(dst, src, src2)) } inst_div_u_w_w_w_w :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .DIV_U_W, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_div_u_w_w_w_w :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_div_u_w_w_w_w(dst, src, src2)) } +emit_div_u_w_w_w_w :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_div_u_w_w_w_w(dst, src, src2)) } inst_div_u_d_w_w_w :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .DIV_U_D, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_div_u_d_w_w_w :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_div_u_d_w_w_w(dst, src, src2)) } +emit_div_u_d_w_w_w :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_div_u_d_w_w_w(dst, src, src2)) } inst_mod_s_b_w_w_w :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .MOD_S_B, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_mod_s_b_w_w_w :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_mod_s_b_w_w_w(dst, src, src2)) } +emit_mod_s_b_w_w_w :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_mod_s_b_w_w_w(dst, src, src2)) } inst_mod_s_h_w_w_w :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .MOD_S_H, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_mod_s_h_w_w_w :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_mod_s_h_w_w_w(dst, src, src2)) } +emit_mod_s_h_w_w_w :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_mod_s_h_w_w_w(dst, src, src2)) } inst_mod_s_w_w_w_w :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .MOD_S_W, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_mod_s_w_w_w_w :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_mod_s_w_w_w_w(dst, src, src2)) } +emit_mod_s_w_w_w_w :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_mod_s_w_w_w_w(dst, src, src2)) } inst_mod_s_d_w_w_w :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .MOD_S_D, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_mod_s_d_w_w_w :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_mod_s_d_w_w_w(dst, src, src2)) } +emit_mod_s_d_w_w_w :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_mod_s_d_w_w_w(dst, src, src2)) } inst_mod_u_b_w_w_w :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .MOD_U_B, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_mod_u_b_w_w_w :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_mod_u_b_w_w_w(dst, src, src2)) } +emit_mod_u_b_w_w_w :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_mod_u_b_w_w_w(dst, src, src2)) } inst_mod_u_h_w_w_w :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .MOD_U_H, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_mod_u_h_w_w_w :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_mod_u_h_w_w_w(dst, src, src2)) } +emit_mod_u_h_w_w_w :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_mod_u_h_w_w_w(dst, src, src2)) } inst_mod_u_w_w_w_w :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .MOD_U_W, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_mod_u_w_w_w_w :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_mod_u_w_w_w_w(dst, src, src2)) } +emit_mod_u_w_w_w_w :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_mod_u_w_w_w_w(dst, src, src2)) } inst_mod_u_d_w_w_w :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .MOD_U_D, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_mod_u_d_w_w_w :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_mod_u_d_w_w_w(dst, src, src2)) } +emit_mod_u_d_w_w_w :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_mod_u_d_w_w_w(dst, src, src2)) } inst_maddv_b_w_w_w :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .MADDV_B, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_maddv_b_w_w_w :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_maddv_b_w_w_w(dst, src, src2)) } +emit_maddv_b_w_w_w :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_maddv_b_w_w_w(dst, src, src2)) } inst_maddv_h_w_w_w :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .MADDV_H, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_maddv_h_w_w_w :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_maddv_h_w_w_w(dst, src, src2)) } +emit_maddv_h_w_w_w :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_maddv_h_w_w_w(dst, src, src2)) } inst_maddv_w_w_w_w :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .MADDV_W, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_maddv_w_w_w_w :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_maddv_w_w_w_w(dst, src, src2)) } +emit_maddv_w_w_w_w :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_maddv_w_w_w_w(dst, src, src2)) } inst_maddv_d_w_w_w :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .MADDV_D, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_maddv_d_w_w_w :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_maddv_d_w_w_w(dst, src, src2)) } +emit_maddv_d_w_w_w :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_maddv_d_w_w_w(dst, src, src2)) } inst_msubv_b_w_w_w :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .MSUBV_B, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_msubv_b_w_w_w :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_msubv_b_w_w_w(dst, src, src2)) } +emit_msubv_b_w_w_w :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_msubv_b_w_w_w(dst, src, src2)) } inst_msubv_h_w_w_w :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .MSUBV_H, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_msubv_h_w_w_w :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_msubv_h_w_w_w(dst, src, src2)) } +emit_msubv_h_w_w_w :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_msubv_h_w_w_w(dst, src, src2)) } inst_msubv_w_w_w_w :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .MSUBV_W, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_msubv_w_w_w_w :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_msubv_w_w_w_w(dst, src, src2)) } +emit_msubv_w_w_w_w :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_msubv_w_w_w_w(dst, src, src2)) } inst_msubv_d_w_w_w :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .MSUBV_D, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_msubv_d_w_w_w :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_msubv_d_w_w_w(dst, src, src2)) } +emit_msubv_d_w_w_w :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_msubv_d_w_w_w(dst, src, src2)) } inst_dotp_s_h_w_w_w :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .DOTP_S_H, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_dotp_s_h_w_w_w :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_dotp_s_h_w_w_w(dst, src, src2)) } +emit_dotp_s_h_w_w_w :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_dotp_s_h_w_w_w(dst, src, src2)) } inst_dotp_s_w_w_w_w :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .DOTP_S_W, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_dotp_s_w_w_w_w :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_dotp_s_w_w_w_w(dst, src, src2)) } +emit_dotp_s_w_w_w_w :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_dotp_s_w_w_w_w(dst, src, src2)) } inst_dotp_s_d_w_w_w :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .DOTP_S_D, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_dotp_s_d_w_w_w :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_dotp_s_d_w_w_w(dst, src, src2)) } +emit_dotp_s_d_w_w_w :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_dotp_s_d_w_w_w(dst, src, src2)) } inst_dotp_u_h_w_w_w :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .DOTP_U_H, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_dotp_u_h_w_w_w :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_dotp_u_h_w_w_w(dst, src, src2)) } +emit_dotp_u_h_w_w_w :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_dotp_u_h_w_w_w(dst, src, src2)) } inst_dotp_u_w_w_w_w :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .DOTP_U_W, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_dotp_u_w_w_w_w :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_dotp_u_w_w_w_w(dst, src, src2)) } +emit_dotp_u_w_w_w_w :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_dotp_u_w_w_w_w(dst, src, src2)) } inst_dotp_u_d_w_w_w :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .DOTP_U_D, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_dotp_u_d_w_w_w :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_dotp_u_d_w_w_w(dst, src, src2)) } +emit_dotp_u_d_w_w_w :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_dotp_u_d_w_w_w(dst, src, src2)) } inst_and_v_w_w_w :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .AND_V, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_and_v_w_w_w :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_and_v_w_w_w(dst, src, src2)) } +emit_and_v_w_w_w :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_and_v_w_w_w(dst, src, src2)) } inst_or_v_w_w_w :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .OR_V, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_or_v_w_w_w :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_or_v_w_w_w(dst, src, src2)) } +emit_or_v_w_w_w :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_or_v_w_w_w(dst, src, src2)) } inst_nor_v_w_w_w :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .NOR_V, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_nor_v_w_w_w :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_nor_v_w_w_w(dst, src, src2)) } +emit_nor_v_w_w_w :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_nor_v_w_w_w(dst, src, src2)) } inst_xor_v_w_w_w :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .XOR_V, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_xor_v_w_w_w :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_xor_v_w_w_w(dst, src, src2)) } +emit_xor_v_w_w_w :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_xor_v_w_w_w(dst, src, src2)) } inst_andi_b_w_w_i5 :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .ANDI_B, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_imm(imm, 1), {}}} } -emit_andi_b_w_w_i5 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_andi_b_w_w_i5(dst, src, imm)) } +emit_andi_b_w_w_i5 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_andi_b_w_w_i5(dst, src, imm)) } inst_ori_b_w_w_i5 :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .ORI_B, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_imm(imm, 1), {}}} } -emit_ori_b_w_w_i5 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_ori_b_w_w_i5(dst, src, imm)) } +emit_ori_b_w_w_i5 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_ori_b_w_w_i5(dst, src, imm)) } inst_nori_b_w_w_i5 :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .NORI_B, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_imm(imm, 1), {}}} } -emit_nori_b_w_w_i5 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_nori_b_w_w_i5(dst, src, imm)) } +emit_nori_b_w_w_i5 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_nori_b_w_w_i5(dst, src, imm)) } inst_xori_b_w_w_i5 :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .XORI_B, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_imm(imm, 1), {}}} } -emit_xori_b_w_w_i5 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_xori_b_w_w_i5(dst, src, imm)) } +emit_xori_b_w_w_i5 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_xori_b_w_w_i5(dst, src, imm)) } inst_bsel_v_w_w_w :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .BSEL_V, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_bsel_v_w_w_w :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_bsel_v_w_w_w(dst, src, src2)) } +emit_bsel_v_w_w_w :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_bsel_v_w_w_w(dst, src, src2)) } inst_bseli_b_w_w_i5 :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .BSELI_B, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_imm(imm, 1), {}}} } -emit_bseli_b_w_w_i5 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_bseli_b_w_w_i5(dst, src, imm)) } +emit_bseli_b_w_w_i5 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_bseli_b_w_w_i5(dst, src, imm)) } inst_bmnz_v_w_w_w :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .BMNZ_V, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_bmnz_v_w_w_w :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_bmnz_v_w_w_w(dst, src, src2)) } +emit_bmnz_v_w_w_w :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_bmnz_v_w_w_w(dst, src, src2)) } inst_bmnzi_b_w_w_i5 :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .BMNZI_B, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_imm(imm, 1), {}}} } -emit_bmnzi_b_w_w_i5 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_bmnzi_b_w_w_i5(dst, src, imm)) } +emit_bmnzi_b_w_w_i5 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_bmnzi_b_w_w_i5(dst, src, imm)) } inst_bmz_v_w_w_w :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .BMZ_V, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_bmz_v_w_w_w :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_bmz_v_w_w_w(dst, src, src2)) } +emit_bmz_v_w_w_w :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_bmz_v_w_w_w(dst, src, src2)) } inst_bmzi_b_w_w_i5 :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .BMZI_B, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_imm(imm, 1), {}}} } -emit_bmzi_b_w_w_i5 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_bmzi_b_w_w_i5(dst, src, imm)) } +emit_bmzi_b_w_w_i5 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_bmzi_b_w_w_i5(dst, src, imm)) } inst_ceq_b_w_w_w :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .CEQ_B, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_ceq_b_w_w_w :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_ceq_b_w_w_w(dst, src, src2)) } +emit_ceq_b_w_w_w :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_ceq_b_w_w_w(dst, src, src2)) } inst_ceq_h_w_w_w :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .CEQ_H, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_ceq_h_w_w_w :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_ceq_h_w_w_w(dst, src, src2)) } +emit_ceq_h_w_w_w :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_ceq_h_w_w_w(dst, src, src2)) } inst_ceq_w_w_w_w :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .CEQ_W, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_ceq_w_w_w_w :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_ceq_w_w_w_w(dst, src, src2)) } +emit_ceq_w_w_w_w :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_ceq_w_w_w_w(dst, src, src2)) } inst_ceq_d_w_w_w :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .CEQ_D, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_ceq_d_w_w_w :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_ceq_d_w_w_w(dst, src, src2)) } +emit_ceq_d_w_w_w :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_ceq_d_w_w_w(dst, src, src2)) } inst_clt_s_b_w_w_w :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .CLT_S_B, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_clt_s_b_w_w_w :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_clt_s_b_w_w_w(dst, src, src2)) } +emit_clt_s_b_w_w_w :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_clt_s_b_w_w_w(dst, src, src2)) } inst_clt_s_h_w_w_w :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .CLT_S_H, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_clt_s_h_w_w_w :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_clt_s_h_w_w_w(dst, src, src2)) } +emit_clt_s_h_w_w_w :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_clt_s_h_w_w_w(dst, src, src2)) } inst_clt_s_w_w_w_w :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .CLT_S_W, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_clt_s_w_w_w_w :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_clt_s_w_w_w_w(dst, src, src2)) } +emit_clt_s_w_w_w_w :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_clt_s_w_w_w_w(dst, src, src2)) } inst_clt_s_d_w_w_w :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .CLT_S_D, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_clt_s_d_w_w_w :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_clt_s_d_w_w_w(dst, src, src2)) } +emit_clt_s_d_w_w_w :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_clt_s_d_w_w_w(dst, src, src2)) } inst_clt_u_b_w_w_w :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .CLT_U_B, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_clt_u_b_w_w_w :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_clt_u_b_w_w_w(dst, src, src2)) } +emit_clt_u_b_w_w_w :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_clt_u_b_w_w_w(dst, src, src2)) } inst_clt_u_h_w_w_w :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .CLT_U_H, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_clt_u_h_w_w_w :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_clt_u_h_w_w_w(dst, src, src2)) } +emit_clt_u_h_w_w_w :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_clt_u_h_w_w_w(dst, src, src2)) } inst_clt_u_w_w_w_w :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .CLT_U_W, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_clt_u_w_w_w_w :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_clt_u_w_w_w_w(dst, src, src2)) } +emit_clt_u_w_w_w_w :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_clt_u_w_w_w_w(dst, src, src2)) } inst_clt_u_d_w_w_w :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .CLT_U_D, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_clt_u_d_w_w_w :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_clt_u_d_w_w_w(dst, src, src2)) } +emit_clt_u_d_w_w_w :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_clt_u_d_w_w_w(dst, src, src2)) } inst_cle_s_b_w_w_w :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .CLE_S_B, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_cle_s_b_w_w_w :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_cle_s_b_w_w_w(dst, src, src2)) } +emit_cle_s_b_w_w_w :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_cle_s_b_w_w_w(dst, src, src2)) } inst_cle_s_h_w_w_w :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .CLE_S_H, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_cle_s_h_w_w_w :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_cle_s_h_w_w_w(dst, src, src2)) } +emit_cle_s_h_w_w_w :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_cle_s_h_w_w_w(dst, src, src2)) } inst_cle_s_w_w_w_w :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .CLE_S_W, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_cle_s_w_w_w_w :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_cle_s_w_w_w_w(dst, src, src2)) } +emit_cle_s_w_w_w_w :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_cle_s_w_w_w_w(dst, src, src2)) } inst_cle_s_d_w_w_w :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .CLE_S_D, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_cle_s_d_w_w_w :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_cle_s_d_w_w_w(dst, src, src2)) } +emit_cle_s_d_w_w_w :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_cle_s_d_w_w_w(dst, src, src2)) } inst_cle_u_b_w_w_w :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .CLE_U_B, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_cle_u_b_w_w_w :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_cle_u_b_w_w_w(dst, src, src2)) } +emit_cle_u_b_w_w_w :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_cle_u_b_w_w_w(dst, src, src2)) } inst_cle_u_h_w_w_w :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .CLE_U_H, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_cle_u_h_w_w_w :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_cle_u_h_w_w_w(dst, src, src2)) } +emit_cle_u_h_w_w_w :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_cle_u_h_w_w_w(dst, src, src2)) } inst_cle_u_w_w_w_w :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .CLE_U_W, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_cle_u_w_w_w_w :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_cle_u_w_w_w_w(dst, src, src2)) } +emit_cle_u_w_w_w_w :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_cle_u_w_w_w_w(dst, src, src2)) } inst_cle_u_d_w_w_w :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .CLE_U_D, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_cle_u_d_w_w_w :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_cle_u_d_w_w_w(dst, src, src2)) } +emit_cle_u_d_w_w_w :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_cle_u_d_w_w_w(dst, src, src2)) } inst_min_s_b_w_w_w :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .MIN_S_B, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_min_s_b_w_w_w :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_min_s_b_w_w_w(dst, src, src2)) } +emit_min_s_b_w_w_w :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_min_s_b_w_w_w(dst, src, src2)) } inst_min_s_h_w_w_w :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .MIN_S_H, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_min_s_h_w_w_w :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_min_s_h_w_w_w(dst, src, src2)) } +emit_min_s_h_w_w_w :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_min_s_h_w_w_w(dst, src, src2)) } inst_min_s_w_w_w_w :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .MIN_S_W, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_min_s_w_w_w_w :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_min_s_w_w_w_w(dst, src, src2)) } +emit_min_s_w_w_w_w :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_min_s_w_w_w_w(dst, src, src2)) } inst_min_s_d_w_w_w :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .MIN_S_D, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_min_s_d_w_w_w :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_min_s_d_w_w_w(dst, src, src2)) } +emit_min_s_d_w_w_w :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_min_s_d_w_w_w(dst, src, src2)) } inst_min_u_b_w_w_w :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .MIN_U_B, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_min_u_b_w_w_w :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_min_u_b_w_w_w(dst, src, src2)) } +emit_min_u_b_w_w_w :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_min_u_b_w_w_w(dst, src, src2)) } inst_min_u_h_w_w_w :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .MIN_U_H, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_min_u_h_w_w_w :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_min_u_h_w_w_w(dst, src, src2)) } +emit_min_u_h_w_w_w :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_min_u_h_w_w_w(dst, src, src2)) } inst_min_u_w_w_w_w :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .MIN_U_W, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_min_u_w_w_w_w :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_min_u_w_w_w_w(dst, src, src2)) } +emit_min_u_w_w_w_w :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_min_u_w_w_w_w(dst, src, src2)) } inst_min_u_d_w_w_w :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .MIN_U_D, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_min_u_d_w_w_w :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_min_u_d_w_w_w(dst, src, src2)) } +emit_min_u_d_w_w_w :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_min_u_d_w_w_w(dst, src, src2)) } inst_max_s_b_w_w_w :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .MAX_S_B, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_max_s_b_w_w_w :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_max_s_b_w_w_w(dst, src, src2)) } +emit_max_s_b_w_w_w :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_max_s_b_w_w_w(dst, src, src2)) } inst_max_s_h_w_w_w :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .MAX_S_H, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_max_s_h_w_w_w :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_max_s_h_w_w_w(dst, src, src2)) } +emit_max_s_h_w_w_w :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_max_s_h_w_w_w(dst, src, src2)) } inst_max_s_w_w_w_w :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .MAX_S_W, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_max_s_w_w_w_w :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_max_s_w_w_w_w(dst, src, src2)) } +emit_max_s_w_w_w_w :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_max_s_w_w_w_w(dst, src, src2)) } inst_max_s_d_w_w_w :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .MAX_S_D, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_max_s_d_w_w_w :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_max_s_d_w_w_w(dst, src, src2)) } +emit_max_s_d_w_w_w :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_max_s_d_w_w_w(dst, src, src2)) } inst_max_u_b_w_w_w :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .MAX_U_B, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_max_u_b_w_w_w :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_max_u_b_w_w_w(dst, src, src2)) } +emit_max_u_b_w_w_w :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_max_u_b_w_w_w(dst, src, src2)) } inst_max_u_h_w_w_w :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .MAX_U_H, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_max_u_h_w_w_w :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_max_u_h_w_w_w(dst, src, src2)) } +emit_max_u_h_w_w_w :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_max_u_h_w_w_w(dst, src, src2)) } inst_max_u_w_w_w_w :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .MAX_U_W, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_max_u_w_w_w_w :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_max_u_w_w_w_w(dst, src, src2)) } +emit_max_u_w_w_w_w :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_max_u_w_w_w_w(dst, src, src2)) } inst_max_u_d_w_w_w :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .MAX_U_D, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_max_u_d_w_w_w :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_max_u_d_w_w_w(dst, src, src2)) } +emit_max_u_d_w_w_w :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_max_u_d_w_w_w(dst, src, src2)) } inst_sll_b_w_w_w :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .SLL_B, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_sll_b_w_w_w :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_sll_b_w_w_w(dst, src, src2)) } +emit_sll_b_w_w_w :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_sll_b_w_w_w(dst, src, src2)) } inst_sll_h_w_w_w :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .SLL_H, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_sll_h_w_w_w :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_sll_h_w_w_w(dst, src, src2)) } +emit_sll_h_w_w_w :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_sll_h_w_w_w(dst, src, src2)) } inst_sll_w_w_w_w :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .SLL_W, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_sll_w_w_w_w :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_sll_w_w_w_w(dst, src, src2)) } +emit_sll_w_w_w_w :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_sll_w_w_w_w(dst, src, src2)) } inst_sll_d_w_w_w :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .SLL_D, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_sll_d_w_w_w :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_sll_d_w_w_w(dst, src, src2)) } +emit_sll_d_w_w_w :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_sll_d_w_w_w(dst, src, src2)) } inst_srl_b_w_w_w :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .SRL_B, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_srl_b_w_w_w :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_srl_b_w_w_w(dst, src, src2)) } +emit_srl_b_w_w_w :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_srl_b_w_w_w(dst, src, src2)) } inst_srl_h_w_w_w :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .SRL_H, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_srl_h_w_w_w :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_srl_h_w_w_w(dst, src, src2)) } +emit_srl_h_w_w_w :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_srl_h_w_w_w(dst, src, src2)) } inst_srl_w_w_w_w :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .SRL_W, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_srl_w_w_w_w :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_srl_w_w_w_w(dst, src, src2)) } +emit_srl_w_w_w_w :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_srl_w_w_w_w(dst, src, src2)) } inst_srl_d_w_w_w :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .SRL_D, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_srl_d_w_w_w :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_srl_d_w_w_w(dst, src, src2)) } +emit_srl_d_w_w_w :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_srl_d_w_w_w(dst, src, src2)) } inst_sra_b_w_w_w :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .SRA_B, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_sra_b_w_w_w :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_sra_b_w_w_w(dst, src, src2)) } +emit_sra_b_w_w_w :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_sra_b_w_w_w(dst, src, src2)) } inst_sra_h_w_w_w :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .SRA_H, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_sra_h_w_w_w :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_sra_h_w_w_w(dst, src, src2)) } +emit_sra_h_w_w_w :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_sra_h_w_w_w(dst, src, src2)) } inst_sra_w_w_w_w :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .SRA_W, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_sra_w_w_w_w :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_sra_w_w_w_w(dst, src, src2)) } +emit_sra_w_w_w_w :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_sra_w_w_w_w(dst, src, src2)) } inst_sra_d_w_w_w :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .SRA_D, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_sra_d_w_w_w :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_sra_d_w_w_w(dst, src, src2)) } +emit_sra_d_w_w_w :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_sra_d_w_w_w(dst, src, src2)) } inst_slli_b_w_w_i5 :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .SLLI_B, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_imm(imm, 1), {}}} } -emit_slli_b_w_w_i5 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_slli_b_w_w_i5(dst, src, imm)) } +emit_slli_b_w_w_i5 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_slli_b_w_w_i5(dst, src, imm)) } inst_slli_h_w_w_i5 :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .SLLI_H, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_imm(imm, 1), {}}} } -emit_slli_h_w_w_i5 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_slli_h_w_w_i5(dst, src, imm)) } +emit_slli_h_w_w_i5 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_slli_h_w_w_i5(dst, src, imm)) } inst_slli_w_w_w_i5 :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .SLLI_W, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_imm(imm, 1), {}}} } -emit_slli_w_w_w_i5 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_slli_w_w_w_i5(dst, src, imm)) } +emit_slli_w_w_w_i5 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_slli_w_w_w_i5(dst, src, imm)) } inst_slli_d_w_w_i5 :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .SLLI_D, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_imm(imm, 1), {}}} } -emit_slli_d_w_w_i5 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_slli_d_w_w_i5(dst, src, imm)) } +emit_slli_d_w_w_i5 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_slli_d_w_w_i5(dst, src, imm)) } inst_srli_b_w_w_i5 :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .SRLI_B, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_imm(imm, 1), {}}} } -emit_srli_b_w_w_i5 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_srli_b_w_w_i5(dst, src, imm)) } +emit_srli_b_w_w_i5 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_srli_b_w_w_i5(dst, src, imm)) } inst_srli_h_w_w_i5 :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .SRLI_H, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_imm(imm, 1), {}}} } -emit_srli_h_w_w_i5 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_srli_h_w_w_i5(dst, src, imm)) } +emit_srli_h_w_w_i5 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_srli_h_w_w_i5(dst, src, imm)) } inst_srli_w_w_w_i5 :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .SRLI_W, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_imm(imm, 1), {}}} } -emit_srli_w_w_w_i5 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_srli_w_w_w_i5(dst, src, imm)) } +emit_srli_w_w_w_i5 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_srli_w_w_w_i5(dst, src, imm)) } inst_srli_d_w_w_i5 :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .SRLI_D, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_imm(imm, 1), {}}} } -emit_srli_d_w_w_i5 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_srli_d_w_w_i5(dst, src, imm)) } +emit_srli_d_w_w_i5 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_srli_d_w_w_i5(dst, src, imm)) } inst_srai_b_w_w_i5 :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .SRAI_B, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_imm(imm, 1), {}}} } -emit_srai_b_w_w_i5 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_srai_b_w_w_i5(dst, src, imm)) } +emit_srai_b_w_w_i5 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_srai_b_w_w_i5(dst, src, imm)) } inst_srai_h_w_w_i5 :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .SRAI_H, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_imm(imm, 1), {}}} } -emit_srai_h_w_w_i5 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_srai_h_w_w_i5(dst, src, imm)) } +emit_srai_h_w_w_i5 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_srai_h_w_w_i5(dst, src, imm)) } inst_srai_w_w_w_i5 :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .SRAI_W, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_imm(imm, 1), {}}} } -emit_srai_w_w_w_i5 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_srai_w_w_w_i5(dst, src, imm)) } +emit_srai_w_w_w_i5 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_srai_w_w_w_i5(dst, src, imm)) } inst_srai_d_w_w_i5 :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .SRAI_D, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_imm(imm, 1), {}}} } -emit_srai_d_w_w_i5 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_srai_d_w_w_i5(dst, src, imm)) } +emit_srai_d_w_w_i5 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_srai_d_w_w_i5(dst, src, imm)) } inst_fadd_w_w_w_w :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .FADD_W, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_fadd_w_w_w_w :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_fadd_w_w_w_w(dst, src, src2)) } +emit_fadd_w_w_w_w :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_fadd_w_w_w_w(dst, src, src2)) } inst_fadd_d_w_w_w :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .FADD_D, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_fadd_d_w_w_w :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_fadd_d_w_w_w(dst, src, src2)) } +emit_fadd_d_w_w_w :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_fadd_d_w_w_w(dst, src, src2)) } inst_fsub_w_w_w_w :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .FSUB_W, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_fsub_w_w_w_w :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_fsub_w_w_w_w(dst, src, src2)) } +emit_fsub_w_w_w_w :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_fsub_w_w_w_w(dst, src, src2)) } inst_fsub_d_w_w_w :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .FSUB_D, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_fsub_d_w_w_w :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_fsub_d_w_w_w(dst, src, src2)) } +emit_fsub_d_w_w_w :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_fsub_d_w_w_w(dst, src, src2)) } inst_fmul_w_w_w_w :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .FMUL_W, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_fmul_w_w_w_w :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_fmul_w_w_w_w(dst, src, src2)) } +emit_fmul_w_w_w_w :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_fmul_w_w_w_w(dst, src, src2)) } inst_fmul_d_w_w_w :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .FMUL_D, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_fmul_d_w_w_w :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_fmul_d_w_w_w(dst, src, src2)) } +emit_fmul_d_w_w_w :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_fmul_d_w_w_w(dst, src, src2)) } inst_fdiv_w_w_w_w :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .FDIV_W, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_fdiv_w_w_w_w :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_fdiv_w_w_w_w(dst, src, src2)) } +emit_fdiv_w_w_w_w :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_fdiv_w_w_w_w(dst, src, src2)) } inst_fdiv_d_w_w_w :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .FDIV_D, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_fdiv_d_w_w_w :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_fdiv_d_w_w_w(dst, src, src2)) } +emit_fdiv_d_w_w_w :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_fdiv_d_w_w_w(dst, src, src2)) } inst_fsqrt_w_w_w :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .FSQRT_W, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_fsqrt_w_w_w :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_fsqrt_w_w_w(dst, src)) } +emit_fsqrt_w_w_w :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_fsqrt_w_w_w(dst, src)) } inst_fsqrt_d_w_w :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .FSQRT_D, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_fsqrt_d_w_w :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_fsqrt_d_w_w(dst, src)) } +emit_fsqrt_d_w_w :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_fsqrt_d_w_w(dst, src)) } inst_frsqrt_w_w_w :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .FRSQRT_W, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_frsqrt_w_w_w :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_frsqrt_w_w_w(dst, src)) } +emit_frsqrt_w_w_w :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_frsqrt_w_w_w(dst, src)) } inst_frsqrt_d_w_w :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .FRSQRT_D, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_frsqrt_d_w_w :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_frsqrt_d_w_w(dst, src)) } +emit_frsqrt_d_w_w :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_frsqrt_d_w_w(dst, src)) } inst_frcp_w_w_w :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .FRCP_W, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_frcp_w_w_w :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_frcp_w_w_w(dst, src)) } +emit_frcp_w_w_w :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_frcp_w_w_w(dst, src)) } inst_frcp_d_w_w :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .FRCP_D, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_frcp_d_w_w :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_frcp_d_w_w(dst, src)) } +emit_frcp_d_w_w :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_frcp_d_w_w(dst, src)) } inst_frint_w_w_w :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .FRINT_W, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_frint_w_w_w :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_frint_w_w_w(dst, src)) } +emit_frint_w_w_w :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_frint_w_w_w(dst, src)) } inst_frint_d_w_w :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .FRINT_D, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_frint_d_w_w :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_frint_d_w_w(dst, src)) } +emit_frint_d_w_w :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_frint_d_w_w(dst, src)) } inst_fmax_w_w_w_w :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .FMAX_W, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_fmax_w_w_w_w :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_fmax_w_w_w_w(dst, src, src2)) } +emit_fmax_w_w_w_w :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_fmax_w_w_w_w(dst, src, src2)) } inst_fmax_d_w_w_w :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .FMAX_D, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_fmax_d_w_w_w :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_fmax_d_w_w_w(dst, src, src2)) } +emit_fmax_d_w_w_w :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_fmax_d_w_w_w(dst, src, src2)) } inst_fmin_w_w_w_w :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .FMIN_W, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_fmin_w_w_w_w :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_fmin_w_w_w_w(dst, src, src2)) } +emit_fmin_w_w_w_w :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_fmin_w_w_w_w(dst, src, src2)) } inst_fmin_d_w_w_w :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .FMIN_D, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_fmin_d_w_w_w :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_fmin_d_w_w_w(dst, src, src2)) } +emit_fmin_d_w_w_w :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_fmin_d_w_w_w(dst, src, src2)) } inst_fceq_w_w_w_w :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .FCEQ_W, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_fceq_w_w_w_w :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_fceq_w_w_w_w(dst, src, src2)) } +emit_fceq_w_w_w_w :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_fceq_w_w_w_w(dst, src, src2)) } inst_fceq_d_w_w_w :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .FCEQ_D, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_fceq_d_w_w_w :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_fceq_d_w_w_w(dst, src, src2)) } +emit_fceq_d_w_w_w :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_fceq_d_w_w_w(dst, src, src2)) } inst_fcne_w_w_w_w :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .FCNE_W, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_fcne_w_w_w_w :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_fcne_w_w_w_w(dst, src, src2)) } +emit_fcne_w_w_w_w :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_fcne_w_w_w_w(dst, src, src2)) } inst_fcne_d_w_w_w :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .FCNE_D, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_fcne_d_w_w_w :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_fcne_d_w_w_w(dst, src, src2)) } +emit_fcne_d_w_w_w :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_fcne_d_w_w_w(dst, src, src2)) } inst_fclt_w_w_w_w :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .FCLT_W, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_fclt_w_w_w_w :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_fclt_w_w_w_w(dst, src, src2)) } +emit_fclt_w_w_w_w :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_fclt_w_w_w_w(dst, src, src2)) } inst_fclt_d_w_w_w :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .FCLT_D, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_fclt_d_w_w_w :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_fclt_d_w_w_w(dst, src, src2)) } +emit_fclt_d_w_w_w :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_fclt_d_w_w_w(dst, src, src2)) } inst_fcle_w_w_w_w :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .FCLE_W, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_fcle_w_w_w_w :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_fcle_w_w_w_w(dst, src, src2)) } +emit_fcle_w_w_w_w :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_fcle_w_w_w_w(dst, src, src2)) } inst_fcle_d_w_w_w :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .FCLE_D, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_fcle_d_w_w_w :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_fcle_d_w_w_w(dst, src, src2)) } +emit_fcle_d_w_w_w :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_fcle_d_w_w_w(dst, src, src2)) } inst_ffint_s_w_w_w :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .FFINT_S_W, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_ffint_s_w_w_w :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_ffint_s_w_w_w(dst, src)) } +emit_ffint_s_w_w_w :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_ffint_s_w_w_w(dst, src)) } inst_ffint_s_d_w_w :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .FFINT_S_D, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_ffint_s_d_w_w :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_ffint_s_d_w_w(dst, src)) } +emit_ffint_s_d_w_w :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_ffint_s_d_w_w(dst, src)) } inst_ffint_u_w_w_w :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .FFINT_U_W, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_ffint_u_w_w_w :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_ffint_u_w_w_w(dst, src)) } +emit_ffint_u_w_w_w :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_ffint_u_w_w_w(dst, src)) } inst_ffint_u_d_w_w :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .FFINT_U_D, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_ffint_u_d_w_w :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_ffint_u_d_w_w(dst, src)) } +emit_ffint_u_d_w_w :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_ffint_u_d_w_w(dst, src)) } inst_ftrunc_s_w_w_w :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .FTRUNC_S_W, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_ftrunc_s_w_w_w :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_ftrunc_s_w_w_w(dst, src)) } +emit_ftrunc_s_w_w_w :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_ftrunc_s_w_w_w(dst, src)) } inst_ftrunc_s_d_w_w :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .FTRUNC_S_D, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_ftrunc_s_d_w_w :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_ftrunc_s_d_w_w(dst, src)) } +emit_ftrunc_s_d_w_w :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_ftrunc_s_d_w_w(dst, src)) } inst_ftrunc_u_w_w_w :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .FTRUNC_U_W, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_ftrunc_u_w_w_w :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_ftrunc_u_w_w_w(dst, src)) } +emit_ftrunc_u_w_w_w :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_ftrunc_u_w_w_w(dst, src)) } inst_ftrunc_u_d_w_w :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .FTRUNC_U_D, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_ftrunc_u_d_w_w :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_ftrunc_u_d_w_w(dst, src)) } +emit_ftrunc_u_d_w_w :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_ftrunc_u_d_w_w(dst, src)) } inst_fcvt_s_w_f_f :: #force_inline proc "contextless" (dst: FPR, src: FPR) -> Instruction { return Instruction{mnemonic = .FCVT_S_W, operand_count = 2, length = 4, ops = {op_fpr(dst), op_fpr(src), {}, {}}} } -emit_fcvt_s_w_f_f :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: FPR, src: FPR) { append(instructions, inst_fcvt_s_w_f_f(dst, src)) } +emit_fcvt_s_w_f_f :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: FPR, src: FPR) { append_elem(instructions, inst_fcvt_s_w_f_f(dst, src)) } inst_fcvt_s_d_f_f :: #force_inline proc "contextless" (dst: FPR, src: FPR) -> Instruction { return Instruction{mnemonic = .FCVT_S_D, operand_count = 2, length = 4, ops = {op_fpr(dst), op_fpr(src), {}, {}}} } -emit_fcvt_s_d_f_f :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: FPR, src: FPR) { append(instructions, inst_fcvt_s_d_f_f(dst, src)) } +emit_fcvt_s_d_f_f :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: FPR, src: FPR) { append_elem(instructions, inst_fcvt_s_d_f_f(dst, src)) } inst_fcvt_d_w_f_f :: #force_inline proc "contextless" (dst: FPR, src: FPR) -> Instruction { return Instruction{mnemonic = .FCVT_D_W, operand_count = 2, length = 4, ops = {op_fpr(dst), op_fpr(src), {}, {}}} } -emit_fcvt_d_w_f_f :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: FPR, src: FPR) { append(instructions, inst_fcvt_d_w_f_f(dst, src)) } +emit_fcvt_d_w_f_f :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: FPR, src: FPR) { append_elem(instructions, inst_fcvt_d_w_f_f(dst, src)) } inst_ld_b_w_m :: #force_inline proc "contextless" (dst: Register, mem: Memory) -> Instruction { return Instruction{mnemonic = .LD_B, operand_count = 2, length = 4, ops = {op_reg(dst), op_mem(mem, 4), {}, {}}} } -emit_ld_b_w_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, mem: Memory) { append(instructions, inst_ld_b_w_m(dst, mem)) } +emit_ld_b_w_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, mem: Memory) { append_elem(instructions, inst_ld_b_w_m(dst, mem)) } inst_ld_h_w_m :: #force_inline proc "contextless" (dst: Register, mem: Memory) -> Instruction { return Instruction{mnemonic = .LD_H, operand_count = 2, length = 4, ops = {op_reg(dst), op_mem(mem, 4), {}, {}}} } -emit_ld_h_w_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, mem: Memory) { append(instructions, inst_ld_h_w_m(dst, mem)) } +emit_ld_h_w_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, mem: Memory) { append_elem(instructions, inst_ld_h_w_m(dst, mem)) } inst_ld_w_w_m :: #force_inline proc "contextless" (dst: Register, mem: Memory) -> Instruction { return Instruction{mnemonic = .LD_W, operand_count = 2, length = 4, ops = {op_reg(dst), op_mem(mem, 4), {}, {}}} } -emit_ld_w_w_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, mem: Memory) { append(instructions, inst_ld_w_w_m(dst, mem)) } +emit_ld_w_w_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, mem: Memory) { append_elem(instructions, inst_ld_w_w_m(dst, mem)) } inst_ld_d_w_m :: #force_inline proc "contextless" (dst: Register, mem: Memory) -> Instruction { return Instruction{mnemonic = .LD_D, operand_count = 2, length = 4, ops = {op_reg(dst), op_mem(mem, 4), {}, {}}} } -emit_ld_d_w_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, mem: Memory) { append(instructions, inst_ld_d_w_m(dst, mem)) } +emit_ld_d_w_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, mem: Memory) { append_elem(instructions, inst_ld_d_w_m(dst, mem)) } inst_st_b_w_m :: #force_inline proc "contextless" (dst: Register, mem: Memory) -> Instruction { return Instruction{mnemonic = .ST_B, operand_count = 2, length = 4, ops = {op_reg(dst), op_mem(mem, 4), {}, {}}} } -emit_st_b_w_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, mem: Memory) { append(instructions, inst_st_b_w_m(dst, mem)) } +emit_st_b_w_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, mem: Memory) { append_elem(instructions, inst_st_b_w_m(dst, mem)) } inst_st_h_w_m :: #force_inline proc "contextless" (dst: Register, mem: Memory) -> Instruction { return Instruction{mnemonic = .ST_H, operand_count = 2, length = 4, ops = {op_reg(dst), op_mem(mem, 4), {}, {}}} } -emit_st_h_w_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, mem: Memory) { append(instructions, inst_st_h_w_m(dst, mem)) } +emit_st_h_w_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, mem: Memory) { append_elem(instructions, inst_st_h_w_m(dst, mem)) } inst_st_w_w_m :: #force_inline proc "contextless" (dst: Register, mem: Memory) -> Instruction { return Instruction{mnemonic = .ST_W, operand_count = 2, length = 4, ops = {op_reg(dst), op_mem(mem, 4), {}, {}}} } -emit_st_w_w_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, mem: Memory) { append(instructions, inst_st_w_w_m(dst, mem)) } +emit_st_w_w_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, mem: Memory) { append_elem(instructions, inst_st_w_w_m(dst, mem)) } inst_st_d_w_m :: #force_inline proc "contextless" (dst: Register, mem: Memory) -> Instruction { return Instruction{mnemonic = .ST_D, operand_count = 2, length = 4, ops = {op_reg(dst), op_mem(mem, 4), {}, {}}} } -emit_st_d_w_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, mem: Memory) { append(instructions, inst_st_d_w_m(dst, mem)) } +emit_st_d_w_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, mem: Memory) { append_elem(instructions, inst_st_d_w_m(dst, mem)) } inst_ldi_b_w_i5 :: #force_inline proc "contextless" (dst: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .LDI_B, operand_count = 2, length = 4, ops = {op_reg(dst), op_imm(imm, 1), {}, {}}} } -emit_ldi_b_w_i5 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64) { append(instructions, inst_ldi_b_w_i5(dst, imm)) } +emit_ldi_b_w_i5 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64) { append_elem(instructions, inst_ldi_b_w_i5(dst, imm)) } inst_ldi_h_w_i5 :: #force_inline proc "contextless" (dst: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .LDI_H, operand_count = 2, length = 4, ops = {op_reg(dst), op_imm(imm, 1), {}, {}}} } -emit_ldi_h_w_i5 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64) { append(instructions, inst_ldi_h_w_i5(dst, imm)) } +emit_ldi_h_w_i5 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64) { append_elem(instructions, inst_ldi_h_w_i5(dst, imm)) } inst_ldi_w_w_i5 :: #force_inline proc "contextless" (dst: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .LDI_W, operand_count = 2, length = 4, ops = {op_reg(dst), op_imm(imm, 1), {}, {}}} } -emit_ldi_w_w_i5 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64) { append(instructions, inst_ldi_w_w_i5(dst, imm)) } +emit_ldi_w_w_i5 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64) { append_elem(instructions, inst_ldi_w_w_i5(dst, imm)) } inst_ldi_d_w_i5 :: #force_inline proc "contextless" (dst: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .LDI_D, operand_count = 2, length = 4, ops = {op_reg(dst), op_imm(imm, 1), {}, {}}} } -emit_ldi_d_w_i5 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64) { append(instructions, inst_ldi_d_w_i5(dst, imm)) } +emit_ldi_d_w_i5 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64) { append_elem(instructions, inst_ldi_d_w_i5(dst, imm)) } inst_copy_s_b_r_w_i5 :: #force_inline proc "contextless" (dst: GPR, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .COPY_S_B, operand_count = 3, length = 4, ops = {op_gpr(dst), op_reg(src), op_imm(imm, 1), {}}} } -emit_copy_s_b_r_w_i5 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: Register, imm: i64) { append(instructions, inst_copy_s_b_r_w_i5(dst, src, imm)) } +emit_copy_s_b_r_w_i5 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: Register, imm: i64) { append_elem(instructions, inst_copy_s_b_r_w_i5(dst, src, imm)) } inst_copy_s_h_r_w_i5 :: #force_inline proc "contextless" (dst: GPR, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .COPY_S_H, operand_count = 3, length = 4, ops = {op_gpr(dst), op_reg(src), op_imm(imm, 1), {}}} } -emit_copy_s_h_r_w_i5 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: Register, imm: i64) { append(instructions, inst_copy_s_h_r_w_i5(dst, src, imm)) } +emit_copy_s_h_r_w_i5 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: Register, imm: i64) { append_elem(instructions, inst_copy_s_h_r_w_i5(dst, src, imm)) } inst_copy_s_w_r_w_i5 :: #force_inline proc "contextless" (dst: GPR, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .COPY_S_W, operand_count = 3, length = 4, ops = {op_gpr(dst), op_reg(src), op_imm(imm, 1), {}}} } -emit_copy_s_w_r_w_i5 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: Register, imm: i64) { append(instructions, inst_copy_s_w_r_w_i5(dst, src, imm)) } +emit_copy_s_w_r_w_i5 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: Register, imm: i64) { append_elem(instructions, inst_copy_s_w_r_w_i5(dst, src, imm)) } inst_copy_u_b_r_w_i5 :: #force_inline proc "contextless" (dst: GPR, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .COPY_U_B, operand_count = 3, length = 4, ops = {op_gpr(dst), op_reg(src), op_imm(imm, 1), {}}} } -emit_copy_u_b_r_w_i5 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: Register, imm: i64) { append(instructions, inst_copy_u_b_r_w_i5(dst, src, imm)) } +emit_copy_u_b_r_w_i5 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: Register, imm: i64) { append_elem(instructions, inst_copy_u_b_r_w_i5(dst, src, imm)) } inst_copy_u_h_r_w_i5 :: #force_inline proc "contextless" (dst: GPR, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .COPY_U_H, operand_count = 3, length = 4, ops = {op_gpr(dst), op_reg(src), op_imm(imm, 1), {}}} } -emit_copy_u_h_r_w_i5 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: Register, imm: i64) { append(instructions, inst_copy_u_h_r_w_i5(dst, src, imm)) } +emit_copy_u_h_r_w_i5 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: Register, imm: i64) { append_elem(instructions, inst_copy_u_h_r_w_i5(dst, src, imm)) } inst_copy_u_w_r_w_i5 :: #force_inline proc "contextless" (dst: GPR, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .COPY_U_W, operand_count = 3, length = 4, ops = {op_gpr(dst), op_reg(src), op_imm(imm, 1), {}}} } -emit_copy_u_w_r_w_i5 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: Register, imm: i64) { append(instructions, inst_copy_u_w_r_w_i5(dst, src, imm)) } +emit_copy_u_w_r_w_i5 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: Register, imm: i64) { append_elem(instructions, inst_copy_u_w_r_w_i5(dst, src, imm)) } inst_insert_b_w_r_i5 :: #force_inline proc "contextless" (dst: Register, src: GPR, imm: i64) -> Instruction { return Instruction{mnemonic = .INSERT_B, operand_count = 3, length = 4, ops = {op_reg(dst), op_gpr(src), op_imm(imm, 1), {}}} } -emit_insert_b_w_r_i5 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: GPR, imm: i64) { append(instructions, inst_insert_b_w_r_i5(dst, src, imm)) } +emit_insert_b_w_r_i5 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: GPR, imm: i64) { append_elem(instructions, inst_insert_b_w_r_i5(dst, src, imm)) } inst_insert_h_w_r_i5 :: #force_inline proc "contextless" (dst: Register, src: GPR, imm: i64) -> Instruction { return Instruction{mnemonic = .INSERT_H, operand_count = 3, length = 4, ops = {op_reg(dst), op_gpr(src), op_imm(imm, 1), {}}} } -emit_insert_h_w_r_i5 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: GPR, imm: i64) { append(instructions, inst_insert_h_w_r_i5(dst, src, imm)) } +emit_insert_h_w_r_i5 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: GPR, imm: i64) { append_elem(instructions, inst_insert_h_w_r_i5(dst, src, imm)) } inst_insert_w_w_r_i5 :: #force_inline proc "contextless" (dst: Register, src: GPR, imm: i64) -> Instruction { return Instruction{mnemonic = .INSERT_W, operand_count = 3, length = 4, ops = {op_reg(dst), op_gpr(src), op_imm(imm, 1), {}}} } -emit_insert_w_w_r_i5 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: GPR, imm: i64) { append(instructions, inst_insert_w_w_r_i5(dst, src, imm)) } +emit_insert_w_w_r_i5 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: GPR, imm: i64) { append_elem(instructions, inst_insert_w_w_r_i5(dst, src, imm)) } inst_insert_d_w_r_i5 :: #force_inline proc "contextless" (dst: Register, src: GPR, imm: i64) -> Instruction { return Instruction{mnemonic = .INSERT_D, operand_count = 3, length = 4, ops = {op_reg(dst), op_gpr(src), op_imm(imm, 1), {}}} } -emit_insert_d_w_r_i5 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: GPR, imm: i64) { append(instructions, inst_insert_d_w_r_i5(dst, src, imm)) } +emit_insert_d_w_r_i5 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: GPR, imm: i64) { append_elem(instructions, inst_insert_d_w_r_i5(dst, src, imm)) } inst_insve_b_w_w_i5 :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .INSVE_B, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_imm(imm, 1), {}}} } -emit_insve_b_w_w_i5 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_insve_b_w_w_i5(dst, src, imm)) } +emit_insve_b_w_w_i5 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_insve_b_w_w_i5(dst, src, imm)) } inst_insve_h_w_w_i5 :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .INSVE_H, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_imm(imm, 1), {}}} } -emit_insve_h_w_w_i5 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_insve_h_w_w_i5(dst, src, imm)) } +emit_insve_h_w_w_i5 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_insve_h_w_w_i5(dst, src, imm)) } inst_insve_w_w_w_i5 :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .INSVE_W, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_imm(imm, 1), {}}} } -emit_insve_w_w_w_i5 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_insve_w_w_w_i5(dst, src, imm)) } +emit_insve_w_w_w_i5 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_insve_w_w_w_i5(dst, src, imm)) } inst_insve_d_w_w_i5 :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .INSVE_D, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_imm(imm, 1), {}}} } -emit_insve_d_w_w_i5 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_insve_d_w_w_i5(dst, src, imm)) } +emit_insve_d_w_w_i5 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_insve_d_w_w_i5(dst, src, imm)) } inst_shf_b_w_w_i5 :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .SHF_B, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_imm(imm, 1), {}}} } -emit_shf_b_w_w_i5 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_shf_b_w_w_i5(dst, src, imm)) } +emit_shf_b_w_w_i5 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_shf_b_w_w_i5(dst, src, imm)) } inst_shf_h_w_w_i5 :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .SHF_H, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_imm(imm, 1), {}}} } -emit_shf_h_w_w_i5 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_shf_h_w_w_i5(dst, src, imm)) } +emit_shf_h_w_w_i5 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_shf_h_w_w_i5(dst, src, imm)) } inst_shf_w_w_w_i5 :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .SHF_W, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_imm(imm, 1), {}}} } -emit_shf_w_w_w_i5 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_shf_w_w_w_i5(dst, src, imm)) } +emit_shf_w_w_w_i5 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_shf_w_w_w_i5(dst, src, imm)) } inst_vshf_b_w_w_w :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VSHF_B, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_vshf_b_w_w_w :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vshf_b_w_w_w(dst, src, src2)) } +emit_vshf_b_w_w_w :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vshf_b_w_w_w(dst, src, src2)) } inst_vshf_h_w_w_w :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VSHF_H, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_vshf_h_w_w_w :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vshf_h_w_w_w(dst, src, src2)) } +emit_vshf_h_w_w_w :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vshf_h_w_w_w(dst, src, src2)) } inst_vshf_w_w_w_w :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VSHF_W, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_vshf_w_w_w_w :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vshf_w_w_w_w(dst, src, src2)) } +emit_vshf_w_w_w_w :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vshf_w_w_w_w(dst, src, src2)) } inst_vshf_d_w_w_w :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VSHF_D, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_vshf_d_w_w_w :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vshf_d_w_w_w(dst, src, src2)) } +emit_vshf_d_w_w_w :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vshf_d_w_w_w(dst, src, src2)) } inst_sld_b_w_w_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: GPR) -> Instruction { return Instruction{mnemonic = .SLD_B, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_gpr(src2), {}}} } -emit_sld_b_w_w_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: GPR) { append(instructions, inst_sld_b_w_w_r(dst, src, src2)) } +emit_sld_b_w_w_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: GPR) { append_elem(instructions, inst_sld_b_w_w_r(dst, src, src2)) } inst_sld_h_w_w_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: GPR) -> Instruction { return Instruction{mnemonic = .SLD_H, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_gpr(src2), {}}} } -emit_sld_h_w_w_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: GPR) { append(instructions, inst_sld_h_w_w_r(dst, src, src2)) } +emit_sld_h_w_w_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: GPR) { append_elem(instructions, inst_sld_h_w_w_r(dst, src, src2)) } inst_sld_w_w_w_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: GPR) -> Instruction { return Instruction{mnemonic = .SLD_W, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_gpr(src2), {}}} } -emit_sld_w_w_w_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: GPR) { append(instructions, inst_sld_w_w_w_r(dst, src, src2)) } +emit_sld_w_w_w_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: GPR) { append_elem(instructions, inst_sld_w_w_w_r(dst, src, src2)) } inst_sld_d_w_w_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: GPR) -> Instruction { return Instruction{mnemonic = .SLD_D, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_gpr(src2), {}}} } -emit_sld_d_w_w_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: GPR) { append(instructions, inst_sld_d_w_w_r(dst, src, src2)) } +emit_sld_d_w_w_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: GPR) { append_elem(instructions, inst_sld_d_w_w_r(dst, src, src2)) } inst_sldi_b_w_w_i5 :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .SLDI_B, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_imm(imm, 1), {}}} } -emit_sldi_b_w_w_i5 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_sldi_b_w_w_i5(dst, src, imm)) } +emit_sldi_b_w_w_i5 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_sldi_b_w_w_i5(dst, src, imm)) } inst_sldi_h_w_w_i5 :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .SLDI_H, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_imm(imm, 1), {}}} } -emit_sldi_h_w_w_i5 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_sldi_h_w_w_i5(dst, src, imm)) } +emit_sldi_h_w_w_i5 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_sldi_h_w_w_i5(dst, src, imm)) } inst_sldi_w_w_w_i5 :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .SLDI_W, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_imm(imm, 1), {}}} } -emit_sldi_w_w_w_i5 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_sldi_w_w_w_i5(dst, src, imm)) } +emit_sldi_w_w_w_i5 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_sldi_w_w_w_i5(dst, src, imm)) } inst_sldi_d_w_w_i5 :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .SLDI_D, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_imm(imm, 1), {}}} } -emit_sldi_d_w_w_i5 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_sldi_d_w_w_i5(dst, src, imm)) } +emit_sldi_d_w_w_i5 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_sldi_d_w_w_i5(dst, src, imm)) } inst_splat_b_w_w_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: GPR) -> Instruction { return Instruction{mnemonic = .SPLAT_B, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_gpr(src2), {}}} } -emit_splat_b_w_w_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: GPR) { append(instructions, inst_splat_b_w_w_r(dst, src, src2)) } +emit_splat_b_w_w_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: GPR) { append_elem(instructions, inst_splat_b_w_w_r(dst, src, src2)) } inst_splat_h_w_w_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: GPR) -> Instruction { return Instruction{mnemonic = .SPLAT_H, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_gpr(src2), {}}} } -emit_splat_h_w_w_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: GPR) { append(instructions, inst_splat_h_w_w_r(dst, src, src2)) } +emit_splat_h_w_w_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: GPR) { append_elem(instructions, inst_splat_h_w_w_r(dst, src, src2)) } inst_splat_w_w_w_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: GPR) -> Instruction { return Instruction{mnemonic = .SPLAT_W, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_gpr(src2), {}}} } -emit_splat_w_w_w_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: GPR) { append(instructions, inst_splat_w_w_w_r(dst, src, src2)) } +emit_splat_w_w_w_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: GPR) { append_elem(instructions, inst_splat_w_w_w_r(dst, src, src2)) } inst_splat_d_w_w_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: GPR) -> Instruction { return Instruction{mnemonic = .SPLAT_D, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_gpr(src2), {}}} } -emit_splat_d_w_w_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: GPR) { append(instructions, inst_splat_d_w_w_r(dst, src, src2)) } +emit_splat_d_w_w_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: GPR) { append_elem(instructions, inst_splat_d_w_w_r(dst, src, src2)) } inst_splati_b_w_w_i5 :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .SPLATI_B, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_imm(imm, 1), {}}} } -emit_splati_b_w_w_i5 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_splati_b_w_w_i5(dst, src, imm)) } +emit_splati_b_w_w_i5 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_splati_b_w_w_i5(dst, src, imm)) } inst_splati_h_w_w_i5 :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .SPLATI_H, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_imm(imm, 1), {}}} } -emit_splati_h_w_w_i5 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_splati_h_w_w_i5(dst, src, imm)) } +emit_splati_h_w_w_i5 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_splati_h_w_w_i5(dst, src, imm)) } inst_splati_w_w_w_i5 :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .SPLATI_W, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_imm(imm, 1), {}}} } -emit_splati_w_w_w_i5 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_splati_w_w_w_i5(dst, src, imm)) } +emit_splati_w_w_w_i5 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_splati_w_w_w_i5(dst, src, imm)) } inst_splati_d_w_w_i5 :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .SPLATI_D, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_imm(imm, 1), {}}} } -emit_splati_d_w_w_i5 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_splati_d_w_w_i5(dst, src, imm)) } +emit_splati_d_w_w_i5 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_splati_d_w_w_i5(dst, src, imm)) } inst_bz_v_w_rel :: #force_inline proc "contextless" (dst: Register, target: u32) -> Instruction { return Instruction{mnemonic = .BZ_V, operand_count = 2, length = 4, ops = {op_reg(dst), op_label(target), {}, {}}} } -emit_bz_v_w_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, target: u32) { append(instructions, inst_bz_v_w_rel(dst, target)) } +emit_bz_v_w_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, target: u32) { append_elem(instructions, inst_bz_v_w_rel(dst, target)) } inst_bnz_v_w_rel :: #force_inline proc "contextless" (dst: Register, target: u32) -> Instruction { return Instruction{mnemonic = .BNZ_V, operand_count = 2, length = 4, ops = {op_reg(dst), op_label(target), {}, {}}} } -emit_bnz_v_w_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, target: u32) { append(instructions, inst_bnz_v_w_rel(dst, target)) } +emit_bnz_v_w_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, target: u32) { append_elem(instructions, inst_bnz_v_w_rel(dst, target)) } inst_bz_b_w_rel :: #force_inline proc "contextless" (dst: Register, target: u32) -> Instruction { return Instruction{mnemonic = .BZ_B, operand_count = 2, length = 4, ops = {op_reg(dst), op_label(target), {}, {}}} } -emit_bz_b_w_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, target: u32) { append(instructions, inst_bz_b_w_rel(dst, target)) } +emit_bz_b_w_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, target: u32) { append_elem(instructions, inst_bz_b_w_rel(dst, target)) } inst_bz_h_w_rel :: #force_inline proc "contextless" (dst: Register, target: u32) -> Instruction { return Instruction{mnemonic = .BZ_H, operand_count = 2, length = 4, ops = {op_reg(dst), op_label(target), {}, {}}} } -emit_bz_h_w_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, target: u32) { append(instructions, inst_bz_h_w_rel(dst, target)) } +emit_bz_h_w_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, target: u32) { append_elem(instructions, inst_bz_h_w_rel(dst, target)) } inst_bz_w_w_rel :: #force_inline proc "contextless" (dst: Register, target: u32) -> Instruction { return Instruction{mnemonic = .BZ_W, operand_count = 2, length = 4, ops = {op_reg(dst), op_label(target), {}, {}}} } -emit_bz_w_w_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, target: u32) { append(instructions, inst_bz_w_w_rel(dst, target)) } +emit_bz_w_w_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, target: u32) { append_elem(instructions, inst_bz_w_w_rel(dst, target)) } inst_bz_d_w_rel :: #force_inline proc "contextless" (dst: Register, target: u32) -> Instruction { return Instruction{mnemonic = .BZ_D, operand_count = 2, length = 4, ops = {op_reg(dst), op_label(target), {}, {}}} } -emit_bz_d_w_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, target: u32) { append(instructions, inst_bz_d_w_rel(dst, target)) } +emit_bz_d_w_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, target: u32) { append_elem(instructions, inst_bz_d_w_rel(dst, target)) } inst_bnz_b_w_rel :: #force_inline proc "contextless" (dst: Register, target: u32) -> Instruction { return Instruction{mnemonic = .BNZ_B, operand_count = 2, length = 4, ops = {op_reg(dst), op_label(target), {}, {}}} } -emit_bnz_b_w_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, target: u32) { append(instructions, inst_bnz_b_w_rel(dst, target)) } +emit_bnz_b_w_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, target: u32) { append_elem(instructions, inst_bnz_b_w_rel(dst, target)) } inst_bnz_h_w_rel :: #force_inline proc "contextless" (dst: Register, target: u32) -> Instruction { return Instruction{mnemonic = .BNZ_H, operand_count = 2, length = 4, ops = {op_reg(dst), op_label(target), {}, {}}} } -emit_bnz_h_w_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, target: u32) { append(instructions, inst_bnz_h_w_rel(dst, target)) } +emit_bnz_h_w_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, target: u32) { append_elem(instructions, inst_bnz_h_w_rel(dst, target)) } inst_bnz_w_w_rel :: #force_inline proc "contextless" (dst: Register, target: u32) -> Instruction { return Instruction{mnemonic = .BNZ_W, operand_count = 2, length = 4, ops = {op_reg(dst), op_label(target), {}, {}}} } -emit_bnz_w_w_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, target: u32) { append(instructions, inst_bnz_w_w_rel(dst, target)) } +emit_bnz_w_w_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, target: u32) { append_elem(instructions, inst_bnz_w_w_rel(dst, target)) } inst_bnz_d_w_rel :: #force_inline proc "contextless" (dst: Register, target: u32) -> Instruction { return Instruction{mnemonic = .BNZ_D, operand_count = 2, length = 4, ops = {op_reg(dst), op_label(target), {}, {}}} } -emit_bnz_d_w_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, target: u32) { append(instructions, inst_bnz_d_w_rel(dst, target)) } +emit_bnz_d_w_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, target: u32) { append_elem(instructions, inst_bnz_d_w_rel(dst, target)) } inst_nloc_b_w_w :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .NLOC_B, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_nloc_b_w_w :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_nloc_b_w_w(dst, src)) } +emit_nloc_b_w_w :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_nloc_b_w_w(dst, src)) } inst_nloc_h_w_w :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .NLOC_H, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_nloc_h_w_w :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_nloc_h_w_w(dst, src)) } +emit_nloc_h_w_w :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_nloc_h_w_w(dst, src)) } inst_nloc_w_w_w :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .NLOC_W, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_nloc_w_w_w :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_nloc_w_w_w(dst, src)) } +emit_nloc_w_w_w :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_nloc_w_w_w(dst, src)) } inst_nloc_d_w_w :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .NLOC_D, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_nloc_d_w_w :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_nloc_d_w_w(dst, src)) } +emit_nloc_d_w_w :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_nloc_d_w_w(dst, src)) } inst_nlzc_b_w_w :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .NLZC_B, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_nlzc_b_w_w :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_nlzc_b_w_w(dst, src)) } +emit_nlzc_b_w_w :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_nlzc_b_w_w(dst, src)) } inst_nlzc_h_w_w :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .NLZC_H, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_nlzc_h_w_w :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_nlzc_h_w_w(dst, src)) } +emit_nlzc_h_w_w :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_nlzc_h_w_w(dst, src)) } inst_nlzc_w_w_w :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .NLZC_W, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_nlzc_w_w_w :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_nlzc_w_w_w(dst, src)) } +emit_nlzc_w_w_w :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_nlzc_w_w_w(dst, src)) } inst_nlzc_d_w_w :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .NLZC_D, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_nlzc_d_w_w :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_nlzc_d_w_w(dst, src)) } +emit_nlzc_d_w_w :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_nlzc_d_w_w(dst, src)) } inst_pcnt_b_w_w :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .PCNT_B, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_pcnt_b_w_w :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_pcnt_b_w_w(dst, src)) } +emit_pcnt_b_w_w :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_pcnt_b_w_w(dst, src)) } inst_pcnt_h_w_w :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .PCNT_H, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_pcnt_h_w_w :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_pcnt_h_w_w(dst, src)) } +emit_pcnt_h_w_w :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_pcnt_h_w_w(dst, src)) } inst_pcnt_w_w_w :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .PCNT_W, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_pcnt_w_w_w :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_pcnt_w_w_w(dst, src)) } +emit_pcnt_w_w_w :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_pcnt_w_w_w(dst, src)) } inst_pcnt_d_w_w :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .PCNT_D, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_pcnt_d_w_w :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_pcnt_d_w_w(dst, src)) } +emit_pcnt_d_w_w :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_pcnt_d_w_w(dst, src)) } inst_vmov_s_vs_vs :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .VMOV_S, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_vmov_s_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_vmov_s_vs_vs(dst, src)) } +emit_vmov_s_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_vmov_s_vs_vs(dst, src)) } inst_vmov_p_vp_vp :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .VMOV_P, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_vmov_p_vp_vp :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_vmov_p_vp_vp(dst, src)) } +emit_vmov_p_vp_vp :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_vmov_p_vp_vp(dst, src)) } inst_vmov_t_vt_vt :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .VMOV_T, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_vmov_t_vt_vt :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_vmov_t_vt_vt(dst, src)) } +emit_vmov_t_vt_vt :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_vmov_t_vt_vt(dst, src)) } inst_vmov_q_vq_vq :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .VMOV_Q, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_vmov_q_vq_vq :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_vmov_q_vq_vq(dst, src)) } +emit_vmov_q_vq_vq :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_vmov_q_vq_vq(dst, src)) } inst_lv_s_vs_m :: #force_inline proc "contextless" (dst: Register, mem: Memory) -> Instruction { return Instruction{mnemonic = .LV_S, operand_count = 2, length = 4, ops = {op_reg(dst), op_mem(mem, 4), {}, {}}} } -emit_lv_s_vs_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, mem: Memory) { append(instructions, inst_lv_s_vs_m(dst, mem)) } +emit_lv_s_vs_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, mem: Memory) { append_elem(instructions, inst_lv_s_vs_m(dst, mem)) } inst_lv_q_vq_m :: #force_inline proc "contextless" (dst: Register, mem: Memory) -> Instruction { return Instruction{mnemonic = .LV_Q, operand_count = 2, length = 4, ops = {op_reg(dst), op_mem(mem, 4), {}, {}}} } -emit_lv_q_vq_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, mem: Memory) { append(instructions, inst_lv_q_vq_m(dst, mem)) } +emit_lv_q_vq_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, mem: Memory) { append_elem(instructions, inst_lv_q_vq_m(dst, mem)) } inst_sv_s_vs_m :: #force_inline proc "contextless" (dst: Register, mem: Memory) -> Instruction { return Instruction{mnemonic = .SV_S, operand_count = 2, length = 4, ops = {op_reg(dst), op_mem(mem, 4), {}, {}}} } -emit_sv_s_vs_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, mem: Memory) { append(instructions, inst_sv_s_vs_m(dst, mem)) } +emit_sv_s_vs_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, mem: Memory) { append_elem(instructions, inst_sv_s_vs_m(dst, mem)) } inst_sv_q_vq_m :: #force_inline proc "contextless" (dst: Register, mem: Memory) -> Instruction { return Instruction{mnemonic = .SV_Q, operand_count = 2, length = 4, ops = {op_reg(dst), op_mem(mem, 4), {}, {}}} } -emit_sv_q_vq_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, mem: Memory) { append(instructions, inst_sv_q_vq_m(dst, mem)) } +emit_sv_q_vq_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, mem: Memory) { append_elem(instructions, inst_sv_q_vq_m(dst, mem)) } inst_lvl_q_vq_m :: #force_inline proc "contextless" (dst: Register, mem: Memory) -> Instruction { return Instruction{mnemonic = .LVL_Q, operand_count = 2, length = 4, ops = {op_reg(dst), op_mem(mem, 4), {}, {}}} } -emit_lvl_q_vq_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, mem: Memory) { append(instructions, inst_lvl_q_vq_m(dst, mem)) } +emit_lvl_q_vq_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, mem: Memory) { append_elem(instructions, inst_lvl_q_vq_m(dst, mem)) } inst_lvr_q_vq_m :: #force_inline proc "contextless" (dst: Register, mem: Memory) -> Instruction { return Instruction{mnemonic = .LVR_Q, operand_count = 2, length = 4, ops = {op_reg(dst), op_mem(mem, 4), {}, {}}} } -emit_lvr_q_vq_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, mem: Memory) { append(instructions, inst_lvr_q_vq_m(dst, mem)) } +emit_lvr_q_vq_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, mem: Memory) { append_elem(instructions, inst_lvr_q_vq_m(dst, mem)) } inst_svl_q_vq_m :: #force_inline proc "contextless" (dst: Register, mem: Memory) -> Instruction { return Instruction{mnemonic = .SVL_Q, operand_count = 2, length = 4, ops = {op_reg(dst), op_mem(mem, 4), {}, {}}} } -emit_svl_q_vq_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, mem: Memory) { append(instructions, inst_svl_q_vq_m(dst, mem)) } +emit_svl_q_vq_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, mem: Memory) { append_elem(instructions, inst_svl_q_vq_m(dst, mem)) } inst_svr_q_vq_m :: #force_inline proc "contextless" (dst: Register, mem: Memory) -> Instruction { return Instruction{mnemonic = .SVR_Q, operand_count = 2, length = 4, ops = {op_reg(dst), op_mem(mem, 4), {}, {}}} } -emit_svr_q_vq_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, mem: Memory) { append(instructions, inst_svr_q_vq_m(dst, mem)) } +emit_svr_q_vq_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, mem: Memory) { append_elem(instructions, inst_svr_q_vq_m(dst, mem)) } inst_viim_s_vs_i16 :: #force_inline proc "contextless" (dst: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .VIIM_S, operand_count = 2, length = 4, ops = {op_reg(dst), op_imm(imm, 2), {}, {}}} } -emit_viim_s_vs_i16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64) { append(instructions, inst_viim_s_vs_i16(dst, imm)) } +emit_viim_s_vs_i16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64) { append_elem(instructions, inst_viim_s_vs_i16(dst, imm)) } inst_vfim_s_vs_i16 :: #force_inline proc "contextless" (dst: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .VFIM_S, operand_count = 2, length = 4, ops = {op_reg(dst), op_imm(imm, 2), {}, {}}} } -emit_vfim_s_vs_i16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64) { append(instructions, inst_vfim_s_vs_i16(dst, imm)) } +emit_vfim_s_vs_i16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64) { append_elem(instructions, inst_vfim_s_vs_i16(dst, imm)) } inst_vadd_s_vs_vs_vs :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VADD_S, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_vadd_s_vs_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vadd_s_vs_vs_vs(dst, src, src2)) } +emit_vadd_s_vs_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vadd_s_vs_vs_vs(dst, src, src2)) } inst_vadd_p_vp_vp_vp :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VADD_P, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_vadd_p_vp_vp_vp :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vadd_p_vp_vp_vp(dst, src, src2)) } +emit_vadd_p_vp_vp_vp :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vadd_p_vp_vp_vp(dst, src, src2)) } inst_vadd_t_vt_vt_vt :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VADD_T, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_vadd_t_vt_vt_vt :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vadd_t_vt_vt_vt(dst, src, src2)) } +emit_vadd_t_vt_vt_vt :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vadd_t_vt_vt_vt(dst, src, src2)) } inst_vadd_q_vq_vq_vq :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VADD_Q, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_vadd_q_vq_vq_vq :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vadd_q_vq_vq_vq(dst, src, src2)) } +emit_vadd_q_vq_vq_vq :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vadd_q_vq_vq_vq(dst, src, src2)) } inst_vsub_s_vs_vs_vs :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VSUB_S, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_vsub_s_vs_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vsub_s_vs_vs_vs(dst, src, src2)) } +emit_vsub_s_vs_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vsub_s_vs_vs_vs(dst, src, src2)) } inst_vsub_p_vp_vp_vp :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VSUB_P, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_vsub_p_vp_vp_vp :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vsub_p_vp_vp_vp(dst, src, src2)) } +emit_vsub_p_vp_vp_vp :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vsub_p_vp_vp_vp(dst, src, src2)) } inst_vsub_t_vt_vt_vt :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VSUB_T, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_vsub_t_vt_vt_vt :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vsub_t_vt_vt_vt(dst, src, src2)) } +emit_vsub_t_vt_vt_vt :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vsub_t_vt_vt_vt(dst, src, src2)) } inst_vsub_q_vq_vq_vq :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VSUB_Q, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_vsub_q_vq_vq_vq :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vsub_q_vq_vq_vq(dst, src, src2)) } +emit_vsub_q_vq_vq_vq :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vsub_q_vq_vq_vq(dst, src, src2)) } inst_vmul_s_vs_vs_vs :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VMUL_S, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_vmul_s_vs_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vmul_s_vs_vs_vs(dst, src, src2)) } +emit_vmul_s_vs_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vmul_s_vs_vs_vs(dst, src, src2)) } inst_vmul_p_vp_vp_vp :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VMUL_P, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_vmul_p_vp_vp_vp :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vmul_p_vp_vp_vp(dst, src, src2)) } +emit_vmul_p_vp_vp_vp :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vmul_p_vp_vp_vp(dst, src, src2)) } inst_vmul_t_vt_vt_vt :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VMUL_T, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_vmul_t_vt_vt_vt :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vmul_t_vt_vt_vt(dst, src, src2)) } +emit_vmul_t_vt_vt_vt :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vmul_t_vt_vt_vt(dst, src, src2)) } inst_vmul_q_vq_vq_vq :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VMUL_Q, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_vmul_q_vq_vq_vq :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vmul_q_vq_vq_vq(dst, src, src2)) } +emit_vmul_q_vq_vq_vq :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vmul_q_vq_vq_vq(dst, src, src2)) } inst_vdiv_s_vs_vs_vs :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VDIV_S, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_vdiv_s_vs_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vdiv_s_vs_vs_vs(dst, src, src2)) } +emit_vdiv_s_vs_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vdiv_s_vs_vs_vs(dst, src, src2)) } inst_vdiv_p_vp_vp_vp :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VDIV_P, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_vdiv_p_vp_vp_vp :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vdiv_p_vp_vp_vp(dst, src, src2)) } +emit_vdiv_p_vp_vp_vp :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vdiv_p_vp_vp_vp(dst, src, src2)) } inst_vdiv_t_vt_vt_vt :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VDIV_T, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_vdiv_t_vt_vt_vt :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vdiv_t_vt_vt_vt(dst, src, src2)) } +emit_vdiv_t_vt_vt_vt :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vdiv_t_vt_vt_vt(dst, src, src2)) } inst_vdiv_q_vq_vq_vq :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VDIV_Q, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_vdiv_q_vq_vq_vq :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vdiv_q_vq_vq_vq(dst, src, src2)) } +emit_vdiv_q_vq_vq_vq :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vdiv_q_vq_vq_vq(dst, src, src2)) } inst_vabs_s_vs_vs :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .VABS_S, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_vabs_s_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_vabs_s_vs_vs(dst, src)) } +emit_vabs_s_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_vabs_s_vs_vs(dst, src)) } inst_vabs_p_vp_vp :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .VABS_P, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_vabs_p_vp_vp :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_vabs_p_vp_vp(dst, src)) } +emit_vabs_p_vp_vp :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_vabs_p_vp_vp(dst, src)) } inst_vabs_t_vt_vt :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .VABS_T, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_vabs_t_vt_vt :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_vabs_t_vt_vt(dst, src)) } +emit_vabs_t_vt_vt :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_vabs_t_vt_vt(dst, src)) } inst_vabs_q_vq_vq :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .VABS_Q, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_vabs_q_vq_vq :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_vabs_q_vq_vq(dst, src)) } +emit_vabs_q_vq_vq :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_vabs_q_vq_vq(dst, src)) } inst_vneg_s_vs_vs :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .VNEG_S, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_vneg_s_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_vneg_s_vs_vs(dst, src)) } +emit_vneg_s_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_vneg_s_vs_vs(dst, src)) } inst_vneg_p_vp_vp :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .VNEG_P, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_vneg_p_vp_vp :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_vneg_p_vp_vp(dst, src)) } +emit_vneg_p_vp_vp :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_vneg_p_vp_vp(dst, src)) } inst_vneg_t_vt_vt :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .VNEG_T, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_vneg_t_vt_vt :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_vneg_t_vt_vt(dst, src)) } +emit_vneg_t_vt_vt :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_vneg_t_vt_vt(dst, src)) } inst_vneg_q_vq_vq :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .VNEG_Q, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_vneg_q_vq_vq :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_vneg_q_vq_vq(dst, src)) } +emit_vneg_q_vq_vq :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_vneg_q_vq_vq(dst, src)) } inst_vsqrt_s_vs_vs :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .VSQRT_S, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_vsqrt_s_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_vsqrt_s_vs_vs(dst, src)) } +emit_vsqrt_s_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_vsqrt_s_vs_vs(dst, src)) } inst_vrcp_s_vs_vs :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .VRCP_S, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_vrcp_s_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_vrcp_s_vs_vs(dst, src)) } +emit_vrcp_s_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_vrcp_s_vs_vs(dst, src)) } inst_vrcp_p_vp_vp :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .VRCP_P, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_vrcp_p_vp_vp :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_vrcp_p_vp_vp(dst, src)) } +emit_vrcp_p_vp_vp :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_vrcp_p_vp_vp(dst, src)) } inst_vrcp_t_vt_vt :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .VRCP_T, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_vrcp_t_vt_vt :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_vrcp_t_vt_vt(dst, src)) } +emit_vrcp_t_vt_vt :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_vrcp_t_vt_vt(dst, src)) } inst_vrcp_q_vq_vq :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .VRCP_Q, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_vrcp_q_vq_vq :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_vrcp_q_vq_vq(dst, src)) } +emit_vrcp_q_vq_vq :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_vrcp_q_vq_vq(dst, src)) } inst_vrsq_s_vs_vs :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .VRSQ_S, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_vrsq_s_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_vrsq_s_vs_vs(dst, src)) } +emit_vrsq_s_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_vrsq_s_vs_vs(dst, src)) } inst_vrsq_p_vp_vp :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .VRSQ_P, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_vrsq_p_vp_vp :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_vrsq_p_vp_vp(dst, src)) } +emit_vrsq_p_vp_vp :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_vrsq_p_vp_vp(dst, src)) } inst_vrsq_t_vt_vt :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .VRSQ_T, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_vrsq_t_vt_vt :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_vrsq_t_vt_vt(dst, src)) } +emit_vrsq_t_vt_vt :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_vrsq_t_vt_vt(dst, src)) } inst_vrsq_q_vq_vq :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .VRSQ_Q, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_vrsq_q_vq_vq :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_vrsq_q_vq_vq(dst, src)) } +emit_vrsq_q_vq_vq :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_vrsq_q_vq_vq(dst, src)) } inst_vdot_p_vs_vp_vp :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VDOT_P, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_vdot_p_vs_vp_vp :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vdot_p_vs_vp_vp(dst, src, src2)) } +emit_vdot_p_vs_vp_vp :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vdot_p_vs_vp_vp(dst, src, src2)) } inst_vdot_t_vs_vt_vt :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VDOT_T, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_vdot_t_vs_vt_vt :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vdot_t_vs_vt_vt(dst, src, src2)) } +emit_vdot_t_vs_vt_vt :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vdot_t_vs_vt_vt(dst, src, src2)) } inst_vdot_q_vs_vq_vq :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VDOT_Q, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_vdot_q_vs_vq_vq :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vdot_q_vs_vq_vq(dst, src, src2)) } +emit_vdot_q_vs_vq_vq :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vdot_q_vs_vq_vq(dst, src, src2)) } inst_vscl_p_vp_vp_vs :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VSCL_P, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_vscl_p_vp_vp_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vscl_p_vp_vp_vs(dst, src, src2)) } +emit_vscl_p_vp_vp_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vscl_p_vp_vp_vs(dst, src, src2)) } inst_vscl_t_vt_vt_vs :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VSCL_T, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_vscl_t_vt_vt_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vscl_t_vt_vt_vs(dst, src, src2)) } +emit_vscl_t_vt_vt_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vscl_t_vt_vt_vs(dst, src, src2)) } inst_vscl_q_vq_vq_vs :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VSCL_Q, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_vscl_q_vq_vq_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vscl_q_vq_vq_vs(dst, src, src2)) } +emit_vscl_q_vq_vq_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vscl_q_vq_vq_vs(dst, src, src2)) } inst_vhdp_p_vs_vp_vp :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VHDP_P, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_vhdp_p_vs_vp_vp :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vhdp_p_vs_vp_vp(dst, src, src2)) } +emit_vhdp_p_vs_vp_vp :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vhdp_p_vs_vp_vp(dst, src, src2)) } inst_vhdp_t_vs_vt_vt :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VHDP_T, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_vhdp_t_vs_vt_vt :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vhdp_t_vs_vt_vt(dst, src, src2)) } +emit_vhdp_t_vs_vt_vt :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vhdp_t_vs_vt_vt(dst, src, src2)) } inst_vhdp_q_vs_vq_vq :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VHDP_Q, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_vhdp_q_vs_vq_vq :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vhdp_q_vs_vq_vq(dst, src, src2)) } +emit_vhdp_q_vs_vq_vq :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vhdp_q_vs_vq_vq(dst, src, src2)) } inst_vavg_p_vs_vp :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .VAVG_P, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_vavg_p_vs_vp :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_vavg_p_vs_vp(dst, src)) } +emit_vavg_p_vs_vp :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_vavg_p_vs_vp(dst, src)) } inst_vavg_t_vs_vt :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .VAVG_T, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_vavg_t_vs_vt :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_vavg_t_vs_vt(dst, src)) } +emit_vavg_t_vs_vt :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_vavg_t_vs_vt(dst, src)) } inst_vavg_q_vs_vq :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .VAVG_Q, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_vavg_q_vs_vq :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_vavg_q_vs_vq(dst, src)) } +emit_vavg_q_vs_vq :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_vavg_q_vs_vq(dst, src)) } inst_vfad_p_vs_vp :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .VFAD_P, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_vfad_p_vs_vp :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_vfad_p_vs_vp(dst, src)) } +emit_vfad_p_vs_vp :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_vfad_p_vs_vp(dst, src)) } inst_vfad_t_vs_vt :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .VFAD_T, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_vfad_t_vs_vt :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_vfad_t_vs_vt(dst, src)) } +emit_vfad_t_vs_vt :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_vfad_t_vs_vt(dst, src)) } inst_vfad_q_vs_vq :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .VFAD_Q, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_vfad_q_vs_vq :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_vfad_q_vs_vq(dst, src)) } +emit_vfad_q_vs_vq :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_vfad_q_vs_vq(dst, src)) } inst_vmmul_p_vmp_vmp_vmp :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VMMUL_P, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_vmmul_p_vmp_vmp_vmp :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vmmul_p_vmp_vmp_vmp(dst, src, src2)) } +emit_vmmul_p_vmp_vmp_vmp :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vmmul_p_vmp_vmp_vmp(dst, src, src2)) } inst_vmmul_t_vmt_vmt_vmt :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VMMUL_T, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_vmmul_t_vmt_vmt_vmt :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vmmul_t_vmt_vmt_vmt(dst, src, src2)) } +emit_vmmul_t_vmt_vmt_vmt :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vmmul_t_vmt_vmt_vmt(dst, src, src2)) } inst_vmmul_q_vmq_vmq_vmq :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VMMUL_Q, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_vmmul_q_vmq_vmq_vmq :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vmmul_q_vmq_vmq_vmq(dst, src, src2)) } +emit_vmmul_q_vmq_vmq_vmq :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vmmul_q_vmq_vmq_vmq(dst, src, src2)) } inst_vtfm2_p_vp_vmp_vp :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VTFM2_P, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_vtfm2_p_vp_vmp_vp :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vtfm2_p_vp_vmp_vp(dst, src, src2)) } +emit_vtfm2_p_vp_vmp_vp :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vtfm2_p_vp_vmp_vp(dst, src, src2)) } inst_vtfm3_t_vt_vmt_vt :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VTFM3_T, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_vtfm3_t_vt_vmt_vt :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vtfm3_t_vt_vmt_vt(dst, src, src2)) } +emit_vtfm3_t_vt_vmt_vt :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vtfm3_t_vt_vmt_vt(dst, src, src2)) } inst_vtfm4_q_vq_vmq_vq :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VTFM4_Q, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_vtfm4_q_vq_vmq_vq :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vtfm4_q_vq_vmq_vq(dst, src, src2)) } +emit_vtfm4_q_vq_vmq_vq :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vtfm4_q_vq_vmq_vq(dst, src, src2)) } inst_vhtfm2_p_vp_vmp_vp :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VHTFM2_P, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_vhtfm2_p_vp_vmp_vp :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vhtfm2_p_vp_vmp_vp(dst, src, src2)) } +emit_vhtfm2_p_vp_vmp_vp :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vhtfm2_p_vp_vmp_vp(dst, src, src2)) } inst_vhtfm3_t_vt_vmt_vt :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VHTFM3_T, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_vhtfm3_t_vt_vmt_vt :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vhtfm3_t_vt_vmt_vt(dst, src, src2)) } +emit_vhtfm3_t_vt_vmt_vt :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vhtfm3_t_vt_vmt_vt(dst, src, src2)) } inst_vhtfm4_q_vq_vmq_vq :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VHTFM4_Q, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_vhtfm4_q_vq_vmq_vq :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vhtfm4_q_vq_vmq_vq(dst, src, src2)) } +emit_vhtfm4_q_vq_vmq_vq :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vhtfm4_q_vq_vmq_vq(dst, src, src2)) } inst_vmscl_p_vmp_vmp_vs :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VMSCL_P, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_vmscl_p_vmp_vmp_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vmscl_p_vmp_vmp_vs(dst, src, src2)) } +emit_vmscl_p_vmp_vmp_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vmscl_p_vmp_vmp_vs(dst, src, src2)) } inst_vmscl_t_vmt_vmt_vs :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VMSCL_T, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_vmscl_t_vmt_vmt_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vmscl_t_vmt_vmt_vs(dst, src, src2)) } +emit_vmscl_t_vmt_vmt_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vmscl_t_vmt_vmt_vs(dst, src, src2)) } inst_vmscl_q_vmq_vmq_vs :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VMSCL_Q, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_vmscl_q_vmq_vmq_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vmscl_q_vmq_vmq_vs(dst, src, src2)) } +emit_vmscl_q_vmq_vmq_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vmscl_q_vmq_vmq_vs(dst, src, src2)) } inst_vmmov_p_vmp_vmp :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .VMMOV_P, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_vmmov_p_vmp_vmp :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_vmmov_p_vmp_vmp(dst, src)) } +emit_vmmov_p_vmp_vmp :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_vmmov_p_vmp_vmp(dst, src)) } inst_vmmov_t_vmt_vmt :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .VMMOV_T, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_vmmov_t_vmt_vmt :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_vmmov_t_vmt_vmt(dst, src)) } +emit_vmmov_t_vmt_vmt :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_vmmov_t_vmt_vmt(dst, src)) } inst_vmmov_q_vmq_vmq :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .VMMOV_Q, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_vmmov_q_vmq_vmq :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_vmmov_q_vmq_vmq(dst, src)) } +emit_vmmov_q_vmq_vmq :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_vmmov_q_vmq_vmq(dst, src)) } inst_vmidt_p_vmp :: #force_inline proc "contextless" (dst: Register) -> Instruction { return Instruction{mnemonic = .VMIDT_P, operand_count = 1, length = 4, ops = {op_reg(dst), {}, {}, {}}} } -emit_vmidt_p_vmp :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register) { append(instructions, inst_vmidt_p_vmp(dst)) } +emit_vmidt_p_vmp :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register) { append_elem(instructions, inst_vmidt_p_vmp(dst)) } inst_vmidt_t_vmt :: #force_inline proc "contextless" (dst: Register) -> Instruction { return Instruction{mnemonic = .VMIDT_T, operand_count = 1, length = 4, ops = {op_reg(dst), {}, {}, {}}} } -emit_vmidt_t_vmt :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register) { append(instructions, inst_vmidt_t_vmt(dst)) } +emit_vmidt_t_vmt :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register) { append_elem(instructions, inst_vmidt_t_vmt(dst)) } inst_vmidt_q_vmq :: #force_inline proc "contextless" (dst: Register) -> Instruction { return Instruction{mnemonic = .VMIDT_Q, operand_count = 1, length = 4, ops = {op_reg(dst), {}, {}, {}}} } -emit_vmidt_q_vmq :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register) { append(instructions, inst_vmidt_q_vmq(dst)) } +emit_vmidt_q_vmq :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register) { append_elem(instructions, inst_vmidt_q_vmq(dst)) } inst_vmzero_p_vmp :: #force_inline proc "contextless" (dst: Register) -> Instruction { return Instruction{mnemonic = .VMZERO_P, operand_count = 1, length = 4, ops = {op_reg(dst), {}, {}, {}}} } -emit_vmzero_p_vmp :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register) { append(instructions, inst_vmzero_p_vmp(dst)) } +emit_vmzero_p_vmp :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register) { append_elem(instructions, inst_vmzero_p_vmp(dst)) } inst_vmzero_t_vmt :: #force_inline proc "contextless" (dst: Register) -> Instruction { return Instruction{mnemonic = .VMZERO_T, operand_count = 1, length = 4, ops = {op_reg(dst), {}, {}, {}}} } -emit_vmzero_t_vmt :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register) { append(instructions, inst_vmzero_t_vmt(dst)) } +emit_vmzero_t_vmt :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register) { append_elem(instructions, inst_vmzero_t_vmt(dst)) } inst_vmzero_q_vmq :: #force_inline proc "contextless" (dst: Register) -> Instruction { return Instruction{mnemonic = .VMZERO_Q, operand_count = 1, length = 4, ops = {op_reg(dst), {}, {}, {}}} } -emit_vmzero_q_vmq :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register) { append(instructions, inst_vmzero_q_vmq(dst)) } +emit_vmzero_q_vmq :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register) { append_elem(instructions, inst_vmzero_q_vmq(dst)) } inst_vmone_p_vmp :: #force_inline proc "contextless" (dst: Register) -> Instruction { return Instruction{mnemonic = .VMONE_P, operand_count = 1, length = 4, ops = {op_reg(dst), {}, {}, {}}} } -emit_vmone_p_vmp :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register) { append(instructions, inst_vmone_p_vmp(dst)) } +emit_vmone_p_vmp :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register) { append_elem(instructions, inst_vmone_p_vmp(dst)) } inst_vmone_t_vmt :: #force_inline proc "contextless" (dst: Register) -> Instruction { return Instruction{mnemonic = .VMONE_T, operand_count = 1, length = 4, ops = {op_reg(dst), {}, {}, {}}} } -emit_vmone_t_vmt :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register) { append(instructions, inst_vmone_t_vmt(dst)) } +emit_vmone_t_vmt :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register) { append_elem(instructions, inst_vmone_t_vmt(dst)) } inst_vmone_q_vmq :: #force_inline proc "contextless" (dst: Register) -> Instruction { return Instruction{mnemonic = .VMONE_Q, operand_count = 1, length = 4, ops = {op_reg(dst), {}, {}, {}}} } -emit_vmone_q_vmq :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register) { append(instructions, inst_vmone_q_vmq(dst)) } +emit_vmone_q_vmq :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register) { append_elem(instructions, inst_vmone_q_vmq(dst)) } inst_vcrs_t_vt_vt_vt :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VCRS_T, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_vcrs_t_vt_vt_vt :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vcrs_t_vt_vt_vt(dst, src, src2)) } +emit_vcrs_t_vt_vt_vt :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vcrs_t_vt_vt_vt(dst, src, src2)) } inst_vcrsp_t_vt_vt_vt :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VCRSP_T, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_vcrsp_t_vt_vt_vt :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vcrsp_t_vt_vt_vt(dst, src, src2)) } +emit_vcrsp_t_vt_vt_vt :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vcrsp_t_vt_vt_vt(dst, src, src2)) } inst_vqmul_q_vq_vq_vq :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VQMUL_Q, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_vqmul_q_vq_vq_vq :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vqmul_q_vq_vq_vq(dst, src, src2)) } +emit_vqmul_q_vq_vq_vq :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vqmul_q_vq_vq_vq(dst, src, src2)) } inst_vcmp_s_i5_vs_vs :: #force_inline proc "contextless" (imm: i64, dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .VCMP_S, operand_count = 3, length = 4, ops = {op_imm(imm, 1), op_reg(dst), op_reg(src), {}}} } -emit_vcmp_s_i5_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, dst: Register, src: Register) { append(instructions, inst_vcmp_s_i5_vs_vs(imm, dst, src)) } +emit_vcmp_s_i5_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, dst: Register, src: Register) { append_elem(instructions, inst_vcmp_s_i5_vs_vs(imm, dst, src)) } inst_vcmp_p_i5_vp_vp :: #force_inline proc "contextless" (imm: i64, dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .VCMP_P, operand_count = 3, length = 4, ops = {op_imm(imm, 1), op_reg(dst), op_reg(src), {}}} } -emit_vcmp_p_i5_vp_vp :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, dst: Register, src: Register) { append(instructions, inst_vcmp_p_i5_vp_vp(imm, dst, src)) } +emit_vcmp_p_i5_vp_vp :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, dst: Register, src: Register) { append_elem(instructions, inst_vcmp_p_i5_vp_vp(imm, dst, src)) } inst_vcmp_t_i5_vt_vt :: #force_inline proc "contextless" (imm: i64, dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .VCMP_T, operand_count = 3, length = 4, ops = {op_imm(imm, 1), op_reg(dst), op_reg(src), {}}} } -emit_vcmp_t_i5_vt_vt :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, dst: Register, src: Register) { append(instructions, inst_vcmp_t_i5_vt_vt(imm, dst, src)) } +emit_vcmp_t_i5_vt_vt :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, dst: Register, src: Register) { append_elem(instructions, inst_vcmp_t_i5_vt_vt(imm, dst, src)) } inst_vcmp_q_i5_vq_vq :: #force_inline proc "contextless" (imm: i64, dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .VCMP_Q, operand_count = 3, length = 4, ops = {op_imm(imm, 1), op_reg(dst), op_reg(src), {}}} } -emit_vcmp_q_i5_vq_vq :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, dst: Register, src: Register) { append(instructions, inst_vcmp_q_i5_vq_vq(imm, dst, src)) } +emit_vcmp_q_i5_vq_vq :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, dst: Register, src: Register) { append_elem(instructions, inst_vcmp_q_i5_vq_vq(imm, dst, src)) } inst_vmin_s_vs_vs_vs :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VMIN_S, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_vmin_s_vs_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vmin_s_vs_vs_vs(dst, src, src2)) } +emit_vmin_s_vs_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vmin_s_vs_vs_vs(dst, src, src2)) } inst_vmin_p_vp_vp_vp :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VMIN_P, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_vmin_p_vp_vp_vp :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vmin_p_vp_vp_vp(dst, src, src2)) } +emit_vmin_p_vp_vp_vp :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vmin_p_vp_vp_vp(dst, src, src2)) } inst_vmin_t_vt_vt_vt :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VMIN_T, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_vmin_t_vt_vt_vt :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vmin_t_vt_vt_vt(dst, src, src2)) } +emit_vmin_t_vt_vt_vt :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vmin_t_vt_vt_vt(dst, src, src2)) } inst_vmin_q_vq_vq_vq :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VMIN_Q, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_vmin_q_vq_vq_vq :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vmin_q_vq_vq_vq(dst, src, src2)) } +emit_vmin_q_vq_vq_vq :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vmin_q_vq_vq_vq(dst, src, src2)) } inst_vmax_s_vs_vs_vs :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VMAX_S, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_vmax_s_vs_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vmax_s_vs_vs_vs(dst, src, src2)) } +emit_vmax_s_vs_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vmax_s_vs_vs_vs(dst, src, src2)) } inst_vmax_p_vp_vp_vp :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VMAX_P, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_vmax_p_vp_vp_vp :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vmax_p_vp_vp_vp(dst, src, src2)) } +emit_vmax_p_vp_vp_vp :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vmax_p_vp_vp_vp(dst, src, src2)) } inst_vmax_t_vt_vt_vt :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VMAX_T, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_vmax_t_vt_vt_vt :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vmax_t_vt_vt_vt(dst, src, src2)) } +emit_vmax_t_vt_vt_vt :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vmax_t_vt_vt_vt(dst, src, src2)) } inst_vmax_q_vq_vq_vq :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VMAX_Q, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_vmax_q_vq_vq_vq :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vmax_q_vq_vq_vq(dst, src, src2)) } +emit_vmax_q_vq_vq_vq :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vmax_q_vq_vq_vq(dst, src, src2)) } inst_vsin_s_vs_vs :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .VSIN_S, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_vsin_s_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_vsin_s_vs_vs(dst, src)) } +emit_vsin_s_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_vsin_s_vs_vs(dst, src)) } inst_vcos_s_vs_vs :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .VCOS_S, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_vcos_s_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_vcos_s_vs_vs(dst, src)) } +emit_vcos_s_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_vcos_s_vs_vs(dst, src)) } inst_vexp2_s_vs_vs :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .VEXP2_S, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_vexp2_s_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_vexp2_s_vs_vs(dst, src)) } +emit_vexp2_s_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_vexp2_s_vs_vs(dst, src)) } inst_vlog2_s_vs_vs :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .VLOG2_S, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_vlog2_s_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_vlog2_s_vs_vs(dst, src)) } +emit_vlog2_s_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_vlog2_s_vs_vs(dst, src)) } inst_vasin_s_vs_vs :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .VASIN_S, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_vasin_s_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_vasin_s_vs_vs(dst, src)) } +emit_vasin_s_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_vasin_s_vs_vs(dst, src)) } inst_vnrcp_s_vs_vs :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .VNRCP_S, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_vnrcp_s_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_vnrcp_s_vs_vs(dst, src)) } +emit_vnrcp_s_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_vnrcp_s_vs_vs(dst, src)) } inst_vnsin_s_vs_vs :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .VNSIN_S, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_vnsin_s_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_vnsin_s_vs_vs(dst, src)) } +emit_vnsin_s_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_vnsin_s_vs_vs(dst, src)) } inst_vrexp2_s_vs_vs :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .VREXP2_S, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_vrexp2_s_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_vrexp2_s_vs_vs(dst, src)) } +emit_vrexp2_s_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_vrexp2_s_vs_vs(dst, src)) } inst_vsgn_s_vs_vs :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .VSGN_S, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_vsgn_s_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_vsgn_s_vs_vs(dst, src)) } +emit_vsgn_s_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_vsgn_s_vs_vs(dst, src)) } inst_vi2f_s_vs_vs_i5 :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .VI2F_S, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_imm(imm, 1), {}}} } -emit_vi2f_s_vs_vs_i5 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_vi2f_s_vs_vs_i5(dst, src, imm)) } +emit_vi2f_s_vs_vs_i5 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_vi2f_s_vs_vs_i5(dst, src, imm)) } inst_vi2f_p_vp_vp_i5 :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .VI2F_P, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_imm(imm, 1), {}}} } -emit_vi2f_p_vp_vp_i5 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_vi2f_p_vp_vp_i5(dst, src, imm)) } +emit_vi2f_p_vp_vp_i5 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_vi2f_p_vp_vp_i5(dst, src, imm)) } inst_vi2f_t_vt_vt_i5 :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .VI2F_T, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_imm(imm, 1), {}}} } -emit_vi2f_t_vt_vt_i5 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_vi2f_t_vt_vt_i5(dst, src, imm)) } +emit_vi2f_t_vt_vt_i5 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_vi2f_t_vt_vt_i5(dst, src, imm)) } inst_vi2f_q_vq_vq_i5 :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .VI2F_Q, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_imm(imm, 1), {}}} } -emit_vi2f_q_vq_vq_i5 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_vi2f_q_vq_vq_i5(dst, src, imm)) } +emit_vi2f_q_vq_vq_i5 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_vi2f_q_vq_vq_i5(dst, src, imm)) } inst_vf2in_s_vs_vs_i5 :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .VF2IN_S, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_imm(imm, 1), {}}} } -emit_vf2in_s_vs_vs_i5 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_vf2in_s_vs_vs_i5(dst, src, imm)) } +emit_vf2in_s_vs_vs_i5 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_vf2in_s_vs_vs_i5(dst, src, imm)) } inst_vf2in_p_vp_vp_i5 :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .VF2IN_P, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_imm(imm, 1), {}}} } -emit_vf2in_p_vp_vp_i5 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_vf2in_p_vp_vp_i5(dst, src, imm)) } +emit_vf2in_p_vp_vp_i5 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_vf2in_p_vp_vp_i5(dst, src, imm)) } inst_vf2in_t_vt_vt_i5 :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .VF2IN_T, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_imm(imm, 1), {}}} } -emit_vf2in_t_vt_vt_i5 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_vf2in_t_vt_vt_i5(dst, src, imm)) } +emit_vf2in_t_vt_vt_i5 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_vf2in_t_vt_vt_i5(dst, src, imm)) } inst_vf2in_q_vq_vq_i5 :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .VF2IN_Q, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_imm(imm, 1), {}}} } -emit_vf2in_q_vq_vq_i5 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_vf2in_q_vq_vq_i5(dst, src, imm)) } +emit_vf2in_q_vq_vq_i5 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_vf2in_q_vq_vq_i5(dst, src, imm)) } inst_vf2iz_s_vs_vs_i5 :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .VF2IZ_S, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_imm(imm, 1), {}}} } -emit_vf2iz_s_vs_vs_i5 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_vf2iz_s_vs_vs_i5(dst, src, imm)) } +emit_vf2iz_s_vs_vs_i5 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_vf2iz_s_vs_vs_i5(dst, src, imm)) } inst_vf2iz_p_vp_vp_i5 :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .VF2IZ_P, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_imm(imm, 1), {}}} } -emit_vf2iz_p_vp_vp_i5 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_vf2iz_p_vp_vp_i5(dst, src, imm)) } +emit_vf2iz_p_vp_vp_i5 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_vf2iz_p_vp_vp_i5(dst, src, imm)) } inst_vf2iz_t_vt_vt_i5 :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .VF2IZ_T, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_imm(imm, 1), {}}} } -emit_vf2iz_t_vt_vt_i5 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_vf2iz_t_vt_vt_i5(dst, src, imm)) } +emit_vf2iz_t_vt_vt_i5 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_vf2iz_t_vt_vt_i5(dst, src, imm)) } inst_vf2iz_q_vq_vq_i5 :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .VF2IZ_Q, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_imm(imm, 1), {}}} } -emit_vf2iz_q_vq_vq_i5 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_vf2iz_q_vq_vq_i5(dst, src, imm)) } +emit_vf2iz_q_vq_vq_i5 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_vf2iz_q_vq_vq_i5(dst, src, imm)) } inst_vf2iu_s_vs_vs_i5 :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .VF2IU_S, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_imm(imm, 1), {}}} } -emit_vf2iu_s_vs_vs_i5 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_vf2iu_s_vs_vs_i5(dst, src, imm)) } +emit_vf2iu_s_vs_vs_i5 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_vf2iu_s_vs_vs_i5(dst, src, imm)) } inst_vf2iu_p_vp_vp_i5 :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .VF2IU_P, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_imm(imm, 1), {}}} } -emit_vf2iu_p_vp_vp_i5 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_vf2iu_p_vp_vp_i5(dst, src, imm)) } +emit_vf2iu_p_vp_vp_i5 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_vf2iu_p_vp_vp_i5(dst, src, imm)) } inst_vf2iu_t_vt_vt_i5 :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .VF2IU_T, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_imm(imm, 1), {}}} } -emit_vf2iu_t_vt_vt_i5 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_vf2iu_t_vt_vt_i5(dst, src, imm)) } +emit_vf2iu_t_vt_vt_i5 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_vf2iu_t_vt_vt_i5(dst, src, imm)) } inst_vf2iu_q_vq_vq_i5 :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .VF2IU_Q, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_imm(imm, 1), {}}} } -emit_vf2iu_q_vq_vq_i5 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_vf2iu_q_vq_vq_i5(dst, src, imm)) } +emit_vf2iu_q_vq_vq_i5 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_vf2iu_q_vq_vq_i5(dst, src, imm)) } inst_vf2id_s_vs_vs_i5 :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .VF2ID_S, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_imm(imm, 1), {}}} } -emit_vf2id_s_vs_vs_i5 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_vf2id_s_vs_vs_i5(dst, src, imm)) } +emit_vf2id_s_vs_vs_i5 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_vf2id_s_vs_vs_i5(dst, src, imm)) } inst_vf2id_p_vp_vp_i5 :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .VF2ID_P, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_imm(imm, 1), {}}} } -emit_vf2id_p_vp_vp_i5 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_vf2id_p_vp_vp_i5(dst, src, imm)) } +emit_vf2id_p_vp_vp_i5 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_vf2id_p_vp_vp_i5(dst, src, imm)) } inst_vf2id_t_vt_vt_i5 :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .VF2ID_T, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_imm(imm, 1), {}}} } -emit_vf2id_t_vt_vt_i5 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_vf2id_t_vt_vt_i5(dst, src, imm)) } +emit_vf2id_t_vt_vt_i5 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_vf2id_t_vt_vt_i5(dst, src, imm)) } inst_vf2id_q_vq_vq_i5 :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .VF2ID_Q, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_imm(imm, 1), {}}} } -emit_vf2id_q_vq_vq_i5 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_vf2id_q_vq_vq_i5(dst, src, imm)) } +emit_vf2id_q_vq_vq_i5 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_vf2id_q_vq_vq_i5(dst, src, imm)) } inst_vf2h_p_vs_vp :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .VF2H_P, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_vf2h_p_vs_vp :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_vf2h_p_vs_vp(dst, src)) } +emit_vf2h_p_vs_vp :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_vf2h_p_vs_vp(dst, src)) } inst_vh2f_s_vp_vs :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .VH2F_S, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_vh2f_s_vp_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_vh2f_s_vp_vs(dst, src)) } +emit_vh2f_s_vp_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_vh2f_s_vp_vs(dst, src)) } inst_vflush_none :: #force_inline proc "contextless" () -> Instruction { return Instruction{mnemonic = .VFLUSH, operand_count = 0, length = 4, ops = {{}, {}, {}, {}}} } -emit_vflush_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_vflush_none()) } +emit_vflush_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_vflush_none()) } inst_vsync_none :: #force_inline proc "contextless" () -> Instruction { return Instruction{mnemonic = .VSYNC, operand_count = 0, length = 4, ops = {{}, {}, {}, {}}} } -emit_vsync_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_vsync_none()) } +emit_vsync_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_vsync_none()) } inst_vnop_none :: #force_inline proc "contextless" () -> Instruction { return Instruction{mnemonic = .VNOP, operand_count = 0, length = 4, ops = {{}, {}, {}, {}}} } -emit_vnop_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_vnop_none()) } +emit_vnop_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_vnop_none()) } inst_vpfxs_i20 :: #force_inline proc "contextless" (imm: i64) -> Instruction { return Instruction{mnemonic = .VPFXS, operand_count = 1, length = 4, ops = {op_imm(imm, 4), {}, {}, {}}} } -emit_vpfxs_i20 :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64) { append(instructions, inst_vpfxs_i20(imm)) } +emit_vpfxs_i20 :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64) { append_elem(instructions, inst_vpfxs_i20(imm)) } inst_vpfxt_i20 :: #force_inline proc "contextless" (imm: i64) -> Instruction { return Instruction{mnemonic = .VPFXT, operand_count = 1, length = 4, ops = {op_imm(imm, 4), {}, {}, {}}} } -emit_vpfxt_i20 :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64) { append(instructions, inst_vpfxt_i20(imm)) } +emit_vpfxt_i20 :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64) { append_elem(instructions, inst_vpfxt_i20(imm)) } inst_vpfxd_i20 :: #force_inline proc "contextless" (imm: i64) -> Instruction { return Instruction{mnemonic = .VPFXD, operand_count = 1, length = 4, ops = {op_imm(imm, 4), {}, {}, {}}} } -emit_vpfxd_i20 :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64) { append(instructions, inst_vpfxd_i20(imm)) } +emit_vpfxd_i20 :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64) { append_elem(instructions, inst_vpfxd_i20(imm)) } inst_vcst_s_vs_i5 :: #force_inline proc "contextless" (dst: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .VCST_S, operand_count = 2, length = 4, ops = {op_reg(dst), op_imm(imm, 1), {}, {}}} } -emit_vcst_s_vs_i5 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64) { append(instructions, inst_vcst_s_vs_i5(dst, imm)) } +emit_vcst_s_vs_i5 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64) { append_elem(instructions, inst_vcst_s_vs_i5(dst, imm)) } inst_vcst_p_vp_i5 :: #force_inline proc "contextless" (dst: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .VCST_P, operand_count = 2, length = 4, ops = {op_reg(dst), op_imm(imm, 1), {}, {}}} } -emit_vcst_p_vp_i5 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64) { append(instructions, inst_vcst_p_vp_i5(dst, imm)) } +emit_vcst_p_vp_i5 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64) { append_elem(instructions, inst_vcst_p_vp_i5(dst, imm)) } inst_vcst_t_vt_i5 :: #force_inline proc "contextless" (dst: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .VCST_T, operand_count = 2, length = 4, ops = {op_reg(dst), op_imm(imm, 1), {}, {}}} } -emit_vcst_t_vt_i5 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64) { append(instructions, inst_vcst_t_vt_i5(dst, imm)) } +emit_vcst_t_vt_i5 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64) { append_elem(instructions, inst_vcst_t_vt_i5(dst, imm)) } inst_vcst_q_vq_i5 :: #force_inline proc "contextless" (dst: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .VCST_Q, operand_count = 2, length = 4, ops = {op_reg(dst), op_imm(imm, 1), {}, {}}} } -emit_vcst_q_vq_i5 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64) { append(instructions, inst_vcst_q_vq_i5(dst, imm)) } +emit_vcst_q_vq_i5 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64) { append_elem(instructions, inst_vcst_q_vq_i5(dst, imm)) } inst_mfv_r_vs :: #force_inline proc "contextless" (dst: GPR, src: Register) -> Instruction { return Instruction{mnemonic = .MFV, operand_count = 2, length = 4, ops = {op_gpr(dst), op_reg(src), {}, {}}} } -emit_mfv_r_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: Register) { append(instructions, inst_mfv_r_vs(dst, src)) } +emit_mfv_r_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: Register) { append_elem(instructions, inst_mfv_r_vs(dst, src)) } inst_mtv_r_vs :: #force_inline proc "contextless" (dst: GPR, src: Register) -> Instruction { return Instruction{mnemonic = .MTV, operand_count = 2, length = 4, ops = {op_gpr(dst), op_reg(src), {}, {}}} } -emit_mtv_r_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: Register) { append(instructions, inst_mtv_r_vs(dst, src)) } +emit_mtv_r_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, src: Register) { append_elem(instructions, inst_mtv_r_vs(dst, src)) } inst_mfvc_r_i5 :: #force_inline proc "contextless" (dst: GPR, imm: i64) -> Instruction { return Instruction{mnemonic = .MFVC, operand_count = 2, length = 4, ops = {op_gpr(dst), op_imm(imm, 1), {}, {}}} } -emit_mfvc_r_i5 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, imm: i64) { append(instructions, inst_mfvc_r_i5(dst, imm)) } +emit_mfvc_r_i5 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, imm: i64) { append_elem(instructions, inst_mfvc_r_i5(dst, imm)) } inst_mtvc_r_i5 :: #force_inline proc "contextless" (dst: GPR, imm: i64) -> Instruction { return Instruction{mnemonic = .MTVC, operand_count = 2, length = 4, ops = {op_gpr(dst), op_imm(imm, 1), {}, {}}} } -emit_mtvc_r_i5 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, imm: i64) { append(instructions, inst_mtvc_r_i5(dst, imm)) } +emit_mtvc_r_i5 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR, imm: i64) { append_elem(instructions, inst_mtvc_r_i5(dst, imm)) } inst_bvf_i5_rel :: #force_inline proc "contextless" (imm: i64, target: u32) -> Instruction { return Instruction{mnemonic = .BVF, operand_count = 2, length = 4, ops = {op_imm(imm, 1), op_label(target), {}, {}}} } -emit_bvf_i5_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, target: u32) { append(instructions, inst_bvf_i5_rel(imm, target)) } +emit_bvf_i5_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, target: u32) { append_elem(instructions, inst_bvf_i5_rel(imm, target)) } inst_bvt_i5_rel :: #force_inline proc "contextless" (imm: i64, target: u32) -> Instruction { return Instruction{mnemonic = .BVT, operand_count = 2, length = 4, ops = {op_imm(imm, 1), op_label(target), {}, {}}} } -emit_bvt_i5_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, target: u32) { append(instructions, inst_bvt_i5_rel(imm, target)) } +emit_bvt_i5_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, target: u32) { append_elem(instructions, inst_bvt_i5_rel(imm, target)) } inst_bvfl_i5_rel :: #force_inline proc "contextless" (imm: i64, target: u32) -> Instruction { return Instruction{mnemonic = .BVFL, operand_count = 2, length = 4, ops = {op_imm(imm, 1), op_label(target), {}, {}}} } -emit_bvfl_i5_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, target: u32) { append(instructions, inst_bvfl_i5_rel(imm, target)) } +emit_bvfl_i5_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, target: u32) { append_elem(instructions, inst_bvfl_i5_rel(imm, target)) } inst_bvtl_i5_rel :: #force_inline proc "contextless" (imm: i64, target: u32) -> Instruction { return Instruction{mnemonic = .BVTL, operand_count = 2, length = 4, ops = {op_imm(imm, 1), op_label(target), {}, {}}} } -emit_bvtl_i5_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, target: u32) { append(instructions, inst_bvtl_i5_rel(imm, target)) } +emit_bvtl_i5_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, target: u32) { append_elem(instructions, inst_bvtl_i5_rel(imm, target)) } // ============================================================================= // Overload Groups diff --git a/core/rexcode/isa/mips/tools/gen_mnemonic_builders.odin b/core/rexcode/isa/mips/tools/gen_mnemonic_builders.odin index d177dac85..926accafe 100644 --- a/core/rexcode/isa/mips/tools/gen_mnemonic_builders.odin +++ b/core/rexcode/isa/mips/tools/gen_mnemonic_builders.odin @@ -506,7 +506,7 @@ generate_emit_proc :: proc(sb: ^strings.Builder, entry: Proc_Entry, pad: int) { for n := pad - len(entry.proc_name); n > 0; n -= 1 { strings.write_byte(sb, ' ') } strings.write_string(sb, " :: #force_inline proc(") strings.write_string(sb, params) - strings.write_string(sb, ") { append(instructions, ") + strings.write_string(sb, ") { append_elem(instructions, ") strings.write_string(sb, entry.proc_name) strings.write_string(sb, "(") for i in 0.. Instruction { return inst_i(.ADC, imm) } inst_adc_m :: #force_inline proc "contextless" (m: Memory) -> Instruction { return inst_m(.ADC, m) } -emit_adc_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64) { append(instructions, inst_i(.ADC, imm)) } -emit_adc_m :: #force_inline proc(instructions: ^[dynamic]Instruction, m: Memory) { append(instructions, inst_m(.ADC, m)) } +emit_adc_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64) { append_elem(instructions, inst_i(.ADC, imm)) } +emit_adc_m :: #force_inline proc(instructions: ^[dynamic]Instruction, m: Memory) { append_elem(instructions, inst_m(.ADC, m)) } inst_and_imm8 :: #force_inline proc "contextless" (imm: i64) -> Instruction { return inst_i(.AND, imm) } inst_and_m :: #force_inline proc "contextless" (m: Memory) -> Instruction { return inst_m(.AND, m) } -emit_and_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64) { append(instructions, inst_i(.AND, imm)) } -emit_and_m :: #force_inline proc(instructions: ^[dynamic]Instruction, m: Memory) { append(instructions, inst_m(.AND, m)) } +emit_and_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64) { append_elem(instructions, inst_i(.AND, imm)) } +emit_and_m :: #force_inline proc(instructions: ^[dynamic]Instruction, m: Memory) { append_elem(instructions, inst_m(.AND, m)) } inst_asl_a :: #force_inline proc "contextless" () -> Instruction { return inst_a(.ASL) } inst_asl_m :: #force_inline proc "contextless" (m: Memory) -> Instruction { return inst_m(.ASL, m) } -emit_asl_a :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_a(.ASL)) } -emit_asl_m :: #force_inline proc(instructions: ^[dynamic]Instruction, m: Memory) { append(instructions, inst_m(.ASL, m)) } +emit_asl_a :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_a(.ASL)) } +emit_asl_m :: #force_inline proc(instructions: ^[dynamic]Instruction, m: Memory) { append_elem(instructions, inst_m(.ASL, m)) } inst_bit_m :: #force_inline proc "contextless" (m: Memory) -> Instruction { return inst_m(.BIT, m) } inst_bit_imm8 :: #force_inline proc "contextless" (imm: i64) -> Instruction { return inst_i(.BIT, imm) } -emit_bit_m :: #force_inline proc(instructions: ^[dynamic]Instruction, m: Memory) { append(instructions, inst_m(.BIT, m)) } -emit_bit_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64) { append(instructions, inst_i(.BIT, imm)) } +emit_bit_m :: #force_inline proc(instructions: ^[dynamic]Instruction, m: Memory) { append_elem(instructions, inst_m(.BIT, m)) } +emit_bit_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64) { append_elem(instructions, inst_i(.BIT, imm)) } inst_cmp_imm8 :: #force_inline proc "contextless" (imm: i64) -> Instruction { return inst_i(.CMP, imm) } inst_cmp_m :: #force_inline proc "contextless" (m: Memory) -> Instruction { return inst_m(.CMP, m) } -emit_cmp_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64) { append(instructions, inst_i(.CMP, imm)) } -emit_cmp_m :: #force_inline proc(instructions: ^[dynamic]Instruction, m: Memory) { append(instructions, inst_m(.CMP, m)) } +emit_cmp_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64) { append_elem(instructions, inst_i(.CMP, imm)) } +emit_cmp_m :: #force_inline proc(instructions: ^[dynamic]Instruction, m: Memory) { append_elem(instructions, inst_m(.CMP, m)) } inst_cpx_imm8 :: #force_inline proc "contextless" (imm: i64) -> Instruction { return inst_i(.CPX, imm) } inst_cpx_m :: #force_inline proc "contextless" (m: Memory) -> Instruction { return inst_m(.CPX, m) } -emit_cpx_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64) { append(instructions, inst_i(.CPX, imm)) } -emit_cpx_m :: #force_inline proc(instructions: ^[dynamic]Instruction, m: Memory) { append(instructions, inst_m(.CPX, m)) } +emit_cpx_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64) { append_elem(instructions, inst_i(.CPX, imm)) } +emit_cpx_m :: #force_inline proc(instructions: ^[dynamic]Instruction, m: Memory) { append_elem(instructions, inst_m(.CPX, m)) } inst_cpy_imm8 :: #force_inline proc "contextless" (imm: i64) -> Instruction { return inst_i(.CPY, imm) } inst_cpy_m :: #force_inline proc "contextless" (m: Memory) -> Instruction { return inst_m(.CPY, m) } -emit_cpy_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64) { append(instructions, inst_i(.CPY, imm)) } -emit_cpy_m :: #force_inline proc(instructions: ^[dynamic]Instruction, m: Memory) { append(instructions, inst_m(.CPY, m)) } +emit_cpy_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64) { append_elem(instructions, inst_i(.CPY, imm)) } +emit_cpy_m :: #force_inline proc(instructions: ^[dynamic]Instruction, m: Memory) { append_elem(instructions, inst_m(.CPY, m)) } inst_dec_m :: #force_inline proc "contextless" (m: Memory) -> Instruction { return inst_m(.DEC, m) } inst_dec_a :: #force_inline proc "contextless" () -> Instruction { return inst_a(.DEC) } -emit_dec_m :: #force_inline proc(instructions: ^[dynamic]Instruction, m: Memory) { append(instructions, inst_m(.DEC, m)) } -emit_dec_a :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_a(.DEC)) } +emit_dec_m :: #force_inline proc(instructions: ^[dynamic]Instruction, m: Memory) { append_elem(instructions, inst_m(.DEC, m)) } +emit_dec_a :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_a(.DEC)) } inst_dex_none :: #force_inline proc "contextless" () -> Instruction { return inst_none(.DEX) } -emit_dex_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_none(.DEX)) } +emit_dex_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_none(.DEX)) } inst_dey_none :: #force_inline proc "contextless" () -> Instruction { return inst_none(.DEY) } -emit_dey_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_none(.DEY)) } +emit_dey_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_none(.DEY)) } inst_eor_imm8 :: #force_inline proc "contextless" (imm: i64) -> Instruction { return inst_i(.EOR, imm) } inst_eor_m :: #force_inline proc "contextless" (m: Memory) -> Instruction { return inst_m(.EOR, m) } -emit_eor_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64) { append(instructions, inst_i(.EOR, imm)) } -emit_eor_m :: #force_inline proc(instructions: ^[dynamic]Instruction, m: Memory) { append(instructions, inst_m(.EOR, m)) } +emit_eor_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64) { append_elem(instructions, inst_i(.EOR, imm)) } +emit_eor_m :: #force_inline proc(instructions: ^[dynamic]Instruction, m: Memory) { append_elem(instructions, inst_m(.EOR, m)) } inst_inc_m :: #force_inline proc "contextless" (m: Memory) -> Instruction { return inst_m(.INC, m) } inst_inc_a :: #force_inline proc "contextless" () -> Instruction { return inst_a(.INC) } -emit_inc_m :: #force_inline proc(instructions: ^[dynamic]Instruction, m: Memory) { append(instructions, inst_m(.INC, m)) } -emit_inc_a :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_a(.INC)) } +emit_inc_m :: #force_inline proc(instructions: ^[dynamic]Instruction, m: Memory) { append_elem(instructions, inst_m(.INC, m)) } +emit_inc_a :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_a(.INC)) } inst_inx_none :: #force_inline proc "contextless" () -> Instruction { return inst_none(.INX) } -emit_inx_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_none(.INX)) } +emit_inx_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_none(.INX)) } inst_iny_none :: #force_inline proc "contextless" () -> Instruction { return inst_none(.INY) } -emit_iny_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_none(.INY)) } +emit_iny_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_none(.INY)) } inst_lsr_a :: #force_inline proc "contextless" () -> Instruction { return inst_a(.LSR) } inst_lsr_m :: #force_inline proc "contextless" (m: Memory) -> Instruction { return inst_m(.LSR, m) } -emit_lsr_a :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_a(.LSR)) } -emit_lsr_m :: #force_inline proc(instructions: ^[dynamic]Instruction, m: Memory) { append(instructions, inst_m(.LSR, m)) } +emit_lsr_a :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_a(.LSR)) } +emit_lsr_m :: #force_inline proc(instructions: ^[dynamic]Instruction, m: Memory) { append_elem(instructions, inst_m(.LSR, m)) } inst_ora_imm8 :: #force_inline proc "contextless" (imm: i64) -> Instruction { return inst_i(.ORA, imm) } inst_ora_m :: #force_inline proc "contextless" (m: Memory) -> Instruction { return inst_m(.ORA, m) } -emit_ora_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64) { append(instructions, inst_i(.ORA, imm)) } -emit_ora_m :: #force_inline proc(instructions: ^[dynamic]Instruction, m: Memory) { append(instructions, inst_m(.ORA, m)) } +emit_ora_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64) { append_elem(instructions, inst_i(.ORA, imm)) } +emit_ora_m :: #force_inline proc(instructions: ^[dynamic]Instruction, m: Memory) { append_elem(instructions, inst_m(.ORA, m)) } inst_rol_a :: #force_inline proc "contextless" () -> Instruction { return inst_a(.ROL) } inst_rol_m :: #force_inline proc "contextless" (m: Memory) -> Instruction { return inst_m(.ROL, m) } -emit_rol_a :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_a(.ROL)) } -emit_rol_m :: #force_inline proc(instructions: ^[dynamic]Instruction, m: Memory) { append(instructions, inst_m(.ROL, m)) } +emit_rol_a :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_a(.ROL)) } +emit_rol_m :: #force_inline proc(instructions: ^[dynamic]Instruction, m: Memory) { append_elem(instructions, inst_m(.ROL, m)) } inst_ror_a :: #force_inline proc "contextless" () -> Instruction { return inst_a(.ROR) } inst_ror_m :: #force_inline proc "contextless" (m: Memory) -> Instruction { return inst_m(.ROR, m) } -emit_ror_a :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_a(.ROR)) } -emit_ror_m :: #force_inline proc(instructions: ^[dynamic]Instruction, m: Memory) { append(instructions, inst_m(.ROR, m)) } +emit_ror_a :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_a(.ROR)) } +emit_ror_m :: #force_inline proc(instructions: ^[dynamic]Instruction, m: Memory) { append_elem(instructions, inst_m(.ROR, m)) } inst_sbc_imm8 :: #force_inline proc "contextless" (imm: i64) -> Instruction { return inst_i(.SBC, imm) } inst_sbc_m :: #force_inline proc "contextless" (m: Memory) -> Instruction { return inst_m(.SBC, m) } -emit_sbc_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64) { append(instructions, inst_i(.SBC, imm)) } -emit_sbc_m :: #force_inline proc(instructions: ^[dynamic]Instruction, m: Memory) { append(instructions, inst_m(.SBC, m)) } +emit_sbc_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64) { append_elem(instructions, inst_i(.SBC, imm)) } +emit_sbc_m :: #force_inline proc(instructions: ^[dynamic]Instruction, m: Memory) { append_elem(instructions, inst_m(.SBC, m)) } inst_bcc_rel :: #force_inline proc "contextless" (label_id: u32) -> Instruction { return inst_rel(.BCC, label_id) } -emit_bcc_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, label_id: u32) { append(instructions, inst_rel(.BCC, label_id)) } +emit_bcc_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, label_id: u32) { append_elem(instructions, inst_rel(.BCC, label_id)) } inst_bcs_rel :: #force_inline proc "contextless" (label_id: u32) -> Instruction { return inst_rel(.BCS, label_id) } -emit_bcs_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, label_id: u32) { append(instructions, inst_rel(.BCS, label_id)) } +emit_bcs_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, label_id: u32) { append_elem(instructions, inst_rel(.BCS, label_id)) } inst_beq_rel :: #force_inline proc "contextless" (label_id: u32) -> Instruction { return inst_rel(.BEQ, label_id) } -emit_beq_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, label_id: u32) { append(instructions, inst_rel(.BEQ, label_id)) } +emit_beq_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, label_id: u32) { append_elem(instructions, inst_rel(.BEQ, label_id)) } inst_bmi_rel :: #force_inline proc "contextless" (label_id: u32) -> Instruction { return inst_rel(.BMI, label_id) } -emit_bmi_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, label_id: u32) { append(instructions, inst_rel(.BMI, label_id)) } +emit_bmi_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, label_id: u32) { append_elem(instructions, inst_rel(.BMI, label_id)) } inst_bne_rel :: #force_inline proc "contextless" (label_id: u32) -> Instruction { return inst_rel(.BNE, label_id) } -emit_bne_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, label_id: u32) { append(instructions, inst_rel(.BNE, label_id)) } +emit_bne_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, label_id: u32) { append_elem(instructions, inst_rel(.BNE, label_id)) } inst_bpl_rel :: #force_inline proc "contextless" (label_id: u32) -> Instruction { return inst_rel(.BPL, label_id) } -emit_bpl_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, label_id: u32) { append(instructions, inst_rel(.BPL, label_id)) } +emit_bpl_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, label_id: u32) { append_elem(instructions, inst_rel(.BPL, label_id)) } inst_bvc_rel :: #force_inline proc "contextless" (label_id: u32) -> Instruction { return inst_rel(.BVC, label_id) } -emit_bvc_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, label_id: u32) { append(instructions, inst_rel(.BVC, label_id)) } +emit_bvc_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, label_id: u32) { append_elem(instructions, inst_rel(.BVC, label_id)) } inst_bvs_rel :: #force_inline proc "contextless" (label_id: u32) -> Instruction { return inst_rel(.BVS, label_id) } -emit_bvs_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, label_id: u32) { append(instructions, inst_rel(.BVS, label_id)) } +emit_bvs_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, label_id: u32) { append_elem(instructions, inst_rel(.BVS, label_id)) } inst_jmp_m :: #force_inline proc "contextless" (m: Memory) -> Instruction { return inst_m(.JMP, m) } -emit_jmp_m :: #force_inline proc(instructions: ^[dynamic]Instruction, m: Memory) { append(instructions, inst_m(.JMP, m)) } +emit_jmp_m :: #force_inline proc(instructions: ^[dynamic]Instruction, m: Memory) { append_elem(instructions, inst_m(.JMP, m)) } inst_jsr_m :: #force_inline proc "contextless" (m: Memory) -> Instruction { return inst_m(.JSR, m) } -emit_jsr_m :: #force_inline proc(instructions: ^[dynamic]Instruction, m: Memory) { append(instructions, inst_m(.JSR, m)) } +emit_jsr_m :: #force_inline proc(instructions: ^[dynamic]Instruction, m: Memory) { append_elem(instructions, inst_m(.JSR, m)) } inst_rti_none :: #force_inline proc "contextless" () -> Instruction { return inst_none(.RTI) } -emit_rti_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_none(.RTI)) } +emit_rti_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_none(.RTI)) } inst_rts_none :: #force_inline proc "contextless" () -> Instruction { return inst_none(.RTS) } -emit_rts_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_none(.RTS)) } +emit_rts_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_none(.RTS)) } inst_brk_none :: #force_inline proc "contextless" () -> Instruction { return inst_none(.BRK) } -emit_brk_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_none(.BRK)) } +emit_brk_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_none(.BRK)) } inst_clc_none :: #force_inline proc "contextless" () -> Instruction { return inst_none(.CLC) } -emit_clc_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_none(.CLC)) } +emit_clc_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_none(.CLC)) } inst_cld_none :: #force_inline proc "contextless" () -> Instruction { return inst_none(.CLD) } -emit_cld_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_none(.CLD)) } +emit_cld_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_none(.CLD)) } inst_cli_none :: #force_inline proc "contextless" () -> Instruction { return inst_none(.CLI) } -emit_cli_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_none(.CLI)) } +emit_cli_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_none(.CLI)) } inst_clv_none :: #force_inline proc "contextless" () -> Instruction { return inst_none(.CLV) } -emit_clv_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_none(.CLV)) } +emit_clv_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_none(.CLV)) } inst_sec_none :: #force_inline proc "contextless" () -> Instruction { return inst_none(.SEC) } -emit_sec_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_none(.SEC)) } +emit_sec_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_none(.SEC)) } inst_sed_none :: #force_inline proc "contextless" () -> Instruction { return inst_none(.SED) } -emit_sed_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_none(.SED)) } +emit_sed_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_none(.SED)) } inst_sei_none :: #force_inline proc "contextless" () -> Instruction { return inst_none(.SEI) } -emit_sei_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_none(.SEI)) } +emit_sei_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_none(.SEI)) } inst_lda_imm8 :: #force_inline proc "contextless" (imm: i64) -> Instruction { return inst_i(.LDA, imm) } inst_lda_m :: #force_inline proc "contextless" (m: Memory) -> Instruction { return inst_m(.LDA, m) } -emit_lda_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64) { append(instructions, inst_i(.LDA, imm)) } -emit_lda_m :: #force_inline proc(instructions: ^[dynamic]Instruction, m: Memory) { append(instructions, inst_m(.LDA, m)) } +emit_lda_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64) { append_elem(instructions, inst_i(.LDA, imm)) } +emit_lda_m :: #force_inline proc(instructions: ^[dynamic]Instruction, m: Memory) { append_elem(instructions, inst_m(.LDA, m)) } inst_ldx_imm8 :: #force_inline proc "contextless" (imm: i64) -> Instruction { return inst_i(.LDX, imm) } inst_ldx_m :: #force_inline proc "contextless" (m: Memory) -> Instruction { return inst_m(.LDX, m) } -emit_ldx_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64) { append(instructions, inst_i(.LDX, imm)) } -emit_ldx_m :: #force_inline proc(instructions: ^[dynamic]Instruction, m: Memory) { append(instructions, inst_m(.LDX, m)) } +emit_ldx_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64) { append_elem(instructions, inst_i(.LDX, imm)) } +emit_ldx_m :: #force_inline proc(instructions: ^[dynamic]Instruction, m: Memory) { append_elem(instructions, inst_m(.LDX, m)) } inst_ldy_imm8 :: #force_inline proc "contextless" (imm: i64) -> Instruction { return inst_i(.LDY, imm) } inst_ldy_m :: #force_inline proc "contextless" (m: Memory) -> Instruction { return inst_m(.LDY, m) } -emit_ldy_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64) { append(instructions, inst_i(.LDY, imm)) } -emit_ldy_m :: #force_inline proc(instructions: ^[dynamic]Instruction, m: Memory) { append(instructions, inst_m(.LDY, m)) } +emit_ldy_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64) { append_elem(instructions, inst_i(.LDY, imm)) } +emit_ldy_m :: #force_inline proc(instructions: ^[dynamic]Instruction, m: Memory) { append_elem(instructions, inst_m(.LDY, m)) } inst_sta_m :: #force_inline proc "contextless" (m: Memory) -> Instruction { return inst_m(.STA, m) } -emit_sta_m :: #force_inline proc(instructions: ^[dynamic]Instruction, m: Memory) { append(instructions, inst_m(.STA, m)) } +emit_sta_m :: #force_inline proc(instructions: ^[dynamic]Instruction, m: Memory) { append_elem(instructions, inst_m(.STA, m)) } inst_stx_m :: #force_inline proc "contextless" (m: Memory) -> Instruction { return inst_m(.STX, m) } -emit_stx_m :: #force_inline proc(instructions: ^[dynamic]Instruction, m: Memory) { append(instructions, inst_m(.STX, m)) } +emit_stx_m :: #force_inline proc(instructions: ^[dynamic]Instruction, m: Memory) { append_elem(instructions, inst_m(.STX, m)) } inst_sty_m :: #force_inline proc "contextless" (m: Memory) -> Instruction { return inst_m(.STY, m) } -emit_sty_m :: #force_inline proc(instructions: ^[dynamic]Instruction, m: Memory) { append(instructions, inst_m(.STY, m)) } +emit_sty_m :: #force_inline proc(instructions: ^[dynamic]Instruction, m: Memory) { append_elem(instructions, inst_m(.STY, m)) } inst_pha_none :: #force_inline proc "contextless" () -> Instruction { return inst_none(.PHA) } -emit_pha_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_none(.PHA)) } +emit_pha_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_none(.PHA)) } inst_php_none :: #force_inline proc "contextless" () -> Instruction { return inst_none(.PHP) } -emit_php_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_none(.PHP)) } +emit_php_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_none(.PHP)) } inst_pla_none :: #force_inline proc "contextless" () -> Instruction { return inst_none(.PLA) } -emit_pla_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_none(.PLA)) } +emit_pla_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_none(.PLA)) } inst_plp_none :: #force_inline proc "contextless" () -> Instruction { return inst_none(.PLP) } -emit_plp_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_none(.PLP)) } +emit_plp_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_none(.PLP)) } inst_tax_none :: #force_inline proc "contextless" () -> Instruction { return inst_none(.TAX) } -emit_tax_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_none(.TAX)) } +emit_tax_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_none(.TAX)) } inst_tay_none :: #force_inline proc "contextless" () -> Instruction { return inst_none(.TAY) } -emit_tay_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_none(.TAY)) } +emit_tay_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_none(.TAY)) } inst_tsx_none :: #force_inline proc "contextless" () -> Instruction { return inst_none(.TSX) } -emit_tsx_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_none(.TSX)) } +emit_tsx_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_none(.TSX)) } inst_txa_none :: #force_inline proc "contextless" () -> Instruction { return inst_none(.TXA) } -emit_txa_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_none(.TXA)) } +emit_txa_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_none(.TXA)) } inst_txs_none :: #force_inline proc "contextless" () -> Instruction { return inst_none(.TXS) } -emit_txs_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_none(.TXS)) } +emit_txs_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_none(.TXS)) } inst_tya_none :: #force_inline proc "contextless" () -> Instruction { return inst_none(.TYA) } -emit_tya_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_none(.TYA)) } +emit_tya_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_none(.TYA)) } inst_nop_none :: #force_inline proc "contextless" () -> Instruction { return inst_none(.NOP) } -emit_nop_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_none(.NOP)) } +emit_nop_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_none(.NOP)) } inst_lax_m :: #force_inline proc "contextless" (m: Memory) -> Instruction { return inst_m(.LAX, m) } -emit_lax_m :: #force_inline proc(instructions: ^[dynamic]Instruction, m: Memory) { append(instructions, inst_m(.LAX, m)) } +emit_lax_m :: #force_inline proc(instructions: ^[dynamic]Instruction, m: Memory) { append_elem(instructions, inst_m(.LAX, m)) } inst_dcp_m :: #force_inline proc "contextless" (m: Memory) -> Instruction { return inst_m(.DCP, m) } -emit_dcp_m :: #force_inline proc(instructions: ^[dynamic]Instruction, m: Memory) { append(instructions, inst_m(.DCP, m)) } +emit_dcp_m :: #force_inline proc(instructions: ^[dynamic]Instruction, m: Memory) { append_elem(instructions, inst_m(.DCP, m)) } inst_isc_m :: #force_inline proc "contextless" (m: Memory) -> Instruction { return inst_m(.ISC, m) } -emit_isc_m :: #force_inline proc(instructions: ^[dynamic]Instruction, m: Memory) { append(instructions, inst_m(.ISC, m)) } +emit_isc_m :: #force_inline proc(instructions: ^[dynamic]Instruction, m: Memory) { append_elem(instructions, inst_m(.ISC, m)) } inst_rla_m :: #force_inline proc "contextless" (m: Memory) -> Instruction { return inst_m(.RLA, m) } -emit_rla_m :: #force_inline proc(instructions: ^[dynamic]Instruction, m: Memory) { append(instructions, inst_m(.RLA, m)) } +emit_rla_m :: #force_inline proc(instructions: ^[dynamic]Instruction, m: Memory) { append_elem(instructions, inst_m(.RLA, m)) } inst_rra_m :: #force_inline proc "contextless" (m: Memory) -> Instruction { return inst_m(.RRA, m) } -emit_rra_m :: #force_inline proc(instructions: ^[dynamic]Instruction, m: Memory) { append(instructions, inst_m(.RRA, m)) } +emit_rra_m :: #force_inline proc(instructions: ^[dynamic]Instruction, m: Memory) { append_elem(instructions, inst_m(.RRA, m)) } inst_slo_m :: #force_inline proc "contextless" (m: Memory) -> Instruction { return inst_m(.SLO, m) } -emit_slo_m :: #force_inline proc(instructions: ^[dynamic]Instruction, m: Memory) { append(instructions, inst_m(.SLO, m)) } +emit_slo_m :: #force_inline proc(instructions: ^[dynamic]Instruction, m: Memory) { append_elem(instructions, inst_m(.SLO, m)) } inst_sre_m :: #force_inline proc "contextless" (m: Memory) -> Instruction { return inst_m(.SRE, m) } -emit_sre_m :: #force_inline proc(instructions: ^[dynamic]Instruction, m: Memory) { append(instructions, inst_m(.SRE, m)) } +emit_sre_m :: #force_inline proc(instructions: ^[dynamic]Instruction, m: Memory) { append_elem(instructions, inst_m(.SRE, m)) } inst_alr_imm8 :: #force_inline proc "contextless" (imm: i64) -> Instruction { return inst_i(.ALR, imm) } -emit_alr_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64) { append(instructions, inst_i(.ALR, imm)) } +emit_alr_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64) { append_elem(instructions, inst_i(.ALR, imm)) } inst_anc_imm8 :: #force_inline proc "contextless" (imm: i64) -> Instruction { return inst_i(.ANC, imm) } -emit_anc_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64) { append(instructions, inst_i(.ANC, imm)) } +emit_anc_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64) { append_elem(instructions, inst_i(.ANC, imm)) } inst_arr_imm8 :: #force_inline proc "contextless" (imm: i64) -> Instruction { return inst_i(.ARR, imm) } -emit_arr_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64) { append(instructions, inst_i(.ARR, imm)) } +emit_arr_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64) { append_elem(instructions, inst_i(.ARR, imm)) } inst_axs_imm8 :: #force_inline proc "contextless" (imm: i64) -> Instruction { return inst_i(.AXS, imm) } -emit_axs_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64) { append(instructions, inst_i(.AXS, imm)) } +emit_axs_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64) { append_elem(instructions, inst_i(.AXS, imm)) } inst_las_m :: #force_inline proc "contextless" (m: Memory) -> Instruction { return inst_m(.LAS, m) } -emit_las_m :: #force_inline proc(instructions: ^[dynamic]Instruction, m: Memory) { append(instructions, inst_m(.LAS, m)) } +emit_las_m :: #force_inline proc(instructions: ^[dynamic]Instruction, m: Memory) { append_elem(instructions, inst_m(.LAS, m)) } inst_ane_imm8 :: #force_inline proc "contextless" (imm: i64) -> Instruction { return inst_i(.ANE, imm) } -emit_ane_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64) { append(instructions, inst_i(.ANE, imm)) } +emit_ane_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64) { append_elem(instructions, inst_i(.ANE, imm)) } inst_lxa_imm8 :: #force_inline proc "contextless" (imm: i64) -> Instruction { return inst_i(.LXA, imm) } -emit_lxa_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64) { append(instructions, inst_i(.LXA, imm)) } +emit_lxa_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64) { append_elem(instructions, inst_i(.LXA, imm)) } inst_sha_m :: #force_inline proc "contextless" (m: Memory) -> Instruction { return inst_m(.SHA, m) } -emit_sha_m :: #force_inline proc(instructions: ^[dynamic]Instruction, m: Memory) { append(instructions, inst_m(.SHA, m)) } +emit_sha_m :: #force_inline proc(instructions: ^[dynamic]Instruction, m: Memory) { append_elem(instructions, inst_m(.SHA, m)) } inst_shx_m :: #force_inline proc "contextless" (m: Memory) -> Instruction { return inst_m(.SHX, m) } -emit_shx_m :: #force_inline proc(instructions: ^[dynamic]Instruction, m: Memory) { append(instructions, inst_m(.SHX, m)) } +emit_shx_m :: #force_inline proc(instructions: ^[dynamic]Instruction, m: Memory) { append_elem(instructions, inst_m(.SHX, m)) } inst_shy_m :: #force_inline proc "contextless" (m: Memory) -> Instruction { return inst_m(.SHY, m) } -emit_shy_m :: #force_inline proc(instructions: ^[dynamic]Instruction, m: Memory) { append(instructions, inst_m(.SHY, m)) } +emit_shy_m :: #force_inline proc(instructions: ^[dynamic]Instruction, m: Memory) { append_elem(instructions, inst_m(.SHY, m)) } inst_tas_m :: #force_inline proc "contextless" (m: Memory) -> Instruction { return inst_m(.TAS, m) } -emit_tas_m :: #force_inline proc(instructions: ^[dynamic]Instruction, m: Memory) { append(instructions, inst_m(.TAS, m)) } +emit_tas_m :: #force_inline proc(instructions: ^[dynamic]Instruction, m: Memory) { append_elem(instructions, inst_m(.TAS, m)) } inst_jam_none :: #force_inline proc "contextless" () -> Instruction { return inst_none(.JAM) } -emit_jam_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_none(.JAM)) } +emit_jam_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_none(.JAM)) } inst_usbc_imm8 :: #force_inline proc "contextless" (imm: i64) -> Instruction { return inst_i(.USBC, imm) } -emit_usbc_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64) { append(instructions, inst_i(.USBC, imm)) } +emit_usbc_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64) { append_elem(instructions, inst_i(.USBC, imm)) } inst_dop_imm8 :: #force_inline proc "contextless" (imm: i64) -> Instruction { return inst_i(.DOP, imm) } inst_dop_m :: #force_inline proc "contextless" (m: Memory) -> Instruction { return inst_m(.DOP, m) } -emit_dop_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64) { append(instructions, inst_i(.DOP, imm)) } -emit_dop_m :: #force_inline proc(instructions: ^[dynamic]Instruction, m: Memory) { append(instructions, inst_m(.DOP, m)) } +emit_dop_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64) { append_elem(instructions, inst_i(.DOP, imm)) } +emit_dop_m :: #force_inline proc(instructions: ^[dynamic]Instruction, m: Memory) { append_elem(instructions, inst_m(.DOP, m)) } inst_top_m :: #force_inline proc "contextless" (m: Memory) -> Instruction { return inst_m(.TOP, m) } -emit_top_m :: #force_inline proc(instructions: ^[dynamic]Instruction, m: Memory) { append(instructions, inst_m(.TOP, m)) } +emit_top_m :: #force_inline proc(instructions: ^[dynamic]Instruction, m: Memory) { append_elem(instructions, inst_m(.TOP, m)) } inst_bra_rel :: #force_inline proc "contextless" (label_id: u32) -> Instruction { return inst_rel(.BRA, label_id) } -emit_bra_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, label_id: u32) { append(instructions, inst_rel(.BRA, label_id)) } +emit_bra_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, label_id: u32) { append_elem(instructions, inst_rel(.BRA, label_id)) } inst_ina_a :: #force_inline proc "contextless" () -> Instruction { return inst_a(.INA) } -emit_ina_a :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_a(.INA)) } +emit_ina_a :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_a(.INA)) } inst_dea_a :: #force_inline proc "contextless" () -> Instruction { return inst_a(.DEA) } -emit_dea_a :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_a(.DEA)) } +emit_dea_a :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_a(.DEA)) } inst_phx_none :: #force_inline proc "contextless" () -> Instruction { return inst_none(.PHX) } -emit_phx_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_none(.PHX)) } +emit_phx_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_none(.PHX)) } inst_phy_none :: #force_inline proc "contextless" () -> Instruction { return inst_none(.PHY) } -emit_phy_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_none(.PHY)) } +emit_phy_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_none(.PHY)) } inst_plx_none :: #force_inline proc "contextless" () -> Instruction { return inst_none(.PLX) } -emit_plx_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_none(.PLX)) } +emit_plx_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_none(.PLX)) } inst_ply_none :: #force_inline proc "contextless" () -> Instruction { return inst_none(.PLY) } -emit_ply_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_none(.PLY)) } +emit_ply_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_none(.PLY)) } inst_stz_m :: #force_inline proc "contextless" (m: Memory) -> Instruction { return inst_m(.STZ, m) } -emit_stz_m :: #force_inline proc(instructions: ^[dynamic]Instruction, m: Memory) { append(instructions, inst_m(.STZ, m)) } +emit_stz_m :: #force_inline proc(instructions: ^[dynamic]Instruction, m: Memory) { append_elem(instructions, inst_m(.STZ, m)) } inst_trb_m :: #force_inline proc "contextless" (m: Memory) -> Instruction { return inst_m(.TRB, m) } -emit_trb_m :: #force_inline proc(instructions: ^[dynamic]Instruction, m: Memory) { append(instructions, inst_m(.TRB, m)) } +emit_trb_m :: #force_inline proc(instructions: ^[dynamic]Instruction, m: Memory) { append_elem(instructions, inst_m(.TRB, m)) } inst_tsb_m :: #force_inline proc "contextless" (m: Memory) -> Instruction { return inst_m(.TSB, m) } -emit_tsb_m :: #force_inline proc(instructions: ^[dynamic]Instruction, m: Memory) { append(instructions, inst_m(.TSB, m)) } +emit_tsb_m :: #force_inline proc(instructions: ^[dynamic]Instruction, m: Memory) { append_elem(instructions, inst_m(.TSB, m)) } inst_stp_none :: #force_inline proc "contextless" () -> Instruction { return inst_none(.STP) } -emit_stp_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_none(.STP)) } +emit_stp_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_none(.STP)) } inst_wai_none :: #force_inline proc "contextless" () -> Instruction { return inst_none(.WAI) } -emit_wai_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_none(.WAI)) } +emit_wai_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_none(.WAI)) } inst_rmb0_m :: #force_inline proc "contextless" (m: Memory) -> Instruction { return inst_m(.RMB0, m) } -emit_rmb0_m :: #force_inline proc(instructions: ^[dynamic]Instruction, m: Memory) { append(instructions, inst_m(.RMB0, m)) } +emit_rmb0_m :: #force_inline proc(instructions: ^[dynamic]Instruction, m: Memory) { append_elem(instructions, inst_m(.RMB0, m)) } inst_rmb1_m :: #force_inline proc "contextless" (m: Memory) -> Instruction { return inst_m(.RMB1, m) } -emit_rmb1_m :: #force_inline proc(instructions: ^[dynamic]Instruction, m: Memory) { append(instructions, inst_m(.RMB1, m)) } +emit_rmb1_m :: #force_inline proc(instructions: ^[dynamic]Instruction, m: Memory) { append_elem(instructions, inst_m(.RMB1, m)) } inst_rmb2_m :: #force_inline proc "contextless" (m: Memory) -> Instruction { return inst_m(.RMB2, m) } -emit_rmb2_m :: #force_inline proc(instructions: ^[dynamic]Instruction, m: Memory) { append(instructions, inst_m(.RMB2, m)) } +emit_rmb2_m :: #force_inline proc(instructions: ^[dynamic]Instruction, m: Memory) { append_elem(instructions, inst_m(.RMB2, m)) } inst_rmb3_m :: #force_inline proc "contextless" (m: Memory) -> Instruction { return inst_m(.RMB3, m) } -emit_rmb3_m :: #force_inline proc(instructions: ^[dynamic]Instruction, m: Memory) { append(instructions, inst_m(.RMB3, m)) } +emit_rmb3_m :: #force_inline proc(instructions: ^[dynamic]Instruction, m: Memory) { append_elem(instructions, inst_m(.RMB3, m)) } inst_rmb4_m :: #force_inline proc "contextless" (m: Memory) -> Instruction { return inst_m(.RMB4, m) } -emit_rmb4_m :: #force_inline proc(instructions: ^[dynamic]Instruction, m: Memory) { append(instructions, inst_m(.RMB4, m)) } +emit_rmb4_m :: #force_inline proc(instructions: ^[dynamic]Instruction, m: Memory) { append_elem(instructions, inst_m(.RMB4, m)) } inst_rmb5_m :: #force_inline proc "contextless" (m: Memory) -> Instruction { return inst_m(.RMB5, m) } -emit_rmb5_m :: #force_inline proc(instructions: ^[dynamic]Instruction, m: Memory) { append(instructions, inst_m(.RMB5, m)) } +emit_rmb5_m :: #force_inline proc(instructions: ^[dynamic]Instruction, m: Memory) { append_elem(instructions, inst_m(.RMB5, m)) } inst_rmb6_m :: #force_inline proc "contextless" (m: Memory) -> Instruction { return inst_m(.RMB6, m) } -emit_rmb6_m :: #force_inline proc(instructions: ^[dynamic]Instruction, m: Memory) { append(instructions, inst_m(.RMB6, m)) } +emit_rmb6_m :: #force_inline proc(instructions: ^[dynamic]Instruction, m: Memory) { append_elem(instructions, inst_m(.RMB6, m)) } inst_rmb7_m :: #force_inline proc "contextless" (m: Memory) -> Instruction { return inst_m(.RMB7, m) } -emit_rmb7_m :: #force_inline proc(instructions: ^[dynamic]Instruction, m: Memory) { append(instructions, inst_m(.RMB7, m)) } +emit_rmb7_m :: #force_inline proc(instructions: ^[dynamic]Instruction, m: Memory) { append_elem(instructions, inst_m(.RMB7, m)) } inst_smb0_m :: #force_inline proc "contextless" (m: Memory) -> Instruction { return inst_m(.SMB0, m) } -emit_smb0_m :: #force_inline proc(instructions: ^[dynamic]Instruction, m: Memory) { append(instructions, inst_m(.SMB0, m)) } +emit_smb0_m :: #force_inline proc(instructions: ^[dynamic]Instruction, m: Memory) { append_elem(instructions, inst_m(.SMB0, m)) } inst_smb1_m :: #force_inline proc "contextless" (m: Memory) -> Instruction { return inst_m(.SMB1, m) } -emit_smb1_m :: #force_inline proc(instructions: ^[dynamic]Instruction, m: Memory) { append(instructions, inst_m(.SMB1, m)) } +emit_smb1_m :: #force_inline proc(instructions: ^[dynamic]Instruction, m: Memory) { append_elem(instructions, inst_m(.SMB1, m)) } inst_smb2_m :: #force_inline proc "contextless" (m: Memory) -> Instruction { return inst_m(.SMB2, m) } -emit_smb2_m :: #force_inline proc(instructions: ^[dynamic]Instruction, m: Memory) { append(instructions, inst_m(.SMB2, m)) } +emit_smb2_m :: #force_inline proc(instructions: ^[dynamic]Instruction, m: Memory) { append_elem(instructions, inst_m(.SMB2, m)) } inst_smb3_m :: #force_inline proc "contextless" (m: Memory) -> Instruction { return inst_m(.SMB3, m) } -emit_smb3_m :: #force_inline proc(instructions: ^[dynamic]Instruction, m: Memory) { append(instructions, inst_m(.SMB3, m)) } +emit_smb3_m :: #force_inline proc(instructions: ^[dynamic]Instruction, m: Memory) { append_elem(instructions, inst_m(.SMB3, m)) } inst_smb4_m :: #force_inline proc "contextless" (m: Memory) -> Instruction { return inst_m(.SMB4, m) } -emit_smb4_m :: #force_inline proc(instructions: ^[dynamic]Instruction, m: Memory) { append(instructions, inst_m(.SMB4, m)) } +emit_smb4_m :: #force_inline proc(instructions: ^[dynamic]Instruction, m: Memory) { append_elem(instructions, inst_m(.SMB4, m)) } inst_smb5_m :: #force_inline proc "contextless" (m: Memory) -> Instruction { return inst_m(.SMB5, m) } -emit_smb5_m :: #force_inline proc(instructions: ^[dynamic]Instruction, m: Memory) { append(instructions, inst_m(.SMB5, m)) } +emit_smb5_m :: #force_inline proc(instructions: ^[dynamic]Instruction, m: Memory) { append_elem(instructions, inst_m(.SMB5, m)) } inst_smb6_m :: #force_inline proc "contextless" (m: Memory) -> Instruction { return inst_m(.SMB6, m) } -emit_smb6_m :: #force_inline proc(instructions: ^[dynamic]Instruction, m: Memory) { append(instructions, inst_m(.SMB6, m)) } +emit_smb6_m :: #force_inline proc(instructions: ^[dynamic]Instruction, m: Memory) { append_elem(instructions, inst_m(.SMB6, m)) } inst_smb7_m :: #force_inline proc "contextless" (m: Memory) -> Instruction { return inst_m(.SMB7, m) } -emit_smb7_m :: #force_inline proc(instructions: ^[dynamic]Instruction, m: Memory) { append(instructions, inst_m(.SMB7, m)) } +emit_smb7_m :: #force_inline proc(instructions: ^[dynamic]Instruction, m: Memory) { append_elem(instructions, inst_m(.SMB7, m)) } inst_bbr0_zp_rel :: #force_inline proc "contextless" (zp: u8, label_id: u32) -> Instruction { return inst_zp_rel(.BBR0, zp, label_id) } -emit_bbr0_zp_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, zp: u8, label_id: u32) { append(instructions, inst_zp_rel(.BBR0, zp, label_id)) } +emit_bbr0_zp_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, zp: u8, label_id: u32) { append_elem(instructions, inst_zp_rel(.BBR0, zp, label_id)) } inst_bbr1_zp_rel :: #force_inline proc "contextless" (zp: u8, label_id: u32) -> Instruction { return inst_zp_rel(.BBR1, zp, label_id) } -emit_bbr1_zp_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, zp: u8, label_id: u32) { append(instructions, inst_zp_rel(.BBR1, zp, label_id)) } +emit_bbr1_zp_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, zp: u8, label_id: u32) { append_elem(instructions, inst_zp_rel(.BBR1, zp, label_id)) } inst_bbr2_zp_rel :: #force_inline proc "contextless" (zp: u8, label_id: u32) -> Instruction { return inst_zp_rel(.BBR2, zp, label_id) } -emit_bbr2_zp_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, zp: u8, label_id: u32) { append(instructions, inst_zp_rel(.BBR2, zp, label_id)) } +emit_bbr2_zp_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, zp: u8, label_id: u32) { append_elem(instructions, inst_zp_rel(.BBR2, zp, label_id)) } inst_bbr3_zp_rel :: #force_inline proc "contextless" (zp: u8, label_id: u32) -> Instruction { return inst_zp_rel(.BBR3, zp, label_id) } -emit_bbr3_zp_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, zp: u8, label_id: u32) { append(instructions, inst_zp_rel(.BBR3, zp, label_id)) } +emit_bbr3_zp_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, zp: u8, label_id: u32) { append_elem(instructions, inst_zp_rel(.BBR3, zp, label_id)) } inst_bbr4_zp_rel :: #force_inline proc "contextless" (zp: u8, label_id: u32) -> Instruction { return inst_zp_rel(.BBR4, zp, label_id) } -emit_bbr4_zp_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, zp: u8, label_id: u32) { append(instructions, inst_zp_rel(.BBR4, zp, label_id)) } +emit_bbr4_zp_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, zp: u8, label_id: u32) { append_elem(instructions, inst_zp_rel(.BBR4, zp, label_id)) } inst_bbr5_zp_rel :: #force_inline proc "contextless" (zp: u8, label_id: u32) -> Instruction { return inst_zp_rel(.BBR5, zp, label_id) } -emit_bbr5_zp_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, zp: u8, label_id: u32) { append(instructions, inst_zp_rel(.BBR5, zp, label_id)) } +emit_bbr5_zp_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, zp: u8, label_id: u32) { append_elem(instructions, inst_zp_rel(.BBR5, zp, label_id)) } inst_bbr6_zp_rel :: #force_inline proc "contextless" (zp: u8, label_id: u32) -> Instruction { return inst_zp_rel(.BBR6, zp, label_id) } -emit_bbr6_zp_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, zp: u8, label_id: u32) { append(instructions, inst_zp_rel(.BBR6, zp, label_id)) } +emit_bbr6_zp_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, zp: u8, label_id: u32) { append_elem(instructions, inst_zp_rel(.BBR6, zp, label_id)) } inst_bbr7_zp_rel :: #force_inline proc "contextless" (zp: u8, label_id: u32) -> Instruction { return inst_zp_rel(.BBR7, zp, label_id) } -emit_bbr7_zp_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, zp: u8, label_id: u32) { append(instructions, inst_zp_rel(.BBR7, zp, label_id)) } +emit_bbr7_zp_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, zp: u8, label_id: u32) { append_elem(instructions, inst_zp_rel(.BBR7, zp, label_id)) } inst_bbs0_zp_rel :: #force_inline proc "contextless" (zp: u8, label_id: u32) -> Instruction { return inst_zp_rel(.BBS0, zp, label_id) } -emit_bbs0_zp_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, zp: u8, label_id: u32) { append(instructions, inst_zp_rel(.BBS0, zp, label_id)) } +emit_bbs0_zp_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, zp: u8, label_id: u32) { append_elem(instructions, inst_zp_rel(.BBS0, zp, label_id)) } inst_bbs1_zp_rel :: #force_inline proc "contextless" (zp: u8, label_id: u32) -> Instruction { return inst_zp_rel(.BBS1, zp, label_id) } -emit_bbs1_zp_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, zp: u8, label_id: u32) { append(instructions, inst_zp_rel(.BBS1, zp, label_id)) } +emit_bbs1_zp_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, zp: u8, label_id: u32) { append_elem(instructions, inst_zp_rel(.BBS1, zp, label_id)) } inst_bbs2_zp_rel :: #force_inline proc "contextless" (zp: u8, label_id: u32) -> Instruction { return inst_zp_rel(.BBS2, zp, label_id) } -emit_bbs2_zp_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, zp: u8, label_id: u32) { append(instructions, inst_zp_rel(.BBS2, zp, label_id)) } +emit_bbs2_zp_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, zp: u8, label_id: u32) { append_elem(instructions, inst_zp_rel(.BBS2, zp, label_id)) } inst_bbs3_zp_rel :: #force_inline proc "contextless" (zp: u8, label_id: u32) -> Instruction { return inst_zp_rel(.BBS3, zp, label_id) } -emit_bbs3_zp_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, zp: u8, label_id: u32) { append(instructions, inst_zp_rel(.BBS3, zp, label_id)) } +emit_bbs3_zp_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, zp: u8, label_id: u32) { append_elem(instructions, inst_zp_rel(.BBS3, zp, label_id)) } inst_bbs4_zp_rel :: #force_inline proc "contextless" (zp: u8, label_id: u32) -> Instruction { return inst_zp_rel(.BBS4, zp, label_id) } -emit_bbs4_zp_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, zp: u8, label_id: u32) { append(instructions, inst_zp_rel(.BBS4, zp, label_id)) } +emit_bbs4_zp_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, zp: u8, label_id: u32) { append_elem(instructions, inst_zp_rel(.BBS4, zp, label_id)) } inst_bbs5_zp_rel :: #force_inline proc "contextless" (zp: u8, label_id: u32) -> Instruction { return inst_zp_rel(.BBS5, zp, label_id) } -emit_bbs5_zp_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, zp: u8, label_id: u32) { append(instructions, inst_zp_rel(.BBS5, zp, label_id)) } +emit_bbs5_zp_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, zp: u8, label_id: u32) { append_elem(instructions, inst_zp_rel(.BBS5, zp, label_id)) } inst_bbs6_zp_rel :: #force_inline proc "contextless" (zp: u8, label_id: u32) -> Instruction { return inst_zp_rel(.BBS6, zp, label_id) } -emit_bbs6_zp_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, zp: u8, label_id: u32) { append(instructions, inst_zp_rel(.BBS6, zp, label_id)) } +emit_bbs6_zp_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, zp: u8, label_id: u32) { append_elem(instructions, inst_zp_rel(.BBS6, zp, label_id)) } inst_bbs7_zp_rel :: #force_inline proc "contextless" (zp: u8, label_id: u32) -> Instruction { return inst_zp_rel(.BBS7, zp, label_id) } -emit_bbs7_zp_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, zp: u8, label_id: u32) { append(instructions, inst_zp_rel(.BBS7, zp, label_id)) } +emit_bbs7_zp_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, zp: u8, label_id: u32) { append_elem(instructions, inst_zp_rel(.BBS7, zp, label_id)) } inst_sxy_none :: #force_inline proc "contextless" () -> Instruction { return inst_none(.SXY) } -emit_sxy_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_none(.SXY)) } +emit_sxy_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_none(.SXY)) } inst_sax_none :: #force_inline proc "contextless" () -> Instruction { return inst_none(.SAX) } inst_sax_m :: #force_inline proc "contextless" (m: Memory) -> Instruction { return inst_m(.SAX, m) } -emit_sax_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_none(.SAX)) } -emit_sax_m :: #force_inline proc(instructions: ^[dynamic]Instruction, m: Memory) { append(instructions, inst_m(.SAX, m)) } +emit_sax_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_none(.SAX)) } +emit_sax_m :: #force_inline proc(instructions: ^[dynamic]Instruction, m: Memory) { append_elem(instructions, inst_m(.SAX, m)) } inst_say_none :: #force_inline proc "contextless" () -> Instruction { return inst_none(.SAY) } -emit_say_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_none(.SAY)) } +emit_say_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_none(.SAY)) } inst_cla_none :: #force_inline proc "contextless" () -> Instruction { return inst_none(.CLA) } -emit_cla_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_none(.CLA)) } +emit_cla_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_none(.CLA)) } inst_clx_none :: #force_inline proc "contextless" () -> Instruction { return inst_none(.CLX) } -emit_clx_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_none(.CLX)) } +emit_clx_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_none(.CLX)) } inst_cly_none :: #force_inline proc "contextless" () -> Instruction { return inst_none(.CLY) } -emit_cly_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_none(.CLY)) } +emit_cly_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_none(.CLY)) } inst_csh_none :: #force_inline proc "contextless" () -> Instruction { return inst_none(.CSH) } -emit_csh_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_none(.CSH)) } +emit_csh_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_none(.CSH)) } inst_csl_none :: #force_inline proc "contextless" () -> Instruction { return inst_none(.CSL) } -emit_csl_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_none(.CSL)) } +emit_csl_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_none(.CSL)) } inst_set_none :: #force_inline proc "contextless" () -> Instruction { return inst_none(.SET) } -emit_set_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_none(.SET)) } +emit_set_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_none(.SET)) } inst_st0_imm8 :: #force_inline proc "contextless" (imm: i64) -> Instruction { return inst_i(.ST0, imm) } -emit_st0_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64) { append(instructions, inst_i(.ST0, imm)) } +emit_st0_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64) { append_elem(instructions, inst_i(.ST0, imm)) } inst_st1_imm8 :: #force_inline proc "contextless" (imm: i64) -> Instruction { return inst_i(.ST1, imm) } -emit_st1_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64) { append(instructions, inst_i(.ST1, imm)) } +emit_st1_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64) { append_elem(instructions, inst_i(.ST1, imm)) } inst_st2_imm8 :: #force_inline proc "contextless" (imm: i64) -> Instruction { return inst_i(.ST2, imm) } -emit_st2_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64) { append(instructions, inst_i(.ST2, imm)) } +emit_st2_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64) { append_elem(instructions, inst_i(.ST2, imm)) } inst_tam_imm8 :: #force_inline proc "contextless" (imm: i64) -> Instruction { return inst_i(.TAM, imm) } -emit_tam_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64) { append(instructions, inst_i(.TAM, imm)) } +emit_tam_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64) { append_elem(instructions, inst_i(.TAM, imm)) } inst_tma_imm8 :: #force_inline proc "contextless" (imm: i64) -> Instruction { return inst_i(.TMA, imm) } -emit_tma_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64) { append(instructions, inst_i(.TMA, imm)) } +emit_tma_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64) { append_elem(instructions, inst_i(.TMA, imm)) } inst_tst_tst :: #force_inline proc "contextless" (imm: i64, m: Memory) -> Instruction { return Instruction{mnemonic = .TST, operand_count = 2, length = 0, ops = {op_imm8(imm), op_mem(m), {}}} } -emit_tst_tst :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, m: Memory) { append(instructions, Instruction{mnemonic = .TST, operand_count = 2, length = 0, ops = {op_imm8(imm), op_mem(m), {}}}) } +emit_tst_tst :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, m: Memory) { append_elem(instructions, Instruction{mnemonic = .TST, operand_count = 2, length = 0, ops = {op_imm8(imm), op_mem(m), {}}}) } inst_bsr_rel :: #force_inline proc "contextless" (label_id: u32) -> Instruction { return inst_rel(.BSR, label_id) } -emit_bsr_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, label_id: u32) { append(instructions, inst_rel(.BSR, label_id)) } +emit_bsr_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, label_id: u32) { append_elem(instructions, inst_rel(.BSR, label_id)) } inst_tii_block :: #force_inline proc "contextless" (src, dst, length_val: u16) -> Instruction { return inst_block(.TII, src, dst, length_val) } -emit_tii_block :: #force_inline proc(instructions: ^[dynamic]Instruction, src, dst, length_val: u16) { append(instructions, inst_block(.TII, src, dst, length_val)) } +emit_tii_block :: #force_inline proc(instructions: ^[dynamic]Instruction, src, dst, length_val: u16) { append_elem(instructions, inst_block(.TII, src, dst, length_val)) } inst_tdd_block :: #force_inline proc "contextless" (src, dst, length_val: u16) -> Instruction { return inst_block(.TDD, src, dst, length_val) } -emit_tdd_block :: #force_inline proc(instructions: ^[dynamic]Instruction, src, dst, length_val: u16) { append(instructions, inst_block(.TDD, src, dst, length_val)) } +emit_tdd_block :: #force_inline proc(instructions: ^[dynamic]Instruction, src, dst, length_val: u16) { append_elem(instructions, inst_block(.TDD, src, dst, length_val)) } inst_tin_block :: #force_inline proc "contextless" (src, dst, length_val: u16) -> Instruction { return inst_block(.TIN, src, dst, length_val) } -emit_tin_block :: #force_inline proc(instructions: ^[dynamic]Instruction, src, dst, length_val: u16) { append(instructions, inst_block(.TIN, src, dst, length_val)) } +emit_tin_block :: #force_inline proc(instructions: ^[dynamic]Instruction, src, dst, length_val: u16) { append_elem(instructions, inst_block(.TIN, src, dst, length_val)) } inst_tia_block :: #force_inline proc "contextless" (src, dst, length_val: u16) -> Instruction { return inst_block(.TIA, src, dst, length_val) } -emit_tia_block :: #force_inline proc(instructions: ^[dynamic]Instruction, src, dst, length_val: u16) { append(instructions, inst_block(.TIA, src, dst, length_val)) } +emit_tia_block :: #force_inline proc(instructions: ^[dynamic]Instruction, src, dst, length_val: u16) { append_elem(instructions, inst_block(.TIA, src, dst, length_val)) } inst_tai_block :: #force_inline proc "contextless" (src, dst, length_val: u16) -> Instruction { return inst_block(.TAI, src, dst, length_val) } -emit_tai_block :: #force_inline proc(instructions: ^[dynamic]Instruction, src, dst, length_val: u16) { append(instructions, inst_block(.TAI, src, dst, length_val)) } +emit_tai_block :: #force_inline proc(instructions: ^[dynamic]Instruction, src, dst, length_val: u16) { append_elem(instructions, inst_block(.TAI, src, dst, length_val)) } // ============================================================================= // Overload Groups diff --git a/core/rexcode/isa/mos6502/tools/gen_mnemonic_builders.odin b/core/rexcode/isa/mos6502/tools/gen_mnemonic_builders.odin index b8f28f784..335fc9509 100644 --- a/core/rexcode/isa/mos6502/tools/gen_mnemonic_builders.odin +++ b/core/rexcode/isa/mos6502/tools/gen_mnemonic_builders.odin @@ -297,7 +297,7 @@ shape_inst_body :: proc(sb: ^strings.Builder, e: Proc_Entry) { // emit_ body: append the corresponding inst_ result. shape_emit_body :: proc(sb: ^strings.Builder, e: Proc_Entry) { - strings.write_string(sb, "append(instructions, ") + strings.write_string(sb, "append_elem(instructions, ") shape_inst_body(sb, e) strings.write_string(sb, ")") } diff --git a/core/rexcode/isa/mos65816/mnemonic_builders.odin b/core/rexcode/isa/mos65816/mnemonic_builders.odin index 155cc0e3b..6c224bc17 100644 --- a/core/rexcode/isa/mos65816/mnemonic_builders.odin +++ b/core/rexcode/isa/mos65816/mnemonic_builders.odin @@ -33,247 +33,247 @@ package rexcode_mos65816 inst_adc_mem :: #force_inline proc "contextless" (m: Memory) -> Instruction { return inst_m(.ADC, m) } inst_adc_imm8 :: #force_inline proc "contextless" (imm: i8) -> Instruction { return inst_i8(.ADC, i64(imm)) } inst_adc_imm16 :: #force_inline proc "contextless" (imm: i16) -> Instruction { return inst_i16(.ADC, i64(imm)) } -emit_adc_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, m: Memory) { append(instructions, inst_adc_mem(m)) } -emit_adc_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i8) { append(instructions, inst_adc_imm8(imm)) } -emit_adc_imm16 :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i16) { append(instructions, inst_adc_imm16(imm)) } +emit_adc_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, m: Memory) { append_elem(instructions, inst_adc_mem(m)) } +emit_adc_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i8) { append_elem(instructions, inst_adc_imm8(imm)) } +emit_adc_imm16 :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i16) { append_elem(instructions, inst_adc_imm16(imm)) } inst_and_mem :: #force_inline proc "contextless" (m: Memory) -> Instruction { return inst_m(.AND, m) } inst_and_imm8 :: #force_inline proc "contextless" (imm: i8) -> Instruction { return inst_i8(.AND, i64(imm)) } inst_and_imm16 :: #force_inline proc "contextless" (imm: i16) -> Instruction { return inst_i16(.AND, i64(imm)) } -emit_and_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, m: Memory) { append(instructions, inst_and_mem(m)) } -emit_and_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i8) { append(instructions, inst_and_imm8(imm)) } -emit_and_imm16 :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i16) { append(instructions, inst_and_imm16(imm)) } +emit_and_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, m: Memory) { append_elem(instructions, inst_and_mem(m)) } +emit_and_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i8) { append_elem(instructions, inst_and_imm8(imm)) } +emit_and_imm16 :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i16) { append_elem(instructions, inst_and_imm16(imm)) } inst_asl_a :: #force_inline proc "contextless" () -> Instruction { return inst_a(.ASL) } inst_asl_mem :: #force_inline proc "contextless" (m: Memory) -> Instruction { return inst_m(.ASL, m) } -emit_asl_a :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_asl_a()) } -emit_asl_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, m: Memory) { append(instructions, inst_asl_mem(m)) } +emit_asl_a :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_asl_a()) } +emit_asl_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, m: Memory) { append_elem(instructions, inst_asl_mem(m)) } inst_bit_mem :: #force_inline proc "contextless" (m: Memory) -> Instruction { return inst_m(.BIT, m) } inst_bit_imm8 :: #force_inline proc "contextless" (imm: i8) -> Instruction { return inst_i8(.BIT, i64(imm)) } inst_bit_imm16 :: #force_inline proc "contextless" (imm: i16) -> Instruction { return inst_i16(.BIT, i64(imm)) } -emit_bit_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, m: Memory) { append(instructions, inst_bit_mem(m)) } -emit_bit_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i8) { append(instructions, inst_bit_imm8(imm)) } -emit_bit_imm16 :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i16) { append(instructions, inst_bit_imm16(imm)) } +emit_bit_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, m: Memory) { append_elem(instructions, inst_bit_mem(m)) } +emit_bit_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i8) { append_elem(instructions, inst_bit_imm8(imm)) } +emit_bit_imm16 :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i16) { append_elem(instructions, inst_bit_imm16(imm)) } inst_cmp_mem :: #force_inline proc "contextless" (m: Memory) -> Instruction { return inst_m(.CMP, m) } inst_cmp_imm8 :: #force_inline proc "contextless" (imm: i8) -> Instruction { return inst_i8(.CMP, i64(imm)) } inst_cmp_imm16 :: #force_inline proc "contextless" (imm: i16) -> Instruction { return inst_i16(.CMP, i64(imm)) } -emit_cmp_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, m: Memory) { append(instructions, inst_cmp_mem(m)) } -emit_cmp_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i8) { append(instructions, inst_cmp_imm8(imm)) } -emit_cmp_imm16 :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i16) { append(instructions, inst_cmp_imm16(imm)) } +emit_cmp_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, m: Memory) { append_elem(instructions, inst_cmp_mem(m)) } +emit_cmp_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i8) { append_elem(instructions, inst_cmp_imm8(imm)) } +emit_cmp_imm16 :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i16) { append_elem(instructions, inst_cmp_imm16(imm)) } inst_cpx_imm8 :: #force_inline proc "contextless" (imm: i8) -> Instruction { return inst_i8(.CPX, i64(imm)) } inst_cpx_imm16 :: #force_inline proc "contextless" (imm: i16) -> Instruction { return inst_i16(.CPX, i64(imm)) } inst_cpx_mem :: #force_inline proc "contextless" (m: Memory) -> Instruction { return inst_m(.CPX, m) } -emit_cpx_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i8) { append(instructions, inst_cpx_imm8(imm)) } -emit_cpx_imm16 :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i16) { append(instructions, inst_cpx_imm16(imm)) } -emit_cpx_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, m: Memory) { append(instructions, inst_cpx_mem(m)) } +emit_cpx_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i8) { append_elem(instructions, inst_cpx_imm8(imm)) } +emit_cpx_imm16 :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i16) { append_elem(instructions, inst_cpx_imm16(imm)) } +emit_cpx_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, m: Memory) { append_elem(instructions, inst_cpx_mem(m)) } inst_cpy_imm8 :: #force_inline proc "contextless" (imm: i8) -> Instruction { return inst_i8(.CPY, i64(imm)) } inst_cpy_imm16 :: #force_inline proc "contextless" (imm: i16) -> Instruction { return inst_i16(.CPY, i64(imm)) } inst_cpy_mem :: #force_inline proc "contextless" (m: Memory) -> Instruction { return inst_m(.CPY, m) } -emit_cpy_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i8) { append(instructions, inst_cpy_imm8(imm)) } -emit_cpy_imm16 :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i16) { append(instructions, inst_cpy_imm16(imm)) } -emit_cpy_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, m: Memory) { append(instructions, inst_cpy_mem(m)) } +emit_cpy_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i8) { append_elem(instructions, inst_cpy_imm8(imm)) } +emit_cpy_imm16 :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i16) { append_elem(instructions, inst_cpy_imm16(imm)) } +emit_cpy_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, m: Memory) { append_elem(instructions, inst_cpy_mem(m)) } inst_dec_a :: #force_inline proc "contextless" () -> Instruction { return inst_a(.DEC) } inst_dec_mem :: #force_inline proc "contextless" (m: Memory) -> Instruction { return inst_m(.DEC, m) } -emit_dec_a :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_dec_a()) } -emit_dec_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, m: Memory) { append(instructions, inst_dec_mem(m)) } +emit_dec_a :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_dec_a()) } +emit_dec_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, m: Memory) { append_elem(instructions, inst_dec_mem(m)) } inst_dex_none :: #force_inline proc "contextless" () -> Instruction { return inst_none(.DEX) } -emit_dex_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_dex_none()) } +emit_dex_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_dex_none()) } inst_dey_none :: #force_inline proc "contextless" () -> Instruction { return inst_none(.DEY) } -emit_dey_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_dey_none()) } +emit_dey_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_dey_none()) } inst_eor_mem :: #force_inline proc "contextless" (m: Memory) -> Instruction { return inst_m(.EOR, m) } inst_eor_imm8 :: #force_inline proc "contextless" (imm: i8) -> Instruction { return inst_i8(.EOR, i64(imm)) } inst_eor_imm16 :: #force_inline proc "contextless" (imm: i16) -> Instruction { return inst_i16(.EOR, i64(imm)) } -emit_eor_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, m: Memory) { append(instructions, inst_eor_mem(m)) } -emit_eor_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i8) { append(instructions, inst_eor_imm8(imm)) } -emit_eor_imm16 :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i16) { append(instructions, inst_eor_imm16(imm)) } +emit_eor_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, m: Memory) { append_elem(instructions, inst_eor_mem(m)) } +emit_eor_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i8) { append_elem(instructions, inst_eor_imm8(imm)) } +emit_eor_imm16 :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i16) { append_elem(instructions, inst_eor_imm16(imm)) } inst_inc_a :: #force_inline proc "contextless" () -> Instruction { return inst_a(.INC) } inst_inc_mem :: #force_inline proc "contextless" (m: Memory) -> Instruction { return inst_m(.INC, m) } -emit_inc_a :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_inc_a()) } -emit_inc_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, m: Memory) { append(instructions, inst_inc_mem(m)) } +emit_inc_a :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_inc_a()) } +emit_inc_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, m: Memory) { append_elem(instructions, inst_inc_mem(m)) } inst_inx_none :: #force_inline proc "contextless" () -> Instruction { return inst_none(.INX) } -emit_inx_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_inx_none()) } +emit_inx_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_inx_none()) } inst_iny_none :: #force_inline proc "contextless" () -> Instruction { return inst_none(.INY) } -emit_iny_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_iny_none()) } +emit_iny_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_iny_none()) } inst_lsr_a :: #force_inline proc "contextless" () -> Instruction { return inst_a(.LSR) } inst_lsr_mem :: #force_inline proc "contextless" (m: Memory) -> Instruction { return inst_m(.LSR, m) } -emit_lsr_a :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_lsr_a()) } -emit_lsr_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, m: Memory) { append(instructions, inst_lsr_mem(m)) } +emit_lsr_a :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_lsr_a()) } +emit_lsr_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, m: Memory) { append_elem(instructions, inst_lsr_mem(m)) } inst_ora_mem :: #force_inline proc "contextless" (m: Memory) -> Instruction { return inst_m(.ORA, m) } inst_ora_imm8 :: #force_inline proc "contextless" (imm: i8) -> Instruction { return inst_i8(.ORA, i64(imm)) } inst_ora_imm16 :: #force_inline proc "contextless" (imm: i16) -> Instruction { return inst_i16(.ORA, i64(imm)) } -emit_ora_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, m: Memory) { append(instructions, inst_ora_mem(m)) } -emit_ora_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i8) { append(instructions, inst_ora_imm8(imm)) } -emit_ora_imm16 :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i16) { append(instructions, inst_ora_imm16(imm)) } +emit_ora_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, m: Memory) { append_elem(instructions, inst_ora_mem(m)) } +emit_ora_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i8) { append_elem(instructions, inst_ora_imm8(imm)) } +emit_ora_imm16 :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i16) { append_elem(instructions, inst_ora_imm16(imm)) } inst_rol_a :: #force_inline proc "contextless" () -> Instruction { return inst_a(.ROL) } inst_rol_mem :: #force_inline proc "contextless" (m: Memory) -> Instruction { return inst_m(.ROL, m) } -emit_rol_a :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_rol_a()) } -emit_rol_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, m: Memory) { append(instructions, inst_rol_mem(m)) } +emit_rol_a :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_rol_a()) } +emit_rol_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, m: Memory) { append_elem(instructions, inst_rol_mem(m)) } inst_ror_a :: #force_inline proc "contextless" () -> Instruction { return inst_a(.ROR) } inst_ror_mem :: #force_inline proc "contextless" (m: Memory) -> Instruction { return inst_m(.ROR, m) } -emit_ror_a :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_ror_a()) } -emit_ror_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, m: Memory) { append(instructions, inst_ror_mem(m)) } +emit_ror_a :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_ror_a()) } +emit_ror_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, m: Memory) { append_elem(instructions, inst_ror_mem(m)) } inst_sbc_mem :: #force_inline proc "contextless" (m: Memory) -> Instruction { return inst_m(.SBC, m) } inst_sbc_imm8 :: #force_inline proc "contextless" (imm: i8) -> Instruction { return inst_i8(.SBC, i64(imm)) } inst_sbc_imm16 :: #force_inline proc "contextless" (imm: i16) -> Instruction { return inst_i16(.SBC, i64(imm)) } -emit_sbc_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, m: Memory) { append(instructions, inst_sbc_mem(m)) } -emit_sbc_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i8) { append(instructions, inst_sbc_imm8(imm)) } -emit_sbc_imm16 :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i16) { append(instructions, inst_sbc_imm16(imm)) } +emit_sbc_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, m: Memory) { append_elem(instructions, inst_sbc_mem(m)) } +emit_sbc_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i8) { append_elem(instructions, inst_sbc_imm8(imm)) } +emit_sbc_imm16 :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i16) { append_elem(instructions, inst_sbc_imm16(imm)) } inst_lda_mem :: #force_inline proc "contextless" (m: Memory) -> Instruction { return inst_m(.LDA, m) } inst_lda_imm8 :: #force_inline proc "contextless" (imm: i8) -> Instruction { return inst_i8(.LDA, i64(imm)) } inst_lda_imm16 :: #force_inline proc "contextless" (imm: i16) -> Instruction { return inst_i16(.LDA, i64(imm)) } -emit_lda_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, m: Memory) { append(instructions, inst_lda_mem(m)) } -emit_lda_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i8) { append(instructions, inst_lda_imm8(imm)) } -emit_lda_imm16 :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i16) { append(instructions, inst_lda_imm16(imm)) } +emit_lda_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, m: Memory) { append_elem(instructions, inst_lda_mem(m)) } +emit_lda_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i8) { append_elem(instructions, inst_lda_imm8(imm)) } +emit_lda_imm16 :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i16) { append_elem(instructions, inst_lda_imm16(imm)) } inst_ldx_imm8 :: #force_inline proc "contextless" (imm: i8) -> Instruction { return inst_i8(.LDX, i64(imm)) } inst_ldx_imm16 :: #force_inline proc "contextless" (imm: i16) -> Instruction { return inst_i16(.LDX, i64(imm)) } inst_ldx_mem :: #force_inline proc "contextless" (m: Memory) -> Instruction { return inst_m(.LDX, m) } -emit_ldx_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i8) { append(instructions, inst_ldx_imm8(imm)) } -emit_ldx_imm16 :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i16) { append(instructions, inst_ldx_imm16(imm)) } -emit_ldx_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, m: Memory) { append(instructions, inst_ldx_mem(m)) } +emit_ldx_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i8) { append_elem(instructions, inst_ldx_imm8(imm)) } +emit_ldx_imm16 :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i16) { append_elem(instructions, inst_ldx_imm16(imm)) } +emit_ldx_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, m: Memory) { append_elem(instructions, inst_ldx_mem(m)) } inst_ldy_imm8 :: #force_inline proc "contextless" (imm: i8) -> Instruction { return inst_i8(.LDY, i64(imm)) } inst_ldy_imm16 :: #force_inline proc "contextless" (imm: i16) -> Instruction { return inst_i16(.LDY, i64(imm)) } inst_ldy_mem :: #force_inline proc "contextless" (m: Memory) -> Instruction { return inst_m(.LDY, m) } -emit_ldy_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i8) { append(instructions, inst_ldy_imm8(imm)) } -emit_ldy_imm16 :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i16) { append(instructions, inst_ldy_imm16(imm)) } -emit_ldy_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, m: Memory) { append(instructions, inst_ldy_mem(m)) } +emit_ldy_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i8) { append_elem(instructions, inst_ldy_imm8(imm)) } +emit_ldy_imm16 :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i16) { append_elem(instructions, inst_ldy_imm16(imm)) } +emit_ldy_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, m: Memory) { append_elem(instructions, inst_ldy_mem(m)) } inst_sta_mem :: #force_inline proc "contextless" (m: Memory) -> Instruction { return inst_m(.STA, m) } -emit_sta_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, m: Memory) { append(instructions, inst_sta_mem(m)) } +emit_sta_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, m: Memory) { append_elem(instructions, inst_sta_mem(m)) } inst_stx_mem :: #force_inline proc "contextless" (m: Memory) -> Instruction { return inst_m(.STX, m) } -emit_stx_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, m: Memory) { append(instructions, inst_stx_mem(m)) } +emit_stx_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, m: Memory) { append_elem(instructions, inst_stx_mem(m)) } inst_sty_mem :: #force_inline proc "contextless" (m: Memory) -> Instruction { return inst_m(.STY, m) } -emit_sty_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, m: Memory) { append(instructions, inst_sty_mem(m)) } +emit_sty_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, m: Memory) { append_elem(instructions, inst_sty_mem(m)) } inst_tax_none :: #force_inline proc "contextless" () -> Instruction { return inst_none(.TAX) } -emit_tax_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_tax_none()) } +emit_tax_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_tax_none()) } inst_tay_none :: #force_inline proc "contextless" () -> Instruction { return inst_none(.TAY) } -emit_tay_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_tay_none()) } +emit_tay_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_tay_none()) } inst_tsx_none :: #force_inline proc "contextless" () -> Instruction { return inst_none(.TSX) } -emit_tsx_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_tsx_none()) } +emit_tsx_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_tsx_none()) } inst_txa_none :: #force_inline proc "contextless" () -> Instruction { return inst_none(.TXA) } -emit_txa_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_txa_none()) } +emit_txa_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_txa_none()) } inst_txs_none :: #force_inline proc "contextless" () -> Instruction { return inst_none(.TXS) } -emit_txs_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_txs_none()) } +emit_txs_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_txs_none()) } inst_tya_none :: #force_inline proc "contextless" () -> Instruction { return inst_none(.TYA) } -emit_tya_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_tya_none()) } +emit_tya_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_tya_none()) } inst_pha_none :: #force_inline proc "contextless" () -> Instruction { return inst_none(.PHA) } -emit_pha_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_pha_none()) } +emit_pha_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_pha_none()) } inst_php_none :: #force_inline proc "contextless" () -> Instruction { return inst_none(.PHP) } -emit_php_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_php_none()) } +emit_php_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_php_none()) } inst_pla_none :: #force_inline proc "contextless" () -> Instruction { return inst_none(.PLA) } -emit_pla_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_pla_none()) } +emit_pla_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_pla_none()) } inst_plp_none :: #force_inline proc "contextless" () -> Instruction { return inst_none(.PLP) } -emit_plp_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_plp_none()) } +emit_plp_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_plp_none()) } inst_jmp_mem :: #force_inline proc "contextless" (m: Memory) -> Instruction { return inst_m(.JMP, m) } -emit_jmp_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, m: Memory) { append(instructions, inst_jmp_mem(m)) } +emit_jmp_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, m: Memory) { append_elem(instructions, inst_jmp_mem(m)) } inst_jsr_mem :: #force_inline proc "contextless" (m: Memory) -> Instruction { return inst_m(.JSR, m) } -emit_jsr_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, m: Memory) { append(instructions, inst_jsr_mem(m)) } +emit_jsr_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, m: Memory) { append_elem(instructions, inst_jsr_mem(m)) } inst_rti_none :: #force_inline proc "contextless" () -> Instruction { return inst_none(.RTI) } -emit_rti_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_rti_none()) } +emit_rti_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_rti_none()) } inst_rts_none :: #force_inline proc "contextless" () -> Instruction { return inst_none(.RTS) } -emit_rts_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_rts_none()) } +emit_rts_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_rts_none()) } inst_brk_imm8 :: #force_inline proc "contextless" (imm: i8) -> Instruction { return inst_i8(.BRK, i64(imm)) } -emit_brk_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i8) { append(instructions, inst_brk_imm8(imm)) } +emit_brk_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i8) { append_elem(instructions, inst_brk_imm8(imm)) } inst_nop_none :: #force_inline proc "contextless" () -> Instruction { return inst_none(.NOP) } -emit_nop_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_nop_none()) } +emit_nop_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_nop_none()) } inst_bcc_rel :: #force_inline proc "contextless" (label: u32) -> Instruction { return inst_rel(.BCC, label) } -emit_bcc_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, label: u32) { append(instructions, inst_bcc_rel(label)) } +emit_bcc_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, label: u32) { append_elem(instructions, inst_bcc_rel(label)) } inst_bcs_rel :: #force_inline proc "contextless" (label: u32) -> Instruction { return inst_rel(.BCS, label) } -emit_bcs_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, label: u32) { append(instructions, inst_bcs_rel(label)) } +emit_bcs_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, label: u32) { append_elem(instructions, inst_bcs_rel(label)) } inst_beq_rel :: #force_inline proc "contextless" (label: u32) -> Instruction { return inst_rel(.BEQ, label) } -emit_beq_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, label: u32) { append(instructions, inst_beq_rel(label)) } +emit_beq_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, label: u32) { append_elem(instructions, inst_beq_rel(label)) } inst_bmi_rel :: #force_inline proc "contextless" (label: u32) -> Instruction { return inst_rel(.BMI, label) } -emit_bmi_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, label: u32) { append(instructions, inst_bmi_rel(label)) } +emit_bmi_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, label: u32) { append_elem(instructions, inst_bmi_rel(label)) } inst_bne_rel :: #force_inline proc "contextless" (label: u32) -> Instruction { return inst_rel(.BNE, label) } -emit_bne_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, label: u32) { append(instructions, inst_bne_rel(label)) } +emit_bne_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, label: u32) { append_elem(instructions, inst_bne_rel(label)) } inst_bpl_rel :: #force_inline proc "contextless" (label: u32) -> Instruction { return inst_rel(.BPL, label) } -emit_bpl_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, label: u32) { append(instructions, inst_bpl_rel(label)) } +emit_bpl_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, label: u32) { append_elem(instructions, inst_bpl_rel(label)) } inst_bvc_rel :: #force_inline proc "contextless" (label: u32) -> Instruction { return inst_rel(.BVC, label) } -emit_bvc_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, label: u32) { append(instructions, inst_bvc_rel(label)) } +emit_bvc_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, label: u32) { append_elem(instructions, inst_bvc_rel(label)) } inst_bvs_rel :: #force_inline proc "contextless" (label: u32) -> Instruction { return inst_rel(.BVS, label) } -emit_bvs_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, label: u32) { append(instructions, inst_bvs_rel(label)) } +emit_bvs_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, label: u32) { append_elem(instructions, inst_bvs_rel(label)) } inst_clc_none :: #force_inline proc "contextless" () -> Instruction { return inst_none(.CLC) } -emit_clc_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_clc_none()) } +emit_clc_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_clc_none()) } inst_cld_none :: #force_inline proc "contextless" () -> Instruction { return inst_none(.CLD) } -emit_cld_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_cld_none()) } +emit_cld_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_cld_none()) } inst_cli_none :: #force_inline proc "contextless" () -> Instruction { return inst_none(.CLI) } -emit_cli_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_cli_none()) } +emit_cli_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_cli_none()) } inst_clv_none :: #force_inline proc "contextless" () -> Instruction { return inst_none(.CLV) } -emit_clv_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_clv_none()) } +emit_clv_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_clv_none()) } inst_sec_none :: #force_inline proc "contextless" () -> Instruction { return inst_none(.SEC) } -emit_sec_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_sec_none()) } +emit_sec_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_sec_none()) } inst_sed_none :: #force_inline proc "contextless" () -> Instruction { return inst_none(.SED) } -emit_sed_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_sed_none()) } +emit_sed_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_sed_none()) } inst_sei_none :: #force_inline proc "contextless" () -> Instruction { return inst_none(.SEI) } -emit_sei_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_sei_none()) } +emit_sei_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_sei_none()) } inst_bra_rel :: #force_inline proc "contextless" (label: u32) -> Instruction { return inst_rel(.BRA, label) } -emit_bra_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, label: u32) { append(instructions, inst_bra_rel(label)) } +emit_bra_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, label: u32) { append_elem(instructions, inst_bra_rel(label)) } inst_stz_mem :: #force_inline proc "contextless" (m: Memory) -> Instruction { return inst_m(.STZ, m) } -emit_stz_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, m: Memory) { append(instructions, inst_stz_mem(m)) } +emit_stz_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, m: Memory) { append_elem(instructions, inst_stz_mem(m)) } inst_trb_mem :: #force_inline proc "contextless" (m: Memory) -> Instruction { return inst_m(.TRB, m) } -emit_trb_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, m: Memory) { append(instructions, inst_trb_mem(m)) } +emit_trb_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, m: Memory) { append_elem(instructions, inst_trb_mem(m)) } inst_tsb_mem :: #force_inline proc "contextless" (m: Memory) -> Instruction { return inst_m(.TSB, m) } -emit_tsb_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, m: Memory) { append(instructions, inst_tsb_mem(m)) } +emit_tsb_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, m: Memory) { append_elem(instructions, inst_tsb_mem(m)) } inst_phx_none :: #force_inline proc "contextless" () -> Instruction { return inst_none(.PHX) } -emit_phx_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_phx_none()) } +emit_phx_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_phx_none()) } inst_phy_none :: #force_inline proc "contextless" () -> Instruction { return inst_none(.PHY) } -emit_phy_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_phy_none()) } +emit_phy_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_phy_none()) } inst_plx_none :: #force_inline proc "contextless" () -> Instruction { return inst_none(.PLX) } -emit_plx_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_plx_none()) } +emit_plx_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_plx_none()) } inst_ply_none :: #force_inline proc "contextless" () -> Instruction { return inst_none(.PLY) } -emit_ply_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_ply_none()) } +emit_ply_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_ply_none()) } inst_stp_none :: #force_inline proc "contextless" () -> Instruction { return inst_none(.STP) } -emit_stp_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_stp_none()) } +emit_stp_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_stp_none()) } inst_wai_none :: #force_inline proc "contextless" () -> Instruction { return inst_none(.WAI) } -emit_wai_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_wai_none()) } +emit_wai_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_wai_none()) } inst_brl_rel_long :: #force_inline proc "contextless" (label: u32) -> Instruction { return inst_rel_long(.BRL, label) } -emit_brl_rel_long :: #force_inline proc(instructions: ^[dynamic]Instruction, label: u32) { append(instructions, inst_brl_rel_long(label)) } +emit_brl_rel_long :: #force_inline proc(instructions: ^[dynamic]Instruction, label: u32) { append_elem(instructions, inst_brl_rel_long(label)) } inst_cop_imm8 :: #force_inline proc "contextless" (imm: i8) -> Instruction { return inst_i8(.COP, i64(imm)) } -emit_cop_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i8) { append(instructions, inst_cop_imm8(imm)) } +emit_cop_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i8) { append_elem(instructions, inst_cop_imm8(imm)) } inst_jml_mem :: #force_inline proc "contextless" (m: Memory) -> Instruction { return inst_m(.JML, m) } -emit_jml_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, m: Memory) { append(instructions, inst_jml_mem(m)) } +emit_jml_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, m: Memory) { append_elem(instructions, inst_jml_mem(m)) } inst_jsl_mem :: #force_inline proc "contextless" (m: Memory) -> Instruction { return inst_m(.JSL, m) } -emit_jsl_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, m: Memory) { append(instructions, inst_jsl_mem(m)) } +emit_jsl_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, m: Memory) { append_elem(instructions, inst_jsl_mem(m)) } inst_mvn_banks :: #force_inline proc "contextless" (src_bank, dst_bank: u8) -> Instruction { return inst_block_move(.MVN, src_bank, dst_bank) } -emit_mvn_banks :: #force_inline proc(instructions: ^[dynamic]Instruction, src_bank, dst_bank: u8) { append(instructions, inst_mvn_banks(src_bank, dst_bank)) } +emit_mvn_banks :: #force_inline proc(instructions: ^[dynamic]Instruction, src_bank, dst_bank: u8) { append_elem(instructions, inst_mvn_banks(src_bank, dst_bank)) } inst_mvp_banks :: #force_inline proc "contextless" (src_bank, dst_bank: u8) -> Instruction { return inst_block_move(.MVP, src_bank, dst_bank) } -emit_mvp_banks :: #force_inline proc(instructions: ^[dynamic]Instruction, src_bank, dst_bank: u8) { append(instructions, inst_mvp_banks(src_bank, dst_bank)) } +emit_mvp_banks :: #force_inline proc(instructions: ^[dynamic]Instruction, src_bank, dst_bank: u8) { append_elem(instructions, inst_mvp_banks(src_bank, dst_bank)) } inst_pea_mem :: #force_inline proc "contextless" (m: Memory) -> Instruction { return inst_m(.PEA, m) } -emit_pea_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, m: Memory) { append(instructions, inst_pea_mem(m)) } +emit_pea_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, m: Memory) { append_elem(instructions, inst_pea_mem(m)) } inst_pei_mem :: #force_inline proc "contextless" (m: Memory) -> Instruction { return inst_m(.PEI, m) } -emit_pei_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, m: Memory) { append(instructions, inst_pei_mem(m)) } +emit_pei_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, m: Memory) { append_elem(instructions, inst_pei_mem(m)) } inst_per_rel_long :: #force_inline proc "contextless" (label: u32) -> Instruction { return inst_rel_long(.PER, label) } -emit_per_rel_long :: #force_inline proc(instructions: ^[dynamic]Instruction, label: u32) { append(instructions, inst_per_rel_long(label)) } +emit_per_rel_long :: #force_inline proc(instructions: ^[dynamic]Instruction, label: u32) { append_elem(instructions, inst_per_rel_long(label)) } inst_phb_none :: #force_inline proc "contextless" () -> Instruction { return inst_none(.PHB) } -emit_phb_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_phb_none()) } +emit_phb_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_phb_none()) } inst_phd_none :: #force_inline proc "contextless" () -> Instruction { return inst_none(.PHD) } -emit_phd_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_phd_none()) } +emit_phd_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_phd_none()) } inst_phk_none :: #force_inline proc "contextless" () -> Instruction { return inst_none(.PHK) } -emit_phk_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_phk_none()) } +emit_phk_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_phk_none()) } inst_plb_none :: #force_inline proc "contextless" () -> Instruction { return inst_none(.PLB) } -emit_plb_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_plb_none()) } +emit_plb_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_plb_none()) } inst_pld_none :: #force_inline proc "contextless" () -> Instruction { return inst_none(.PLD) } -emit_pld_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_pld_none()) } +emit_pld_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_pld_none()) } inst_rep_imm8 :: #force_inline proc "contextless" (imm: i8) -> Instruction { return inst_i8(.REP, i64(imm)) } -emit_rep_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i8) { append(instructions, inst_rep_imm8(imm)) } +emit_rep_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i8) { append_elem(instructions, inst_rep_imm8(imm)) } inst_sep_imm8 :: #force_inline proc "contextless" (imm: i8) -> Instruction { return inst_i8(.SEP, i64(imm)) } -emit_sep_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i8) { append(instructions, inst_sep_imm8(imm)) } +emit_sep_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i8) { append_elem(instructions, inst_sep_imm8(imm)) } inst_rtl_none :: #force_inline proc "contextless" () -> Instruction { return inst_none(.RTL) } -emit_rtl_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_rtl_none()) } +emit_rtl_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_rtl_none()) } inst_tcd_none :: #force_inline proc "contextless" () -> Instruction { return inst_none(.TCD) } -emit_tcd_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_tcd_none()) } +emit_tcd_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_tcd_none()) } inst_tdc_none :: #force_inline proc "contextless" () -> Instruction { return inst_none(.TDC) } -emit_tdc_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_tdc_none()) } +emit_tdc_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_tdc_none()) } inst_tcs_none :: #force_inline proc "contextless" () -> Instruction { return inst_none(.TCS) } -emit_tcs_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_tcs_none()) } +emit_tcs_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_tcs_none()) } inst_tsc_none :: #force_inline proc "contextless" () -> Instruction { return inst_none(.TSC) } -emit_tsc_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_tsc_none()) } +emit_tsc_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_tsc_none()) } inst_txy_none :: #force_inline proc "contextless" () -> Instruction { return inst_none(.TXY) } -emit_txy_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_txy_none()) } +emit_txy_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_txy_none()) } inst_tyx_none :: #force_inline proc "contextless" () -> Instruction { return inst_none(.TYX) } -emit_tyx_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_tyx_none()) } +emit_tyx_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_tyx_none()) } inst_wdm_imm8 :: #force_inline proc "contextless" (imm: i8) -> Instruction { return inst_i8(.WDM, i64(imm)) } -emit_wdm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i8) { append(instructions, inst_wdm_imm8(imm)) } +emit_wdm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i8) { append_elem(instructions, inst_wdm_imm8(imm)) } inst_xba_none :: #force_inline proc "contextless" () -> Instruction { return inst_none(.XBA) } -emit_xba_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_xba_none()) } +emit_xba_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_xba_none()) } inst_xce_none :: #force_inline proc "contextless" () -> Instruction { return inst_none(.XCE) } -emit_xce_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_xce_none()) } +emit_xce_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_xce_none()) } // ============================================================================= // Overload Groups diff --git a/core/rexcode/isa/mos65816/tools/gen_mnemonic_builders.odin b/core/rexcode/isa/mos65816/tools/gen_mnemonic_builders.odin index b2ec9b5cc..2dd706c98 100644 --- a/core/rexcode/isa/mos65816/tools/gen_mnemonic_builders.odin +++ b/core/rexcode/isa/mos65816/tools/gen_mnemonic_builders.odin @@ -335,7 +335,7 @@ generate_emit_proc :: proc(sb: ^strings.Builder, entry: Proc_Entry, mnemonic_str strings.write_string(sb, ", ") strings.write_string(sb, params) } - strings.write_string(sb, ") { append(instructions, ") + strings.write_string(sb, ") { append_elem(instructions, ") strings.write_string(sb, entry.proc_name) strings.write_string(sb, "(") strings.write_string(sb, kind_args(entry.kind)) diff --git a/core/rexcode/isa/ppc/mnemonic_builders.odin b/core/rexcode/isa/ppc/mnemonic_builders.odin index 13a0cc87d..00e651c14 100644 --- a/core/rexcode/isa/ppc/mnemonic_builders.odin +++ b/core/rexcode/isa/ppc/mnemonic_builders.odin @@ -21,6659 +21,6659 @@ package rexcode_ppc // ============================================================================= inst_b_rel :: #force_inline proc "contextless" (label: u32) -> Instruction { return Instruction{mnemonic = .B, operand_count = 1, length = 4, ops = {op_label(label), {}, {}, {}}} } -emit_b_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, label: u32) { append(instructions, inst_b_rel(label)) } +emit_b_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, label: u32) { append_elem(instructions, inst_b_rel(label)) } inst_bl_rel :: #force_inline proc "contextless" (label: u32) -> Instruction { return Instruction{mnemonic = .BL, operand_count = 1, length = 4, ops = {op_label(label), {}, {}, {}}} } -emit_bl_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, label: u32) { append(instructions, inst_bl_rel(label)) } +emit_bl_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, label: u32) { append_elem(instructions, inst_bl_rel(label)) } inst_ba_rel :: #force_inline proc "contextless" (label: u32) -> Instruction { return Instruction{mnemonic = .BA, operand_count = 1, length = 4, ops = {op_label(label), {}, {}, {}}} } -emit_ba_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, label: u32) { append(instructions, inst_ba_rel(label)) } +emit_ba_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, label: u32) { append_elem(instructions, inst_ba_rel(label)) } inst_bla_rel :: #force_inline proc "contextless" (label: u32) -> Instruction { return Instruction{mnemonic = .BLA, operand_count = 1, length = 4, ops = {op_label(label), {}, {}, {}}} } -emit_bla_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, label: u32) { append(instructions, inst_bla_rel(label)) } +emit_bla_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, label: u32) { append_elem(instructions, inst_bla_rel(label)) } inst_bc_bo_crb_rel :: #force_inline proc "contextless" (bo: i64, dst: Register, label: u32) -> Instruction { return Instruction{mnemonic = .BC, operand_count = 3, length = 4, ops = {op_imm(bo), op_reg(dst), op_label(label), {}}} } -emit_bc_bo_crb_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, bo: i64, dst: Register, label: u32) { append(instructions, inst_bc_bo_crb_rel(bo, dst, label)) } +emit_bc_bo_crb_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, bo: i64, dst: Register, label: u32) { append_elem(instructions, inst_bc_bo_crb_rel(bo, dst, label)) } inst_bcl_bo_crb_rel :: #force_inline proc "contextless" (bo: i64, dst: Register, label: u32) -> Instruction { return Instruction{mnemonic = .BCL, operand_count = 3, length = 4, ops = {op_imm(bo), op_reg(dst), op_label(label), {}}} } -emit_bcl_bo_crb_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, bo: i64, dst: Register, label: u32) { append(instructions, inst_bcl_bo_crb_rel(bo, dst, label)) } +emit_bcl_bo_crb_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, bo: i64, dst: Register, label: u32) { append_elem(instructions, inst_bcl_bo_crb_rel(bo, dst, label)) } inst_bca_bo_crb_rel :: #force_inline proc "contextless" (bo: i64, dst: Register, label: u32) -> Instruction { return Instruction{mnemonic = .BCA, operand_count = 3, length = 4, ops = {op_imm(bo), op_reg(dst), op_label(label), {}}} } -emit_bca_bo_crb_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, bo: i64, dst: Register, label: u32) { append(instructions, inst_bca_bo_crb_rel(bo, dst, label)) } +emit_bca_bo_crb_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, bo: i64, dst: Register, label: u32) { append_elem(instructions, inst_bca_bo_crb_rel(bo, dst, label)) } inst_bcla_bo_crb_rel :: #force_inline proc "contextless" (bo: i64, dst: Register, label: u32) -> Instruction { return Instruction{mnemonic = .BCLA, operand_count = 3, length = 4, ops = {op_imm(bo), op_reg(dst), op_label(label), {}}} } -emit_bcla_bo_crb_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, bo: i64, dst: Register, label: u32) { append(instructions, inst_bcla_bo_crb_rel(bo, dst, label)) } +emit_bcla_bo_crb_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, bo: i64, dst: Register, label: u32) { append_elem(instructions, inst_bcla_bo_crb_rel(bo, dst, label)) } inst_bclr_bo_crb_bh :: #force_inline proc "contextless" (bo: i64, dst: Register, bh: i64) -> Instruction { return Instruction{mnemonic = .BCLR, operand_count = 3, length = 4, ops = {op_imm(bo), op_reg(dst), op_imm(bh), {}}} } -emit_bclr_bo_crb_bh :: #force_inline proc(instructions: ^[dynamic]Instruction, bo: i64, dst: Register, bh: i64) { append(instructions, inst_bclr_bo_crb_bh(bo, dst, bh)) } +emit_bclr_bo_crb_bh :: #force_inline proc(instructions: ^[dynamic]Instruction, bo: i64, dst: Register, bh: i64) { append_elem(instructions, inst_bclr_bo_crb_bh(bo, dst, bh)) } inst_bclrl_bo_crb_bh :: #force_inline proc "contextless" (bo: i64, dst: Register, bh: i64) -> Instruction { return Instruction{mnemonic = .BCLRL, operand_count = 3, length = 4, ops = {op_imm(bo), op_reg(dst), op_imm(bh), {}}} } -emit_bclrl_bo_crb_bh :: #force_inline proc(instructions: ^[dynamic]Instruction, bo: i64, dst: Register, bh: i64) { append(instructions, inst_bclrl_bo_crb_bh(bo, dst, bh)) } +emit_bclrl_bo_crb_bh :: #force_inline proc(instructions: ^[dynamic]Instruction, bo: i64, dst: Register, bh: i64) { append_elem(instructions, inst_bclrl_bo_crb_bh(bo, dst, bh)) } inst_bcctr_bo_crb_bh :: #force_inline proc "contextless" (bo: i64, dst: Register, bh: i64) -> Instruction { return Instruction{mnemonic = .BCCTR, operand_count = 3, length = 4, ops = {op_imm(bo), op_reg(dst), op_imm(bh), {}}} } -emit_bcctr_bo_crb_bh :: #force_inline proc(instructions: ^[dynamic]Instruction, bo: i64, dst: Register, bh: i64) { append(instructions, inst_bcctr_bo_crb_bh(bo, dst, bh)) } +emit_bcctr_bo_crb_bh :: #force_inline proc(instructions: ^[dynamic]Instruction, bo: i64, dst: Register, bh: i64) { append_elem(instructions, inst_bcctr_bo_crb_bh(bo, dst, bh)) } inst_bcctrl_bo_crb_bh :: #force_inline proc "contextless" (bo: i64, dst: Register, bh: i64) -> Instruction { return Instruction{mnemonic = .BCCTRL, operand_count = 3, length = 4, ops = {op_imm(bo), op_reg(dst), op_imm(bh), {}}} } -emit_bcctrl_bo_crb_bh :: #force_inline proc(instructions: ^[dynamic]Instruction, bo: i64, dst: Register, bh: i64) { append(instructions, inst_bcctrl_bo_crb_bh(bo, dst, bh)) } +emit_bcctrl_bo_crb_bh :: #force_inline proc(instructions: ^[dynamic]Instruction, bo: i64, dst: Register, bh: i64) { append_elem(instructions, inst_bcctrl_bo_crb_bh(bo, dst, bh)) } inst_bctar_bo_crb_bh :: #force_inline proc "contextless" (bo: i64, dst: Register, bh: i64) -> Instruction { return Instruction{mnemonic = .BCTAR, operand_count = 3, length = 4, ops = {op_imm(bo), op_reg(dst), op_imm(bh), {}}} } -emit_bctar_bo_crb_bh :: #force_inline proc(instructions: ^[dynamic]Instruction, bo: i64, dst: Register, bh: i64) { append(instructions, inst_bctar_bo_crb_bh(bo, dst, bh)) } +emit_bctar_bo_crb_bh :: #force_inline proc(instructions: ^[dynamic]Instruction, bo: i64, dst: Register, bh: i64) { append_elem(instructions, inst_bctar_bo_crb_bh(bo, dst, bh)) } inst_bctarl_bo_crb_bh :: #force_inline proc "contextless" (bo: i64, dst: Register, bh: i64) -> Instruction { return Instruction{mnemonic = .BCTARL, operand_count = 3, length = 4, ops = {op_imm(bo), op_reg(dst), op_imm(bh), {}}} } -emit_bctarl_bo_crb_bh :: #force_inline proc(instructions: ^[dynamic]Instruction, bo: i64, dst: Register, bh: i64) { append(instructions, inst_bctarl_bo_crb_bh(bo, dst, bh)) } +emit_bctarl_bo_crb_bh :: #force_inline proc(instructions: ^[dynamic]Instruction, bo: i64, dst: Register, bh: i64) { append_elem(instructions, inst_bctarl_bo_crb_bh(bo, dst, bh)) } inst_sc_imm :: #force_inline proc "contextless" (imm: i64) -> Instruction { return Instruction{mnemonic = .SC, operand_count = 1, length = 4, ops = {op_imm(imm), {}, {}, {}}} } -emit_sc_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64) { append(instructions, inst_sc_imm(imm)) } +emit_sc_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64) { append_elem(instructions, inst_sc_imm(imm)) } inst_crand_crb_crb_crb :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .CRAND, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_crand_crb_crb_crb :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_crand_crb_crb_crb(dst, src, src2)) } +emit_crand_crb_crb_crb :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_crand_crb_crb_crb(dst, src, src2)) } inst_crnand_crb_crb_crb :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .CRNAND, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_crnand_crb_crb_crb :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_crnand_crb_crb_crb(dst, src, src2)) } +emit_crnand_crb_crb_crb :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_crnand_crb_crb_crb(dst, src, src2)) } inst_cror_crb_crb_crb :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .CROR, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_cror_crb_crb_crb :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_cror_crb_crb_crb(dst, src, src2)) } +emit_cror_crb_crb_crb :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_cror_crb_crb_crb(dst, src, src2)) } inst_crnor_crb_crb_crb :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .CRNOR, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_crnor_crb_crb_crb :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_crnor_crb_crb_crb(dst, src, src2)) } +emit_crnor_crb_crb_crb :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_crnor_crb_crb_crb(dst, src, src2)) } inst_crxor_crb_crb_crb :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .CRXOR, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_crxor_crb_crb_crb :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_crxor_crb_crb_crb(dst, src, src2)) } +emit_crxor_crb_crb_crb :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_crxor_crb_crb_crb(dst, src, src2)) } inst_creqv_crb_crb_crb :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .CREQV, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_creqv_crb_crb_crb :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_creqv_crb_crb_crb(dst, src, src2)) } +emit_creqv_crb_crb_crb :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_creqv_crb_crb_crb(dst, src, src2)) } inst_crandc_crb_crb_crb :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .CRANDC, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_crandc_crb_crb_crb :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_crandc_crb_crb_crb(dst, src, src2)) } +emit_crandc_crb_crb_crb :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_crandc_crb_crb_crb(dst, src, src2)) } inst_crorc_crb_crb_crb :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .CRORC, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_crorc_crb_crb_crb :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_crorc_crb_crb_crb(dst, src, src2)) } +emit_crorc_crb_crb_crb :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_crorc_crb_crb_crb(dst, src, src2)) } inst_mcrf_crf_crf :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .MCRF, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_mcrf_crf_crf :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_mcrf_crf_crf(dst, src)) } +emit_mcrf_crf_crf :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_mcrf_crf_crf(dst, src)) } inst_lbz_r_mem :: #force_inline proc "contextless" (dst: Register, addr: Memory) -> Instruction { return Instruction{mnemonic = .LBZ, operand_count = 2, length = 4, ops = {op_reg(dst), op_mem(addr), {}, {}}} } -emit_lbz_r_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append(instructions, inst_lbz_r_mem(dst, addr)) } +emit_lbz_r_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append_elem(instructions, inst_lbz_r_mem(dst, addr)) } inst_lbzu_r_mem :: #force_inline proc "contextless" (dst: Register, addr: Memory) -> Instruction { return Instruction{mnemonic = .LBZU, operand_count = 2, length = 4, ops = {op_reg(dst), op_mem(addr), {}, {}}} } -emit_lbzu_r_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append(instructions, inst_lbzu_r_mem(dst, addr)) } +emit_lbzu_r_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append_elem(instructions, inst_lbzu_r_mem(dst, addr)) } inst_lbzx_r_mem :: #force_inline proc "contextless" (dst: Register, addr: Memory) -> Instruction { return Instruction{mnemonic = .LBZX, operand_count = 2, length = 4, ops = {op_reg(dst), op_mem(addr), {}, {}}} } -emit_lbzx_r_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append(instructions, inst_lbzx_r_mem(dst, addr)) } +emit_lbzx_r_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append_elem(instructions, inst_lbzx_r_mem(dst, addr)) } inst_lbzux_r_mem :: #force_inline proc "contextless" (dst: Register, addr: Memory) -> Instruction { return Instruction{mnemonic = .LBZUX, operand_count = 2, length = 4, ops = {op_reg(dst), op_mem(addr), {}, {}}} } -emit_lbzux_r_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append(instructions, inst_lbzux_r_mem(dst, addr)) } +emit_lbzux_r_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append_elem(instructions, inst_lbzux_r_mem(dst, addr)) } inst_lhz_r_mem :: #force_inline proc "contextless" (dst: Register, addr: Memory) -> Instruction { return Instruction{mnemonic = .LHZ, operand_count = 2, length = 4, ops = {op_reg(dst), op_mem(addr), {}, {}}} } -emit_lhz_r_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append(instructions, inst_lhz_r_mem(dst, addr)) } +emit_lhz_r_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append_elem(instructions, inst_lhz_r_mem(dst, addr)) } inst_lhzu_r_mem :: #force_inline proc "contextless" (dst: Register, addr: Memory) -> Instruction { return Instruction{mnemonic = .LHZU, operand_count = 2, length = 4, ops = {op_reg(dst), op_mem(addr), {}, {}}} } -emit_lhzu_r_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append(instructions, inst_lhzu_r_mem(dst, addr)) } +emit_lhzu_r_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append_elem(instructions, inst_lhzu_r_mem(dst, addr)) } inst_lhzx_r_mem :: #force_inline proc "contextless" (dst: Register, addr: Memory) -> Instruction { return Instruction{mnemonic = .LHZX, operand_count = 2, length = 4, ops = {op_reg(dst), op_mem(addr), {}, {}}} } -emit_lhzx_r_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append(instructions, inst_lhzx_r_mem(dst, addr)) } +emit_lhzx_r_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append_elem(instructions, inst_lhzx_r_mem(dst, addr)) } inst_lhzux_r_mem :: #force_inline proc "contextless" (dst: Register, addr: Memory) -> Instruction { return Instruction{mnemonic = .LHZUX, operand_count = 2, length = 4, ops = {op_reg(dst), op_mem(addr), {}, {}}} } -emit_lhzux_r_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append(instructions, inst_lhzux_r_mem(dst, addr)) } +emit_lhzux_r_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append_elem(instructions, inst_lhzux_r_mem(dst, addr)) } inst_lha_r_mem :: #force_inline proc "contextless" (dst: Register, addr: Memory) -> Instruction { return Instruction{mnemonic = .LHA, operand_count = 2, length = 4, ops = {op_reg(dst), op_mem(addr), {}, {}}} } -emit_lha_r_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append(instructions, inst_lha_r_mem(dst, addr)) } +emit_lha_r_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append_elem(instructions, inst_lha_r_mem(dst, addr)) } inst_lhau_r_mem :: #force_inline proc "contextless" (dst: Register, addr: Memory) -> Instruction { return Instruction{mnemonic = .LHAU, operand_count = 2, length = 4, ops = {op_reg(dst), op_mem(addr), {}, {}}} } -emit_lhau_r_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append(instructions, inst_lhau_r_mem(dst, addr)) } +emit_lhau_r_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append_elem(instructions, inst_lhau_r_mem(dst, addr)) } inst_lhax_r_mem :: #force_inline proc "contextless" (dst: Register, addr: Memory) -> Instruction { return Instruction{mnemonic = .LHAX, operand_count = 2, length = 4, ops = {op_reg(dst), op_mem(addr), {}, {}}} } -emit_lhax_r_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append(instructions, inst_lhax_r_mem(dst, addr)) } +emit_lhax_r_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append_elem(instructions, inst_lhax_r_mem(dst, addr)) } inst_lhaux_r_mem :: #force_inline proc "contextless" (dst: Register, addr: Memory) -> Instruction { return Instruction{mnemonic = .LHAUX, operand_count = 2, length = 4, ops = {op_reg(dst), op_mem(addr), {}, {}}} } -emit_lhaux_r_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append(instructions, inst_lhaux_r_mem(dst, addr)) } +emit_lhaux_r_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append_elem(instructions, inst_lhaux_r_mem(dst, addr)) } inst_lwz_r_mem :: #force_inline proc "contextless" (dst: Register, addr: Memory) -> Instruction { return Instruction{mnemonic = .LWZ, operand_count = 2, length = 4, ops = {op_reg(dst), op_mem(addr), {}, {}}} } -emit_lwz_r_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append(instructions, inst_lwz_r_mem(dst, addr)) } +emit_lwz_r_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append_elem(instructions, inst_lwz_r_mem(dst, addr)) } inst_lwzu_r_mem :: #force_inline proc "contextless" (dst: Register, addr: Memory) -> Instruction { return Instruction{mnemonic = .LWZU, operand_count = 2, length = 4, ops = {op_reg(dst), op_mem(addr), {}, {}}} } -emit_lwzu_r_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append(instructions, inst_lwzu_r_mem(dst, addr)) } +emit_lwzu_r_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append_elem(instructions, inst_lwzu_r_mem(dst, addr)) } inst_lwzx_r_mem :: #force_inline proc "contextless" (dst: Register, addr: Memory) -> Instruction { return Instruction{mnemonic = .LWZX, operand_count = 2, length = 4, ops = {op_reg(dst), op_mem(addr), {}, {}}} } -emit_lwzx_r_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append(instructions, inst_lwzx_r_mem(dst, addr)) } +emit_lwzx_r_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append_elem(instructions, inst_lwzx_r_mem(dst, addr)) } inst_lwzux_r_mem :: #force_inline proc "contextless" (dst: Register, addr: Memory) -> Instruction { return Instruction{mnemonic = .LWZUX, operand_count = 2, length = 4, ops = {op_reg(dst), op_mem(addr), {}, {}}} } -emit_lwzux_r_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append(instructions, inst_lwzux_r_mem(dst, addr)) } +emit_lwzux_r_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append_elem(instructions, inst_lwzux_r_mem(dst, addr)) } inst_lwa_r_mem :: #force_inline proc "contextless" (dst: Register, addr: Memory) -> Instruction { return Instruction{mnemonic = .LWA, operand_count = 2, length = 4, ops = {op_reg(dst), op_mem(addr), {}, {}}} } -emit_lwa_r_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append(instructions, inst_lwa_r_mem(dst, addr)) } +emit_lwa_r_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append_elem(instructions, inst_lwa_r_mem(dst, addr)) } inst_lwax_r_mem :: #force_inline proc "contextless" (dst: Register, addr: Memory) -> Instruction { return Instruction{mnemonic = .LWAX, operand_count = 2, length = 4, ops = {op_reg(dst), op_mem(addr), {}, {}}} } -emit_lwax_r_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append(instructions, inst_lwax_r_mem(dst, addr)) } +emit_lwax_r_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append_elem(instructions, inst_lwax_r_mem(dst, addr)) } inst_lwaux_r_mem :: #force_inline proc "contextless" (dst: Register, addr: Memory) -> Instruction { return Instruction{mnemonic = .LWAUX, operand_count = 2, length = 4, ops = {op_reg(dst), op_mem(addr), {}, {}}} } -emit_lwaux_r_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append(instructions, inst_lwaux_r_mem(dst, addr)) } +emit_lwaux_r_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append_elem(instructions, inst_lwaux_r_mem(dst, addr)) } inst_ld_r_mem :: #force_inline proc "contextless" (dst: Register, addr: Memory) -> Instruction { return Instruction{mnemonic = .LD, operand_count = 2, length = 4, ops = {op_reg(dst), op_mem(addr), {}, {}}} } -emit_ld_r_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append(instructions, inst_ld_r_mem(dst, addr)) } +emit_ld_r_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append_elem(instructions, inst_ld_r_mem(dst, addr)) } inst_ldu_r_mem :: #force_inline proc "contextless" (dst: Register, addr: Memory) -> Instruction { return Instruction{mnemonic = .LDU, operand_count = 2, length = 4, ops = {op_reg(dst), op_mem(addr), {}, {}}} } -emit_ldu_r_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append(instructions, inst_ldu_r_mem(dst, addr)) } +emit_ldu_r_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append_elem(instructions, inst_ldu_r_mem(dst, addr)) } inst_ldx_r_mem :: #force_inline proc "contextless" (dst: Register, addr: Memory) -> Instruction { return Instruction{mnemonic = .LDX, operand_count = 2, length = 4, ops = {op_reg(dst), op_mem(addr), {}, {}}} } -emit_ldx_r_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append(instructions, inst_ldx_r_mem(dst, addr)) } +emit_ldx_r_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append_elem(instructions, inst_ldx_r_mem(dst, addr)) } inst_ldux_r_mem :: #force_inline proc "contextless" (dst: Register, addr: Memory) -> Instruction { return Instruction{mnemonic = .LDUX, operand_count = 2, length = 4, ops = {op_reg(dst), op_mem(addr), {}, {}}} } -emit_ldux_r_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append(instructions, inst_ldux_r_mem(dst, addr)) } +emit_ldux_r_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append_elem(instructions, inst_ldux_r_mem(dst, addr)) } inst_lq_r_mem :: #force_inline proc "contextless" (dst: Register, addr: Memory) -> Instruction { return Instruction{mnemonic = .LQ, operand_count = 2, length = 4, ops = {op_reg(dst), op_mem(addr), {}, {}}} } -emit_lq_r_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append(instructions, inst_lq_r_mem(dst, addr)) } +emit_lq_r_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append_elem(instructions, inst_lq_r_mem(dst, addr)) } inst_lhbrx_r_mem :: #force_inline proc "contextless" (dst: Register, addr: Memory) -> Instruction { return Instruction{mnemonic = .LHBRX, operand_count = 2, length = 4, ops = {op_reg(dst), op_mem(addr), {}, {}}} } -emit_lhbrx_r_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append(instructions, inst_lhbrx_r_mem(dst, addr)) } +emit_lhbrx_r_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append_elem(instructions, inst_lhbrx_r_mem(dst, addr)) } inst_lwbrx_r_mem :: #force_inline proc "contextless" (dst: Register, addr: Memory) -> Instruction { return Instruction{mnemonic = .LWBRX, operand_count = 2, length = 4, ops = {op_reg(dst), op_mem(addr), {}, {}}} } -emit_lwbrx_r_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append(instructions, inst_lwbrx_r_mem(dst, addr)) } +emit_lwbrx_r_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append_elem(instructions, inst_lwbrx_r_mem(dst, addr)) } inst_ldbrx_r_mem :: #force_inline proc "contextless" (dst: Register, addr: Memory) -> Instruction { return Instruction{mnemonic = .LDBRX, operand_count = 2, length = 4, ops = {op_reg(dst), op_mem(addr), {}, {}}} } -emit_ldbrx_r_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append(instructions, inst_ldbrx_r_mem(dst, addr)) } +emit_ldbrx_r_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append_elem(instructions, inst_ldbrx_r_mem(dst, addr)) } inst_lmw_r_mem :: #force_inline proc "contextless" (dst: Register, addr: Memory) -> Instruction { return Instruction{mnemonic = .LMW, operand_count = 2, length = 4, ops = {op_reg(dst), op_mem(addr), {}, {}}} } -emit_lmw_r_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append(instructions, inst_lmw_r_mem(dst, addr)) } +emit_lmw_r_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append_elem(instructions, inst_lmw_r_mem(dst, addr)) } inst_lswi_r_r_imm :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .LSWI, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_imm(imm), {}}} } -emit_lswi_r_r_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_lswi_r_r_imm(dst, src, imm)) } +emit_lswi_r_r_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_lswi_r_r_imm(dst, src, imm)) } inst_lswx_r_mem :: #force_inline proc "contextless" (dst: Register, addr: Memory) -> Instruction { return Instruction{mnemonic = .LSWX, operand_count = 2, length = 4, ops = {op_reg(dst), op_mem(addr), {}, {}}} } -emit_lswx_r_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append(instructions, inst_lswx_r_mem(dst, addr)) } +emit_lswx_r_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append_elem(instructions, inst_lswx_r_mem(dst, addr)) } inst_stb_r_mem :: #force_inline proc "contextless" (dst: Register, addr: Memory) -> Instruction { return Instruction{mnemonic = .STB, operand_count = 2, length = 4, ops = {op_reg(dst), op_mem(addr), {}, {}}} } -emit_stb_r_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append(instructions, inst_stb_r_mem(dst, addr)) } +emit_stb_r_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append_elem(instructions, inst_stb_r_mem(dst, addr)) } inst_stbu_r_mem :: #force_inline proc "contextless" (dst: Register, addr: Memory) -> Instruction { return Instruction{mnemonic = .STBU, operand_count = 2, length = 4, ops = {op_reg(dst), op_mem(addr), {}, {}}} } -emit_stbu_r_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append(instructions, inst_stbu_r_mem(dst, addr)) } +emit_stbu_r_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append_elem(instructions, inst_stbu_r_mem(dst, addr)) } inst_stbx_r_mem :: #force_inline proc "contextless" (dst: Register, addr: Memory) -> Instruction { return Instruction{mnemonic = .STBX, operand_count = 2, length = 4, ops = {op_reg(dst), op_mem(addr), {}, {}}} } -emit_stbx_r_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append(instructions, inst_stbx_r_mem(dst, addr)) } +emit_stbx_r_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append_elem(instructions, inst_stbx_r_mem(dst, addr)) } inst_stbux_r_mem :: #force_inline proc "contextless" (dst: Register, addr: Memory) -> Instruction { return Instruction{mnemonic = .STBUX, operand_count = 2, length = 4, ops = {op_reg(dst), op_mem(addr), {}, {}}} } -emit_stbux_r_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append(instructions, inst_stbux_r_mem(dst, addr)) } +emit_stbux_r_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append_elem(instructions, inst_stbux_r_mem(dst, addr)) } inst_sth_r_mem :: #force_inline proc "contextless" (dst: Register, addr: Memory) -> Instruction { return Instruction{mnemonic = .STH, operand_count = 2, length = 4, ops = {op_reg(dst), op_mem(addr), {}, {}}} } -emit_sth_r_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append(instructions, inst_sth_r_mem(dst, addr)) } +emit_sth_r_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append_elem(instructions, inst_sth_r_mem(dst, addr)) } inst_sthu_r_mem :: #force_inline proc "contextless" (dst: Register, addr: Memory) -> Instruction { return Instruction{mnemonic = .STHU, operand_count = 2, length = 4, ops = {op_reg(dst), op_mem(addr), {}, {}}} } -emit_sthu_r_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append(instructions, inst_sthu_r_mem(dst, addr)) } +emit_sthu_r_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append_elem(instructions, inst_sthu_r_mem(dst, addr)) } inst_sthx_r_mem :: #force_inline proc "contextless" (dst: Register, addr: Memory) -> Instruction { return Instruction{mnemonic = .STHX, operand_count = 2, length = 4, ops = {op_reg(dst), op_mem(addr), {}, {}}} } -emit_sthx_r_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append(instructions, inst_sthx_r_mem(dst, addr)) } +emit_sthx_r_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append_elem(instructions, inst_sthx_r_mem(dst, addr)) } inst_sthux_r_mem :: #force_inline proc "contextless" (dst: Register, addr: Memory) -> Instruction { return Instruction{mnemonic = .STHUX, operand_count = 2, length = 4, ops = {op_reg(dst), op_mem(addr), {}, {}}} } -emit_sthux_r_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append(instructions, inst_sthux_r_mem(dst, addr)) } +emit_sthux_r_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append_elem(instructions, inst_sthux_r_mem(dst, addr)) } inst_stw_r_mem :: #force_inline proc "contextless" (dst: Register, addr: Memory) -> Instruction { return Instruction{mnemonic = .STW, operand_count = 2, length = 4, ops = {op_reg(dst), op_mem(addr), {}, {}}} } -emit_stw_r_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append(instructions, inst_stw_r_mem(dst, addr)) } +emit_stw_r_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append_elem(instructions, inst_stw_r_mem(dst, addr)) } inst_stwu_r_mem :: #force_inline proc "contextless" (dst: Register, addr: Memory) -> Instruction { return Instruction{mnemonic = .STWU, operand_count = 2, length = 4, ops = {op_reg(dst), op_mem(addr), {}, {}}} } -emit_stwu_r_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append(instructions, inst_stwu_r_mem(dst, addr)) } +emit_stwu_r_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append_elem(instructions, inst_stwu_r_mem(dst, addr)) } inst_stwx_r_mem :: #force_inline proc "contextless" (dst: Register, addr: Memory) -> Instruction { return Instruction{mnemonic = .STWX, operand_count = 2, length = 4, ops = {op_reg(dst), op_mem(addr), {}, {}}} } -emit_stwx_r_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append(instructions, inst_stwx_r_mem(dst, addr)) } +emit_stwx_r_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append_elem(instructions, inst_stwx_r_mem(dst, addr)) } inst_stwux_r_mem :: #force_inline proc "contextless" (dst: Register, addr: Memory) -> Instruction { return Instruction{mnemonic = .STWUX, operand_count = 2, length = 4, ops = {op_reg(dst), op_mem(addr), {}, {}}} } -emit_stwux_r_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append(instructions, inst_stwux_r_mem(dst, addr)) } +emit_stwux_r_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append_elem(instructions, inst_stwux_r_mem(dst, addr)) } inst_std_r_mem :: #force_inline proc "contextless" (dst: Register, addr: Memory) -> Instruction { return Instruction{mnemonic = .STD, operand_count = 2, length = 4, ops = {op_reg(dst), op_mem(addr), {}, {}}} } -emit_std_r_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append(instructions, inst_std_r_mem(dst, addr)) } +emit_std_r_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append_elem(instructions, inst_std_r_mem(dst, addr)) } inst_stdu_r_mem :: #force_inline proc "contextless" (dst: Register, addr: Memory) -> Instruction { return Instruction{mnemonic = .STDU, operand_count = 2, length = 4, ops = {op_reg(dst), op_mem(addr), {}, {}}} } -emit_stdu_r_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append(instructions, inst_stdu_r_mem(dst, addr)) } +emit_stdu_r_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append_elem(instructions, inst_stdu_r_mem(dst, addr)) } inst_stdx_r_mem :: #force_inline proc "contextless" (dst: Register, addr: Memory) -> Instruction { return Instruction{mnemonic = .STDX, operand_count = 2, length = 4, ops = {op_reg(dst), op_mem(addr), {}, {}}} } -emit_stdx_r_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append(instructions, inst_stdx_r_mem(dst, addr)) } +emit_stdx_r_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append_elem(instructions, inst_stdx_r_mem(dst, addr)) } inst_stdux_r_mem :: #force_inline proc "contextless" (dst: Register, addr: Memory) -> Instruction { return Instruction{mnemonic = .STDUX, operand_count = 2, length = 4, ops = {op_reg(dst), op_mem(addr), {}, {}}} } -emit_stdux_r_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append(instructions, inst_stdux_r_mem(dst, addr)) } +emit_stdux_r_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append_elem(instructions, inst_stdux_r_mem(dst, addr)) } inst_stq_r_mem :: #force_inline proc "contextless" (dst: Register, addr: Memory) -> Instruction { return Instruction{mnemonic = .STQ, operand_count = 2, length = 4, ops = {op_reg(dst), op_mem(addr), {}, {}}} } -emit_stq_r_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append(instructions, inst_stq_r_mem(dst, addr)) } +emit_stq_r_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append_elem(instructions, inst_stq_r_mem(dst, addr)) } inst_sthbrx_r_mem :: #force_inline proc "contextless" (dst: Register, addr: Memory) -> Instruction { return Instruction{mnemonic = .STHBRX, operand_count = 2, length = 4, ops = {op_reg(dst), op_mem(addr), {}, {}}} } -emit_sthbrx_r_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append(instructions, inst_sthbrx_r_mem(dst, addr)) } +emit_sthbrx_r_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append_elem(instructions, inst_sthbrx_r_mem(dst, addr)) } inst_stwbrx_r_mem :: #force_inline proc "contextless" (dst: Register, addr: Memory) -> Instruction { return Instruction{mnemonic = .STWBRX, operand_count = 2, length = 4, ops = {op_reg(dst), op_mem(addr), {}, {}}} } -emit_stwbrx_r_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append(instructions, inst_stwbrx_r_mem(dst, addr)) } +emit_stwbrx_r_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append_elem(instructions, inst_stwbrx_r_mem(dst, addr)) } inst_stdbrx_r_mem :: #force_inline proc "contextless" (dst: Register, addr: Memory) -> Instruction { return Instruction{mnemonic = .STDBRX, operand_count = 2, length = 4, ops = {op_reg(dst), op_mem(addr), {}, {}}} } -emit_stdbrx_r_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append(instructions, inst_stdbrx_r_mem(dst, addr)) } +emit_stdbrx_r_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append_elem(instructions, inst_stdbrx_r_mem(dst, addr)) } inst_stmw_r_mem :: #force_inline proc "contextless" (dst: Register, addr: Memory) -> Instruction { return Instruction{mnemonic = .STMW, operand_count = 2, length = 4, ops = {op_reg(dst), op_mem(addr), {}, {}}} } -emit_stmw_r_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append(instructions, inst_stmw_r_mem(dst, addr)) } +emit_stmw_r_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append_elem(instructions, inst_stmw_r_mem(dst, addr)) } inst_stswi_r_r_imm :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .STSWI, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_imm(imm), {}}} } -emit_stswi_r_r_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_stswi_r_r_imm(dst, src, imm)) } +emit_stswi_r_r_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_stswi_r_r_imm(dst, src, imm)) } inst_stswx_r_mem :: #force_inline proc "contextless" (dst: Register, addr: Memory) -> Instruction { return Instruction{mnemonic = .STSWX, operand_count = 2, length = 4, ops = {op_reg(dst), op_mem(addr), {}, {}}} } -emit_stswx_r_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append(instructions, inst_stswx_r_mem(dst, addr)) } +emit_stswx_r_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append_elem(instructions, inst_stswx_r_mem(dst, addr)) } inst_lbarx_r_mem :: #force_inline proc "contextless" (dst: Register, addr: Memory) -> Instruction { return Instruction{mnemonic = .LBARX, operand_count = 2, length = 4, ops = {op_reg(dst), op_mem(addr), {}, {}}} } -emit_lbarx_r_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append(instructions, inst_lbarx_r_mem(dst, addr)) } +emit_lbarx_r_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append_elem(instructions, inst_lbarx_r_mem(dst, addr)) } inst_lharx_r_mem :: #force_inline proc "contextless" (dst: Register, addr: Memory) -> Instruction { return Instruction{mnemonic = .LHARX, operand_count = 2, length = 4, ops = {op_reg(dst), op_mem(addr), {}, {}}} } -emit_lharx_r_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append(instructions, inst_lharx_r_mem(dst, addr)) } +emit_lharx_r_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append_elem(instructions, inst_lharx_r_mem(dst, addr)) } inst_lwarx_r_mem :: #force_inline proc "contextless" (dst: Register, addr: Memory) -> Instruction { return Instruction{mnemonic = .LWARX, operand_count = 2, length = 4, ops = {op_reg(dst), op_mem(addr), {}, {}}} } -emit_lwarx_r_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append(instructions, inst_lwarx_r_mem(dst, addr)) } +emit_lwarx_r_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append_elem(instructions, inst_lwarx_r_mem(dst, addr)) } inst_ldarx_r_mem :: #force_inline proc "contextless" (dst: Register, addr: Memory) -> Instruction { return Instruction{mnemonic = .LDARX, operand_count = 2, length = 4, ops = {op_reg(dst), op_mem(addr), {}, {}}} } -emit_ldarx_r_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append(instructions, inst_ldarx_r_mem(dst, addr)) } +emit_ldarx_r_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append_elem(instructions, inst_ldarx_r_mem(dst, addr)) } inst_lqarx_r_mem :: #force_inline proc "contextless" (dst: Register, addr: Memory) -> Instruction { return Instruction{mnemonic = .LQARX, operand_count = 2, length = 4, ops = {op_reg(dst), op_mem(addr), {}, {}}} } -emit_lqarx_r_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append(instructions, inst_lqarx_r_mem(dst, addr)) } +emit_lqarx_r_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append_elem(instructions, inst_lqarx_r_mem(dst, addr)) } inst_stbcx_dot_r_mem :: #force_inline proc "contextless" (dst: Register, addr: Memory) -> Instruction { return Instruction{mnemonic = .STBCX_DOT, operand_count = 2, length = 4, ops = {op_reg(dst), op_mem(addr), {}, {}}} } -emit_stbcx_dot_r_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append(instructions, inst_stbcx_dot_r_mem(dst, addr)) } +emit_stbcx_dot_r_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append_elem(instructions, inst_stbcx_dot_r_mem(dst, addr)) } inst_sthcx_dot_r_mem :: #force_inline proc "contextless" (dst: Register, addr: Memory) -> Instruction { return Instruction{mnemonic = .STHCX_DOT, operand_count = 2, length = 4, ops = {op_reg(dst), op_mem(addr), {}, {}}} } -emit_sthcx_dot_r_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append(instructions, inst_sthcx_dot_r_mem(dst, addr)) } +emit_sthcx_dot_r_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append_elem(instructions, inst_sthcx_dot_r_mem(dst, addr)) } inst_stwcx_dot_r_mem :: #force_inline proc "contextless" (dst: Register, addr: Memory) -> Instruction { return Instruction{mnemonic = .STWCX_DOT, operand_count = 2, length = 4, ops = {op_reg(dst), op_mem(addr), {}, {}}} } -emit_stwcx_dot_r_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append(instructions, inst_stwcx_dot_r_mem(dst, addr)) } +emit_stwcx_dot_r_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append_elem(instructions, inst_stwcx_dot_r_mem(dst, addr)) } inst_stdcx_dot_r_mem :: #force_inline proc "contextless" (dst: Register, addr: Memory) -> Instruction { return Instruction{mnemonic = .STDCX_DOT, operand_count = 2, length = 4, ops = {op_reg(dst), op_mem(addr), {}, {}}} } -emit_stdcx_dot_r_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append(instructions, inst_stdcx_dot_r_mem(dst, addr)) } +emit_stdcx_dot_r_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append_elem(instructions, inst_stdcx_dot_r_mem(dst, addr)) } inst_stqcx_dot_r_mem :: #force_inline proc "contextless" (dst: Register, addr: Memory) -> Instruction { return Instruction{mnemonic = .STQCX_DOT, operand_count = 2, length = 4, ops = {op_reg(dst), op_mem(addr), {}, {}}} } -emit_stqcx_dot_r_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append(instructions, inst_stqcx_dot_r_mem(dst, addr)) } +emit_stqcx_dot_r_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append_elem(instructions, inst_stqcx_dot_r_mem(dst, addr)) } inst_addi_r_rz_simm :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .ADDI, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_imm(imm), {}}} } -emit_addi_r_rz_simm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_addi_r_rz_simm(dst, src, imm)) } +emit_addi_r_rz_simm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_addi_r_rz_simm(dst, src, imm)) } inst_addis_r_rz_simm :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .ADDIS, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_imm(imm), {}}} } -emit_addis_r_rz_simm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_addis_r_rz_simm(dst, src, imm)) } +emit_addis_r_rz_simm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_addis_r_rz_simm(dst, src, imm)) } inst_addic_r_r_simm :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .ADDIC, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_imm(imm), {}}} } -emit_addic_r_r_simm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_addic_r_r_simm(dst, src, imm)) } +emit_addic_r_r_simm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_addic_r_r_simm(dst, src, imm)) } inst_addic_dot_r_r_simm :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .ADDIC_DOT, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_imm(imm), {}}} } -emit_addic_dot_r_r_simm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_addic_dot_r_r_simm(dst, src, imm)) } +emit_addic_dot_r_r_simm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_addic_dot_r_r_simm(dst, src, imm)) } inst_subfic_r_r_simm :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .SUBFIC, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_imm(imm), {}}} } -emit_subfic_r_r_simm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_subfic_r_r_simm(dst, src, imm)) } +emit_subfic_r_r_simm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_subfic_r_r_simm(dst, src, imm)) } inst_addpcis_r_simm :: #force_inline proc "contextless" (dst: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .ADDPCIS, operand_count = 2, length = 4, ops = {op_reg(dst), op_imm(imm), {}, {}}} } -emit_addpcis_r_simm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64) { append(instructions, inst_addpcis_r_simm(dst, imm)) } +emit_addpcis_r_simm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64) { append_elem(instructions, inst_addpcis_r_simm(dst, imm)) } inst_add_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .ADD, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_add_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_add_r_r_r(dst, src, src2)) } +emit_add_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_add_r_r_r(dst, src, src2)) } inst_add_dot_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .ADD_DOT, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_add_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_add_dot_r_r_r(dst, src, src2)) } +emit_add_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_add_dot_r_r_r(dst, src, src2)) } inst_add_o_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .ADD_O, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_add_o_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_add_o_r_r_r(dst, src, src2)) } +emit_add_o_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_add_o_r_r_r(dst, src, src2)) } inst_add_o_dot_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .ADD_O_DOT, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_add_o_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_add_o_dot_r_r_r(dst, src, src2)) } +emit_add_o_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_add_o_dot_r_r_r(dst, src, src2)) } inst_addc_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .ADDC, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_addc_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_addc_r_r_r(dst, src, src2)) } +emit_addc_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_addc_r_r_r(dst, src, src2)) } inst_addc_dot_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .ADDC_DOT, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_addc_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_addc_dot_r_r_r(dst, src, src2)) } +emit_addc_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_addc_dot_r_r_r(dst, src, src2)) } inst_addc_o_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .ADDC_O, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_addc_o_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_addc_o_r_r_r(dst, src, src2)) } +emit_addc_o_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_addc_o_r_r_r(dst, src, src2)) } inst_addc_o_dot_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .ADDC_O_DOT, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_addc_o_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_addc_o_dot_r_r_r(dst, src, src2)) } +emit_addc_o_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_addc_o_dot_r_r_r(dst, src, src2)) } inst_adde_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .ADDE, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_adde_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_adde_r_r_r(dst, src, src2)) } +emit_adde_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_adde_r_r_r(dst, src, src2)) } inst_adde_dot_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .ADDE_DOT, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_adde_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_adde_dot_r_r_r(dst, src, src2)) } +emit_adde_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_adde_dot_r_r_r(dst, src, src2)) } inst_adde_o_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .ADDE_O, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_adde_o_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_adde_o_r_r_r(dst, src, src2)) } +emit_adde_o_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_adde_o_r_r_r(dst, src, src2)) } inst_adde_o_dot_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .ADDE_O_DOT, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_adde_o_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_adde_o_dot_r_r_r(dst, src, src2)) } +emit_adde_o_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_adde_o_dot_r_r_r(dst, src, src2)) } inst_addme_r_r :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .ADDME, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_addme_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_addme_r_r(dst, src)) } +emit_addme_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_addme_r_r(dst, src)) } inst_addme_dot_r_r :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .ADDME_DOT, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_addme_dot_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_addme_dot_r_r(dst, src)) } +emit_addme_dot_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_addme_dot_r_r(dst, src)) } inst_addme_o_r_r :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .ADDME_O, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_addme_o_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_addme_o_r_r(dst, src)) } +emit_addme_o_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_addme_o_r_r(dst, src)) } inst_addme_o_dot_r_r :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .ADDME_O_DOT, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_addme_o_dot_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_addme_o_dot_r_r(dst, src)) } +emit_addme_o_dot_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_addme_o_dot_r_r(dst, src)) } inst_addze_r_r :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .ADDZE, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_addze_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_addze_r_r(dst, src)) } +emit_addze_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_addze_r_r(dst, src)) } inst_addze_dot_r_r :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .ADDZE_DOT, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_addze_dot_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_addze_dot_r_r(dst, src)) } +emit_addze_dot_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_addze_dot_r_r(dst, src)) } inst_addze_o_r_r :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .ADDZE_O, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_addze_o_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_addze_o_r_r(dst, src)) } +emit_addze_o_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_addze_o_r_r(dst, src)) } inst_addze_o_dot_r_r :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .ADDZE_O_DOT, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_addze_o_dot_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_addze_o_dot_r_r(dst, src)) } +emit_addze_o_dot_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_addze_o_dot_r_r(dst, src)) } inst_addex_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .ADDEX, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_addex_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_addex_r_r_r(dst, src, src2)) } +emit_addex_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_addex_r_r_r(dst, src, src2)) } inst_subf_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .SUBF, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_subf_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_subf_r_r_r(dst, src, src2)) } +emit_subf_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_subf_r_r_r(dst, src, src2)) } inst_subf_dot_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .SUBF_DOT, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_subf_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_subf_dot_r_r_r(dst, src, src2)) } +emit_subf_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_subf_dot_r_r_r(dst, src, src2)) } inst_subf_o_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .SUBF_O, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_subf_o_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_subf_o_r_r_r(dst, src, src2)) } +emit_subf_o_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_subf_o_r_r_r(dst, src, src2)) } inst_subf_o_dot_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .SUBF_O_DOT, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_subf_o_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_subf_o_dot_r_r_r(dst, src, src2)) } +emit_subf_o_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_subf_o_dot_r_r_r(dst, src, src2)) } inst_subfc_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .SUBFC, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_subfc_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_subfc_r_r_r(dst, src, src2)) } +emit_subfc_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_subfc_r_r_r(dst, src, src2)) } inst_subfc_dot_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .SUBFC_DOT, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_subfc_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_subfc_dot_r_r_r(dst, src, src2)) } +emit_subfc_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_subfc_dot_r_r_r(dst, src, src2)) } inst_subfc_o_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .SUBFC_O, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_subfc_o_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_subfc_o_r_r_r(dst, src, src2)) } +emit_subfc_o_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_subfc_o_r_r_r(dst, src, src2)) } inst_subfc_o_dot_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .SUBFC_O_DOT, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_subfc_o_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_subfc_o_dot_r_r_r(dst, src, src2)) } +emit_subfc_o_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_subfc_o_dot_r_r_r(dst, src, src2)) } inst_subfe_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .SUBFE, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_subfe_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_subfe_r_r_r(dst, src, src2)) } +emit_subfe_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_subfe_r_r_r(dst, src, src2)) } inst_subfe_dot_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .SUBFE_DOT, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_subfe_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_subfe_dot_r_r_r(dst, src, src2)) } +emit_subfe_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_subfe_dot_r_r_r(dst, src, src2)) } inst_subfe_o_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .SUBFE_O, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_subfe_o_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_subfe_o_r_r_r(dst, src, src2)) } +emit_subfe_o_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_subfe_o_r_r_r(dst, src, src2)) } inst_subfe_o_dot_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .SUBFE_O_DOT, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_subfe_o_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_subfe_o_dot_r_r_r(dst, src, src2)) } +emit_subfe_o_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_subfe_o_dot_r_r_r(dst, src, src2)) } inst_subfme_r_r :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .SUBFME, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_subfme_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_subfme_r_r(dst, src)) } +emit_subfme_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_subfme_r_r(dst, src)) } inst_subfme_dot_r_r :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .SUBFME_DOT, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_subfme_dot_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_subfme_dot_r_r(dst, src)) } +emit_subfme_dot_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_subfme_dot_r_r(dst, src)) } inst_subfme_o_r_r :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .SUBFME_O, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_subfme_o_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_subfme_o_r_r(dst, src)) } +emit_subfme_o_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_subfme_o_r_r(dst, src)) } inst_subfme_o_dot_r_r :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .SUBFME_O_DOT, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_subfme_o_dot_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_subfme_o_dot_r_r(dst, src)) } +emit_subfme_o_dot_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_subfme_o_dot_r_r(dst, src)) } inst_subfze_r_r :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .SUBFZE, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_subfze_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_subfze_r_r(dst, src)) } +emit_subfze_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_subfze_r_r(dst, src)) } inst_subfze_dot_r_r :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .SUBFZE_DOT, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_subfze_dot_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_subfze_dot_r_r(dst, src)) } +emit_subfze_dot_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_subfze_dot_r_r(dst, src)) } inst_subfze_o_r_r :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .SUBFZE_O, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_subfze_o_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_subfze_o_r_r(dst, src)) } +emit_subfze_o_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_subfze_o_r_r(dst, src)) } inst_subfze_o_dot_r_r :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .SUBFZE_O_DOT, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_subfze_o_dot_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_subfze_o_dot_r_r(dst, src)) } +emit_subfze_o_dot_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_subfze_o_dot_r_r(dst, src)) } inst_neg_r_r :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .NEG, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_neg_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_neg_r_r(dst, src)) } +emit_neg_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_neg_r_r(dst, src)) } inst_neg_dot_r_r :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .NEG_DOT, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_neg_dot_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_neg_dot_r_r(dst, src)) } +emit_neg_dot_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_neg_dot_r_r(dst, src)) } inst_neg_o_r_r :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .NEG_O, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_neg_o_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_neg_o_r_r(dst, src)) } +emit_neg_o_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_neg_o_r_r(dst, src)) } inst_neg_o_dot_r_r :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .NEG_O_DOT, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_neg_o_dot_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_neg_o_dot_r_r(dst, src)) } +emit_neg_o_dot_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_neg_o_dot_r_r(dst, src)) } inst_mulli_r_rz_simm :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .MULLI, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_imm(imm), {}}} } -emit_mulli_r_rz_simm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_mulli_r_rz_simm(dst, src, imm)) } +emit_mulli_r_rz_simm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_mulli_r_rz_simm(dst, src, imm)) } inst_mulhw_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .MULHW, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_mulhw_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_mulhw_r_r_r(dst, src, src2)) } +emit_mulhw_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_mulhw_r_r_r(dst, src, src2)) } inst_mulhw_dot_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .MULHW_DOT, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_mulhw_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_mulhw_dot_r_r_r(dst, src, src2)) } +emit_mulhw_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_mulhw_dot_r_r_r(dst, src, src2)) } inst_mulhwu_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .MULHWU, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_mulhwu_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_mulhwu_r_r_r(dst, src, src2)) } +emit_mulhwu_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_mulhwu_r_r_r(dst, src, src2)) } inst_mulhwu_dot_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .MULHWU_DOT, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_mulhwu_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_mulhwu_dot_r_r_r(dst, src, src2)) } +emit_mulhwu_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_mulhwu_dot_r_r_r(dst, src, src2)) } inst_mullw_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .MULLW, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_mullw_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_mullw_r_r_r(dst, src, src2)) } +emit_mullw_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_mullw_r_r_r(dst, src, src2)) } inst_mullw_dot_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .MULLW_DOT, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_mullw_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_mullw_dot_r_r_r(dst, src, src2)) } +emit_mullw_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_mullw_dot_r_r_r(dst, src, src2)) } inst_mullw_o_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .MULLW_O, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_mullw_o_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_mullw_o_r_r_r(dst, src, src2)) } +emit_mullw_o_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_mullw_o_r_r_r(dst, src, src2)) } inst_mullw_o_dot_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .MULLW_O_DOT, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_mullw_o_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_mullw_o_dot_r_r_r(dst, src, src2)) } +emit_mullw_o_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_mullw_o_dot_r_r_r(dst, src, src2)) } inst_mulld_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .MULLD, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_mulld_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_mulld_r_r_r(dst, src, src2)) } +emit_mulld_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_mulld_r_r_r(dst, src, src2)) } inst_mulld_dot_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .MULLD_DOT, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_mulld_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_mulld_dot_r_r_r(dst, src, src2)) } +emit_mulld_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_mulld_dot_r_r_r(dst, src, src2)) } inst_mulld_o_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .MULLD_O, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_mulld_o_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_mulld_o_r_r_r(dst, src, src2)) } +emit_mulld_o_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_mulld_o_r_r_r(dst, src, src2)) } inst_mulld_o_dot_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .MULLD_O_DOT, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_mulld_o_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_mulld_o_dot_r_r_r(dst, src, src2)) } +emit_mulld_o_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_mulld_o_dot_r_r_r(dst, src, src2)) } inst_mulhd_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .MULHD, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_mulhd_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_mulhd_r_r_r(dst, src, src2)) } +emit_mulhd_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_mulhd_r_r_r(dst, src, src2)) } inst_mulhd_dot_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .MULHD_DOT, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_mulhd_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_mulhd_dot_r_r_r(dst, src, src2)) } +emit_mulhd_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_mulhd_dot_r_r_r(dst, src, src2)) } inst_mulhdu_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .MULHDU, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_mulhdu_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_mulhdu_r_r_r(dst, src, src2)) } +emit_mulhdu_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_mulhdu_r_r_r(dst, src, src2)) } inst_mulhdu_dot_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .MULHDU_DOT, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_mulhdu_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_mulhdu_dot_r_r_r(dst, src, src2)) } +emit_mulhdu_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_mulhdu_dot_r_r_r(dst, src, src2)) } inst_maddld_r_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register, src3: Register) -> Instruction { return Instruction{mnemonic = .MADDLD, operand_count = 4, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), op_reg(src3)}} } -emit_maddld_r_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, src3: Register) { append(instructions, inst_maddld_r_r_r_r(dst, src, src2, src3)) } +emit_maddld_r_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, src3: Register) { append_elem(instructions, inst_maddld_r_r_r_r(dst, src, src2, src3)) } inst_maddhd_r_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register, src3: Register) -> Instruction { return Instruction{mnemonic = .MADDHD, operand_count = 4, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), op_reg(src3)}} } -emit_maddhd_r_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, src3: Register) { append(instructions, inst_maddhd_r_r_r_r(dst, src, src2, src3)) } +emit_maddhd_r_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, src3: Register) { append_elem(instructions, inst_maddhd_r_r_r_r(dst, src, src2, src3)) } inst_maddhdu_r_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register, src3: Register) -> Instruction { return Instruction{mnemonic = .MADDHDU, operand_count = 4, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), op_reg(src3)}} } -emit_maddhdu_r_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, src3: Register) { append(instructions, inst_maddhdu_r_r_r_r(dst, src, src2, src3)) } +emit_maddhdu_r_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, src3: Register) { append_elem(instructions, inst_maddhdu_r_r_r_r(dst, src, src2, src3)) } inst_divw_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .DIVW, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_divw_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_divw_r_r_r(dst, src, src2)) } +emit_divw_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_divw_r_r_r(dst, src, src2)) } inst_divw_dot_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .DIVW_DOT, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_divw_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_divw_dot_r_r_r(dst, src, src2)) } +emit_divw_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_divw_dot_r_r_r(dst, src, src2)) } inst_divw_o_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .DIVW_O, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_divw_o_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_divw_o_r_r_r(dst, src, src2)) } +emit_divw_o_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_divw_o_r_r_r(dst, src, src2)) } inst_divw_o_dot_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .DIVW_O_DOT, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_divw_o_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_divw_o_dot_r_r_r(dst, src, src2)) } +emit_divw_o_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_divw_o_dot_r_r_r(dst, src, src2)) } inst_divwu_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .DIVWU, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_divwu_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_divwu_r_r_r(dst, src, src2)) } +emit_divwu_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_divwu_r_r_r(dst, src, src2)) } inst_divwu_dot_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .DIVWU_DOT, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_divwu_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_divwu_dot_r_r_r(dst, src, src2)) } +emit_divwu_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_divwu_dot_r_r_r(dst, src, src2)) } inst_divwu_o_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .DIVWU_O, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_divwu_o_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_divwu_o_r_r_r(dst, src, src2)) } +emit_divwu_o_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_divwu_o_r_r_r(dst, src, src2)) } inst_divwu_o_dot_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .DIVWU_O_DOT, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_divwu_o_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_divwu_o_dot_r_r_r(dst, src, src2)) } +emit_divwu_o_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_divwu_o_dot_r_r_r(dst, src, src2)) } inst_divd_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .DIVD, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_divd_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_divd_r_r_r(dst, src, src2)) } +emit_divd_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_divd_r_r_r(dst, src, src2)) } inst_divd_dot_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .DIVD_DOT, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_divd_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_divd_dot_r_r_r(dst, src, src2)) } +emit_divd_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_divd_dot_r_r_r(dst, src, src2)) } inst_divd_o_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .DIVD_O, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_divd_o_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_divd_o_r_r_r(dst, src, src2)) } +emit_divd_o_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_divd_o_r_r_r(dst, src, src2)) } inst_divd_o_dot_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .DIVD_O_DOT, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_divd_o_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_divd_o_dot_r_r_r(dst, src, src2)) } +emit_divd_o_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_divd_o_dot_r_r_r(dst, src, src2)) } inst_divdu_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .DIVDU, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_divdu_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_divdu_r_r_r(dst, src, src2)) } +emit_divdu_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_divdu_r_r_r(dst, src, src2)) } inst_divdu_dot_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .DIVDU_DOT, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_divdu_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_divdu_dot_r_r_r(dst, src, src2)) } +emit_divdu_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_divdu_dot_r_r_r(dst, src, src2)) } inst_divdu_o_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .DIVDU_O, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_divdu_o_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_divdu_o_r_r_r(dst, src, src2)) } +emit_divdu_o_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_divdu_o_r_r_r(dst, src, src2)) } inst_divdu_o_dot_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .DIVDU_O_DOT, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_divdu_o_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_divdu_o_dot_r_r_r(dst, src, src2)) } +emit_divdu_o_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_divdu_o_dot_r_r_r(dst, src, src2)) } inst_divwe_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .DIVWE, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_divwe_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_divwe_r_r_r(dst, src, src2)) } +emit_divwe_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_divwe_r_r_r(dst, src, src2)) } inst_divwe_dot_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .DIVWE_DOT, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_divwe_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_divwe_dot_r_r_r(dst, src, src2)) } +emit_divwe_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_divwe_dot_r_r_r(dst, src, src2)) } inst_divwe_o_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .DIVWE_O, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_divwe_o_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_divwe_o_r_r_r(dst, src, src2)) } +emit_divwe_o_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_divwe_o_r_r_r(dst, src, src2)) } inst_divwe_o_dot_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .DIVWE_O_DOT, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_divwe_o_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_divwe_o_dot_r_r_r(dst, src, src2)) } +emit_divwe_o_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_divwe_o_dot_r_r_r(dst, src, src2)) } inst_divweu_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .DIVWEU, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_divweu_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_divweu_r_r_r(dst, src, src2)) } +emit_divweu_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_divweu_r_r_r(dst, src, src2)) } inst_divweu_dot_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .DIVWEU_DOT, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_divweu_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_divweu_dot_r_r_r(dst, src, src2)) } +emit_divweu_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_divweu_dot_r_r_r(dst, src, src2)) } inst_divweu_o_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .DIVWEU_O, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_divweu_o_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_divweu_o_r_r_r(dst, src, src2)) } +emit_divweu_o_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_divweu_o_r_r_r(dst, src, src2)) } inst_divweu_o_dot_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .DIVWEU_O_DOT, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_divweu_o_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_divweu_o_dot_r_r_r(dst, src, src2)) } +emit_divweu_o_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_divweu_o_dot_r_r_r(dst, src, src2)) } inst_divde_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .DIVDE, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_divde_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_divde_r_r_r(dst, src, src2)) } +emit_divde_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_divde_r_r_r(dst, src, src2)) } inst_divde_dot_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .DIVDE_DOT, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_divde_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_divde_dot_r_r_r(dst, src, src2)) } +emit_divde_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_divde_dot_r_r_r(dst, src, src2)) } inst_divde_o_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .DIVDE_O, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_divde_o_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_divde_o_r_r_r(dst, src, src2)) } +emit_divde_o_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_divde_o_r_r_r(dst, src, src2)) } inst_divde_o_dot_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .DIVDE_O_DOT, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_divde_o_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_divde_o_dot_r_r_r(dst, src, src2)) } +emit_divde_o_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_divde_o_dot_r_r_r(dst, src, src2)) } inst_divdeu_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .DIVDEU, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_divdeu_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_divdeu_r_r_r(dst, src, src2)) } +emit_divdeu_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_divdeu_r_r_r(dst, src, src2)) } inst_divdeu_dot_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .DIVDEU_DOT, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_divdeu_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_divdeu_dot_r_r_r(dst, src, src2)) } +emit_divdeu_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_divdeu_dot_r_r_r(dst, src, src2)) } inst_divdeu_o_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .DIVDEU_O, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_divdeu_o_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_divdeu_o_r_r_r(dst, src, src2)) } +emit_divdeu_o_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_divdeu_o_r_r_r(dst, src, src2)) } inst_divdeu_o_dot_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .DIVDEU_O_DOT, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_divdeu_o_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_divdeu_o_dot_r_r_r(dst, src, src2)) } +emit_divdeu_o_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_divdeu_o_dot_r_r_r(dst, src, src2)) } inst_modsw_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .MODSW, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_modsw_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_modsw_r_r_r(dst, src, src2)) } +emit_modsw_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_modsw_r_r_r(dst, src, src2)) } inst_moduw_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .MODUW, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_moduw_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_moduw_r_r_r(dst, src, src2)) } +emit_moduw_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_moduw_r_r_r(dst, src, src2)) } inst_modsd_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .MODSD, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_modsd_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_modsd_r_r_r(dst, src, src2)) } +emit_modsd_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_modsd_r_r_r(dst, src, src2)) } inst_modud_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .MODUD, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_modud_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_modud_r_r_r(dst, src, src2)) } +emit_modud_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_modud_r_r_r(dst, src, src2)) } inst_twi_imm_r_simm :: #force_inline proc "contextless" (imm: i64, dst: Register, imm2: i64) -> Instruction { return Instruction{mnemonic = .TWI, operand_count = 3, length = 4, ops = {op_imm(imm), op_reg(dst), op_imm(imm2), {}}} } -emit_twi_imm_r_simm :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, dst: Register, imm2: i64) { append(instructions, inst_twi_imm_r_simm(imm, dst, imm2)) } +emit_twi_imm_r_simm :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, dst: Register, imm2: i64) { append_elem(instructions, inst_twi_imm_r_simm(imm, dst, imm2)) } inst_tw_imm_r_r :: #force_inline proc "contextless" (imm: i64, dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .TW, operand_count = 3, length = 4, ops = {op_imm(imm), op_reg(dst), op_reg(src), {}}} } -emit_tw_imm_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, dst: Register, src: Register) { append(instructions, inst_tw_imm_r_r(imm, dst, src)) } +emit_tw_imm_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, dst: Register, src: Register) { append_elem(instructions, inst_tw_imm_r_r(imm, dst, src)) } inst_tdi_imm_r_simm :: #force_inline proc "contextless" (imm: i64, dst: Register, imm2: i64) -> Instruction { return Instruction{mnemonic = .TDI, operand_count = 3, length = 4, ops = {op_imm(imm), op_reg(dst), op_imm(imm2), {}}} } -emit_tdi_imm_r_simm :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, dst: Register, imm2: i64) { append(instructions, inst_tdi_imm_r_simm(imm, dst, imm2)) } +emit_tdi_imm_r_simm :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, dst: Register, imm2: i64) { append_elem(instructions, inst_tdi_imm_r_simm(imm, dst, imm2)) } inst_td_imm_r_r :: #force_inline proc "contextless" (imm: i64, dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .TD, operand_count = 3, length = 4, ops = {op_imm(imm), op_reg(dst), op_reg(src), {}}} } -emit_td_imm_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, dst: Register, src: Register) { append(instructions, inst_td_imm_r_r(imm, dst, src)) } +emit_td_imm_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, dst: Register, src: Register) { append_elem(instructions, inst_td_imm_r_r(imm, dst, src)) } inst_andi_dot_r_r_uimm :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .ANDI_DOT, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_imm(imm), {}}} } -emit_andi_dot_r_r_uimm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_andi_dot_r_r_uimm(dst, src, imm)) } +emit_andi_dot_r_r_uimm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_andi_dot_r_r_uimm(dst, src, imm)) } inst_andis_dot_r_r_uimm :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .ANDIS_DOT, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_imm(imm), {}}} } -emit_andis_dot_r_r_uimm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_andis_dot_r_r_uimm(dst, src, imm)) } +emit_andis_dot_r_r_uimm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_andis_dot_r_r_uimm(dst, src, imm)) } inst_ori_r_r_uimm :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .ORI, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_imm(imm), {}}} } -emit_ori_r_r_uimm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_ori_r_r_uimm(dst, src, imm)) } +emit_ori_r_r_uimm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_ori_r_r_uimm(dst, src, imm)) } inst_oris_r_r_uimm :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .ORIS, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_imm(imm), {}}} } -emit_oris_r_r_uimm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_oris_r_r_uimm(dst, src, imm)) } +emit_oris_r_r_uimm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_oris_r_r_uimm(dst, src, imm)) } inst_xori_r_r_uimm :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .XORI, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_imm(imm), {}}} } -emit_xori_r_r_uimm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_xori_r_r_uimm(dst, src, imm)) } +emit_xori_r_r_uimm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_xori_r_r_uimm(dst, src, imm)) } inst_xoris_r_r_uimm :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .XORIS, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_imm(imm), {}}} } -emit_xoris_r_r_uimm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_xoris_r_r_uimm(dst, src, imm)) } +emit_xoris_r_r_uimm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_xoris_r_r_uimm(dst, src, imm)) } inst_and_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .AND, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_and_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_and_r_r_r(dst, src, src2)) } +emit_and_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_and_r_r_r(dst, src, src2)) } inst_and_dot_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .AND_DOT, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_and_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_and_dot_r_r_r(dst, src, src2)) } +emit_and_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_and_dot_r_r_r(dst, src, src2)) } inst_or_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .OR, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_or_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_or_r_r_r(dst, src, src2)) } +emit_or_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_or_r_r_r(dst, src, src2)) } inst_or_dot_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .OR_DOT, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_or_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_or_dot_r_r_r(dst, src, src2)) } +emit_or_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_or_dot_r_r_r(dst, src, src2)) } inst_xor_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .XOR, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_xor_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_xor_r_r_r(dst, src, src2)) } +emit_xor_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_xor_r_r_r(dst, src, src2)) } inst_xor_dot_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .XOR_DOT, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_xor_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_xor_dot_r_r_r(dst, src, src2)) } +emit_xor_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_xor_dot_r_r_r(dst, src, src2)) } inst_nand_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .NAND, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_nand_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_nand_r_r_r(dst, src, src2)) } +emit_nand_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_nand_r_r_r(dst, src, src2)) } inst_nand_dot_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .NAND_DOT, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_nand_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_nand_dot_r_r_r(dst, src, src2)) } +emit_nand_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_nand_dot_r_r_r(dst, src, src2)) } inst_nor_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .NOR, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_nor_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_nor_r_r_r(dst, src, src2)) } +emit_nor_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_nor_r_r_r(dst, src, src2)) } inst_nor_dot_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .NOR_DOT, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_nor_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_nor_dot_r_r_r(dst, src, src2)) } +emit_nor_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_nor_dot_r_r_r(dst, src, src2)) } inst_eqv_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EQV, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_eqv_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_eqv_r_r_r(dst, src, src2)) } +emit_eqv_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_eqv_r_r_r(dst, src, src2)) } inst_eqv_dot_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EQV_DOT, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_eqv_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_eqv_dot_r_r_r(dst, src, src2)) } +emit_eqv_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_eqv_dot_r_r_r(dst, src, src2)) } inst_andc_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .ANDC, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_andc_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_andc_r_r_r(dst, src, src2)) } +emit_andc_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_andc_r_r_r(dst, src, src2)) } inst_andc_dot_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .ANDC_DOT, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_andc_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_andc_dot_r_r_r(dst, src, src2)) } +emit_andc_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_andc_dot_r_r_r(dst, src, src2)) } inst_orc_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .ORC, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_orc_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_orc_r_r_r(dst, src, src2)) } +emit_orc_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_orc_r_r_r(dst, src, src2)) } inst_orc_dot_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .ORC_DOT, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_orc_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_orc_dot_r_r_r(dst, src, src2)) } +emit_orc_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_orc_dot_r_r_r(dst, src, src2)) } inst_extsb_r_r :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .EXTSB, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_extsb_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_extsb_r_r(dst, src)) } +emit_extsb_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_extsb_r_r(dst, src)) } inst_extsb_dot_r_r :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .EXTSB_DOT, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_extsb_dot_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_extsb_dot_r_r(dst, src)) } +emit_extsb_dot_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_extsb_dot_r_r(dst, src)) } inst_extsh_r_r :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .EXTSH, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_extsh_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_extsh_r_r(dst, src)) } +emit_extsh_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_extsh_r_r(dst, src)) } inst_extsh_dot_r_r :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .EXTSH_DOT, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_extsh_dot_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_extsh_dot_r_r(dst, src)) } +emit_extsh_dot_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_extsh_dot_r_r(dst, src)) } inst_extsw_r_r :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .EXTSW, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_extsw_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_extsw_r_r(dst, src)) } +emit_extsw_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_extsw_r_r(dst, src)) } inst_extsw_dot_r_r :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .EXTSW_DOT, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_extsw_dot_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_extsw_dot_r_r(dst, src)) } +emit_extsw_dot_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_extsw_dot_r_r(dst, src)) } inst_cntlzw_r_r :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .CNTLZW, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_cntlzw_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_cntlzw_r_r(dst, src)) } +emit_cntlzw_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_cntlzw_r_r(dst, src)) } inst_cntlzw_dot_r_r :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .CNTLZW_DOT, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_cntlzw_dot_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_cntlzw_dot_r_r(dst, src)) } +emit_cntlzw_dot_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_cntlzw_dot_r_r(dst, src)) } inst_cntlzd_r_r :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .CNTLZD, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_cntlzd_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_cntlzd_r_r(dst, src)) } +emit_cntlzd_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_cntlzd_r_r(dst, src)) } inst_cntlzd_dot_r_r :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .CNTLZD_DOT, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_cntlzd_dot_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_cntlzd_dot_r_r(dst, src)) } +emit_cntlzd_dot_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_cntlzd_dot_r_r(dst, src)) } inst_cnttzw_r_r :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .CNTTZW, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_cnttzw_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_cnttzw_r_r(dst, src)) } +emit_cnttzw_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_cnttzw_r_r(dst, src)) } inst_cnttzw_dot_r_r :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .CNTTZW_DOT, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_cnttzw_dot_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_cnttzw_dot_r_r(dst, src)) } +emit_cnttzw_dot_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_cnttzw_dot_r_r(dst, src)) } inst_cnttzd_r_r :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .CNTTZD, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_cnttzd_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_cnttzd_r_r(dst, src)) } +emit_cnttzd_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_cnttzd_r_r(dst, src)) } inst_cnttzd_dot_r_r :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .CNTTZD_DOT, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_cnttzd_dot_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_cnttzd_dot_r_r(dst, src)) } +emit_cnttzd_dot_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_cnttzd_dot_r_r(dst, src)) } inst_popcntb_r_r :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .POPCNTB, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_popcntb_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_popcntb_r_r(dst, src)) } +emit_popcntb_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_popcntb_r_r(dst, src)) } inst_popcntw_r_r :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .POPCNTW, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_popcntw_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_popcntw_r_r(dst, src)) } +emit_popcntw_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_popcntw_r_r(dst, src)) } inst_popcntd_r_r :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .POPCNTD, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_popcntd_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_popcntd_r_r(dst, src)) } +emit_popcntd_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_popcntd_r_r(dst, src)) } inst_prtyw_r_r :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .PRTYW, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_prtyw_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_prtyw_r_r(dst, src)) } +emit_prtyw_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_prtyw_r_r(dst, src)) } inst_prtyd_r_r :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .PRTYD, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_prtyd_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_prtyd_r_r(dst, src)) } +emit_prtyd_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_prtyd_r_r(dst, src)) } inst_bpermd_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .BPERMD, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_bpermd_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_bpermd_r_r_r(dst, src, src2)) } +emit_bpermd_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_bpermd_r_r_r(dst, src, src2)) } inst_cmpb_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .CMPB, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_cmpb_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_cmpb_r_r_r(dst, src, src2)) } +emit_cmpb_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_cmpb_r_r_r(dst, src, src2)) } inst_slw_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .SLW, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_slw_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_slw_r_r_r(dst, src, src2)) } +emit_slw_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_slw_r_r_r(dst, src, src2)) } inst_slw_dot_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .SLW_DOT, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_slw_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_slw_dot_r_r_r(dst, src, src2)) } +emit_slw_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_slw_dot_r_r_r(dst, src, src2)) } inst_srw_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .SRW, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_srw_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_srw_r_r_r(dst, src, src2)) } +emit_srw_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_srw_r_r_r(dst, src, src2)) } inst_srw_dot_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .SRW_DOT, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_srw_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_srw_dot_r_r_r(dst, src, src2)) } +emit_srw_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_srw_dot_r_r_r(dst, src, src2)) } inst_sraw_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .SRAW, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_sraw_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_sraw_r_r_r(dst, src, src2)) } +emit_sraw_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_sraw_r_r_r(dst, src, src2)) } inst_sraw_dot_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .SRAW_DOT, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_sraw_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_sraw_dot_r_r_r(dst, src, src2)) } +emit_sraw_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_sraw_dot_r_r_r(dst, src, src2)) } inst_srawi_r_r_imm :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .SRAWI, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_imm(imm), {}}} } -emit_srawi_r_r_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_srawi_r_r_imm(dst, src, imm)) } +emit_srawi_r_r_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_srawi_r_r_imm(dst, src, imm)) } inst_srawi_dot_r_r_imm :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .SRAWI_DOT, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_imm(imm), {}}} } -emit_srawi_dot_r_r_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_srawi_dot_r_r_imm(dst, src, imm)) } +emit_srawi_dot_r_r_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_srawi_dot_r_r_imm(dst, src, imm)) } inst_sld_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .SLD, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_sld_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_sld_r_r_r(dst, src, src2)) } +emit_sld_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_sld_r_r_r(dst, src, src2)) } inst_sld_dot_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .SLD_DOT, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_sld_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_sld_dot_r_r_r(dst, src, src2)) } +emit_sld_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_sld_dot_r_r_r(dst, src, src2)) } inst_srd_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .SRD, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_srd_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_srd_r_r_r(dst, src, src2)) } +emit_srd_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_srd_r_r_r(dst, src, src2)) } inst_srd_dot_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .SRD_DOT, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_srd_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_srd_dot_r_r_r(dst, src, src2)) } +emit_srd_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_srd_dot_r_r_r(dst, src, src2)) } inst_srad_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .SRAD, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_srad_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_srad_r_r_r(dst, src, src2)) } +emit_srad_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_srad_r_r_r(dst, src, src2)) } inst_srad_dot_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .SRAD_DOT, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_srad_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_srad_dot_r_r_r(dst, src, src2)) } +emit_srad_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_srad_dot_r_r_r(dst, src, src2)) } inst_sradi_r_r_imm :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .SRADI, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_imm(imm), {}}} } -emit_sradi_r_r_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_sradi_r_r_imm(dst, src, imm)) } +emit_sradi_r_r_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_sradi_r_r_imm(dst, src, imm)) } inst_sradi_dot_r_r_imm :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .SRADI_DOT, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_imm(imm), {}}} } -emit_sradi_dot_r_r_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_sradi_dot_r_r_imm(dst, src, imm)) } +emit_sradi_dot_r_r_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_sradi_dot_r_r_imm(dst, src, imm)) } inst_rlwinm_r_r_imm_imm :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64, imm2: i64) -> Instruction { return Instruction{mnemonic = .RLWINM, operand_count = 4, length = 4, ops = {op_reg(dst), op_reg(src), op_imm(imm), op_imm(imm2)}} } -emit_rlwinm_r_r_imm_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64, imm2: i64) { append(instructions, inst_rlwinm_r_r_imm_imm(dst, src, imm, imm2)) } +emit_rlwinm_r_r_imm_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64, imm2: i64) { append_elem(instructions, inst_rlwinm_r_r_imm_imm(dst, src, imm, imm2)) } inst_rlwinm_dot_r_r_imm_imm :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64, imm2: i64) -> Instruction { return Instruction{mnemonic = .RLWINM_DOT, operand_count = 4, length = 4, ops = {op_reg(dst), op_reg(src), op_imm(imm), op_imm(imm2)}} } -emit_rlwinm_dot_r_r_imm_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64, imm2: i64) { append(instructions, inst_rlwinm_dot_r_r_imm_imm(dst, src, imm, imm2)) } +emit_rlwinm_dot_r_r_imm_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64, imm2: i64) { append_elem(instructions, inst_rlwinm_dot_r_r_imm_imm(dst, src, imm, imm2)) } inst_rlwnm_r_r_r_imm :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .RLWNM, operand_count = 4, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), op_imm(imm)}} } -emit_rlwnm_r_r_r_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, imm: i64) { append(instructions, inst_rlwnm_r_r_r_imm(dst, src, src2, imm)) } +emit_rlwnm_r_r_r_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, imm: i64) { append_elem(instructions, inst_rlwnm_r_r_r_imm(dst, src, src2, imm)) } inst_rlwnm_dot_r_r_r_imm :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .RLWNM_DOT, operand_count = 4, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), op_imm(imm)}} } -emit_rlwnm_dot_r_r_r_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, imm: i64) { append(instructions, inst_rlwnm_dot_r_r_r_imm(dst, src, src2, imm)) } +emit_rlwnm_dot_r_r_r_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, imm: i64) { append_elem(instructions, inst_rlwnm_dot_r_r_r_imm(dst, src, src2, imm)) } inst_rlwimi_r_r_imm_imm :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64, imm2: i64) -> Instruction { return Instruction{mnemonic = .RLWIMI, operand_count = 4, length = 4, ops = {op_reg(dst), op_reg(src), op_imm(imm), op_imm(imm2)}} } -emit_rlwimi_r_r_imm_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64, imm2: i64) { append(instructions, inst_rlwimi_r_r_imm_imm(dst, src, imm, imm2)) } +emit_rlwimi_r_r_imm_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64, imm2: i64) { append_elem(instructions, inst_rlwimi_r_r_imm_imm(dst, src, imm, imm2)) } inst_rlwimi_dot_r_r_imm_imm :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64, imm2: i64) -> Instruction { return Instruction{mnemonic = .RLWIMI_DOT, operand_count = 4, length = 4, ops = {op_reg(dst), op_reg(src), op_imm(imm), op_imm(imm2)}} } -emit_rlwimi_dot_r_r_imm_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64, imm2: i64) { append(instructions, inst_rlwimi_dot_r_r_imm_imm(dst, src, imm, imm2)) } +emit_rlwimi_dot_r_r_imm_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64, imm2: i64) { append_elem(instructions, inst_rlwimi_dot_r_r_imm_imm(dst, src, imm, imm2)) } inst_rldicl_r_r_imm_imm :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64, imm2: i64) -> Instruction { return Instruction{mnemonic = .RLDICL, operand_count = 4, length = 4, ops = {op_reg(dst), op_reg(src), op_imm(imm), op_imm(imm2)}} } -emit_rldicl_r_r_imm_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64, imm2: i64) { append(instructions, inst_rldicl_r_r_imm_imm(dst, src, imm, imm2)) } +emit_rldicl_r_r_imm_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64, imm2: i64) { append_elem(instructions, inst_rldicl_r_r_imm_imm(dst, src, imm, imm2)) } inst_rldicl_dot_r_r_imm_imm :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64, imm2: i64) -> Instruction { return Instruction{mnemonic = .RLDICL_DOT, operand_count = 4, length = 4, ops = {op_reg(dst), op_reg(src), op_imm(imm), op_imm(imm2)}} } -emit_rldicl_dot_r_r_imm_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64, imm2: i64) { append(instructions, inst_rldicl_dot_r_r_imm_imm(dst, src, imm, imm2)) } +emit_rldicl_dot_r_r_imm_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64, imm2: i64) { append_elem(instructions, inst_rldicl_dot_r_r_imm_imm(dst, src, imm, imm2)) } inst_rldicr_r_r_imm_imm :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64, imm2: i64) -> Instruction { return Instruction{mnemonic = .RLDICR, operand_count = 4, length = 4, ops = {op_reg(dst), op_reg(src), op_imm(imm), op_imm(imm2)}} } -emit_rldicr_r_r_imm_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64, imm2: i64) { append(instructions, inst_rldicr_r_r_imm_imm(dst, src, imm, imm2)) } +emit_rldicr_r_r_imm_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64, imm2: i64) { append_elem(instructions, inst_rldicr_r_r_imm_imm(dst, src, imm, imm2)) } inst_rldicr_dot_r_r_imm_imm :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64, imm2: i64) -> Instruction { return Instruction{mnemonic = .RLDICR_DOT, operand_count = 4, length = 4, ops = {op_reg(dst), op_reg(src), op_imm(imm), op_imm(imm2)}} } -emit_rldicr_dot_r_r_imm_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64, imm2: i64) { append(instructions, inst_rldicr_dot_r_r_imm_imm(dst, src, imm, imm2)) } +emit_rldicr_dot_r_r_imm_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64, imm2: i64) { append_elem(instructions, inst_rldicr_dot_r_r_imm_imm(dst, src, imm, imm2)) } inst_rldic_r_r_imm_imm :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64, imm2: i64) -> Instruction { return Instruction{mnemonic = .RLDIC, operand_count = 4, length = 4, ops = {op_reg(dst), op_reg(src), op_imm(imm), op_imm(imm2)}} } -emit_rldic_r_r_imm_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64, imm2: i64) { append(instructions, inst_rldic_r_r_imm_imm(dst, src, imm, imm2)) } +emit_rldic_r_r_imm_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64, imm2: i64) { append_elem(instructions, inst_rldic_r_r_imm_imm(dst, src, imm, imm2)) } inst_rldic_dot_r_r_imm_imm :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64, imm2: i64) -> Instruction { return Instruction{mnemonic = .RLDIC_DOT, operand_count = 4, length = 4, ops = {op_reg(dst), op_reg(src), op_imm(imm), op_imm(imm2)}} } -emit_rldic_dot_r_r_imm_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64, imm2: i64) { append(instructions, inst_rldic_dot_r_r_imm_imm(dst, src, imm, imm2)) } +emit_rldic_dot_r_r_imm_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64, imm2: i64) { append_elem(instructions, inst_rldic_dot_r_r_imm_imm(dst, src, imm, imm2)) } inst_rldimi_r_r_imm_imm :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64, imm2: i64) -> Instruction { return Instruction{mnemonic = .RLDIMI, operand_count = 4, length = 4, ops = {op_reg(dst), op_reg(src), op_imm(imm), op_imm(imm2)}} } -emit_rldimi_r_r_imm_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64, imm2: i64) { append(instructions, inst_rldimi_r_r_imm_imm(dst, src, imm, imm2)) } +emit_rldimi_r_r_imm_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64, imm2: i64) { append_elem(instructions, inst_rldimi_r_r_imm_imm(dst, src, imm, imm2)) } inst_rldimi_dot_r_r_imm_imm :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64, imm2: i64) -> Instruction { return Instruction{mnemonic = .RLDIMI_DOT, operand_count = 4, length = 4, ops = {op_reg(dst), op_reg(src), op_imm(imm), op_imm(imm2)}} } -emit_rldimi_dot_r_r_imm_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64, imm2: i64) { append(instructions, inst_rldimi_dot_r_r_imm_imm(dst, src, imm, imm2)) } +emit_rldimi_dot_r_r_imm_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64, imm2: i64) { append_elem(instructions, inst_rldimi_dot_r_r_imm_imm(dst, src, imm, imm2)) } inst_rldcl_r_r_r_imm :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .RLDCL, operand_count = 4, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), op_imm(imm)}} } -emit_rldcl_r_r_r_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, imm: i64) { append(instructions, inst_rldcl_r_r_r_imm(dst, src, src2, imm)) } +emit_rldcl_r_r_r_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, imm: i64) { append_elem(instructions, inst_rldcl_r_r_r_imm(dst, src, src2, imm)) } inst_rldcl_dot_r_r_r_imm :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .RLDCL_DOT, operand_count = 4, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), op_imm(imm)}} } -emit_rldcl_dot_r_r_r_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, imm: i64) { append(instructions, inst_rldcl_dot_r_r_r_imm(dst, src, src2, imm)) } +emit_rldcl_dot_r_r_r_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, imm: i64) { append_elem(instructions, inst_rldcl_dot_r_r_r_imm(dst, src, src2, imm)) } inst_rldcr_r_r_r_imm :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .RLDCR, operand_count = 4, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), op_imm(imm)}} } -emit_rldcr_r_r_r_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, imm: i64) { append(instructions, inst_rldcr_r_r_r_imm(dst, src, src2, imm)) } +emit_rldcr_r_r_r_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, imm: i64) { append_elem(instructions, inst_rldcr_r_r_r_imm(dst, src, src2, imm)) } inst_rldcr_dot_r_r_r_imm :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .RLDCR_DOT, operand_count = 4, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), op_imm(imm)}} } -emit_rldcr_dot_r_r_r_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, imm: i64) { append(instructions, inst_rldcr_dot_r_r_r_imm(dst, src, src2, imm)) } +emit_rldcr_dot_r_r_r_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, imm: i64) { append_elem(instructions, inst_rldcr_dot_r_r_r_imm(dst, src, src2, imm)) } inst_cmpi_crf_imm_r_simm :: #force_inline proc "contextless" (dst: Register, imm: i64, src: Register, imm2: i64) -> Instruction { return Instruction{mnemonic = .CMPI, operand_count = 4, length = 4, ops = {op_reg(dst), op_imm(imm), op_reg(src), op_imm(imm2)}} } -emit_cmpi_crf_imm_r_simm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64, src: Register, imm2: i64) { append(instructions, inst_cmpi_crf_imm_r_simm(dst, imm, src, imm2)) } +emit_cmpi_crf_imm_r_simm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64, src: Register, imm2: i64) { append_elem(instructions, inst_cmpi_crf_imm_r_simm(dst, imm, src, imm2)) } inst_cmpli_crf_imm_r_uimm :: #force_inline proc "contextless" (dst: Register, imm: i64, src: Register, imm2: i64) -> Instruction { return Instruction{mnemonic = .CMPLI, operand_count = 4, length = 4, ops = {op_reg(dst), op_imm(imm), op_reg(src), op_imm(imm2)}} } -emit_cmpli_crf_imm_r_uimm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64, src: Register, imm2: i64) { append(instructions, inst_cmpli_crf_imm_r_uimm(dst, imm, src, imm2)) } +emit_cmpli_crf_imm_r_uimm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64, src: Register, imm2: i64) { append_elem(instructions, inst_cmpli_crf_imm_r_uimm(dst, imm, src, imm2)) } inst_cmp_crf_imm_r_r :: #force_inline proc "contextless" (dst: Register, imm: i64, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .CMP, operand_count = 4, length = 4, ops = {op_reg(dst), op_imm(imm), op_reg(src), op_reg(src2)}} } -emit_cmp_crf_imm_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64, src: Register, src2: Register) { append(instructions, inst_cmp_crf_imm_r_r(dst, imm, src, src2)) } +emit_cmp_crf_imm_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64, src: Register, src2: Register) { append_elem(instructions, inst_cmp_crf_imm_r_r(dst, imm, src, src2)) } inst_cmpl_crf_imm_r_r :: #force_inline proc "contextless" (dst: Register, imm: i64, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .CMPL, operand_count = 4, length = 4, ops = {op_reg(dst), op_imm(imm), op_reg(src), op_reg(src2)}} } -emit_cmpl_crf_imm_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64, src: Register, src2: Register) { append(instructions, inst_cmpl_crf_imm_r_r(dst, imm, src, src2)) } +emit_cmpl_crf_imm_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64, src: Register, src2: Register) { append_elem(instructions, inst_cmpl_crf_imm_r_r(dst, imm, src, src2)) } inst_cmprb_crf_imm_r_r :: #force_inline proc "contextless" (dst: Register, imm: i64, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .CMPRB, operand_count = 4, length = 4, ops = {op_reg(dst), op_imm(imm), op_reg(src), op_reg(src2)}} } -emit_cmprb_crf_imm_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64, src: Register, src2: Register) { append(instructions, inst_cmprb_crf_imm_r_r(dst, imm, src, src2)) } +emit_cmprb_crf_imm_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64, src: Register, src2: Register) { append_elem(instructions, inst_cmprb_crf_imm_r_r(dst, imm, src, src2)) } inst_cmpeqb_crf_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .CMPEQB, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_cmpeqb_crf_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_cmpeqb_crf_r_r(dst, src, src2)) } +emit_cmpeqb_crf_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_cmpeqb_crf_r_r(dst, src, src2)) } inst_fadd_fr_fr_fr :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .FADD, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_fadd_fr_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_fadd_fr_fr_fr(dst, src, src2)) } +emit_fadd_fr_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_fadd_fr_fr_fr(dst, src, src2)) } inst_fadd_dot_fr_fr_fr :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .FADD_DOT, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_fadd_dot_fr_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_fadd_dot_fr_fr_fr(dst, src, src2)) } +emit_fadd_dot_fr_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_fadd_dot_fr_fr_fr(dst, src, src2)) } inst_fadds_fr_fr_fr :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .FADDS, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_fadds_fr_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_fadds_fr_fr_fr(dst, src, src2)) } +emit_fadds_fr_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_fadds_fr_fr_fr(dst, src, src2)) } inst_fadds_dot_fr_fr_fr :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .FADDS_DOT, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_fadds_dot_fr_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_fadds_dot_fr_fr_fr(dst, src, src2)) } +emit_fadds_dot_fr_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_fadds_dot_fr_fr_fr(dst, src, src2)) } inst_fsub_fr_fr_fr :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .FSUB, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_fsub_fr_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_fsub_fr_fr_fr(dst, src, src2)) } +emit_fsub_fr_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_fsub_fr_fr_fr(dst, src, src2)) } inst_fsub_dot_fr_fr_fr :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .FSUB_DOT, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_fsub_dot_fr_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_fsub_dot_fr_fr_fr(dst, src, src2)) } +emit_fsub_dot_fr_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_fsub_dot_fr_fr_fr(dst, src, src2)) } inst_fsubs_fr_fr_fr :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .FSUBS, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_fsubs_fr_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_fsubs_fr_fr_fr(dst, src, src2)) } +emit_fsubs_fr_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_fsubs_fr_fr_fr(dst, src, src2)) } inst_fsubs_dot_fr_fr_fr :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .FSUBS_DOT, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_fsubs_dot_fr_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_fsubs_dot_fr_fr_fr(dst, src, src2)) } +emit_fsubs_dot_fr_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_fsubs_dot_fr_fr_fr(dst, src, src2)) } inst_fmul_fr_fr_fr :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .FMUL, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_fmul_fr_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_fmul_fr_fr_fr(dst, src, src2)) } +emit_fmul_fr_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_fmul_fr_fr_fr(dst, src, src2)) } inst_fmul_dot_fr_fr_fr :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .FMUL_DOT, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_fmul_dot_fr_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_fmul_dot_fr_fr_fr(dst, src, src2)) } +emit_fmul_dot_fr_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_fmul_dot_fr_fr_fr(dst, src, src2)) } inst_fmuls_fr_fr_fr :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .FMULS, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_fmuls_fr_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_fmuls_fr_fr_fr(dst, src, src2)) } +emit_fmuls_fr_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_fmuls_fr_fr_fr(dst, src, src2)) } inst_fmuls_dot_fr_fr_fr :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .FMULS_DOT, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_fmuls_dot_fr_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_fmuls_dot_fr_fr_fr(dst, src, src2)) } +emit_fmuls_dot_fr_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_fmuls_dot_fr_fr_fr(dst, src, src2)) } inst_fdiv_fr_fr_fr :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .FDIV, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_fdiv_fr_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_fdiv_fr_fr_fr(dst, src, src2)) } +emit_fdiv_fr_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_fdiv_fr_fr_fr(dst, src, src2)) } inst_fdiv_dot_fr_fr_fr :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .FDIV_DOT, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_fdiv_dot_fr_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_fdiv_dot_fr_fr_fr(dst, src, src2)) } +emit_fdiv_dot_fr_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_fdiv_dot_fr_fr_fr(dst, src, src2)) } inst_fdivs_fr_fr_fr :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .FDIVS, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_fdivs_fr_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_fdivs_fr_fr_fr(dst, src, src2)) } +emit_fdivs_fr_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_fdivs_fr_fr_fr(dst, src, src2)) } inst_fdivs_dot_fr_fr_fr :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .FDIVS_DOT, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_fdivs_dot_fr_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_fdivs_dot_fr_fr_fr(dst, src, src2)) } +emit_fdivs_dot_fr_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_fdivs_dot_fr_fr_fr(dst, src, src2)) } inst_fsqrt_fr_fr :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .FSQRT, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_fsqrt_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_fsqrt_fr_fr(dst, src)) } +emit_fsqrt_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_fsqrt_fr_fr(dst, src)) } inst_fsqrt_dot_fr_fr :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .FSQRT_DOT, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_fsqrt_dot_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_fsqrt_dot_fr_fr(dst, src)) } +emit_fsqrt_dot_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_fsqrt_dot_fr_fr(dst, src)) } inst_fsqrts_fr_fr :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .FSQRTS, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_fsqrts_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_fsqrts_fr_fr(dst, src)) } +emit_fsqrts_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_fsqrts_fr_fr(dst, src)) } inst_fsqrts_dot_fr_fr :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .FSQRTS_DOT, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_fsqrts_dot_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_fsqrts_dot_fr_fr(dst, src)) } +emit_fsqrts_dot_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_fsqrts_dot_fr_fr(dst, src)) } inst_fre_fr_fr :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .FRE, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_fre_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_fre_fr_fr(dst, src)) } +emit_fre_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_fre_fr_fr(dst, src)) } inst_fre_dot_fr_fr :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .FRE_DOT, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_fre_dot_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_fre_dot_fr_fr(dst, src)) } +emit_fre_dot_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_fre_dot_fr_fr(dst, src)) } inst_fres_fr_fr :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .FRES, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_fres_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_fres_fr_fr(dst, src)) } +emit_fres_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_fres_fr_fr(dst, src)) } inst_fres_dot_fr_fr :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .FRES_DOT, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_fres_dot_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_fres_dot_fr_fr(dst, src)) } +emit_fres_dot_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_fres_dot_fr_fr(dst, src)) } inst_frsqrte_fr_fr :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .FRSQRTE, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_frsqrte_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_frsqrte_fr_fr(dst, src)) } +emit_frsqrte_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_frsqrte_fr_fr(dst, src)) } inst_frsqrte_dot_fr_fr :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .FRSQRTE_DOT, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_frsqrte_dot_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_frsqrte_dot_fr_fr(dst, src)) } +emit_frsqrte_dot_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_frsqrte_dot_fr_fr(dst, src)) } inst_frsqrtes_fr_fr :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .FRSQRTES, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_frsqrtes_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_frsqrtes_fr_fr(dst, src)) } +emit_frsqrtes_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_frsqrtes_fr_fr(dst, src)) } inst_frsqrtes_dot_fr_fr :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .FRSQRTES_DOT, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_frsqrtes_dot_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_frsqrtes_dot_fr_fr(dst, src)) } +emit_frsqrtes_dot_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_frsqrtes_dot_fr_fr(dst, src)) } inst_fmadd_fr_fr_fr_fr :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register, src3: Register) -> Instruction { return Instruction{mnemonic = .FMADD, operand_count = 4, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), op_reg(src3)}} } -emit_fmadd_fr_fr_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, src3: Register) { append(instructions, inst_fmadd_fr_fr_fr_fr(dst, src, src2, src3)) } +emit_fmadd_fr_fr_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, src3: Register) { append_elem(instructions, inst_fmadd_fr_fr_fr_fr(dst, src, src2, src3)) } inst_fmadd_dot_fr_fr_fr_fr :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register, src3: Register) -> Instruction { return Instruction{mnemonic = .FMADD_DOT, operand_count = 4, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), op_reg(src3)}} } -emit_fmadd_dot_fr_fr_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, src3: Register) { append(instructions, inst_fmadd_dot_fr_fr_fr_fr(dst, src, src2, src3)) } +emit_fmadd_dot_fr_fr_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, src3: Register) { append_elem(instructions, inst_fmadd_dot_fr_fr_fr_fr(dst, src, src2, src3)) } inst_fmadds_fr_fr_fr_fr :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register, src3: Register) -> Instruction { return Instruction{mnemonic = .FMADDS, operand_count = 4, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), op_reg(src3)}} } -emit_fmadds_fr_fr_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, src3: Register) { append(instructions, inst_fmadds_fr_fr_fr_fr(dst, src, src2, src3)) } +emit_fmadds_fr_fr_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, src3: Register) { append_elem(instructions, inst_fmadds_fr_fr_fr_fr(dst, src, src2, src3)) } inst_fmadds_dot_fr_fr_fr_fr :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register, src3: Register) -> Instruction { return Instruction{mnemonic = .FMADDS_DOT, operand_count = 4, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), op_reg(src3)}} } -emit_fmadds_dot_fr_fr_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, src3: Register) { append(instructions, inst_fmadds_dot_fr_fr_fr_fr(dst, src, src2, src3)) } +emit_fmadds_dot_fr_fr_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, src3: Register) { append_elem(instructions, inst_fmadds_dot_fr_fr_fr_fr(dst, src, src2, src3)) } inst_fmsub_fr_fr_fr_fr :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register, src3: Register) -> Instruction { return Instruction{mnemonic = .FMSUB, operand_count = 4, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), op_reg(src3)}} } -emit_fmsub_fr_fr_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, src3: Register) { append(instructions, inst_fmsub_fr_fr_fr_fr(dst, src, src2, src3)) } +emit_fmsub_fr_fr_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, src3: Register) { append_elem(instructions, inst_fmsub_fr_fr_fr_fr(dst, src, src2, src3)) } inst_fmsub_dot_fr_fr_fr_fr :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register, src3: Register) -> Instruction { return Instruction{mnemonic = .FMSUB_DOT, operand_count = 4, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), op_reg(src3)}} } -emit_fmsub_dot_fr_fr_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, src3: Register) { append(instructions, inst_fmsub_dot_fr_fr_fr_fr(dst, src, src2, src3)) } +emit_fmsub_dot_fr_fr_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, src3: Register) { append_elem(instructions, inst_fmsub_dot_fr_fr_fr_fr(dst, src, src2, src3)) } inst_fmsubs_fr_fr_fr_fr :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register, src3: Register) -> Instruction { return Instruction{mnemonic = .FMSUBS, operand_count = 4, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), op_reg(src3)}} } -emit_fmsubs_fr_fr_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, src3: Register) { append(instructions, inst_fmsubs_fr_fr_fr_fr(dst, src, src2, src3)) } +emit_fmsubs_fr_fr_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, src3: Register) { append_elem(instructions, inst_fmsubs_fr_fr_fr_fr(dst, src, src2, src3)) } inst_fmsubs_dot_fr_fr_fr_fr :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register, src3: Register) -> Instruction { return Instruction{mnemonic = .FMSUBS_DOT, operand_count = 4, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), op_reg(src3)}} } -emit_fmsubs_dot_fr_fr_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, src3: Register) { append(instructions, inst_fmsubs_dot_fr_fr_fr_fr(dst, src, src2, src3)) } +emit_fmsubs_dot_fr_fr_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, src3: Register) { append_elem(instructions, inst_fmsubs_dot_fr_fr_fr_fr(dst, src, src2, src3)) } inst_fnmadd_fr_fr_fr_fr :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register, src3: Register) -> Instruction { return Instruction{mnemonic = .FNMADD, operand_count = 4, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), op_reg(src3)}} } -emit_fnmadd_fr_fr_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, src3: Register) { append(instructions, inst_fnmadd_fr_fr_fr_fr(dst, src, src2, src3)) } +emit_fnmadd_fr_fr_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, src3: Register) { append_elem(instructions, inst_fnmadd_fr_fr_fr_fr(dst, src, src2, src3)) } inst_fnmadd_dot_fr_fr_fr_fr :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register, src3: Register) -> Instruction { return Instruction{mnemonic = .FNMADD_DOT, operand_count = 4, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), op_reg(src3)}} } -emit_fnmadd_dot_fr_fr_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, src3: Register) { append(instructions, inst_fnmadd_dot_fr_fr_fr_fr(dst, src, src2, src3)) } +emit_fnmadd_dot_fr_fr_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, src3: Register) { append_elem(instructions, inst_fnmadd_dot_fr_fr_fr_fr(dst, src, src2, src3)) } inst_fnmadds_fr_fr_fr_fr :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register, src3: Register) -> Instruction { return Instruction{mnemonic = .FNMADDS, operand_count = 4, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), op_reg(src3)}} } -emit_fnmadds_fr_fr_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, src3: Register) { append(instructions, inst_fnmadds_fr_fr_fr_fr(dst, src, src2, src3)) } +emit_fnmadds_fr_fr_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, src3: Register) { append_elem(instructions, inst_fnmadds_fr_fr_fr_fr(dst, src, src2, src3)) } inst_fnmadds_dot_fr_fr_fr_fr :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register, src3: Register) -> Instruction { return Instruction{mnemonic = .FNMADDS_DOT, operand_count = 4, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), op_reg(src3)}} } -emit_fnmadds_dot_fr_fr_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, src3: Register) { append(instructions, inst_fnmadds_dot_fr_fr_fr_fr(dst, src, src2, src3)) } +emit_fnmadds_dot_fr_fr_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, src3: Register) { append_elem(instructions, inst_fnmadds_dot_fr_fr_fr_fr(dst, src, src2, src3)) } inst_fnmsub_fr_fr_fr_fr :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register, src3: Register) -> Instruction { return Instruction{mnemonic = .FNMSUB, operand_count = 4, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), op_reg(src3)}} } -emit_fnmsub_fr_fr_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, src3: Register) { append(instructions, inst_fnmsub_fr_fr_fr_fr(dst, src, src2, src3)) } +emit_fnmsub_fr_fr_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, src3: Register) { append_elem(instructions, inst_fnmsub_fr_fr_fr_fr(dst, src, src2, src3)) } inst_fnmsub_dot_fr_fr_fr_fr :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register, src3: Register) -> Instruction { return Instruction{mnemonic = .FNMSUB_DOT, operand_count = 4, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), op_reg(src3)}} } -emit_fnmsub_dot_fr_fr_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, src3: Register) { append(instructions, inst_fnmsub_dot_fr_fr_fr_fr(dst, src, src2, src3)) } +emit_fnmsub_dot_fr_fr_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, src3: Register) { append_elem(instructions, inst_fnmsub_dot_fr_fr_fr_fr(dst, src, src2, src3)) } inst_fnmsubs_fr_fr_fr_fr :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register, src3: Register) -> Instruction { return Instruction{mnemonic = .FNMSUBS, operand_count = 4, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), op_reg(src3)}} } -emit_fnmsubs_fr_fr_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, src3: Register) { append(instructions, inst_fnmsubs_fr_fr_fr_fr(dst, src, src2, src3)) } +emit_fnmsubs_fr_fr_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, src3: Register) { append_elem(instructions, inst_fnmsubs_fr_fr_fr_fr(dst, src, src2, src3)) } inst_fnmsubs_dot_fr_fr_fr_fr :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register, src3: Register) -> Instruction { return Instruction{mnemonic = .FNMSUBS_DOT, operand_count = 4, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), op_reg(src3)}} } -emit_fnmsubs_dot_fr_fr_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, src3: Register) { append(instructions, inst_fnmsubs_dot_fr_fr_fr_fr(dst, src, src2, src3)) } +emit_fnmsubs_dot_fr_fr_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, src3: Register) { append_elem(instructions, inst_fnmsubs_dot_fr_fr_fr_fr(dst, src, src2, src3)) } inst_fsel_fr_fr_fr_fr :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register, src3: Register) -> Instruction { return Instruction{mnemonic = .FSEL, operand_count = 4, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), op_reg(src3)}} } -emit_fsel_fr_fr_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, src3: Register) { append(instructions, inst_fsel_fr_fr_fr_fr(dst, src, src2, src3)) } +emit_fsel_fr_fr_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, src3: Register) { append_elem(instructions, inst_fsel_fr_fr_fr_fr(dst, src, src2, src3)) } inst_fsel_dot_fr_fr_fr_fr :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register, src3: Register) -> Instruction { return Instruction{mnemonic = .FSEL_DOT, operand_count = 4, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), op_reg(src3)}} } -emit_fsel_dot_fr_fr_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, src3: Register) { append(instructions, inst_fsel_dot_fr_fr_fr_fr(dst, src, src2, src3)) } +emit_fsel_dot_fr_fr_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, src3: Register) { append_elem(instructions, inst_fsel_dot_fr_fr_fr_fr(dst, src, src2, src3)) } inst_fcpsgn_fr_fr_fr :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .FCPSGN, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_fcpsgn_fr_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_fcpsgn_fr_fr_fr(dst, src, src2)) } +emit_fcpsgn_fr_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_fcpsgn_fr_fr_fr(dst, src, src2)) } inst_fcpsgn_dot_fr_fr_fr :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .FCPSGN_DOT, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_fcpsgn_dot_fr_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_fcpsgn_dot_fr_fr_fr(dst, src, src2)) } +emit_fcpsgn_dot_fr_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_fcpsgn_dot_fr_fr_fr(dst, src, src2)) } inst_fneg_fr_fr :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .FNEG, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_fneg_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_fneg_fr_fr(dst, src)) } +emit_fneg_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_fneg_fr_fr(dst, src)) } inst_fneg_dot_fr_fr :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .FNEG_DOT, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_fneg_dot_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_fneg_dot_fr_fr(dst, src)) } +emit_fneg_dot_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_fneg_dot_fr_fr(dst, src)) } inst_fabs_fr_fr :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .FABS, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_fabs_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_fabs_fr_fr(dst, src)) } +emit_fabs_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_fabs_fr_fr(dst, src)) } inst_fabs_dot_fr_fr :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .FABS_DOT, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_fabs_dot_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_fabs_dot_fr_fr(dst, src)) } +emit_fabs_dot_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_fabs_dot_fr_fr(dst, src)) } inst_fnabs_fr_fr :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .FNABS, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_fnabs_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_fnabs_fr_fr(dst, src)) } +emit_fnabs_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_fnabs_fr_fr(dst, src)) } inst_fnabs_dot_fr_fr :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .FNABS_DOT, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_fnabs_dot_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_fnabs_dot_fr_fr(dst, src)) } +emit_fnabs_dot_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_fnabs_dot_fr_fr(dst, src)) } inst_fmr_fr_fr :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .FMR, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_fmr_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_fmr_fr_fr(dst, src)) } +emit_fmr_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_fmr_fr_fr(dst, src)) } inst_fmr_dot_fr_fr :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .FMR_DOT, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_fmr_dot_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_fmr_dot_fr_fr(dst, src)) } +emit_fmr_dot_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_fmr_dot_fr_fr(dst, src)) } inst_frsp_fr_fr :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .FRSP, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_frsp_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_frsp_fr_fr(dst, src)) } +emit_frsp_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_frsp_fr_fr(dst, src)) } inst_frsp_dot_fr_fr :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .FRSP_DOT, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_frsp_dot_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_frsp_dot_fr_fr(dst, src)) } +emit_frsp_dot_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_frsp_dot_fr_fr(dst, src)) } inst_fctid_fr_fr :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .FCTID, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_fctid_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_fctid_fr_fr(dst, src)) } +emit_fctid_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_fctid_fr_fr(dst, src)) } inst_fctid_dot_fr_fr :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .FCTID_DOT, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_fctid_dot_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_fctid_dot_fr_fr(dst, src)) } +emit_fctid_dot_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_fctid_dot_fr_fr(dst, src)) } inst_fctidu_fr_fr :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .FCTIDU, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_fctidu_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_fctidu_fr_fr(dst, src)) } +emit_fctidu_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_fctidu_fr_fr(dst, src)) } inst_fctidu_dot_fr_fr :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .FCTIDU_DOT, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_fctidu_dot_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_fctidu_dot_fr_fr(dst, src)) } +emit_fctidu_dot_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_fctidu_dot_fr_fr(dst, src)) } inst_fctidz_fr_fr :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .FCTIDZ, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_fctidz_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_fctidz_fr_fr(dst, src)) } +emit_fctidz_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_fctidz_fr_fr(dst, src)) } inst_fctidz_dot_fr_fr :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .FCTIDZ_DOT, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_fctidz_dot_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_fctidz_dot_fr_fr(dst, src)) } +emit_fctidz_dot_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_fctidz_dot_fr_fr(dst, src)) } inst_fctiduz_fr_fr :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .FCTIDUZ, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_fctiduz_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_fctiduz_fr_fr(dst, src)) } +emit_fctiduz_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_fctiduz_fr_fr(dst, src)) } inst_fctiduz_dot_fr_fr :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .FCTIDUZ_DOT, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_fctiduz_dot_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_fctiduz_dot_fr_fr(dst, src)) } +emit_fctiduz_dot_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_fctiduz_dot_fr_fr(dst, src)) } inst_fctiw_fr_fr :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .FCTIW, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_fctiw_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_fctiw_fr_fr(dst, src)) } +emit_fctiw_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_fctiw_fr_fr(dst, src)) } inst_fctiw_dot_fr_fr :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .FCTIW_DOT, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_fctiw_dot_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_fctiw_dot_fr_fr(dst, src)) } +emit_fctiw_dot_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_fctiw_dot_fr_fr(dst, src)) } inst_fctiwu_fr_fr :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .FCTIWU, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_fctiwu_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_fctiwu_fr_fr(dst, src)) } +emit_fctiwu_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_fctiwu_fr_fr(dst, src)) } inst_fctiwu_dot_fr_fr :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .FCTIWU_DOT, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_fctiwu_dot_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_fctiwu_dot_fr_fr(dst, src)) } +emit_fctiwu_dot_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_fctiwu_dot_fr_fr(dst, src)) } inst_fctiwz_fr_fr :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .FCTIWZ, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_fctiwz_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_fctiwz_fr_fr(dst, src)) } +emit_fctiwz_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_fctiwz_fr_fr(dst, src)) } inst_fctiwz_dot_fr_fr :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .FCTIWZ_DOT, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_fctiwz_dot_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_fctiwz_dot_fr_fr(dst, src)) } +emit_fctiwz_dot_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_fctiwz_dot_fr_fr(dst, src)) } inst_fctiwuz_fr_fr :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .FCTIWUZ, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_fctiwuz_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_fctiwuz_fr_fr(dst, src)) } +emit_fctiwuz_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_fctiwuz_fr_fr(dst, src)) } inst_fctiwuz_dot_fr_fr :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .FCTIWUZ_DOT, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_fctiwuz_dot_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_fctiwuz_dot_fr_fr(dst, src)) } +emit_fctiwuz_dot_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_fctiwuz_dot_fr_fr(dst, src)) } inst_fcfid_fr_fr :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .FCFID, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_fcfid_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_fcfid_fr_fr(dst, src)) } +emit_fcfid_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_fcfid_fr_fr(dst, src)) } inst_fcfid_dot_fr_fr :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .FCFID_DOT, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_fcfid_dot_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_fcfid_dot_fr_fr(dst, src)) } +emit_fcfid_dot_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_fcfid_dot_fr_fr(dst, src)) } inst_fcfidu_fr_fr :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .FCFIDU, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_fcfidu_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_fcfidu_fr_fr(dst, src)) } +emit_fcfidu_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_fcfidu_fr_fr(dst, src)) } inst_fcfidu_dot_fr_fr :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .FCFIDU_DOT, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_fcfidu_dot_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_fcfidu_dot_fr_fr(dst, src)) } +emit_fcfidu_dot_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_fcfidu_dot_fr_fr(dst, src)) } inst_fcfids_fr_fr :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .FCFIDS, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_fcfids_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_fcfids_fr_fr(dst, src)) } +emit_fcfids_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_fcfids_fr_fr(dst, src)) } inst_fcfids_dot_fr_fr :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .FCFIDS_DOT, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_fcfids_dot_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_fcfids_dot_fr_fr(dst, src)) } +emit_fcfids_dot_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_fcfids_dot_fr_fr(dst, src)) } inst_fcfidus_fr_fr :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .FCFIDUS, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_fcfidus_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_fcfidus_fr_fr(dst, src)) } +emit_fcfidus_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_fcfidus_fr_fr(dst, src)) } inst_fcfidus_dot_fr_fr :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .FCFIDUS_DOT, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_fcfidus_dot_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_fcfidus_dot_fr_fr(dst, src)) } +emit_fcfidus_dot_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_fcfidus_dot_fr_fr(dst, src)) } inst_frin_fr_fr :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .FRIN, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_frin_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_frin_fr_fr(dst, src)) } +emit_frin_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_frin_fr_fr(dst, src)) } inst_frin_dot_fr_fr :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .FRIN_DOT, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_frin_dot_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_frin_dot_fr_fr(dst, src)) } +emit_frin_dot_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_frin_dot_fr_fr(dst, src)) } inst_friz_fr_fr :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .FRIZ, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_friz_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_friz_fr_fr(dst, src)) } +emit_friz_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_friz_fr_fr(dst, src)) } inst_friz_dot_fr_fr :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .FRIZ_DOT, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_friz_dot_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_friz_dot_fr_fr(dst, src)) } +emit_friz_dot_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_friz_dot_fr_fr(dst, src)) } inst_frip_fr_fr :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .FRIP, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_frip_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_frip_fr_fr(dst, src)) } +emit_frip_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_frip_fr_fr(dst, src)) } inst_frip_dot_fr_fr :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .FRIP_DOT, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_frip_dot_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_frip_dot_fr_fr(dst, src)) } +emit_frip_dot_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_frip_dot_fr_fr(dst, src)) } inst_frim_fr_fr :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .FRIM, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_frim_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_frim_fr_fr(dst, src)) } +emit_frim_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_frim_fr_fr(dst, src)) } inst_frim_dot_fr_fr :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .FRIM_DOT, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_frim_dot_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_frim_dot_fr_fr(dst, src)) } +emit_frim_dot_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_frim_dot_fr_fr(dst, src)) } inst_fcmpu_crf_fr_fr :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .FCMPU, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_fcmpu_crf_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_fcmpu_crf_fr_fr(dst, src, src2)) } +emit_fcmpu_crf_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_fcmpu_crf_fr_fr(dst, src, src2)) } inst_fcmpo_crf_fr_fr :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .FCMPO, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_fcmpo_crf_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_fcmpo_crf_fr_fr(dst, src, src2)) } +emit_fcmpo_crf_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_fcmpo_crf_fr_fr(dst, src, src2)) } inst_ftdiv_crf_fr_fr :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .FTDIV, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_ftdiv_crf_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_ftdiv_crf_fr_fr(dst, src, src2)) } +emit_ftdiv_crf_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_ftdiv_crf_fr_fr(dst, src, src2)) } inst_ftsqrt_crf_fr :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .FTSQRT, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_ftsqrt_crf_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_ftsqrt_crf_fr(dst, src)) } +emit_ftsqrt_crf_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_ftsqrt_crf_fr(dst, src)) } inst_fmrgew_fr_fr_fr :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .FMRGEW, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_fmrgew_fr_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_fmrgew_fr_fr_fr(dst, src, src2)) } +emit_fmrgew_fr_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_fmrgew_fr_fr_fr(dst, src, src2)) } inst_fmrgow_fr_fr_fr :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .FMRGOW, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_fmrgow_fr_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_fmrgow_fr_fr_fr(dst, src, src2)) } +emit_fmrgow_fr_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_fmrgow_fr_fr_fr(dst, src, src2)) } inst_lfs_fr_mem :: #force_inline proc "contextless" (dst: Register, addr: Memory) -> Instruction { return Instruction{mnemonic = .LFS, operand_count = 2, length = 4, ops = {op_reg(dst), op_mem(addr), {}, {}}} } -emit_lfs_fr_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append(instructions, inst_lfs_fr_mem(dst, addr)) } +emit_lfs_fr_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append_elem(instructions, inst_lfs_fr_mem(dst, addr)) } inst_lfsu_fr_mem :: #force_inline proc "contextless" (dst: Register, addr: Memory) -> Instruction { return Instruction{mnemonic = .LFSU, operand_count = 2, length = 4, ops = {op_reg(dst), op_mem(addr), {}, {}}} } -emit_lfsu_fr_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append(instructions, inst_lfsu_fr_mem(dst, addr)) } +emit_lfsu_fr_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append_elem(instructions, inst_lfsu_fr_mem(dst, addr)) } inst_lfsx_fr_mem :: #force_inline proc "contextless" (dst: Register, addr: Memory) -> Instruction { return Instruction{mnemonic = .LFSX, operand_count = 2, length = 4, ops = {op_reg(dst), op_mem(addr), {}, {}}} } -emit_lfsx_fr_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append(instructions, inst_lfsx_fr_mem(dst, addr)) } +emit_lfsx_fr_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append_elem(instructions, inst_lfsx_fr_mem(dst, addr)) } inst_lfsux_fr_mem :: #force_inline proc "contextless" (dst: Register, addr: Memory) -> Instruction { return Instruction{mnemonic = .LFSUX, operand_count = 2, length = 4, ops = {op_reg(dst), op_mem(addr), {}, {}}} } -emit_lfsux_fr_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append(instructions, inst_lfsux_fr_mem(dst, addr)) } +emit_lfsux_fr_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append_elem(instructions, inst_lfsux_fr_mem(dst, addr)) } inst_lfd_fr_mem :: #force_inline proc "contextless" (dst: Register, addr: Memory) -> Instruction { return Instruction{mnemonic = .LFD, operand_count = 2, length = 4, ops = {op_reg(dst), op_mem(addr), {}, {}}} } -emit_lfd_fr_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append(instructions, inst_lfd_fr_mem(dst, addr)) } +emit_lfd_fr_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append_elem(instructions, inst_lfd_fr_mem(dst, addr)) } inst_lfdu_fr_mem :: #force_inline proc "contextless" (dst: Register, addr: Memory) -> Instruction { return Instruction{mnemonic = .LFDU, operand_count = 2, length = 4, ops = {op_reg(dst), op_mem(addr), {}, {}}} } -emit_lfdu_fr_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append(instructions, inst_lfdu_fr_mem(dst, addr)) } +emit_lfdu_fr_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append_elem(instructions, inst_lfdu_fr_mem(dst, addr)) } inst_lfdx_fr_mem :: #force_inline proc "contextless" (dst: Register, addr: Memory) -> Instruction { return Instruction{mnemonic = .LFDX, operand_count = 2, length = 4, ops = {op_reg(dst), op_mem(addr), {}, {}}} } -emit_lfdx_fr_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append(instructions, inst_lfdx_fr_mem(dst, addr)) } +emit_lfdx_fr_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append_elem(instructions, inst_lfdx_fr_mem(dst, addr)) } inst_lfdux_fr_mem :: #force_inline proc "contextless" (dst: Register, addr: Memory) -> Instruction { return Instruction{mnemonic = .LFDUX, operand_count = 2, length = 4, ops = {op_reg(dst), op_mem(addr), {}, {}}} } -emit_lfdux_fr_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append(instructions, inst_lfdux_fr_mem(dst, addr)) } +emit_lfdux_fr_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append_elem(instructions, inst_lfdux_fr_mem(dst, addr)) } inst_lfiwax_fr_mem :: #force_inline proc "contextless" (dst: Register, addr: Memory) -> Instruction { return Instruction{mnemonic = .LFIWAX, operand_count = 2, length = 4, ops = {op_reg(dst), op_mem(addr), {}, {}}} } -emit_lfiwax_fr_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append(instructions, inst_lfiwax_fr_mem(dst, addr)) } +emit_lfiwax_fr_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append_elem(instructions, inst_lfiwax_fr_mem(dst, addr)) } inst_lfiwzx_fr_mem :: #force_inline proc "contextless" (dst: Register, addr: Memory) -> Instruction { return Instruction{mnemonic = .LFIWZX, operand_count = 2, length = 4, ops = {op_reg(dst), op_mem(addr), {}, {}}} } -emit_lfiwzx_fr_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append(instructions, inst_lfiwzx_fr_mem(dst, addr)) } +emit_lfiwzx_fr_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append_elem(instructions, inst_lfiwzx_fr_mem(dst, addr)) } inst_lfdp_fr_mem :: #force_inline proc "contextless" (dst: Register, addr: Memory) -> Instruction { return Instruction{mnemonic = .LFDP, operand_count = 2, length = 4, ops = {op_reg(dst), op_mem(addr), {}, {}}} } -emit_lfdp_fr_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append(instructions, inst_lfdp_fr_mem(dst, addr)) } +emit_lfdp_fr_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append_elem(instructions, inst_lfdp_fr_mem(dst, addr)) } inst_lfdpx_fr_mem :: #force_inline proc "contextless" (dst: Register, addr: Memory) -> Instruction { return Instruction{mnemonic = .LFDPX, operand_count = 2, length = 4, ops = {op_reg(dst), op_mem(addr), {}, {}}} } -emit_lfdpx_fr_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append(instructions, inst_lfdpx_fr_mem(dst, addr)) } +emit_lfdpx_fr_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append_elem(instructions, inst_lfdpx_fr_mem(dst, addr)) } inst_stfs_fr_mem :: #force_inline proc "contextless" (dst: Register, addr: Memory) -> Instruction { return Instruction{mnemonic = .STFS, operand_count = 2, length = 4, ops = {op_reg(dst), op_mem(addr), {}, {}}} } -emit_stfs_fr_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append(instructions, inst_stfs_fr_mem(dst, addr)) } +emit_stfs_fr_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append_elem(instructions, inst_stfs_fr_mem(dst, addr)) } inst_stfsu_fr_mem :: #force_inline proc "contextless" (dst: Register, addr: Memory) -> Instruction { return Instruction{mnemonic = .STFSU, operand_count = 2, length = 4, ops = {op_reg(dst), op_mem(addr), {}, {}}} } -emit_stfsu_fr_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append(instructions, inst_stfsu_fr_mem(dst, addr)) } +emit_stfsu_fr_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append_elem(instructions, inst_stfsu_fr_mem(dst, addr)) } inst_stfsx_fr_mem :: #force_inline proc "contextless" (dst: Register, addr: Memory) -> Instruction { return Instruction{mnemonic = .STFSX, operand_count = 2, length = 4, ops = {op_reg(dst), op_mem(addr), {}, {}}} } -emit_stfsx_fr_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append(instructions, inst_stfsx_fr_mem(dst, addr)) } +emit_stfsx_fr_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append_elem(instructions, inst_stfsx_fr_mem(dst, addr)) } inst_stfsux_fr_mem :: #force_inline proc "contextless" (dst: Register, addr: Memory) -> Instruction { return Instruction{mnemonic = .STFSUX, operand_count = 2, length = 4, ops = {op_reg(dst), op_mem(addr), {}, {}}} } -emit_stfsux_fr_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append(instructions, inst_stfsux_fr_mem(dst, addr)) } +emit_stfsux_fr_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append_elem(instructions, inst_stfsux_fr_mem(dst, addr)) } inst_stfd_fr_mem :: #force_inline proc "contextless" (dst: Register, addr: Memory) -> Instruction { return Instruction{mnemonic = .STFD, operand_count = 2, length = 4, ops = {op_reg(dst), op_mem(addr), {}, {}}} } -emit_stfd_fr_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append(instructions, inst_stfd_fr_mem(dst, addr)) } +emit_stfd_fr_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append_elem(instructions, inst_stfd_fr_mem(dst, addr)) } inst_stfdu_fr_mem :: #force_inline proc "contextless" (dst: Register, addr: Memory) -> Instruction { return Instruction{mnemonic = .STFDU, operand_count = 2, length = 4, ops = {op_reg(dst), op_mem(addr), {}, {}}} } -emit_stfdu_fr_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append(instructions, inst_stfdu_fr_mem(dst, addr)) } +emit_stfdu_fr_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append_elem(instructions, inst_stfdu_fr_mem(dst, addr)) } inst_stfdx_fr_mem :: #force_inline proc "contextless" (dst: Register, addr: Memory) -> Instruction { return Instruction{mnemonic = .STFDX, operand_count = 2, length = 4, ops = {op_reg(dst), op_mem(addr), {}, {}}} } -emit_stfdx_fr_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append(instructions, inst_stfdx_fr_mem(dst, addr)) } +emit_stfdx_fr_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append_elem(instructions, inst_stfdx_fr_mem(dst, addr)) } inst_stfdux_fr_mem :: #force_inline proc "contextless" (dst: Register, addr: Memory) -> Instruction { return Instruction{mnemonic = .STFDUX, operand_count = 2, length = 4, ops = {op_reg(dst), op_mem(addr), {}, {}}} } -emit_stfdux_fr_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append(instructions, inst_stfdux_fr_mem(dst, addr)) } +emit_stfdux_fr_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append_elem(instructions, inst_stfdux_fr_mem(dst, addr)) } inst_stfiwx_fr_mem :: #force_inline proc "contextless" (dst: Register, addr: Memory) -> Instruction { return Instruction{mnemonic = .STFIWX, operand_count = 2, length = 4, ops = {op_reg(dst), op_mem(addr), {}, {}}} } -emit_stfiwx_fr_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append(instructions, inst_stfiwx_fr_mem(dst, addr)) } +emit_stfiwx_fr_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append_elem(instructions, inst_stfiwx_fr_mem(dst, addr)) } inst_stfdp_fr_mem :: #force_inline proc "contextless" (dst: Register, addr: Memory) -> Instruction { return Instruction{mnemonic = .STFDP, operand_count = 2, length = 4, ops = {op_reg(dst), op_mem(addr), {}, {}}} } -emit_stfdp_fr_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append(instructions, inst_stfdp_fr_mem(dst, addr)) } +emit_stfdp_fr_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append_elem(instructions, inst_stfdp_fr_mem(dst, addr)) } inst_stfdpx_fr_mem :: #force_inline proc "contextless" (dst: Register, addr: Memory) -> Instruction { return Instruction{mnemonic = .STFDPX, operand_count = 2, length = 4, ops = {op_reg(dst), op_mem(addr), {}, {}}} } -emit_stfdpx_fr_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append(instructions, inst_stfdpx_fr_mem(dst, addr)) } +emit_stfdpx_fr_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append_elem(instructions, inst_stfdpx_fr_mem(dst, addr)) } inst_mffs_fr :: #force_inline proc "contextless" (dst: Register) -> Instruction { return Instruction{mnemonic = .MFFS, operand_count = 1, length = 4, ops = {op_reg(dst), {}, {}, {}}} } -emit_mffs_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register) { append(instructions, inst_mffs_fr(dst)) } +emit_mffs_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register) { append_elem(instructions, inst_mffs_fr(dst)) } inst_mffs_dot_fr :: #force_inline proc "contextless" (dst: Register) -> Instruction { return Instruction{mnemonic = .MFFS_DOT, operand_count = 1, length = 4, ops = {op_reg(dst), {}, {}, {}}} } -emit_mffs_dot_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register) { append(instructions, inst_mffs_dot_fr(dst)) } +emit_mffs_dot_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register) { append_elem(instructions, inst_mffs_dot_fr(dst)) } inst_mcrfs_crf_crf :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .MCRFS, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_mcrfs_crf_crf :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_mcrfs_crf_crf(dst, src)) } +emit_mcrfs_crf_crf :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_mcrfs_crf_crf(dst, src)) } inst_mtfsb0_crb :: #force_inline proc "contextless" (dst: Register) -> Instruction { return Instruction{mnemonic = .MTFSB0, operand_count = 1, length = 4, ops = {op_reg(dst), {}, {}, {}}} } -emit_mtfsb0_crb :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register) { append(instructions, inst_mtfsb0_crb(dst)) } +emit_mtfsb0_crb :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register) { append_elem(instructions, inst_mtfsb0_crb(dst)) } inst_mtfsb0_dot_crb :: #force_inline proc "contextless" (dst: Register) -> Instruction { return Instruction{mnemonic = .MTFSB0_DOT, operand_count = 1, length = 4, ops = {op_reg(dst), {}, {}, {}}} } -emit_mtfsb0_dot_crb :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register) { append(instructions, inst_mtfsb0_dot_crb(dst)) } +emit_mtfsb0_dot_crb :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register) { append_elem(instructions, inst_mtfsb0_dot_crb(dst)) } inst_mtfsb1_crb :: #force_inline proc "contextless" (dst: Register) -> Instruction { return Instruction{mnemonic = .MTFSB1, operand_count = 1, length = 4, ops = {op_reg(dst), {}, {}, {}}} } -emit_mtfsb1_crb :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register) { append(instructions, inst_mtfsb1_crb(dst)) } +emit_mtfsb1_crb :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register) { append_elem(instructions, inst_mtfsb1_crb(dst)) } inst_mtfsb1_dot_crb :: #force_inline proc "contextless" (dst: Register) -> Instruction { return Instruction{mnemonic = .MTFSB1_DOT, operand_count = 1, length = 4, ops = {op_reg(dst), {}, {}, {}}} } -emit_mtfsb1_dot_crb :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register) { append(instructions, inst_mtfsb1_dot_crb(dst)) } +emit_mtfsb1_dot_crb :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register) { append_elem(instructions, inst_mtfsb1_dot_crb(dst)) } inst_mtfsfi_crf_imm :: #force_inline proc "contextless" (dst: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .MTFSFI, operand_count = 2, length = 4, ops = {op_reg(dst), op_imm(imm), {}, {}}} } -emit_mtfsfi_crf_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64) { append(instructions, inst_mtfsfi_crf_imm(dst, imm)) } +emit_mtfsfi_crf_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64) { append_elem(instructions, inst_mtfsfi_crf_imm(dst, imm)) } inst_mtfsfi_dot_crf_imm :: #force_inline proc "contextless" (dst: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .MTFSFI_DOT, operand_count = 2, length = 4, ops = {op_reg(dst), op_imm(imm), {}, {}}} } -emit_mtfsfi_dot_crf_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64) { append(instructions, inst_mtfsfi_dot_crf_imm(dst, imm)) } +emit_mtfsfi_dot_crf_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64) { append_elem(instructions, inst_mtfsfi_dot_crf_imm(dst, imm)) } inst_mtfsf_imm_fr :: #force_inline proc "contextless" (imm: i64, dst: Register) -> Instruction { return Instruction{mnemonic = .MTFSF, operand_count = 2, length = 4, ops = {op_imm(imm), op_reg(dst), {}, {}}} } -emit_mtfsf_imm_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, dst: Register) { append(instructions, inst_mtfsf_imm_fr(imm, dst)) } +emit_mtfsf_imm_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, dst: Register) { append_elem(instructions, inst_mtfsf_imm_fr(imm, dst)) } inst_mtfsf_dot_imm_fr :: #force_inline proc "contextless" (imm: i64, dst: Register) -> Instruction { return Instruction{mnemonic = .MTFSF_DOT, operand_count = 2, length = 4, ops = {op_imm(imm), op_reg(dst), {}, {}}} } -emit_mtfsf_dot_imm_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, dst: Register) { append(instructions, inst_mtfsf_dot_imm_fr(imm, dst)) } +emit_mtfsf_dot_imm_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, dst: Register) { append_elem(instructions, inst_mtfsf_dot_imm_fr(imm, dst)) } inst_mfspr_r_spr :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .MFSPR, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_mfspr_r_spr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_mfspr_r_spr(dst, src)) } +emit_mfspr_r_spr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_mfspr_r_spr(dst, src)) } inst_mtspr_spr_r :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .MTSPR, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_mtspr_spr_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_mtspr_spr_r(dst, src)) } +emit_mtspr_spr_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_mtspr_spr_r(dst, src)) } inst_mftb_r_spr :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .MFTB, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_mftb_r_spr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_mftb_r_spr(dst, src)) } +emit_mftb_r_spr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_mftb_r_spr(dst, src)) } inst_mfcr_r :: #force_inline proc "contextless" (dst: Register) -> Instruction { return Instruction{mnemonic = .MFCR, operand_count = 1, length = 4, ops = {op_reg(dst), {}, {}, {}}} } -emit_mfcr_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register) { append(instructions, inst_mfcr_r(dst)) } +emit_mfcr_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register) { append_elem(instructions, inst_mfcr_r(dst)) } inst_mtcrf_imm_r :: #force_inline proc "contextless" (imm: i64, dst: Register) -> Instruction { return Instruction{mnemonic = .MTCRF, operand_count = 2, length = 4, ops = {op_imm(imm), op_reg(dst), {}, {}}} } -emit_mtcrf_imm_r :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, dst: Register) { append(instructions, inst_mtcrf_imm_r(imm, dst)) } +emit_mtcrf_imm_r :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, dst: Register) { append_elem(instructions, inst_mtcrf_imm_r(imm, dst)) } inst_mtocrf_imm_r :: #force_inline proc "contextless" (imm: i64, dst: Register) -> Instruction { return Instruction{mnemonic = .MTOCRF, operand_count = 2, length = 4, ops = {op_imm(imm), op_reg(dst), {}, {}}} } -emit_mtocrf_imm_r :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, dst: Register) { append(instructions, inst_mtocrf_imm_r(imm, dst)) } +emit_mtocrf_imm_r :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, dst: Register) { append_elem(instructions, inst_mtocrf_imm_r(imm, dst)) } inst_mfocrf_r_imm :: #force_inline proc "contextless" (dst: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .MFOCRF, operand_count = 2, length = 4, ops = {op_reg(dst), op_imm(imm), {}, {}}} } -emit_mfocrf_r_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64) { append(instructions, inst_mfocrf_r_imm(dst, imm)) } +emit_mfocrf_r_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64) { append_elem(instructions, inst_mfocrf_r_imm(dst, imm)) } inst_mtmsr_r :: #force_inline proc "contextless" (dst: Register) -> Instruction { return Instruction{mnemonic = .MTMSR, operand_count = 1, length = 4, ops = {op_reg(dst), {}, {}, {}}} } -emit_mtmsr_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register) { append(instructions, inst_mtmsr_r(dst)) } +emit_mtmsr_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register) { append_elem(instructions, inst_mtmsr_r(dst)) } inst_mfmsr_r :: #force_inline proc "contextless" (dst: Register) -> Instruction { return Instruction{mnemonic = .MFMSR, operand_count = 1, length = 4, ops = {op_reg(dst), {}, {}, {}}} } -emit_mfmsr_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register) { append(instructions, inst_mfmsr_r(dst)) } +emit_mfmsr_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register) { append_elem(instructions, inst_mfmsr_r(dst)) } inst_mtmsrd_r :: #force_inline proc "contextless" (dst: Register) -> Instruction { return Instruction{mnemonic = .MTMSRD, operand_count = 1, length = 4, ops = {op_reg(dst), {}, {}, {}}} } -emit_mtmsrd_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register) { append(instructions, inst_mtmsrd_r(dst)) } +emit_mtmsrd_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register) { append_elem(instructions, inst_mtmsrd_r(dst)) } inst_sc_hv_imm :: #force_inline proc "contextless" (imm: i64) -> Instruction { return Instruction{mnemonic = .SC_HV, operand_count = 1, length = 4, ops = {op_imm(imm), {}, {}, {}}} } -emit_sc_hv_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64) { append(instructions, inst_sc_hv_imm(imm)) } +emit_sc_hv_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64) { append_elem(instructions, inst_sc_hv_imm(imm)) } inst_rfi_none :: #force_inline proc "contextless" () -> Instruction { return Instruction{mnemonic = .RFI, operand_count = 0, length = 4, ops = {{}, {}, {}, {}}} } -emit_rfi_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_rfi_none()) } +emit_rfi_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_rfi_none()) } inst_rfid_none :: #force_inline proc "contextless" () -> Instruction { return Instruction{mnemonic = .RFID, operand_count = 0, length = 4, ops = {{}, {}, {}, {}}} } -emit_rfid_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_rfid_none()) } +emit_rfid_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_rfid_none()) } inst_hrfid_none :: #force_inline proc "contextless" () -> Instruction { return Instruction{mnemonic = .HRFID, operand_count = 0, length = 4, ops = {{}, {}, {}, {}}} } -emit_hrfid_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_hrfid_none()) } +emit_hrfid_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_hrfid_none()) } inst_sync_none :: #force_inline proc "contextless" () -> Instruction { return Instruction{mnemonic = .SYNC, operand_count = 0, length = 4, ops = {{}, {}, {}, {}}} } -emit_sync_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_sync_none()) } +emit_sync_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_sync_none()) } inst_lwsync_none :: #force_inline proc "contextless" () -> Instruction { return Instruction{mnemonic = .LWSYNC, operand_count = 0, length = 4, ops = {{}, {}, {}, {}}} } -emit_lwsync_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_lwsync_none()) } +emit_lwsync_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_lwsync_none()) } inst_ptesync_none :: #force_inline proc "contextless" () -> Instruction { return Instruction{mnemonic = .PTESYNC, operand_count = 0, length = 4, ops = {{}, {}, {}, {}}} } -emit_ptesync_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_ptesync_none()) } +emit_ptesync_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_ptesync_none()) } inst_eieio_none :: #force_inline proc "contextless" () -> Instruction { return Instruction{mnemonic = .EIEIO, operand_count = 0, length = 4, ops = {{}, {}, {}, {}}} } -emit_eieio_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_eieio_none()) } +emit_eieio_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_eieio_none()) } inst_isync_none :: #force_inline proc "contextless" () -> Instruction { return Instruction{mnemonic = .ISYNC, operand_count = 0, length = 4, ops = {{}, {}, {}, {}}} } -emit_isync_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_isync_none()) } +emit_isync_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_isync_none()) } inst_dcbt_mem :: #force_inline proc "contextless" (addr: Memory) -> Instruction { return Instruction{mnemonic = .DCBT, operand_count = 1, length = 4, ops = {op_mem(addr), {}, {}, {}}} } -emit_dcbt_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, addr: Memory) { append(instructions, inst_dcbt_mem(addr)) } +emit_dcbt_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, addr: Memory) { append_elem(instructions, inst_dcbt_mem(addr)) } inst_dcbtst_mem :: #force_inline proc "contextless" (addr: Memory) -> Instruction { return Instruction{mnemonic = .DCBTST, operand_count = 1, length = 4, ops = {op_mem(addr), {}, {}, {}}} } -emit_dcbtst_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, addr: Memory) { append(instructions, inst_dcbtst_mem(addr)) } +emit_dcbtst_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, addr: Memory) { append_elem(instructions, inst_dcbtst_mem(addr)) } inst_dcba_mem :: #force_inline proc "contextless" (addr: Memory) -> Instruction { return Instruction{mnemonic = .DCBA, operand_count = 1, length = 4, ops = {op_mem(addr), {}, {}, {}}} } -emit_dcba_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, addr: Memory) { append(instructions, inst_dcba_mem(addr)) } +emit_dcba_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, addr: Memory) { append_elem(instructions, inst_dcba_mem(addr)) } inst_dcbf_mem :: #force_inline proc "contextless" (addr: Memory) -> Instruction { return Instruction{mnemonic = .DCBF, operand_count = 1, length = 4, ops = {op_mem(addr), {}, {}, {}}} } -emit_dcbf_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, addr: Memory) { append(instructions, inst_dcbf_mem(addr)) } +emit_dcbf_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, addr: Memory) { append_elem(instructions, inst_dcbf_mem(addr)) } inst_dcbz_mem :: #force_inline proc "contextless" (addr: Memory) -> Instruction { return Instruction{mnemonic = .DCBZ, operand_count = 1, length = 4, ops = {op_mem(addr), {}, {}, {}}} } -emit_dcbz_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, addr: Memory) { append(instructions, inst_dcbz_mem(addr)) } +emit_dcbz_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, addr: Memory) { append_elem(instructions, inst_dcbz_mem(addr)) } inst_dcbzl_mem :: #force_inline proc "contextless" (addr: Memory) -> Instruction { return Instruction{mnemonic = .DCBZL, operand_count = 1, length = 4, ops = {op_mem(addr), {}, {}, {}}} } -emit_dcbzl_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, addr: Memory) { append(instructions, inst_dcbzl_mem(addr)) } +emit_dcbzl_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, addr: Memory) { append_elem(instructions, inst_dcbzl_mem(addr)) } inst_icbi_mem :: #force_inline proc "contextless" (addr: Memory) -> Instruction { return Instruction{mnemonic = .ICBI, operand_count = 1, length = 4, ops = {op_mem(addr), {}, {}, {}}} } -emit_icbi_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, addr: Memory) { append(instructions, inst_icbi_mem(addr)) } +emit_icbi_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, addr: Memory) { append_elem(instructions, inst_icbi_mem(addr)) } inst_icbt_mem :: #force_inline proc "contextless" (addr: Memory) -> Instruction { return Instruction{mnemonic = .ICBT, operand_count = 1, length = 4, ops = {op_mem(addr), {}, {}, {}}} } -emit_icbt_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, addr: Memory) { append(instructions, inst_icbt_mem(addr)) } +emit_icbt_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, addr: Memory) { append_elem(instructions, inst_icbt_mem(addr)) } inst_nap_none :: #force_inline proc "contextless" () -> Instruction { return Instruction{mnemonic = .NAP, operand_count = 0, length = 4, ops = {{}, {}, {}, {}}} } -emit_nap_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_nap_none()) } +emit_nap_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_nap_none()) } inst_wait_none :: #force_inline proc "contextless" () -> Instruction { return Instruction{mnemonic = .WAIT, operand_count = 0, length = 4, ops = {{}, {}, {}, {}}} } -emit_wait_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_wait_none()) } +emit_wait_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_wait_none()) } inst_msync_none :: #force_inline proc "contextless" () -> Instruction { return Instruction{mnemonic = .MSYNC, operand_count = 0, length = 4, ops = {{}, {}, {}, {}}} } -emit_msync_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_msync_none()) } +emit_msync_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_msync_none()) } inst_tlbie_r_r :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .TLBIE, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_tlbie_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_tlbie_r_r(dst, src)) } +emit_tlbie_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_tlbie_r_r(dst, src)) } inst_tlbiel_r :: #force_inline proc "contextless" (dst: Register) -> Instruction { return Instruction{mnemonic = .TLBIEL, operand_count = 1, length = 4, ops = {op_reg(dst), {}, {}, {}}} } -emit_tlbiel_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register) { append(instructions, inst_tlbiel_r(dst)) } +emit_tlbiel_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register) { append_elem(instructions, inst_tlbiel_r(dst)) } inst_tlbsync_none :: #force_inline proc "contextless" () -> Instruction { return Instruction{mnemonic = .TLBSYNC, operand_count = 0, length = 4, ops = {{}, {}, {}, {}}} } -emit_tlbsync_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_tlbsync_none()) } +emit_tlbsync_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_tlbsync_none()) } inst_slbie_r :: #force_inline proc "contextless" (dst: Register) -> Instruction { return Instruction{mnemonic = .SLBIE, operand_count = 1, length = 4, ops = {op_reg(dst), {}, {}, {}}} } -emit_slbie_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register) { append(instructions, inst_slbie_r(dst)) } +emit_slbie_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register) { append_elem(instructions, inst_slbie_r(dst)) } inst_slbia_none :: #force_inline proc "contextless" () -> Instruction { return Instruction{mnemonic = .SLBIA, operand_count = 0, length = 4, ops = {{}, {}, {}, {}}} } -emit_slbia_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_slbia_none()) } +emit_slbia_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_slbia_none()) } inst_slbmte_r_r :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .SLBMTE, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_slbmte_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_slbmte_r_r(dst, src)) } +emit_slbmte_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_slbmte_r_r(dst, src)) } inst_slbmfee_r_r :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .SLBMFEE, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_slbmfee_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_slbmfee_r_r(dst, src)) } +emit_slbmfee_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_slbmfee_r_r(dst, src)) } inst_slbmfev_r_r :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .SLBMFEV, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_slbmfev_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_slbmfev_r_r(dst, src)) } +emit_slbmfev_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_slbmfev_r_r(dst, src)) } inst_slbsync_none :: #force_inline proc "contextless" () -> Instruction { return Instruction{mnemonic = .SLBSYNC, operand_count = 0, length = 4, ops = {{}, {}, {}, {}}} } -emit_slbsync_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_slbsync_none()) } +emit_slbsync_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_slbsync_none()) } inst_slbieg_r_r :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .SLBIEG, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_slbieg_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_slbieg_r_r(dst, src)) } +emit_slbieg_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_slbieg_r_r(dst, src)) } inst_darn_r_imm :: #force_inline proc "contextless" (dst: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .DARN, operand_count = 2, length = 4, ops = {op_reg(dst), op_imm(imm), {}, {}}} } -emit_darn_r_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64) { append(instructions, inst_darn_r_imm(dst, imm)) } +emit_darn_r_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64) { append_elem(instructions, inst_darn_r_imm(dst, imm)) } inst_vand_v_v_v :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VAND, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_vand_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vand_v_v_v(dst, src, src2)) } +emit_vand_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vand_v_v_v(dst, src, src2)) } inst_vandc_v_v_v :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VANDC, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_vandc_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vandc_v_v_v(dst, src, src2)) } +emit_vandc_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vandc_v_v_v(dst, src, src2)) } inst_vor_v_v_v :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VOR, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_vor_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vor_v_v_v(dst, src, src2)) } +emit_vor_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vor_v_v_v(dst, src, src2)) } inst_vorc_v_v_v :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VORC, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_vorc_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vorc_v_v_v(dst, src, src2)) } +emit_vorc_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vorc_v_v_v(dst, src, src2)) } inst_vnor_v_v_v :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VNOR, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_vnor_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vnor_v_v_v(dst, src, src2)) } +emit_vnor_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vnor_v_v_v(dst, src, src2)) } inst_vxor_v_v_v :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VXOR, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_vxor_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vxor_v_v_v(dst, src, src2)) } +emit_vxor_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vxor_v_v_v(dst, src, src2)) } inst_veqv_v_v_v :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VEQV, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_veqv_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_veqv_v_v_v(dst, src, src2)) } +emit_veqv_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_veqv_v_v_v(dst, src, src2)) } inst_vnand_v_v_v :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VNAND, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_vnand_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vnand_v_v_v(dst, src, src2)) } +emit_vnand_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vnand_v_v_v(dst, src, src2)) } inst_vsel_v_v_v_v :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register, src3: Register) -> Instruction { return Instruction{mnemonic = .VSEL, operand_count = 4, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), op_reg(src3)}} } -emit_vsel_v_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, src3: Register) { append(instructions, inst_vsel_v_v_v_v(dst, src, src2, src3)) } +emit_vsel_v_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, src3: Register) { append_elem(instructions, inst_vsel_v_v_v_v(dst, src, src2, src3)) } inst_vaddubm_v_v_v :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VADDUBM, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_vaddubm_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vaddubm_v_v_v(dst, src, src2)) } +emit_vaddubm_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vaddubm_v_v_v(dst, src, src2)) } inst_vadduhm_v_v_v :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VADDUHM, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_vadduhm_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vadduhm_v_v_v(dst, src, src2)) } +emit_vadduhm_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vadduhm_v_v_v(dst, src, src2)) } inst_vadduwm_v_v_v :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VADDUWM, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_vadduwm_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vadduwm_v_v_v(dst, src, src2)) } +emit_vadduwm_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vadduwm_v_v_v(dst, src, src2)) } inst_vaddudm_v_v_v :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VADDUDM, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_vaddudm_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vaddudm_v_v_v(dst, src, src2)) } +emit_vaddudm_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vaddudm_v_v_v(dst, src, src2)) } inst_vaddfp_v_v_v :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VADDFP, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_vaddfp_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vaddfp_v_v_v(dst, src, src2)) } +emit_vaddfp_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vaddfp_v_v_v(dst, src, src2)) } inst_vsububm_v_v_v :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VSUBUBM, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_vsububm_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vsububm_v_v_v(dst, src, src2)) } +emit_vsububm_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vsububm_v_v_v(dst, src, src2)) } inst_vsubuhm_v_v_v :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VSUBUHM, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_vsubuhm_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vsubuhm_v_v_v(dst, src, src2)) } +emit_vsubuhm_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vsubuhm_v_v_v(dst, src, src2)) } inst_vsubuwm_v_v_v :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VSUBUWM, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_vsubuwm_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vsubuwm_v_v_v(dst, src, src2)) } +emit_vsubuwm_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vsubuwm_v_v_v(dst, src, src2)) } inst_vsubudm_v_v_v :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VSUBUDM, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_vsubudm_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vsubudm_v_v_v(dst, src, src2)) } +emit_vsubudm_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vsubudm_v_v_v(dst, src, src2)) } inst_vsubfp_v_v_v :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VSUBFP, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_vsubfp_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vsubfp_v_v_v(dst, src, src2)) } +emit_vsubfp_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vsubfp_v_v_v(dst, src, src2)) } inst_vaddcuw_v_v_v :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VADDCUW, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_vaddcuw_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vaddcuw_v_v_v(dst, src, src2)) } +emit_vaddcuw_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vaddcuw_v_v_v(dst, src, src2)) } inst_vaddcuq_v_v_v :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VADDCUQ, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_vaddcuq_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vaddcuq_v_v_v(dst, src, src2)) } +emit_vaddcuq_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vaddcuq_v_v_v(dst, src, src2)) } inst_vaddecuq_v_v_v_v :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register, src3: Register) -> Instruction { return Instruction{mnemonic = .VADDECUQ, operand_count = 4, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), op_reg(src3)}} } -emit_vaddecuq_v_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, src3: Register) { append(instructions, inst_vaddecuq_v_v_v_v(dst, src, src2, src3)) } +emit_vaddecuq_v_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, src3: Register) { append_elem(instructions, inst_vaddecuq_v_v_v_v(dst, src, src2, src3)) } inst_vaddeuqm_v_v_v_v :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register, src3: Register) -> Instruction { return Instruction{mnemonic = .VADDEUQM, operand_count = 4, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), op_reg(src3)}} } -emit_vaddeuqm_v_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, src3: Register) { append(instructions, inst_vaddeuqm_v_v_v_v(dst, src, src2, src3)) } +emit_vaddeuqm_v_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, src3: Register) { append_elem(instructions, inst_vaddeuqm_v_v_v_v(dst, src, src2, src3)) } inst_vsubcuw_v_v_v :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VSUBCUW, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_vsubcuw_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vsubcuw_v_v_v(dst, src, src2)) } +emit_vsubcuw_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vsubcuw_v_v_v(dst, src, src2)) } inst_vsubcuq_v_v_v :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VSUBCUQ, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_vsubcuq_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vsubcuq_v_v_v(dst, src, src2)) } +emit_vsubcuq_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vsubcuq_v_v_v(dst, src, src2)) } inst_vsubecuq_v_v_v_v :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register, src3: Register) -> Instruction { return Instruction{mnemonic = .VSUBECUQ, operand_count = 4, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), op_reg(src3)}} } -emit_vsubecuq_v_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, src3: Register) { append(instructions, inst_vsubecuq_v_v_v_v(dst, src, src2, src3)) } +emit_vsubecuq_v_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, src3: Register) { append_elem(instructions, inst_vsubecuq_v_v_v_v(dst, src, src2, src3)) } inst_vsubeuqm_v_v_v_v :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register, src3: Register) -> Instruction { return Instruction{mnemonic = .VSUBEUQM, operand_count = 4, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), op_reg(src3)}} } -emit_vsubeuqm_v_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, src3: Register) { append(instructions, inst_vsubeuqm_v_v_v_v(dst, src, src2, src3)) } +emit_vsubeuqm_v_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, src3: Register) { append_elem(instructions, inst_vsubeuqm_v_v_v_v(dst, src, src2, src3)) } inst_vaddubs_v_v_v :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VADDUBS, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_vaddubs_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vaddubs_v_v_v(dst, src, src2)) } +emit_vaddubs_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vaddubs_v_v_v(dst, src, src2)) } inst_vadduhs_v_v_v :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VADDUHS, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_vadduhs_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vadduhs_v_v_v(dst, src, src2)) } +emit_vadduhs_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vadduhs_v_v_v(dst, src, src2)) } inst_vadduws_v_v_v :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VADDUWS, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_vadduws_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vadduws_v_v_v(dst, src, src2)) } +emit_vadduws_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vadduws_v_v_v(dst, src, src2)) } inst_vaddsbs_v_v_v :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VADDSBS, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_vaddsbs_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vaddsbs_v_v_v(dst, src, src2)) } +emit_vaddsbs_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vaddsbs_v_v_v(dst, src, src2)) } inst_vaddshs_v_v_v :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VADDSHS, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_vaddshs_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vaddshs_v_v_v(dst, src, src2)) } +emit_vaddshs_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vaddshs_v_v_v(dst, src, src2)) } inst_vaddsws_v_v_v :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VADDSWS, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_vaddsws_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vaddsws_v_v_v(dst, src, src2)) } +emit_vaddsws_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vaddsws_v_v_v(dst, src, src2)) } inst_vsububs_v_v_v :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VSUBUBS, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_vsububs_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vsububs_v_v_v(dst, src, src2)) } +emit_vsububs_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vsububs_v_v_v(dst, src, src2)) } inst_vsubuhs_v_v_v :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VSUBUHS, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_vsubuhs_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vsubuhs_v_v_v(dst, src, src2)) } +emit_vsubuhs_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vsubuhs_v_v_v(dst, src, src2)) } inst_vsubuws_v_v_v :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VSUBUWS, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_vsubuws_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vsubuws_v_v_v(dst, src, src2)) } +emit_vsubuws_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vsubuws_v_v_v(dst, src, src2)) } inst_vsubsbs_v_v_v :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VSUBSBS, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_vsubsbs_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vsubsbs_v_v_v(dst, src, src2)) } +emit_vsubsbs_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vsubsbs_v_v_v(dst, src, src2)) } inst_vsubshs_v_v_v :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VSUBSHS, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_vsubshs_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vsubshs_v_v_v(dst, src, src2)) } +emit_vsubshs_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vsubshs_v_v_v(dst, src, src2)) } inst_vsubsws_v_v_v :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VSUBSWS, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_vsubsws_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vsubsws_v_v_v(dst, src, src2)) } +emit_vsubsws_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vsubsws_v_v_v(dst, src, src2)) } inst_vmulesb_v_v_v :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VMULESB, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_vmulesb_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vmulesb_v_v_v(dst, src, src2)) } +emit_vmulesb_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vmulesb_v_v_v(dst, src, src2)) } inst_vmulesh_v_v_v :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VMULESH, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_vmulesh_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vmulesh_v_v_v(dst, src, src2)) } +emit_vmulesh_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vmulesh_v_v_v(dst, src, src2)) } inst_vmulesw_v_v_v :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VMULESW, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_vmulesw_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vmulesw_v_v_v(dst, src, src2)) } +emit_vmulesw_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vmulesw_v_v_v(dst, src, src2)) } inst_vmuleub_v_v_v :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VMULEUB, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_vmuleub_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vmuleub_v_v_v(dst, src, src2)) } +emit_vmuleub_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vmuleub_v_v_v(dst, src, src2)) } inst_vmuleuh_v_v_v :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VMULEUH, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_vmuleuh_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vmuleuh_v_v_v(dst, src, src2)) } +emit_vmuleuh_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vmuleuh_v_v_v(dst, src, src2)) } inst_vmuleuw_v_v_v :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VMULEUW, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_vmuleuw_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vmuleuw_v_v_v(dst, src, src2)) } +emit_vmuleuw_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vmuleuw_v_v_v(dst, src, src2)) } inst_vmulosb_v_v_v :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VMULOSB, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_vmulosb_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vmulosb_v_v_v(dst, src, src2)) } +emit_vmulosb_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vmulosb_v_v_v(dst, src, src2)) } inst_vmulosh_v_v_v :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VMULOSH, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_vmulosh_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vmulosh_v_v_v(dst, src, src2)) } +emit_vmulosh_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vmulosh_v_v_v(dst, src, src2)) } inst_vmulosw_v_v_v :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VMULOSW, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_vmulosw_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vmulosw_v_v_v(dst, src, src2)) } +emit_vmulosw_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vmulosw_v_v_v(dst, src, src2)) } inst_vmuloub_v_v_v :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VMULOUB, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_vmuloub_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vmuloub_v_v_v(dst, src, src2)) } +emit_vmuloub_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vmuloub_v_v_v(dst, src, src2)) } inst_vmulouh_v_v_v :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VMULOUH, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_vmulouh_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vmulouh_v_v_v(dst, src, src2)) } +emit_vmulouh_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vmulouh_v_v_v(dst, src, src2)) } inst_vmulouw_v_v_v :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VMULOUW, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_vmulouw_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vmulouw_v_v_v(dst, src, src2)) } +emit_vmulouw_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vmulouw_v_v_v(dst, src, src2)) } inst_vmuluwm_v_v_v :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VMULUWM, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_vmuluwm_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vmuluwm_v_v_v(dst, src, src2)) } +emit_vmuluwm_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vmuluwm_v_v_v(dst, src, src2)) } inst_vmsumubm_v_v_v_v :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register, src3: Register) -> Instruction { return Instruction{mnemonic = .VMSUMUBM, operand_count = 4, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), op_reg(src3)}} } -emit_vmsumubm_v_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, src3: Register) { append(instructions, inst_vmsumubm_v_v_v_v(dst, src, src2, src3)) } +emit_vmsumubm_v_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, src3: Register) { append_elem(instructions, inst_vmsumubm_v_v_v_v(dst, src, src2, src3)) } inst_vmsummbm_v_v_v_v :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register, src3: Register) -> Instruction { return Instruction{mnemonic = .VMSUMMBM, operand_count = 4, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), op_reg(src3)}} } -emit_vmsummbm_v_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, src3: Register) { append(instructions, inst_vmsummbm_v_v_v_v(dst, src, src2, src3)) } +emit_vmsummbm_v_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, src3: Register) { append_elem(instructions, inst_vmsummbm_v_v_v_v(dst, src, src2, src3)) } inst_vmsumuhm_v_v_v_v :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register, src3: Register) -> Instruction { return Instruction{mnemonic = .VMSUMUHM, operand_count = 4, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), op_reg(src3)}} } -emit_vmsumuhm_v_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, src3: Register) { append(instructions, inst_vmsumuhm_v_v_v_v(dst, src, src2, src3)) } +emit_vmsumuhm_v_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, src3: Register) { append_elem(instructions, inst_vmsumuhm_v_v_v_v(dst, src, src2, src3)) } inst_vmsumshm_v_v_v_v :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register, src3: Register) -> Instruction { return Instruction{mnemonic = .VMSUMSHM, operand_count = 4, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), op_reg(src3)}} } -emit_vmsumshm_v_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, src3: Register) { append(instructions, inst_vmsumshm_v_v_v_v(dst, src, src2, src3)) } +emit_vmsumshm_v_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, src3: Register) { append_elem(instructions, inst_vmsumshm_v_v_v_v(dst, src, src2, src3)) } inst_vmsumuhs_v_v_v_v :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register, src3: Register) -> Instruction { return Instruction{mnemonic = .VMSUMUHS, operand_count = 4, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), op_reg(src3)}} } -emit_vmsumuhs_v_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, src3: Register) { append(instructions, inst_vmsumuhs_v_v_v_v(dst, src, src2, src3)) } +emit_vmsumuhs_v_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, src3: Register) { append_elem(instructions, inst_vmsumuhs_v_v_v_v(dst, src, src2, src3)) } inst_vmsumshs_v_v_v_v :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register, src3: Register) -> Instruction { return Instruction{mnemonic = .VMSUMSHS, operand_count = 4, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), op_reg(src3)}} } -emit_vmsumshs_v_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, src3: Register) { append(instructions, inst_vmsumshs_v_v_v_v(dst, src, src2, src3)) } +emit_vmsumshs_v_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, src3: Register) { append_elem(instructions, inst_vmsumshs_v_v_v_v(dst, src, src2, src3)) } inst_vmsumudm_v_v_v_v :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register, src3: Register) -> Instruction { return Instruction{mnemonic = .VMSUMUDM, operand_count = 4, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), op_reg(src3)}} } -emit_vmsumudm_v_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, src3: Register) { append(instructions, inst_vmsumudm_v_v_v_v(dst, src, src2, src3)) } +emit_vmsumudm_v_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, src3: Register) { append_elem(instructions, inst_vmsumudm_v_v_v_v(dst, src, src2, src3)) } inst_vcmpequb_v_v_v :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VCMPEQUB, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_vcmpequb_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vcmpequb_v_v_v(dst, src, src2)) } +emit_vcmpequb_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vcmpequb_v_v_v(dst, src, src2)) } inst_vcmpequb_dot_v_v_v :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VCMPEQUB_DOT, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_vcmpequb_dot_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vcmpequb_dot_v_v_v(dst, src, src2)) } +emit_vcmpequb_dot_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vcmpequb_dot_v_v_v(dst, src, src2)) } inst_vcmpequh_v_v_v :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VCMPEQUH, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_vcmpequh_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vcmpequh_v_v_v(dst, src, src2)) } +emit_vcmpequh_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vcmpequh_v_v_v(dst, src, src2)) } inst_vcmpequh_dot_v_v_v :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VCMPEQUH_DOT, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_vcmpequh_dot_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vcmpequh_dot_v_v_v(dst, src, src2)) } +emit_vcmpequh_dot_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vcmpequh_dot_v_v_v(dst, src, src2)) } inst_vcmpequw_v_v_v :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VCMPEQUW, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_vcmpequw_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vcmpequw_v_v_v(dst, src, src2)) } +emit_vcmpequw_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vcmpequw_v_v_v(dst, src, src2)) } inst_vcmpequw_dot_v_v_v :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VCMPEQUW_DOT, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_vcmpequw_dot_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vcmpequw_dot_v_v_v(dst, src, src2)) } +emit_vcmpequw_dot_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vcmpequw_dot_v_v_v(dst, src, src2)) } inst_vcmpequd_v_v_v :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VCMPEQUD, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_vcmpequd_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vcmpequd_v_v_v(dst, src, src2)) } +emit_vcmpequd_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vcmpequd_v_v_v(dst, src, src2)) } inst_vcmpequd_dot_v_v_v :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VCMPEQUD_DOT, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_vcmpequd_dot_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vcmpequd_dot_v_v_v(dst, src, src2)) } +emit_vcmpequd_dot_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vcmpequd_dot_v_v_v(dst, src, src2)) } inst_vcmpneb_v_v_v :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VCMPNEB, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_vcmpneb_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vcmpneb_v_v_v(dst, src, src2)) } +emit_vcmpneb_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vcmpneb_v_v_v(dst, src, src2)) } inst_vcmpneb_dot_v_v_v :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VCMPNEB_DOT, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_vcmpneb_dot_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vcmpneb_dot_v_v_v(dst, src, src2)) } +emit_vcmpneb_dot_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vcmpneb_dot_v_v_v(dst, src, src2)) } inst_vcmpneh_v_v_v :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VCMPNEH, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_vcmpneh_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vcmpneh_v_v_v(dst, src, src2)) } +emit_vcmpneh_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vcmpneh_v_v_v(dst, src, src2)) } inst_vcmpneh_dot_v_v_v :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VCMPNEH_DOT, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_vcmpneh_dot_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vcmpneh_dot_v_v_v(dst, src, src2)) } +emit_vcmpneh_dot_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vcmpneh_dot_v_v_v(dst, src, src2)) } inst_vcmpnew_v_v_v :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VCMPNEW, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_vcmpnew_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vcmpnew_v_v_v(dst, src, src2)) } +emit_vcmpnew_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vcmpnew_v_v_v(dst, src, src2)) } inst_vcmpnew_dot_v_v_v :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VCMPNEW_DOT, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_vcmpnew_dot_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vcmpnew_dot_v_v_v(dst, src, src2)) } +emit_vcmpnew_dot_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vcmpnew_dot_v_v_v(dst, src, src2)) } inst_vcmpgtsb_v_v_v :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VCMPGTSB, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_vcmpgtsb_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vcmpgtsb_v_v_v(dst, src, src2)) } +emit_vcmpgtsb_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vcmpgtsb_v_v_v(dst, src, src2)) } inst_vcmpgtsb_dot_v_v_v :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VCMPGTSB_DOT, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_vcmpgtsb_dot_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vcmpgtsb_dot_v_v_v(dst, src, src2)) } +emit_vcmpgtsb_dot_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vcmpgtsb_dot_v_v_v(dst, src, src2)) } inst_vcmpgtsh_v_v_v :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VCMPGTSH, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_vcmpgtsh_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vcmpgtsh_v_v_v(dst, src, src2)) } +emit_vcmpgtsh_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vcmpgtsh_v_v_v(dst, src, src2)) } inst_vcmpgtsh_dot_v_v_v :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VCMPGTSH_DOT, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_vcmpgtsh_dot_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vcmpgtsh_dot_v_v_v(dst, src, src2)) } +emit_vcmpgtsh_dot_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vcmpgtsh_dot_v_v_v(dst, src, src2)) } inst_vcmpgtsw_v_v_v :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VCMPGTSW, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_vcmpgtsw_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vcmpgtsw_v_v_v(dst, src, src2)) } +emit_vcmpgtsw_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vcmpgtsw_v_v_v(dst, src, src2)) } inst_vcmpgtsw_dot_v_v_v :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VCMPGTSW_DOT, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_vcmpgtsw_dot_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vcmpgtsw_dot_v_v_v(dst, src, src2)) } +emit_vcmpgtsw_dot_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vcmpgtsw_dot_v_v_v(dst, src, src2)) } inst_vcmpgtsd_v_v_v :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VCMPGTSD, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_vcmpgtsd_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vcmpgtsd_v_v_v(dst, src, src2)) } +emit_vcmpgtsd_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vcmpgtsd_v_v_v(dst, src, src2)) } inst_vcmpgtsd_dot_v_v_v :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VCMPGTSD_DOT, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_vcmpgtsd_dot_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vcmpgtsd_dot_v_v_v(dst, src, src2)) } +emit_vcmpgtsd_dot_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vcmpgtsd_dot_v_v_v(dst, src, src2)) } inst_vcmpgtub_v_v_v :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VCMPGTUB, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_vcmpgtub_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vcmpgtub_v_v_v(dst, src, src2)) } +emit_vcmpgtub_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vcmpgtub_v_v_v(dst, src, src2)) } inst_vcmpgtub_dot_v_v_v :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VCMPGTUB_DOT, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_vcmpgtub_dot_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vcmpgtub_dot_v_v_v(dst, src, src2)) } +emit_vcmpgtub_dot_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vcmpgtub_dot_v_v_v(dst, src, src2)) } inst_vcmpgtuh_v_v_v :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VCMPGTUH, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_vcmpgtuh_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vcmpgtuh_v_v_v(dst, src, src2)) } +emit_vcmpgtuh_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vcmpgtuh_v_v_v(dst, src, src2)) } inst_vcmpgtuh_dot_v_v_v :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VCMPGTUH_DOT, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_vcmpgtuh_dot_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vcmpgtuh_dot_v_v_v(dst, src, src2)) } +emit_vcmpgtuh_dot_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vcmpgtuh_dot_v_v_v(dst, src, src2)) } inst_vcmpgtuw_v_v_v :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VCMPGTUW, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_vcmpgtuw_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vcmpgtuw_v_v_v(dst, src, src2)) } +emit_vcmpgtuw_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vcmpgtuw_v_v_v(dst, src, src2)) } inst_vcmpgtuw_dot_v_v_v :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VCMPGTUW_DOT, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_vcmpgtuw_dot_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vcmpgtuw_dot_v_v_v(dst, src, src2)) } +emit_vcmpgtuw_dot_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vcmpgtuw_dot_v_v_v(dst, src, src2)) } inst_vcmpgtud_v_v_v :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VCMPGTUD, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_vcmpgtud_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vcmpgtud_v_v_v(dst, src, src2)) } +emit_vcmpgtud_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vcmpgtud_v_v_v(dst, src, src2)) } inst_vcmpgtud_dot_v_v_v :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VCMPGTUD_DOT, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_vcmpgtud_dot_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vcmpgtud_dot_v_v_v(dst, src, src2)) } +emit_vcmpgtud_dot_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vcmpgtud_dot_v_v_v(dst, src, src2)) } inst_vcmpeqfp_v_v_v :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VCMPEQFP, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_vcmpeqfp_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vcmpeqfp_v_v_v(dst, src, src2)) } +emit_vcmpeqfp_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vcmpeqfp_v_v_v(dst, src, src2)) } inst_vcmpeqfp_dot_v_v_v :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VCMPEQFP_DOT, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_vcmpeqfp_dot_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vcmpeqfp_dot_v_v_v(dst, src, src2)) } +emit_vcmpeqfp_dot_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vcmpeqfp_dot_v_v_v(dst, src, src2)) } inst_vcmpgefp_v_v_v :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VCMPGEFP, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_vcmpgefp_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vcmpgefp_v_v_v(dst, src, src2)) } +emit_vcmpgefp_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vcmpgefp_v_v_v(dst, src, src2)) } inst_vcmpgefp_dot_v_v_v :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VCMPGEFP_DOT, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_vcmpgefp_dot_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vcmpgefp_dot_v_v_v(dst, src, src2)) } +emit_vcmpgefp_dot_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vcmpgefp_dot_v_v_v(dst, src, src2)) } inst_vcmpgtfp_v_v_v :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VCMPGTFP, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_vcmpgtfp_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vcmpgtfp_v_v_v(dst, src, src2)) } +emit_vcmpgtfp_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vcmpgtfp_v_v_v(dst, src, src2)) } inst_vcmpgtfp_dot_v_v_v :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VCMPGTFP_DOT, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_vcmpgtfp_dot_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vcmpgtfp_dot_v_v_v(dst, src, src2)) } +emit_vcmpgtfp_dot_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vcmpgtfp_dot_v_v_v(dst, src, src2)) } inst_vcmpbfp_v_v_v :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VCMPBFP, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_vcmpbfp_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vcmpbfp_v_v_v(dst, src, src2)) } +emit_vcmpbfp_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vcmpbfp_v_v_v(dst, src, src2)) } inst_vcmpbfp_dot_v_v_v :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VCMPBFP_DOT, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_vcmpbfp_dot_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vcmpbfp_dot_v_v_v(dst, src, src2)) } +emit_vcmpbfp_dot_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vcmpbfp_dot_v_v_v(dst, src, src2)) } inst_vmaxsb_v_v_v :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VMAXSB, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_vmaxsb_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vmaxsb_v_v_v(dst, src, src2)) } +emit_vmaxsb_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vmaxsb_v_v_v(dst, src, src2)) } inst_vmaxsh_v_v_v :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VMAXSH, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_vmaxsh_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vmaxsh_v_v_v(dst, src, src2)) } +emit_vmaxsh_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vmaxsh_v_v_v(dst, src, src2)) } inst_vmaxsw_v_v_v :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VMAXSW, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_vmaxsw_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vmaxsw_v_v_v(dst, src, src2)) } +emit_vmaxsw_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vmaxsw_v_v_v(dst, src, src2)) } inst_vmaxsd_v_v_v :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VMAXSD, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_vmaxsd_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vmaxsd_v_v_v(dst, src, src2)) } +emit_vmaxsd_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vmaxsd_v_v_v(dst, src, src2)) } inst_vmaxub_v_v_v :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VMAXUB, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_vmaxub_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vmaxub_v_v_v(dst, src, src2)) } +emit_vmaxub_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vmaxub_v_v_v(dst, src, src2)) } inst_vmaxuh_v_v_v :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VMAXUH, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_vmaxuh_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vmaxuh_v_v_v(dst, src, src2)) } +emit_vmaxuh_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vmaxuh_v_v_v(dst, src, src2)) } inst_vmaxuw_v_v_v :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VMAXUW, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_vmaxuw_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vmaxuw_v_v_v(dst, src, src2)) } +emit_vmaxuw_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vmaxuw_v_v_v(dst, src, src2)) } inst_vmaxud_v_v_v :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VMAXUD, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_vmaxud_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vmaxud_v_v_v(dst, src, src2)) } +emit_vmaxud_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vmaxud_v_v_v(dst, src, src2)) } inst_vmaxfp_v_v_v :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VMAXFP, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_vmaxfp_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vmaxfp_v_v_v(dst, src, src2)) } +emit_vmaxfp_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vmaxfp_v_v_v(dst, src, src2)) } inst_vminsb_v_v_v :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VMINSB, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_vminsb_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vminsb_v_v_v(dst, src, src2)) } +emit_vminsb_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vminsb_v_v_v(dst, src, src2)) } inst_vminsh_v_v_v :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VMINSH, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_vminsh_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vminsh_v_v_v(dst, src, src2)) } +emit_vminsh_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vminsh_v_v_v(dst, src, src2)) } inst_vminsw_v_v_v :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VMINSW, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_vminsw_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vminsw_v_v_v(dst, src, src2)) } +emit_vminsw_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vminsw_v_v_v(dst, src, src2)) } inst_vminsd_v_v_v :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VMINSD, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_vminsd_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vminsd_v_v_v(dst, src, src2)) } +emit_vminsd_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vminsd_v_v_v(dst, src, src2)) } inst_vminub_v_v_v :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VMINUB, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_vminub_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vminub_v_v_v(dst, src, src2)) } +emit_vminub_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vminub_v_v_v(dst, src, src2)) } inst_vminuh_v_v_v :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VMINUH, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_vminuh_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vminuh_v_v_v(dst, src, src2)) } +emit_vminuh_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vminuh_v_v_v(dst, src, src2)) } inst_vminuw_v_v_v :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VMINUW, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_vminuw_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vminuw_v_v_v(dst, src, src2)) } +emit_vminuw_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vminuw_v_v_v(dst, src, src2)) } inst_vminud_v_v_v :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VMINUD, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_vminud_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vminud_v_v_v(dst, src, src2)) } +emit_vminud_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vminud_v_v_v(dst, src, src2)) } inst_vminfp_v_v_v :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VMINFP, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_vminfp_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vminfp_v_v_v(dst, src, src2)) } +emit_vminfp_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vminfp_v_v_v(dst, src, src2)) } inst_vavgsb_v_v_v :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VAVGSB, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_vavgsb_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vavgsb_v_v_v(dst, src, src2)) } +emit_vavgsb_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vavgsb_v_v_v(dst, src, src2)) } inst_vavgsh_v_v_v :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VAVGSH, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_vavgsh_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vavgsh_v_v_v(dst, src, src2)) } +emit_vavgsh_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vavgsh_v_v_v(dst, src, src2)) } inst_vavgsw_v_v_v :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VAVGSW, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_vavgsw_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vavgsw_v_v_v(dst, src, src2)) } +emit_vavgsw_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vavgsw_v_v_v(dst, src, src2)) } inst_vavgub_v_v_v :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VAVGUB, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_vavgub_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vavgub_v_v_v(dst, src, src2)) } +emit_vavgub_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vavgub_v_v_v(dst, src, src2)) } inst_vavguh_v_v_v :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VAVGUH, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_vavguh_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vavguh_v_v_v(dst, src, src2)) } +emit_vavguh_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vavguh_v_v_v(dst, src, src2)) } inst_vavguw_v_v_v :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VAVGUW, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_vavguw_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vavguw_v_v_v(dst, src, src2)) } +emit_vavguw_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vavguw_v_v_v(dst, src, src2)) } inst_vsl_v_v_v :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VSL, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_vsl_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vsl_v_v_v(dst, src, src2)) } +emit_vsl_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vsl_v_v_v(dst, src, src2)) } inst_vsr_v_v_v :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VSR, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_vsr_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vsr_v_v_v(dst, src, src2)) } +emit_vsr_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vsr_v_v_v(dst, src, src2)) } inst_vslo_v_v_v :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VSLO, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_vslo_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vslo_v_v_v(dst, src, src2)) } +emit_vslo_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vslo_v_v_v(dst, src, src2)) } inst_vsro_v_v_v :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VSRO, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_vsro_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vsro_v_v_v(dst, src, src2)) } +emit_vsro_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vsro_v_v_v(dst, src, src2)) } inst_vslb_v_v_v :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VSLB, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_vslb_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vslb_v_v_v(dst, src, src2)) } +emit_vslb_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vslb_v_v_v(dst, src, src2)) } inst_vslh_v_v_v :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VSLH, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_vslh_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vslh_v_v_v(dst, src, src2)) } +emit_vslh_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vslh_v_v_v(dst, src, src2)) } inst_vslw_v_v_v :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VSLW, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_vslw_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vslw_v_v_v(dst, src, src2)) } +emit_vslw_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vslw_v_v_v(dst, src, src2)) } inst_vsld_v_v_v :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VSLD, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_vsld_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vsld_v_v_v(dst, src, src2)) } +emit_vsld_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vsld_v_v_v(dst, src, src2)) } inst_vsrb_v_v_v :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VSRB, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_vsrb_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vsrb_v_v_v(dst, src, src2)) } +emit_vsrb_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vsrb_v_v_v(dst, src, src2)) } inst_vsrh_v_v_v :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VSRH, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_vsrh_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vsrh_v_v_v(dst, src, src2)) } +emit_vsrh_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vsrh_v_v_v(dst, src, src2)) } inst_vsrw_v_v_v :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VSRW, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_vsrw_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vsrw_v_v_v(dst, src, src2)) } +emit_vsrw_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vsrw_v_v_v(dst, src, src2)) } inst_vsrd_v_v_v :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VSRD, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_vsrd_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vsrd_v_v_v(dst, src, src2)) } +emit_vsrd_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vsrd_v_v_v(dst, src, src2)) } inst_vsrab_v_v_v :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VSRAB, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_vsrab_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vsrab_v_v_v(dst, src, src2)) } +emit_vsrab_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vsrab_v_v_v(dst, src, src2)) } inst_vsrah_v_v_v :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VSRAH, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_vsrah_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vsrah_v_v_v(dst, src, src2)) } +emit_vsrah_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vsrah_v_v_v(dst, src, src2)) } inst_vsraw_v_v_v :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VSRAW, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_vsraw_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vsraw_v_v_v(dst, src, src2)) } +emit_vsraw_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vsraw_v_v_v(dst, src, src2)) } inst_vsrad_v_v_v :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VSRAD, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_vsrad_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vsrad_v_v_v(dst, src, src2)) } +emit_vsrad_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vsrad_v_v_v(dst, src, src2)) } inst_vrlb_v_v_v :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VRLB, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_vrlb_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vrlb_v_v_v(dst, src, src2)) } +emit_vrlb_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vrlb_v_v_v(dst, src, src2)) } inst_vrlh_v_v_v :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VRLH, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_vrlh_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vrlh_v_v_v(dst, src, src2)) } +emit_vrlh_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vrlh_v_v_v(dst, src, src2)) } inst_vrlw_v_v_v :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VRLW, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_vrlw_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vrlw_v_v_v(dst, src, src2)) } +emit_vrlw_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vrlw_v_v_v(dst, src, src2)) } inst_vrld_v_v_v :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VRLD, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_vrld_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vrld_v_v_v(dst, src, src2)) } +emit_vrld_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vrld_v_v_v(dst, src, src2)) } inst_vperm_v_v_v_v :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register, src3: Register) -> Instruction { return Instruction{mnemonic = .VPERM, operand_count = 4, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), op_reg(src3)}} } -emit_vperm_v_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, src3: Register) { append(instructions, inst_vperm_v_v_v_v(dst, src, src2, src3)) } +emit_vperm_v_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, src3: Register) { append_elem(instructions, inst_vperm_v_v_v_v(dst, src, src2, src3)) } inst_vpermr_v_v_v_v :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register, src3: Register) -> Instruction { return Instruction{mnemonic = .VPERMR, operand_count = 4, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), op_reg(src3)}} } -emit_vpermr_v_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, src3: Register) { append(instructions, inst_vpermr_v_v_v_v(dst, src, src2, src3)) } +emit_vpermr_v_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, src3: Register) { append_elem(instructions, inst_vpermr_v_v_v_v(dst, src, src2, src3)) } inst_vsldoi_v_v_v_imm :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .VSLDOI, operand_count = 4, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), op_imm(imm)}} } -emit_vsldoi_v_v_v_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, imm: i64) { append(instructions, inst_vsldoi_v_v_v_imm(dst, src, src2, imm)) } +emit_vsldoi_v_v_v_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, imm: i64) { append_elem(instructions, inst_vsldoi_v_v_v_imm(dst, src, src2, imm)) } inst_vbpermq_v_v_v :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VBPERMQ, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_vbpermq_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vbpermq_v_v_v(dst, src, src2)) } +emit_vbpermq_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vbpermq_v_v_v(dst, src, src2)) } inst_vbpermd_v_v_v :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VBPERMD, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_vbpermd_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vbpermd_v_v_v(dst, src, src2)) } +emit_vbpermd_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vbpermd_v_v_v(dst, src, src2)) } inst_vmrghb_v_v_v :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VMRGHB, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_vmrghb_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vmrghb_v_v_v(dst, src, src2)) } +emit_vmrghb_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vmrghb_v_v_v(dst, src, src2)) } inst_vmrghh_v_v_v :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VMRGHH, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_vmrghh_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vmrghh_v_v_v(dst, src, src2)) } +emit_vmrghh_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vmrghh_v_v_v(dst, src, src2)) } inst_vmrghw_v_v_v :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VMRGHW, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_vmrghw_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vmrghw_v_v_v(dst, src, src2)) } +emit_vmrghw_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vmrghw_v_v_v(dst, src, src2)) } inst_vmrglb_v_v_v :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VMRGLB, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_vmrglb_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vmrglb_v_v_v(dst, src, src2)) } +emit_vmrglb_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vmrglb_v_v_v(dst, src, src2)) } inst_vmrglh_v_v_v :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VMRGLH, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_vmrglh_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vmrglh_v_v_v(dst, src, src2)) } +emit_vmrglh_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vmrglh_v_v_v(dst, src, src2)) } inst_vmrglw_v_v_v :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VMRGLW, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_vmrglw_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vmrglw_v_v_v(dst, src, src2)) } +emit_vmrglw_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vmrglw_v_v_v(dst, src, src2)) } inst_vmrgew_v_v_v :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VMRGEW, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_vmrgew_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vmrgew_v_v_v(dst, src, src2)) } +emit_vmrgew_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vmrgew_v_v_v(dst, src, src2)) } inst_vmrgow_v_v_v :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VMRGOW, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_vmrgow_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vmrgow_v_v_v(dst, src, src2)) } +emit_vmrgow_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vmrgow_v_v_v(dst, src, src2)) } inst_vspltb_v_v_imm :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .VSPLTB, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_imm(imm), {}}} } -emit_vspltb_v_v_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_vspltb_v_v_imm(dst, src, imm)) } +emit_vspltb_v_v_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_vspltb_v_v_imm(dst, src, imm)) } inst_vsplth_v_v_imm :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .VSPLTH, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_imm(imm), {}}} } -emit_vsplth_v_v_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_vsplth_v_v_imm(dst, src, imm)) } +emit_vsplth_v_v_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_vsplth_v_v_imm(dst, src, imm)) } inst_vspltw_v_v_imm :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .VSPLTW, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_imm(imm), {}}} } -emit_vspltw_v_v_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_vspltw_v_v_imm(dst, src, imm)) } +emit_vspltw_v_v_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_vspltw_v_v_imm(dst, src, imm)) } inst_vspltisb_v_simm :: #force_inline proc "contextless" (dst: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .VSPLTISB, operand_count = 2, length = 4, ops = {op_reg(dst), op_imm(imm), {}, {}}} } -emit_vspltisb_v_simm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64) { append(instructions, inst_vspltisb_v_simm(dst, imm)) } +emit_vspltisb_v_simm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64) { append_elem(instructions, inst_vspltisb_v_simm(dst, imm)) } inst_vspltish_v_simm :: #force_inline proc "contextless" (dst: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .VSPLTISH, operand_count = 2, length = 4, ops = {op_reg(dst), op_imm(imm), {}, {}}} } -emit_vspltish_v_simm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64) { append(instructions, inst_vspltish_v_simm(dst, imm)) } +emit_vspltish_v_simm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64) { append_elem(instructions, inst_vspltish_v_simm(dst, imm)) } inst_vspltisw_v_simm :: #force_inline proc "contextless" (dst: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .VSPLTISW, operand_count = 2, length = 4, ops = {op_reg(dst), op_imm(imm), {}, {}}} } -emit_vspltisw_v_simm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64) { append(instructions, inst_vspltisw_v_simm(dst, imm)) } +emit_vspltisw_v_simm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64) { append_elem(instructions, inst_vspltisw_v_simm(dst, imm)) } inst_vpkpx_v_v_v :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VPKPX, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_vpkpx_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vpkpx_v_v_v(dst, src, src2)) } +emit_vpkpx_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vpkpx_v_v_v(dst, src, src2)) } inst_vpkuhum_v_v_v :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VPKUHUM, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_vpkuhum_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vpkuhum_v_v_v(dst, src, src2)) } +emit_vpkuhum_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vpkuhum_v_v_v(dst, src, src2)) } inst_vpkuwum_v_v_v :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VPKUWUM, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_vpkuwum_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vpkuwum_v_v_v(dst, src, src2)) } +emit_vpkuwum_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vpkuwum_v_v_v(dst, src, src2)) } inst_vpkudum_v_v_v :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VPKUDUM, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_vpkudum_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vpkudum_v_v_v(dst, src, src2)) } +emit_vpkudum_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vpkudum_v_v_v(dst, src, src2)) } inst_vpkuhus_v_v_v :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VPKUHUS, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_vpkuhus_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vpkuhus_v_v_v(dst, src, src2)) } +emit_vpkuhus_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vpkuhus_v_v_v(dst, src, src2)) } inst_vpkuwus_v_v_v :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VPKUWUS, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_vpkuwus_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vpkuwus_v_v_v(dst, src, src2)) } +emit_vpkuwus_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vpkuwus_v_v_v(dst, src, src2)) } inst_vpkudus_v_v_v :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VPKUDUS, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_vpkudus_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vpkudus_v_v_v(dst, src, src2)) } +emit_vpkudus_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vpkudus_v_v_v(dst, src, src2)) } inst_vpkshus_v_v_v :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VPKSHUS, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_vpkshus_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vpkshus_v_v_v(dst, src, src2)) } +emit_vpkshus_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vpkshus_v_v_v(dst, src, src2)) } inst_vpkswus_v_v_v :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VPKSWUS, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_vpkswus_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vpkswus_v_v_v(dst, src, src2)) } +emit_vpkswus_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vpkswus_v_v_v(dst, src, src2)) } inst_vpksdus_v_v_v :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VPKSDUS, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_vpksdus_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vpksdus_v_v_v(dst, src, src2)) } +emit_vpksdus_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vpksdus_v_v_v(dst, src, src2)) } inst_vpkshss_v_v_v :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VPKSHSS, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_vpkshss_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vpkshss_v_v_v(dst, src, src2)) } +emit_vpkshss_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vpkshss_v_v_v(dst, src, src2)) } inst_vpkswss_v_v_v :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VPKSWSS, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_vpkswss_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vpkswss_v_v_v(dst, src, src2)) } +emit_vpkswss_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vpkswss_v_v_v(dst, src, src2)) } inst_vpksdss_v_v_v :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VPKSDSS, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_vpksdss_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vpksdss_v_v_v(dst, src, src2)) } +emit_vpksdss_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vpksdss_v_v_v(dst, src, src2)) } inst_vupkhsb_v_v :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .VUPKHSB, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_vupkhsb_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_vupkhsb_v_v(dst, src)) } +emit_vupkhsb_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_vupkhsb_v_v(dst, src)) } inst_vupkhsh_v_v :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .VUPKHSH, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_vupkhsh_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_vupkhsh_v_v(dst, src)) } +emit_vupkhsh_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_vupkhsh_v_v(dst, src)) } inst_vupkhsw_v_v :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .VUPKHSW, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_vupkhsw_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_vupkhsw_v_v(dst, src)) } +emit_vupkhsw_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_vupkhsw_v_v(dst, src)) } inst_vupklsb_v_v :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .VUPKLSB, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_vupklsb_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_vupklsb_v_v(dst, src)) } +emit_vupklsb_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_vupklsb_v_v(dst, src)) } inst_vupklsh_v_v :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .VUPKLSH, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_vupklsh_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_vupklsh_v_v(dst, src)) } +emit_vupklsh_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_vupklsh_v_v(dst, src)) } inst_vupklsw_v_v :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .VUPKLSW, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_vupklsw_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_vupklsw_v_v(dst, src)) } +emit_vupklsw_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_vupklsw_v_v(dst, src)) } inst_vupkhpx_v_v :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .VUPKHPX, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_vupkhpx_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_vupkhpx_v_v(dst, src)) } +emit_vupkhpx_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_vupkhpx_v_v(dst, src)) } inst_vupklpx_v_v :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .VUPKLPX, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_vupklpx_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_vupklpx_v_v(dst, src)) } +emit_vupklpx_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_vupklpx_v_v(dst, src)) } inst_vcipher_v_v_v :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VCIPHER, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_vcipher_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vcipher_v_v_v(dst, src, src2)) } +emit_vcipher_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vcipher_v_v_v(dst, src, src2)) } inst_vcipherlast_v_v_v :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VCIPHERLAST, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_vcipherlast_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vcipherlast_v_v_v(dst, src, src2)) } +emit_vcipherlast_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vcipherlast_v_v_v(dst, src, src2)) } inst_vncipher_v_v_v :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VNCIPHER, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_vncipher_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vncipher_v_v_v(dst, src, src2)) } +emit_vncipher_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vncipher_v_v_v(dst, src, src2)) } inst_vncipherlast_v_v_v :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VNCIPHERLAST, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_vncipherlast_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vncipherlast_v_v_v(dst, src, src2)) } +emit_vncipherlast_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vncipherlast_v_v_v(dst, src, src2)) } inst_vsbox_v_v :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .VSBOX, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_vsbox_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_vsbox_v_v(dst, src)) } +emit_vsbox_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_vsbox_v_v(dst, src)) } inst_vshasigmaw_v_v_imm_imm :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64, imm2: i64) -> Instruction { return Instruction{mnemonic = .VSHASIGMAW, operand_count = 4, length = 4, ops = {op_reg(dst), op_reg(src), op_imm(imm), op_imm(imm2)}} } -emit_vshasigmaw_v_v_imm_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64, imm2: i64) { append(instructions, inst_vshasigmaw_v_v_imm_imm(dst, src, imm, imm2)) } +emit_vshasigmaw_v_v_imm_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64, imm2: i64) { append_elem(instructions, inst_vshasigmaw_v_v_imm_imm(dst, src, imm, imm2)) } inst_vshasigmad_v_v_imm_imm :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64, imm2: i64) -> Instruction { return Instruction{mnemonic = .VSHASIGMAD, operand_count = 4, length = 4, ops = {op_reg(dst), op_reg(src), op_imm(imm), op_imm(imm2)}} } -emit_vshasigmad_v_v_imm_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64, imm2: i64) { append(instructions, inst_vshasigmad_v_v_imm_imm(dst, src, imm, imm2)) } +emit_vshasigmad_v_v_imm_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64, imm2: i64) { append_elem(instructions, inst_vshasigmad_v_v_imm_imm(dst, src, imm, imm2)) } inst_vpmsumb_v_v_v :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VPMSUMB, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_vpmsumb_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vpmsumb_v_v_v(dst, src, src2)) } +emit_vpmsumb_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vpmsumb_v_v_v(dst, src, src2)) } inst_vpmsumh_v_v_v :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VPMSUMH, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_vpmsumh_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vpmsumh_v_v_v(dst, src, src2)) } +emit_vpmsumh_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vpmsumh_v_v_v(dst, src, src2)) } inst_vpmsumw_v_v_v :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VPMSUMW, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_vpmsumw_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vpmsumw_v_v_v(dst, src, src2)) } +emit_vpmsumw_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vpmsumw_v_v_v(dst, src, src2)) } inst_vpmsumd_v_v_v :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VPMSUMD, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_vpmsumd_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vpmsumd_v_v_v(dst, src, src2)) } +emit_vpmsumd_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vpmsumd_v_v_v(dst, src, src2)) } inst_vrfim_v_v :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .VRFIM, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_vrfim_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_vrfim_v_v(dst, src)) } +emit_vrfim_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_vrfim_v_v(dst, src)) } inst_vrfin_v_v :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .VRFIN, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_vrfin_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_vrfin_v_v(dst, src)) } +emit_vrfin_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_vrfin_v_v(dst, src)) } inst_vrfip_v_v :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .VRFIP, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_vrfip_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_vrfip_v_v(dst, src)) } +emit_vrfip_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_vrfip_v_v(dst, src)) } inst_vrfiz_v_v :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .VRFIZ, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_vrfiz_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_vrfiz_v_v(dst, src)) } +emit_vrfiz_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_vrfiz_v_v(dst, src)) } inst_vexptefp_v_v :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .VEXPTEFP, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_vexptefp_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_vexptefp_v_v(dst, src)) } +emit_vexptefp_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_vexptefp_v_v(dst, src)) } inst_vlogefp_v_v :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .VLOGEFP, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_vlogefp_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_vlogefp_v_v(dst, src)) } +emit_vlogefp_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_vlogefp_v_v(dst, src)) } inst_vrefp_v_v :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .VREFP, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_vrefp_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_vrefp_v_v(dst, src)) } +emit_vrefp_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_vrefp_v_v(dst, src)) } inst_vrsqrtefp_v_v :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .VRSQRTEFP, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_vrsqrtefp_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_vrsqrtefp_v_v(dst, src)) } +emit_vrsqrtefp_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_vrsqrtefp_v_v(dst, src)) } inst_vmaddfp_v_v_v_v :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register, src3: Register) -> Instruction { return Instruction{mnemonic = .VMADDFP, operand_count = 4, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), op_reg(src3)}} } -emit_vmaddfp_v_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, src3: Register) { append(instructions, inst_vmaddfp_v_v_v_v(dst, src, src2, src3)) } +emit_vmaddfp_v_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, src3: Register) { append_elem(instructions, inst_vmaddfp_v_v_v_v(dst, src, src2, src3)) } inst_vnmsubfp_v_v_v_v :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register, src3: Register) -> Instruction { return Instruction{mnemonic = .VNMSUBFP, operand_count = 4, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), op_reg(src3)}} } -emit_vnmsubfp_v_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, src3: Register) { append(instructions, inst_vnmsubfp_v_v_v_v(dst, src, src2, src3)) } +emit_vnmsubfp_v_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, src3: Register) { append_elem(instructions, inst_vnmsubfp_v_v_v_v(dst, src, src2, src3)) } inst_vcfsx_v_v_imm :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .VCFSX, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_imm(imm), {}}} } -emit_vcfsx_v_v_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_vcfsx_v_v_imm(dst, src, imm)) } +emit_vcfsx_v_v_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_vcfsx_v_v_imm(dst, src, imm)) } inst_vcfux_v_v_imm :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .VCFUX, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_imm(imm), {}}} } -emit_vcfux_v_v_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_vcfux_v_v_imm(dst, src, imm)) } +emit_vcfux_v_v_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_vcfux_v_v_imm(dst, src, imm)) } inst_vctsxs_v_v_imm :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .VCTSXS, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_imm(imm), {}}} } -emit_vctsxs_v_v_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_vctsxs_v_v_imm(dst, src, imm)) } +emit_vctsxs_v_v_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_vctsxs_v_v_imm(dst, src, imm)) } inst_vctuxs_v_v_imm :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .VCTUXS, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_imm(imm), {}}} } -emit_vctuxs_v_v_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_vctuxs_v_v_imm(dst, src, imm)) } +emit_vctuxs_v_v_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_vctuxs_v_v_imm(dst, src, imm)) } inst_lvx_v_mem :: #force_inline proc "contextless" (dst: Register, addr: Memory) -> Instruction { return Instruction{mnemonic = .LVX, operand_count = 2, length = 4, ops = {op_reg(dst), op_mem(addr), {}, {}}} } -emit_lvx_v_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append(instructions, inst_lvx_v_mem(dst, addr)) } +emit_lvx_v_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append_elem(instructions, inst_lvx_v_mem(dst, addr)) } inst_lvxl_v_mem :: #force_inline proc "contextless" (dst: Register, addr: Memory) -> Instruction { return Instruction{mnemonic = .LVXL, operand_count = 2, length = 4, ops = {op_reg(dst), op_mem(addr), {}, {}}} } -emit_lvxl_v_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append(instructions, inst_lvxl_v_mem(dst, addr)) } +emit_lvxl_v_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append_elem(instructions, inst_lvxl_v_mem(dst, addr)) } inst_lvebx_v_mem :: #force_inline proc "contextless" (dst: Register, addr: Memory) -> Instruction { return Instruction{mnemonic = .LVEBX, operand_count = 2, length = 4, ops = {op_reg(dst), op_mem(addr), {}, {}}} } -emit_lvebx_v_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append(instructions, inst_lvebx_v_mem(dst, addr)) } +emit_lvebx_v_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append_elem(instructions, inst_lvebx_v_mem(dst, addr)) } inst_lvehx_v_mem :: #force_inline proc "contextless" (dst: Register, addr: Memory) -> Instruction { return Instruction{mnemonic = .LVEHX, operand_count = 2, length = 4, ops = {op_reg(dst), op_mem(addr), {}, {}}} } -emit_lvehx_v_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append(instructions, inst_lvehx_v_mem(dst, addr)) } +emit_lvehx_v_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append_elem(instructions, inst_lvehx_v_mem(dst, addr)) } inst_lvewx_v_mem :: #force_inline proc "contextless" (dst: Register, addr: Memory) -> Instruction { return Instruction{mnemonic = .LVEWX, operand_count = 2, length = 4, ops = {op_reg(dst), op_mem(addr), {}, {}}} } -emit_lvewx_v_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append(instructions, inst_lvewx_v_mem(dst, addr)) } +emit_lvewx_v_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append_elem(instructions, inst_lvewx_v_mem(dst, addr)) } inst_lvsl_v_mem :: #force_inline proc "contextless" (dst: Register, addr: Memory) -> Instruction { return Instruction{mnemonic = .LVSL, operand_count = 2, length = 4, ops = {op_reg(dst), op_mem(addr), {}, {}}} } -emit_lvsl_v_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append(instructions, inst_lvsl_v_mem(dst, addr)) } +emit_lvsl_v_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append_elem(instructions, inst_lvsl_v_mem(dst, addr)) } inst_lvsr_v_mem :: #force_inline proc "contextless" (dst: Register, addr: Memory) -> Instruction { return Instruction{mnemonic = .LVSR, operand_count = 2, length = 4, ops = {op_reg(dst), op_mem(addr), {}, {}}} } -emit_lvsr_v_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append(instructions, inst_lvsr_v_mem(dst, addr)) } +emit_lvsr_v_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append_elem(instructions, inst_lvsr_v_mem(dst, addr)) } inst_stvx_v_mem :: #force_inline proc "contextless" (dst: Register, addr: Memory) -> Instruction { return Instruction{mnemonic = .STVX, operand_count = 2, length = 4, ops = {op_reg(dst), op_mem(addr), {}, {}}} } -emit_stvx_v_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append(instructions, inst_stvx_v_mem(dst, addr)) } +emit_stvx_v_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append_elem(instructions, inst_stvx_v_mem(dst, addr)) } inst_stvxl_v_mem :: #force_inline proc "contextless" (dst: Register, addr: Memory) -> Instruction { return Instruction{mnemonic = .STVXL, operand_count = 2, length = 4, ops = {op_reg(dst), op_mem(addr), {}, {}}} } -emit_stvxl_v_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append(instructions, inst_stvxl_v_mem(dst, addr)) } +emit_stvxl_v_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append_elem(instructions, inst_stvxl_v_mem(dst, addr)) } inst_stvebx_v_mem :: #force_inline proc "contextless" (dst: Register, addr: Memory) -> Instruction { return Instruction{mnemonic = .STVEBX, operand_count = 2, length = 4, ops = {op_reg(dst), op_mem(addr), {}, {}}} } -emit_stvebx_v_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append(instructions, inst_stvebx_v_mem(dst, addr)) } +emit_stvebx_v_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append_elem(instructions, inst_stvebx_v_mem(dst, addr)) } inst_stvehx_v_mem :: #force_inline proc "contextless" (dst: Register, addr: Memory) -> Instruction { return Instruction{mnemonic = .STVEHX, operand_count = 2, length = 4, ops = {op_reg(dst), op_mem(addr), {}, {}}} } -emit_stvehx_v_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append(instructions, inst_stvehx_v_mem(dst, addr)) } +emit_stvehx_v_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append_elem(instructions, inst_stvehx_v_mem(dst, addr)) } inst_stvewx_v_mem :: #force_inline proc "contextless" (dst: Register, addr: Memory) -> Instruction { return Instruction{mnemonic = .STVEWX, operand_count = 2, length = 4, ops = {op_reg(dst), op_mem(addr), {}, {}}} } -emit_stvewx_v_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append(instructions, inst_stvewx_v_mem(dst, addr)) } +emit_stvewx_v_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append_elem(instructions, inst_stvewx_v_mem(dst, addr)) } inst_mfvscr_v :: #force_inline proc "contextless" (dst: Register) -> Instruction { return Instruction{mnemonic = .MFVSCR, operand_count = 1, length = 4, ops = {op_reg(dst), {}, {}, {}}} } -emit_mfvscr_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register) { append(instructions, inst_mfvscr_v(dst)) } +emit_mfvscr_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register) { append_elem(instructions, inst_mfvscr_v(dst)) } inst_mtvscr_v :: #force_inline proc "contextless" (dst: Register) -> Instruction { return Instruction{mnemonic = .MTVSCR, operand_count = 1, length = 4, ops = {op_reg(dst), {}, {}, {}}} } -emit_mtvscr_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register) { append(instructions, inst_mtvscr_v(dst)) } +emit_mtvscr_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register) { append_elem(instructions, inst_mtvscr_v(dst)) } inst_vabsdub_v_v_v :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VABSDUB, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_vabsdub_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vabsdub_v_v_v(dst, src, src2)) } +emit_vabsdub_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vabsdub_v_v_v(dst, src, src2)) } inst_vabsduh_v_v_v :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VABSDUH, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_vabsduh_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vabsduh_v_v_v(dst, src, src2)) } +emit_vabsduh_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vabsduh_v_v_v(dst, src, src2)) } inst_vabsduw_v_v_v :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VABSDUW, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_vabsduw_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vabsduw_v_v_v(dst, src, src2)) } +emit_vabsduw_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vabsduw_v_v_v(dst, src, src2)) } inst_vextsb2w_v_v :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .VEXTSB2W, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_vextsb2w_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_vextsb2w_v_v(dst, src)) } +emit_vextsb2w_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_vextsb2w_v_v(dst, src)) } inst_vextsh2w_v_v :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .VEXTSH2W, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_vextsh2w_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_vextsh2w_v_v(dst, src)) } +emit_vextsh2w_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_vextsh2w_v_v(dst, src)) } inst_vextsb2d_v_v :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .VEXTSB2D, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_vextsb2d_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_vextsb2d_v_v(dst, src)) } +emit_vextsb2d_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_vextsb2d_v_v(dst, src)) } inst_vextsh2d_v_v :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .VEXTSH2D, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_vextsh2d_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_vextsh2d_v_v(dst, src)) } +emit_vextsh2d_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_vextsh2d_v_v(dst, src)) } inst_vextsw2d_v_v :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .VEXTSW2D, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_vextsw2d_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_vextsw2d_v_v(dst, src)) } +emit_vextsw2d_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_vextsw2d_v_v(dst, src)) } inst_vprtybw_v_v :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .VPRTYBW, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_vprtybw_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_vprtybw_v_v(dst, src)) } +emit_vprtybw_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_vprtybw_v_v(dst, src)) } inst_vprtybd_v_v :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .VPRTYBD, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_vprtybd_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_vprtybd_v_v(dst, src)) } +emit_vprtybd_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_vprtybd_v_v(dst, src)) } inst_vprtybq_v_v :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .VPRTYBQ, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_vprtybq_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_vprtybq_v_v(dst, src)) } +emit_vprtybq_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_vprtybq_v_v(dst, src)) } inst_vrlwnm_v_v_v :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VRLWNM, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_vrlwnm_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vrlwnm_v_v_v(dst, src, src2)) } +emit_vrlwnm_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vrlwnm_v_v_v(dst, src, src2)) } inst_vrldnm_v_v_v :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VRLDNM, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_vrldnm_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vrldnm_v_v_v(dst, src, src2)) } +emit_vrldnm_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vrldnm_v_v_v(dst, src, src2)) } inst_vrlwmi_v_v_v :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VRLWMI, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_vrlwmi_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vrlwmi_v_v_v(dst, src, src2)) } +emit_vrlwmi_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vrlwmi_v_v_v(dst, src, src2)) } inst_vrldmi_v_v_v :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VRLDMI, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_vrldmi_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vrldmi_v_v_v(dst, src, src2)) } +emit_vrldmi_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vrldmi_v_v_v(dst, src, src2)) } inst_vcmpnezb_v_v_v :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VCMPNEZB, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_vcmpnezb_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vcmpnezb_v_v_v(dst, src, src2)) } +emit_vcmpnezb_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vcmpnezb_v_v_v(dst, src, src2)) } inst_vcmpnezb_dot_v_v_v :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VCMPNEZB_DOT, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_vcmpnezb_dot_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vcmpnezb_dot_v_v_v(dst, src, src2)) } +emit_vcmpnezb_dot_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vcmpnezb_dot_v_v_v(dst, src, src2)) } inst_vcmpnezh_v_v_v :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VCMPNEZH, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_vcmpnezh_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vcmpnezh_v_v_v(dst, src, src2)) } +emit_vcmpnezh_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vcmpnezh_v_v_v(dst, src, src2)) } inst_vcmpnezh_dot_v_v_v :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VCMPNEZH_DOT, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_vcmpnezh_dot_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vcmpnezh_dot_v_v_v(dst, src, src2)) } +emit_vcmpnezh_dot_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vcmpnezh_dot_v_v_v(dst, src, src2)) } inst_vcmpnezw_v_v_v :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VCMPNEZW, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_vcmpnezw_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vcmpnezw_v_v_v(dst, src, src2)) } +emit_vcmpnezw_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vcmpnezw_v_v_v(dst, src, src2)) } inst_vcmpnezw_dot_v_v_v :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VCMPNEZW_DOT, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_vcmpnezw_dot_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vcmpnezw_dot_v_v_v(dst, src, src2)) } +emit_vcmpnezw_dot_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vcmpnezw_dot_v_v_v(dst, src, src2)) } inst_vclzb_v_v :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .VCLZB, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_vclzb_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_vclzb_v_v(dst, src)) } +emit_vclzb_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_vclzb_v_v(dst, src)) } inst_vclzh_v_v :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .VCLZH, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_vclzh_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_vclzh_v_v(dst, src)) } +emit_vclzh_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_vclzh_v_v(dst, src)) } inst_vclzw_v_v :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .VCLZW, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_vclzw_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_vclzw_v_v(dst, src)) } +emit_vclzw_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_vclzw_v_v(dst, src)) } inst_vclzd_v_v :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .VCLZD, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_vclzd_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_vclzd_v_v(dst, src)) } +emit_vclzd_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_vclzd_v_v(dst, src)) } inst_vctzb_v_v :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .VCTZB, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_vctzb_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_vctzb_v_v(dst, src)) } +emit_vctzb_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_vctzb_v_v(dst, src)) } inst_vctzh_v_v :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .VCTZH, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_vctzh_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_vctzh_v_v(dst, src)) } +emit_vctzh_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_vctzh_v_v(dst, src)) } inst_vctzw_v_v :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .VCTZW, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_vctzw_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_vctzw_v_v(dst, src)) } +emit_vctzw_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_vctzw_v_v(dst, src)) } inst_vctzd_v_v :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .VCTZD, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_vctzd_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_vctzd_v_v(dst, src)) } +emit_vctzd_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_vctzd_v_v(dst, src)) } inst_vpopcntb_v_v :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .VPOPCNTB, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_vpopcntb_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_vpopcntb_v_v(dst, src)) } +emit_vpopcntb_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_vpopcntb_v_v(dst, src)) } inst_vpopcnth_v_v :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .VPOPCNTH, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_vpopcnth_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_vpopcnth_v_v(dst, src)) } +emit_vpopcnth_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_vpopcnth_v_v(dst, src)) } inst_vpopcntw_v_v :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .VPOPCNTW, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_vpopcntw_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_vpopcntw_v_v(dst, src)) } +emit_vpopcntw_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_vpopcntw_v_v(dst, src)) } inst_vpopcntd_v_v :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .VPOPCNTD, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_vpopcntd_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_vpopcntd_v_v(dst, src)) } +emit_vpopcntd_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_vpopcntd_v_v(dst, src)) } inst_vextractub_v_v_imm :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .VEXTRACTUB, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_imm(imm), {}}} } -emit_vextractub_v_v_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_vextractub_v_v_imm(dst, src, imm)) } +emit_vextractub_v_v_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_vextractub_v_v_imm(dst, src, imm)) } inst_vextractuh_v_v_imm :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .VEXTRACTUH, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_imm(imm), {}}} } -emit_vextractuh_v_v_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_vextractuh_v_v_imm(dst, src, imm)) } +emit_vextractuh_v_v_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_vextractuh_v_v_imm(dst, src, imm)) } inst_vextractuw_v_v_imm :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .VEXTRACTUW, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_imm(imm), {}}} } -emit_vextractuw_v_v_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_vextractuw_v_v_imm(dst, src, imm)) } +emit_vextractuw_v_v_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_vextractuw_v_v_imm(dst, src, imm)) } inst_vextractd_v_v_imm :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .VEXTRACTD, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_imm(imm), {}}} } -emit_vextractd_v_v_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_vextractd_v_v_imm(dst, src, imm)) } +emit_vextractd_v_v_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_vextractd_v_v_imm(dst, src, imm)) } inst_vinsertb_v_v_imm :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .VINSERTB, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_imm(imm), {}}} } -emit_vinsertb_v_v_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_vinsertb_v_v_imm(dst, src, imm)) } +emit_vinsertb_v_v_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_vinsertb_v_v_imm(dst, src, imm)) } inst_vinserth_v_v_imm :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .VINSERTH, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_imm(imm), {}}} } -emit_vinserth_v_v_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_vinserth_v_v_imm(dst, src, imm)) } +emit_vinserth_v_v_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_vinserth_v_v_imm(dst, src, imm)) } inst_vinsertw_v_v_imm :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .VINSERTW, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_imm(imm), {}}} } -emit_vinsertw_v_v_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_vinsertw_v_v_imm(dst, src, imm)) } +emit_vinsertw_v_v_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_vinsertw_v_v_imm(dst, src, imm)) } inst_vinsertd_v_v_imm :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .VINSERTD, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_imm(imm), {}}} } -emit_vinsertd_v_v_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_vinsertd_v_v_imm(dst, src, imm)) } +emit_vinsertd_v_v_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_vinsertd_v_v_imm(dst, src, imm)) } inst_vslv_v_v_v :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VSLV, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_vslv_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vslv_v_v_v(dst, src, src2)) } +emit_vslv_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vslv_v_v_v(dst, src, src2)) } inst_vsrv_v_v_v :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VSRV, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_vsrv_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vsrv_v_v_v(dst, src, src2)) } +emit_vsrv_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vsrv_v_v_v(dst, src, src2)) } inst_vmul10uq_v_v :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .VMUL10UQ, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_vmul10uq_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_vmul10uq_v_v(dst, src)) } +emit_vmul10uq_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_vmul10uq_v_v(dst, src)) } inst_vmul10cuq_v_v :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .VMUL10CUQ, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_vmul10cuq_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_vmul10cuq_v_v(dst, src)) } +emit_vmul10cuq_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_vmul10cuq_v_v(dst, src)) } inst_vmul10euq_v_v_v :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VMUL10EUQ, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_vmul10euq_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vmul10euq_v_v_v(dst, src, src2)) } +emit_vmul10euq_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vmul10euq_v_v_v(dst, src, src2)) } inst_vmul10ecuq_v_v_v :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VMUL10ECUQ, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_vmul10ecuq_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vmul10ecuq_v_v_v(dst, src, src2)) } +emit_vmul10ecuq_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vmul10ecuq_v_v_v(dst, src, src2)) } inst_lxsdx_vs_mem :: #force_inline proc "contextless" (dst: Register, addr: Memory) -> Instruction { return Instruction{mnemonic = .LXSDX, operand_count = 2, length = 4, ops = {op_reg(dst), op_mem(addr), {}, {}}} } -emit_lxsdx_vs_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append(instructions, inst_lxsdx_vs_mem(dst, addr)) } +emit_lxsdx_vs_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append_elem(instructions, inst_lxsdx_vs_mem(dst, addr)) } inst_lxsiwax_vs_mem :: #force_inline proc "contextless" (dst: Register, addr: Memory) -> Instruction { return Instruction{mnemonic = .LXSIWAX, operand_count = 2, length = 4, ops = {op_reg(dst), op_mem(addr), {}, {}}} } -emit_lxsiwax_vs_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append(instructions, inst_lxsiwax_vs_mem(dst, addr)) } +emit_lxsiwax_vs_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append_elem(instructions, inst_lxsiwax_vs_mem(dst, addr)) } inst_lxsiwzx_vs_mem :: #force_inline proc "contextless" (dst: Register, addr: Memory) -> Instruction { return Instruction{mnemonic = .LXSIWZX, operand_count = 2, length = 4, ops = {op_reg(dst), op_mem(addr), {}, {}}} } -emit_lxsiwzx_vs_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append(instructions, inst_lxsiwzx_vs_mem(dst, addr)) } +emit_lxsiwzx_vs_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append_elem(instructions, inst_lxsiwzx_vs_mem(dst, addr)) } inst_lxvd2x_vs_mem :: #force_inline proc "contextless" (dst: Register, addr: Memory) -> Instruction { return Instruction{mnemonic = .LXVD2X, operand_count = 2, length = 4, ops = {op_reg(dst), op_mem(addr), {}, {}}} } -emit_lxvd2x_vs_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append(instructions, inst_lxvd2x_vs_mem(dst, addr)) } +emit_lxvd2x_vs_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append_elem(instructions, inst_lxvd2x_vs_mem(dst, addr)) } inst_lxvdsx_vs_mem :: #force_inline proc "contextless" (dst: Register, addr: Memory) -> Instruction { return Instruction{mnemonic = .LXVDSX, operand_count = 2, length = 4, ops = {op_reg(dst), op_mem(addr), {}, {}}} } -emit_lxvdsx_vs_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append(instructions, inst_lxvdsx_vs_mem(dst, addr)) } +emit_lxvdsx_vs_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append_elem(instructions, inst_lxvdsx_vs_mem(dst, addr)) } inst_lxvw4x_vs_mem :: #force_inline proc "contextless" (dst: Register, addr: Memory) -> Instruction { return Instruction{mnemonic = .LXVW4X, operand_count = 2, length = 4, ops = {op_reg(dst), op_mem(addr), {}, {}}} } -emit_lxvw4x_vs_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append(instructions, inst_lxvw4x_vs_mem(dst, addr)) } +emit_lxvw4x_vs_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append_elem(instructions, inst_lxvw4x_vs_mem(dst, addr)) } inst_stxsdx_vs_mem :: #force_inline proc "contextless" (dst: Register, addr: Memory) -> Instruction { return Instruction{mnemonic = .STXSDX, operand_count = 2, length = 4, ops = {op_reg(dst), op_mem(addr), {}, {}}} } -emit_stxsdx_vs_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append(instructions, inst_stxsdx_vs_mem(dst, addr)) } +emit_stxsdx_vs_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append_elem(instructions, inst_stxsdx_vs_mem(dst, addr)) } inst_stxsiwx_vs_mem :: #force_inline proc "contextless" (dst: Register, addr: Memory) -> Instruction { return Instruction{mnemonic = .STXSIWX, operand_count = 2, length = 4, ops = {op_reg(dst), op_mem(addr), {}, {}}} } -emit_stxsiwx_vs_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append(instructions, inst_stxsiwx_vs_mem(dst, addr)) } +emit_stxsiwx_vs_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append_elem(instructions, inst_stxsiwx_vs_mem(dst, addr)) } inst_stxvd2x_vs_mem :: #force_inline proc "contextless" (dst: Register, addr: Memory) -> Instruction { return Instruction{mnemonic = .STXVD2X, operand_count = 2, length = 4, ops = {op_reg(dst), op_mem(addr), {}, {}}} } -emit_stxvd2x_vs_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append(instructions, inst_stxvd2x_vs_mem(dst, addr)) } +emit_stxvd2x_vs_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append_elem(instructions, inst_stxvd2x_vs_mem(dst, addr)) } inst_stxvw4x_vs_mem :: #force_inline proc "contextless" (dst: Register, addr: Memory) -> Instruction { return Instruction{mnemonic = .STXVW4X, operand_count = 2, length = 4, ops = {op_reg(dst), op_mem(addr), {}, {}}} } -emit_stxvw4x_vs_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append(instructions, inst_stxvw4x_vs_mem(dst, addr)) } +emit_stxvw4x_vs_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append_elem(instructions, inst_stxvw4x_vs_mem(dst, addr)) } inst_lxsspx_vs_mem :: #force_inline proc "contextless" (dst: Register, addr: Memory) -> Instruction { return Instruction{mnemonic = .LXSSPX, operand_count = 2, length = 4, ops = {op_reg(dst), op_mem(addr), {}, {}}} } -emit_lxsspx_vs_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append(instructions, inst_lxsspx_vs_mem(dst, addr)) } +emit_lxsspx_vs_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append_elem(instructions, inst_lxsspx_vs_mem(dst, addr)) } inst_stxsspx_vs_mem :: #force_inline proc "contextless" (dst: Register, addr: Memory) -> Instruction { return Instruction{mnemonic = .STXSSPX, operand_count = 2, length = 4, ops = {op_reg(dst), op_mem(addr), {}, {}}} } -emit_stxsspx_vs_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append(instructions, inst_stxsspx_vs_mem(dst, addr)) } +emit_stxsspx_vs_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append_elem(instructions, inst_stxsspx_vs_mem(dst, addr)) } inst_lxv_vs_mem :: #force_inline proc "contextless" (dst: Register, addr: Memory) -> Instruction { return Instruction{mnemonic = .LXV, operand_count = 2, length = 4, ops = {op_reg(dst), op_mem(addr), {}, {}}} } -emit_lxv_vs_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append(instructions, inst_lxv_vs_mem(dst, addr)) } +emit_lxv_vs_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append_elem(instructions, inst_lxv_vs_mem(dst, addr)) } inst_stxv_vs_mem :: #force_inline proc "contextless" (dst: Register, addr: Memory) -> Instruction { return Instruction{mnemonic = .STXV, operand_count = 2, length = 4, ops = {op_reg(dst), op_mem(addr), {}, {}}} } -emit_stxv_vs_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append(instructions, inst_stxv_vs_mem(dst, addr)) } +emit_stxv_vs_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append_elem(instructions, inst_stxv_vs_mem(dst, addr)) } inst_lxvh8x_vs_mem :: #force_inline proc "contextless" (dst: Register, addr: Memory) -> Instruction { return Instruction{mnemonic = .LXVH8X, operand_count = 2, length = 4, ops = {op_reg(dst), op_mem(addr), {}, {}}} } -emit_lxvh8x_vs_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append(instructions, inst_lxvh8x_vs_mem(dst, addr)) } +emit_lxvh8x_vs_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append_elem(instructions, inst_lxvh8x_vs_mem(dst, addr)) } inst_lxvb16x_vs_mem :: #force_inline proc "contextless" (dst: Register, addr: Memory) -> Instruction { return Instruction{mnemonic = .LXVB16X, operand_count = 2, length = 4, ops = {op_reg(dst), op_mem(addr), {}, {}}} } -emit_lxvb16x_vs_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append(instructions, inst_lxvb16x_vs_mem(dst, addr)) } +emit_lxvb16x_vs_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append_elem(instructions, inst_lxvb16x_vs_mem(dst, addr)) } inst_lxvl_vs_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .LXVL, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_lxvl_vs_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_lxvl_vs_r_r(dst, src, src2)) } +emit_lxvl_vs_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_lxvl_vs_r_r(dst, src, src2)) } inst_lxvll_vs_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .LXVLL, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_lxvll_vs_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_lxvll_vs_r_r(dst, src, src2)) } +emit_lxvll_vs_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_lxvll_vs_r_r(dst, src, src2)) } inst_stxvh8x_vs_mem :: #force_inline proc "contextless" (dst: Register, addr: Memory) -> Instruction { return Instruction{mnemonic = .STXVH8X, operand_count = 2, length = 4, ops = {op_reg(dst), op_mem(addr), {}, {}}} } -emit_stxvh8x_vs_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append(instructions, inst_stxvh8x_vs_mem(dst, addr)) } +emit_stxvh8x_vs_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append_elem(instructions, inst_stxvh8x_vs_mem(dst, addr)) } inst_stxvb16x_vs_mem :: #force_inline proc "contextless" (dst: Register, addr: Memory) -> Instruction { return Instruction{mnemonic = .STXVB16X, operand_count = 2, length = 4, ops = {op_reg(dst), op_mem(addr), {}, {}}} } -emit_stxvb16x_vs_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append(instructions, inst_stxvb16x_vs_mem(dst, addr)) } +emit_stxvb16x_vs_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append_elem(instructions, inst_stxvb16x_vs_mem(dst, addr)) } inst_stxvl_vs_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .STXVL, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_stxvl_vs_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_stxvl_vs_r_r(dst, src, src2)) } +emit_stxvl_vs_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_stxvl_vs_r_r(dst, src, src2)) } inst_stxvll_vs_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .STXVLL, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_stxvll_vs_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_stxvll_vs_r_r(dst, src, src2)) } +emit_stxvll_vs_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_stxvll_vs_r_r(dst, src, src2)) } inst_lxvx_vs_mem :: #force_inline proc "contextless" (dst: Register, addr: Memory) -> Instruction { return Instruction{mnemonic = .LXVX, operand_count = 2, length = 4, ops = {op_reg(dst), op_mem(addr), {}, {}}} } -emit_lxvx_vs_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append(instructions, inst_lxvx_vs_mem(dst, addr)) } +emit_lxvx_vs_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append_elem(instructions, inst_lxvx_vs_mem(dst, addr)) } inst_stxvx_vs_mem :: #force_inline proc "contextless" (dst: Register, addr: Memory) -> Instruction { return Instruction{mnemonic = .STXVX, operand_count = 2, length = 4, ops = {op_reg(dst), op_mem(addr), {}, {}}} } -emit_stxvx_vs_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append(instructions, inst_stxvx_vs_mem(dst, addr)) } +emit_stxvx_vs_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append_elem(instructions, inst_stxvx_vs_mem(dst, addr)) } inst_lxsibzx_vs_mem :: #force_inline proc "contextless" (dst: Register, addr: Memory) -> Instruction { return Instruction{mnemonic = .LXSIBZX, operand_count = 2, length = 4, ops = {op_reg(dst), op_mem(addr), {}, {}}} } -emit_lxsibzx_vs_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append(instructions, inst_lxsibzx_vs_mem(dst, addr)) } +emit_lxsibzx_vs_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append_elem(instructions, inst_lxsibzx_vs_mem(dst, addr)) } inst_lxsihzx_vs_mem :: #force_inline proc "contextless" (dst: Register, addr: Memory) -> Instruction { return Instruction{mnemonic = .LXSIHZX, operand_count = 2, length = 4, ops = {op_reg(dst), op_mem(addr), {}, {}}} } -emit_lxsihzx_vs_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append(instructions, inst_lxsihzx_vs_mem(dst, addr)) } +emit_lxsihzx_vs_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append_elem(instructions, inst_lxsihzx_vs_mem(dst, addr)) } inst_stxsibx_vs_mem :: #force_inline proc "contextless" (dst: Register, addr: Memory) -> Instruction { return Instruction{mnemonic = .STXSIBX, operand_count = 2, length = 4, ops = {op_reg(dst), op_mem(addr), {}, {}}} } -emit_stxsibx_vs_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append(instructions, inst_stxsibx_vs_mem(dst, addr)) } +emit_stxsibx_vs_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append_elem(instructions, inst_stxsibx_vs_mem(dst, addr)) } inst_stxsihx_vs_mem :: #force_inline proc "contextless" (dst: Register, addr: Memory) -> Instruction { return Instruction{mnemonic = .STXSIHX, operand_count = 2, length = 4, ops = {op_reg(dst), op_mem(addr), {}, {}}} } -emit_stxsihx_vs_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append(instructions, inst_stxsihx_vs_mem(dst, addr)) } +emit_stxsihx_vs_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append_elem(instructions, inst_stxsihx_vs_mem(dst, addr)) } inst_lxsd_v_mem :: #force_inline proc "contextless" (dst: Register, addr: Memory) -> Instruction { return Instruction{mnemonic = .LXSD, operand_count = 2, length = 4, ops = {op_reg(dst), op_mem(addr), {}, {}}} } -emit_lxsd_v_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append(instructions, inst_lxsd_v_mem(dst, addr)) } +emit_lxsd_v_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append_elem(instructions, inst_lxsd_v_mem(dst, addr)) } inst_stxsd_v_mem :: #force_inline proc "contextless" (dst: Register, addr: Memory) -> Instruction { return Instruction{mnemonic = .STXSD, operand_count = 2, length = 4, ops = {op_reg(dst), op_mem(addr), {}, {}}} } -emit_stxsd_v_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append(instructions, inst_stxsd_v_mem(dst, addr)) } +emit_stxsd_v_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append_elem(instructions, inst_stxsd_v_mem(dst, addr)) } inst_lxssp_v_mem :: #force_inline proc "contextless" (dst: Register, addr: Memory) -> Instruction { return Instruction{mnemonic = .LXSSP, operand_count = 2, length = 4, ops = {op_reg(dst), op_mem(addr), {}, {}}} } -emit_lxssp_v_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append(instructions, inst_lxssp_v_mem(dst, addr)) } +emit_lxssp_v_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append_elem(instructions, inst_lxssp_v_mem(dst, addr)) } inst_stxssp_v_mem :: #force_inline proc "contextless" (dst: Register, addr: Memory) -> Instruction { return Instruction{mnemonic = .STXSSP, operand_count = 2, length = 4, ops = {op_reg(dst), op_mem(addr), {}, {}}} } -emit_stxssp_v_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append(instructions, inst_stxssp_v_mem(dst, addr)) } +emit_stxssp_v_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append_elem(instructions, inst_stxssp_v_mem(dst, addr)) } inst_xsaddsp_vs_vs_vs :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .XSADDSP, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_xsaddsp_vs_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_xsaddsp_vs_vs_vs(dst, src, src2)) } +emit_xsaddsp_vs_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_xsaddsp_vs_vs_vs(dst, src, src2)) } inst_xsadddp_vs_vs_vs :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .XSADDDP, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_xsadddp_vs_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_xsadddp_vs_vs_vs(dst, src, src2)) } +emit_xsadddp_vs_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_xsadddp_vs_vs_vs(dst, src, src2)) } inst_xssubsp_vs_vs_vs :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .XSSUBSP, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_xssubsp_vs_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_xssubsp_vs_vs_vs(dst, src, src2)) } +emit_xssubsp_vs_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_xssubsp_vs_vs_vs(dst, src, src2)) } inst_xssubdp_vs_vs_vs :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .XSSUBDP, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_xssubdp_vs_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_xssubdp_vs_vs_vs(dst, src, src2)) } +emit_xssubdp_vs_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_xssubdp_vs_vs_vs(dst, src, src2)) } inst_xsmulsp_vs_vs_vs :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .XSMULSP, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_xsmulsp_vs_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_xsmulsp_vs_vs_vs(dst, src, src2)) } +emit_xsmulsp_vs_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_xsmulsp_vs_vs_vs(dst, src, src2)) } inst_xsmuldp_vs_vs_vs :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .XSMULDP, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_xsmuldp_vs_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_xsmuldp_vs_vs_vs(dst, src, src2)) } +emit_xsmuldp_vs_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_xsmuldp_vs_vs_vs(dst, src, src2)) } inst_xsdivsp_vs_vs_vs :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .XSDIVSP, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_xsdivsp_vs_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_xsdivsp_vs_vs_vs(dst, src, src2)) } +emit_xsdivsp_vs_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_xsdivsp_vs_vs_vs(dst, src, src2)) } inst_xsdivdp_vs_vs_vs :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .XSDIVDP, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_xsdivdp_vs_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_xsdivdp_vs_vs_vs(dst, src, src2)) } +emit_xsdivdp_vs_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_xsdivdp_vs_vs_vs(dst, src, src2)) } inst_xssqrtsp_vs_vs :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .XSSQRTSP, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_xssqrtsp_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_xssqrtsp_vs_vs(dst, src)) } +emit_xssqrtsp_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_xssqrtsp_vs_vs(dst, src)) } inst_xssqrtdp_vs_vs :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .XSSQRTDP, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_xssqrtdp_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_xssqrtdp_vs_vs(dst, src)) } +emit_xssqrtdp_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_xssqrtdp_vs_vs(dst, src)) } inst_xsresp_vs_vs :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .XSRESP, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_xsresp_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_xsresp_vs_vs(dst, src)) } +emit_xsresp_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_xsresp_vs_vs(dst, src)) } inst_xsredp_vs_vs :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .XSREDP, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_xsredp_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_xsredp_vs_vs(dst, src)) } +emit_xsredp_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_xsredp_vs_vs(dst, src)) } inst_xsrsqrtesp_vs_vs :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .XSRSQRTESP, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_xsrsqrtesp_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_xsrsqrtesp_vs_vs(dst, src)) } +emit_xsrsqrtesp_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_xsrsqrtesp_vs_vs(dst, src)) } inst_xsrsqrtedp_vs_vs :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .XSRSQRTEDP, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_xsrsqrtedp_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_xsrsqrtedp_vs_vs(dst, src)) } +emit_xsrsqrtedp_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_xsrsqrtedp_vs_vs(dst, src)) } inst_xsmaddasp_vs_vs_vs :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .XSMADDASP, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_xsmaddasp_vs_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_xsmaddasp_vs_vs_vs(dst, src, src2)) } +emit_xsmaddasp_vs_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_xsmaddasp_vs_vs_vs(dst, src, src2)) } inst_xsmaddadp_vs_vs_vs :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .XSMADDADP, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_xsmaddadp_vs_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_xsmaddadp_vs_vs_vs(dst, src, src2)) } +emit_xsmaddadp_vs_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_xsmaddadp_vs_vs_vs(dst, src, src2)) } inst_xsmaddmsp_vs_vs_vs :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .XSMADDMSP, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_xsmaddmsp_vs_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_xsmaddmsp_vs_vs_vs(dst, src, src2)) } +emit_xsmaddmsp_vs_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_xsmaddmsp_vs_vs_vs(dst, src, src2)) } inst_xsmaddmdp_vs_vs_vs :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .XSMADDMDP, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_xsmaddmdp_vs_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_xsmaddmdp_vs_vs_vs(dst, src, src2)) } +emit_xsmaddmdp_vs_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_xsmaddmdp_vs_vs_vs(dst, src, src2)) } inst_xsmsubasp_vs_vs_vs :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .XSMSUBASP, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_xsmsubasp_vs_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_xsmsubasp_vs_vs_vs(dst, src, src2)) } +emit_xsmsubasp_vs_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_xsmsubasp_vs_vs_vs(dst, src, src2)) } inst_xsmsubadp_vs_vs_vs :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .XSMSUBADP, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_xsmsubadp_vs_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_xsmsubadp_vs_vs_vs(dst, src, src2)) } +emit_xsmsubadp_vs_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_xsmsubadp_vs_vs_vs(dst, src, src2)) } inst_xsmsubmsp_vs_vs_vs :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .XSMSUBMSP, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_xsmsubmsp_vs_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_xsmsubmsp_vs_vs_vs(dst, src, src2)) } +emit_xsmsubmsp_vs_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_xsmsubmsp_vs_vs_vs(dst, src, src2)) } inst_xsmsubmdp_vs_vs_vs :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .XSMSUBMDP, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_xsmsubmdp_vs_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_xsmsubmdp_vs_vs_vs(dst, src, src2)) } +emit_xsmsubmdp_vs_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_xsmsubmdp_vs_vs_vs(dst, src, src2)) } inst_xsnmaddasp_vs_vs_vs :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .XSNMADDASP, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_xsnmaddasp_vs_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_xsnmaddasp_vs_vs_vs(dst, src, src2)) } +emit_xsnmaddasp_vs_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_xsnmaddasp_vs_vs_vs(dst, src, src2)) } inst_xsnmaddadp_vs_vs_vs :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .XSNMADDADP, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_xsnmaddadp_vs_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_xsnmaddadp_vs_vs_vs(dst, src, src2)) } +emit_xsnmaddadp_vs_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_xsnmaddadp_vs_vs_vs(dst, src, src2)) } inst_xsnmaddmsp_vs_vs_vs :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .XSNMADDMSP, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_xsnmaddmsp_vs_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_xsnmaddmsp_vs_vs_vs(dst, src, src2)) } +emit_xsnmaddmsp_vs_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_xsnmaddmsp_vs_vs_vs(dst, src, src2)) } inst_xsnmaddmdp_vs_vs_vs :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .XSNMADDMDP, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_xsnmaddmdp_vs_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_xsnmaddmdp_vs_vs_vs(dst, src, src2)) } +emit_xsnmaddmdp_vs_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_xsnmaddmdp_vs_vs_vs(dst, src, src2)) } inst_xsnmsubasp_vs_vs_vs :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .XSNMSUBASP, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_xsnmsubasp_vs_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_xsnmsubasp_vs_vs_vs(dst, src, src2)) } +emit_xsnmsubasp_vs_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_xsnmsubasp_vs_vs_vs(dst, src, src2)) } inst_xsnmsubadp_vs_vs_vs :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .XSNMSUBADP, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_xsnmsubadp_vs_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_xsnmsubadp_vs_vs_vs(dst, src, src2)) } +emit_xsnmsubadp_vs_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_xsnmsubadp_vs_vs_vs(dst, src, src2)) } inst_xsnmsubmsp_vs_vs_vs :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .XSNMSUBMSP, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_xsnmsubmsp_vs_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_xsnmsubmsp_vs_vs_vs(dst, src, src2)) } +emit_xsnmsubmsp_vs_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_xsnmsubmsp_vs_vs_vs(dst, src, src2)) } inst_xsnmsubmdp_vs_vs_vs :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .XSNMSUBMDP, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_xsnmsubmdp_vs_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_xsnmsubmdp_vs_vs_vs(dst, src, src2)) } +emit_xsnmsubmdp_vs_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_xsnmsubmdp_vs_vs_vs(dst, src, src2)) } inst_xsmaxdp_vs_vs_vs :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .XSMAXDP, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_xsmaxdp_vs_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_xsmaxdp_vs_vs_vs(dst, src, src2)) } +emit_xsmaxdp_vs_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_xsmaxdp_vs_vs_vs(dst, src, src2)) } inst_xsmindp_vs_vs_vs :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .XSMINDP, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_xsmindp_vs_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_xsmindp_vs_vs_vs(dst, src, src2)) } +emit_xsmindp_vs_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_xsmindp_vs_vs_vs(dst, src, src2)) } inst_xsmaxcdp_vs_vs_vs :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .XSMAXCDP, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_xsmaxcdp_vs_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_xsmaxcdp_vs_vs_vs(dst, src, src2)) } +emit_xsmaxcdp_vs_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_xsmaxcdp_vs_vs_vs(dst, src, src2)) } inst_xsmincdp_vs_vs_vs :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .XSMINCDP, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_xsmincdp_vs_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_xsmincdp_vs_vs_vs(dst, src, src2)) } +emit_xsmincdp_vs_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_xsmincdp_vs_vs_vs(dst, src, src2)) } inst_xsmaxjdp_vs_vs_vs :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .XSMAXJDP, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_xsmaxjdp_vs_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_xsmaxjdp_vs_vs_vs(dst, src, src2)) } +emit_xsmaxjdp_vs_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_xsmaxjdp_vs_vs_vs(dst, src, src2)) } inst_xsminjdp_vs_vs_vs :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .XSMINJDP, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_xsminjdp_vs_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_xsminjdp_vs_vs_vs(dst, src, src2)) } +emit_xsminjdp_vs_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_xsminjdp_vs_vs_vs(dst, src, src2)) } inst_xscmpodp_crf_vs_vs :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .XSCMPODP, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_xscmpodp_crf_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_xscmpodp_crf_vs_vs(dst, src, src2)) } +emit_xscmpodp_crf_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_xscmpodp_crf_vs_vs(dst, src, src2)) } inst_xscmpudp_crf_vs_vs :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .XSCMPUDP, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_xscmpudp_crf_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_xscmpudp_crf_vs_vs(dst, src, src2)) } +emit_xscmpudp_crf_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_xscmpudp_crf_vs_vs(dst, src, src2)) } inst_xscmpeqdp_vs_vs_vs :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .XSCMPEQDP, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_xscmpeqdp_vs_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_xscmpeqdp_vs_vs_vs(dst, src, src2)) } +emit_xscmpeqdp_vs_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_xscmpeqdp_vs_vs_vs(dst, src, src2)) } inst_xscmpgtdp_vs_vs_vs :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .XSCMPGTDP, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_xscmpgtdp_vs_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_xscmpgtdp_vs_vs_vs(dst, src, src2)) } +emit_xscmpgtdp_vs_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_xscmpgtdp_vs_vs_vs(dst, src, src2)) } inst_xscmpgedp_vs_vs_vs :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .XSCMPGEDP, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_xscmpgedp_vs_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_xscmpgedp_vs_vs_vs(dst, src, src2)) } +emit_xscmpgedp_vs_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_xscmpgedp_vs_vs_vs(dst, src, src2)) } inst_xscpsgndp_vs_vs_vs :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .XSCPSGNDP, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_xscpsgndp_vs_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_xscpsgndp_vs_vs_vs(dst, src, src2)) } +emit_xscpsgndp_vs_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_xscpsgndp_vs_vs_vs(dst, src, src2)) } inst_xsabsdp_vs_vs :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .XSABSDP, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_xsabsdp_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_xsabsdp_vs_vs(dst, src)) } +emit_xsabsdp_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_xsabsdp_vs_vs(dst, src)) } inst_xsnabsdp_vs_vs :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .XSNABSDP, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_xsnabsdp_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_xsnabsdp_vs_vs(dst, src)) } +emit_xsnabsdp_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_xsnabsdp_vs_vs(dst, src)) } inst_xsnegdp_vs_vs :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .XSNEGDP, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_xsnegdp_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_xsnegdp_vs_vs(dst, src)) } +emit_xsnegdp_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_xsnegdp_vs_vs(dst, src)) } inst_xscvdpsp_vs_vs :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .XSCVDPSP, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_xscvdpsp_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_xscvdpsp_vs_vs(dst, src)) } +emit_xscvdpsp_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_xscvdpsp_vs_vs(dst, src)) } inst_xscvspdp_vs_vs :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .XSCVSPDP, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_xscvspdp_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_xscvspdp_vs_vs(dst, src)) } +emit_xscvspdp_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_xscvspdp_vs_vs(dst, src)) } inst_xscvdpsxds_vs_vs :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .XSCVDPSXDS, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_xscvdpsxds_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_xscvdpsxds_vs_vs(dst, src)) } +emit_xscvdpsxds_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_xscvdpsxds_vs_vs(dst, src)) } inst_xscvdpuxds_vs_vs :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .XSCVDPUXDS, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_xscvdpuxds_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_xscvdpuxds_vs_vs(dst, src)) } +emit_xscvdpuxds_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_xscvdpuxds_vs_vs(dst, src)) } inst_xscvsxddp_vs_vs :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .XSCVSXDDP, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_xscvsxddp_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_xscvsxddp_vs_vs(dst, src)) } +emit_xscvsxddp_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_xscvsxddp_vs_vs(dst, src)) } inst_xscvuxddp_vs_vs :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .XSCVUXDDP, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_xscvuxddp_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_xscvuxddp_vs_vs(dst, src)) } +emit_xscvuxddp_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_xscvuxddp_vs_vs(dst, src)) } inst_xscvdpsxws_vs_vs :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .XSCVDPSXWS, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_xscvdpsxws_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_xscvdpsxws_vs_vs(dst, src)) } +emit_xscvdpsxws_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_xscvdpsxws_vs_vs(dst, src)) } inst_xscvdpuxws_vs_vs :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .XSCVDPUXWS, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_xscvdpuxws_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_xscvdpuxws_vs_vs(dst, src)) } +emit_xscvdpuxws_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_xscvdpuxws_vs_vs(dst, src)) } inst_xscvdphp_vs_vs :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .XSCVDPHP, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_xscvdphp_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_xscvdphp_vs_vs(dst, src)) } +emit_xscvdphp_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_xscvdphp_vs_vs(dst, src)) } inst_xscvhpdp_vs_vs :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .XSCVHPDP, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_xscvhpdp_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_xscvhpdp_vs_vs(dst, src)) } +emit_xscvhpdp_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_xscvhpdp_vs_vs(dst, src)) } inst_xscvspdpn_vs_vs :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .XSCVSPDPN, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_xscvspdpn_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_xscvspdpn_vs_vs(dst, src)) } +emit_xscvspdpn_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_xscvspdpn_vs_vs(dst, src)) } inst_xscvdpspn_vs_vs :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .XSCVDPSPN, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_xscvdpspn_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_xscvdpspn_vs_vs(dst, src)) } +emit_xscvdpspn_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_xscvdpspn_vs_vs(dst, src)) } inst_xsrdpi_vs_vs :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .XSRDPI, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_xsrdpi_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_xsrdpi_vs_vs(dst, src)) } +emit_xsrdpi_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_xsrdpi_vs_vs(dst, src)) } inst_xsrdpim_vs_vs :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .XSRDPIM, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_xsrdpim_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_xsrdpim_vs_vs(dst, src)) } +emit_xsrdpim_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_xsrdpim_vs_vs(dst, src)) } inst_xsrdpip_vs_vs :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .XSRDPIP, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_xsrdpip_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_xsrdpip_vs_vs(dst, src)) } +emit_xsrdpip_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_xsrdpip_vs_vs(dst, src)) } inst_xsrdpiz_vs_vs :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .XSRDPIZ, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_xsrdpiz_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_xsrdpiz_vs_vs(dst, src)) } +emit_xsrdpiz_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_xsrdpiz_vs_vs(dst, src)) } inst_xsrdpic_vs_vs :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .XSRDPIC, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_xsrdpic_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_xsrdpic_vs_vs(dst, src)) } +emit_xsrdpic_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_xsrdpic_vs_vs(dst, src)) } inst_xsrsp_vs_vs :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .XSRSP, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_xsrsp_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_xsrsp_vs_vs(dst, src)) } +emit_xsrsp_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_xsrsp_vs_vs(dst, src)) } inst_xsiexpdp_vs_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .XSIEXPDP, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_xsiexpdp_vs_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_xsiexpdp_vs_r_r(dst, src, src2)) } +emit_xsiexpdp_vs_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_xsiexpdp_vs_r_r(dst, src, src2)) } inst_xsxexpdp_r_vs :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .XSXEXPDP, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_xsxexpdp_r_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_xsxexpdp_r_vs(dst, src)) } +emit_xsxexpdp_r_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_xsxexpdp_r_vs(dst, src)) } inst_xsxsigdp_r_vs :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .XSXSIGDP, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_xsxsigdp_r_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_xsxsigdp_r_vs(dst, src)) } +emit_xsxsigdp_r_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_xsxsigdp_r_vs(dst, src)) } inst_xvaddsp_vs_vs_vs :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .XVADDSP, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_xvaddsp_vs_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_xvaddsp_vs_vs_vs(dst, src, src2)) } +emit_xvaddsp_vs_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_xvaddsp_vs_vs_vs(dst, src, src2)) } inst_xvadddp_vs_vs_vs :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .XVADDDP, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_xvadddp_vs_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_xvadddp_vs_vs_vs(dst, src, src2)) } +emit_xvadddp_vs_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_xvadddp_vs_vs_vs(dst, src, src2)) } inst_xvsubsp_vs_vs_vs :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .XVSUBSP, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_xvsubsp_vs_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_xvsubsp_vs_vs_vs(dst, src, src2)) } +emit_xvsubsp_vs_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_xvsubsp_vs_vs_vs(dst, src, src2)) } inst_xvsubdp_vs_vs_vs :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .XVSUBDP, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_xvsubdp_vs_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_xvsubdp_vs_vs_vs(dst, src, src2)) } +emit_xvsubdp_vs_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_xvsubdp_vs_vs_vs(dst, src, src2)) } inst_xvmulsp_vs_vs_vs :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .XVMULSP, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_xvmulsp_vs_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_xvmulsp_vs_vs_vs(dst, src, src2)) } +emit_xvmulsp_vs_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_xvmulsp_vs_vs_vs(dst, src, src2)) } inst_xvmuldp_vs_vs_vs :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .XVMULDP, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_xvmuldp_vs_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_xvmuldp_vs_vs_vs(dst, src, src2)) } +emit_xvmuldp_vs_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_xvmuldp_vs_vs_vs(dst, src, src2)) } inst_xvdivsp_vs_vs_vs :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .XVDIVSP, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_xvdivsp_vs_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_xvdivsp_vs_vs_vs(dst, src, src2)) } +emit_xvdivsp_vs_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_xvdivsp_vs_vs_vs(dst, src, src2)) } inst_xvdivdp_vs_vs_vs :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .XVDIVDP, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_xvdivdp_vs_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_xvdivdp_vs_vs_vs(dst, src, src2)) } +emit_xvdivdp_vs_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_xvdivdp_vs_vs_vs(dst, src, src2)) } inst_xvsqrtsp_vs_vs :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .XVSQRTSP, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_xvsqrtsp_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_xvsqrtsp_vs_vs(dst, src)) } +emit_xvsqrtsp_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_xvsqrtsp_vs_vs(dst, src)) } inst_xvsqrtdp_vs_vs :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .XVSQRTDP, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_xvsqrtdp_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_xvsqrtdp_vs_vs(dst, src)) } +emit_xvsqrtdp_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_xvsqrtdp_vs_vs(dst, src)) } inst_xvresp_vs_vs :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .XVRESP, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_xvresp_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_xvresp_vs_vs(dst, src)) } +emit_xvresp_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_xvresp_vs_vs(dst, src)) } inst_xvredp_vs_vs :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .XVREDP, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_xvredp_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_xvredp_vs_vs(dst, src)) } +emit_xvredp_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_xvredp_vs_vs(dst, src)) } inst_xvrsqrtesp_vs_vs :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .XVRSQRTESP, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_xvrsqrtesp_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_xvrsqrtesp_vs_vs(dst, src)) } +emit_xvrsqrtesp_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_xvrsqrtesp_vs_vs(dst, src)) } inst_xvrsqrtedp_vs_vs :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .XVRSQRTEDP, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_xvrsqrtedp_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_xvrsqrtedp_vs_vs(dst, src)) } +emit_xvrsqrtedp_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_xvrsqrtedp_vs_vs(dst, src)) } inst_xvmaddasp_vs_vs_vs :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .XVMADDASP, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_xvmaddasp_vs_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_xvmaddasp_vs_vs_vs(dst, src, src2)) } +emit_xvmaddasp_vs_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_xvmaddasp_vs_vs_vs(dst, src, src2)) } inst_xvmaddadp_vs_vs_vs :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .XVMADDADP, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_xvmaddadp_vs_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_xvmaddadp_vs_vs_vs(dst, src, src2)) } +emit_xvmaddadp_vs_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_xvmaddadp_vs_vs_vs(dst, src, src2)) } inst_xvmaddmsp_vs_vs_vs :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .XVMADDMSP, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_xvmaddmsp_vs_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_xvmaddmsp_vs_vs_vs(dst, src, src2)) } +emit_xvmaddmsp_vs_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_xvmaddmsp_vs_vs_vs(dst, src, src2)) } inst_xvmaddmdp_vs_vs_vs :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .XVMADDMDP, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_xvmaddmdp_vs_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_xvmaddmdp_vs_vs_vs(dst, src, src2)) } +emit_xvmaddmdp_vs_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_xvmaddmdp_vs_vs_vs(dst, src, src2)) } inst_xvmsubasp_vs_vs_vs :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .XVMSUBASP, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_xvmsubasp_vs_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_xvmsubasp_vs_vs_vs(dst, src, src2)) } +emit_xvmsubasp_vs_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_xvmsubasp_vs_vs_vs(dst, src, src2)) } inst_xvmsubadp_vs_vs_vs :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .XVMSUBADP, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_xvmsubadp_vs_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_xvmsubadp_vs_vs_vs(dst, src, src2)) } +emit_xvmsubadp_vs_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_xvmsubadp_vs_vs_vs(dst, src, src2)) } inst_xvmsubmsp_vs_vs_vs :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .XVMSUBMSP, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_xvmsubmsp_vs_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_xvmsubmsp_vs_vs_vs(dst, src, src2)) } +emit_xvmsubmsp_vs_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_xvmsubmsp_vs_vs_vs(dst, src, src2)) } inst_xvmsubmdp_vs_vs_vs :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .XVMSUBMDP, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_xvmsubmdp_vs_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_xvmsubmdp_vs_vs_vs(dst, src, src2)) } +emit_xvmsubmdp_vs_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_xvmsubmdp_vs_vs_vs(dst, src, src2)) } inst_xvnmaddasp_vs_vs_vs :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .XVNMADDASP, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_xvnmaddasp_vs_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_xvnmaddasp_vs_vs_vs(dst, src, src2)) } +emit_xvnmaddasp_vs_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_xvnmaddasp_vs_vs_vs(dst, src, src2)) } inst_xvnmaddadp_vs_vs_vs :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .XVNMADDADP, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_xvnmaddadp_vs_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_xvnmaddadp_vs_vs_vs(dst, src, src2)) } +emit_xvnmaddadp_vs_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_xvnmaddadp_vs_vs_vs(dst, src, src2)) } inst_xvnmaddmsp_vs_vs_vs :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .XVNMADDMSP, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_xvnmaddmsp_vs_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_xvnmaddmsp_vs_vs_vs(dst, src, src2)) } +emit_xvnmaddmsp_vs_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_xvnmaddmsp_vs_vs_vs(dst, src, src2)) } inst_xvnmaddmdp_vs_vs_vs :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .XVNMADDMDP, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_xvnmaddmdp_vs_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_xvnmaddmdp_vs_vs_vs(dst, src, src2)) } +emit_xvnmaddmdp_vs_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_xvnmaddmdp_vs_vs_vs(dst, src, src2)) } inst_xvnmsubasp_vs_vs_vs :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .XVNMSUBASP, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_xvnmsubasp_vs_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_xvnmsubasp_vs_vs_vs(dst, src, src2)) } +emit_xvnmsubasp_vs_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_xvnmsubasp_vs_vs_vs(dst, src, src2)) } inst_xvnmsubadp_vs_vs_vs :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .XVNMSUBADP, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_xvnmsubadp_vs_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_xvnmsubadp_vs_vs_vs(dst, src, src2)) } +emit_xvnmsubadp_vs_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_xvnmsubadp_vs_vs_vs(dst, src, src2)) } inst_xvnmsubmsp_vs_vs_vs :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .XVNMSUBMSP, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_xvnmsubmsp_vs_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_xvnmsubmsp_vs_vs_vs(dst, src, src2)) } +emit_xvnmsubmsp_vs_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_xvnmsubmsp_vs_vs_vs(dst, src, src2)) } inst_xvnmsubmdp_vs_vs_vs :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .XVNMSUBMDP, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_xvnmsubmdp_vs_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_xvnmsubmdp_vs_vs_vs(dst, src, src2)) } +emit_xvnmsubmdp_vs_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_xvnmsubmdp_vs_vs_vs(dst, src, src2)) } inst_xvmaxsp_vs_vs_vs :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .XVMAXSP, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_xvmaxsp_vs_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_xvmaxsp_vs_vs_vs(dst, src, src2)) } +emit_xvmaxsp_vs_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_xvmaxsp_vs_vs_vs(dst, src, src2)) } inst_xvmaxdp_vs_vs_vs :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .XVMAXDP, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_xvmaxdp_vs_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_xvmaxdp_vs_vs_vs(dst, src, src2)) } +emit_xvmaxdp_vs_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_xvmaxdp_vs_vs_vs(dst, src, src2)) } inst_xvminsp_vs_vs_vs :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .XVMINSP, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_xvminsp_vs_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_xvminsp_vs_vs_vs(dst, src, src2)) } +emit_xvminsp_vs_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_xvminsp_vs_vs_vs(dst, src, src2)) } inst_xvmindp_vs_vs_vs :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .XVMINDP, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_xvmindp_vs_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_xvmindp_vs_vs_vs(dst, src, src2)) } +emit_xvmindp_vs_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_xvmindp_vs_vs_vs(dst, src, src2)) } inst_xvcmpeqsp_vs_vs_vs :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .XVCMPEQSP, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_xvcmpeqsp_vs_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_xvcmpeqsp_vs_vs_vs(dst, src, src2)) } +emit_xvcmpeqsp_vs_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_xvcmpeqsp_vs_vs_vs(dst, src, src2)) } inst_xvcmpeqsp_dot_vs_vs_vs :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .XVCMPEQSP_DOT, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_xvcmpeqsp_dot_vs_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_xvcmpeqsp_dot_vs_vs_vs(dst, src, src2)) } +emit_xvcmpeqsp_dot_vs_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_xvcmpeqsp_dot_vs_vs_vs(dst, src, src2)) } inst_xvcmpeqdp_vs_vs_vs :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .XVCMPEQDP, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_xvcmpeqdp_vs_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_xvcmpeqdp_vs_vs_vs(dst, src, src2)) } +emit_xvcmpeqdp_vs_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_xvcmpeqdp_vs_vs_vs(dst, src, src2)) } inst_xvcmpeqdp_dot_vs_vs_vs :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .XVCMPEQDP_DOT, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_xvcmpeqdp_dot_vs_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_xvcmpeqdp_dot_vs_vs_vs(dst, src, src2)) } +emit_xvcmpeqdp_dot_vs_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_xvcmpeqdp_dot_vs_vs_vs(dst, src, src2)) } inst_xvcmpgtsp_vs_vs_vs :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .XVCMPGTSP, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_xvcmpgtsp_vs_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_xvcmpgtsp_vs_vs_vs(dst, src, src2)) } +emit_xvcmpgtsp_vs_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_xvcmpgtsp_vs_vs_vs(dst, src, src2)) } inst_xvcmpgtsp_dot_vs_vs_vs :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .XVCMPGTSP_DOT, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_xvcmpgtsp_dot_vs_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_xvcmpgtsp_dot_vs_vs_vs(dst, src, src2)) } +emit_xvcmpgtsp_dot_vs_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_xvcmpgtsp_dot_vs_vs_vs(dst, src, src2)) } inst_xvcmpgtdp_vs_vs_vs :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .XVCMPGTDP, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_xvcmpgtdp_vs_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_xvcmpgtdp_vs_vs_vs(dst, src, src2)) } +emit_xvcmpgtdp_vs_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_xvcmpgtdp_vs_vs_vs(dst, src, src2)) } inst_xvcmpgtdp_dot_vs_vs_vs :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .XVCMPGTDP_DOT, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_xvcmpgtdp_dot_vs_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_xvcmpgtdp_dot_vs_vs_vs(dst, src, src2)) } +emit_xvcmpgtdp_dot_vs_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_xvcmpgtdp_dot_vs_vs_vs(dst, src, src2)) } inst_xvcmpgesp_vs_vs_vs :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .XVCMPGESP, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_xvcmpgesp_vs_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_xvcmpgesp_vs_vs_vs(dst, src, src2)) } +emit_xvcmpgesp_vs_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_xvcmpgesp_vs_vs_vs(dst, src, src2)) } inst_xvcmpgesp_dot_vs_vs_vs :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .XVCMPGESP_DOT, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_xvcmpgesp_dot_vs_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_xvcmpgesp_dot_vs_vs_vs(dst, src, src2)) } +emit_xvcmpgesp_dot_vs_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_xvcmpgesp_dot_vs_vs_vs(dst, src, src2)) } inst_xvcmpgedp_vs_vs_vs :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .XVCMPGEDP, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_xvcmpgedp_vs_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_xvcmpgedp_vs_vs_vs(dst, src, src2)) } +emit_xvcmpgedp_vs_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_xvcmpgedp_vs_vs_vs(dst, src, src2)) } inst_xvcmpgedp_dot_vs_vs_vs :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .XVCMPGEDP_DOT, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_xvcmpgedp_dot_vs_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_xvcmpgedp_dot_vs_vs_vs(dst, src, src2)) } +emit_xvcmpgedp_dot_vs_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_xvcmpgedp_dot_vs_vs_vs(dst, src, src2)) } inst_xvcpsgnsp_vs_vs_vs :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .XVCPSGNSP, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_xvcpsgnsp_vs_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_xvcpsgnsp_vs_vs_vs(dst, src, src2)) } +emit_xvcpsgnsp_vs_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_xvcpsgnsp_vs_vs_vs(dst, src, src2)) } inst_xvcpsgndp_vs_vs_vs :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .XVCPSGNDP, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_xvcpsgndp_vs_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_xvcpsgndp_vs_vs_vs(dst, src, src2)) } +emit_xvcpsgndp_vs_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_xvcpsgndp_vs_vs_vs(dst, src, src2)) } inst_xvabssp_vs_vs :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .XVABSSP, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_xvabssp_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_xvabssp_vs_vs(dst, src)) } +emit_xvabssp_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_xvabssp_vs_vs(dst, src)) } inst_xvabsdp_vs_vs :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .XVABSDP, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_xvabsdp_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_xvabsdp_vs_vs(dst, src)) } +emit_xvabsdp_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_xvabsdp_vs_vs(dst, src)) } inst_xvnabssp_vs_vs :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .XVNABSSP, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_xvnabssp_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_xvnabssp_vs_vs(dst, src)) } +emit_xvnabssp_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_xvnabssp_vs_vs(dst, src)) } inst_xvnabsdp_vs_vs :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .XVNABSDP, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_xvnabsdp_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_xvnabsdp_vs_vs(dst, src)) } +emit_xvnabsdp_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_xvnabsdp_vs_vs(dst, src)) } inst_xvnegsp_vs_vs :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .XVNEGSP, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_xvnegsp_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_xvnegsp_vs_vs(dst, src)) } +emit_xvnegsp_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_xvnegsp_vs_vs(dst, src)) } inst_xvnegdp_vs_vs :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .XVNEGDP, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_xvnegdp_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_xvnegdp_vs_vs(dst, src)) } +emit_xvnegdp_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_xvnegdp_vs_vs(dst, src)) } inst_xvcvspdp_vs_vs :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .XVCVSPDP, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_xvcvspdp_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_xvcvspdp_vs_vs(dst, src)) } +emit_xvcvspdp_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_xvcvspdp_vs_vs(dst, src)) } inst_xvcvdpsp_vs_vs :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .XVCVDPSP, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_xvcvdpsp_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_xvcvdpsp_vs_vs(dst, src)) } +emit_xvcvdpsp_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_xvcvdpsp_vs_vs(dst, src)) } inst_xvcvspsxds_vs_vs :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .XVCVSPSXDS, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_xvcvspsxds_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_xvcvspsxds_vs_vs(dst, src)) } +emit_xvcvspsxds_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_xvcvspsxds_vs_vs(dst, src)) } inst_xvcvspuxds_vs_vs :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .XVCVSPUXDS, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_xvcvspuxds_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_xvcvspuxds_vs_vs(dst, src)) } +emit_xvcvspuxds_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_xvcvspuxds_vs_vs(dst, src)) } inst_xvcvdpsxds_vs_vs :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .XVCVDPSXDS, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_xvcvdpsxds_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_xvcvdpsxds_vs_vs(dst, src)) } +emit_xvcvdpsxds_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_xvcvdpsxds_vs_vs(dst, src)) } inst_xvcvdpuxds_vs_vs :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .XVCVDPUXDS, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_xvcvdpuxds_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_xvcvdpuxds_vs_vs(dst, src)) } +emit_xvcvdpuxds_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_xvcvdpuxds_vs_vs(dst, src)) } inst_xvcvspsxws_vs_vs :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .XVCVSPSXWS, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_xvcvspsxws_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_xvcvspsxws_vs_vs(dst, src)) } +emit_xvcvspsxws_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_xvcvspsxws_vs_vs(dst, src)) } inst_xvcvspuxws_vs_vs :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .XVCVSPUXWS, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_xvcvspuxws_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_xvcvspuxws_vs_vs(dst, src)) } +emit_xvcvspuxws_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_xvcvspuxws_vs_vs(dst, src)) } inst_xvcvdpsxws_vs_vs :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .XVCVDPSXWS, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_xvcvdpsxws_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_xvcvdpsxws_vs_vs(dst, src)) } +emit_xvcvdpsxws_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_xvcvdpsxws_vs_vs(dst, src)) } inst_xvcvdpuxws_vs_vs :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .XVCVDPUXWS, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_xvcvdpuxws_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_xvcvdpuxws_vs_vs(dst, src)) } +emit_xvcvdpuxws_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_xvcvdpuxws_vs_vs(dst, src)) } inst_xvcvsxdsp_vs_vs :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .XVCVSXDSP, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_xvcvsxdsp_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_xvcvsxdsp_vs_vs(dst, src)) } +emit_xvcvsxdsp_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_xvcvsxdsp_vs_vs(dst, src)) } inst_xvcvuxdsp_vs_vs :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .XVCVUXDSP, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_xvcvuxdsp_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_xvcvuxdsp_vs_vs(dst, src)) } +emit_xvcvuxdsp_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_xvcvuxdsp_vs_vs(dst, src)) } inst_xvcvsxddp_vs_vs :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .XVCVSXDDP, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_xvcvsxddp_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_xvcvsxddp_vs_vs(dst, src)) } +emit_xvcvsxddp_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_xvcvsxddp_vs_vs(dst, src)) } inst_xvcvuxddp_vs_vs :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .XVCVUXDDP, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_xvcvuxddp_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_xvcvuxddp_vs_vs(dst, src)) } +emit_xvcvuxddp_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_xvcvuxddp_vs_vs(dst, src)) } inst_xvcvsxwsp_vs_vs :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .XVCVSXWSP, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_xvcvsxwsp_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_xvcvsxwsp_vs_vs(dst, src)) } +emit_xvcvsxwsp_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_xvcvsxwsp_vs_vs(dst, src)) } inst_xvcvuxwsp_vs_vs :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .XVCVUXWSP, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_xvcvuxwsp_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_xvcvuxwsp_vs_vs(dst, src)) } +emit_xvcvuxwsp_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_xvcvuxwsp_vs_vs(dst, src)) } inst_xvcvsxwdp_vs_vs :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .XVCVSXWDP, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_xvcvsxwdp_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_xvcvsxwdp_vs_vs(dst, src)) } +emit_xvcvsxwdp_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_xvcvsxwdp_vs_vs(dst, src)) } inst_xvcvuxwdp_vs_vs :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .XVCVUXWDP, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_xvcvuxwdp_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_xvcvuxwdp_vs_vs(dst, src)) } +emit_xvcvuxwdp_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_xvcvuxwdp_vs_vs(dst, src)) } inst_xvrspi_vs_vs :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .XVRSPI, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_xvrspi_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_xvrspi_vs_vs(dst, src)) } +emit_xvrspi_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_xvrspi_vs_vs(dst, src)) } inst_xvrspim_vs_vs :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .XVRSPIM, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_xvrspim_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_xvrspim_vs_vs(dst, src)) } +emit_xvrspim_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_xvrspim_vs_vs(dst, src)) } inst_xvrspip_vs_vs :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .XVRSPIP, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_xvrspip_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_xvrspip_vs_vs(dst, src)) } +emit_xvrspip_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_xvrspip_vs_vs(dst, src)) } inst_xvrspiz_vs_vs :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .XVRSPIZ, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_xvrspiz_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_xvrspiz_vs_vs(dst, src)) } +emit_xvrspiz_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_xvrspiz_vs_vs(dst, src)) } inst_xvrspic_vs_vs :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .XVRSPIC, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_xvrspic_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_xvrspic_vs_vs(dst, src)) } +emit_xvrspic_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_xvrspic_vs_vs(dst, src)) } inst_xvrdpi_vs_vs :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .XVRDPI, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_xvrdpi_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_xvrdpi_vs_vs(dst, src)) } +emit_xvrdpi_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_xvrdpi_vs_vs(dst, src)) } inst_xvrdpim_vs_vs :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .XVRDPIM, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_xvrdpim_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_xvrdpim_vs_vs(dst, src)) } +emit_xvrdpim_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_xvrdpim_vs_vs(dst, src)) } inst_xvrdpip_vs_vs :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .XVRDPIP, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_xvrdpip_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_xvrdpip_vs_vs(dst, src)) } +emit_xvrdpip_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_xvrdpip_vs_vs(dst, src)) } inst_xvrdpiz_vs_vs :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .XVRDPIZ, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_xvrdpiz_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_xvrdpiz_vs_vs(dst, src)) } +emit_xvrdpiz_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_xvrdpiz_vs_vs(dst, src)) } inst_xvrdpic_vs_vs :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .XVRDPIC, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_xvrdpic_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_xvrdpic_vs_vs(dst, src)) } +emit_xvrdpic_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_xvrdpic_vs_vs(dst, src)) } inst_xviexpsp_vs_vs_vs :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .XVIEXPSP, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_xviexpsp_vs_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_xviexpsp_vs_vs_vs(dst, src, src2)) } +emit_xviexpsp_vs_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_xviexpsp_vs_vs_vs(dst, src, src2)) } inst_xviexpdp_vs_vs_vs :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .XVIEXPDP, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_xviexpdp_vs_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_xviexpdp_vs_vs_vs(dst, src, src2)) } +emit_xviexpdp_vs_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_xviexpdp_vs_vs_vs(dst, src, src2)) } inst_xvxexpsp_vs_vs :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .XVXEXPSP, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_xvxexpsp_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_xvxexpsp_vs_vs(dst, src)) } +emit_xvxexpsp_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_xvxexpsp_vs_vs(dst, src)) } inst_xvxexpdp_vs_vs :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .XVXEXPDP, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_xvxexpdp_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_xvxexpdp_vs_vs(dst, src)) } +emit_xvxexpdp_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_xvxexpdp_vs_vs(dst, src)) } inst_xvxsigsp_vs_vs :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .XVXSIGSP, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_xvxsigsp_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_xvxsigsp_vs_vs(dst, src)) } +emit_xvxsigsp_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_xvxsigsp_vs_vs(dst, src)) } inst_xvxsigdp_vs_vs :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .XVXSIGDP, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_xvxsigdp_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_xvxsigdp_vs_vs(dst, src)) } +emit_xvxsigdp_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_xvxsigdp_vs_vs(dst, src)) } inst_xvtstdcsp_vs_vs_imm :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .XVTSTDCSP, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_imm(imm), {}}} } -emit_xvtstdcsp_vs_vs_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_xvtstdcsp_vs_vs_imm(dst, src, imm)) } +emit_xvtstdcsp_vs_vs_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_xvtstdcsp_vs_vs_imm(dst, src, imm)) } inst_xvtstdcdp_vs_vs_imm :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .XVTSTDCDP, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_imm(imm), {}}} } -emit_xvtstdcdp_vs_vs_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_xvtstdcdp_vs_vs_imm(dst, src, imm)) } +emit_xvtstdcdp_vs_vs_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_xvtstdcdp_vs_vs_imm(dst, src, imm)) } inst_xststdcsp_crf_vs_imm :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .XSTSTDCSP, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_imm(imm), {}}} } -emit_xststdcsp_crf_vs_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_xststdcsp_crf_vs_imm(dst, src, imm)) } +emit_xststdcsp_crf_vs_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_xststdcsp_crf_vs_imm(dst, src, imm)) } inst_xststdcdp_crf_vs_imm :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .XSTSTDCDP, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_imm(imm), {}}} } -emit_xststdcdp_crf_vs_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_xststdcdp_crf_vs_imm(dst, src, imm)) } +emit_xststdcdp_crf_vs_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_xststdcdp_crf_vs_imm(dst, src, imm)) } inst_xstsqrtdp_crf_vs :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .XSTSQRTDP, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_xstsqrtdp_crf_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_xstsqrtdp_crf_vs(dst, src)) } +emit_xstsqrtdp_crf_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_xstsqrtdp_crf_vs(dst, src)) } inst_xvtsqrtsp_crf_vs :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .XVTSQRTSP, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_xvtsqrtsp_crf_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_xvtsqrtsp_crf_vs(dst, src)) } +emit_xvtsqrtsp_crf_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_xvtsqrtsp_crf_vs(dst, src)) } inst_xvtsqrtdp_crf_vs :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .XVTSQRTDP, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_xvtsqrtdp_crf_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_xvtsqrtdp_crf_vs(dst, src)) } +emit_xvtsqrtdp_crf_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_xvtsqrtdp_crf_vs(dst, src)) } inst_xstdivdp_crf_vs_vs :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .XSTDIVDP, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_xstdivdp_crf_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_xstdivdp_crf_vs_vs(dst, src, src2)) } +emit_xstdivdp_crf_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_xstdivdp_crf_vs_vs(dst, src, src2)) } inst_xvtdivsp_crf_vs_vs :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .XVTDIVSP, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_xvtdivsp_crf_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_xvtdivsp_crf_vs_vs(dst, src, src2)) } +emit_xvtdivsp_crf_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_xvtdivsp_crf_vs_vs(dst, src, src2)) } inst_xvtdivdp_crf_vs_vs :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .XVTDIVDP, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_xvtdivdp_crf_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_xvtdivdp_crf_vs_vs(dst, src, src2)) } +emit_xvtdivdp_crf_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_xvtdivdp_crf_vs_vs(dst, src, src2)) } inst_xxland_vs_vs_vs :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .XXLAND, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_xxland_vs_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_xxland_vs_vs_vs(dst, src, src2)) } +emit_xxland_vs_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_xxland_vs_vs_vs(dst, src, src2)) } inst_xxlandc_vs_vs_vs :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .XXLANDC, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_xxlandc_vs_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_xxlandc_vs_vs_vs(dst, src, src2)) } +emit_xxlandc_vs_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_xxlandc_vs_vs_vs(dst, src, src2)) } inst_xxlor_vs_vs_vs :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .XXLOR, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_xxlor_vs_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_xxlor_vs_vs_vs(dst, src, src2)) } +emit_xxlor_vs_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_xxlor_vs_vs_vs(dst, src, src2)) } inst_xxlxor_vs_vs_vs :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .XXLXOR, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_xxlxor_vs_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_xxlxor_vs_vs_vs(dst, src, src2)) } +emit_xxlxor_vs_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_xxlxor_vs_vs_vs(dst, src, src2)) } inst_xxlnor_vs_vs_vs :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .XXLNOR, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_xxlnor_vs_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_xxlnor_vs_vs_vs(dst, src, src2)) } +emit_xxlnor_vs_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_xxlnor_vs_vs_vs(dst, src, src2)) } inst_xxleqv_vs_vs_vs :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .XXLEQV, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_xxleqv_vs_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_xxleqv_vs_vs_vs(dst, src, src2)) } +emit_xxleqv_vs_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_xxleqv_vs_vs_vs(dst, src, src2)) } inst_xxlnand_vs_vs_vs :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .XXLNAND, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_xxlnand_vs_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_xxlnand_vs_vs_vs(dst, src, src2)) } +emit_xxlnand_vs_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_xxlnand_vs_vs_vs(dst, src, src2)) } inst_xxlorc_vs_vs_vs :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .XXLORC, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_xxlorc_vs_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_xxlorc_vs_vs_vs(dst, src, src2)) } +emit_xxlorc_vs_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_xxlorc_vs_vs_vs(dst, src, src2)) } inst_xxsel_vs_vs_vs_vs :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register, src3: Register) -> Instruction { return Instruction{mnemonic = .XXSEL, operand_count = 4, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), op_reg(src3)}} } -emit_xxsel_vs_vs_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, src3: Register) { append(instructions, inst_xxsel_vs_vs_vs_vs(dst, src, src2, src3)) } +emit_xxsel_vs_vs_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, src3: Register) { append_elem(instructions, inst_xxsel_vs_vs_vs_vs(dst, src, src2, src3)) } inst_xxspltw_vs_vs_imm :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .XXSPLTW, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_imm(imm), {}}} } -emit_xxspltw_vs_vs_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_xxspltw_vs_vs_imm(dst, src, imm)) } +emit_xxspltw_vs_vs_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_xxspltw_vs_vs_imm(dst, src, imm)) } inst_xxspltib_vs_uimm :: #force_inline proc "contextless" (dst: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .XXSPLTIB, operand_count = 2, length = 4, ops = {op_reg(dst), op_imm(imm), {}, {}}} } -emit_xxspltib_vs_uimm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64) { append(instructions, inst_xxspltib_vs_uimm(dst, imm)) } +emit_xxspltib_vs_uimm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64) { append_elem(instructions, inst_xxspltib_vs_uimm(dst, imm)) } inst_xxsldwi_vs_vs_vs_imm :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .XXSLDWI, operand_count = 4, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), op_imm(imm)}} } -emit_xxsldwi_vs_vs_vs_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, imm: i64) { append(instructions, inst_xxsldwi_vs_vs_vs_imm(dst, src, src2, imm)) } +emit_xxsldwi_vs_vs_vs_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, imm: i64) { append_elem(instructions, inst_xxsldwi_vs_vs_vs_imm(dst, src, src2, imm)) } inst_xxpermdi_vs_vs_vs_imm :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .XXPERMDI, operand_count = 4, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), op_imm(imm)}} } -emit_xxpermdi_vs_vs_vs_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, imm: i64) { append(instructions, inst_xxpermdi_vs_vs_vs_imm(dst, src, src2, imm)) } +emit_xxpermdi_vs_vs_vs_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, imm: i64) { append_elem(instructions, inst_xxpermdi_vs_vs_vs_imm(dst, src, src2, imm)) } inst_xxmrghw_vs_vs_vs :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .XXMRGHW, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_xxmrghw_vs_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_xxmrghw_vs_vs_vs(dst, src, src2)) } +emit_xxmrghw_vs_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_xxmrghw_vs_vs_vs(dst, src, src2)) } inst_xxmrglw_vs_vs_vs :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .XXMRGLW, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_xxmrglw_vs_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_xxmrglw_vs_vs_vs(dst, src, src2)) } +emit_xxmrglw_vs_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_xxmrglw_vs_vs_vs(dst, src, src2)) } inst_xxextractuw_vs_vs_imm :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .XXEXTRACTUW, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_imm(imm), {}}} } -emit_xxextractuw_vs_vs_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_xxextractuw_vs_vs_imm(dst, src, imm)) } +emit_xxextractuw_vs_vs_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_xxextractuw_vs_vs_imm(dst, src, imm)) } inst_xxinsertw_vs_vs_imm :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .XXINSERTW, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_imm(imm), {}}} } -emit_xxinsertw_vs_vs_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_xxinsertw_vs_vs_imm(dst, src, imm)) } +emit_xxinsertw_vs_vs_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_xxinsertw_vs_vs_imm(dst, src, imm)) } inst_xxspltiw_vs_simm :: #force_inline proc "contextless" (dst: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .XXSPLTIW, operand_count = 2, length = 4, ops = {op_reg(dst), op_imm(imm), {}, {}}} } -emit_xxspltiw_vs_simm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64) { append(instructions, inst_xxspltiw_vs_simm(dst, imm)) } +emit_xxspltiw_vs_simm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64) { append_elem(instructions, inst_xxspltiw_vs_simm(dst, imm)) } inst_xxspltidp_vs_simm :: #force_inline proc "contextless" (dst: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .XXSPLTIDP, operand_count = 2, length = 4, ops = {op_reg(dst), op_imm(imm), {}, {}}} } -emit_xxspltidp_vs_simm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64) { append(instructions, inst_xxspltidp_vs_simm(dst, imm)) } +emit_xxspltidp_vs_simm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64) { append_elem(instructions, inst_xxspltidp_vs_simm(dst, imm)) } inst_xxsplti32dx_vs_simm :: #force_inline proc "contextless" (dst: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .XXSPLTI32DX, operand_count = 2, length = 4, ops = {op_reg(dst), op_imm(imm), {}, {}}} } -emit_xxsplti32dx_vs_simm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64) { append(instructions, inst_xxsplti32dx_vs_simm(dst, imm)) } +emit_xxsplti32dx_vs_simm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64) { append_elem(instructions, inst_xxsplti32dx_vs_simm(dst, imm)) } inst_xscmpeqqp_crf_v_v :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .XSCMPEQQP, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_xscmpeqqp_crf_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_xscmpeqqp_crf_v_v(dst, src, src2)) } +emit_xscmpeqqp_crf_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_xscmpeqqp_crf_v_v(dst, src, src2)) } inst_xscmpgtqp_crf_v_v :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .XSCMPGTQP, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_xscmpgtqp_crf_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_xscmpgtqp_crf_v_v(dst, src, src2)) } +emit_xscmpgtqp_crf_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_xscmpgtqp_crf_v_v(dst, src, src2)) } inst_xscmpgeqp_crf_v_v :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .XSCMPGEQP, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_xscmpgeqp_crf_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_xscmpgeqp_crf_v_v(dst, src, src2)) } +emit_xscmpgeqp_crf_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_xscmpgeqp_crf_v_v(dst, src, src2)) } inst_xsaddqp_v_v_v :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .XSADDQP, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_xsaddqp_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_xsaddqp_v_v_v(dst, src, src2)) } +emit_xsaddqp_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_xsaddqp_v_v_v(dst, src, src2)) } inst_xsaddqpo_v_v_v :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .XSADDQPO, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_xsaddqpo_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_xsaddqpo_v_v_v(dst, src, src2)) } +emit_xsaddqpo_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_xsaddqpo_v_v_v(dst, src, src2)) } inst_xssubqp_v_v_v :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .XSSUBQP, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_xssubqp_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_xssubqp_v_v_v(dst, src, src2)) } +emit_xssubqp_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_xssubqp_v_v_v(dst, src, src2)) } inst_xssubqpo_v_v_v :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .XSSUBQPO, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_xssubqpo_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_xssubqpo_v_v_v(dst, src, src2)) } +emit_xssubqpo_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_xssubqpo_v_v_v(dst, src, src2)) } inst_xsmulqp_v_v_v :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .XSMULQP, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_xsmulqp_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_xsmulqp_v_v_v(dst, src, src2)) } +emit_xsmulqp_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_xsmulqp_v_v_v(dst, src, src2)) } inst_xsmulqpo_v_v_v :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .XSMULQPO, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_xsmulqpo_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_xsmulqpo_v_v_v(dst, src, src2)) } +emit_xsmulqpo_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_xsmulqpo_v_v_v(dst, src, src2)) } inst_xsdivqp_v_v_v :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .XSDIVQP, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_xsdivqp_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_xsdivqp_v_v_v(dst, src, src2)) } +emit_xsdivqp_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_xsdivqp_v_v_v(dst, src, src2)) } inst_xsdivqpo_v_v_v :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .XSDIVQPO, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_xsdivqpo_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_xsdivqpo_v_v_v(dst, src, src2)) } +emit_xsdivqpo_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_xsdivqpo_v_v_v(dst, src, src2)) } inst_xssqrtqp_v_v :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .XSSQRTQP, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_xssqrtqp_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_xssqrtqp_v_v(dst, src)) } +emit_xssqrtqp_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_xssqrtqp_v_v(dst, src)) } inst_xssqrtqpo_v_v :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .XSSQRTQPO, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_xssqrtqpo_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_xssqrtqpo_v_v(dst, src)) } +emit_xssqrtqpo_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_xssqrtqpo_v_v(dst, src)) } inst_xsmaddqp_v_v_v :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .XSMADDQP, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_xsmaddqp_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_xsmaddqp_v_v_v(dst, src, src2)) } +emit_xsmaddqp_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_xsmaddqp_v_v_v(dst, src, src2)) } inst_xsmaddqpo_v_v_v :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .XSMADDQPO, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_xsmaddqpo_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_xsmaddqpo_v_v_v(dst, src, src2)) } +emit_xsmaddqpo_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_xsmaddqpo_v_v_v(dst, src, src2)) } inst_xsmsubqp_v_v_v :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .XSMSUBQP, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_xsmsubqp_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_xsmsubqp_v_v_v(dst, src, src2)) } +emit_xsmsubqp_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_xsmsubqp_v_v_v(dst, src, src2)) } inst_xsmsubqpo_v_v_v :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .XSMSUBQPO, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_xsmsubqpo_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_xsmsubqpo_v_v_v(dst, src, src2)) } +emit_xsmsubqpo_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_xsmsubqpo_v_v_v(dst, src, src2)) } inst_xsnmaddqp_v_v_v :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .XSNMADDQP, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_xsnmaddqp_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_xsnmaddqp_v_v_v(dst, src, src2)) } +emit_xsnmaddqp_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_xsnmaddqp_v_v_v(dst, src, src2)) } inst_xsnmaddqpo_v_v_v :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .XSNMADDQPO, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_xsnmaddqpo_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_xsnmaddqpo_v_v_v(dst, src, src2)) } +emit_xsnmaddqpo_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_xsnmaddqpo_v_v_v(dst, src, src2)) } inst_xsnmsubqp_v_v_v :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .XSNMSUBQP, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_xsnmsubqp_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_xsnmsubqp_v_v_v(dst, src, src2)) } +emit_xsnmsubqp_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_xsnmsubqp_v_v_v(dst, src, src2)) } inst_xsnmsubqpo_v_v_v :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .XSNMSUBQPO, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_xsnmsubqpo_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_xsnmsubqpo_v_v_v(dst, src, src2)) } +emit_xsnmsubqpo_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_xsnmsubqpo_v_v_v(dst, src, src2)) } inst_xsabsqp_v_v :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .XSABSQP, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_xsabsqp_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_xsabsqp_v_v(dst, src)) } +emit_xsabsqp_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_xsabsqp_v_v(dst, src)) } inst_xsnabsqp_v_v :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .XSNABSQP, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_xsnabsqp_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_xsnabsqp_v_v(dst, src)) } +emit_xsnabsqp_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_xsnabsqp_v_v(dst, src)) } inst_xsnegqp_v_v :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .XSNEGQP, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_xsnegqp_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_xsnegqp_v_v(dst, src)) } +emit_xsnegqp_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_xsnegqp_v_v(dst, src)) } inst_xscpsgnqp_v_v_v :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .XSCPSGNQP, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_xscpsgnqp_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_xscpsgnqp_v_v_v(dst, src, src2)) } +emit_xscpsgnqp_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_xscpsgnqp_v_v_v(dst, src, src2)) } inst_xscmpoqp_crf_v_v :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .XSCMPOQP, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_xscmpoqp_crf_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_xscmpoqp_crf_v_v(dst, src, src2)) } +emit_xscmpoqp_crf_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_xscmpoqp_crf_v_v(dst, src, src2)) } inst_xscmpuqp_crf_v_v :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .XSCMPUQP, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_xscmpuqp_crf_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_xscmpuqp_crf_v_v(dst, src, src2)) } +emit_xscmpuqp_crf_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_xscmpuqp_crf_v_v(dst, src, src2)) } inst_xststdcqp_crf_v_imm :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .XSTSTDCQP, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_imm(imm), {}}} } -emit_xststdcqp_crf_v_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_xststdcqp_crf_v_imm(dst, src, imm)) } +emit_xststdcqp_crf_v_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_xststdcqp_crf_v_imm(dst, src, imm)) } inst_xsrqpi_imm_v_v_imm :: #force_inline proc "contextless" (imm: i64, dst: Register, src: Register, imm2: i64) -> Instruction { return Instruction{mnemonic = .XSRQPI, operand_count = 4, length = 4, ops = {op_imm(imm), op_reg(dst), op_reg(src), op_imm(imm2)}} } -emit_xsrqpi_imm_v_v_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, dst: Register, src: Register, imm2: i64) { append(instructions, inst_xsrqpi_imm_v_v_imm(imm, dst, src, imm2)) } +emit_xsrqpi_imm_v_v_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, dst: Register, src: Register, imm2: i64) { append_elem(instructions, inst_xsrqpi_imm_v_v_imm(imm, dst, src, imm2)) } inst_xsrqpix_imm_v_v_imm :: #force_inline proc "contextless" (imm: i64, dst: Register, src: Register, imm2: i64) -> Instruction { return Instruction{mnemonic = .XSRQPIX, operand_count = 4, length = 4, ops = {op_imm(imm), op_reg(dst), op_reg(src), op_imm(imm2)}} } -emit_xsrqpix_imm_v_v_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, dst: Register, src: Register, imm2: i64) { append(instructions, inst_xsrqpix_imm_v_v_imm(imm, dst, src, imm2)) } +emit_xsrqpix_imm_v_v_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, dst: Register, src: Register, imm2: i64) { append_elem(instructions, inst_xsrqpix_imm_v_v_imm(imm, dst, src, imm2)) } inst_xsrqpxp_imm_v_v_imm :: #force_inline proc "contextless" (imm: i64, dst: Register, src: Register, imm2: i64) -> Instruction { return Instruction{mnemonic = .XSRQPXP, operand_count = 4, length = 4, ops = {op_imm(imm), op_reg(dst), op_reg(src), op_imm(imm2)}} } -emit_xsrqpxp_imm_v_v_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, dst: Register, src: Register, imm2: i64) { append(instructions, inst_xsrqpxp_imm_v_v_imm(imm, dst, src, imm2)) } +emit_xsrqpxp_imm_v_v_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, dst: Register, src: Register, imm2: i64) { append_elem(instructions, inst_xsrqpxp_imm_v_v_imm(imm, dst, src, imm2)) } inst_xsxexpqp_v_v :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .XSXEXPQP, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_xsxexpqp_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_xsxexpqp_v_v(dst, src)) } +emit_xsxexpqp_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_xsxexpqp_v_v(dst, src)) } inst_xsxsigqp_v_v :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .XSXSIGQP, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_xsxsigqp_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_xsxsigqp_v_v(dst, src)) } +emit_xsxsigqp_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_xsxsigqp_v_v(dst, src)) } inst_xsiexpqp_v_v_v :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .XSIEXPQP, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_xsiexpqp_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_xsiexpqp_v_v_v(dst, src, src2)) } +emit_xsiexpqp_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_xsiexpqp_v_v_v(dst, src, src2)) } inst_xscvqpdp_v_v :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .XSCVQPDP, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_xscvqpdp_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_xscvqpdp_v_v(dst, src)) } +emit_xscvqpdp_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_xscvqpdp_v_v(dst, src)) } inst_xscvqpdpo_v_v :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .XSCVQPDPO, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_xscvqpdpo_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_xscvqpdpo_v_v(dst, src)) } +emit_xscvqpdpo_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_xscvqpdpo_v_v(dst, src)) } inst_xscvdpqp_v_v :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .XSCVDPQP, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_xscvdpqp_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_xscvdpqp_v_v(dst, src)) } +emit_xscvdpqp_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_xscvdpqp_v_v(dst, src)) } inst_xscvqpsdz_v_v :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .XSCVQPSDZ, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_xscvqpsdz_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_xscvqpsdz_v_v(dst, src)) } +emit_xscvqpsdz_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_xscvqpsdz_v_v(dst, src)) } inst_xscvqpswz_v_v :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .XSCVQPSWZ, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_xscvqpswz_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_xscvqpswz_v_v(dst, src)) } +emit_xscvqpswz_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_xscvqpswz_v_v(dst, src)) } inst_xscvqpudz_v_v :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .XSCVQPUDZ, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_xscvqpudz_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_xscvqpudz_v_v(dst, src)) } +emit_xscvqpudz_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_xscvqpudz_v_v(dst, src)) } inst_xscvqpuwz_v_v :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .XSCVQPUWZ, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_xscvqpuwz_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_xscvqpuwz_v_v(dst, src)) } +emit_xscvqpuwz_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_xscvqpuwz_v_v(dst, src)) } inst_xscvsdqp_v_v :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .XSCVSDQP, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_xscvsdqp_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_xscvsdqp_v_v(dst, src)) } +emit_xscvsdqp_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_xscvsdqp_v_v(dst, src)) } inst_xscvudqp_v_v :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .XSCVUDQP, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_xscvudqp_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_xscvudqp_v_v(dst, src)) } +emit_xscvudqp_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_xscvudqp_v_v(dst, src)) } inst_dadd_fr_fr_fr :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .DADD, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_dadd_fr_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_dadd_fr_fr_fr(dst, src, src2)) } +emit_dadd_fr_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_dadd_fr_fr_fr(dst, src, src2)) } inst_dadd_dot_fr_fr_fr :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .DADD_DOT, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_dadd_dot_fr_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_dadd_dot_fr_fr_fr(dst, src, src2)) } +emit_dadd_dot_fr_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_dadd_dot_fr_fr_fr(dst, src, src2)) } inst_dsub_fr_fr_fr :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .DSUB, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_dsub_fr_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_dsub_fr_fr_fr(dst, src, src2)) } +emit_dsub_fr_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_dsub_fr_fr_fr(dst, src, src2)) } inst_dsub_dot_fr_fr_fr :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .DSUB_DOT, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_dsub_dot_fr_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_dsub_dot_fr_fr_fr(dst, src, src2)) } +emit_dsub_dot_fr_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_dsub_dot_fr_fr_fr(dst, src, src2)) } inst_dmul_fr_fr_fr :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .DMUL, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_dmul_fr_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_dmul_fr_fr_fr(dst, src, src2)) } +emit_dmul_fr_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_dmul_fr_fr_fr(dst, src, src2)) } inst_dmul_dot_fr_fr_fr :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .DMUL_DOT, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_dmul_dot_fr_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_dmul_dot_fr_fr_fr(dst, src, src2)) } +emit_dmul_dot_fr_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_dmul_dot_fr_fr_fr(dst, src, src2)) } inst_ddiv_fr_fr_fr :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .DDIV, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_ddiv_fr_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_ddiv_fr_fr_fr(dst, src, src2)) } +emit_ddiv_fr_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_ddiv_fr_fr_fr(dst, src, src2)) } inst_ddiv_dot_fr_fr_fr :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .DDIV_DOT, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_ddiv_dot_fr_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_ddiv_dot_fr_fr_fr(dst, src, src2)) } +emit_ddiv_dot_fr_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_ddiv_dot_fr_fr_fr(dst, src, src2)) } inst_dcmpu_crf_fr_fr :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .DCMPU, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_dcmpu_crf_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_dcmpu_crf_fr_fr(dst, src, src2)) } +emit_dcmpu_crf_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_dcmpu_crf_fr_fr(dst, src, src2)) } inst_dcmpo_crf_fr_fr :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .DCMPO, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_dcmpo_crf_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_dcmpo_crf_fr_fr(dst, src, src2)) } +emit_dcmpo_crf_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_dcmpo_crf_fr_fr(dst, src, src2)) } inst_drsp_fr_fr :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .DRSP, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_drsp_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_drsp_fr_fr(dst, src)) } +emit_drsp_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_drsp_fr_fr(dst, src)) } inst_drsp_dot_fr_fr :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .DRSP_DOT, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_drsp_dot_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_drsp_dot_fr_fr(dst, src)) } +emit_drsp_dot_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_drsp_dot_fr_fr(dst, src)) } inst_dctdp_fr_fr :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .DCTDP, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_dctdp_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_dctdp_fr_fr(dst, src)) } +emit_dctdp_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_dctdp_fr_fr(dst, src)) } inst_dctdp_dot_fr_fr :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .DCTDP_DOT, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_dctdp_dot_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_dctdp_dot_fr_fr(dst, src)) } +emit_dctdp_dot_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_dctdp_dot_fr_fr(dst, src)) } inst_dxex_fr_fr :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .DXEX, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_dxex_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_dxex_fr_fr(dst, src)) } +emit_dxex_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_dxex_fr_fr(dst, src)) } inst_dxex_dot_fr_fr :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .DXEX_DOT, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_dxex_dot_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_dxex_dot_fr_fr(dst, src)) } +emit_dxex_dot_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_dxex_dot_fr_fr(dst, src)) } inst_diex_fr_fr_fr :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .DIEX, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_diex_fr_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_diex_fr_fr_fr(dst, src, src2)) } +emit_diex_fr_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_diex_fr_fr_fr(dst, src, src2)) } inst_diex_dot_fr_fr_fr :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .DIEX_DOT, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_diex_dot_fr_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_diex_dot_fr_fr_fr(dst, src, src2)) } +emit_diex_dot_fr_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_diex_dot_fr_fr_fr(dst, src, src2)) } inst_drrnd_fr_fr_fr_imm :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .DRRND, operand_count = 4, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), op_imm(imm)}} } -emit_drrnd_fr_fr_fr_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, imm: i64) { append(instructions, inst_drrnd_fr_fr_fr_imm(dst, src, src2, imm)) } +emit_drrnd_fr_fr_fr_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, imm: i64) { append_elem(instructions, inst_drrnd_fr_fr_fr_imm(dst, src, src2, imm)) } inst_drrnd_dot_fr_fr_fr_imm :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .DRRND_DOT, operand_count = 4, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), op_imm(imm)}} } -emit_drrnd_dot_fr_fr_fr_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, imm: i64) { append(instructions, inst_drrnd_dot_fr_fr_fr_imm(dst, src, src2, imm)) } +emit_drrnd_dot_fr_fr_fr_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, imm: i64) { append_elem(instructions, inst_drrnd_dot_fr_fr_fr_imm(dst, src, src2, imm)) } inst_drintx_imm_fr_fr_imm :: #force_inline proc "contextless" (imm: i64, dst: Register, src: Register, imm2: i64) -> Instruction { return Instruction{mnemonic = .DRINTX, operand_count = 4, length = 4, ops = {op_imm(imm), op_reg(dst), op_reg(src), op_imm(imm2)}} } -emit_drintx_imm_fr_fr_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, dst: Register, src: Register, imm2: i64) { append(instructions, inst_drintx_imm_fr_fr_imm(imm, dst, src, imm2)) } +emit_drintx_imm_fr_fr_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, dst: Register, src: Register, imm2: i64) { append_elem(instructions, inst_drintx_imm_fr_fr_imm(imm, dst, src, imm2)) } inst_drintx_dot_imm_fr_fr_imm :: #force_inline proc "contextless" (imm: i64, dst: Register, src: Register, imm2: i64) -> Instruction { return Instruction{mnemonic = .DRINTX_DOT, operand_count = 4, length = 4, ops = {op_imm(imm), op_reg(dst), op_reg(src), op_imm(imm2)}} } -emit_drintx_dot_imm_fr_fr_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, dst: Register, src: Register, imm2: i64) { append(instructions, inst_drintx_dot_imm_fr_fr_imm(imm, dst, src, imm2)) } +emit_drintx_dot_imm_fr_fr_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, dst: Register, src: Register, imm2: i64) { append_elem(instructions, inst_drintx_dot_imm_fr_fr_imm(imm, dst, src, imm2)) } inst_drintn_imm_fr_fr_imm :: #force_inline proc "contextless" (imm: i64, dst: Register, src: Register, imm2: i64) -> Instruction { return Instruction{mnemonic = .DRINTN, operand_count = 4, length = 4, ops = {op_imm(imm), op_reg(dst), op_reg(src), op_imm(imm2)}} } -emit_drintn_imm_fr_fr_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, dst: Register, src: Register, imm2: i64) { append(instructions, inst_drintn_imm_fr_fr_imm(imm, dst, src, imm2)) } +emit_drintn_imm_fr_fr_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, dst: Register, src: Register, imm2: i64) { append_elem(instructions, inst_drintn_imm_fr_fr_imm(imm, dst, src, imm2)) } inst_drintn_dot_imm_fr_fr_imm :: #force_inline proc "contextless" (imm: i64, dst: Register, src: Register, imm2: i64) -> Instruction { return Instruction{mnemonic = .DRINTN_DOT, operand_count = 4, length = 4, ops = {op_imm(imm), op_reg(dst), op_reg(src), op_imm(imm2)}} } -emit_drintn_dot_imm_fr_fr_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, dst: Register, src: Register, imm2: i64) { append(instructions, inst_drintn_dot_imm_fr_fr_imm(imm, dst, src, imm2)) } +emit_drintn_dot_imm_fr_fr_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, dst: Register, src: Register, imm2: i64) { append_elem(instructions, inst_drintn_dot_imm_fr_fr_imm(imm, dst, src, imm2)) } inst_dqua_fr_fr_fr_imm :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .DQUA, operand_count = 4, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), op_imm(imm)}} } -emit_dqua_fr_fr_fr_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, imm: i64) { append(instructions, inst_dqua_fr_fr_fr_imm(dst, src, src2, imm)) } +emit_dqua_fr_fr_fr_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, imm: i64) { append_elem(instructions, inst_dqua_fr_fr_fr_imm(dst, src, src2, imm)) } inst_dqua_dot_fr_fr_fr_imm :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .DQUA_DOT, operand_count = 4, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), op_imm(imm)}} } -emit_dqua_dot_fr_fr_fr_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, imm: i64) { append(instructions, inst_dqua_dot_fr_fr_fr_imm(dst, src, src2, imm)) } +emit_dqua_dot_fr_fr_fr_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, imm: i64) { append_elem(instructions, inst_dqua_dot_fr_fr_fr_imm(dst, src, src2, imm)) } inst_dquai_imm_fr_fr_imm :: #force_inline proc "contextless" (imm: i64, dst: Register, src: Register, imm2: i64) -> Instruction { return Instruction{mnemonic = .DQUAI, operand_count = 4, length = 4, ops = {op_imm(imm), op_reg(dst), op_reg(src), op_imm(imm2)}} } -emit_dquai_imm_fr_fr_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, dst: Register, src: Register, imm2: i64) { append(instructions, inst_dquai_imm_fr_fr_imm(imm, dst, src, imm2)) } +emit_dquai_imm_fr_fr_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, dst: Register, src: Register, imm2: i64) { append_elem(instructions, inst_dquai_imm_fr_fr_imm(imm, dst, src, imm2)) } inst_dquai_dot_imm_fr_fr_imm :: #force_inline proc "contextless" (imm: i64, dst: Register, src: Register, imm2: i64) -> Instruction { return Instruction{mnemonic = .DQUAI_DOT, operand_count = 4, length = 4, ops = {op_imm(imm), op_reg(dst), op_reg(src), op_imm(imm2)}} } -emit_dquai_dot_imm_fr_fr_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, dst: Register, src: Register, imm2: i64) { append(instructions, inst_dquai_dot_imm_fr_fr_imm(imm, dst, src, imm2)) } +emit_dquai_dot_imm_fr_fr_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, dst: Register, src: Register, imm2: i64) { append_elem(instructions, inst_dquai_dot_imm_fr_fr_imm(imm, dst, src, imm2)) } inst_dscli_fr_fr_imm :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .DSCLI, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_imm(imm), {}}} } -emit_dscli_fr_fr_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_dscli_fr_fr_imm(dst, src, imm)) } +emit_dscli_fr_fr_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_dscli_fr_fr_imm(dst, src, imm)) } inst_dscli_dot_fr_fr_imm :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .DSCLI_DOT, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_imm(imm), {}}} } -emit_dscli_dot_fr_fr_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_dscli_dot_fr_fr_imm(dst, src, imm)) } +emit_dscli_dot_fr_fr_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_dscli_dot_fr_fr_imm(dst, src, imm)) } inst_dscri_fr_fr_imm :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .DSCRI, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_imm(imm), {}}} } -emit_dscri_fr_fr_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_dscri_fr_fr_imm(dst, src, imm)) } +emit_dscri_fr_fr_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_dscri_fr_fr_imm(dst, src, imm)) } inst_dscri_dot_fr_fr_imm :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .DSCRI_DOT, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_imm(imm), {}}} } -emit_dscri_dot_fr_fr_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_dscri_dot_fr_fr_imm(dst, src, imm)) } +emit_dscri_dot_fr_fr_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_dscri_dot_fr_fr_imm(dst, src, imm)) } inst_dcffix_fr_fr :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .DCFFIX, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_dcffix_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_dcffix_fr_fr(dst, src)) } +emit_dcffix_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_dcffix_fr_fr(dst, src)) } inst_dcffix_dot_fr_fr :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .DCFFIX_DOT, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_dcffix_dot_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_dcffix_dot_fr_fr(dst, src)) } +emit_dcffix_dot_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_dcffix_dot_fr_fr(dst, src)) } inst_dctfix_fr_fr :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .DCTFIX, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_dctfix_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_dctfix_fr_fr(dst, src)) } +emit_dctfix_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_dctfix_fr_fr(dst, src)) } inst_dctfix_dot_fr_fr :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .DCTFIX_DOT, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_dctfix_dot_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_dctfix_dot_fr_fr(dst, src)) } +emit_dctfix_dot_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_dctfix_dot_fr_fr(dst, src)) } inst_dtstdc_crf_fr_imm :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .DTSTDC, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_imm(imm), {}}} } -emit_dtstdc_crf_fr_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_dtstdc_crf_fr_imm(dst, src, imm)) } +emit_dtstdc_crf_fr_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_dtstdc_crf_fr_imm(dst, src, imm)) } inst_dtstdg_crf_fr_imm :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .DTSTDG, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_imm(imm), {}}} } -emit_dtstdg_crf_fr_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_dtstdg_crf_fr_imm(dst, src, imm)) } +emit_dtstdg_crf_fr_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_dtstdg_crf_fr_imm(dst, src, imm)) } inst_dtstex_crf_fr_fr :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .DTSTEX, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_dtstex_crf_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_dtstex_crf_fr_fr(dst, src, src2)) } +emit_dtstex_crf_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_dtstex_crf_fr_fr(dst, src, src2)) } inst_dtstsf_crf_fr_fr :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .DTSTSF, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_dtstsf_crf_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_dtstsf_crf_fr_fr(dst, src, src2)) } +emit_dtstsf_crf_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_dtstsf_crf_fr_fr(dst, src, src2)) } inst_denbcd_imm_fr_fr :: #force_inline proc "contextless" (imm: i64, dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .DENBCD, operand_count = 3, length = 4, ops = {op_imm(imm), op_reg(dst), op_reg(src), {}}} } -emit_denbcd_imm_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, dst: Register, src: Register) { append(instructions, inst_denbcd_imm_fr_fr(imm, dst, src)) } +emit_denbcd_imm_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, dst: Register, src: Register) { append_elem(instructions, inst_denbcd_imm_fr_fr(imm, dst, src)) } inst_denbcd_dot_imm_fr_fr :: #force_inline proc "contextless" (imm: i64, dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .DENBCD_DOT, operand_count = 3, length = 4, ops = {op_imm(imm), op_reg(dst), op_reg(src), {}}} } -emit_denbcd_dot_imm_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, dst: Register, src: Register) { append(instructions, inst_denbcd_dot_imm_fr_fr(imm, dst, src)) } +emit_denbcd_dot_imm_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, dst: Register, src: Register) { append_elem(instructions, inst_denbcd_dot_imm_fr_fr(imm, dst, src)) } inst_ddedpd_imm_fr_fr :: #force_inline proc "contextless" (imm: i64, dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .DDEDPD, operand_count = 3, length = 4, ops = {op_imm(imm), op_reg(dst), op_reg(src), {}}} } -emit_ddedpd_imm_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, dst: Register, src: Register) { append(instructions, inst_ddedpd_imm_fr_fr(imm, dst, src)) } +emit_ddedpd_imm_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, dst: Register, src: Register) { append_elem(instructions, inst_ddedpd_imm_fr_fr(imm, dst, src)) } inst_ddedpd_dot_imm_fr_fr :: #force_inline proc "contextless" (imm: i64, dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .DDEDPD_DOT, operand_count = 3, length = 4, ops = {op_imm(imm), op_reg(dst), op_reg(src), {}}} } -emit_ddedpd_dot_imm_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, dst: Register, src: Register) { append(instructions, inst_ddedpd_dot_imm_fr_fr(imm, dst, src)) } +emit_ddedpd_dot_imm_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, dst: Register, src: Register) { append_elem(instructions, inst_ddedpd_dot_imm_fr_fr(imm, dst, src)) } inst_daddq_fr_fr_fr :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .DADDQ, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_daddq_fr_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_daddq_fr_fr_fr(dst, src, src2)) } +emit_daddq_fr_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_daddq_fr_fr_fr(dst, src, src2)) } inst_daddq_dot_fr_fr_fr :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .DADDQ_DOT, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_daddq_dot_fr_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_daddq_dot_fr_fr_fr(dst, src, src2)) } +emit_daddq_dot_fr_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_daddq_dot_fr_fr_fr(dst, src, src2)) } inst_dsubq_fr_fr_fr :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .DSUBQ, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_dsubq_fr_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_dsubq_fr_fr_fr(dst, src, src2)) } +emit_dsubq_fr_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_dsubq_fr_fr_fr(dst, src, src2)) } inst_dsubq_dot_fr_fr_fr :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .DSUBQ_DOT, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_dsubq_dot_fr_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_dsubq_dot_fr_fr_fr(dst, src, src2)) } +emit_dsubq_dot_fr_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_dsubq_dot_fr_fr_fr(dst, src, src2)) } inst_dmulq_fr_fr_fr :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .DMULQ, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_dmulq_fr_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_dmulq_fr_fr_fr(dst, src, src2)) } +emit_dmulq_fr_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_dmulq_fr_fr_fr(dst, src, src2)) } inst_dmulq_dot_fr_fr_fr :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .DMULQ_DOT, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_dmulq_dot_fr_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_dmulq_dot_fr_fr_fr(dst, src, src2)) } +emit_dmulq_dot_fr_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_dmulq_dot_fr_fr_fr(dst, src, src2)) } inst_ddivq_fr_fr_fr :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .DDIVQ, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_ddivq_fr_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_ddivq_fr_fr_fr(dst, src, src2)) } +emit_ddivq_fr_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_ddivq_fr_fr_fr(dst, src, src2)) } inst_ddivq_dot_fr_fr_fr :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .DDIVQ_DOT, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_ddivq_dot_fr_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_ddivq_dot_fr_fr_fr(dst, src, src2)) } +emit_ddivq_dot_fr_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_ddivq_dot_fr_fr_fr(dst, src, src2)) } inst_dcmpuq_crf_fr_fr :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .DCMPUQ, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_dcmpuq_crf_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_dcmpuq_crf_fr_fr(dst, src, src2)) } +emit_dcmpuq_crf_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_dcmpuq_crf_fr_fr(dst, src, src2)) } inst_dcmpoq_crf_fr_fr :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .DCMPOQ, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_dcmpoq_crf_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_dcmpoq_crf_fr_fr(dst, src, src2)) } +emit_dcmpoq_crf_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_dcmpoq_crf_fr_fr(dst, src, src2)) } inst_dctfixq_fr_fr :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .DCTFIXQ, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_dctfixq_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_dctfixq_fr_fr(dst, src)) } +emit_dctfixq_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_dctfixq_fr_fr(dst, src)) } inst_dctfixq_dot_fr_fr :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .DCTFIXQ_DOT, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_dctfixq_dot_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_dctfixq_dot_fr_fr(dst, src)) } +emit_dctfixq_dot_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_dctfixq_dot_fr_fr(dst, src)) } inst_xxmtacc_imm :: #force_inline proc "contextless" (imm: i64) -> Instruction { return Instruction{mnemonic = .XXMTACC, operand_count = 1, length = 4, ops = {op_imm(imm), {}, {}, {}}} } -emit_xxmtacc_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64) { append(instructions, inst_xxmtacc_imm(imm)) } +emit_xxmtacc_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64) { append_elem(instructions, inst_xxmtacc_imm(imm)) } inst_xxmfacc_imm :: #force_inline proc "contextless" (imm: i64) -> Instruction { return Instruction{mnemonic = .XXMFACC, operand_count = 1, length = 4, ops = {op_imm(imm), {}, {}, {}}} } -emit_xxmfacc_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64) { append(instructions, inst_xxmfacc_imm(imm)) } +emit_xxmfacc_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64) { append_elem(instructions, inst_xxmfacc_imm(imm)) } inst_xxsetaccz_imm :: #force_inline proc "contextless" (imm: i64) -> Instruction { return Instruction{mnemonic = .XXSETACCZ, operand_count = 1, length = 4, ops = {op_imm(imm), {}, {}, {}}} } -emit_xxsetaccz_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64) { append(instructions, inst_xxsetaccz_imm(imm)) } +emit_xxsetaccz_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64) { append_elem(instructions, inst_xxsetaccz_imm(imm)) } inst_xvf16ger2_imm_vs_vs :: #force_inline proc "contextless" (imm: i64, dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .XVF16GER2, operand_count = 3, length = 4, ops = {op_imm(imm), op_reg(dst), op_reg(src), {}}} } -emit_xvf16ger2_imm_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, dst: Register, src: Register) { append(instructions, inst_xvf16ger2_imm_vs_vs(imm, dst, src)) } +emit_xvf16ger2_imm_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, dst: Register, src: Register) { append_elem(instructions, inst_xvf16ger2_imm_vs_vs(imm, dst, src)) } inst_xvf16ger2pp_imm_vs_vs :: #force_inline proc "contextless" (imm: i64, dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .XVF16GER2PP, operand_count = 3, length = 4, ops = {op_imm(imm), op_reg(dst), op_reg(src), {}}} } -emit_xvf16ger2pp_imm_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, dst: Register, src: Register) { append(instructions, inst_xvf16ger2pp_imm_vs_vs(imm, dst, src)) } +emit_xvf16ger2pp_imm_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, dst: Register, src: Register) { append_elem(instructions, inst_xvf16ger2pp_imm_vs_vs(imm, dst, src)) } inst_xvf16ger2pn_imm_vs_vs :: #force_inline proc "contextless" (imm: i64, dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .XVF16GER2PN, operand_count = 3, length = 4, ops = {op_imm(imm), op_reg(dst), op_reg(src), {}}} } -emit_xvf16ger2pn_imm_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, dst: Register, src: Register) { append(instructions, inst_xvf16ger2pn_imm_vs_vs(imm, dst, src)) } +emit_xvf16ger2pn_imm_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, dst: Register, src: Register) { append_elem(instructions, inst_xvf16ger2pn_imm_vs_vs(imm, dst, src)) } inst_xvf16ger2np_imm_vs_vs :: #force_inline proc "contextless" (imm: i64, dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .XVF16GER2NP, operand_count = 3, length = 4, ops = {op_imm(imm), op_reg(dst), op_reg(src), {}}} } -emit_xvf16ger2np_imm_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, dst: Register, src: Register) { append(instructions, inst_xvf16ger2np_imm_vs_vs(imm, dst, src)) } +emit_xvf16ger2np_imm_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, dst: Register, src: Register) { append_elem(instructions, inst_xvf16ger2np_imm_vs_vs(imm, dst, src)) } inst_xvf16ger2nn_imm_vs_vs :: #force_inline proc "contextless" (imm: i64, dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .XVF16GER2NN, operand_count = 3, length = 4, ops = {op_imm(imm), op_reg(dst), op_reg(src), {}}} } -emit_xvf16ger2nn_imm_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, dst: Register, src: Register) { append(instructions, inst_xvf16ger2nn_imm_vs_vs(imm, dst, src)) } +emit_xvf16ger2nn_imm_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, dst: Register, src: Register) { append_elem(instructions, inst_xvf16ger2nn_imm_vs_vs(imm, dst, src)) } inst_xvf32ger_imm_vs_vs :: #force_inline proc "contextless" (imm: i64, dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .XVF32GER, operand_count = 3, length = 4, ops = {op_imm(imm), op_reg(dst), op_reg(src), {}}} } -emit_xvf32ger_imm_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, dst: Register, src: Register) { append(instructions, inst_xvf32ger_imm_vs_vs(imm, dst, src)) } +emit_xvf32ger_imm_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, dst: Register, src: Register) { append_elem(instructions, inst_xvf32ger_imm_vs_vs(imm, dst, src)) } inst_xvf32gerpp_imm_vs_vs :: #force_inline proc "contextless" (imm: i64, dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .XVF32GERPP, operand_count = 3, length = 4, ops = {op_imm(imm), op_reg(dst), op_reg(src), {}}} } -emit_xvf32gerpp_imm_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, dst: Register, src: Register) { append(instructions, inst_xvf32gerpp_imm_vs_vs(imm, dst, src)) } +emit_xvf32gerpp_imm_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, dst: Register, src: Register) { append_elem(instructions, inst_xvf32gerpp_imm_vs_vs(imm, dst, src)) } inst_xvf32gerpn_imm_vs_vs :: #force_inline proc "contextless" (imm: i64, dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .XVF32GERPN, operand_count = 3, length = 4, ops = {op_imm(imm), op_reg(dst), op_reg(src), {}}} } -emit_xvf32gerpn_imm_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, dst: Register, src: Register) { append(instructions, inst_xvf32gerpn_imm_vs_vs(imm, dst, src)) } +emit_xvf32gerpn_imm_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, dst: Register, src: Register) { append_elem(instructions, inst_xvf32gerpn_imm_vs_vs(imm, dst, src)) } inst_xvf32gernp_imm_vs_vs :: #force_inline proc "contextless" (imm: i64, dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .XVF32GERNP, operand_count = 3, length = 4, ops = {op_imm(imm), op_reg(dst), op_reg(src), {}}} } -emit_xvf32gernp_imm_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, dst: Register, src: Register) { append(instructions, inst_xvf32gernp_imm_vs_vs(imm, dst, src)) } +emit_xvf32gernp_imm_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, dst: Register, src: Register) { append_elem(instructions, inst_xvf32gernp_imm_vs_vs(imm, dst, src)) } inst_xvf32gernn_imm_vs_vs :: #force_inline proc "contextless" (imm: i64, dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .XVF32GERNN, operand_count = 3, length = 4, ops = {op_imm(imm), op_reg(dst), op_reg(src), {}}} } -emit_xvf32gernn_imm_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, dst: Register, src: Register) { append(instructions, inst_xvf32gernn_imm_vs_vs(imm, dst, src)) } +emit_xvf32gernn_imm_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, dst: Register, src: Register) { append_elem(instructions, inst_xvf32gernn_imm_vs_vs(imm, dst, src)) } inst_xvf64ger_imm_vs_vs :: #force_inline proc "contextless" (imm: i64, dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .XVF64GER, operand_count = 3, length = 4, ops = {op_imm(imm), op_reg(dst), op_reg(src), {}}} } -emit_xvf64ger_imm_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, dst: Register, src: Register) { append(instructions, inst_xvf64ger_imm_vs_vs(imm, dst, src)) } +emit_xvf64ger_imm_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, dst: Register, src: Register) { append_elem(instructions, inst_xvf64ger_imm_vs_vs(imm, dst, src)) } inst_xvf64gerpp_imm_vs_vs :: #force_inline proc "contextless" (imm: i64, dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .XVF64GERPP, operand_count = 3, length = 4, ops = {op_imm(imm), op_reg(dst), op_reg(src), {}}} } -emit_xvf64gerpp_imm_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, dst: Register, src: Register) { append(instructions, inst_xvf64gerpp_imm_vs_vs(imm, dst, src)) } +emit_xvf64gerpp_imm_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, dst: Register, src: Register) { append_elem(instructions, inst_xvf64gerpp_imm_vs_vs(imm, dst, src)) } inst_xvf64gerpn_imm_vs_vs :: #force_inline proc "contextless" (imm: i64, dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .XVF64GERPN, operand_count = 3, length = 4, ops = {op_imm(imm), op_reg(dst), op_reg(src), {}}} } -emit_xvf64gerpn_imm_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, dst: Register, src: Register) { append(instructions, inst_xvf64gerpn_imm_vs_vs(imm, dst, src)) } +emit_xvf64gerpn_imm_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, dst: Register, src: Register) { append_elem(instructions, inst_xvf64gerpn_imm_vs_vs(imm, dst, src)) } inst_xvf64gernp_imm_vs_vs :: #force_inline proc "contextless" (imm: i64, dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .XVF64GERNP, operand_count = 3, length = 4, ops = {op_imm(imm), op_reg(dst), op_reg(src), {}}} } -emit_xvf64gernp_imm_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, dst: Register, src: Register) { append(instructions, inst_xvf64gernp_imm_vs_vs(imm, dst, src)) } +emit_xvf64gernp_imm_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, dst: Register, src: Register) { append_elem(instructions, inst_xvf64gernp_imm_vs_vs(imm, dst, src)) } inst_xvf64gernn_imm_vs_vs :: #force_inline proc "contextless" (imm: i64, dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .XVF64GERNN, operand_count = 3, length = 4, ops = {op_imm(imm), op_reg(dst), op_reg(src), {}}} } -emit_xvf64gernn_imm_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, dst: Register, src: Register) { append(instructions, inst_xvf64gernn_imm_vs_vs(imm, dst, src)) } +emit_xvf64gernn_imm_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, dst: Register, src: Register) { append_elem(instructions, inst_xvf64gernn_imm_vs_vs(imm, dst, src)) } inst_xvbf16ger2_imm_vs_vs :: #force_inline proc "contextless" (imm: i64, dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .XVBF16GER2, operand_count = 3, length = 4, ops = {op_imm(imm), op_reg(dst), op_reg(src), {}}} } -emit_xvbf16ger2_imm_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, dst: Register, src: Register) { append(instructions, inst_xvbf16ger2_imm_vs_vs(imm, dst, src)) } +emit_xvbf16ger2_imm_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, dst: Register, src: Register) { append_elem(instructions, inst_xvbf16ger2_imm_vs_vs(imm, dst, src)) } inst_xvbf16ger2pp_imm_vs_vs :: #force_inline proc "contextless" (imm: i64, dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .XVBF16GER2PP, operand_count = 3, length = 4, ops = {op_imm(imm), op_reg(dst), op_reg(src), {}}} } -emit_xvbf16ger2pp_imm_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, dst: Register, src: Register) { append(instructions, inst_xvbf16ger2pp_imm_vs_vs(imm, dst, src)) } +emit_xvbf16ger2pp_imm_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, dst: Register, src: Register) { append_elem(instructions, inst_xvbf16ger2pp_imm_vs_vs(imm, dst, src)) } inst_xvbf16ger2pn_imm_vs_vs :: #force_inline proc "contextless" (imm: i64, dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .XVBF16GER2PN, operand_count = 3, length = 4, ops = {op_imm(imm), op_reg(dst), op_reg(src), {}}} } -emit_xvbf16ger2pn_imm_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, dst: Register, src: Register) { append(instructions, inst_xvbf16ger2pn_imm_vs_vs(imm, dst, src)) } +emit_xvbf16ger2pn_imm_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, dst: Register, src: Register) { append_elem(instructions, inst_xvbf16ger2pn_imm_vs_vs(imm, dst, src)) } inst_xvbf16ger2np_imm_vs_vs :: #force_inline proc "contextless" (imm: i64, dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .XVBF16GER2NP, operand_count = 3, length = 4, ops = {op_imm(imm), op_reg(dst), op_reg(src), {}}} } -emit_xvbf16ger2np_imm_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, dst: Register, src: Register) { append(instructions, inst_xvbf16ger2np_imm_vs_vs(imm, dst, src)) } +emit_xvbf16ger2np_imm_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, dst: Register, src: Register) { append_elem(instructions, inst_xvbf16ger2np_imm_vs_vs(imm, dst, src)) } inst_xvbf16ger2nn_imm_vs_vs :: #force_inline proc "contextless" (imm: i64, dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .XVBF16GER2NN, operand_count = 3, length = 4, ops = {op_imm(imm), op_reg(dst), op_reg(src), {}}} } -emit_xvbf16ger2nn_imm_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, dst: Register, src: Register) { append(instructions, inst_xvbf16ger2nn_imm_vs_vs(imm, dst, src)) } +emit_xvbf16ger2nn_imm_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, dst: Register, src: Register) { append_elem(instructions, inst_xvbf16ger2nn_imm_vs_vs(imm, dst, src)) } inst_xvi4ger8_imm_vs_vs :: #force_inline proc "contextless" (imm: i64, dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .XVI4GER8, operand_count = 3, length = 4, ops = {op_imm(imm), op_reg(dst), op_reg(src), {}}} } -emit_xvi4ger8_imm_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, dst: Register, src: Register) { append(instructions, inst_xvi4ger8_imm_vs_vs(imm, dst, src)) } +emit_xvi4ger8_imm_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, dst: Register, src: Register) { append_elem(instructions, inst_xvi4ger8_imm_vs_vs(imm, dst, src)) } inst_xvi4ger8pp_imm_vs_vs :: #force_inline proc "contextless" (imm: i64, dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .XVI4GER8PP, operand_count = 3, length = 4, ops = {op_imm(imm), op_reg(dst), op_reg(src), {}}} } -emit_xvi4ger8pp_imm_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, dst: Register, src: Register) { append(instructions, inst_xvi4ger8pp_imm_vs_vs(imm, dst, src)) } +emit_xvi4ger8pp_imm_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, dst: Register, src: Register) { append_elem(instructions, inst_xvi4ger8pp_imm_vs_vs(imm, dst, src)) } inst_xvi8ger4_imm_vs_vs :: #force_inline proc "contextless" (imm: i64, dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .XVI8GER4, operand_count = 3, length = 4, ops = {op_imm(imm), op_reg(dst), op_reg(src), {}}} } -emit_xvi8ger4_imm_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, dst: Register, src: Register) { append(instructions, inst_xvi8ger4_imm_vs_vs(imm, dst, src)) } +emit_xvi8ger4_imm_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, dst: Register, src: Register) { append_elem(instructions, inst_xvi8ger4_imm_vs_vs(imm, dst, src)) } inst_xvi8ger4pp_imm_vs_vs :: #force_inline proc "contextless" (imm: i64, dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .XVI8GER4PP, operand_count = 3, length = 4, ops = {op_imm(imm), op_reg(dst), op_reg(src), {}}} } -emit_xvi8ger4pp_imm_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, dst: Register, src: Register) { append(instructions, inst_xvi8ger4pp_imm_vs_vs(imm, dst, src)) } +emit_xvi8ger4pp_imm_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, dst: Register, src: Register) { append_elem(instructions, inst_xvi8ger4pp_imm_vs_vs(imm, dst, src)) } inst_xvi8ger4spp_imm_vs_vs :: #force_inline proc "contextless" (imm: i64, dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .XVI8GER4SPP, operand_count = 3, length = 4, ops = {op_imm(imm), op_reg(dst), op_reg(src), {}}} } -emit_xvi8ger4spp_imm_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, dst: Register, src: Register) { append(instructions, inst_xvi8ger4spp_imm_vs_vs(imm, dst, src)) } +emit_xvi8ger4spp_imm_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, dst: Register, src: Register) { append_elem(instructions, inst_xvi8ger4spp_imm_vs_vs(imm, dst, src)) } inst_xvi16ger2_imm_vs_vs :: #force_inline proc "contextless" (imm: i64, dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .XVI16GER2, operand_count = 3, length = 4, ops = {op_imm(imm), op_reg(dst), op_reg(src), {}}} } -emit_xvi16ger2_imm_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, dst: Register, src: Register) { append(instructions, inst_xvi16ger2_imm_vs_vs(imm, dst, src)) } +emit_xvi16ger2_imm_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, dst: Register, src: Register) { append_elem(instructions, inst_xvi16ger2_imm_vs_vs(imm, dst, src)) } inst_xvi16ger2pp_imm_vs_vs :: #force_inline proc "contextless" (imm: i64, dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .XVI16GER2PP, operand_count = 3, length = 4, ops = {op_imm(imm), op_reg(dst), op_reg(src), {}}} } -emit_xvi16ger2pp_imm_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, dst: Register, src: Register) { append(instructions, inst_xvi16ger2pp_imm_vs_vs(imm, dst, src)) } +emit_xvi16ger2pp_imm_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, dst: Register, src: Register) { append_elem(instructions, inst_xvi16ger2pp_imm_vs_vs(imm, dst, src)) } inst_xvi16ger2s_imm_vs_vs :: #force_inline proc "contextless" (imm: i64, dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .XVI16GER2S, operand_count = 3, length = 4, ops = {op_imm(imm), op_reg(dst), op_reg(src), {}}} } -emit_xvi16ger2s_imm_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, dst: Register, src: Register) { append(instructions, inst_xvi16ger2s_imm_vs_vs(imm, dst, src)) } +emit_xvi16ger2s_imm_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, dst: Register, src: Register) { append_elem(instructions, inst_xvi16ger2s_imm_vs_vs(imm, dst, src)) } inst_xvi16ger2spp_imm_vs_vs :: #force_inline proc "contextless" (imm: i64, dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .XVI16GER2SPP, operand_count = 3, length = 4, ops = {op_imm(imm), op_reg(dst), op_reg(src), {}}} } -emit_xvi16ger2spp_imm_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, dst: Register, src: Register) { append(instructions, inst_xvi16ger2spp_imm_vs_vs(imm, dst, src)) } +emit_xvi16ger2spp_imm_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, dst: Register, src: Register) { append_elem(instructions, inst_xvi16ger2spp_imm_vs_vs(imm, dst, src)) } inst_vstribl_v_v :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .VSTRIBL, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_vstribl_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_vstribl_v_v(dst, src)) } +emit_vstribl_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_vstribl_v_v(dst, src)) } inst_vstribr_v_v :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .VSTRIBR, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_vstribr_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_vstribr_v_v(dst, src)) } +emit_vstribr_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_vstribr_v_v(dst, src)) } inst_vstribl_dot_v_v :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .VSTRIBL_DOT, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_vstribl_dot_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_vstribl_dot_v_v(dst, src)) } +emit_vstribl_dot_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_vstribl_dot_v_v(dst, src)) } inst_vstribr_dot_v_v :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .VSTRIBR_DOT, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_vstribr_dot_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_vstribr_dot_v_v(dst, src)) } +emit_vstribr_dot_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_vstribr_dot_v_v(dst, src)) } inst_vstrihl_v_v :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .VSTRIHL, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_vstrihl_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_vstrihl_v_v(dst, src)) } +emit_vstrihl_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_vstrihl_v_v(dst, src)) } inst_vstrihr_v_v :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .VSTRIHR, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_vstrihr_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_vstrihr_v_v(dst, src)) } +emit_vstrihr_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_vstrihr_v_v(dst, src)) } inst_vstrihl_dot_v_v :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .VSTRIHL_DOT, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_vstrihl_dot_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_vstrihl_dot_v_v(dst, src)) } +emit_vstrihl_dot_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_vstrihl_dot_v_v(dst, src)) } inst_vstrihr_dot_v_v :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .VSTRIHR_DOT, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_vstrihr_dot_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_vstrihr_dot_v_v(dst, src)) } +emit_vstrihr_dot_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_vstrihr_dot_v_v(dst, src)) } inst_vmsumcud_v_v_v_v :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register, src3: Register) -> Instruction { return Instruction{mnemonic = .VMSUMCUD, operand_count = 4, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), op_reg(src3)}} } -emit_vmsumcud_v_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, src3: Register) { append(instructions, inst_vmsumcud_v_v_v_v(dst, src, src2, src3)) } +emit_vmsumcud_v_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, src3: Register) { append_elem(instructions, inst_vmsumcud_v_v_v_v(dst, src, src2, src3)) } inst_vcfuged_v_v_v :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VCFUGED, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_vcfuged_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vcfuged_v_v_v(dst, src, src2)) } +emit_vcfuged_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vcfuged_v_v_v(dst, src, src2)) } inst_vpdepd_v_v_v :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VPDEPD, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_vpdepd_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vpdepd_v_v_v(dst, src, src2)) } +emit_vpdepd_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vpdepd_v_v_v(dst, src, src2)) } inst_vpextd_v_v_v :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VPEXTD, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_vpextd_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vpextd_v_v_v(dst, src, src2)) } +emit_vpextd_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vpextd_v_v_v(dst, src, src2)) } inst_vgnb_r_v_imm :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .VGNB, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_imm(imm), {}}} } -emit_vgnb_r_v_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_vgnb_r_v_imm(dst, src, imm)) } +emit_vgnb_r_v_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_vgnb_r_v_imm(dst, src, imm)) } inst_vsldbi_v_v_v_imm :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .VSLDBI, operand_count = 4, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), op_imm(imm)}} } -emit_vsldbi_v_v_v_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, imm: i64) { append(instructions, inst_vsldbi_v_v_v_imm(dst, src, src2, imm)) } +emit_vsldbi_v_v_v_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, imm: i64) { append_elem(instructions, inst_vsldbi_v_v_v_imm(dst, src, src2, imm)) } inst_vsrdbi_v_v_v_imm :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .VSRDBI, operand_count = 4, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), op_imm(imm)}} } -emit_vsrdbi_v_v_v_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, imm: i64) { append(instructions, inst_vsrdbi_v_v_v_imm(dst, src, src2, imm)) } +emit_vsrdbi_v_v_v_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, imm: i64) { append_elem(instructions, inst_vsrdbi_v_v_v_imm(dst, src, src2, imm)) } inst_vclzdm_v_v_v :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VCLZDM, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_vclzdm_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vclzdm_v_v_v(dst, src, src2)) } +emit_vclzdm_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vclzdm_v_v_v(dst, src, src2)) } inst_vctzdm_v_v_v :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VCTZDM, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_vctzdm_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vctzdm_v_v_v(dst, src, src2)) } +emit_vctzdm_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vctzdm_v_v_v(dst, src, src2)) } inst_vclrlb_v_v_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VCLRLB, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_vclrlb_v_v_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vclrlb_v_v_r(dst, src, src2)) } +emit_vclrlb_v_v_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vclrlb_v_v_r(dst, src, src2)) } inst_vclrrb_v_v_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VCLRRB, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_vclrrb_v_v_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vclrrb_v_v_r(dst, src, src2)) } +emit_vclrrb_v_v_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vclrrb_v_v_r(dst, src, src2)) } inst_vexpandbm_v_v :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .VEXPANDBM, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_vexpandbm_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_vexpandbm_v_v(dst, src)) } +emit_vexpandbm_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_vexpandbm_v_v(dst, src)) } inst_vexpandhm_v_v :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .VEXPANDHM, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_vexpandhm_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_vexpandhm_v_v(dst, src)) } +emit_vexpandhm_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_vexpandhm_v_v(dst, src)) } inst_vexpandwm_v_v :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .VEXPANDWM, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_vexpandwm_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_vexpandwm_v_v(dst, src)) } +emit_vexpandwm_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_vexpandwm_v_v(dst, src)) } inst_vexpanddm_v_v :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .VEXPANDDM, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_vexpanddm_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_vexpanddm_v_v(dst, src)) } +emit_vexpanddm_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_vexpanddm_v_v(dst, src)) } inst_vexpandqm_v_v :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .VEXPANDQM, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_vexpandqm_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_vexpandqm_v_v(dst, src)) } +emit_vexpandqm_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_vexpandqm_v_v(dst, src)) } inst_vextractbm_r_v :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .VEXTRACTBM, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_vextractbm_r_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_vextractbm_r_v(dst, src)) } +emit_vextractbm_r_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_vextractbm_r_v(dst, src)) } inst_vextracthm_r_v :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .VEXTRACTHM, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_vextracthm_r_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_vextracthm_r_v(dst, src)) } +emit_vextracthm_r_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_vextracthm_r_v(dst, src)) } inst_vextractwm_r_v :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .VEXTRACTWM, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_vextractwm_r_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_vextractwm_r_v(dst, src)) } +emit_vextractwm_r_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_vextractwm_r_v(dst, src)) } inst_vextractdm_r_v :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .VEXTRACTDM, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_vextractdm_r_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_vextractdm_r_v(dst, src)) } +emit_vextractdm_r_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_vextractdm_r_v(dst, src)) } inst_vextractqm_r_v :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .VEXTRACTQM, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_vextractqm_r_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_vextractqm_r_v(dst, src)) } +emit_vextractqm_r_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_vextractqm_r_v(dst, src)) } inst_vcntmbb_r_v_imm :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .VCNTMBB, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_imm(imm), {}}} } -emit_vcntmbb_r_v_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_vcntmbb_r_v_imm(dst, src, imm)) } +emit_vcntmbb_r_v_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_vcntmbb_r_v_imm(dst, src, imm)) } inst_vcntmbh_r_v_imm :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .VCNTMBH, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_imm(imm), {}}} } -emit_vcntmbh_r_v_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_vcntmbh_r_v_imm(dst, src, imm)) } +emit_vcntmbh_r_v_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_vcntmbh_r_v_imm(dst, src, imm)) } inst_vcntmbw_r_v_imm :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .VCNTMBW, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_imm(imm), {}}} } -emit_vcntmbw_r_v_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_vcntmbw_r_v_imm(dst, src, imm)) } +emit_vcntmbw_r_v_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_vcntmbw_r_v_imm(dst, src, imm)) } inst_vcntmbd_r_v_imm :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .VCNTMBD, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_imm(imm), {}}} } -emit_vcntmbd_r_v_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_vcntmbd_r_v_imm(dst, src, imm)) } +emit_vcntmbd_r_v_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_vcntmbd_r_v_imm(dst, src, imm)) } inst_mtvsrbm_vs_r :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .MTVSRBM, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_mtvsrbm_vs_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_mtvsrbm_vs_r(dst, src)) } +emit_mtvsrbm_vs_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_mtvsrbm_vs_r(dst, src)) } inst_mtvsrhm_vs_r :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .MTVSRHM, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_mtvsrhm_vs_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_mtvsrhm_vs_r(dst, src)) } +emit_mtvsrhm_vs_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_mtvsrhm_vs_r(dst, src)) } inst_mtvsrwm_vs_r :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .MTVSRWM, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_mtvsrwm_vs_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_mtvsrwm_vs_r(dst, src)) } +emit_mtvsrwm_vs_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_mtvsrwm_vs_r(dst, src)) } inst_mtvsrdm_vs_r :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .MTVSRDM, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_mtvsrdm_vs_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_mtvsrdm_vs_r(dst, src)) } +emit_mtvsrdm_vs_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_mtvsrdm_vs_r(dst, src)) } inst_mtvsrqm_vs_r :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .MTVSRQM, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_mtvsrqm_vs_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_mtvsrqm_vs_r(dst, src)) } +emit_mtvsrqm_vs_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_mtvsrqm_vs_r(dst, src)) } inst_copy_r_r :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .COPY, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_copy_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_copy_r_r(dst, src)) } +emit_copy_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_copy_r_r(dst, src)) } inst_paste_dot_r_r :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .PASTE_DOT, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_paste_dot_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_paste_dot_r_r(dst, src)) } +emit_paste_dot_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_paste_dot_r_r(dst, src)) } inst_lbzcix_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .LBZCIX, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_lbzcix_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_lbzcix_r_r_r(dst, src, src2)) } +emit_lbzcix_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_lbzcix_r_r_r(dst, src, src2)) } inst_lhzcix_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .LHZCIX, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_lhzcix_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_lhzcix_r_r_r(dst, src, src2)) } +emit_lhzcix_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_lhzcix_r_r_r(dst, src, src2)) } inst_lwzcix_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .LWZCIX, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_lwzcix_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_lwzcix_r_r_r(dst, src, src2)) } +emit_lwzcix_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_lwzcix_r_r_r(dst, src, src2)) } inst_ldcix_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .LDCIX, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_ldcix_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_ldcix_r_r_r(dst, src, src2)) } +emit_ldcix_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_ldcix_r_r_r(dst, src, src2)) } inst_stbcix_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .STBCIX, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_stbcix_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_stbcix_r_r_r(dst, src, src2)) } +emit_stbcix_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_stbcix_r_r_r(dst, src, src2)) } inst_sthcix_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .STHCIX, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_sthcix_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_sthcix_r_r_r(dst, src, src2)) } +emit_sthcix_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_sthcix_r_r_r(dst, src, src2)) } inst_stwcix_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .STWCIX, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_stwcix_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_stwcix_r_r_r(dst, src, src2)) } +emit_stwcix_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_stwcix_r_r_r(dst, src, src2)) } inst_stdcix_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .STDCIX, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_stdcix_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_stdcix_r_r_r(dst, src, src2)) } +emit_stdcix_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_stdcix_r_r_r(dst, src, src2)) } inst_tbegin_dot_imm :: #force_inline proc "contextless" (imm: i64) -> Instruction { return Instruction{mnemonic = .TBEGIN_DOT, operand_count = 1, length = 4, ops = {op_imm(imm), {}, {}, {}}} } -emit_tbegin_dot_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64) { append(instructions, inst_tbegin_dot_imm(imm)) } +emit_tbegin_dot_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64) { append_elem(instructions, inst_tbegin_dot_imm(imm)) } inst_tend_dot_none :: #force_inline proc "contextless" () -> Instruction { return Instruction{mnemonic = .TEND_DOT, operand_count = 0, length = 4, ops = {{}, {}, {}, {}}} } -emit_tend_dot_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_tend_dot_none()) } +emit_tend_dot_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_tend_dot_none()) } inst_tabort_dot_r :: #force_inline proc "contextless" (dst: Register) -> Instruction { return Instruction{mnemonic = .TABORT_DOT, operand_count = 1, length = 4, ops = {op_reg(dst), {}, {}, {}}} } -emit_tabort_dot_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register) { append(instructions, inst_tabort_dot_r(dst)) } +emit_tabort_dot_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register) { append_elem(instructions, inst_tabort_dot_r(dst)) } inst_tabortwc_dot_imm_r_r :: #force_inline proc "contextless" (imm: i64, dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .TABORTWC_DOT, operand_count = 3, length = 4, ops = {op_imm(imm), op_reg(dst), op_reg(src), {}}} } -emit_tabortwc_dot_imm_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, dst: Register, src: Register) { append(instructions, inst_tabortwc_dot_imm_r_r(imm, dst, src)) } +emit_tabortwc_dot_imm_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, dst: Register, src: Register) { append_elem(instructions, inst_tabortwc_dot_imm_r_r(imm, dst, src)) } inst_tabortwci_dot_imm_r_imm :: #force_inline proc "contextless" (imm: i64, dst: Register, imm2: i64) -> Instruction { return Instruction{mnemonic = .TABORTWCI_DOT, operand_count = 3, length = 4, ops = {op_imm(imm), op_reg(dst), op_imm(imm2), {}}} } -emit_tabortwci_dot_imm_r_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, dst: Register, imm2: i64) { append(instructions, inst_tabortwci_dot_imm_r_imm(imm, dst, imm2)) } +emit_tabortwci_dot_imm_r_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, dst: Register, imm2: i64) { append_elem(instructions, inst_tabortwci_dot_imm_r_imm(imm, dst, imm2)) } inst_tabortdc_dot_imm_r_r :: #force_inline proc "contextless" (imm: i64, dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .TABORTDC_DOT, operand_count = 3, length = 4, ops = {op_imm(imm), op_reg(dst), op_reg(src), {}}} } -emit_tabortdc_dot_imm_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, dst: Register, src: Register) { append(instructions, inst_tabortdc_dot_imm_r_r(imm, dst, src)) } +emit_tabortdc_dot_imm_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, dst: Register, src: Register) { append_elem(instructions, inst_tabortdc_dot_imm_r_r(imm, dst, src)) } inst_tabortdci_dot_imm_r_imm :: #force_inline proc "contextless" (imm: i64, dst: Register, imm2: i64) -> Instruction { return Instruction{mnemonic = .TABORTDCI_DOT, operand_count = 3, length = 4, ops = {op_imm(imm), op_reg(dst), op_imm(imm2), {}}} } -emit_tabortdci_dot_imm_r_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, dst: Register, imm2: i64) { append(instructions, inst_tabortdci_dot_imm_r_imm(imm, dst, imm2)) } +emit_tabortdci_dot_imm_r_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, dst: Register, imm2: i64) { append_elem(instructions, inst_tabortdci_dot_imm_r_imm(imm, dst, imm2)) } inst_treclaim_dot_r :: #force_inline proc "contextless" (dst: Register) -> Instruction { return Instruction{mnemonic = .TRECLAIM_DOT, operand_count = 1, length = 4, ops = {op_reg(dst), {}, {}, {}}} } -emit_treclaim_dot_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register) { append(instructions, inst_treclaim_dot_r(dst)) } +emit_treclaim_dot_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register) { append_elem(instructions, inst_treclaim_dot_r(dst)) } inst_trechkpt_dot_none :: #force_inline proc "contextless" () -> Instruction { return Instruction{mnemonic = .TRECHKPT_DOT, operand_count = 0, length = 4, ops = {{}, {}, {}, {}}} } -emit_trechkpt_dot_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_trechkpt_dot_none()) } +emit_trechkpt_dot_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_trechkpt_dot_none()) } inst_tsuspend_dot_none :: #force_inline proc "contextless" () -> Instruction { return Instruction{mnemonic = .TSUSPEND_DOT, operand_count = 0, length = 4, ops = {{}, {}, {}, {}}} } -emit_tsuspend_dot_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_tsuspend_dot_none()) } +emit_tsuspend_dot_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_tsuspend_dot_none()) } inst_tresume_dot_none :: #force_inline proc "contextless" () -> Instruction { return Instruction{mnemonic = .TRESUME_DOT, operand_count = 0, length = 4, ops = {{}, {}, {}, {}}} } -emit_tresume_dot_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_tresume_dot_none()) } +emit_tresume_dot_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_tresume_dot_none()) } inst_tcheck_crf :: #force_inline proc "contextless" (dst: Register) -> Instruction { return Instruction{mnemonic = .TCHECK, operand_count = 1, length = 4, ops = {op_reg(dst), {}, {}, {}}} } -emit_tcheck_crf :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register) { append(instructions, inst_tcheck_crf(dst)) } +emit_tcheck_crf :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register) { append_elem(instructions, inst_tcheck_crf(dst)) } inst_addg6s_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .ADDG6S, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_addg6s_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_addg6s_r_r_r(dst, src, src2)) } +emit_addg6s_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_addg6s_r_r_r(dst, src, src2)) } inst_cbcdtd_r_r :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .CBCDTD, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_cbcdtd_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_cbcdtd_r_r(dst, src)) } +emit_cbcdtd_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_cbcdtd_r_r(dst, src)) } inst_cdtbcd_r_r :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .CDTBCD, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_cdtbcd_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_cdtbcd_r_r(dst, src)) } +emit_cdtbcd_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_cdtbcd_r_r(dst, src)) } inst_rfebb_imm :: #force_inline proc "contextless" (imm: i64) -> Instruction { return Instruction{mnemonic = .RFEBB, operand_count = 1, length = 4, ops = {op_imm(imm), {}, {}, {}}} } -emit_rfebb_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64) { append(instructions, inst_rfebb_imm(imm)) } +emit_rfebb_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64) { append_elem(instructions, inst_rfebb_imm(imm)) } inst_rfdi_none :: #force_inline proc "contextless" () -> Instruction { return Instruction{mnemonic = .RFDI, operand_count = 0, length = 4, ops = {{}, {}, {}, {}}} } -emit_rfdi_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_rfdi_none()) } +emit_rfdi_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_rfdi_none()) } inst_msgsync_none :: #force_inline proc "contextless" () -> Instruction { return Instruction{mnemonic = .MSGSYNC, operand_count = 0, length = 4, ops = {{}, {}, {}, {}}} } -emit_msgsync_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_msgsync_none()) } +emit_msgsync_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_msgsync_none()) } inst_isel_r_rz_r_crb :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register, src3: Register) -> Instruction { return Instruction{mnemonic = .ISEL, operand_count = 4, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), op_reg(src3)}} } -emit_isel_r_rz_r_crb :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, src3: Register) { append(instructions, inst_isel_r_rz_r_crb(dst, src, src2, src3)) } +emit_isel_r_rz_r_crb :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, src3: Register) { append_elem(instructions, inst_isel_r_rz_r_crb(dst, src, src2, src3)) } inst_dcbtt_mem :: #force_inline proc "contextless" (addr: Memory) -> Instruction { return Instruction{mnemonic = .DCBTT, operand_count = 1, length = 4, ops = {op_mem(addr), {}, {}, {}}} } -emit_dcbtt_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, addr: Memory) { append(instructions, inst_dcbtt_mem(addr)) } +emit_dcbtt_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, addr: Memory) { append_elem(instructions, inst_dcbtt_mem(addr)) } inst_dcbtstt_mem :: #force_inline proc "contextless" (addr: Memory) -> Instruction { return Instruction{mnemonic = .DCBTSTT, operand_count = 1, length = 4, ops = {op_mem(addr), {}, {}, {}}} } -emit_dcbtstt_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, addr: Memory) { append(instructions, inst_dcbtstt_mem(addr)) } +emit_dcbtstt_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, addr: Memory) { append_elem(instructions, inst_dcbtstt_mem(addr)) } inst_vextublx_r_r_v :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VEXTUBLX, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_vextublx_r_r_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vextublx_r_r_v(dst, src, src2)) } +emit_vextublx_r_r_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vextublx_r_r_v(dst, src, src2)) } inst_vextuhlx_r_r_v :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VEXTUHLX, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_vextuhlx_r_r_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vextuhlx_r_r_v(dst, src, src2)) } +emit_vextuhlx_r_r_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vextuhlx_r_r_v(dst, src, src2)) } inst_vextuwlx_r_r_v :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VEXTUWLX, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_vextuwlx_r_r_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vextuwlx_r_r_v(dst, src, src2)) } +emit_vextuwlx_r_r_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vextuwlx_r_r_v(dst, src, src2)) } inst_vextubrx_r_r_v :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VEXTUBRX, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_vextubrx_r_r_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vextubrx_r_r_v(dst, src, src2)) } +emit_vextubrx_r_r_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vextubrx_r_r_v(dst, src, src2)) } inst_vextuhrx_r_r_v :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VEXTUHRX, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_vextuhrx_r_r_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vextuhrx_r_r_v(dst, src, src2)) } +emit_vextuhrx_r_r_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vextuhrx_r_r_v(dst, src, src2)) } inst_vextuwrx_r_r_v :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VEXTUWRX, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_vextuwrx_r_r_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vextuwrx_r_r_v(dst, src, src2)) } +emit_vextuwrx_r_r_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vextuwrx_r_r_v(dst, src, src2)) } inst_vinsbvlx_v_r_v :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VINSBVLX, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_vinsbvlx_v_r_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vinsbvlx_v_r_v(dst, src, src2)) } +emit_vinsbvlx_v_r_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vinsbvlx_v_r_v(dst, src, src2)) } inst_vinshvlx_v_r_v :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VINSHVLX, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_vinshvlx_v_r_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vinshvlx_v_r_v(dst, src, src2)) } +emit_vinshvlx_v_r_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vinshvlx_v_r_v(dst, src, src2)) } inst_vinswvlx_v_r_v :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VINSWVLX, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_vinswvlx_v_r_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vinswvlx_v_r_v(dst, src, src2)) } +emit_vinswvlx_v_r_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vinswvlx_v_r_v(dst, src, src2)) } inst_vinsbvrx_v_r_v :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VINSBVRX, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_vinsbvrx_v_r_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vinsbvrx_v_r_v(dst, src, src2)) } +emit_vinsbvrx_v_r_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vinsbvrx_v_r_v(dst, src, src2)) } inst_vinshvrx_v_r_v :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VINSHVRX, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_vinshvrx_v_r_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vinshvrx_v_r_v(dst, src, src2)) } +emit_vinshvrx_v_r_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vinshvrx_v_r_v(dst, src, src2)) } inst_vinswvrx_v_r_v :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VINSWVRX, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_vinswvrx_v_r_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vinswvrx_v_r_v(dst, src, src2)) } +emit_vinswvrx_v_r_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vinswvrx_v_r_v(dst, src, src2)) } inst_vinsblx_v_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VINSBLX, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_vinsblx_v_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vinsblx_v_r_r(dst, src, src2)) } +emit_vinsblx_v_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vinsblx_v_r_r(dst, src, src2)) } inst_vinshlx_v_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VINSHLX, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_vinshlx_v_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vinshlx_v_r_r(dst, src, src2)) } +emit_vinshlx_v_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vinshlx_v_r_r(dst, src, src2)) } inst_vinswlx_v_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VINSWLX, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_vinswlx_v_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vinswlx_v_r_r(dst, src, src2)) } +emit_vinswlx_v_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vinswlx_v_r_r(dst, src, src2)) } inst_vinsdlx_v_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VINSDLX, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_vinsdlx_v_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vinsdlx_v_r_r(dst, src, src2)) } +emit_vinsdlx_v_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vinsdlx_v_r_r(dst, src, src2)) } inst_vinsbrx_v_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VINSBRX, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_vinsbrx_v_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vinsbrx_v_r_r(dst, src, src2)) } +emit_vinsbrx_v_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vinsbrx_v_r_r(dst, src, src2)) } inst_vinshrx_v_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VINSHRX, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_vinshrx_v_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vinshrx_v_r_r(dst, src, src2)) } +emit_vinshrx_v_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vinshrx_v_r_r(dst, src, src2)) } inst_vinswrx_v_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VINSWRX, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_vinswrx_v_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vinswrx_v_r_r(dst, src, src2)) } +emit_vinswrx_v_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vinswrx_v_r_r(dst, src, src2)) } inst_vinsdrx_v_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VINSDRX, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_vinsdrx_v_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vinsdrx_v_r_r(dst, src, src2)) } +emit_vinsdrx_v_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vinsdrx_v_r_r(dst, src, src2)) } inst_vinsw_v_r_imm :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .VINSW, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_imm(imm), {}}} } -emit_vinsw_v_r_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_vinsw_v_r_imm(dst, src, imm)) } +emit_vinsw_v_r_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_vinsw_v_r_imm(dst, src, imm)) } inst_vinsd_v_r_imm :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .VINSD, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_imm(imm), {}}} } -emit_vinsd_v_r_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_vinsd_v_r_imm(dst, src, imm)) } +emit_vinsd_v_r_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_vinsd_v_r_imm(dst, src, imm)) } inst_vextdubvlx_v_v_v_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register, src3: Register) -> Instruction { return Instruction{mnemonic = .VEXTDUBVLX, operand_count = 4, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), op_reg(src3)}} } -emit_vextdubvlx_v_v_v_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, src3: Register) { append(instructions, inst_vextdubvlx_v_v_v_r(dst, src, src2, src3)) } +emit_vextdubvlx_v_v_v_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, src3: Register) { append_elem(instructions, inst_vextdubvlx_v_v_v_r(dst, src, src2, src3)) } inst_vextduhvlx_v_v_v_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register, src3: Register) -> Instruction { return Instruction{mnemonic = .VEXTDUHVLX, operand_count = 4, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), op_reg(src3)}} } -emit_vextduhvlx_v_v_v_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, src3: Register) { append(instructions, inst_vextduhvlx_v_v_v_r(dst, src, src2, src3)) } +emit_vextduhvlx_v_v_v_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, src3: Register) { append_elem(instructions, inst_vextduhvlx_v_v_v_r(dst, src, src2, src3)) } inst_vextduwvlx_v_v_v_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register, src3: Register) -> Instruction { return Instruction{mnemonic = .VEXTDUWVLX, operand_count = 4, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), op_reg(src3)}} } -emit_vextduwvlx_v_v_v_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, src3: Register) { append(instructions, inst_vextduwvlx_v_v_v_r(dst, src, src2, src3)) } +emit_vextduwvlx_v_v_v_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, src3: Register) { append_elem(instructions, inst_vextduwvlx_v_v_v_r(dst, src, src2, src3)) } inst_vextddvlx_v_v_v_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register, src3: Register) -> Instruction { return Instruction{mnemonic = .VEXTDDVLX, operand_count = 4, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), op_reg(src3)}} } -emit_vextddvlx_v_v_v_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, src3: Register) { append(instructions, inst_vextddvlx_v_v_v_r(dst, src, src2, src3)) } +emit_vextddvlx_v_v_v_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, src3: Register) { append_elem(instructions, inst_vextddvlx_v_v_v_r(dst, src, src2, src3)) } inst_vextdubvrx_v_v_v_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register, src3: Register) -> Instruction { return Instruction{mnemonic = .VEXTDUBVRX, operand_count = 4, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), op_reg(src3)}} } -emit_vextdubvrx_v_v_v_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, src3: Register) { append(instructions, inst_vextdubvrx_v_v_v_r(dst, src, src2, src3)) } +emit_vextdubvrx_v_v_v_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, src3: Register) { append_elem(instructions, inst_vextdubvrx_v_v_v_r(dst, src, src2, src3)) } inst_vextduhvrx_v_v_v_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register, src3: Register) -> Instruction { return Instruction{mnemonic = .VEXTDUHVRX, operand_count = 4, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), op_reg(src3)}} } -emit_vextduhvrx_v_v_v_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, src3: Register) { append(instructions, inst_vextduhvrx_v_v_v_r(dst, src, src2, src3)) } +emit_vextduhvrx_v_v_v_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, src3: Register) { append_elem(instructions, inst_vextduhvrx_v_v_v_r(dst, src, src2, src3)) } inst_vextduwvrx_v_v_v_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register, src3: Register) -> Instruction { return Instruction{mnemonic = .VEXTDUWVRX, operand_count = 4, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), op_reg(src3)}} } -emit_vextduwvrx_v_v_v_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, src3: Register) { append(instructions, inst_vextduwvrx_v_v_v_r(dst, src, src2, src3)) } +emit_vextduwvrx_v_v_v_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, src3: Register) { append_elem(instructions, inst_vextduwvrx_v_v_v_r(dst, src, src2, src3)) } inst_vextddvrx_v_v_v_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register, src3: Register) -> Instruction { return Instruction{mnemonic = .VEXTDDVRX, operand_count = 4, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), op_reg(src3)}} } -emit_vextddvrx_v_v_v_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, src3: Register) { append(instructions, inst_vextddvrx_v_v_v_r(dst, src, src2, src3)) } +emit_vextddvrx_v_v_v_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, src3: Register) { append_elem(instructions, inst_vextddvrx_v_v_v_r(dst, src, src2, src3)) } inst_lxvrbx_vs_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .LXVRBX, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_lxvrbx_vs_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_lxvrbx_vs_r_r(dst, src, src2)) } +emit_lxvrbx_vs_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_lxvrbx_vs_r_r(dst, src, src2)) } inst_lxvrhx_vs_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .LXVRHX, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_lxvrhx_vs_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_lxvrhx_vs_r_r(dst, src, src2)) } +emit_lxvrhx_vs_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_lxvrhx_vs_r_r(dst, src, src2)) } inst_lxvrwx_vs_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .LXVRWX, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_lxvrwx_vs_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_lxvrwx_vs_r_r(dst, src, src2)) } +emit_lxvrwx_vs_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_lxvrwx_vs_r_r(dst, src, src2)) } inst_lxvrdx_vs_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .LXVRDX, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_lxvrdx_vs_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_lxvrdx_vs_r_r(dst, src, src2)) } +emit_lxvrdx_vs_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_lxvrdx_vs_r_r(dst, src, src2)) } inst_stxvrbx_vs_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .STXVRBX, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_stxvrbx_vs_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_stxvrbx_vs_r_r(dst, src, src2)) } +emit_stxvrbx_vs_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_stxvrbx_vs_r_r(dst, src, src2)) } inst_stxvrhx_vs_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .STXVRHX, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_stxvrhx_vs_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_stxvrhx_vs_r_r(dst, src, src2)) } +emit_stxvrhx_vs_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_stxvrhx_vs_r_r(dst, src, src2)) } inst_stxvrwx_vs_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .STXVRWX, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_stxvrwx_vs_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_stxvrwx_vs_r_r(dst, src, src2)) } +emit_stxvrwx_vs_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_stxvrwx_vs_r_r(dst, src, src2)) } inst_stxvrdx_vs_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .STXVRDX, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_stxvrdx_vs_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_stxvrdx_vs_r_r(dst, src, src2)) } +emit_stxvrdx_vs_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_stxvrdx_vs_r_r(dst, src, src2)) } inst_lxvkq_vs_imm :: #force_inline proc "contextless" (dst: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .LXVKQ, operand_count = 2, length = 4, ops = {op_reg(dst), op_imm(imm), {}, {}}} } -emit_lxvkq_vs_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64) { append(instructions, inst_lxvkq_vs_imm(dst, imm)) } +emit_lxvkq_vs_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64) { append_elem(instructions, inst_lxvkq_vs_imm(dst, imm)) } inst_xsmaxcqp_v_v_v :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .XSMAXCQP, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_xsmaxcqp_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_xsmaxcqp_v_v_v(dst, src, src2)) } +emit_xsmaxcqp_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_xsmaxcqp_v_v_v(dst, src, src2)) } inst_xsmincqp_v_v_v :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .XSMINCQP, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_xsmincqp_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_xsmincqp_v_v_v(dst, src, src2)) } +emit_xsmincqp_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_xsmincqp_v_v_v(dst, src, src2)) } inst_vrlq_v_v_v :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VRLQ, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_vrlq_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vrlq_v_v_v(dst, src, src2)) } +emit_vrlq_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vrlq_v_v_v(dst, src, src2)) } inst_vrlqmi_v_v_v :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VRLQMI, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_vrlqmi_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vrlqmi_v_v_v(dst, src, src2)) } +emit_vrlqmi_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vrlqmi_v_v_v(dst, src, src2)) } inst_vrlqnm_v_v_v :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VRLQNM, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_vrlqnm_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vrlqnm_v_v_v(dst, src, src2)) } +emit_vrlqnm_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vrlqnm_v_v_v(dst, src, src2)) } inst_vslq_v_v_v :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VSLQ, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_vslq_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vslq_v_v_v(dst, src, src2)) } +emit_vslq_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vslq_v_v_v(dst, src, src2)) } inst_vsrq_v_v_v :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VSRQ, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_vsrq_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vsrq_v_v_v(dst, src, src2)) } +emit_vsrq_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vsrq_v_v_v(dst, src, src2)) } inst_vsraq_v_v_v :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VSRAQ, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_vsraq_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vsraq_v_v_v(dst, src, src2)) } +emit_vsraq_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vsraq_v_v_v(dst, src, src2)) } inst_vmulesd_v_v_v :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VMULESD, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_vmulesd_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vmulesd_v_v_v(dst, src, src2)) } +emit_vmulesd_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vmulesd_v_v_v(dst, src, src2)) } inst_vmuleud_v_v_v :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VMULEUD, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_vmuleud_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vmuleud_v_v_v(dst, src, src2)) } +emit_vmuleud_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vmuleud_v_v_v(dst, src, src2)) } inst_vmulosd_v_v_v :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VMULOSD, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_vmulosd_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vmulosd_v_v_v(dst, src, src2)) } +emit_vmulosd_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vmulosd_v_v_v(dst, src, src2)) } inst_vmuloud_v_v_v :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VMULOUD, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_vmuloud_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vmuloud_v_v_v(dst, src, src2)) } +emit_vmuloud_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vmuloud_v_v_v(dst, src, src2)) } inst_vmulld_v_v_v :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VMULLD, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_vmulld_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vmulld_v_v_v(dst, src, src2)) } +emit_vmulld_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vmulld_v_v_v(dst, src, src2)) } inst_vmulhsw_v_v_v :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VMULHSW, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_vmulhsw_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vmulhsw_v_v_v(dst, src, src2)) } +emit_vmulhsw_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vmulhsw_v_v_v(dst, src, src2)) } inst_vmulhsd_v_v_v :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VMULHSD, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_vmulhsd_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vmulhsd_v_v_v(dst, src, src2)) } +emit_vmulhsd_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vmulhsd_v_v_v(dst, src, src2)) } inst_vmulhuw_v_v_v :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VMULHUW, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_vmulhuw_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vmulhuw_v_v_v(dst, src, src2)) } +emit_vmulhuw_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vmulhuw_v_v_v(dst, src, src2)) } inst_vmulhud_v_v_v :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VMULHUD, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_vmulhud_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vmulhud_v_v_v(dst, src, src2)) } +emit_vmulhud_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vmulhud_v_v_v(dst, src, src2)) } inst_vdivsw_v_v_v :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VDIVSW, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_vdivsw_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vdivsw_v_v_v(dst, src, src2)) } +emit_vdivsw_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vdivsw_v_v_v(dst, src, src2)) } inst_vdivuw_v_v_v :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VDIVUW, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_vdivuw_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vdivuw_v_v_v(dst, src, src2)) } +emit_vdivuw_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vdivuw_v_v_v(dst, src, src2)) } inst_vdivsd_v_v_v :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VDIVSD, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_vdivsd_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vdivsd_v_v_v(dst, src, src2)) } +emit_vdivsd_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vdivsd_v_v_v(dst, src, src2)) } inst_vdivud_v_v_v :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VDIVUD, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_vdivud_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vdivud_v_v_v(dst, src, src2)) } +emit_vdivud_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vdivud_v_v_v(dst, src, src2)) } inst_vdivsq_v_v_v :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VDIVSQ, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_vdivsq_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vdivsq_v_v_v(dst, src, src2)) } +emit_vdivsq_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vdivsq_v_v_v(dst, src, src2)) } inst_vdivuq_v_v_v :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VDIVUQ, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_vdivuq_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vdivuq_v_v_v(dst, src, src2)) } +emit_vdivuq_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vdivuq_v_v_v(dst, src, src2)) } inst_vdivesw_v_v_v :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VDIVESW, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_vdivesw_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vdivesw_v_v_v(dst, src, src2)) } +emit_vdivesw_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vdivesw_v_v_v(dst, src, src2)) } inst_vdiveuw_v_v_v :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VDIVEUW, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_vdiveuw_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vdiveuw_v_v_v(dst, src, src2)) } +emit_vdiveuw_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vdiveuw_v_v_v(dst, src, src2)) } inst_vdivesd_v_v_v :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VDIVESD, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_vdivesd_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vdivesd_v_v_v(dst, src, src2)) } +emit_vdivesd_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vdivesd_v_v_v(dst, src, src2)) } inst_vdiveud_v_v_v :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VDIVEUD, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_vdiveud_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vdiveud_v_v_v(dst, src, src2)) } +emit_vdiveud_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vdiveud_v_v_v(dst, src, src2)) } inst_vdivesq_v_v_v :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VDIVESQ, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_vdivesq_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vdivesq_v_v_v(dst, src, src2)) } +emit_vdivesq_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vdivesq_v_v_v(dst, src, src2)) } inst_vdiveuq_v_v_v :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VDIVEUQ, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_vdiveuq_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vdiveuq_v_v_v(dst, src, src2)) } +emit_vdiveuq_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vdiveuq_v_v_v(dst, src, src2)) } inst_vmodsw_v_v_v :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VMODSW, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_vmodsw_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vmodsw_v_v_v(dst, src, src2)) } +emit_vmodsw_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vmodsw_v_v_v(dst, src, src2)) } inst_vmoduw_v_v_v :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VMODUW, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_vmoduw_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vmoduw_v_v_v(dst, src, src2)) } +emit_vmoduw_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vmoduw_v_v_v(dst, src, src2)) } inst_vmodsd_v_v_v :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VMODSD, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_vmodsd_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vmodsd_v_v_v(dst, src, src2)) } +emit_vmodsd_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vmodsd_v_v_v(dst, src, src2)) } inst_vmodud_v_v_v :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VMODUD, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_vmodud_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vmodud_v_v_v(dst, src, src2)) } +emit_vmodud_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vmodud_v_v_v(dst, src, src2)) } inst_vmodsq_v_v_v :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VMODSQ, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_vmodsq_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vmodsq_v_v_v(dst, src, src2)) } +emit_vmodsq_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vmodsq_v_v_v(dst, src, src2)) } inst_vmoduq_v_v_v :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VMODUQ, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_vmoduq_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vmoduq_v_v_v(dst, src, src2)) } +emit_vmoduq_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vmoduq_v_v_v(dst, src, src2)) } inst_setb_r_crf :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .SETB, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_setb_r_crf :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_setb_r_crf(dst, src)) } +emit_setb_r_crf :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_setb_r_crf(dst, src)) } inst_mcrxrx_crf :: #force_inline proc "contextless" (dst: Register) -> Instruction { return Instruction{mnemonic = .MCRXRX, operand_count = 1, length = 4, ops = {op_reg(dst), {}, {}, {}}} } -emit_mcrxrx_crf :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register) { append(instructions, inst_mcrxrx_crf(dst)) } +emit_mcrxrx_crf :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register) { append_elem(instructions, inst_mcrxrx_crf(dst)) } inst_xvcvbf16spn_vs_vs :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .XVCVBF16SPN, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_xvcvbf16spn_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_xvcvbf16spn_vs_vs(dst, src)) } +emit_xvcvbf16spn_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_xvcvbf16spn_vs_vs(dst, src)) } inst_xvcvspbf16_vs_vs :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .XVCVSPBF16, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_xvcvspbf16_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_xvcvspbf16_vs_vs(dst, src)) } +emit_xvcvspbf16_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_xvcvspbf16_vs_vs(dst, src)) } inst_xxgenpcvbm_vs_v_imm :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .XXGENPCVBM, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_imm(imm), {}}} } -emit_xxgenpcvbm_vs_v_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_xxgenpcvbm_vs_v_imm(dst, src, imm)) } +emit_xxgenpcvbm_vs_v_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_xxgenpcvbm_vs_v_imm(dst, src, imm)) } inst_xxgenpcvhm_vs_v_imm :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .XXGENPCVHM, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_imm(imm), {}}} } -emit_xxgenpcvhm_vs_v_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_xxgenpcvhm_vs_v_imm(dst, src, imm)) } +emit_xxgenpcvhm_vs_v_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_xxgenpcvhm_vs_v_imm(dst, src, imm)) } inst_xxgenpcvwm_vs_v_imm :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .XXGENPCVWM, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_imm(imm), {}}} } -emit_xxgenpcvwm_vs_v_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_xxgenpcvwm_vs_v_imm(dst, src, imm)) } +emit_xxgenpcvwm_vs_v_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_xxgenpcvwm_vs_v_imm(dst, src, imm)) } inst_xxgenpcvdm_vs_v_imm :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .XXGENPCVDM, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_imm(imm), {}}} } -emit_xxgenpcvdm_vs_v_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_xxgenpcvdm_vs_v_imm(dst, src, imm)) } +emit_xxgenpcvdm_vs_v_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_xxgenpcvdm_vs_v_imm(dst, src, imm)) } inst_xxblendvb_vs_vs_vs_vs :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register, src3: Register) -> Instruction { return Instruction{mnemonic = .XXBLENDVB, operand_count = 4, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), op_reg(src3)}} } -emit_xxblendvb_vs_vs_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, src3: Register) { append(instructions, inst_xxblendvb_vs_vs_vs_vs(dst, src, src2, src3)) } +emit_xxblendvb_vs_vs_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, src3: Register) { append_elem(instructions, inst_xxblendvb_vs_vs_vs_vs(dst, src, src2, src3)) } inst_xxblendvh_vs_vs_vs_vs :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register, src3: Register) -> Instruction { return Instruction{mnemonic = .XXBLENDVH, operand_count = 4, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), op_reg(src3)}} } -emit_xxblendvh_vs_vs_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, src3: Register) { append(instructions, inst_xxblendvh_vs_vs_vs_vs(dst, src, src2, src3)) } +emit_xxblendvh_vs_vs_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, src3: Register) { append_elem(instructions, inst_xxblendvh_vs_vs_vs_vs(dst, src, src2, src3)) } inst_xxblendvw_vs_vs_vs_vs :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register, src3: Register) -> Instruction { return Instruction{mnemonic = .XXBLENDVW, operand_count = 4, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), op_reg(src3)}} } -emit_xxblendvw_vs_vs_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, src3: Register) { append(instructions, inst_xxblendvw_vs_vs_vs_vs(dst, src, src2, src3)) } +emit_xxblendvw_vs_vs_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, src3: Register) { append_elem(instructions, inst_xxblendvw_vs_vs_vs_vs(dst, src, src2, src3)) } inst_xxblendvd_vs_vs_vs_vs :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register, src3: Register) -> Instruction { return Instruction{mnemonic = .XXBLENDVD, operand_count = 4, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), op_reg(src3)}} } -emit_xxblendvd_vs_vs_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, src3: Register) { append(instructions, inst_xxblendvd_vs_vs_vs_vs(dst, src, src2, src3)) } +emit_xxblendvd_vs_vs_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, src3: Register) { append_elem(instructions, inst_xxblendvd_vs_vs_vs_vs(dst, src, src2, src3)) } inst_xxpermx_vs_vs_vs_vs :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register, src3: Register) -> Instruction { return Instruction{mnemonic = .XXPERMX, operand_count = 4, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), op_reg(src3)}} } -emit_xxpermx_vs_vs_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, src3: Register) { append(instructions, inst_xxpermx_vs_vs_vs_vs(dst, src, src2, src3)) } +emit_xxpermx_vs_vs_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, src3: Register) { append_elem(instructions, inst_xxpermx_vs_vs_vs_vs(dst, src, src2, src3)) } inst_xxeval_vs_vs_vs_vs :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register, src3: Register) -> Instruction { return Instruction{mnemonic = .XXEVAL, operand_count = 4, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), op_reg(src3)}} } -emit_xxeval_vs_vs_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, src3: Register) { append(instructions, inst_xxeval_vs_vs_vs_vs(dst, src, src2, src3)) } +emit_xxeval_vs_vs_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, src3: Register) { append_elem(instructions, inst_xxeval_vs_vs_vs_vs(dst, src, src2, src3)) } inst_xxperm_vs_vs_vs :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .XXPERM, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_xxperm_vs_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_xxperm_vs_vs_vs(dst, src, src2)) } +emit_xxperm_vs_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_xxperm_vs_vs_vs(dst, src, src2)) } inst_pld_r_mem :: #force_inline proc "contextless" (dst: Register, addr: Memory) -> Instruction { return Instruction{mnemonic = .PLD, operand_count = 2, length = 4, ops = {op_reg(dst), op_mem(addr), {}, {}}} } -emit_pld_r_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append(instructions, inst_pld_r_mem(dst, addr)) } +emit_pld_r_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append_elem(instructions, inst_pld_r_mem(dst, addr)) } inst_pstd_r_mem :: #force_inline proc "contextless" (dst: Register, addr: Memory) -> Instruction { return Instruction{mnemonic = .PSTD, operand_count = 2, length = 4, ops = {op_reg(dst), op_mem(addr), {}, {}}} } -emit_pstd_r_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append(instructions, inst_pstd_r_mem(dst, addr)) } +emit_pstd_r_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append_elem(instructions, inst_pstd_r_mem(dst, addr)) } inst_plwz_r_mem :: #force_inline proc "contextless" (dst: Register, addr: Memory) -> Instruction { return Instruction{mnemonic = .PLWZ, operand_count = 2, length = 4, ops = {op_reg(dst), op_mem(addr), {}, {}}} } -emit_plwz_r_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append(instructions, inst_plwz_r_mem(dst, addr)) } +emit_plwz_r_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append_elem(instructions, inst_plwz_r_mem(dst, addr)) } inst_pstw_r_mem :: #force_inline proc "contextless" (dst: Register, addr: Memory) -> Instruction { return Instruction{mnemonic = .PSTW, operand_count = 2, length = 4, ops = {op_reg(dst), op_mem(addr), {}, {}}} } -emit_pstw_r_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append(instructions, inst_pstw_r_mem(dst, addr)) } +emit_pstw_r_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append_elem(instructions, inst_pstw_r_mem(dst, addr)) } inst_plbz_r_mem :: #force_inline proc "contextless" (dst: Register, addr: Memory) -> Instruction { return Instruction{mnemonic = .PLBZ, operand_count = 2, length = 4, ops = {op_reg(dst), op_mem(addr), {}, {}}} } -emit_plbz_r_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append(instructions, inst_plbz_r_mem(dst, addr)) } +emit_plbz_r_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append_elem(instructions, inst_plbz_r_mem(dst, addr)) } inst_pstb_r_mem :: #force_inline proc "contextless" (dst: Register, addr: Memory) -> Instruction { return Instruction{mnemonic = .PSTB, operand_count = 2, length = 4, ops = {op_reg(dst), op_mem(addr), {}, {}}} } -emit_pstb_r_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append(instructions, inst_pstb_r_mem(dst, addr)) } +emit_pstb_r_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append_elem(instructions, inst_pstb_r_mem(dst, addr)) } inst_plhz_r_mem :: #force_inline proc "contextless" (dst: Register, addr: Memory) -> Instruction { return Instruction{mnemonic = .PLHZ, operand_count = 2, length = 4, ops = {op_reg(dst), op_mem(addr), {}, {}}} } -emit_plhz_r_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append(instructions, inst_plhz_r_mem(dst, addr)) } +emit_plhz_r_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append_elem(instructions, inst_plhz_r_mem(dst, addr)) } inst_psth_r_mem :: #force_inline proc "contextless" (dst: Register, addr: Memory) -> Instruction { return Instruction{mnemonic = .PSTH, operand_count = 2, length = 4, ops = {op_reg(dst), op_mem(addr), {}, {}}} } -emit_psth_r_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append(instructions, inst_psth_r_mem(dst, addr)) } +emit_psth_r_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append_elem(instructions, inst_psth_r_mem(dst, addr)) } inst_plha_r_mem :: #force_inline proc "contextless" (dst: Register, addr: Memory) -> Instruction { return Instruction{mnemonic = .PLHA, operand_count = 2, length = 4, ops = {op_reg(dst), op_mem(addr), {}, {}}} } -emit_plha_r_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append(instructions, inst_plha_r_mem(dst, addr)) } +emit_plha_r_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append_elem(instructions, inst_plha_r_mem(dst, addr)) } inst_plwa_r_mem :: #force_inline proc "contextless" (dst: Register, addr: Memory) -> Instruction { return Instruction{mnemonic = .PLWA, operand_count = 2, length = 4, ops = {op_reg(dst), op_mem(addr), {}, {}}} } -emit_plwa_r_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append(instructions, inst_plwa_r_mem(dst, addr)) } +emit_plwa_r_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append_elem(instructions, inst_plwa_r_mem(dst, addr)) } inst_plfd_fr_mem :: #force_inline proc "contextless" (dst: Register, addr: Memory) -> Instruction { return Instruction{mnemonic = .PLFD, operand_count = 2, length = 4, ops = {op_reg(dst), op_mem(addr), {}, {}}} } -emit_plfd_fr_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append(instructions, inst_plfd_fr_mem(dst, addr)) } +emit_plfd_fr_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append_elem(instructions, inst_plfd_fr_mem(dst, addr)) } inst_pstfd_fr_mem :: #force_inline proc "contextless" (dst: Register, addr: Memory) -> Instruction { return Instruction{mnemonic = .PSTFD, operand_count = 2, length = 4, ops = {op_reg(dst), op_mem(addr), {}, {}}} } -emit_pstfd_fr_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append(instructions, inst_pstfd_fr_mem(dst, addr)) } +emit_pstfd_fr_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append_elem(instructions, inst_pstfd_fr_mem(dst, addr)) } inst_plfs_fr_mem :: #force_inline proc "contextless" (dst: Register, addr: Memory) -> Instruction { return Instruction{mnemonic = .PLFS, operand_count = 2, length = 4, ops = {op_reg(dst), op_mem(addr), {}, {}}} } -emit_plfs_fr_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append(instructions, inst_plfs_fr_mem(dst, addr)) } +emit_plfs_fr_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append_elem(instructions, inst_plfs_fr_mem(dst, addr)) } inst_pstfs_fr_mem :: #force_inline proc "contextless" (dst: Register, addr: Memory) -> Instruction { return Instruction{mnemonic = .PSTFS, operand_count = 2, length = 4, ops = {op_reg(dst), op_mem(addr), {}, {}}} } -emit_pstfs_fr_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append(instructions, inst_pstfs_fr_mem(dst, addr)) } +emit_pstfs_fr_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append_elem(instructions, inst_pstfs_fr_mem(dst, addr)) } inst_plxv_vs_mem :: #force_inline proc "contextless" (dst: Register, addr: Memory) -> Instruction { return Instruction{mnemonic = .PLXV, operand_count = 2, length = 4, ops = {op_reg(dst), op_mem(addr), {}, {}}} } -emit_plxv_vs_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append(instructions, inst_plxv_vs_mem(dst, addr)) } +emit_plxv_vs_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append_elem(instructions, inst_plxv_vs_mem(dst, addr)) } inst_pstxv_vs_mem :: #force_inline proc "contextless" (dst: Register, addr: Memory) -> Instruction { return Instruction{mnemonic = .PSTXV, operand_count = 2, length = 4, ops = {op_reg(dst), op_mem(addr), {}, {}}} } -emit_pstxv_vs_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append(instructions, inst_pstxv_vs_mem(dst, addr)) } +emit_pstxv_vs_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append_elem(instructions, inst_pstxv_vs_mem(dst, addr)) } inst_plxsd_v_mem :: #force_inline proc "contextless" (dst: Register, addr: Memory) -> Instruction { return Instruction{mnemonic = .PLXSD, operand_count = 2, length = 4, ops = {op_reg(dst), op_mem(addr), {}, {}}} } -emit_plxsd_v_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append(instructions, inst_plxsd_v_mem(dst, addr)) } +emit_plxsd_v_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append_elem(instructions, inst_plxsd_v_mem(dst, addr)) } inst_pstxsd_v_mem :: #force_inline proc "contextless" (dst: Register, addr: Memory) -> Instruction { return Instruction{mnemonic = .PSTXSD, operand_count = 2, length = 4, ops = {op_reg(dst), op_mem(addr), {}, {}}} } -emit_pstxsd_v_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append(instructions, inst_pstxsd_v_mem(dst, addr)) } +emit_pstxsd_v_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append_elem(instructions, inst_pstxsd_v_mem(dst, addr)) } inst_plxssp_v_mem :: #force_inline proc "contextless" (dst: Register, addr: Memory) -> Instruction { return Instruction{mnemonic = .PLXSSP, operand_count = 2, length = 4, ops = {op_reg(dst), op_mem(addr), {}, {}}} } -emit_plxssp_v_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append(instructions, inst_plxssp_v_mem(dst, addr)) } +emit_plxssp_v_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append_elem(instructions, inst_plxssp_v_mem(dst, addr)) } inst_pstxssp_v_mem :: #force_inline proc "contextless" (dst: Register, addr: Memory) -> Instruction { return Instruction{mnemonic = .PSTXSSP, operand_count = 2, length = 4, ops = {op_reg(dst), op_mem(addr), {}, {}}} } -emit_pstxssp_v_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append(instructions, inst_pstxssp_v_mem(dst, addr)) } +emit_pstxssp_v_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append_elem(instructions, inst_pstxssp_v_mem(dst, addr)) } inst_paddi_r_rz_simm :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .PADDI, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_imm(imm), {}}} } -emit_paddi_r_rz_simm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_paddi_r_rz_simm(dst, src, imm)) } +emit_paddi_r_rz_simm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_paddi_r_rz_simm(dst, src, imm)) } inst_pli_r_simm :: #force_inline proc "contextless" (dst: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .PLI, operand_count = 2, length = 4, ops = {op_reg(dst), op_imm(imm), {}, {}}} } -emit_pli_r_simm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64) { append(instructions, inst_pli_r_simm(dst, imm)) } +emit_pli_r_simm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64) { append_elem(instructions, inst_pli_r_simm(dst, imm)) } inst_psubi_r_r_simm :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .PSUBI, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_imm(imm), {}}} } -emit_psubi_r_r_simm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_psubi_r_r_simm(dst, src, imm)) } +emit_psubi_r_r_simm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_psubi_r_r_simm(dst, src, imm)) } inst_pmxvf32ger_imm_vs_vs :: #force_inline proc "contextless" (imm: i64, dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .PMXVF32GER, operand_count = 3, length = 4, ops = {op_imm(imm), op_reg(dst), op_reg(src), {}}} } -emit_pmxvf32ger_imm_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, dst: Register, src: Register) { append(instructions, inst_pmxvf32ger_imm_vs_vs(imm, dst, src)) } +emit_pmxvf32ger_imm_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, dst: Register, src: Register) { append_elem(instructions, inst_pmxvf32ger_imm_vs_vs(imm, dst, src)) } inst_pmxvf64ger_imm_vs_vs :: #force_inline proc "contextless" (imm: i64, dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .PMXVF64GER, operand_count = 3, length = 4, ops = {op_imm(imm), op_reg(dst), op_reg(src), {}}} } -emit_pmxvf64ger_imm_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, dst: Register, src: Register) { append(instructions, inst_pmxvf64ger_imm_vs_vs(imm, dst, src)) } +emit_pmxvf64ger_imm_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, dst: Register, src: Register) { append_elem(instructions, inst_pmxvf64ger_imm_vs_vs(imm, dst, src)) } inst_pmxvi4ger8_imm_vs_vs :: #force_inline proc "contextless" (imm: i64, dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .PMXVI4GER8, operand_count = 3, length = 4, ops = {op_imm(imm), op_reg(dst), op_reg(src), {}}} } -emit_pmxvi4ger8_imm_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, dst: Register, src: Register) { append(instructions, inst_pmxvi4ger8_imm_vs_vs(imm, dst, src)) } +emit_pmxvi4ger8_imm_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, dst: Register, src: Register) { append_elem(instructions, inst_pmxvi4ger8_imm_vs_vs(imm, dst, src)) } inst_pmxvi8ger4_imm_vs_vs :: #force_inline proc "contextless" (imm: i64, dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .PMXVI8GER4, operand_count = 3, length = 4, ops = {op_imm(imm), op_reg(dst), op_reg(src), {}}} } -emit_pmxvi8ger4_imm_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, dst: Register, src: Register) { append(instructions, inst_pmxvi8ger4_imm_vs_vs(imm, dst, src)) } +emit_pmxvi8ger4_imm_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, dst: Register, src: Register) { append_elem(instructions, inst_pmxvi8ger4_imm_vs_vs(imm, dst, src)) } inst_pmxvi16ger2_imm_vs_vs :: #force_inline proc "contextless" (imm: i64, dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .PMXVI16GER2, operand_count = 3, length = 4, ops = {op_imm(imm), op_reg(dst), op_reg(src), {}}} } -emit_pmxvi16ger2_imm_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, dst: Register, src: Register) { append(instructions, inst_pmxvi16ger2_imm_vs_vs(imm, dst, src)) } +emit_pmxvi16ger2_imm_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, dst: Register, src: Register) { append_elem(instructions, inst_pmxvi16ger2_imm_vs_vs(imm, dst, src)) } inst_pmxvf16ger2_imm_vs_vs :: #force_inline proc "contextless" (imm: i64, dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .PMXVF16GER2, operand_count = 3, length = 4, ops = {op_imm(imm), op_reg(dst), op_reg(src), {}}} } -emit_pmxvf16ger2_imm_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, dst: Register, src: Register) { append(instructions, inst_pmxvf16ger2_imm_vs_vs(imm, dst, src)) } +emit_pmxvf16ger2_imm_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, dst: Register, src: Register) { append_elem(instructions, inst_pmxvf16ger2_imm_vs_vs(imm, dst, src)) } inst_pmxvf16ger2pp_imm_vs_vs :: #force_inline proc "contextless" (imm: i64, dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .PMXVF16GER2PP, operand_count = 3, length = 4, ops = {op_imm(imm), op_reg(dst), op_reg(src), {}}} } -emit_pmxvf16ger2pp_imm_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, dst: Register, src: Register) { append(instructions, inst_pmxvf16ger2pp_imm_vs_vs(imm, dst, src)) } +emit_pmxvf16ger2pp_imm_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, dst: Register, src: Register) { append_elem(instructions, inst_pmxvf16ger2pp_imm_vs_vs(imm, dst, src)) } inst_pmxvf16ger2pn_imm_vs_vs :: #force_inline proc "contextless" (imm: i64, dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .PMXVF16GER2PN, operand_count = 3, length = 4, ops = {op_imm(imm), op_reg(dst), op_reg(src), {}}} } -emit_pmxvf16ger2pn_imm_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, dst: Register, src: Register) { append(instructions, inst_pmxvf16ger2pn_imm_vs_vs(imm, dst, src)) } +emit_pmxvf16ger2pn_imm_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, dst: Register, src: Register) { append_elem(instructions, inst_pmxvf16ger2pn_imm_vs_vs(imm, dst, src)) } inst_pmxvf16ger2np_imm_vs_vs :: #force_inline proc "contextless" (imm: i64, dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .PMXVF16GER2NP, operand_count = 3, length = 4, ops = {op_imm(imm), op_reg(dst), op_reg(src), {}}} } -emit_pmxvf16ger2np_imm_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, dst: Register, src: Register) { append(instructions, inst_pmxvf16ger2np_imm_vs_vs(imm, dst, src)) } +emit_pmxvf16ger2np_imm_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, dst: Register, src: Register) { append_elem(instructions, inst_pmxvf16ger2np_imm_vs_vs(imm, dst, src)) } inst_pmxvf16ger2nn_imm_vs_vs :: #force_inline proc "contextless" (imm: i64, dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .PMXVF16GER2NN, operand_count = 3, length = 4, ops = {op_imm(imm), op_reg(dst), op_reg(src), {}}} } -emit_pmxvf16ger2nn_imm_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, dst: Register, src: Register) { append(instructions, inst_pmxvf16ger2nn_imm_vs_vs(imm, dst, src)) } +emit_pmxvf16ger2nn_imm_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, dst: Register, src: Register) { append_elem(instructions, inst_pmxvf16ger2nn_imm_vs_vs(imm, dst, src)) } inst_pmxvf32gerpp_imm_vs_vs :: #force_inline proc "contextless" (imm: i64, dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .PMXVF32GERPP, operand_count = 3, length = 4, ops = {op_imm(imm), op_reg(dst), op_reg(src), {}}} } -emit_pmxvf32gerpp_imm_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, dst: Register, src: Register) { append(instructions, inst_pmxvf32gerpp_imm_vs_vs(imm, dst, src)) } +emit_pmxvf32gerpp_imm_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, dst: Register, src: Register) { append_elem(instructions, inst_pmxvf32gerpp_imm_vs_vs(imm, dst, src)) } inst_pmxvf32gerpn_imm_vs_vs :: #force_inline proc "contextless" (imm: i64, dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .PMXVF32GERPN, operand_count = 3, length = 4, ops = {op_imm(imm), op_reg(dst), op_reg(src), {}}} } -emit_pmxvf32gerpn_imm_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, dst: Register, src: Register) { append(instructions, inst_pmxvf32gerpn_imm_vs_vs(imm, dst, src)) } +emit_pmxvf32gerpn_imm_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, dst: Register, src: Register) { append_elem(instructions, inst_pmxvf32gerpn_imm_vs_vs(imm, dst, src)) } inst_pmxvf32gernp_imm_vs_vs :: #force_inline proc "contextless" (imm: i64, dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .PMXVF32GERNP, operand_count = 3, length = 4, ops = {op_imm(imm), op_reg(dst), op_reg(src), {}}} } -emit_pmxvf32gernp_imm_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, dst: Register, src: Register) { append(instructions, inst_pmxvf32gernp_imm_vs_vs(imm, dst, src)) } +emit_pmxvf32gernp_imm_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, dst: Register, src: Register) { append_elem(instructions, inst_pmxvf32gernp_imm_vs_vs(imm, dst, src)) } inst_pmxvf32gernn_imm_vs_vs :: #force_inline proc "contextless" (imm: i64, dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .PMXVF32GERNN, operand_count = 3, length = 4, ops = {op_imm(imm), op_reg(dst), op_reg(src), {}}} } -emit_pmxvf32gernn_imm_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, dst: Register, src: Register) { append(instructions, inst_pmxvf32gernn_imm_vs_vs(imm, dst, src)) } +emit_pmxvf32gernn_imm_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, dst: Register, src: Register) { append_elem(instructions, inst_pmxvf32gernn_imm_vs_vs(imm, dst, src)) } inst_pmxvf64gerpp_imm_vs_vs :: #force_inline proc "contextless" (imm: i64, dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .PMXVF64GERPP, operand_count = 3, length = 4, ops = {op_imm(imm), op_reg(dst), op_reg(src), {}}} } -emit_pmxvf64gerpp_imm_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, dst: Register, src: Register) { append(instructions, inst_pmxvf64gerpp_imm_vs_vs(imm, dst, src)) } +emit_pmxvf64gerpp_imm_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, dst: Register, src: Register) { append_elem(instructions, inst_pmxvf64gerpp_imm_vs_vs(imm, dst, src)) } inst_pmxvf64gerpn_imm_vs_vs :: #force_inline proc "contextless" (imm: i64, dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .PMXVF64GERPN, operand_count = 3, length = 4, ops = {op_imm(imm), op_reg(dst), op_reg(src), {}}} } -emit_pmxvf64gerpn_imm_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, dst: Register, src: Register) { append(instructions, inst_pmxvf64gerpn_imm_vs_vs(imm, dst, src)) } +emit_pmxvf64gerpn_imm_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, dst: Register, src: Register) { append_elem(instructions, inst_pmxvf64gerpn_imm_vs_vs(imm, dst, src)) } inst_pmxvf64gernp_imm_vs_vs :: #force_inline proc "contextless" (imm: i64, dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .PMXVF64GERNP, operand_count = 3, length = 4, ops = {op_imm(imm), op_reg(dst), op_reg(src), {}}} } -emit_pmxvf64gernp_imm_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, dst: Register, src: Register) { append(instructions, inst_pmxvf64gernp_imm_vs_vs(imm, dst, src)) } +emit_pmxvf64gernp_imm_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, dst: Register, src: Register) { append_elem(instructions, inst_pmxvf64gernp_imm_vs_vs(imm, dst, src)) } inst_pmxvf64gernn_imm_vs_vs :: #force_inline proc "contextless" (imm: i64, dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .PMXVF64GERNN, operand_count = 3, length = 4, ops = {op_imm(imm), op_reg(dst), op_reg(src), {}}} } -emit_pmxvf64gernn_imm_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, dst: Register, src: Register) { append(instructions, inst_pmxvf64gernn_imm_vs_vs(imm, dst, src)) } +emit_pmxvf64gernn_imm_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, dst: Register, src: Register) { append_elem(instructions, inst_pmxvf64gernn_imm_vs_vs(imm, dst, src)) } inst_pmxvbf16ger2_imm_vs_vs :: #force_inline proc "contextless" (imm: i64, dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .PMXVBF16GER2, operand_count = 3, length = 4, ops = {op_imm(imm), op_reg(dst), op_reg(src), {}}} } -emit_pmxvbf16ger2_imm_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, dst: Register, src: Register) { append(instructions, inst_pmxvbf16ger2_imm_vs_vs(imm, dst, src)) } +emit_pmxvbf16ger2_imm_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, dst: Register, src: Register) { append_elem(instructions, inst_pmxvbf16ger2_imm_vs_vs(imm, dst, src)) } inst_pmxvbf16ger2pp_imm_vs_vs :: #force_inline proc "contextless" (imm: i64, dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .PMXVBF16GER2PP, operand_count = 3, length = 4, ops = {op_imm(imm), op_reg(dst), op_reg(src), {}}} } -emit_pmxvbf16ger2pp_imm_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, dst: Register, src: Register) { append(instructions, inst_pmxvbf16ger2pp_imm_vs_vs(imm, dst, src)) } +emit_pmxvbf16ger2pp_imm_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, dst: Register, src: Register) { append_elem(instructions, inst_pmxvbf16ger2pp_imm_vs_vs(imm, dst, src)) } inst_pmxvbf16ger2pn_imm_vs_vs :: #force_inline proc "contextless" (imm: i64, dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .PMXVBF16GER2PN, operand_count = 3, length = 4, ops = {op_imm(imm), op_reg(dst), op_reg(src), {}}} } -emit_pmxvbf16ger2pn_imm_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, dst: Register, src: Register) { append(instructions, inst_pmxvbf16ger2pn_imm_vs_vs(imm, dst, src)) } +emit_pmxvbf16ger2pn_imm_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, dst: Register, src: Register) { append_elem(instructions, inst_pmxvbf16ger2pn_imm_vs_vs(imm, dst, src)) } inst_pmxvbf16ger2np_imm_vs_vs :: #force_inline proc "contextless" (imm: i64, dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .PMXVBF16GER2NP, operand_count = 3, length = 4, ops = {op_imm(imm), op_reg(dst), op_reg(src), {}}} } -emit_pmxvbf16ger2np_imm_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, dst: Register, src: Register) { append(instructions, inst_pmxvbf16ger2np_imm_vs_vs(imm, dst, src)) } +emit_pmxvbf16ger2np_imm_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, dst: Register, src: Register) { append_elem(instructions, inst_pmxvbf16ger2np_imm_vs_vs(imm, dst, src)) } inst_pmxvbf16ger2nn_imm_vs_vs :: #force_inline proc "contextless" (imm: i64, dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .PMXVBF16GER2NN, operand_count = 3, length = 4, ops = {op_imm(imm), op_reg(dst), op_reg(src), {}}} } -emit_pmxvbf16ger2nn_imm_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, dst: Register, src: Register) { append(instructions, inst_pmxvbf16ger2nn_imm_vs_vs(imm, dst, src)) } +emit_pmxvbf16ger2nn_imm_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, dst: Register, src: Register) { append_elem(instructions, inst_pmxvbf16ger2nn_imm_vs_vs(imm, dst, src)) } inst_pmxvi4ger8pp_imm_vs_vs :: #force_inline proc "contextless" (imm: i64, dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .PMXVI4GER8PP, operand_count = 3, length = 4, ops = {op_imm(imm), op_reg(dst), op_reg(src), {}}} } -emit_pmxvi4ger8pp_imm_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, dst: Register, src: Register) { append(instructions, inst_pmxvi4ger8pp_imm_vs_vs(imm, dst, src)) } +emit_pmxvi4ger8pp_imm_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, dst: Register, src: Register) { append_elem(instructions, inst_pmxvi4ger8pp_imm_vs_vs(imm, dst, src)) } inst_pmxvi8ger4pp_imm_vs_vs :: #force_inline proc "contextless" (imm: i64, dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .PMXVI8GER4PP, operand_count = 3, length = 4, ops = {op_imm(imm), op_reg(dst), op_reg(src), {}}} } -emit_pmxvi8ger4pp_imm_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, dst: Register, src: Register) { append(instructions, inst_pmxvi8ger4pp_imm_vs_vs(imm, dst, src)) } +emit_pmxvi8ger4pp_imm_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, dst: Register, src: Register) { append_elem(instructions, inst_pmxvi8ger4pp_imm_vs_vs(imm, dst, src)) } inst_pmxvi8ger4spp_imm_vs_vs :: #force_inline proc "contextless" (imm: i64, dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .PMXVI8GER4SPP, operand_count = 3, length = 4, ops = {op_imm(imm), op_reg(dst), op_reg(src), {}}} } -emit_pmxvi8ger4spp_imm_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, dst: Register, src: Register) { append(instructions, inst_pmxvi8ger4spp_imm_vs_vs(imm, dst, src)) } +emit_pmxvi8ger4spp_imm_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, dst: Register, src: Register) { append_elem(instructions, inst_pmxvi8ger4spp_imm_vs_vs(imm, dst, src)) } inst_pmxvi16ger2pp_imm_vs_vs :: #force_inline proc "contextless" (imm: i64, dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .PMXVI16GER2PP, operand_count = 3, length = 4, ops = {op_imm(imm), op_reg(dst), op_reg(src), {}}} } -emit_pmxvi16ger2pp_imm_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, dst: Register, src: Register) { append(instructions, inst_pmxvi16ger2pp_imm_vs_vs(imm, dst, src)) } +emit_pmxvi16ger2pp_imm_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, dst: Register, src: Register) { append_elem(instructions, inst_pmxvi16ger2pp_imm_vs_vs(imm, dst, src)) } inst_pmxvi16ger2s_imm_vs_vs :: #force_inline proc "contextless" (imm: i64, dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .PMXVI16GER2S, operand_count = 3, length = 4, ops = {op_imm(imm), op_reg(dst), op_reg(src), {}}} } -emit_pmxvi16ger2s_imm_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, dst: Register, src: Register) { append(instructions, inst_pmxvi16ger2s_imm_vs_vs(imm, dst, src)) } +emit_pmxvi16ger2s_imm_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, dst: Register, src: Register) { append_elem(instructions, inst_pmxvi16ger2s_imm_vs_vs(imm, dst, src)) } inst_pmxvi16ger2spp_imm_vs_vs :: #force_inline proc "contextless" (imm: i64, dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .PMXVI16GER2SPP, operand_count = 3, length = 4, ops = {op_imm(imm), op_reg(dst), op_reg(src), {}}} } -emit_pmxvi16ger2spp_imm_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, dst: Register, src: Register) { append(instructions, inst_pmxvi16ger2spp_imm_vs_vs(imm, dst, src)) } +emit_pmxvi16ger2spp_imm_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, dst: Register, src: Register) { append_elem(instructions, inst_pmxvi16ger2spp_imm_vs_vs(imm, dst, src)) } inst_lxvp_vs_mem :: #force_inline proc "contextless" (dst: Register, addr: Memory) -> Instruction { return Instruction{mnemonic = .LXVP, operand_count = 2, length = 4, ops = {op_reg(dst), op_mem(addr), {}, {}}} } -emit_lxvp_vs_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append(instructions, inst_lxvp_vs_mem(dst, addr)) } +emit_lxvp_vs_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append_elem(instructions, inst_lxvp_vs_mem(dst, addr)) } inst_stxvp_vs_mem :: #force_inline proc "contextless" (dst: Register, addr: Memory) -> Instruction { return Instruction{mnemonic = .STXVP, operand_count = 2, length = 4, ops = {op_reg(dst), op_mem(addr), {}, {}}} } -emit_stxvp_vs_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append(instructions, inst_stxvp_vs_mem(dst, addr)) } +emit_stxvp_vs_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append_elem(instructions, inst_stxvp_vs_mem(dst, addr)) } inst_lxvpx_vs_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .LXVPX, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_lxvpx_vs_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_lxvpx_vs_r_r(dst, src, src2)) } +emit_lxvpx_vs_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_lxvpx_vs_r_r(dst, src, src2)) } inst_stxvpx_vs_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .STXVPX, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_stxvpx_vs_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_stxvpx_vs_r_r(dst, src, src2)) } +emit_stxvpx_vs_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_stxvpx_vs_r_r(dst, src, src2)) } inst_dcbi_r_r :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .DCBI, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_dcbi_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_dcbi_r_r(dst, src)) } +emit_dcbi_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_dcbi_r_r(dst, src)) } inst_icbiep_r_r :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .ICBIEP, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_icbiep_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_icbiep_r_r(dst, src)) } +emit_icbiep_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_icbiep_r_r(dst, src)) } inst_dcbtep_imm_r_r :: #force_inline proc "contextless" (imm: i64, dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .DCBTEP, operand_count = 3, length = 4, ops = {op_imm(imm), op_reg(dst), op_reg(src), {}}} } -emit_dcbtep_imm_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, dst: Register, src: Register) { append(instructions, inst_dcbtep_imm_r_r(imm, dst, src)) } +emit_dcbtep_imm_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, dst: Register, src: Register) { append_elem(instructions, inst_dcbtep_imm_r_r(imm, dst, src)) } inst_dcbtstep_imm_r_r :: #force_inline proc "contextless" (imm: i64, dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .DCBTSTEP, operand_count = 3, length = 4, ops = {op_imm(imm), op_reg(dst), op_reg(src), {}}} } -emit_dcbtstep_imm_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, dst: Register, src: Register) { append(instructions, inst_dcbtstep_imm_r_r(imm, dst, src)) } +emit_dcbtstep_imm_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, dst: Register, src: Register) { append_elem(instructions, inst_dcbtstep_imm_r_r(imm, dst, src)) } inst_lbepx_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .LBEPX, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_lbepx_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_lbepx_r_r_r(dst, src, src2)) } +emit_lbepx_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_lbepx_r_r_r(dst, src, src2)) } inst_lhepx_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .LHEPX, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_lhepx_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_lhepx_r_r_r(dst, src, src2)) } +emit_lhepx_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_lhepx_r_r_r(dst, src, src2)) } inst_lwepx_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .LWEPX, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_lwepx_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_lwepx_r_r_r(dst, src, src2)) } +emit_lwepx_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_lwepx_r_r_r(dst, src, src2)) } inst_stbepx_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .STBEPX, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_stbepx_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_stbepx_r_r_r(dst, src, src2)) } +emit_stbepx_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_stbepx_r_r_r(dst, src, src2)) } inst_sthepx_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .STHEPX, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_sthepx_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_sthepx_r_r_r(dst, src, src2)) } +emit_sthepx_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_sthepx_r_r_r(dst, src, src2)) } inst_stwepx_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .STWEPX, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_stwepx_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_stwepx_r_r_r(dst, src, src2)) } +emit_stwepx_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_stwepx_r_r_r(dst, src, src2)) } inst_lfdepx_fr_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .LFDEPX, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_lfdepx_fr_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_lfdepx_fr_r_r(dst, src, src2)) } +emit_lfdepx_fr_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_lfdepx_fr_r_r(dst, src, src2)) } inst_stfdepx_fr_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .STFDEPX, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_stfdepx_fr_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_stfdepx_fr_r_r(dst, src, src2)) } +emit_stfdepx_fr_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_stfdepx_fr_r_r(dst, src, src2)) } inst_tlbsx_r_r :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .TLBSX, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_tlbsx_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_tlbsx_r_r(dst, src)) } +emit_tlbsx_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_tlbsx_r_r(dst, src)) } inst_dccci_r_r :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .DCCCI, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_dccci_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_dccci_r_r(dst, src)) } +emit_dccci_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_dccci_r_r(dst, src)) } inst_iccci_r_r :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .ICCCI, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_iccci_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_iccci_r_r(dst, src)) } +emit_iccci_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_iccci_r_r(dst, src)) } inst_wrtee_r :: #force_inline proc "contextless" (dst: Register) -> Instruction { return Instruction{mnemonic = .WRTEE, operand_count = 1, length = 4, ops = {op_reg(dst), {}, {}, {}}} } -emit_wrtee_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register) { append(instructions, inst_wrtee_r(dst)) } +emit_wrtee_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register) { append_elem(instructions, inst_wrtee_r(dst)) } inst_wrteei_imm :: #force_inline proc "contextless" (imm: i64) -> Instruction { return Instruction{mnemonic = .WRTEEI, operand_count = 1, length = 4, ops = {op_imm(imm), {}, {}, {}}} } -emit_wrteei_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64) { append(instructions, inst_wrteei_imm(imm)) } +emit_wrteei_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64) { append_elem(instructions, inst_wrteei_imm(imm)) } inst_tlbre_none :: #force_inline proc "contextless" () -> Instruction { return Instruction{mnemonic = .TLBRE, operand_count = 0, length = 4, ops = {{}, {}, {}, {}}} } -emit_tlbre_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_tlbre_none()) } +emit_tlbre_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_tlbre_none()) } inst_tlbwe_none :: #force_inline proc "contextless" () -> Instruction { return Instruction{mnemonic = .TLBWE, operand_count = 0, length = 4, ops = {{}, {}, {}, {}}} } -emit_tlbwe_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_tlbwe_none()) } +emit_tlbwe_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_tlbwe_none()) } inst_tlbivax_r_r :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .TLBIVAX, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_tlbivax_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_tlbivax_r_r(dst, src)) } +emit_tlbivax_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_tlbivax_r_r(dst, src)) } inst_tlbilx_imm_r_r :: #force_inline proc "contextless" (imm: i64, dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .TLBILX, operand_count = 3, length = 4, ops = {op_imm(imm), op_reg(dst), op_reg(src), {}}} } -emit_tlbilx_imm_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, dst: Register, src: Register) { append(instructions, inst_tlbilx_imm_r_r(imm, dst, src)) } +emit_tlbilx_imm_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, dst: Register, src: Register) { append_elem(instructions, inst_tlbilx_imm_r_r(imm, dst, src)) } inst_tlbld_r :: #force_inline proc "contextless" (dst: Register) -> Instruction { return Instruction{mnemonic = .TLBLD, operand_count = 1, length = 4, ops = {op_reg(dst), {}, {}, {}}} } -emit_tlbld_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register) { append(instructions, inst_tlbld_r(dst)) } +emit_tlbld_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register) { append_elem(instructions, inst_tlbld_r(dst)) } inst_tlbli_r :: #force_inline proc "contextless" (dst: Register) -> Instruction { return Instruction{mnemonic = .TLBLI, operand_count = 1, length = 4, ops = {op_reg(dst), {}, {}, {}}} } -emit_tlbli_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register) { append(instructions, inst_tlbli_r(dst)) } +emit_tlbli_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register) { append_elem(instructions, inst_tlbli_r(dst)) } inst_mfpmr_r_spr :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .MFPMR, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_mfpmr_r_spr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_mfpmr_r_spr(dst, src)) } +emit_mfpmr_r_spr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_mfpmr_r_spr(dst, src)) } inst_mtpmr_spr_r :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .MTPMR, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_mtpmr_spr_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_mtpmr_spr_r(dst, src)) } +emit_mtpmr_spr_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_mtpmr_spr_r(dst, src)) } inst_mfsr_r_imm :: #force_inline proc "contextless" (dst: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .MFSR, operand_count = 2, length = 4, ops = {op_reg(dst), op_imm(imm), {}, {}}} } -emit_mfsr_r_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64) { append(instructions, inst_mfsr_r_imm(dst, imm)) } +emit_mfsr_r_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64) { append_elem(instructions, inst_mfsr_r_imm(dst, imm)) } inst_mtsr_imm_r :: #force_inline proc "contextless" (imm: i64, dst: Register) -> Instruction { return Instruction{mnemonic = .MTSR, operand_count = 2, length = 4, ops = {op_imm(imm), op_reg(dst), {}, {}}} } -emit_mtsr_imm_r :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, dst: Register) { append(instructions, inst_mtsr_imm_r(imm, dst)) } +emit_mtsr_imm_r :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, dst: Register) { append_elem(instructions, inst_mtsr_imm_r(imm, dst)) } inst_mfsrin_r_r :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .MFSRIN, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_mfsrin_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_mfsrin_r_r(dst, src)) } +emit_mfsrin_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_mfsrin_r_r(dst, src)) } inst_mtsrin_r_r :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .MTSRIN, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_mtsrin_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_mtsrin_r_r(dst, src)) } +emit_mtsrin_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_mtsrin_r_r(dst, src)) } inst_dst_r_r_imm :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .DST, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_imm(imm), {}}} } -emit_dst_r_r_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_dst_r_r_imm(dst, src, imm)) } +emit_dst_r_r_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_dst_r_r_imm(dst, src, imm)) } inst_dstt_r_r_imm :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .DSTT, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_imm(imm), {}}} } -emit_dstt_r_r_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_dstt_r_r_imm(dst, src, imm)) } +emit_dstt_r_r_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_dstt_r_r_imm(dst, src, imm)) } inst_dstst_r_r_imm :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .DSTST, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_imm(imm), {}}} } -emit_dstst_r_r_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_dstst_r_r_imm(dst, src, imm)) } +emit_dstst_r_r_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_dstst_r_r_imm(dst, src, imm)) } inst_dststt_r_r_imm :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .DSTSTT, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_imm(imm), {}}} } -emit_dststt_r_r_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_dststt_r_r_imm(dst, src, imm)) } +emit_dststt_r_r_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_dststt_r_r_imm(dst, src, imm)) } inst_dss_imm :: #force_inline proc "contextless" (imm: i64) -> Instruction { return Instruction{mnemonic = .DSS, operand_count = 1, length = 4, ops = {op_imm(imm), {}, {}, {}}} } -emit_dss_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64) { append(instructions, inst_dss_imm(imm)) } +emit_dss_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64) { append_elem(instructions, inst_dss_imm(imm)) } inst_dssall_none :: #force_inline proc "contextless" () -> Instruction { return Instruction{mnemonic = .DSSALL, operand_count = 0, length = 4, ops = {{}, {}, {}, {}}} } -emit_dssall_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_dssall_none()) } +emit_dssall_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_dssall_none()) } inst_vsumsws_v_v_v :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VSUMSWS, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_vsumsws_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vsumsws_v_v_v(dst, src, src2)) } +emit_vsumsws_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vsumsws_v_v_v(dst, src, src2)) } inst_vsum2sws_v_v_v :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VSUM2SWS, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_vsum2sws_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vsum2sws_v_v_v(dst, src, src2)) } +emit_vsum2sws_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vsum2sws_v_v_v(dst, src, src2)) } inst_vsum4sbs_v_v_v :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VSUM4SBS, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_vsum4sbs_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vsum4sbs_v_v_v(dst, src, src2)) } +emit_vsum4sbs_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vsum4sbs_v_v_v(dst, src, src2)) } inst_vsum4shs_v_v_v :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VSUM4SHS, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_vsum4shs_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vsum4shs_v_v_v(dst, src, src2)) } +emit_vsum4shs_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vsum4shs_v_v_v(dst, src, src2)) } inst_vsum4ubs_v_v_v :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VSUM4UBS, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_vsum4ubs_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vsum4ubs_v_v_v(dst, src, src2)) } +emit_vsum4ubs_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vsum4ubs_v_v_v(dst, src, src2)) } inst_mffsce_fr :: #force_inline proc "contextless" (dst: Register) -> Instruction { return Instruction{mnemonic = .MFFSCE, operand_count = 1, length = 4, ops = {op_reg(dst), {}, {}, {}}} } -emit_mffsce_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register) { append(instructions, inst_mffsce_fr(dst)) } +emit_mffsce_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register) { append_elem(instructions, inst_mffsce_fr(dst)) } inst_mffscdrn_fr_fr :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .MFFSCDRN, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_mffscdrn_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_mffscdrn_fr_fr(dst, src)) } +emit_mffscdrn_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_mffscdrn_fr_fr(dst, src)) } inst_mffscdrni_fr_imm :: #force_inline proc "contextless" (dst: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .MFFSCDRNI, operand_count = 2, length = 4, ops = {op_reg(dst), op_imm(imm), {}, {}}} } -emit_mffscdrni_fr_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64) { append(instructions, inst_mffscdrni_fr_imm(dst, imm)) } +emit_mffscdrni_fr_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64) { append_elem(instructions, inst_mffscdrni_fr_imm(dst, imm)) } inst_mffscrn_fr_fr :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .MFFSCRN, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_mffscrn_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_mffscrn_fr_fr(dst, src)) } +emit_mffscrn_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_mffscrn_fr_fr(dst, src)) } inst_mffscrni_fr_imm :: #force_inline proc "contextless" (dst: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .MFFSCRNI, operand_count = 2, length = 4, ops = {op_reg(dst), op_imm(imm), {}, {}}} } -emit_mffscrni_fr_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64) { append(instructions, inst_mffscrni_fr_imm(dst, imm)) } +emit_mffscrni_fr_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64) { append_elem(instructions, inst_mffscrni_fr_imm(dst, imm)) } inst_mffsl_fr :: #force_inline proc "contextless" (dst: Register) -> Instruction { return Instruction{mnemonic = .MFFSL, operand_count = 1, length = 4, ops = {op_reg(dst), {}, {}, {}}} } -emit_mffsl_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register) { append(instructions, inst_mffsl_fr(dst)) } +emit_mffsl_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register) { append_elem(instructions, inst_mffsl_fr(dst)) } inst_stop_none :: #force_inline proc "contextless" () -> Instruction { return Instruction{mnemonic = .STOP, operand_count = 0, length = 4, ops = {{}, {}, {}, {}}} } -emit_stop_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_stop_none()) } +emit_stop_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_stop_none()) } inst_cpabort_none :: #force_inline proc "contextless" () -> Instruction { return Instruction{mnemonic = .CPABORT, operand_count = 0, length = 4, ops = {{}, {}, {}, {}}} } -emit_cpabort_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_cpabort_none()) } +emit_cpabort_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_cpabort_none()) } inst_attn_none :: #force_inline proc "contextless" () -> Instruction { return Instruction{mnemonic = .ATTN, operand_count = 0, length = 4, ops = {{}, {}, {}, {}}} } -emit_attn_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_attn_none()) } +emit_attn_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_attn_none()) } inst_mtfprd_fr_r :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .MTFPRD, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_mtfprd_fr_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_mtfprd_fr_r(dst, src)) } +emit_mtfprd_fr_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_mtfprd_fr_r(dst, src)) } inst_mffprd_r_fr :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .MFFPRD, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_mffprd_r_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_mffprd_r_fr(dst, src)) } +emit_mffprd_r_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_mffprd_r_fr(dst, src)) } inst_mtfprwa_fr_r :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .MTFPRWA, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_mtfprwa_fr_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_mtfprwa_fr_r(dst, src)) } +emit_mtfprwa_fr_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_mtfprwa_fr_r(dst, src)) } inst_mtfprwz_fr_r :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .MTFPRWZ, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_mtfprwz_fr_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_mtfprwz_fr_r(dst, src)) } +emit_mtfprwz_fr_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_mtfprwz_fr_r(dst, src)) } inst_mffprwz_r_fr :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .MFFPRWZ, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_mffprwz_r_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_mffprwz_r_fr(dst, src)) } +emit_mffprwz_r_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_mffprwz_r_fr(dst, src)) } inst_mfvsrld_r_vs :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .MFVSRLD, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_mfvsrld_r_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_mfvsrld_r_vs(dst, src)) } +emit_mfvsrld_r_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_mfvsrld_r_vs(dst, src)) } inst_mtvsrdd_vs_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .MTVSRDD, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_mtvsrdd_vs_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_mtvsrdd_vs_r_r(dst, src, src2)) } +emit_mtvsrdd_vs_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_mtvsrdd_vs_r_r(dst, src, src2)) } inst_mtvsrws_vs_r :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .MTVSRWS, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_mtvsrws_vs_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_mtvsrws_vs_r(dst, src)) } +emit_mtvsrws_vs_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_mtvsrws_vs_r(dst, src)) } inst_extswsli_r_r_imm :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .EXTSWSLI, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_imm(imm), {}}} } -emit_extswsli_r_r_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_extswsli_r_r_imm(dst, src, imm)) } +emit_extswsli_r_r_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_extswsli_r_r_imm(dst, src, imm)) } inst_extswsli_dot_r_r_imm :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .EXTSWSLI_DOT, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_imm(imm), {}}} } -emit_extswsli_dot_r_r_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_extswsli_dot_r_r_imm(dst, src, imm)) } +emit_extswsli_dot_r_r_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_extswsli_dot_r_r_imm(dst, src, imm)) } inst_isellt_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .ISELLT, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_isellt_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_isellt_r_r_r(dst, src, src2)) } +emit_isellt_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_isellt_r_r_r(dst, src, src2)) } inst_iselgt_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .ISELGT, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_iselgt_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_iselgt_r_r_r(dst, src, src2)) } +emit_iselgt_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_iselgt_r_r_r(dst, src, src2)) } inst_iseleq_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .ISELEQ, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_iseleq_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_iseleq_r_r_r(dst, src, src2)) } +emit_iseleq_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_iseleq_r_r_r(dst, src, src2)) } inst_tweq_r_r :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .TWEQ, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_tweq_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_tweq_r_r(dst, src)) } +emit_tweq_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_tweq_r_r(dst, src)) } inst_twne_r_r :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .TWNE, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_twne_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_twne_r_r(dst, src)) } +emit_twne_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_twne_r_r(dst, src)) } inst_twgt_r_r :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .TWGT, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_twgt_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_twgt_r_r(dst, src)) } +emit_twgt_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_twgt_r_r(dst, src)) } inst_twlt_r_r :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .TWLT, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_twlt_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_twlt_r_r(dst, src)) } +emit_twlt_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_twlt_r_r(dst, src)) } inst_twgti_r_simm :: #force_inline proc "contextless" (dst: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .TWGTI, operand_count = 2, length = 4, ops = {op_reg(dst), op_imm(imm), {}, {}}} } -emit_twgti_r_simm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64) { append(instructions, inst_twgti_r_simm(dst, imm)) } +emit_twgti_r_simm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64) { append_elem(instructions, inst_twgti_r_simm(dst, imm)) } inst_twlti_r_simm :: #force_inline proc "contextless" (dst: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .TWLTI, operand_count = 2, length = 4, ops = {op_reg(dst), op_imm(imm), {}, {}}} } -emit_twlti_r_simm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64) { append(instructions, inst_twlti_r_simm(dst, imm)) } +emit_twlti_r_simm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64) { append_elem(instructions, inst_twlti_r_simm(dst, imm)) } inst_tweqi_r_simm :: #force_inline proc "contextless" (dst: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .TWEQI, operand_count = 2, length = 4, ops = {op_reg(dst), op_imm(imm), {}, {}}} } -emit_tweqi_r_simm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64) { append(instructions, inst_tweqi_r_simm(dst, imm)) } +emit_tweqi_r_simm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64) { append_elem(instructions, inst_tweqi_r_simm(dst, imm)) } inst_twnei_r_simm :: #force_inline proc "contextless" (dst: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .TWNEI, operand_count = 2, length = 4, ops = {op_reg(dst), op_imm(imm), {}, {}}} } -emit_twnei_r_simm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64) { append(instructions, inst_twnei_r_simm(dst, imm)) } +emit_twnei_r_simm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64) { append_elem(instructions, inst_twnei_r_simm(dst, imm)) } inst_twui_r_simm :: #force_inline proc "contextless" (dst: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .TWUI, operand_count = 2, length = 4, ops = {op_reg(dst), op_imm(imm), {}, {}}} } -emit_twui_r_simm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64) { append(instructions, inst_twui_r_simm(dst, imm)) } +emit_twui_r_simm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64) { append_elem(instructions, inst_twui_r_simm(dst, imm)) } inst_tdeq_r_r :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .TDEQ, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_tdeq_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_tdeq_r_r(dst, src)) } +emit_tdeq_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_tdeq_r_r(dst, src)) } inst_tdne_r_r :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .TDNE, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_tdne_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_tdne_r_r(dst, src)) } +emit_tdne_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_tdne_r_r(dst, src)) } inst_tdgt_r_r :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .TDGT, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_tdgt_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_tdgt_r_r(dst, src)) } +emit_tdgt_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_tdgt_r_r(dst, src)) } inst_tdlt_r_r :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .TDLT, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_tdlt_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_tdlt_r_r(dst, src)) } +emit_tdlt_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_tdlt_r_r(dst, src)) } inst_tdgti_r_simm :: #force_inline proc "contextless" (dst: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .TDGTI, operand_count = 2, length = 4, ops = {op_reg(dst), op_imm(imm), {}, {}}} } -emit_tdgti_r_simm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64) { append(instructions, inst_tdgti_r_simm(dst, imm)) } +emit_tdgti_r_simm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64) { append_elem(instructions, inst_tdgti_r_simm(dst, imm)) } inst_tdlti_r_simm :: #force_inline proc "contextless" (dst: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .TDLTI, operand_count = 2, length = 4, ops = {op_reg(dst), op_imm(imm), {}, {}}} } -emit_tdlti_r_simm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64) { append(instructions, inst_tdlti_r_simm(dst, imm)) } +emit_tdlti_r_simm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64) { append_elem(instructions, inst_tdlti_r_simm(dst, imm)) } inst_tdeqi_r_simm :: #force_inline proc "contextless" (dst: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .TDEQI, operand_count = 2, length = 4, ops = {op_reg(dst), op_imm(imm), {}, {}}} } -emit_tdeqi_r_simm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64) { append(instructions, inst_tdeqi_r_simm(dst, imm)) } +emit_tdeqi_r_simm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64) { append_elem(instructions, inst_tdeqi_r_simm(dst, imm)) } inst_tdnei_r_simm :: #force_inline proc "contextless" (dst: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .TDNEI, operand_count = 2, length = 4, ops = {op_reg(dst), op_imm(imm), {}, {}}} } -emit_tdnei_r_simm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64) { append(instructions, inst_tdnei_r_simm(dst, imm)) } +emit_tdnei_r_simm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64) { append_elem(instructions, inst_tdnei_r_simm(dst, imm)) } inst_tdui_r_simm :: #force_inline proc "contextless" (dst: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .TDUI, operand_count = 2, length = 4, ops = {op_reg(dst), op_imm(imm), {}, {}}} } -emit_tdui_r_simm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64) { append(instructions, inst_tdui_r_simm(dst, imm)) } +emit_tdui_r_simm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64) { append_elem(instructions, inst_tdui_r_simm(dst, imm)) } inst_bcdadd_dot_v_v_v_imm :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .BCDADD_DOT, operand_count = 4, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), op_imm(imm)}} } -emit_bcdadd_dot_v_v_v_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, imm: i64) { append(instructions, inst_bcdadd_dot_v_v_v_imm(dst, src, src2, imm)) } +emit_bcdadd_dot_v_v_v_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, imm: i64) { append_elem(instructions, inst_bcdadd_dot_v_v_v_imm(dst, src, src2, imm)) } inst_bcdsub_dot_v_v_v_imm :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .BCDSUB_DOT, operand_count = 4, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), op_imm(imm)}} } -emit_bcdsub_dot_v_v_v_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, imm: i64) { append(instructions, inst_bcdsub_dot_v_v_v_imm(dst, src, src2, imm)) } +emit_bcdsub_dot_v_v_v_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, imm: i64) { append_elem(instructions, inst_bcdsub_dot_v_v_v_imm(dst, src, src2, imm)) } inst_bcds_dot_v_v_v_imm :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .BCDS_DOT, operand_count = 4, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), op_imm(imm)}} } -emit_bcds_dot_v_v_v_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, imm: i64) { append(instructions, inst_bcds_dot_v_v_v_imm(dst, src, src2, imm)) } +emit_bcds_dot_v_v_v_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, imm: i64) { append_elem(instructions, inst_bcds_dot_v_v_v_imm(dst, src, src2, imm)) } inst_bcdus_dot_v_v_v :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .BCDUS_DOT, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_bcdus_dot_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_bcdus_dot_v_v_v(dst, src, src2)) } +emit_bcdus_dot_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_bcdus_dot_v_v_v(dst, src, src2)) } inst_bcdsr_dot_v_v_v_imm :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .BCDSR_DOT, operand_count = 4, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), op_imm(imm)}} } -emit_bcdsr_dot_v_v_v_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, imm: i64) { append(instructions, inst_bcdsr_dot_v_v_v_imm(dst, src, src2, imm)) } +emit_bcdsr_dot_v_v_v_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, imm: i64) { append_elem(instructions, inst_bcdsr_dot_v_v_v_imm(dst, src, src2, imm)) } inst_bcdcfn_dot_v_v_imm :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .BCDCFN_DOT, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_imm(imm), {}}} } -emit_bcdcfn_dot_v_v_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_bcdcfn_dot_v_v_imm(dst, src, imm)) } +emit_bcdcfn_dot_v_v_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_bcdcfn_dot_v_v_imm(dst, src, imm)) } inst_bcdctn_dot_v_v :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .BCDCTN_DOT, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_bcdctn_dot_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_bcdctn_dot_v_v(dst, src)) } +emit_bcdctn_dot_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_bcdctn_dot_v_v(dst, src)) } inst_bcdcfz_dot_v_v_imm :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .BCDCFZ_DOT, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_imm(imm), {}}} } -emit_bcdcfz_dot_v_v_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_bcdcfz_dot_v_v_imm(dst, src, imm)) } +emit_bcdcfz_dot_v_v_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_bcdcfz_dot_v_v_imm(dst, src, imm)) } inst_bcdctz_dot_v_v_imm :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .BCDCTZ_DOT, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_imm(imm), {}}} } -emit_bcdctz_dot_v_v_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_bcdctz_dot_v_v_imm(dst, src, imm)) } +emit_bcdctz_dot_v_v_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_bcdctz_dot_v_v_imm(dst, src, imm)) } inst_bcdcpsgn_dot_v_v_v :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .BCDCPSGN_DOT, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_bcdcpsgn_dot_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_bcdcpsgn_dot_v_v_v(dst, src, src2)) } +emit_bcdcpsgn_dot_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_bcdcpsgn_dot_v_v_v(dst, src, src2)) } inst_bcdtrunc_dot_v_v_v_imm :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .BCDTRUNC_DOT, operand_count = 4, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), op_imm(imm)}} } -emit_bcdtrunc_dot_v_v_v_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, imm: i64) { append(instructions, inst_bcdtrunc_dot_v_v_v_imm(dst, src, src2, imm)) } +emit_bcdtrunc_dot_v_v_v_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, imm: i64) { append_elem(instructions, inst_bcdtrunc_dot_v_v_v_imm(dst, src, src2, imm)) } inst_bcdutrunc_dot_v_v_v :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .BCDUTRUNC_DOT, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_bcdutrunc_dot_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_bcdutrunc_dot_v_v_v(dst, src, src2)) } +emit_bcdutrunc_dot_v_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_bcdutrunc_dot_v_v_v(dst, src, src2)) } inst_bcdcfsq_dot_v_v_imm :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .BCDCFSQ_DOT, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_imm(imm), {}}} } -emit_bcdcfsq_dot_v_v_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_bcdcfsq_dot_v_v_imm(dst, src, imm)) } +emit_bcdcfsq_dot_v_v_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_bcdcfsq_dot_v_v_imm(dst, src, imm)) } inst_bcdctsq_dot_v_v :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .BCDCTSQ_DOT, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_bcdctsq_dot_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_bcdctsq_dot_v_v(dst, src)) } +emit_bcdctsq_dot_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_bcdctsq_dot_v_v(dst, src)) } inst_scv_imm :: #force_inline proc "contextless" (imm: i64) -> Instruction { return Instruction{mnemonic = .SCV, operand_count = 1, length = 4, ops = {op_imm(imm), {}, {}, {}}} } -emit_scv_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64) { append(instructions, inst_scv_imm(imm)) } +emit_scv_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64) { append_elem(instructions, inst_scv_imm(imm)) } inst_bdnztl_crb_rel :: #force_inline proc "contextless" (dst: Register, label: u32) -> Instruction { return Instruction{mnemonic = .BDNZTL, operand_count = 2, length = 4, ops = {op_reg(dst), op_label(label), {}, {}}} } -emit_bdnztl_crb_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, label: u32) { append(instructions, inst_bdnztl_crb_rel(dst, label)) } +emit_bdnztl_crb_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, label: u32) { append_elem(instructions, inst_bdnztl_crb_rel(dst, label)) } inst_bdztl_crb_rel :: #force_inline proc "contextless" (dst: Register, label: u32) -> Instruction { return Instruction{mnemonic = .BDZTL, operand_count = 2, length = 4, ops = {op_reg(dst), op_label(label), {}, {}}} } -emit_bdztl_crb_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, label: u32) { append(instructions, inst_bdztl_crb_rel(dst, label)) } +emit_bdztl_crb_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, label: u32) { append_elem(instructions, inst_bdztl_crb_rel(dst, label)) } inst_bdnzfl_crb_rel :: #force_inline proc "contextless" (dst: Register, label: u32) -> Instruction { return Instruction{mnemonic = .BDNZFL, operand_count = 2, length = 4, ops = {op_reg(dst), op_label(label), {}, {}}} } -emit_bdnzfl_crb_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, label: u32) { append(instructions, inst_bdnzfl_crb_rel(dst, label)) } +emit_bdnzfl_crb_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, label: u32) { append_elem(instructions, inst_bdnzfl_crb_rel(dst, label)) } inst_bdzfl_crb_rel :: #force_inline proc "contextless" (dst: Register, label: u32) -> Instruction { return Instruction{mnemonic = .BDZFL, operand_count = 2, length = 4, ops = {op_reg(dst), op_label(label), {}, {}}} } -emit_bdzfl_crb_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, label: u32) { append(instructions, inst_bdzfl_crb_rel(dst, label)) } +emit_bdzfl_crb_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, label: u32) { append_elem(instructions, inst_bdzfl_crb_rel(dst, label)) } inst_bdnztlr_crb :: #force_inline proc "contextless" (dst: Register) -> Instruction { return Instruction{mnemonic = .BDNZTLR, operand_count = 1, length = 4, ops = {op_reg(dst), {}, {}, {}}} } -emit_bdnztlr_crb :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register) { append(instructions, inst_bdnztlr_crb(dst)) } +emit_bdnztlr_crb :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register) { append_elem(instructions, inst_bdnztlr_crb(dst)) } inst_bdztlr_crb :: #force_inline proc "contextless" (dst: Register) -> Instruction { return Instruction{mnemonic = .BDZTLR, operand_count = 1, length = 4, ops = {op_reg(dst), {}, {}, {}}} } -emit_bdztlr_crb :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register) { append(instructions, inst_bdztlr_crb(dst)) } +emit_bdztlr_crb :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register) { append_elem(instructions, inst_bdztlr_crb(dst)) } inst_bdnzflr_crb :: #force_inline proc "contextless" (dst: Register) -> Instruction { return Instruction{mnemonic = .BDNZFLR, operand_count = 1, length = 4, ops = {op_reg(dst), {}, {}, {}}} } -emit_bdnzflr_crb :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register) { append(instructions, inst_bdnzflr_crb(dst)) } +emit_bdnzflr_crb :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register) { append_elem(instructions, inst_bdnzflr_crb(dst)) } inst_bdzflr_crb :: #force_inline proc "contextless" (dst: Register) -> Instruction { return Instruction{mnemonic = .BDZFLR, operand_count = 1, length = 4, ops = {op_reg(dst), {}, {}, {}}} } -emit_bdzflr_crb :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register) { append(instructions, inst_bdzflr_crb(dst)) } +emit_bdzflr_crb :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register) { append_elem(instructions, inst_bdzflr_crb(dst)) } inst_bdnztlrl_crb :: #force_inline proc "contextless" (dst: Register) -> Instruction { return Instruction{mnemonic = .BDNZTLRL, operand_count = 1, length = 4, ops = {op_reg(dst), {}, {}, {}}} } -emit_bdnztlrl_crb :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register) { append(instructions, inst_bdnztlrl_crb(dst)) } +emit_bdnztlrl_crb :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register) { append_elem(instructions, inst_bdnztlrl_crb(dst)) } inst_bdztlrl_crb :: #force_inline proc "contextless" (dst: Register) -> Instruction { return Instruction{mnemonic = .BDZTLRL, operand_count = 1, length = 4, ops = {op_reg(dst), {}, {}, {}}} } -emit_bdztlrl_crb :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register) { append(instructions, inst_bdztlrl_crb(dst)) } +emit_bdztlrl_crb :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register) { append_elem(instructions, inst_bdztlrl_crb(dst)) } inst_bdnzflrl_crb :: #force_inline proc "contextless" (dst: Register) -> Instruction { return Instruction{mnemonic = .BDNZFLRL, operand_count = 1, length = 4, ops = {op_reg(dst), {}, {}, {}}} } -emit_bdnzflrl_crb :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register) { append(instructions, inst_bdnzflrl_crb(dst)) } +emit_bdnzflrl_crb :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register) { append_elem(instructions, inst_bdnzflrl_crb(dst)) } inst_bdzflrl_crb :: #force_inline proc "contextless" (dst: Register) -> Instruction { return Instruction{mnemonic = .BDZFLRL, operand_count = 1, length = 4, ops = {op_reg(dst), {}, {}, {}}} } -emit_bdzflrl_crb :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register) { append(instructions, inst_bdzflrl_crb(dst)) } +emit_bdzflrl_crb :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register) { append_elem(instructions, inst_bdzflrl_crb(dst)) } inst_mtcr_r :: #force_inline proc "contextless" (dst: Register) -> Instruction { return Instruction{mnemonic = .MTCR, operand_count = 1, length = 4, ops = {op_reg(dst), {}, {}, {}}} } -emit_mtcr_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register) { append(instructions, inst_mtcr_r(dst)) } +emit_mtcr_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register) { append_elem(instructions, inst_mtcr_r(dst)) } inst_mfdscr_r :: #force_inline proc "contextless" (dst: Register) -> Instruction { return Instruction{mnemonic = .MFDSCR, operand_count = 1, length = 4, ops = {op_reg(dst), {}, {}, {}}} } -emit_mfdscr_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register) { append(instructions, inst_mfdscr_r(dst)) } +emit_mfdscr_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register) { append_elem(instructions, inst_mfdscr_r(dst)) } inst_mtdscr_r :: #force_inline proc "contextless" (dst: Register) -> Instruction { return Instruction{mnemonic = .MTDSCR, operand_count = 1, length = 4, ops = {op_reg(dst), {}, {}, {}}} } -emit_mtdscr_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register) { append(instructions, inst_mtdscr_r(dst)) } +emit_mtdscr_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register) { append_elem(instructions, inst_mtdscr_r(dst)) } inst_mfcfar_r :: #force_inline proc "contextless" (dst: Register) -> Instruction { return Instruction{mnemonic = .MFCFAR, operand_count = 1, length = 4, ops = {op_reg(dst), {}, {}, {}}} } -emit_mfcfar_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register) { append(instructions, inst_mfcfar_r(dst)) } +emit_mfcfar_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register) { append_elem(instructions, inst_mfcfar_r(dst)) } inst_mtcfar_r :: #force_inline proc "contextless" (dst: Register) -> Instruction { return Instruction{mnemonic = .MTCFAR, operand_count = 1, length = 4, ops = {op_reg(dst), {}, {}, {}}} } -emit_mtcfar_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register) { append(instructions, inst_mtcfar_r(dst)) } +emit_mtcfar_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register) { append_elem(instructions, inst_mtcfar_r(dst)) } inst_mfppr_r :: #force_inline proc "contextless" (dst: Register) -> Instruction { return Instruction{mnemonic = .MFPPR, operand_count = 1, length = 4, ops = {op_reg(dst), {}, {}, {}}} } -emit_mfppr_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register) { append(instructions, inst_mfppr_r(dst)) } +emit_mfppr_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register) { append_elem(instructions, inst_mfppr_r(dst)) } inst_mtppr_r :: #force_inline proc "contextless" (dst: Register) -> Instruction { return Instruction{mnemonic = .MTPPR, operand_count = 1, length = 4, ops = {op_reg(dst), {}, {}, {}}} } -emit_mtppr_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register) { append(instructions, inst_mtppr_r(dst)) } +emit_mtppr_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register) { append_elem(instructions, inst_mtppr_r(dst)) } inst_mfdec_r :: #force_inline proc "contextless" (dst: Register) -> Instruction { return Instruction{mnemonic = .MFDEC, operand_count = 1, length = 4, ops = {op_reg(dst), {}, {}, {}}} } -emit_mfdec_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register) { append(instructions, inst_mfdec_r(dst)) } +emit_mfdec_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register) { append_elem(instructions, inst_mfdec_r(dst)) } inst_mtdec_r :: #force_inline proc "contextless" (dst: Register) -> Instruction { return Instruction{mnemonic = .MTDEC, operand_count = 1, length = 4, ops = {op_reg(dst), {}, {}, {}}} } -emit_mtdec_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register) { append(instructions, inst_mtdec_r(dst)) } +emit_mtdec_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register) { append_elem(instructions, inst_mtdec_r(dst)) } inst_mfsrr0_r :: #force_inline proc "contextless" (dst: Register) -> Instruction { return Instruction{mnemonic = .MFSRR0, operand_count = 1, length = 4, ops = {op_reg(dst), {}, {}, {}}} } -emit_mfsrr0_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register) { append(instructions, inst_mfsrr0_r(dst)) } +emit_mfsrr0_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register) { append_elem(instructions, inst_mfsrr0_r(dst)) } inst_mtsrr0_r :: #force_inline proc "contextless" (dst: Register) -> Instruction { return Instruction{mnemonic = .MTSRR0, operand_count = 1, length = 4, ops = {op_reg(dst), {}, {}, {}}} } -emit_mtsrr0_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register) { append(instructions, inst_mtsrr0_r(dst)) } +emit_mtsrr0_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register) { append_elem(instructions, inst_mtsrr0_r(dst)) } inst_mfsrr1_r :: #force_inline proc "contextless" (dst: Register) -> Instruction { return Instruction{mnemonic = .MFSRR1, operand_count = 1, length = 4, ops = {op_reg(dst), {}, {}, {}}} } -emit_mfsrr1_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register) { append(instructions, inst_mfsrr1_r(dst)) } +emit_mfsrr1_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register) { append_elem(instructions, inst_mfsrr1_r(dst)) } inst_mtsrr1_r :: #force_inline proc "contextless" (dst: Register) -> Instruction { return Instruction{mnemonic = .MTSRR1, operand_count = 1, length = 4, ops = {op_reg(dst), {}, {}, {}}} } -emit_mtsrr1_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register) { append(instructions, inst_mtsrr1_r(dst)) } +emit_mtsrr1_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register) { append_elem(instructions, inst_mtsrr1_r(dst)) } inst_mfdar_r :: #force_inline proc "contextless" (dst: Register) -> Instruction { return Instruction{mnemonic = .MFDAR, operand_count = 1, length = 4, ops = {op_reg(dst), {}, {}, {}}} } -emit_mfdar_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register) { append(instructions, inst_mfdar_r(dst)) } +emit_mfdar_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register) { append_elem(instructions, inst_mfdar_r(dst)) } inst_mtdar_r :: #force_inline proc "contextless" (dst: Register) -> Instruction { return Instruction{mnemonic = .MTDAR, operand_count = 1, length = 4, ops = {op_reg(dst), {}, {}, {}}} } -emit_mtdar_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register) { append(instructions, inst_mtdar_r(dst)) } +emit_mtdar_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register) { append_elem(instructions, inst_mtdar_r(dst)) } inst_mfdsisr_r :: #force_inline proc "contextless" (dst: Register) -> Instruction { return Instruction{mnemonic = .MFDSISR, operand_count = 1, length = 4, ops = {op_reg(dst), {}, {}, {}}} } -emit_mfdsisr_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register) { append(instructions, inst_mfdsisr_r(dst)) } +emit_mfdsisr_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register) { append_elem(instructions, inst_mfdsisr_r(dst)) } inst_mtdsisr_r :: #force_inline proc "contextless" (dst: Register) -> Instruction { return Instruction{mnemonic = .MTDSISR, operand_count = 1, length = 4, ops = {op_reg(dst), {}, {}, {}}} } -emit_mtdsisr_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register) { append(instructions, inst_mtdsisr_r(dst)) } +emit_mtdsisr_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register) { append_elem(instructions, inst_mtdsisr_r(dst)) } inst_mfasr_r :: #force_inline proc "contextless" (dst: Register) -> Instruction { return Instruction{mnemonic = .MFASR, operand_count = 1, length = 4, ops = {op_reg(dst), {}, {}, {}}} } -emit_mfasr_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register) { append(instructions, inst_mfasr_r(dst)) } +emit_mfasr_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register) { append_elem(instructions, inst_mfasr_r(dst)) } inst_mtasr_r :: #force_inline proc "contextless" (dst: Register) -> Instruction { return Instruction{mnemonic = .MTASR, operand_count = 1, length = 4, ops = {op_reg(dst), {}, {}, {}}} } -emit_mtasr_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register) { append(instructions, inst_mtasr_r(dst)) } +emit_mtasr_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register) { append_elem(instructions, inst_mtasr_r(dst)) } inst_mfamr_r :: #force_inline proc "contextless" (dst: Register) -> Instruction { return Instruction{mnemonic = .MFAMR, operand_count = 1, length = 4, ops = {op_reg(dst), {}, {}, {}}} } -emit_mfamr_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register) { append(instructions, inst_mfamr_r(dst)) } +emit_mfamr_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register) { append_elem(instructions, inst_mfamr_r(dst)) } inst_mtamr_r :: #force_inline proc "contextless" (dst: Register) -> Instruction { return Instruction{mnemonic = .MTAMR, operand_count = 1, length = 4, ops = {op_reg(dst), {}, {}, {}}} } -emit_mtamr_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register) { append(instructions, inst_mtamr_r(dst)) } +emit_mtamr_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register) { append_elem(instructions, inst_mtamr_r(dst)) } inst_mftcr_r :: #force_inline proc "contextless" (dst: Register) -> Instruction { return Instruction{mnemonic = .MFTCR, operand_count = 1, length = 4, ops = {op_reg(dst), {}, {}, {}}} } -emit_mftcr_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register) { append(instructions, inst_mftcr_r(dst)) } +emit_mftcr_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register) { append_elem(instructions, inst_mftcr_r(dst)) } inst_mttcr_r :: #force_inline proc "contextless" (dst: Register) -> Instruction { return Instruction{mnemonic = .MTTCR, operand_count = 1, length = 4, ops = {op_reg(dst), {}, {}, {}}} } -emit_mttcr_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register) { append(instructions, inst_mttcr_r(dst)) } +emit_mttcr_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register) { append_elem(instructions, inst_mttcr_r(dst)) } inst_mfesr_r :: #force_inline proc "contextless" (dst: Register) -> Instruction { return Instruction{mnemonic = .MFESR, operand_count = 1, length = 4, ops = {op_reg(dst), {}, {}, {}}} } -emit_mfesr_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register) { append(instructions, inst_mfesr_r(dst)) } +emit_mfesr_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register) { append_elem(instructions, inst_mfesr_r(dst)) } inst_mtesr_r :: #force_inline proc "contextless" (dst: Register) -> Instruction { return Instruction{mnemonic = .MTESR, operand_count = 1, length = 4, ops = {op_reg(dst), {}, {}, {}}} } -emit_mtesr_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register) { append(instructions, inst_mtesr_r(dst)) } +emit_mtesr_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register) { append_elem(instructions, inst_mtesr_r(dst)) } inst_mfdccr_r :: #force_inline proc "contextless" (dst: Register) -> Instruction { return Instruction{mnemonic = .MFDCCR, operand_count = 1, length = 4, ops = {op_reg(dst), {}, {}, {}}} } -emit_mfdccr_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register) { append(instructions, inst_mfdccr_r(dst)) } +emit_mfdccr_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register) { append_elem(instructions, inst_mfdccr_r(dst)) } inst_mtdccr_r :: #force_inline proc "contextless" (dst: Register) -> Instruction { return Instruction{mnemonic = .MTDCCR, operand_count = 1, length = 4, ops = {op_reg(dst), {}, {}, {}}} } -emit_mtdccr_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register) { append(instructions, inst_mtdccr_r(dst)) } +emit_mtdccr_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register) { append_elem(instructions, inst_mtdccr_r(dst)) } inst_mtbr0_r :: #force_inline proc "contextless" (dst: Register) -> Instruction { return Instruction{mnemonic = .MTBR0, operand_count = 1, length = 4, ops = {op_reg(dst), {}, {}, {}}} } -emit_mtbr0_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register) { append(instructions, inst_mtbr0_r(dst)) } +emit_mtbr0_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register) { append_elem(instructions, inst_mtbr0_r(dst)) } inst_mtbr1_r :: #force_inline proc "contextless" (dst: Register) -> Instruction { return Instruction{mnemonic = .MTBR1, operand_count = 1, length = 4, ops = {op_reg(dst), {}, {}, {}}} } -emit_mtbr1_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register) { append(instructions, inst_mtbr1_r(dst)) } +emit_mtbr1_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register) { append_elem(instructions, inst_mtbr1_r(dst)) } inst_mttbl_r :: #force_inline proc "contextless" (dst: Register) -> Instruction { return Instruction{mnemonic = .MTTBL, operand_count = 1, length = 4, ops = {op_reg(dst), {}, {}, {}}} } -emit_mttbl_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register) { append(instructions, inst_mttbl_r(dst)) } +emit_mttbl_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register) { append_elem(instructions, inst_mttbl_r(dst)) } inst_mttbu_r :: #force_inline proc "contextless" (dst: Register) -> Instruction { return Instruction{mnemonic = .MTTBU, operand_count = 1, length = 4, ops = {op_reg(dst), {}, {}, {}}} } -emit_mttbu_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register) { append(instructions, inst_mttbu_r(dst)) } +emit_mttbu_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register) { append_elem(instructions, inst_mttbu_r(dst)) } inst_lwat_r_r_imm :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .LWAT, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_imm(imm), {}}} } -emit_lwat_r_r_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_lwat_r_r_imm(dst, src, imm)) } +emit_lwat_r_r_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_lwat_r_r_imm(dst, src, imm)) } inst_ldat_r_r_imm :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .LDAT, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_imm(imm), {}}} } -emit_ldat_r_r_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_ldat_r_r_imm(dst, src, imm)) } +emit_ldat_r_r_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_ldat_r_r_imm(dst, src, imm)) } inst_stwat_r_r_imm :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .STWAT, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_imm(imm), {}}} } -emit_stwat_r_r_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_stwat_r_r_imm(dst, src, imm)) } +emit_stwat_r_r_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_stwat_r_r_imm(dst, src, imm)) } inst_stdat_r_r_imm :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .STDAT, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_imm(imm), {}}} } -emit_stdat_r_r_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_stdat_r_r_imm(dst, src, imm)) } +emit_stdat_r_r_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_stdat_r_r_imm(dst, src, imm)) } inst_vextsd2q_v_v :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .VEXTSD2Q, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_vextsd2q_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_vextsd2q_v_v(dst, src)) } +emit_vextsd2q_v_v :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_vextsd2q_v_v(dst, src)) } inst_lxvprl_vs_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .LXVPRL, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_lxvprl_vs_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_lxvprl_vs_r_r(dst, src, src2)) } +emit_lxvprl_vs_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_lxvprl_vs_r_r(dst, src, src2)) } inst_lxvprll_vs_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .LXVPRLL, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_lxvprll_vs_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_lxvprll_vs_r_r(dst, src, src2)) } +emit_lxvprll_vs_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_lxvprll_vs_r_r(dst, src, src2)) } inst_stxvprl_vs_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .STXVPRL, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_stxvprl_vs_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_stxvprl_vs_r_r(dst, src, src2)) } +emit_stxvprl_vs_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_stxvprl_vs_r_r(dst, src, src2)) } inst_stxvprll_vs_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .STXVPRLL, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_stxvprll_vs_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_stxvprll_vs_r_r(dst, src, src2)) } +emit_stxvprll_vs_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_stxvprll_vs_r_r(dst, src, src2)) } inst_lxvrl_vs_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .LXVRL, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_lxvrl_vs_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_lxvrl_vs_r_r(dst, src, src2)) } +emit_lxvrl_vs_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_lxvrl_vs_r_r(dst, src, src2)) } inst_lxvrll_vs_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .LXVRLL, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_lxvrll_vs_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_lxvrll_vs_r_r(dst, src, src2)) } +emit_lxvrll_vs_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_lxvrll_vs_r_r(dst, src, src2)) } inst_stxvrl_vs_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .STXVRL, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_stxvrl_vs_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_stxvrl_vs_r_r(dst, src, src2)) } +emit_stxvrl_vs_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_stxvrl_vs_r_r(dst, src, src2)) } inst_stxvrll_vs_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .STXVRLL, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_stxvrll_vs_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_stxvrll_vs_r_r(dst, src, src2)) } +emit_stxvrll_vs_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_stxvrll_vs_r_r(dst, src, src2)) } inst_rfmci_none :: #force_inline proc "contextless" () -> Instruction { return Instruction{mnemonic = .RFMCI, operand_count = 0, length = 4, ops = {{}, {}, {}, {}}} } -emit_rfmci_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_rfmci_none()) } +emit_rfmci_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_rfmci_none()) } inst_nop_none :: #force_inline proc "contextless" () -> Instruction { return Instruction{mnemonic = .NOP, operand_count = 0, length = 4, ops = {{}, {}, {}, {}}} } -emit_nop_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_nop_none()) } +emit_nop_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_nop_none()) } inst_xnop_none :: #force_inline proc "contextless" () -> Instruction { return Instruction{mnemonic = .XNOP, operand_count = 0, length = 4, ops = {{}, {}, {}, {}}} } -emit_xnop_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_xnop_none()) } +emit_xnop_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_xnop_none()) } inst_li_r_simm :: #force_inline proc "contextless" (dst: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .LI, operand_count = 2, length = 4, ops = {op_reg(dst), op_imm(imm), {}, {}}} } -emit_li_r_simm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64) { append(instructions, inst_li_r_simm(dst, imm)) } +emit_li_r_simm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64) { append_elem(instructions, inst_li_r_simm(dst, imm)) } inst_lis_r_simm :: #force_inline proc "contextless" (dst: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .LIS, operand_count = 2, length = 4, ops = {op_reg(dst), op_imm(imm), {}, {}}} } -emit_lis_r_simm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64) { append(instructions, inst_lis_r_simm(dst, imm)) } +emit_lis_r_simm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64) { append_elem(instructions, inst_lis_r_simm(dst, imm)) } inst_la_r_mem :: #force_inline proc "contextless" (dst: Register, addr: Memory) -> Instruction { return Instruction{mnemonic = .LA, operand_count = 2, length = 4, ops = {op_reg(dst), op_mem(addr), {}, {}}} } -emit_la_r_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append(instructions, inst_la_r_mem(dst, addr)) } +emit_la_r_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append_elem(instructions, inst_la_r_mem(dst, addr)) } inst_mr_r_r :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .MR, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_mr_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_mr_r_r(dst, src)) } +emit_mr_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_mr_r_r(dst, src)) } inst_mr_dot_r_r :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .MR_DOT, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_mr_dot_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_mr_dot_r_r(dst, src)) } +emit_mr_dot_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_mr_dot_r_r(dst, src)) } inst_not_r_r :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .NOT, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_not_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_not_r_r(dst, src)) } +emit_not_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_not_r_r(dst, src)) } inst_not_dot_r_r :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .NOT_DOT, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_not_dot_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_not_dot_r_r(dst, src)) } +emit_not_dot_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_not_dot_r_r(dst, src)) } inst_blr_none :: #force_inline proc "contextless" () -> Instruction { return Instruction{mnemonic = .BLR, operand_count = 0, length = 4, ops = {{}, {}, {}, {}}} } -emit_blr_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_blr_none()) } +emit_blr_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_blr_none()) } inst_blrl_none :: #force_inline proc "contextless" () -> Instruction { return Instruction{mnemonic = .BLRL, operand_count = 0, length = 4, ops = {{}, {}, {}, {}}} } -emit_blrl_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_blrl_none()) } +emit_blrl_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_blrl_none()) } inst_bctr_none :: #force_inline proc "contextless" () -> Instruction { return Instruction{mnemonic = .BCTR, operand_count = 0, length = 4, ops = {{}, {}, {}, {}}} } -emit_bctr_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_bctr_none()) } +emit_bctr_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_bctr_none()) } inst_bctrl_none :: #force_inline proc "contextless" () -> Instruction { return Instruction{mnemonic = .BCTRL, operand_count = 0, length = 4, ops = {{}, {}, {}, {}}} } -emit_bctrl_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_bctrl_none()) } +emit_bctrl_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_bctrl_none()) } inst_beq_rel :: #force_inline proc "contextless" (label: u32) -> Instruction { return Instruction{mnemonic = .BEQ, operand_count = 1, length = 4, ops = {op_label(label), {}, {}, {}}} } -emit_beq_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, label: u32) { append(instructions, inst_beq_rel(label)) } +emit_beq_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, label: u32) { append_elem(instructions, inst_beq_rel(label)) } inst_bne_rel :: #force_inline proc "contextless" (label: u32) -> Instruction { return Instruction{mnemonic = .BNE, operand_count = 1, length = 4, ops = {op_label(label), {}, {}, {}}} } -emit_bne_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, label: u32) { append(instructions, inst_bne_rel(label)) } +emit_bne_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, label: u32) { append_elem(instructions, inst_bne_rel(label)) } inst_blt_rel :: #force_inline proc "contextless" (label: u32) -> Instruction { return Instruction{mnemonic = .BLT, operand_count = 1, length = 4, ops = {op_label(label), {}, {}, {}}} } -emit_blt_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, label: u32) { append(instructions, inst_blt_rel(label)) } +emit_blt_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, label: u32) { append_elem(instructions, inst_blt_rel(label)) } inst_ble_rel :: #force_inline proc "contextless" (label: u32) -> Instruction { return Instruction{mnemonic = .BLE, operand_count = 1, length = 4, ops = {op_label(label), {}, {}, {}}} } -emit_ble_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, label: u32) { append(instructions, inst_ble_rel(label)) } +emit_ble_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, label: u32) { append_elem(instructions, inst_ble_rel(label)) } inst_bgt_rel :: #force_inline proc "contextless" (label: u32) -> Instruction { return Instruction{mnemonic = .BGT, operand_count = 1, length = 4, ops = {op_label(label), {}, {}, {}}} } -emit_bgt_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, label: u32) { append(instructions, inst_bgt_rel(label)) } +emit_bgt_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, label: u32) { append_elem(instructions, inst_bgt_rel(label)) } inst_bge_rel :: #force_inline proc "contextless" (label: u32) -> Instruction { return Instruction{mnemonic = .BGE, operand_count = 1, length = 4, ops = {op_label(label), {}, {}, {}}} } -emit_bge_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, label: u32) { append(instructions, inst_bge_rel(label)) } +emit_bge_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, label: u32) { append_elem(instructions, inst_bge_rel(label)) } inst_bso_rel :: #force_inline proc "contextless" (label: u32) -> Instruction { return Instruction{mnemonic = .BSO, operand_count = 1, length = 4, ops = {op_label(label), {}, {}, {}}} } -emit_bso_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, label: u32) { append(instructions, inst_bso_rel(label)) } +emit_bso_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, label: u32) { append_elem(instructions, inst_bso_rel(label)) } inst_bns_rel :: #force_inline proc "contextless" (label: u32) -> Instruction { return Instruction{mnemonic = .BNS, operand_count = 1, length = 4, ops = {op_label(label), {}, {}, {}}} } -emit_bns_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, label: u32) { append(instructions, inst_bns_rel(label)) } +emit_bns_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, label: u32) { append_elem(instructions, inst_bns_rel(label)) } inst_beql_rel :: #force_inline proc "contextless" (label: u32) -> Instruction { return Instruction{mnemonic = .BEQL, operand_count = 1, length = 4, ops = {op_label(label), {}, {}, {}}} } -emit_beql_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, label: u32) { append(instructions, inst_beql_rel(label)) } +emit_beql_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, label: u32) { append_elem(instructions, inst_beql_rel(label)) } inst_bnel_rel :: #force_inline proc "contextless" (label: u32) -> Instruction { return Instruction{mnemonic = .BNEL, operand_count = 1, length = 4, ops = {op_label(label), {}, {}, {}}} } -emit_bnel_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, label: u32) { append(instructions, inst_bnel_rel(label)) } +emit_bnel_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, label: u32) { append_elem(instructions, inst_bnel_rel(label)) } inst_bltl_rel :: #force_inline proc "contextless" (label: u32) -> Instruction { return Instruction{mnemonic = .BLTL, operand_count = 1, length = 4, ops = {op_label(label), {}, {}, {}}} } -emit_bltl_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, label: u32) { append(instructions, inst_bltl_rel(label)) } +emit_bltl_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, label: u32) { append_elem(instructions, inst_bltl_rel(label)) } inst_blel_rel :: #force_inline proc "contextless" (label: u32) -> Instruction { return Instruction{mnemonic = .BLEL, operand_count = 1, length = 4, ops = {op_label(label), {}, {}, {}}} } -emit_blel_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, label: u32) { append(instructions, inst_blel_rel(label)) } +emit_blel_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, label: u32) { append_elem(instructions, inst_blel_rel(label)) } inst_bgtl_rel :: #force_inline proc "contextless" (label: u32) -> Instruction { return Instruction{mnemonic = .BGTL, operand_count = 1, length = 4, ops = {op_label(label), {}, {}, {}}} } -emit_bgtl_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, label: u32) { append(instructions, inst_bgtl_rel(label)) } +emit_bgtl_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, label: u32) { append_elem(instructions, inst_bgtl_rel(label)) } inst_bgel_rel :: #force_inline proc "contextless" (label: u32) -> Instruction { return Instruction{mnemonic = .BGEL, operand_count = 1, length = 4, ops = {op_label(label), {}, {}, {}}} } -emit_bgel_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, label: u32) { append(instructions, inst_bgel_rel(label)) } +emit_bgel_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, label: u32) { append_elem(instructions, inst_bgel_rel(label)) } inst_bsol_rel :: #force_inline proc "contextless" (label: u32) -> Instruction { return Instruction{mnemonic = .BSOL, operand_count = 1, length = 4, ops = {op_label(label), {}, {}, {}}} } -emit_bsol_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, label: u32) { append(instructions, inst_bsol_rel(label)) } +emit_bsol_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, label: u32) { append_elem(instructions, inst_bsol_rel(label)) } inst_bnsl_rel :: #force_inline proc "contextless" (label: u32) -> Instruction { return Instruction{mnemonic = .BNSL, operand_count = 1, length = 4, ops = {op_label(label), {}, {}, {}}} } -emit_bnsl_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, label: u32) { append(instructions, inst_bnsl_rel(label)) } +emit_bnsl_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, label: u32) { append_elem(instructions, inst_bnsl_rel(label)) } inst_beqlr_none :: #force_inline proc "contextless" () -> Instruction { return Instruction{mnemonic = .BEQLR, operand_count = 0, length = 4, ops = {{}, {}, {}, {}}} } -emit_beqlr_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_beqlr_none()) } +emit_beqlr_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_beqlr_none()) } inst_bnelr_none :: #force_inline proc "contextless" () -> Instruction { return Instruction{mnemonic = .BNELR, operand_count = 0, length = 4, ops = {{}, {}, {}, {}}} } -emit_bnelr_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_bnelr_none()) } +emit_bnelr_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_bnelr_none()) } inst_bltlr_none :: #force_inline proc "contextless" () -> Instruction { return Instruction{mnemonic = .BLTLR, operand_count = 0, length = 4, ops = {{}, {}, {}, {}}} } -emit_bltlr_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_bltlr_none()) } +emit_bltlr_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_bltlr_none()) } inst_blelr_none :: #force_inline proc "contextless" () -> Instruction { return Instruction{mnemonic = .BLELR, operand_count = 0, length = 4, ops = {{}, {}, {}, {}}} } -emit_blelr_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_blelr_none()) } +emit_blelr_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_blelr_none()) } inst_bgtlr_none :: #force_inline proc "contextless" () -> Instruction { return Instruction{mnemonic = .BGTLR, operand_count = 0, length = 4, ops = {{}, {}, {}, {}}} } -emit_bgtlr_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_bgtlr_none()) } +emit_bgtlr_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_bgtlr_none()) } inst_bgelr_none :: #force_inline proc "contextless" () -> Instruction { return Instruction{mnemonic = .BGELR, operand_count = 0, length = 4, ops = {{}, {}, {}, {}}} } -emit_bgelr_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_bgelr_none()) } +emit_bgelr_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_bgelr_none()) } inst_bsolr_none :: #force_inline proc "contextless" () -> Instruction { return Instruction{mnemonic = .BSOLR, operand_count = 0, length = 4, ops = {{}, {}, {}, {}}} } -emit_bsolr_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_bsolr_none()) } +emit_bsolr_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_bsolr_none()) } inst_bnslr_none :: #force_inline proc "contextless" () -> Instruction { return Instruction{mnemonic = .BNSLR, operand_count = 0, length = 4, ops = {{}, {}, {}, {}}} } -emit_bnslr_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_bnslr_none()) } +emit_bnslr_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_bnslr_none()) } inst_beqctr_none :: #force_inline proc "contextless" () -> Instruction { return Instruction{mnemonic = .BEQCTR, operand_count = 0, length = 4, ops = {{}, {}, {}, {}}} } -emit_beqctr_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_beqctr_none()) } +emit_beqctr_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_beqctr_none()) } inst_bnectr_none :: #force_inline proc "contextless" () -> Instruction { return Instruction{mnemonic = .BNECTR, operand_count = 0, length = 4, ops = {{}, {}, {}, {}}} } -emit_bnectr_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_bnectr_none()) } +emit_bnectr_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_bnectr_none()) } inst_bltctr_none :: #force_inline proc "contextless" () -> Instruction { return Instruction{mnemonic = .BLTCTR, operand_count = 0, length = 4, ops = {{}, {}, {}, {}}} } -emit_bltctr_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_bltctr_none()) } +emit_bltctr_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_bltctr_none()) } inst_blectr_none :: #force_inline proc "contextless" () -> Instruction { return Instruction{mnemonic = .BLECTR, operand_count = 0, length = 4, ops = {{}, {}, {}, {}}} } -emit_blectr_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_blectr_none()) } +emit_blectr_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_blectr_none()) } inst_bgtctr_none :: #force_inline proc "contextless" () -> Instruction { return Instruction{mnemonic = .BGTCTR, operand_count = 0, length = 4, ops = {{}, {}, {}, {}}} } -emit_bgtctr_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_bgtctr_none()) } +emit_bgtctr_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_bgtctr_none()) } inst_bgectr_none :: #force_inline proc "contextless" () -> Instruction { return Instruction{mnemonic = .BGECTR, operand_count = 0, length = 4, ops = {{}, {}, {}, {}}} } -emit_bgectr_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_bgectr_none()) } +emit_bgectr_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_bgectr_none()) } inst_bsoctr_none :: #force_inline proc "contextless" () -> Instruction { return Instruction{mnemonic = .BSOCTR, operand_count = 0, length = 4, ops = {{}, {}, {}, {}}} } -emit_bsoctr_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_bsoctr_none()) } +emit_bsoctr_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_bsoctr_none()) } inst_bnsctr_none :: #force_inline proc "contextless" () -> Instruction { return Instruction{mnemonic = .BNSCTR, operand_count = 0, length = 4, ops = {{}, {}, {}, {}}} } -emit_bnsctr_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_bnsctr_none()) } +emit_bnsctr_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_bnsctr_none()) } inst_bdz_rel :: #force_inline proc "contextless" (label: u32) -> Instruction { return Instruction{mnemonic = .BDZ, operand_count = 1, length = 4, ops = {op_label(label), {}, {}, {}}} } -emit_bdz_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, label: u32) { append(instructions, inst_bdz_rel(label)) } +emit_bdz_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, label: u32) { append_elem(instructions, inst_bdz_rel(label)) } inst_bdnz_rel :: #force_inline proc "contextless" (label: u32) -> Instruction { return Instruction{mnemonic = .BDNZ, operand_count = 1, length = 4, ops = {op_label(label), {}, {}, {}}} } -emit_bdnz_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, label: u32) { append(instructions, inst_bdnz_rel(label)) } +emit_bdnz_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, label: u32) { append_elem(instructions, inst_bdnz_rel(label)) } inst_bdzl_rel :: #force_inline proc "contextless" (label: u32) -> Instruction { return Instruction{mnemonic = .BDZL, operand_count = 1, length = 4, ops = {op_label(label), {}, {}, {}}} } -emit_bdzl_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, label: u32) { append(instructions, inst_bdzl_rel(label)) } +emit_bdzl_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, label: u32) { append_elem(instructions, inst_bdzl_rel(label)) } inst_bdnzl_rel :: #force_inline proc "contextless" (label: u32) -> Instruction { return Instruction{mnemonic = .BDNZL, operand_count = 1, length = 4, ops = {op_label(label), {}, {}, {}}} } -emit_bdnzl_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, label: u32) { append(instructions, inst_bdnzl_rel(label)) } +emit_bdnzl_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, label: u32) { append_elem(instructions, inst_bdnzl_rel(label)) } inst_bdzlr_none :: #force_inline proc "contextless" () -> Instruction { return Instruction{mnemonic = .BDZLR, operand_count = 0, length = 4, ops = {{}, {}, {}, {}}} } -emit_bdzlr_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_bdzlr_none()) } +emit_bdzlr_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_bdzlr_none()) } inst_bdnzlr_none :: #force_inline proc "contextless" () -> Instruction { return Instruction{mnemonic = .BDNZLR, operand_count = 0, length = 4, ops = {{}, {}, {}, {}}} } -emit_bdnzlr_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_bdnzlr_none()) } +emit_bdnzlr_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_bdnzlr_none()) } inst_bdzlrl_none :: #force_inline proc "contextless" () -> Instruction { return Instruction{mnemonic = .BDZLRL, operand_count = 0, length = 4, ops = {{}, {}, {}, {}}} } -emit_bdzlrl_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_bdzlrl_none()) } +emit_bdzlrl_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_bdzlrl_none()) } inst_bdnzlrl_none :: #force_inline proc "contextless" () -> Instruction { return Instruction{mnemonic = .BDNZLRL, operand_count = 0, length = 4, ops = {{}, {}, {}, {}}} } -emit_bdnzlrl_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_bdnzlrl_none()) } +emit_bdnzlrl_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_bdnzlrl_none()) } inst_bdzf_crb_rel :: #force_inline proc "contextless" (dst: Register, label: u32) -> Instruction { return Instruction{mnemonic = .BDZF, operand_count = 2, length = 4, ops = {op_reg(dst), op_label(label), {}, {}}} } -emit_bdzf_crb_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, label: u32) { append(instructions, inst_bdzf_crb_rel(dst, label)) } +emit_bdzf_crb_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, label: u32) { append_elem(instructions, inst_bdzf_crb_rel(dst, label)) } inst_bdzt_crb_rel :: #force_inline proc "contextless" (dst: Register, label: u32) -> Instruction { return Instruction{mnemonic = .BDZT, operand_count = 2, length = 4, ops = {op_reg(dst), op_label(label), {}, {}}} } -emit_bdzt_crb_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, label: u32) { append(instructions, inst_bdzt_crb_rel(dst, label)) } +emit_bdzt_crb_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, label: u32) { append_elem(instructions, inst_bdzt_crb_rel(dst, label)) } inst_bdnzf_crb_rel :: #force_inline proc "contextless" (dst: Register, label: u32) -> Instruction { return Instruction{mnemonic = .BDNZF, operand_count = 2, length = 4, ops = {op_reg(dst), op_label(label), {}, {}}} } -emit_bdnzf_crb_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, label: u32) { append(instructions, inst_bdnzf_crb_rel(dst, label)) } +emit_bdnzf_crb_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, label: u32) { append_elem(instructions, inst_bdnzf_crb_rel(dst, label)) } inst_bdnzt_crb_rel :: #force_inline proc "contextless" (dst: Register, label: u32) -> Instruction { return Instruction{mnemonic = .BDNZT, operand_count = 2, length = 4, ops = {op_reg(dst), op_label(label), {}, {}}} } -emit_bdnzt_crb_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, label: u32) { append(instructions, inst_bdnzt_crb_rel(dst, label)) } +emit_bdnzt_crb_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, label: u32) { append_elem(instructions, inst_bdnzt_crb_rel(dst, label)) } inst_trap_none :: #force_inline proc "contextless" () -> Instruction { return Instruction{mnemonic = .TRAP, operand_count = 0, length = 4, ops = {{}, {}, {}, {}}} } -emit_trap_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_trap_none()) } +emit_trap_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_trap_none()) } inst_mflr_r :: #force_inline proc "contextless" (dst: Register) -> Instruction { return Instruction{mnemonic = .MFLR, operand_count = 1, length = 4, ops = {op_reg(dst), {}, {}, {}}} } -emit_mflr_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register) { append(instructions, inst_mflr_r(dst)) } +emit_mflr_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register) { append_elem(instructions, inst_mflr_r(dst)) } inst_mtlr_r :: #force_inline proc "contextless" (dst: Register) -> Instruction { return Instruction{mnemonic = .MTLR, operand_count = 1, length = 4, ops = {op_reg(dst), {}, {}, {}}} } -emit_mtlr_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register) { append(instructions, inst_mtlr_r(dst)) } +emit_mtlr_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register) { append_elem(instructions, inst_mtlr_r(dst)) } inst_mfctr_r :: #force_inline proc "contextless" (dst: Register) -> Instruction { return Instruction{mnemonic = .MFCTR, operand_count = 1, length = 4, ops = {op_reg(dst), {}, {}, {}}} } -emit_mfctr_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register) { append(instructions, inst_mfctr_r(dst)) } +emit_mfctr_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register) { append_elem(instructions, inst_mfctr_r(dst)) } inst_mtctr_r :: #force_inline proc "contextless" (dst: Register) -> Instruction { return Instruction{mnemonic = .MTCTR, operand_count = 1, length = 4, ops = {op_reg(dst), {}, {}, {}}} } -emit_mtctr_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register) { append(instructions, inst_mtctr_r(dst)) } +emit_mtctr_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register) { append_elem(instructions, inst_mtctr_r(dst)) } inst_mfxer_r :: #force_inline proc "contextless" (dst: Register) -> Instruction { return Instruction{mnemonic = .MFXER, operand_count = 1, length = 4, ops = {op_reg(dst), {}, {}, {}}} } -emit_mfxer_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register) { append(instructions, inst_mfxer_r(dst)) } +emit_mfxer_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register) { append_elem(instructions, inst_mfxer_r(dst)) } inst_mtxer_r :: #force_inline proc "contextless" (dst: Register) -> Instruction { return Instruction{mnemonic = .MTXER, operand_count = 1, length = 4, ops = {op_reg(dst), {}, {}, {}}} } -emit_mtxer_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register) { append(instructions, inst_mtxer_r(dst)) } +emit_mtxer_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register) { append_elem(instructions, inst_mtxer_r(dst)) } inst_slwi_r_r_imm :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .SLWI, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_imm(imm), {}}} } -emit_slwi_r_r_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_slwi_r_r_imm(dst, src, imm)) } +emit_slwi_r_r_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_slwi_r_r_imm(dst, src, imm)) } inst_srwi_r_r_imm :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .SRWI, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_imm(imm), {}}} } -emit_srwi_r_r_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_srwi_r_r_imm(dst, src, imm)) } +emit_srwi_r_r_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_srwi_r_r_imm(dst, src, imm)) } inst_sldi_r_r_imm :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .SLDI, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_imm(imm), {}}} } -emit_sldi_r_r_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_sldi_r_r_imm(dst, src, imm)) } +emit_sldi_r_r_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_sldi_r_r_imm(dst, src, imm)) } inst_srdi_r_r_imm :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .SRDI, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_imm(imm), {}}} } -emit_srdi_r_r_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_srdi_r_r_imm(dst, src, imm)) } +emit_srdi_r_r_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_srdi_r_r_imm(dst, src, imm)) } inst_clrrwi_r_r_imm :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .CLRRWI, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_imm(imm), {}}} } -emit_clrrwi_r_r_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_clrrwi_r_r_imm(dst, src, imm)) } +emit_clrrwi_r_r_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_clrrwi_r_r_imm(dst, src, imm)) } inst_clrlwi_r_r_imm :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .CLRLWI, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_imm(imm), {}}} } -emit_clrlwi_r_r_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_clrlwi_r_r_imm(dst, src, imm)) } +emit_clrlwi_r_r_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_clrlwi_r_r_imm(dst, src, imm)) } inst_clrrdi_r_r_imm :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .CLRRDI, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_imm(imm), {}}} } -emit_clrrdi_r_r_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_clrrdi_r_r_imm(dst, src, imm)) } +emit_clrrdi_r_r_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_clrrdi_r_r_imm(dst, src, imm)) } inst_clrldi_r_r_imm :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .CLRLDI, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_imm(imm), {}}} } -emit_clrldi_r_r_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_clrldi_r_r_imm(dst, src, imm)) } +emit_clrldi_r_r_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_clrldi_r_r_imm(dst, src, imm)) } inst_extldi_r_r_imm_imm :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64, imm2: i64) -> Instruction { return Instruction{mnemonic = .EXTLDI, operand_count = 4, length = 4, ops = {op_reg(dst), op_reg(src), op_imm(imm), op_imm(imm2)}} } -emit_extldi_r_r_imm_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64, imm2: i64) { append(instructions, inst_extldi_r_r_imm_imm(dst, src, imm, imm2)) } +emit_extldi_r_r_imm_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64, imm2: i64) { append_elem(instructions, inst_extldi_r_r_imm_imm(dst, src, imm, imm2)) } inst_extrdi_r_r_imm_imm :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64, imm2: i64) -> Instruction { return Instruction{mnemonic = .EXTRDI, operand_count = 4, length = 4, ops = {op_reg(dst), op_reg(src), op_imm(imm), op_imm(imm2)}} } -emit_extrdi_r_r_imm_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64, imm2: i64) { append(instructions, inst_extrdi_r_r_imm_imm(dst, src, imm, imm2)) } +emit_extrdi_r_r_imm_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64, imm2: i64) { append_elem(instructions, inst_extrdi_r_r_imm_imm(dst, src, imm, imm2)) } inst_extlwi_r_r_imm_imm :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64, imm2: i64) -> Instruction { return Instruction{mnemonic = .EXTLWI, operand_count = 4, length = 4, ops = {op_reg(dst), op_reg(src), op_imm(imm), op_imm(imm2)}} } -emit_extlwi_r_r_imm_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64, imm2: i64) { append(instructions, inst_extlwi_r_r_imm_imm(dst, src, imm, imm2)) } +emit_extlwi_r_r_imm_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64, imm2: i64) { append_elem(instructions, inst_extlwi_r_r_imm_imm(dst, src, imm, imm2)) } inst_extrwi_r_r_imm_imm :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64, imm2: i64) -> Instruction { return Instruction{mnemonic = .EXTRWI, operand_count = 4, length = 4, ops = {op_reg(dst), op_reg(src), op_imm(imm), op_imm(imm2)}} } -emit_extrwi_r_r_imm_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64, imm2: i64) { append(instructions, inst_extrwi_r_r_imm_imm(dst, src, imm, imm2)) } +emit_extrwi_r_r_imm_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64, imm2: i64) { append_elem(instructions, inst_extrwi_r_r_imm_imm(dst, src, imm, imm2)) } inst_inslwi_r_r_imm_imm :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64, imm2: i64) -> Instruction { return Instruction{mnemonic = .INSLWI, operand_count = 4, length = 4, ops = {op_reg(dst), op_reg(src), op_imm(imm), op_imm(imm2)}} } -emit_inslwi_r_r_imm_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64, imm2: i64) { append(instructions, inst_inslwi_r_r_imm_imm(dst, src, imm, imm2)) } +emit_inslwi_r_r_imm_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64, imm2: i64) { append_elem(instructions, inst_inslwi_r_r_imm_imm(dst, src, imm, imm2)) } inst_insrwi_r_r_imm_imm :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64, imm2: i64) -> Instruction { return Instruction{mnemonic = .INSRWI, operand_count = 4, length = 4, ops = {op_reg(dst), op_reg(src), op_imm(imm), op_imm(imm2)}} } -emit_insrwi_r_r_imm_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64, imm2: i64) { append(instructions, inst_insrwi_r_r_imm_imm(dst, src, imm, imm2)) } +emit_insrwi_r_r_imm_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64, imm2: i64) { append_elem(instructions, inst_insrwi_r_r_imm_imm(dst, src, imm, imm2)) } inst_rotlw_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .ROTLW, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_rotlw_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_rotlw_r_r_r(dst, src, src2)) } +emit_rotlw_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_rotlw_r_r_r(dst, src, src2)) } inst_rotlwi_r_r_imm :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .ROTLWI, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_imm(imm), {}}} } -emit_rotlwi_r_r_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_rotlwi_r_r_imm(dst, src, imm)) } +emit_rotlwi_r_r_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_rotlwi_r_r_imm(dst, src, imm)) } inst_rotrw_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .ROTRW, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_rotrw_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_rotrw_r_r_r(dst, src, src2)) } +emit_rotrw_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_rotrw_r_r_r(dst, src, src2)) } inst_rotld_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .ROTLD, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_rotld_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_rotld_r_r_r(dst, src, src2)) } +emit_rotld_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_rotld_r_r_r(dst, src, src2)) } inst_rotldi_r_r_imm :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .ROTLDI, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_imm(imm), {}}} } -emit_rotldi_r_r_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_rotldi_r_r_imm(dst, src, imm)) } +emit_rotldi_r_r_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_rotldi_r_r_imm(dst, src, imm)) } inst_rotrdi_r_r_imm :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .ROTRDI, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_imm(imm), {}}} } -emit_rotrdi_r_r_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_rotrdi_r_r_imm(dst, src, imm)) } +emit_rotrdi_r_r_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_rotrdi_r_r_imm(dst, src, imm)) } inst_sub_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .SUB, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_sub_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_sub_r_r_r(dst, src, src2)) } +emit_sub_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_sub_r_r_r(dst, src, src2)) } inst_sub_dot_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .SUB_DOT, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_sub_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_sub_dot_r_r_r(dst, src, src2)) } +emit_sub_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_sub_dot_r_r_r(dst, src, src2)) } inst_sub_o_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .SUB_O, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_sub_o_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_sub_o_r_r_r(dst, src, src2)) } +emit_sub_o_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_sub_o_r_r_r(dst, src, src2)) } inst_sub_o_dot_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .SUB_O_DOT, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_sub_o_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_sub_o_dot_r_r_r(dst, src, src2)) } +emit_sub_o_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_sub_o_dot_r_r_r(dst, src, src2)) } inst_subc_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .SUBC, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_subc_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_subc_r_r_r(dst, src, src2)) } +emit_subc_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_subc_r_r_r(dst, src, src2)) } inst_subc_dot_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .SUBC_DOT, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_subc_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_subc_dot_r_r_r(dst, src, src2)) } +emit_subc_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_subc_dot_r_r_r(dst, src, src2)) } inst_subc_o_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .SUBC_O, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_subc_o_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_subc_o_r_r_r(dst, src, src2)) } +emit_subc_o_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_subc_o_r_r_r(dst, src, src2)) } inst_subc_o_dot_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .SUBC_O_DOT, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_subc_o_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_subc_o_dot_r_r_r(dst, src, src2)) } +emit_subc_o_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_subc_o_dot_r_r_r(dst, src, src2)) } inst_cmpw_crf_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .CMPW, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_cmpw_crf_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_cmpw_crf_r_r(dst, src, src2)) } +emit_cmpw_crf_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_cmpw_crf_r_r(dst, src, src2)) } inst_cmplw_crf_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .CMPLW, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_cmplw_crf_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_cmplw_crf_r_r(dst, src, src2)) } +emit_cmplw_crf_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_cmplw_crf_r_r(dst, src, src2)) } inst_cmpd_crf_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .CMPD, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_cmpd_crf_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_cmpd_crf_r_r(dst, src, src2)) } +emit_cmpd_crf_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_cmpd_crf_r_r(dst, src, src2)) } inst_cmpld_crf_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .CMPLD, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_cmpld_crf_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_cmpld_crf_r_r(dst, src, src2)) } +emit_cmpld_crf_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_cmpld_crf_r_r(dst, src, src2)) } inst_cmpwi_crf_r_simm :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .CMPWI, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_imm(imm), {}}} } -emit_cmpwi_crf_r_simm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_cmpwi_crf_r_simm(dst, src, imm)) } +emit_cmpwi_crf_r_simm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_cmpwi_crf_r_simm(dst, src, imm)) } inst_cmplwi_crf_r_uimm :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .CMPLWI, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_imm(imm), {}}} } -emit_cmplwi_crf_r_uimm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_cmplwi_crf_r_uimm(dst, src, imm)) } +emit_cmplwi_crf_r_uimm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_cmplwi_crf_r_uimm(dst, src, imm)) } inst_cmpdi_crf_r_simm :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .CMPDI, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_imm(imm), {}}} } -emit_cmpdi_crf_r_simm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_cmpdi_crf_r_simm(dst, src, imm)) } +emit_cmpdi_crf_r_simm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_cmpdi_crf_r_simm(dst, src, imm)) } inst_cmpldi_crf_r_uimm :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .CMPLDI, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_imm(imm), {}}} } -emit_cmpldi_crf_r_uimm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_cmpldi_crf_r_uimm(dst, src, imm)) } +emit_cmpldi_crf_r_uimm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_cmpldi_crf_r_uimm(dst, src, imm)) } inst_evaddw_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVADDW, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evaddw_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evaddw_r_r_r(dst, src, src2)) } +emit_evaddw_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evaddw_r_r_r(dst, src, src2)) } inst_evaddiw_r_r_imm :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .EVADDIW, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_imm(imm), {}}} } -emit_evaddiw_r_r_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_evaddiw_r_r_imm(dst, src, imm)) } +emit_evaddiw_r_r_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_evaddiw_r_r_imm(dst, src, imm)) } inst_evsubfw_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVSUBFW, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evsubfw_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evsubfw_r_r_r(dst, src, src2)) } +emit_evsubfw_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evsubfw_r_r_r(dst, src, src2)) } inst_evsubifw_r_r_imm :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .EVSUBIFW, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_imm(imm), {}}} } -emit_evsubifw_r_r_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_evsubifw_r_r_imm(dst, src, imm)) } +emit_evsubifw_r_r_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_evsubifw_r_r_imm(dst, src, imm)) } inst_evabs_r_r :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .EVABS, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_evabs_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_evabs_r_r(dst, src)) } +emit_evabs_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_evabs_r_r(dst, src)) } inst_evextsh_r_r :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .EVEXTSH, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_evextsh_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_evextsh_r_r(dst, src)) } +emit_evextsh_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_evextsh_r_r(dst, src)) } inst_evextsb_r_r :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .EVEXTSB, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_evextsb_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_evextsb_r_r(dst, src)) } +emit_evextsb_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_evextsb_r_r(dst, src)) } inst_evcntlzw_r_r :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .EVCNTLZW, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_evcntlzw_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_evcntlzw_r_r(dst, src)) } +emit_evcntlzw_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_evcntlzw_r_r(dst, src)) } inst_evcntlsw_r_r :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .EVCNTLSW, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_evcntlsw_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_evcntlsw_r_r(dst, src)) } +emit_evcntlsw_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_evcntlsw_r_r(dst, src)) } inst_evrlw_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVRLW, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evrlw_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evrlw_r_r_r(dst, src, src2)) } +emit_evrlw_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evrlw_r_r_r(dst, src, src2)) } inst_evrlwi_r_r_imm :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .EVRLWI, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_imm(imm), {}}} } -emit_evrlwi_r_r_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_evrlwi_r_r_imm(dst, src, imm)) } +emit_evrlwi_r_r_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_evrlwi_r_r_imm(dst, src, imm)) } inst_evslw_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVSLW, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evslw_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evslw_r_r_r(dst, src, src2)) } +emit_evslw_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evslw_r_r_r(dst, src, src2)) } inst_evslwi_r_r_imm :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .EVSLWI, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_imm(imm), {}}} } -emit_evslwi_r_r_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_evslwi_r_r_imm(dst, src, imm)) } +emit_evslwi_r_r_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_evslwi_r_r_imm(dst, src, imm)) } inst_evsplati_r_imm :: #force_inline proc "contextless" (dst: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .EVSPLATI, operand_count = 2, length = 4, ops = {op_reg(dst), op_imm(imm), {}, {}}} } -emit_evsplati_r_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64) { append(instructions, inst_evsplati_r_imm(dst, imm)) } +emit_evsplati_r_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64) { append_elem(instructions, inst_evsplati_r_imm(dst, imm)) } inst_evsplatfi_r_imm :: #force_inline proc "contextless" (dst: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .EVSPLATFI, operand_count = 2, length = 4, ops = {op_reg(dst), op_imm(imm), {}, {}}} } -emit_evsplatfi_r_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64) { append(instructions, inst_evsplatfi_r_imm(dst, imm)) } +emit_evsplatfi_r_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64) { append_elem(instructions, inst_evsplatfi_r_imm(dst, imm)) } inst_evsrwu_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVSRWU, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evsrwu_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evsrwu_r_r_r(dst, src, src2)) } +emit_evsrwu_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evsrwu_r_r_r(dst, src, src2)) } inst_evsrws_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVSRWS, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evsrws_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evsrws_r_r_r(dst, src, src2)) } +emit_evsrws_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evsrws_r_r_r(dst, src, src2)) } inst_evsrwiu_r_r_imm :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .EVSRWIU, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_imm(imm), {}}} } -emit_evsrwiu_r_r_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_evsrwiu_r_r_imm(dst, src, imm)) } +emit_evsrwiu_r_r_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_evsrwiu_r_r_imm(dst, src, imm)) } inst_evsrwis_r_r_imm :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .EVSRWIS, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_imm(imm), {}}} } -emit_evsrwis_r_r_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_evsrwis_r_r_imm(dst, src, imm)) } +emit_evsrwis_r_r_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_evsrwis_r_r_imm(dst, src, imm)) } inst_evand_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVAND, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evand_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evand_r_r_r(dst, src, src2)) } +emit_evand_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evand_r_r_r(dst, src, src2)) } inst_evor_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVOR, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evor_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evor_r_r_r(dst, src, src2)) } +emit_evor_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evor_r_r_r(dst, src, src2)) } inst_evxor_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVXOR, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evxor_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evxor_r_r_r(dst, src, src2)) } +emit_evxor_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evxor_r_r_r(dst, src, src2)) } inst_evnand_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVNAND, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evnand_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evnand_r_r_r(dst, src, src2)) } +emit_evnand_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evnand_r_r_r(dst, src, src2)) } inst_evnor_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVNOR, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evnor_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evnor_r_r_r(dst, src, src2)) } +emit_evnor_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evnor_r_r_r(dst, src, src2)) } inst_evandc_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVANDC, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evandc_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evandc_r_r_r(dst, src, src2)) } +emit_evandc_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evandc_r_r_r(dst, src, src2)) } inst_evorc_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVORC, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evorc_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evorc_r_r_r(dst, src, src2)) } +emit_evorc_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evorc_r_r_r(dst, src, src2)) } inst_eveqv_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVEQV, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_eveqv_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_eveqv_r_r_r(dst, src, src2)) } +emit_eveqv_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_eveqv_r_r_r(dst, src, src2)) } inst_evcmpgts_crf_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVCMPGTS, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evcmpgts_crf_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evcmpgts_crf_r_r(dst, src, src2)) } +emit_evcmpgts_crf_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evcmpgts_crf_r_r(dst, src, src2)) } inst_evcmpgtu_crf_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVCMPGTU, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evcmpgtu_crf_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evcmpgtu_crf_r_r(dst, src, src2)) } +emit_evcmpgtu_crf_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evcmpgtu_crf_r_r(dst, src, src2)) } inst_evcmplts_crf_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVCMPLTS, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evcmplts_crf_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evcmplts_crf_r_r(dst, src, src2)) } +emit_evcmplts_crf_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evcmplts_crf_r_r(dst, src, src2)) } inst_evcmpltu_crf_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVCMPLTU, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evcmpltu_crf_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evcmpltu_crf_r_r(dst, src, src2)) } +emit_evcmpltu_crf_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evcmpltu_crf_r_r(dst, src, src2)) } inst_evcmpeq_crf_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVCMPEQ, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evcmpeq_crf_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evcmpeq_crf_r_r(dst, src, src2)) } +emit_evcmpeq_crf_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evcmpeq_crf_r_r(dst, src, src2)) } inst_evsel_r_r_r_crf :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register, src3: Register) -> Instruction { return Instruction{mnemonic = .EVSEL, operand_count = 4, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), op_reg(src3)}} } -emit_evsel_r_r_r_crf :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, src3: Register) { append(instructions, inst_evsel_r_r_r_crf(dst, src, src2, src3)) } +emit_evsel_r_r_r_crf :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, src3: Register) { append_elem(instructions, inst_evsel_r_r_r_crf(dst, src, src2, src3)) } inst_evmergehi_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVMERGEHI, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evmergehi_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evmergehi_r_r_r(dst, src, src2)) } +emit_evmergehi_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evmergehi_r_r_r(dst, src, src2)) } inst_evmergelo_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVMERGELO, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evmergelo_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evmergelo_r_r_r(dst, src, src2)) } +emit_evmergelo_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evmergelo_r_r_r(dst, src, src2)) } inst_evmergehilo_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVMERGEHILO, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evmergehilo_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evmergehilo_r_r_r(dst, src, src2)) } +emit_evmergehilo_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evmergehilo_r_r_r(dst, src, src2)) } inst_evmergelohi_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVMERGELOHI, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evmergelohi_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evmergelohi_r_r_r(dst, src, src2)) } +emit_evmergelohi_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evmergelohi_r_r_r(dst, src, src2)) } inst_evdivws_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVDIVWS, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evdivws_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evdivws_r_r_r(dst, src, src2)) } +emit_evdivws_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evdivws_r_r_r(dst, src, src2)) } inst_evdivwu_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVDIVWU, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evdivwu_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evdivwu_r_r_r(dst, src, src2)) } +emit_evdivwu_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evdivwu_r_r_r(dst, src, src2)) } inst_evmra_r_r :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .EVMRA, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_evmra_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_evmra_r_r(dst, src)) } +emit_evmra_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_evmra_r_r(dst, src)) } inst_evldd_r_mem :: #force_inline proc "contextless" (dst: Register, addr: Memory) -> Instruction { return Instruction{mnemonic = .EVLDD, operand_count = 2, length = 4, ops = {op_reg(dst), op_mem(addr), {}, {}}} } -emit_evldd_r_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append(instructions, inst_evldd_r_mem(dst, addr)) } +emit_evldd_r_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append_elem(instructions, inst_evldd_r_mem(dst, addr)) } inst_evlddx_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVLDDX, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evlddx_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evlddx_r_r_r(dst, src, src2)) } +emit_evlddx_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evlddx_r_r_r(dst, src, src2)) } inst_evldw_r_mem :: #force_inline proc "contextless" (dst: Register, addr: Memory) -> Instruction { return Instruction{mnemonic = .EVLDW, operand_count = 2, length = 4, ops = {op_reg(dst), op_mem(addr), {}, {}}} } -emit_evldw_r_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append(instructions, inst_evldw_r_mem(dst, addr)) } +emit_evldw_r_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append_elem(instructions, inst_evldw_r_mem(dst, addr)) } inst_evldwx_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVLDWX, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evldwx_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evldwx_r_r_r(dst, src, src2)) } +emit_evldwx_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evldwx_r_r_r(dst, src, src2)) } inst_evldh_r_mem :: #force_inline proc "contextless" (dst: Register, addr: Memory) -> Instruction { return Instruction{mnemonic = .EVLDH, operand_count = 2, length = 4, ops = {op_reg(dst), op_mem(addr), {}, {}}} } -emit_evldh_r_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append(instructions, inst_evldh_r_mem(dst, addr)) } +emit_evldh_r_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append_elem(instructions, inst_evldh_r_mem(dst, addr)) } inst_evldhx_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVLDHX, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evldhx_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evldhx_r_r_r(dst, src, src2)) } +emit_evldhx_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evldhx_r_r_r(dst, src, src2)) } inst_evstdd_r_mem :: #force_inline proc "contextless" (dst: Register, addr: Memory) -> Instruction { return Instruction{mnemonic = .EVSTDD, operand_count = 2, length = 4, ops = {op_reg(dst), op_mem(addr), {}, {}}} } -emit_evstdd_r_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append(instructions, inst_evstdd_r_mem(dst, addr)) } +emit_evstdd_r_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append_elem(instructions, inst_evstdd_r_mem(dst, addr)) } inst_evstddx_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVSTDDX, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evstddx_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evstddx_r_r_r(dst, src, src2)) } +emit_evstddx_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evstddx_r_r_r(dst, src, src2)) } inst_evstdw_r_mem :: #force_inline proc "contextless" (dst: Register, addr: Memory) -> Instruction { return Instruction{mnemonic = .EVSTDW, operand_count = 2, length = 4, ops = {op_reg(dst), op_mem(addr), {}, {}}} } -emit_evstdw_r_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append(instructions, inst_evstdw_r_mem(dst, addr)) } +emit_evstdw_r_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append_elem(instructions, inst_evstdw_r_mem(dst, addr)) } inst_evstdwx_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVSTDWX, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evstdwx_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evstdwx_r_r_r(dst, src, src2)) } +emit_evstdwx_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evstdwx_r_r_r(dst, src, src2)) } inst_evstdh_r_mem :: #force_inline proc "contextless" (dst: Register, addr: Memory) -> Instruction { return Instruction{mnemonic = .EVSTDH, operand_count = 2, length = 4, ops = {op_reg(dst), op_mem(addr), {}, {}}} } -emit_evstdh_r_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append(instructions, inst_evstdh_r_mem(dst, addr)) } +emit_evstdh_r_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append_elem(instructions, inst_evstdh_r_mem(dst, addr)) } inst_evstdhx_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVSTDHX, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evstdhx_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evstdhx_r_r_r(dst, src, src2)) } +emit_evstdhx_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evstdhx_r_r_r(dst, src, src2)) } inst_evlwwsplat_r_mem :: #force_inline proc "contextless" (dst: Register, addr: Memory) -> Instruction { return Instruction{mnemonic = .EVLWWSPLAT, operand_count = 2, length = 4, ops = {op_reg(dst), op_mem(addr), {}, {}}} } -emit_evlwwsplat_r_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append(instructions, inst_evlwwsplat_r_mem(dst, addr)) } +emit_evlwwsplat_r_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append_elem(instructions, inst_evlwwsplat_r_mem(dst, addr)) } inst_evlwhsplat_r_mem :: #force_inline proc "contextless" (dst: Register, addr: Memory) -> Instruction { return Instruction{mnemonic = .EVLWHSPLAT, operand_count = 2, length = 4, ops = {op_reg(dst), op_mem(addr), {}, {}}} } -emit_evlwhsplat_r_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append(instructions, inst_evlwhsplat_r_mem(dst, addr)) } +emit_evlwhsplat_r_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append_elem(instructions, inst_evlwhsplat_r_mem(dst, addr)) } inst_evlhhesplat_r_mem :: #force_inline proc "contextless" (dst: Register, addr: Memory) -> Instruction { return Instruction{mnemonic = .EVLHHESPLAT, operand_count = 2, length = 4, ops = {op_reg(dst), op_mem(addr), {}, {}}} } -emit_evlhhesplat_r_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append(instructions, inst_evlhhesplat_r_mem(dst, addr)) } +emit_evlhhesplat_r_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append_elem(instructions, inst_evlhhesplat_r_mem(dst, addr)) } inst_evlhhossplat_r_mem :: #force_inline proc "contextless" (dst: Register, addr: Memory) -> Instruction { return Instruction{mnemonic = .EVLHHOSSPLAT, operand_count = 2, length = 4, ops = {op_reg(dst), op_mem(addr), {}, {}}} } -emit_evlhhossplat_r_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append(instructions, inst_evlhhossplat_r_mem(dst, addr)) } +emit_evlhhossplat_r_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append_elem(instructions, inst_evlhhossplat_r_mem(dst, addr)) } inst_evlhhousplat_r_mem :: #force_inline proc "contextless" (dst: Register, addr: Memory) -> Instruction { return Instruction{mnemonic = .EVLHHOUSPLAT, operand_count = 2, length = 4, ops = {op_reg(dst), op_mem(addr), {}, {}}} } -emit_evlhhousplat_r_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append(instructions, inst_evlhhousplat_r_mem(dst, addr)) } +emit_evlhhousplat_r_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append_elem(instructions, inst_evlhhousplat_r_mem(dst, addr)) } inst_evlwhe_r_mem :: #force_inline proc "contextless" (dst: Register, addr: Memory) -> Instruction { return Instruction{mnemonic = .EVLWHE, operand_count = 2, length = 4, ops = {op_reg(dst), op_mem(addr), {}, {}}} } -emit_evlwhe_r_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append(instructions, inst_evlwhe_r_mem(dst, addr)) } +emit_evlwhe_r_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append_elem(instructions, inst_evlwhe_r_mem(dst, addr)) } inst_evlwhou_r_mem :: #force_inline proc "contextless" (dst: Register, addr: Memory) -> Instruction { return Instruction{mnemonic = .EVLWHOU, operand_count = 2, length = 4, ops = {op_reg(dst), op_mem(addr), {}, {}}} } -emit_evlwhou_r_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append(instructions, inst_evlwhou_r_mem(dst, addr)) } +emit_evlwhou_r_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append_elem(instructions, inst_evlwhou_r_mem(dst, addr)) } inst_evlwhos_r_mem :: #force_inline proc "contextless" (dst: Register, addr: Memory) -> Instruction { return Instruction{mnemonic = .EVLWHOS, operand_count = 2, length = 4, ops = {op_reg(dst), op_mem(addr), {}, {}}} } -emit_evlwhos_r_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append(instructions, inst_evlwhos_r_mem(dst, addr)) } +emit_evlwhos_r_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append_elem(instructions, inst_evlwhos_r_mem(dst, addr)) } inst_evlwhex_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVLWHEX, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evlwhex_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evlwhex_r_r_r(dst, src, src2)) } +emit_evlwhex_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evlwhex_r_r_r(dst, src, src2)) } inst_evstwwe_r_mem :: #force_inline proc "contextless" (dst: Register, addr: Memory) -> Instruction { return Instruction{mnemonic = .EVSTWWE, operand_count = 2, length = 4, ops = {op_reg(dst), op_mem(addr), {}, {}}} } -emit_evstwwe_r_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append(instructions, inst_evstwwe_r_mem(dst, addr)) } +emit_evstwwe_r_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append_elem(instructions, inst_evstwwe_r_mem(dst, addr)) } inst_evstwwo_r_mem :: #force_inline proc "contextless" (dst: Register, addr: Memory) -> Instruction { return Instruction{mnemonic = .EVSTWWO, operand_count = 2, length = 4, ops = {op_reg(dst), op_mem(addr), {}, {}}} } -emit_evstwwo_r_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append(instructions, inst_evstwwo_r_mem(dst, addr)) } +emit_evstwwo_r_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append_elem(instructions, inst_evstwwo_r_mem(dst, addr)) } inst_evstwhe_r_mem :: #force_inline proc "contextless" (dst: Register, addr: Memory) -> Instruction { return Instruction{mnemonic = .EVSTWHE, operand_count = 2, length = 4, ops = {op_reg(dst), op_mem(addr), {}, {}}} } -emit_evstwhe_r_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append(instructions, inst_evstwhe_r_mem(dst, addr)) } +emit_evstwhe_r_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append_elem(instructions, inst_evstwhe_r_mem(dst, addr)) } inst_evstwho_r_mem :: #force_inline proc "contextless" (dst: Register, addr: Memory) -> Instruction { return Instruction{mnemonic = .EVSTWHO, operand_count = 2, length = 4, ops = {op_reg(dst), op_mem(addr), {}, {}}} } -emit_evstwho_r_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append(instructions, inst_evstwho_r_mem(dst, addr)) } +emit_evstwho_r_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append_elem(instructions, inst_evstwho_r_mem(dst, addr)) } inst_evstwhex_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVSTWHEX, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evstwhex_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evstwhex_r_r_r(dst, src, src2)) } +emit_evstwhex_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evstwhex_r_r_r(dst, src, src2)) } inst_evfsadd_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVFSADD, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evfsadd_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evfsadd_r_r_r(dst, src, src2)) } +emit_evfsadd_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evfsadd_r_r_r(dst, src, src2)) } inst_evfssub_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVFSSUB, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evfssub_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evfssub_r_r_r(dst, src, src2)) } +emit_evfssub_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evfssub_r_r_r(dst, src, src2)) } inst_evfsabs_r_r :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .EVFSABS, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_evfsabs_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_evfsabs_r_r(dst, src)) } +emit_evfsabs_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_evfsabs_r_r(dst, src)) } inst_evfsnabs_r_r :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .EVFSNABS, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_evfsnabs_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_evfsnabs_r_r(dst, src)) } +emit_evfsnabs_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_evfsnabs_r_r(dst, src)) } inst_evfsneg_r_r :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .EVFSNEG, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_evfsneg_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_evfsneg_r_r(dst, src)) } +emit_evfsneg_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_evfsneg_r_r(dst, src)) } inst_evfsmul_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVFSMUL, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evfsmul_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evfsmul_r_r_r(dst, src, src2)) } +emit_evfsmul_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evfsmul_r_r_r(dst, src, src2)) } inst_evfsdiv_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVFSDIV, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evfsdiv_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evfsdiv_r_r_r(dst, src, src2)) } +emit_evfsdiv_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evfsdiv_r_r_r(dst, src, src2)) } inst_evfscmpgt_crf_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVFSCMPGT, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evfscmpgt_crf_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evfscmpgt_crf_r_r(dst, src, src2)) } +emit_evfscmpgt_crf_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evfscmpgt_crf_r_r(dst, src, src2)) } inst_evfscmplt_crf_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVFSCMPLT, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evfscmplt_crf_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evfscmplt_crf_r_r(dst, src, src2)) } +emit_evfscmplt_crf_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evfscmplt_crf_r_r(dst, src, src2)) } inst_evfscmpeq_crf_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVFSCMPEQ, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evfscmpeq_crf_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evfscmpeq_crf_r_r(dst, src, src2)) } +emit_evfscmpeq_crf_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evfscmpeq_crf_r_r(dst, src, src2)) } inst_evfststgt_crf_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVFSTSTGT, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evfststgt_crf_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evfststgt_crf_r_r(dst, src, src2)) } +emit_evfststgt_crf_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evfststgt_crf_r_r(dst, src, src2)) } inst_evfststlt_crf_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVFSTSTLT, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evfststlt_crf_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evfststlt_crf_r_r(dst, src, src2)) } +emit_evfststlt_crf_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evfststlt_crf_r_r(dst, src, src2)) } inst_evfststeq_crf_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVFSTSTEQ, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evfststeq_crf_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evfststeq_crf_r_r(dst, src, src2)) } +emit_evfststeq_crf_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evfststeq_crf_r_r(dst, src, src2)) } inst_evfscfui_r_r :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .EVFSCFUI, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_evfscfui_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_evfscfui_r_r(dst, src)) } +emit_evfscfui_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_evfscfui_r_r(dst, src)) } inst_evfscfsi_r_r :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .EVFSCFSI, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_evfscfsi_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_evfscfsi_r_r(dst, src)) } +emit_evfscfsi_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_evfscfsi_r_r(dst, src)) } inst_evfscfuf_r_r :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .EVFSCFUF, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_evfscfuf_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_evfscfuf_r_r(dst, src)) } +emit_evfscfuf_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_evfscfuf_r_r(dst, src)) } inst_evfscfsf_r_r :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .EVFSCFSF, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_evfscfsf_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_evfscfsf_r_r(dst, src)) } +emit_evfscfsf_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_evfscfsf_r_r(dst, src)) } inst_evfsctui_r_r :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .EVFSCTUI, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_evfsctui_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_evfsctui_r_r(dst, src)) } +emit_evfsctui_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_evfsctui_r_r(dst, src)) } inst_evfsctsi_r_r :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .EVFSCTSI, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_evfsctsi_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_evfsctsi_r_r(dst, src)) } +emit_evfsctsi_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_evfsctsi_r_r(dst, src)) } inst_evfsctuf_r_r :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .EVFSCTUF, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_evfsctuf_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_evfsctuf_r_r(dst, src)) } +emit_evfsctuf_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_evfsctuf_r_r(dst, src)) } inst_evfsctsf_r_r :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .EVFSCTSF, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_evfsctsf_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_evfsctsf_r_r(dst, src)) } +emit_evfsctsf_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_evfsctsf_r_r(dst, src)) } inst_evfsctuiz_r_r :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .EVFSCTUIZ, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_evfsctuiz_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_evfsctuiz_r_r(dst, src)) } +emit_evfsctuiz_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_evfsctuiz_r_r(dst, src)) } inst_evfsctsiz_r_r :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .EVFSCTSIZ, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_evfsctsiz_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_evfsctsiz_r_r(dst, src)) } +emit_evfsctsiz_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_evfsctsiz_r_r(dst, src)) } inst_efsadd_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EFSADD, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_efsadd_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_efsadd_r_r_r(dst, src, src2)) } +emit_efsadd_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_efsadd_r_r_r(dst, src, src2)) } inst_efssub_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EFSSUB, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_efssub_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_efssub_r_r_r(dst, src, src2)) } +emit_efssub_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_efssub_r_r_r(dst, src, src2)) } inst_efsabs_r_r :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .EFSABS, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_efsabs_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_efsabs_r_r(dst, src)) } +emit_efsabs_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_efsabs_r_r(dst, src)) } inst_efsnabs_r_r :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .EFSNABS, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_efsnabs_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_efsnabs_r_r(dst, src)) } +emit_efsnabs_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_efsnabs_r_r(dst, src)) } inst_efsneg_r_r :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .EFSNEG, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_efsneg_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_efsneg_r_r(dst, src)) } +emit_efsneg_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_efsneg_r_r(dst, src)) } inst_efsmul_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EFSMUL, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_efsmul_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_efsmul_r_r_r(dst, src, src2)) } +emit_efsmul_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_efsmul_r_r_r(dst, src, src2)) } inst_efsdiv_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EFSDIV, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_efsdiv_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_efsdiv_r_r_r(dst, src, src2)) } +emit_efsdiv_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_efsdiv_r_r_r(dst, src, src2)) } inst_efscmpgt_crf_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EFSCMPGT, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_efscmpgt_crf_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_efscmpgt_crf_r_r(dst, src, src2)) } +emit_efscmpgt_crf_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_efscmpgt_crf_r_r(dst, src, src2)) } inst_efscmplt_crf_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EFSCMPLT, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_efscmplt_crf_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_efscmplt_crf_r_r(dst, src, src2)) } +emit_efscmplt_crf_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_efscmplt_crf_r_r(dst, src, src2)) } inst_efscmpeq_crf_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EFSCMPEQ, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_efscmpeq_crf_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_efscmpeq_crf_r_r(dst, src, src2)) } +emit_efscmpeq_crf_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_efscmpeq_crf_r_r(dst, src, src2)) } inst_efststgt_crf_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EFSTSTGT, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_efststgt_crf_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_efststgt_crf_r_r(dst, src, src2)) } +emit_efststgt_crf_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_efststgt_crf_r_r(dst, src, src2)) } inst_efststlt_crf_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EFSTSTLT, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_efststlt_crf_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_efststlt_crf_r_r(dst, src, src2)) } +emit_efststlt_crf_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_efststlt_crf_r_r(dst, src, src2)) } inst_efststeq_crf_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EFSTSTEQ, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_efststeq_crf_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_efststeq_crf_r_r(dst, src, src2)) } +emit_efststeq_crf_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_efststeq_crf_r_r(dst, src, src2)) } inst_efscfui_r_r :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .EFSCFUI, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_efscfui_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_efscfui_r_r(dst, src)) } +emit_efscfui_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_efscfui_r_r(dst, src)) } inst_efscfsi_r_r :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .EFSCFSI, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_efscfsi_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_efscfsi_r_r(dst, src)) } +emit_efscfsi_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_efscfsi_r_r(dst, src)) } inst_efscfuf_r_r :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .EFSCFUF, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_efscfuf_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_efscfuf_r_r(dst, src)) } +emit_efscfuf_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_efscfuf_r_r(dst, src)) } inst_efscfsf_r_r :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .EFSCFSF, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_efscfsf_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_efscfsf_r_r(dst, src)) } +emit_efscfsf_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_efscfsf_r_r(dst, src)) } inst_efsctui_r_r :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .EFSCTUI, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_efsctui_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_efsctui_r_r(dst, src)) } +emit_efsctui_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_efsctui_r_r(dst, src)) } inst_efsctsi_r_r :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .EFSCTSI, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_efsctsi_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_efsctsi_r_r(dst, src)) } +emit_efsctsi_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_efsctsi_r_r(dst, src)) } inst_efsctuf_r_r :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .EFSCTUF, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_efsctuf_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_efsctuf_r_r(dst, src)) } +emit_efsctuf_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_efsctuf_r_r(dst, src)) } inst_efsctsf_r_r :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .EFSCTSF, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_efsctsf_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_efsctsf_r_r(dst, src)) } +emit_efsctsf_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_efsctsf_r_r(dst, src)) } inst_efsctuiz_r_r :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .EFSCTUIZ, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_efsctuiz_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_efsctuiz_r_r(dst, src)) } +emit_efsctuiz_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_efsctuiz_r_r(dst, src)) } inst_efsctsiz_r_r :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .EFSCTSIZ, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_efsctsiz_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_efsctsiz_r_r(dst, src)) } +emit_efsctsiz_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_efsctsiz_r_r(dst, src)) } inst_efscfd_r_r :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .EFSCFD, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_efscfd_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_efscfd_r_r(dst, src)) } +emit_efscfd_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_efscfd_r_r(dst, src)) } inst_efdadd_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EFDADD, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_efdadd_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_efdadd_r_r_r(dst, src, src2)) } +emit_efdadd_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_efdadd_r_r_r(dst, src, src2)) } inst_efdsub_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EFDSUB, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_efdsub_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_efdsub_r_r_r(dst, src, src2)) } +emit_efdsub_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_efdsub_r_r_r(dst, src, src2)) } inst_efdabs_r_r :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .EFDABS, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_efdabs_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_efdabs_r_r(dst, src)) } +emit_efdabs_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_efdabs_r_r(dst, src)) } inst_efdnabs_r_r :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .EFDNABS, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_efdnabs_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_efdnabs_r_r(dst, src)) } +emit_efdnabs_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_efdnabs_r_r(dst, src)) } inst_efdneg_r_r :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .EFDNEG, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_efdneg_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_efdneg_r_r(dst, src)) } +emit_efdneg_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_efdneg_r_r(dst, src)) } inst_efdmul_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EFDMUL, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_efdmul_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_efdmul_r_r_r(dst, src, src2)) } +emit_efdmul_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_efdmul_r_r_r(dst, src, src2)) } inst_efddiv_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EFDDIV, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_efddiv_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_efddiv_r_r_r(dst, src, src2)) } +emit_efddiv_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_efddiv_r_r_r(dst, src, src2)) } inst_efdcmpgt_crf_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EFDCMPGT, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_efdcmpgt_crf_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_efdcmpgt_crf_r_r(dst, src, src2)) } +emit_efdcmpgt_crf_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_efdcmpgt_crf_r_r(dst, src, src2)) } inst_efdcmplt_crf_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EFDCMPLT, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_efdcmplt_crf_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_efdcmplt_crf_r_r(dst, src, src2)) } +emit_efdcmplt_crf_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_efdcmplt_crf_r_r(dst, src, src2)) } inst_efdcmpeq_crf_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EFDCMPEQ, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_efdcmpeq_crf_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_efdcmpeq_crf_r_r(dst, src, src2)) } +emit_efdcmpeq_crf_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_efdcmpeq_crf_r_r(dst, src, src2)) } inst_efdtstgt_crf_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EFDTSTGT, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_efdtstgt_crf_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_efdtstgt_crf_r_r(dst, src, src2)) } +emit_efdtstgt_crf_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_efdtstgt_crf_r_r(dst, src, src2)) } inst_efdtstlt_crf_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EFDTSTLT, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_efdtstlt_crf_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_efdtstlt_crf_r_r(dst, src, src2)) } +emit_efdtstlt_crf_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_efdtstlt_crf_r_r(dst, src, src2)) } inst_efdtsteq_crf_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EFDTSTEQ, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_efdtsteq_crf_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_efdtsteq_crf_r_r(dst, src, src2)) } +emit_efdtsteq_crf_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_efdtsteq_crf_r_r(dst, src, src2)) } inst_efdcfui_r_r :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .EFDCFUI, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_efdcfui_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_efdcfui_r_r(dst, src)) } +emit_efdcfui_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_efdcfui_r_r(dst, src)) } inst_efdcfsi_r_r :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .EFDCFSI, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_efdcfsi_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_efdcfsi_r_r(dst, src)) } +emit_efdcfsi_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_efdcfsi_r_r(dst, src)) } inst_efdcfuf_r_r :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .EFDCFUF, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_efdcfuf_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_efdcfuf_r_r(dst, src)) } +emit_efdcfuf_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_efdcfuf_r_r(dst, src)) } inst_efdcfsf_r_r :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .EFDCFSF, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_efdcfsf_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_efdcfsf_r_r(dst, src)) } +emit_efdcfsf_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_efdcfsf_r_r(dst, src)) } inst_efdctui_r_r :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .EFDCTUI, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_efdctui_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_efdctui_r_r(dst, src)) } +emit_efdctui_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_efdctui_r_r(dst, src)) } inst_efdctsi_r_r :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .EFDCTSI, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_efdctsi_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_efdctsi_r_r(dst, src)) } +emit_efdctsi_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_efdctsi_r_r(dst, src)) } inst_efdctuf_r_r :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .EFDCTUF, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_efdctuf_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_efdctuf_r_r(dst, src)) } +emit_efdctuf_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_efdctuf_r_r(dst, src)) } inst_efdctsf_r_r :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .EFDCTSF, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_efdctsf_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_efdctsf_r_r(dst, src)) } +emit_efdctsf_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_efdctsf_r_r(dst, src)) } inst_efdctuiz_r_r :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .EFDCTUIZ, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_efdctuiz_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_efdctuiz_r_r(dst, src)) } +emit_efdctuiz_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_efdctuiz_r_r(dst, src)) } inst_efdctsiz_r_r :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .EFDCTSIZ, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_efdctsiz_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_efdctsiz_r_r(dst, src)) } +emit_efdctsiz_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_efdctsiz_r_r(dst, src)) } inst_efdcfs_r_r :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .EFDCFS, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_efdcfs_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_efdcfs_r_r(dst, src)) } +emit_efdcfs_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_efdcfs_r_r(dst, src)) } inst_efdcfsid_r_r :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .EFDCFSID, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_efdcfsid_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_efdcfsid_r_r(dst, src)) } +emit_efdcfsid_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_efdcfsid_r_r(dst, src)) } inst_efdcfuid_r_r :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .EFDCFUID, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_efdcfuid_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_efdcfuid_r_r(dst, src)) } +emit_efdcfuid_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_efdcfuid_r_r(dst, src)) } inst_efdctsidz_r_r :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .EFDCTSIDZ, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_efdctsidz_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_efdctsidz_r_r(dst, src)) } +emit_efdctsidz_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_efdctsidz_r_r(dst, src)) } inst_efdctuidz_r_r :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .EFDCTUIDZ, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_efdctuidz_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_efdctuidz_r_r(dst, src)) } +emit_efdctuidz_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_efdctuidz_r_r(dst, src)) } inst_evmhossf_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVMHOSSF, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evmhossf_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evmhossf_r_r_r(dst, src, src2)) } +emit_evmhossf_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evmhossf_r_r_r(dst, src, src2)) } inst_evmhossfa_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVMHOSSFA, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evmhossfa_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evmhossfa_r_r_r(dst, src, src2)) } +emit_evmhossfa_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evmhossfa_r_r_r(dst, src, src2)) } inst_evmhossfaaw_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVMHOSSFAAW, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evmhossfaaw_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evmhossfaaw_r_r_r(dst, src, src2)) } +emit_evmhossfaaw_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evmhossfaaw_r_r_r(dst, src, src2)) } inst_evmhossfanw_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVMHOSSFANW, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evmhossfanw_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evmhossfanw_r_r_r(dst, src, src2)) } +emit_evmhossfanw_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evmhossfanw_r_r_r(dst, src, src2)) } inst_evmhossiaaw_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVMHOSSIAAW, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evmhossiaaw_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evmhossiaaw_r_r_r(dst, src, src2)) } +emit_evmhossiaaw_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evmhossiaaw_r_r_r(dst, src, src2)) } inst_evmhossianw_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVMHOSSIANW, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evmhossianw_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evmhossianw_r_r_r(dst, src, src2)) } +emit_evmhossianw_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evmhossianw_r_r_r(dst, src, src2)) } inst_evmhosmf_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVMHOSMF, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evmhosmf_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evmhosmf_r_r_r(dst, src, src2)) } +emit_evmhosmf_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evmhosmf_r_r_r(dst, src, src2)) } inst_evmhosmfa_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVMHOSMFA, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evmhosmfa_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evmhosmfa_r_r_r(dst, src, src2)) } +emit_evmhosmfa_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evmhosmfa_r_r_r(dst, src, src2)) } inst_evmhosmfaaw_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVMHOSMFAAW, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evmhosmfaaw_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evmhosmfaaw_r_r_r(dst, src, src2)) } +emit_evmhosmfaaw_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evmhosmfaaw_r_r_r(dst, src, src2)) } inst_evmhosmfanw_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVMHOSMFANW, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evmhosmfanw_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evmhosmfanw_r_r_r(dst, src, src2)) } +emit_evmhosmfanw_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evmhosmfanw_r_r_r(dst, src, src2)) } inst_evmhosmi_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVMHOSMI, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evmhosmi_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evmhosmi_r_r_r(dst, src, src2)) } +emit_evmhosmi_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evmhosmi_r_r_r(dst, src, src2)) } inst_evmhosmia_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVMHOSMIA, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evmhosmia_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evmhosmia_r_r_r(dst, src, src2)) } +emit_evmhosmia_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evmhosmia_r_r_r(dst, src, src2)) } inst_evmhosmiaaw_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVMHOSMIAAW, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evmhosmiaaw_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evmhosmiaaw_r_r_r(dst, src, src2)) } +emit_evmhosmiaaw_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evmhosmiaaw_r_r_r(dst, src, src2)) } inst_evmhosmianw_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVMHOSMIANW, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evmhosmianw_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evmhosmianw_r_r_r(dst, src, src2)) } +emit_evmhosmianw_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evmhosmianw_r_r_r(dst, src, src2)) } inst_evmhesmf_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVMHESMF, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evmhesmf_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evmhesmf_r_r_r(dst, src, src2)) } +emit_evmhesmf_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evmhesmf_r_r_r(dst, src, src2)) } inst_evmhesmfa_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVMHESMFA, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evmhesmfa_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evmhesmfa_r_r_r(dst, src, src2)) } +emit_evmhesmfa_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evmhesmfa_r_r_r(dst, src, src2)) } inst_evmhesmfaaw_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVMHESMFAAW, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evmhesmfaaw_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evmhesmfaaw_r_r_r(dst, src, src2)) } +emit_evmhesmfaaw_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evmhesmfaaw_r_r_r(dst, src, src2)) } inst_evmhesmfanw_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVMHESMFANW, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evmhesmfanw_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evmhesmfanw_r_r_r(dst, src, src2)) } +emit_evmhesmfanw_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evmhesmfanw_r_r_r(dst, src, src2)) } inst_evmhesmi_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVMHESMI, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evmhesmi_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evmhesmi_r_r_r(dst, src, src2)) } +emit_evmhesmi_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evmhesmi_r_r_r(dst, src, src2)) } inst_evmhesmia_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVMHESMIA, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evmhesmia_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evmhesmia_r_r_r(dst, src, src2)) } +emit_evmhesmia_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evmhesmia_r_r_r(dst, src, src2)) } inst_evmhesmiaaw_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVMHESMIAAW, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evmhesmiaaw_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evmhesmiaaw_r_r_r(dst, src, src2)) } +emit_evmhesmiaaw_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evmhesmiaaw_r_r_r(dst, src, src2)) } inst_evmhesmianw_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVMHESMIANW, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evmhesmianw_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evmhesmianw_r_r_r(dst, src, src2)) } +emit_evmhesmianw_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evmhesmianw_r_r_r(dst, src, src2)) } inst_evmhessf_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVMHESSF, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evmhessf_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evmhessf_r_r_r(dst, src, src2)) } +emit_evmhessf_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evmhessf_r_r_r(dst, src, src2)) } inst_evmhessfa_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVMHESSFA, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evmhessfa_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evmhessfa_r_r_r(dst, src, src2)) } +emit_evmhessfa_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evmhessfa_r_r_r(dst, src, src2)) } inst_evmhessfaaw_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVMHESSFAAW, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evmhessfaaw_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evmhessfaaw_r_r_r(dst, src, src2)) } +emit_evmhessfaaw_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evmhessfaaw_r_r_r(dst, src, src2)) } inst_evmhessfanw_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVMHESSFANW, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evmhessfanw_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evmhessfanw_r_r_r(dst, src, src2)) } +emit_evmhessfanw_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evmhessfanw_r_r_r(dst, src, src2)) } inst_evmhessiaaw_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVMHESSIAAW, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evmhessiaaw_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evmhessiaaw_r_r_r(dst, src, src2)) } +emit_evmhessiaaw_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evmhessiaaw_r_r_r(dst, src, src2)) } inst_evmhessianw_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVMHESSIANW, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evmhessianw_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evmhessianw_r_r_r(dst, src, src2)) } +emit_evmhessianw_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evmhessianw_r_r_r(dst, src, src2)) } inst_evmheumi_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVMHEUMI, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evmheumi_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evmheumi_r_r_r(dst, src, src2)) } +emit_evmheumi_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evmheumi_r_r_r(dst, src, src2)) } inst_evmheumia_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVMHEUMIA, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evmheumia_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evmheumia_r_r_r(dst, src, src2)) } +emit_evmheumia_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evmheumia_r_r_r(dst, src, src2)) } inst_evmheumiaaw_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVMHEUMIAAW, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evmheumiaaw_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evmheumiaaw_r_r_r(dst, src, src2)) } +emit_evmheumiaaw_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evmheumiaaw_r_r_r(dst, src, src2)) } inst_evmheumianw_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVMHEUMIANW, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evmheumianw_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evmheumianw_r_r_r(dst, src, src2)) } +emit_evmheumianw_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evmheumianw_r_r_r(dst, src, src2)) } inst_evmheusiaaw_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVMHEUSIAAW, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evmheusiaaw_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evmheusiaaw_r_r_r(dst, src, src2)) } +emit_evmheusiaaw_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evmheusiaaw_r_r_r(dst, src, src2)) } inst_evmheusianw_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVMHEUSIANW, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evmheusianw_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evmheusianw_r_r_r(dst, src, src2)) } +emit_evmheusianw_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evmheusianw_r_r_r(dst, src, src2)) } inst_evmhoumi_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVMHOUMI, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evmhoumi_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evmhoumi_r_r_r(dst, src, src2)) } +emit_evmhoumi_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evmhoumi_r_r_r(dst, src, src2)) } inst_evmhoumia_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVMHOUMIA, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evmhoumia_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evmhoumia_r_r_r(dst, src, src2)) } +emit_evmhoumia_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evmhoumia_r_r_r(dst, src, src2)) } inst_evmhoumiaaw_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVMHOUMIAAW, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evmhoumiaaw_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evmhoumiaaw_r_r_r(dst, src, src2)) } +emit_evmhoumiaaw_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evmhoumiaaw_r_r_r(dst, src, src2)) } inst_evmhoumianw_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVMHOUMIANW, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evmhoumianw_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evmhoumianw_r_r_r(dst, src, src2)) } +emit_evmhoumianw_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evmhoumianw_r_r_r(dst, src, src2)) } inst_evmhousiaaw_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVMHOUSIAAW, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evmhousiaaw_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evmhousiaaw_r_r_r(dst, src, src2)) } +emit_evmhousiaaw_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evmhousiaaw_r_r_r(dst, src, src2)) } inst_evmhousianw_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVMHOUSIANW, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evmhousianw_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evmhousianw_r_r_r(dst, src, src2)) } +emit_evmhousianw_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evmhousianw_r_r_r(dst, src, src2)) } inst_evmhogsmfaa_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVMHOGSMFAA, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evmhogsmfaa_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evmhogsmfaa_r_r_r(dst, src, src2)) } +emit_evmhogsmfaa_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evmhogsmfaa_r_r_r(dst, src, src2)) } inst_evmhogsmfan_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVMHOGSMFAN, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evmhogsmfan_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evmhogsmfan_r_r_r(dst, src, src2)) } +emit_evmhogsmfan_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evmhogsmfan_r_r_r(dst, src, src2)) } inst_evmhogsmiaa_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVMHOGSMIAA, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evmhogsmiaa_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evmhogsmiaa_r_r_r(dst, src, src2)) } +emit_evmhogsmiaa_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evmhogsmiaa_r_r_r(dst, src, src2)) } inst_evmhogsmian_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVMHOGSMIAN, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evmhogsmian_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evmhogsmian_r_r_r(dst, src, src2)) } +emit_evmhogsmian_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evmhogsmian_r_r_r(dst, src, src2)) } inst_evmhogumiaa_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVMHOGUMIAA, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evmhogumiaa_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evmhogumiaa_r_r_r(dst, src, src2)) } +emit_evmhogumiaa_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evmhogumiaa_r_r_r(dst, src, src2)) } inst_evmhogumian_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVMHOGUMIAN, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evmhogumian_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evmhogumian_r_r_r(dst, src, src2)) } +emit_evmhogumian_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evmhogumian_r_r_r(dst, src, src2)) } inst_evmhegsmfaa_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVMHEGSMFAA, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evmhegsmfaa_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evmhegsmfaa_r_r_r(dst, src, src2)) } +emit_evmhegsmfaa_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evmhegsmfaa_r_r_r(dst, src, src2)) } inst_evmhegsmfan_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVMHEGSMFAN, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evmhegsmfan_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evmhegsmfan_r_r_r(dst, src, src2)) } +emit_evmhegsmfan_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evmhegsmfan_r_r_r(dst, src, src2)) } inst_evmhegsmiaa_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVMHEGSMIAA, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evmhegsmiaa_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evmhegsmiaa_r_r_r(dst, src, src2)) } +emit_evmhegsmiaa_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evmhegsmiaa_r_r_r(dst, src, src2)) } inst_evmhegsmian_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVMHEGSMIAN, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evmhegsmian_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evmhegsmian_r_r_r(dst, src, src2)) } +emit_evmhegsmian_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evmhegsmian_r_r_r(dst, src, src2)) } inst_evmhegumiaa_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVMHEGUMIAA, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evmhegumiaa_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evmhegumiaa_r_r_r(dst, src, src2)) } +emit_evmhegumiaa_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evmhegumiaa_r_r_r(dst, src, src2)) } inst_evmhegumian_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVMHEGUMIAN, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evmhegumian_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evmhegumian_r_r_r(dst, src, src2)) } +emit_evmhegumian_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evmhegumian_r_r_r(dst, src, src2)) } inst_evmwhssf_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVMWHSSF, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evmwhssf_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evmwhssf_r_r_r(dst, src, src2)) } +emit_evmwhssf_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evmwhssf_r_r_r(dst, src, src2)) } inst_evmwhssfa_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVMWHSSFA, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evmwhssfa_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evmwhssfa_r_r_r(dst, src, src2)) } +emit_evmwhssfa_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evmwhssfa_r_r_r(dst, src, src2)) } inst_evmwlssiaaw_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVMWLSSIAAW, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evmwlssiaaw_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evmwlssiaaw_r_r_r(dst, src, src2)) } +emit_evmwlssiaaw_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evmwlssiaaw_r_r_r(dst, src, src2)) } inst_evmwlssianw_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVMWLSSIANW, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evmwlssianw_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evmwlssianw_r_r_r(dst, src, src2)) } +emit_evmwlssianw_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evmwlssianw_r_r_r(dst, src, src2)) } inst_evmwhsmf_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVMWHSMF, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evmwhsmf_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evmwhsmf_r_r_r(dst, src, src2)) } +emit_evmwhsmf_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evmwhsmf_r_r_r(dst, src, src2)) } inst_evmwhsmfa_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVMWHSMFA, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evmwhsmfa_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evmwhsmfa_r_r_r(dst, src, src2)) } +emit_evmwhsmfa_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evmwhsmfa_r_r_r(dst, src, src2)) } inst_evmwhsmi_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVMWHSMI, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evmwhsmi_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evmwhsmi_r_r_r(dst, src, src2)) } +emit_evmwhsmi_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evmwhsmi_r_r_r(dst, src, src2)) } inst_evmwhsmia_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVMWHSMIA, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evmwhsmia_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evmwhsmia_r_r_r(dst, src, src2)) } +emit_evmwhsmia_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evmwhsmia_r_r_r(dst, src, src2)) } inst_evmwhumi_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVMWHUMI, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evmwhumi_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evmwhumi_r_r_r(dst, src, src2)) } +emit_evmwhumi_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evmwhumi_r_r_r(dst, src, src2)) } inst_evmwhumia_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVMWHUMIA, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evmwhumia_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evmwhumia_r_r_r(dst, src, src2)) } +emit_evmwhumia_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evmwhumia_r_r_r(dst, src, src2)) } inst_evmwlsmiaaw_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVMWLSMIAAW, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evmwlsmiaaw_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evmwlsmiaaw_r_r_r(dst, src, src2)) } +emit_evmwlsmiaaw_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evmwlsmiaaw_r_r_r(dst, src, src2)) } inst_evmwlsmianw_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVMWLSMIANW, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evmwlsmianw_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evmwlsmianw_r_r_r(dst, src, src2)) } +emit_evmwlsmianw_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evmwlsmianw_r_r_r(dst, src, src2)) } inst_evmwlumi_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVMWLUMI, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evmwlumi_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evmwlumi_r_r_r(dst, src, src2)) } +emit_evmwlumi_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evmwlumi_r_r_r(dst, src, src2)) } inst_evmwlumia_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVMWLUMIA, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evmwlumia_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evmwlumia_r_r_r(dst, src, src2)) } +emit_evmwlumia_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evmwlumia_r_r_r(dst, src, src2)) } inst_evmwlumiaaw_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVMWLUMIAAW, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evmwlumiaaw_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evmwlumiaaw_r_r_r(dst, src, src2)) } +emit_evmwlumiaaw_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evmwlumiaaw_r_r_r(dst, src, src2)) } inst_evmwlumianw_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVMWLUMIANW, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evmwlumianw_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evmwlumianw_r_r_r(dst, src, src2)) } +emit_evmwlumianw_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evmwlumianw_r_r_r(dst, src, src2)) } inst_evmwlusiaaw_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVMWLUSIAAW, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evmwlusiaaw_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evmwlusiaaw_r_r_r(dst, src, src2)) } +emit_evmwlusiaaw_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evmwlusiaaw_r_r_r(dst, src, src2)) } inst_evmwlusianw_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVMWLUSIANW, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evmwlusianw_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evmwlusianw_r_r_r(dst, src, src2)) } +emit_evmwlusianw_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evmwlusianw_r_r_r(dst, src, src2)) } inst_evmwsmf_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVMWSMF, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evmwsmf_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evmwsmf_r_r_r(dst, src, src2)) } +emit_evmwsmf_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evmwsmf_r_r_r(dst, src, src2)) } inst_evmwsmfa_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVMWSMFA, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evmwsmfa_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evmwsmfa_r_r_r(dst, src, src2)) } +emit_evmwsmfa_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evmwsmfa_r_r_r(dst, src, src2)) } inst_evmwsmfaa_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVMWSMFAA, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evmwsmfaa_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evmwsmfaa_r_r_r(dst, src, src2)) } +emit_evmwsmfaa_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evmwsmfaa_r_r_r(dst, src, src2)) } inst_evmwsmfan_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVMWSMFAN, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evmwsmfan_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evmwsmfan_r_r_r(dst, src, src2)) } +emit_evmwsmfan_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evmwsmfan_r_r_r(dst, src, src2)) } inst_evmwsmi_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVMWSMI, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evmwsmi_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evmwsmi_r_r_r(dst, src, src2)) } +emit_evmwsmi_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evmwsmi_r_r_r(dst, src, src2)) } inst_evmwsmia_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVMWSMIA, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evmwsmia_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evmwsmia_r_r_r(dst, src, src2)) } +emit_evmwsmia_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evmwsmia_r_r_r(dst, src, src2)) } inst_evmwsmiaa_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVMWSMIAA, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evmwsmiaa_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evmwsmiaa_r_r_r(dst, src, src2)) } +emit_evmwsmiaa_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evmwsmiaa_r_r_r(dst, src, src2)) } inst_evmwsmian_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVMWSMIAN, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evmwsmian_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evmwsmian_r_r_r(dst, src, src2)) } +emit_evmwsmian_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evmwsmian_r_r_r(dst, src, src2)) } inst_evmwssf_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVMWSSF, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evmwssf_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evmwssf_r_r_r(dst, src, src2)) } +emit_evmwssf_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evmwssf_r_r_r(dst, src, src2)) } inst_evmwssfa_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVMWSSFA, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evmwssfa_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evmwssfa_r_r_r(dst, src, src2)) } +emit_evmwssfa_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evmwssfa_r_r_r(dst, src, src2)) } inst_evmwssfaa_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVMWSSFAA, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evmwssfaa_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evmwssfaa_r_r_r(dst, src, src2)) } +emit_evmwssfaa_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evmwssfaa_r_r_r(dst, src, src2)) } inst_evmwssfan_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVMWSSFAN, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evmwssfan_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evmwssfan_r_r_r(dst, src, src2)) } +emit_evmwssfan_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evmwssfan_r_r_r(dst, src, src2)) } inst_evmwumi_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVMWUMI, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evmwumi_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evmwumi_r_r_r(dst, src, src2)) } +emit_evmwumi_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evmwumi_r_r_r(dst, src, src2)) } inst_evmwumia_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVMWUMIA, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evmwumia_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evmwumia_r_r_r(dst, src, src2)) } +emit_evmwumia_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evmwumia_r_r_r(dst, src, src2)) } inst_evmwumiaa_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVMWUMIAA, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evmwumiaa_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evmwumiaa_r_r_r(dst, src, src2)) } +emit_evmwumiaa_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evmwumiaa_r_r_r(dst, src, src2)) } inst_evmwumian_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVMWUMIAN, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evmwumian_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evmwumian_r_r_r(dst, src, src2)) } +emit_evmwumian_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evmwumian_r_r_r(dst, src, src2)) } inst_brinc_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .BRINC, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_brinc_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_brinc_r_r_r(dst, src, src2)) } +emit_brinc_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_brinc_r_r_r(dst, src, src2)) } inst_evlwhsplatx_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVLWHSPLATX, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evlwhsplatx_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evlwhsplatx_r_r_r(dst, src, src2)) } +emit_evlwhsplatx_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evlwhsplatx_r_r_r(dst, src, src2)) } inst_evlwwsplatx_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVLWWSPLATX, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evlwwsplatx_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evlwwsplatx_r_r_r(dst, src, src2)) } +emit_evlwwsplatx_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evlwwsplatx_r_r_r(dst, src, src2)) } inst_evlhhesplatx_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVLHHESPLATX, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evlhhesplatx_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evlhhesplatx_r_r_r(dst, src, src2)) } +emit_evlhhesplatx_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evlhhesplatx_r_r_r(dst, src, src2)) } inst_evlhhossplatx_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVLHHOSSPLATX, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evlhhossplatx_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evlhhossplatx_r_r_r(dst, src, src2)) } +emit_evlhhossplatx_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evlhhossplatx_r_r_r(dst, src, src2)) } inst_evlhhousplatx_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVLHHOUSPLATX, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evlhhousplatx_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evlhhousplatx_r_r_r(dst, src, src2)) } +emit_evlhhousplatx_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evlhhousplatx_r_r_r(dst, src, src2)) } inst_evlwhoux_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVLWHOUX, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evlwhoux_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evlwhoux_r_r_r(dst, src, src2)) } +emit_evlwhoux_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evlwhoux_r_r_r(dst, src, src2)) } inst_evlwhosx_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVLWHOSX, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evlwhosx_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evlwhosx_r_r_r(dst, src, src2)) } +emit_evlwhosx_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evlwhosx_r_r_r(dst, src, src2)) } inst_evstwwex_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVSTWWEX, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evstwwex_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evstwwex_r_r_r(dst, src, src2)) } +emit_evstwwex_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evstwwex_r_r_r(dst, src, src2)) } inst_evstwwox_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVSTWWOX, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evstwwox_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evstwwox_r_r_r(dst, src, src2)) } +emit_evstwwox_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evstwwox_r_r_r(dst, src, src2)) } inst_evstwhox_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVSTWHOX, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evstwhox_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evstwhox_r_r_r(dst, src, src2)) } +emit_evstwhox_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evstwhox_r_r_r(dst, src, src2)) } inst_icbtls_imm_r_r :: #force_inline proc "contextless" (imm: i64, dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .ICBTLS, operand_count = 3, length = 4, ops = {op_imm(imm), op_reg(dst), op_reg(src), {}}} } -emit_icbtls_imm_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, dst: Register, src: Register) { append(instructions, inst_icbtls_imm_r_r(imm, dst, src)) } +emit_icbtls_imm_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, dst: Register, src: Register) { append_elem(instructions, inst_icbtls_imm_r_r(imm, dst, src)) } inst_icblc_imm_r_r :: #force_inline proc "contextless" (imm: i64, dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .ICBLC, operand_count = 3, length = 4, ops = {op_imm(imm), op_reg(dst), op_reg(src), {}}} } -emit_icblc_imm_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, dst: Register, src: Register) { append(instructions, inst_icblc_imm_r_r(imm, dst, src)) } +emit_icblc_imm_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, dst: Register, src: Register) { append_elem(instructions, inst_icblc_imm_r_r(imm, dst, src)) } inst_dcbst_r_r :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .DCBST, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_dcbst_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_dcbst_r_r(dst, src)) } +emit_dcbst_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_dcbst_r_r(dst, src)) } inst_mbar_imm :: #force_inline proc "contextless" (imm: i64) -> Instruction { return Instruction{mnemonic = .MBAR, operand_count = 1, length = 4, ops = {op_imm(imm), {}, {}, {}}} } -emit_mbar_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64) { append(instructions, inst_mbar_imm(imm)) } +emit_mbar_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64) { append_elem(instructions, inst_mbar_imm(imm)) } inst_mtdcr_r_r :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .MTDCR, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_mtdcr_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_mtdcr_r_r(dst, src)) } +emit_mtdcr_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_mtdcr_r_r(dst, src)) } inst_mfdcr_r_r :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .MFDCR, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_mfdcr_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_mfdcr_r_r(dst, src)) } +emit_mfdcr_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_mfdcr_r_r(dst, src)) } inst_tlbilxva_r_r :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .TLBILXVA, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_tlbilxva_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_tlbilxva_r_r(dst, src)) } +emit_tlbilxva_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_tlbilxva_r_r(dst, src)) } inst_xscvsxdsp_vs_vs :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .XSCVSXDSP, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_xscvsxdsp_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_xscvsxdsp_vs_vs(dst, src)) } +emit_xscvsxdsp_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_xscvsxdsp_vs_vs(dst, src)) } inst_xscvuxdsp_vs_vs :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .XSCVUXDSP, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_xscvuxdsp_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_xscvuxdsp_vs_vs(dst, src)) } +emit_xscvuxdsp_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_xscvuxdsp_vs_vs(dst, src)) } inst_xxbrh_vs_vs :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .XXBRH, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_xxbrh_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_xxbrh_vs_vs(dst, src)) } +emit_xxbrh_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_xxbrh_vs_vs(dst, src)) } inst_xxbrw_vs_vs :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .XXBRW, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_xxbrw_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_xxbrw_vs_vs(dst, src)) } +emit_xxbrw_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_xxbrw_vs_vs(dst, src)) } inst_xxbrd_vs_vs :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .XXBRD, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_xxbrd_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_xxbrd_vs_vs(dst, src)) } +emit_xxbrd_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_xxbrd_vs_vs(dst, src)) } inst_xxbrq_vs_vs :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .XXBRQ, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_xxbrq_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_xxbrq_vs_vs(dst, src)) } +emit_xxbrq_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_xxbrq_vs_vs(dst, src)) } inst_pdepd_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .PDEPD, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_pdepd_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_pdepd_r_r_r(dst, src, src2)) } +emit_pdepd_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_pdepd_r_r_r(dst, src, src2)) } inst_pextd_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .PEXTD, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_pextd_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_pextd_r_r_r(dst, src, src2)) } +emit_pextd_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_pextd_r_r_r(dst, src, src2)) } inst_cntlzdm_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .CNTLZDM, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_cntlzdm_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_cntlzdm_r_r_r(dst, src, src2)) } +emit_cntlzdm_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_cntlzdm_r_r_r(dst, src, src2)) } inst_cnttzdm_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .CNTTZDM, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_cnttzdm_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_cnttzdm_r_r_r(dst, src, src2)) } +emit_cnttzdm_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_cnttzdm_r_r_r(dst, src, src2)) } inst_cfuged_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .CFUGED, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_cfuged_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_cfuged_r_r_r(dst, src, src2)) } +emit_cfuged_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_cfuged_r_r_r(dst, src, src2)) } inst_brh_r_r :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .BRH, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_brh_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_brh_r_r(dst, src)) } +emit_brh_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_brh_r_r(dst, src)) } inst_brw_r_r :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .BRW, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_brw_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_brw_r_r(dst, src)) } +emit_brw_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_brw_r_r(dst, src)) } inst_brd_r_r :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .BRD, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_brd_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_brd_r_r(dst, src)) } +emit_brd_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_brd_r_r(dst, src)) } inst_divweo_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .DIVWEO, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_divweo_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_divweo_r_r_r(dst, src, src2)) } +emit_divweo_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_divweo_r_r_r(dst, src, src2)) } inst_divweuo_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .DIVWEUO, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_divweuo_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_divweuo_r_r_r(dst, src, src2)) } +emit_divweuo_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_divweuo_r_r_r(dst, src, src2)) } inst_divdeo_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .DIVDEO, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_divdeo_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_divdeo_r_r_r(dst, src, src2)) } +emit_divdeo_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_divdeo_r_r_r(dst, src, src2)) } inst_divdeuo_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .DIVDEUO, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_divdeuo_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_divdeuo_r_r_r(dst, src, src2)) } +emit_divdeuo_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_divdeuo_r_r_r(dst, src, src2)) } inst_xvtlsbb_crf_vs :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .XVTLSBB, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_xvtlsbb_crf_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_xvtlsbb_crf_vs(dst, src)) } +emit_xvtlsbb_crf_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_xvtlsbb_crf_vs(dst, src)) } inst_xvcvhpsp_vs_vs :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .XVCVHPSP, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_xvcvhpsp_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_xvcvhpsp_vs_vs(dst, src)) } +emit_xvcvhpsp_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_xvcvhpsp_vs_vs(dst, src)) } inst_xvcvsphp_vs_vs :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .XVCVSPHP, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_xvcvsphp_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_xvcvsphp_vs_vs(dst, src)) } +emit_xvcvsphp_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_xvcvsphp_vs_vs(dst, src)) } inst_xxpermr_vs_vs_vs :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .XXPERMR, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_xxpermr_vs_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_xxpermr_vs_vs_vs(dst, src, src2)) } +emit_xxpermr_vs_vs_vs :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_xxpermr_vs_vs_vs(dst, src, src2)) } inst_evfsmadd_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVFSMADD, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evfsmadd_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evfsmadd_r_r_r(dst, src, src2)) } +emit_evfsmadd_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evfsmadd_r_r_r(dst, src, src2)) } inst_evfsmsub_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVFSMSUB, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evfsmsub_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evfsmsub_r_r_r(dst, src, src2)) } +emit_evfsmsub_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evfsmsub_r_r_r(dst, src, src2)) } inst_evfsnmadd_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVFSNMADD, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evfsnmadd_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evfsnmadd_r_r_r(dst, src, src2)) } +emit_evfsnmadd_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evfsnmadd_r_r_r(dst, src, src2)) } inst_evfsnmsub_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVFSNMSUB, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evfsnmsub_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evfsnmsub_r_r_r(dst, src, src2)) } +emit_evfsnmsub_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evfsnmsub_r_r_r(dst, src, src2)) } inst_efsmadd_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EFSMADD, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_efsmadd_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_efsmadd_r_r_r(dst, src, src2)) } +emit_efsmadd_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_efsmadd_r_r_r(dst, src, src2)) } inst_efsmsub_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EFSMSUB, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_efsmsub_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_efsmsub_r_r_r(dst, src, src2)) } +emit_efsmsub_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_efsmsub_r_r_r(dst, src, src2)) } inst_efsnmadd_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EFSNMADD, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_efsnmadd_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_efsnmadd_r_r_r(dst, src, src2)) } +emit_efsnmadd_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_efsnmadd_r_r_r(dst, src, src2)) } inst_efsnmsub_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EFSNMSUB, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_efsnmsub_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_efsnmsub_r_r_r(dst, src, src2)) } +emit_efsnmsub_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_efsnmsub_r_r_r(dst, src, src2)) } inst_efdmadd_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EFDMADD, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_efdmadd_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_efdmadd_r_r_r(dst, src, src2)) } +emit_efdmadd_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_efdmadd_r_r_r(dst, src, src2)) } inst_efdmsub_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EFDMSUB, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_efdmsub_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_efdmsub_r_r_r(dst, src, src2)) } +emit_efdmsub_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_efdmsub_r_r_r(dst, src, src2)) } inst_efdnmadd_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EFDNMADD, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_efdnmadd_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_efdnmadd_r_r_r(dst, src, src2)) } +emit_efdnmadd_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_efdnmadd_r_r_r(dst, src, src2)) } inst_efdnmsub_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EFDNMSUB, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_efdnmsub_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_efdnmsub_r_r_r(dst, src, src2)) } +emit_efdnmsub_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_efdnmsub_r_r_r(dst, src, src2)) } inst_evfssqrt_r_r :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .EVFSSQRT, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_evfssqrt_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_evfssqrt_r_r(dst, src)) } +emit_evfssqrt_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_evfssqrt_r_r(dst, src)) } inst_evfsmax_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVFSMAX, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evfsmax_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evfsmax_r_r_r(dst, src, src2)) } +emit_evfsmax_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evfsmax_r_r_r(dst, src, src2)) } inst_evfsmin_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVFSMIN, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evfsmin_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evfsmin_r_r_r(dst, src, src2)) } +emit_evfsmin_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evfsmin_r_r_r(dst, src, src2)) } inst_evfscfh_r_r :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .EVFSCFH, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_evfscfh_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_evfscfh_r_r(dst, src)) } +emit_evfscfh_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_evfscfh_r_r(dst, src)) } inst_evfscth_r_r :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .EVFSCTH, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_evfscth_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_evfscth_r_r(dst, src)) } +emit_evfscth_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_evfscth_r_r(dst, src)) } inst_evfsaddsub_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVFSADDSUB, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evfsaddsub_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evfsaddsub_r_r_r(dst, src, src2)) } +emit_evfsaddsub_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evfsaddsub_r_r_r(dst, src, src2)) } inst_evfssubadd_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVFSSUBADD, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evfssubadd_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evfssubadd_r_r_r(dst, src, src2)) } +emit_evfssubadd_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evfssubadd_r_r_r(dst, src, src2)) } inst_evfssum_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVFSSUM, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evfssum_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evfssum_r_r_r(dst, src, src2)) } +emit_evfssum_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evfssum_r_r_r(dst, src, src2)) } inst_evfsdiff_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVFSDIFF, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evfsdiff_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evfsdiff_r_r_r(dst, src, src2)) } +emit_evfsdiff_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evfsdiff_r_r_r(dst, src, src2)) } inst_evfssumdiff_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVFSSUMDIFF, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evfssumdiff_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evfssumdiff_r_r_r(dst, src, src2)) } +emit_evfssumdiff_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evfssumdiff_r_r_r(dst, src, src2)) } inst_evfsdiffsum_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVFSDIFFSUM, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evfsdiffsum_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evfsdiffsum_r_r_r(dst, src, src2)) } +emit_evfsdiffsum_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evfsdiffsum_r_r_r(dst, src, src2)) } inst_evfsaddx_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVFSADDX, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evfsaddx_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evfsaddx_r_r_r(dst, src, src2)) } +emit_evfsaddx_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evfsaddx_r_r_r(dst, src, src2)) } inst_evfssubx_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVFSSUBX, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evfssubx_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evfssubx_r_r_r(dst, src, src2)) } +emit_evfssubx_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evfssubx_r_r_r(dst, src, src2)) } inst_evfsaddsubx_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVFSADDSUBX, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evfsaddsubx_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evfsaddsubx_r_r_r(dst, src, src2)) } +emit_evfsaddsubx_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evfsaddsubx_r_r_r(dst, src, src2)) } inst_evfssubaddx_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVFSSUBADDX, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evfssubaddx_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evfssubaddx_r_r_r(dst, src, src2)) } +emit_evfssubaddx_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evfssubaddx_r_r_r(dst, src, src2)) } inst_evfsmulx_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVFSMULX, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evfsmulx_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evfsmulx_r_r_r(dst, src, src2)) } +emit_evfsmulx_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evfsmulx_r_r_r(dst, src, src2)) } inst_evfsmule_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVFSMULE, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evfsmule_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evfsmule_r_r_r(dst, src, src2)) } +emit_evfsmule_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evfsmule_r_r_r(dst, src, src2)) } inst_evfsmulo_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVFSMULO, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evfsmulo_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evfsmulo_r_r_r(dst, src, src2)) } +emit_evfsmulo_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evfsmulo_r_r_r(dst, src, src2)) } inst_efssqrt_r_r :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .EFSSQRT, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_efssqrt_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_efssqrt_r_r(dst, src)) } +emit_efssqrt_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_efssqrt_r_r(dst, src)) } inst_efsmax_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EFSMAX, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_efsmax_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_efsmax_r_r_r(dst, src, src2)) } +emit_efsmax_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_efsmax_r_r_r(dst, src, src2)) } inst_efsmin_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EFSMIN, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_efsmin_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_efsmin_r_r_r(dst, src, src2)) } +emit_efsmin_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_efsmin_r_r_r(dst, src, src2)) } inst_efscfh_r_r :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .EFSCFH, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_efscfh_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_efscfh_r_r(dst, src)) } +emit_efscfh_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_efscfh_r_r(dst, src)) } inst_efscth_r_r :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .EFSCTH, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_efscth_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_efscth_r_r(dst, src)) } +emit_efscth_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_efscth_r_r(dst, src)) } inst_efdsqrt_r_r :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .EFDSQRT, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_efdsqrt_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_efdsqrt_r_r(dst, src)) } +emit_efdsqrt_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_efdsqrt_r_r(dst, src)) } inst_efdmax_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EFDMAX, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_efdmax_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_efdmax_r_r_r(dst, src, src2)) } +emit_efdmax_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_efdmax_r_r_r(dst, src, src2)) } inst_efdmin_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EFDMIN, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_efdmin_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_efdmin_r_r_r(dst, src, src2)) } +emit_efdmin_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_efdmin_r_r_r(dst, src, src2)) } inst_efdcfh_r_r :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .EFDCFH, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_efdcfh_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_efdcfh_r_r(dst, src)) } +emit_efdcfh_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_efdcfh_r_r(dst, src)) } inst_efdcth_r_r :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .EFDCTH, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_efdcth_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_efdcth_r_r(dst, src)) } +emit_efdcth_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_efdcth_r_r(dst, src)) } inst_evsubw_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVSUBW, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evsubw_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evsubw_r_r_r(dst, src, src2)) } +emit_evsubw_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evsubw_r_r_r(dst, src, src2)) } inst_evsubiw_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVSUBIW, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evsubiw_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evsubiw_r_r_r(dst, src, src2)) } +emit_evsubiw_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evsubiw_r_r_r(dst, src, src2)) } inst_evneg_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVNEG, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evneg_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evneg_r_r_r(dst, src, src2)) } +emit_evneg_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evneg_r_r_r(dst, src, src2)) } inst_evrndw_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVRNDW, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evrndw_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evrndw_r_r_r(dst, src, src2)) } +emit_evrndw_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evrndw_r_r_r(dst, src, src2)) } inst_evmr_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVMR, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evmr_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evmr_r_r_r(dst, src, src2)) } +emit_evmr_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evmr_r_r_r(dst, src, src2)) } inst_evnot_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVNOT, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evnot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evnot_r_r_r(dst, src, src2)) } +emit_evnot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evnot_r_r_r(dst, src, src2)) } inst_evsadd_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVSADD, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evsadd_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evsadd_r_r_r(dst, src, src2)) } +emit_evsadd_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evsadd_r_r_r(dst, src, src2)) } inst_evssub_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVSSUB, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evssub_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evssub_r_r_r(dst, src, src2)) } +emit_evssub_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evssub_r_r_r(dst, src, src2)) } inst_evsabs_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVSABS, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evsabs_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evsabs_r_r_r(dst, src, src2)) } +emit_evsabs_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evsabs_r_r_r(dst, src, src2)) } inst_evsnabs_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVSNABS, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evsnabs_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evsnabs_r_r_r(dst, src, src2)) } +emit_evsnabs_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evsnabs_r_r_r(dst, src, src2)) } inst_evsneg_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVSNEG, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evsneg_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evsneg_r_r_r(dst, src, src2)) } +emit_evsneg_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evsneg_r_r_r(dst, src, src2)) } inst_evsmul_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVSMUL, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evsmul_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evsmul_r_r_r(dst, src, src2)) } +emit_evsmul_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evsmul_r_r_r(dst, src, src2)) } inst_evsdiv_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVSDIV, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evsdiv_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evsdiv_r_r_r(dst, src, src2)) } +emit_evsdiv_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evsdiv_r_r_r(dst, src, src2)) } inst_evscmpgt_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVSCMPGT, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evscmpgt_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evscmpgt_r_r_r(dst, src, src2)) } +emit_evscmpgt_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evscmpgt_r_r_r(dst, src, src2)) } inst_evsgmplt_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVSGMPLT, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evsgmplt_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evsgmplt_r_r_r(dst, src, src2)) } +emit_evsgmplt_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evsgmplt_r_r_r(dst, src, src2)) } inst_evsgmpeq_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVSGMPEQ, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evsgmpeq_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evsgmpeq_r_r_r(dst, src, src2)) } +emit_evsgmpeq_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evsgmpeq_r_r_r(dst, src, src2)) } inst_evscfui_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVSCFUI, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evscfui_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evscfui_r_r_r(dst, src, src2)) } +emit_evscfui_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evscfui_r_r_r(dst, src, src2)) } inst_evscfsi_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVSCFSI, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evscfsi_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evscfsi_r_r_r(dst, src, src2)) } +emit_evscfsi_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evscfsi_r_r_r(dst, src, src2)) } inst_evscfuf_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVSCFUF, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evscfuf_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evscfuf_r_r_r(dst, src, src2)) } +emit_evscfuf_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evscfuf_r_r_r(dst, src, src2)) } inst_evscfsf_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVSCFSF, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evscfsf_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evscfsf_r_r_r(dst, src, src2)) } +emit_evscfsf_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evscfsf_r_r_r(dst, src, src2)) } inst_evsctui_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVSCTUI, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evsctui_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evsctui_r_r_r(dst, src, src2)) } +emit_evsctui_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evsctui_r_r_r(dst, src, src2)) } inst_evsctsi_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVSCTSI, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evsctsi_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evsctsi_r_r_r(dst, src, src2)) } +emit_evsctsi_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evsctsi_r_r_r(dst, src, src2)) } inst_evsctuf_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVSCTUF, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evsctuf_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evsctuf_r_r_r(dst, src, src2)) } +emit_evsctuf_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evsctuf_r_r_r(dst, src, src2)) } inst_evsctsf_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVSCTSF, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evsctsf_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evsctsf_r_r_r(dst, src, src2)) } +emit_evsctsf_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evsctsf_r_r_r(dst, src, src2)) } inst_evsctuiz_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVSCTUIZ, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evsctuiz_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evsctuiz_r_r_r(dst, src, src2)) } +emit_evsctuiz_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evsctuiz_r_r_r(dst, src, src2)) } inst_evsctsiz_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVSCTSIZ, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evsctsiz_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evsctsiz_r_r_r(dst, src, src2)) } +emit_evsctsiz_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evsctsiz_r_r_r(dst, src, src2)) } inst_evststgt_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVSTSTGT, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evststgt_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evststgt_r_r_r(dst, src, src2)) } +emit_evststgt_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evststgt_r_r_r(dst, src, src2)) } inst_evststlt_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVSTSTLT, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evststlt_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evststlt_r_r_r(dst, src, src2)) } +emit_evststlt_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evststlt_r_r_r(dst, src, src2)) } inst_evststeq_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVSTSTEQ, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evststeq_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evststeq_r_r_r(dst, src, src2)) } +emit_evststeq_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evststeq_r_r_r(dst, src, src2)) } inst_evmwlssf_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVMWLSSF, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evmwlssf_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evmwlssf_r_r_r(dst, src, src2)) } +emit_evmwlssf_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evmwlssf_r_r_r(dst, src, src2)) } inst_evmwlsmf_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVMWLSMF, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evmwlsmf_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evmwlsmf_r_r_r(dst, src, src2)) } +emit_evmwlsmf_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evmwlsmf_r_r_r(dst, src, src2)) } inst_evmwlssfa_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVMWLSSFA, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evmwlssfa_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evmwlssfa_r_r_r(dst, src, src2)) } +emit_evmwlssfa_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evmwlssfa_r_r_r(dst, src, src2)) } inst_evmwlsmfa_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVMWLSMFA, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evmwlsmfa_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evmwlsmfa_r_r_r(dst, src, src2)) } +emit_evmwlsmfa_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evmwlsmfa_r_r_r(dst, src, src2)) } inst_evaddusiaaw_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVADDUSIAAW, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evaddusiaaw_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evaddusiaaw_r_r_r(dst, src, src2)) } +emit_evaddusiaaw_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evaddusiaaw_r_r_r(dst, src, src2)) } inst_evaddssiaaw_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVADDSSIAAW, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evaddssiaaw_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evaddssiaaw_r_r_r(dst, src, src2)) } +emit_evaddssiaaw_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evaddssiaaw_r_r_r(dst, src, src2)) } inst_evsubfusiaaw_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVSUBFUSIAAW, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evsubfusiaaw_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evsubfusiaaw_r_r_r(dst, src, src2)) } +emit_evsubfusiaaw_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evsubfusiaaw_r_r_r(dst, src, src2)) } inst_evsubfssiaaw_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVSUBFSSIAAW, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evsubfssiaaw_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evsubfssiaaw_r_r_r(dst, src, src2)) } +emit_evsubfssiaaw_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evsubfssiaaw_r_r_r(dst, src, src2)) } inst_evaddumiaaw_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVADDUMIAAW, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evaddumiaaw_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evaddumiaaw_r_r_r(dst, src, src2)) } +emit_evaddumiaaw_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evaddumiaaw_r_r_r(dst, src, src2)) } inst_evaddsmiaaw_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVADDSMIAAW, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evaddsmiaaw_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evaddsmiaaw_r_r_r(dst, src, src2)) } +emit_evaddsmiaaw_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evaddsmiaaw_r_r_r(dst, src, src2)) } inst_evsubfumiaaw_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVSUBFUMIAAW, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evsubfumiaaw_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evsubfumiaaw_r_r_r(dst, src, src2)) } +emit_evsubfumiaaw_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evsubfumiaaw_r_r_r(dst, src, src2)) } inst_evsubfsmiaaw_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVSUBFSMIAAW, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evsubfsmiaaw_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evsubfsmiaaw_r_r_r(dst, src, src2)) } +emit_evsubfsmiaaw_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evsubfsmiaaw_r_r_r(dst, src, src2)) } inst_evmwlssfaaw_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVMWLSSFAAW, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evmwlssfaaw_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evmwlssfaaw_r_r_r(dst, src, src2)) } +emit_evmwlssfaaw_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evmwlssfaaw_r_r_r(dst, src, src2)) } inst_evmwhusiaa_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVMWHUSIAA, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evmwhusiaa_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evmwhusiaa_r_r_r(dst, src, src2)) } +emit_evmwhusiaa_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evmwhusiaa_r_r_r(dst, src, src2)) } inst_evmwhssmaa_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVMWHSSMAA, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evmwhssmaa_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evmwhssmaa_r_r_r(dst, src, src2)) } +emit_evmwhssmaa_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evmwhssmaa_r_r_r(dst, src, src2)) } inst_evmwhssfaa_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVMWHSSFAA, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evmwhssfaa_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evmwhssfaa_r_r_r(dst, src, src2)) } +emit_evmwhssfaa_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evmwhssfaa_r_r_r(dst, src, src2)) } inst_evmwlsmfaaw_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVMWLSMFAAW, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evmwlsmfaaw_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evmwlsmfaaw_r_r_r(dst, src, src2)) } +emit_evmwlsmfaaw_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evmwlsmfaaw_r_r_r(dst, src, src2)) } inst_evmwhumiaa_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVMWHUMIAA, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evmwhumiaa_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evmwhumiaa_r_r_r(dst, src, src2)) } +emit_evmwhumiaa_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evmwhumiaa_r_r_r(dst, src, src2)) } inst_evmwhsmiaa_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVMWHSMIAA, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evmwhsmiaa_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evmwhsmiaa_r_r_r(dst, src, src2)) } +emit_evmwhsmiaa_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evmwhsmiaa_r_r_r(dst, src, src2)) } inst_evmwhsmfaa_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVMWHSMFAA, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evmwhsmfaa_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evmwhsmfaa_r_r_r(dst, src, src2)) } +emit_evmwhsmfaa_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evmwhsmfaa_r_r_r(dst, src, src2)) } inst_evmwhgumiaa_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVMWHGUMIAA, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evmwhgumiaa_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evmwhgumiaa_r_r_r(dst, src, src2)) } +emit_evmwhgumiaa_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evmwhgumiaa_r_r_r(dst, src, src2)) } inst_evmwhgsmiaa_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVMWHGSMIAA, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evmwhgsmiaa_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evmwhgsmiaa_r_r_r(dst, src, src2)) } +emit_evmwhgsmiaa_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evmwhgsmiaa_r_r_r(dst, src, src2)) } inst_evmwhgssfaa_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVMWHGSSFAA, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evmwhgssfaa_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evmwhgssfaa_r_r_r(dst, src, src2)) } +emit_evmwhgssfaa_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evmwhgssfaa_r_r_r(dst, src, src2)) } inst_evmwhgsmfaa_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVMWHGSMFAA, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evmwhgsmfaa_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evmwhgsmfaa_r_r_r(dst, src, src2)) } +emit_evmwhgsmfaa_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evmwhgsmfaa_r_r_r(dst, src, src2)) } inst_evmwlssfanw_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVMWLSSFANW, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evmwlssfanw_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evmwlssfanw_r_r_r(dst, src, src2)) } +emit_evmwlssfanw_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evmwlssfanw_r_r_r(dst, src, src2)) } inst_evmwhusian_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVMWHUSIAN, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evmwhusian_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evmwhusian_r_r_r(dst, src, src2)) } +emit_evmwhusian_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evmwhusian_r_r_r(dst, src, src2)) } inst_evmwhssian_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVMWHSSIAN, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evmwhssian_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evmwhssian_r_r_r(dst, src, src2)) } +emit_evmwhssian_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evmwhssian_r_r_r(dst, src, src2)) } inst_evmwhssfan_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVMWHSSFAN, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evmwhssfan_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evmwhssfan_r_r_r(dst, src, src2)) } +emit_evmwhssfan_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evmwhssfan_r_r_r(dst, src, src2)) } inst_evmwlsmfanw_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVMWLSMFANW, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evmwlsmfanw_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evmwlsmfanw_r_r_r(dst, src, src2)) } +emit_evmwlsmfanw_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evmwlsmfanw_r_r_r(dst, src, src2)) } inst_evmwhumian_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVMWHUMIAN, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evmwhumian_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evmwhumian_r_r_r(dst, src, src2)) } +emit_evmwhumian_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evmwhumian_r_r_r(dst, src, src2)) } inst_evmwhsmian_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVMWHSMIAN, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evmwhsmian_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evmwhsmian_r_r_r(dst, src, src2)) } +emit_evmwhsmian_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evmwhsmian_r_r_r(dst, src, src2)) } inst_evmwhsmfan_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVMWHSMFAN, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evmwhsmfan_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evmwhsmfan_r_r_r(dst, src, src2)) } +emit_evmwhsmfan_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evmwhsmfan_r_r_r(dst, src, src2)) } inst_evmwhgumian_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVMWHGUMIAN, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evmwhgumian_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evmwhgumian_r_r_r(dst, src, src2)) } +emit_evmwhgumian_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evmwhgumian_r_r_r(dst, src, src2)) } inst_evmwhgsmian_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVMWHGSMIAN, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evmwhgsmian_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evmwhgsmian_r_r_r(dst, src, src2)) } +emit_evmwhgsmian_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evmwhgsmian_r_r_r(dst, src, src2)) } inst_evmwhgssfan_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVMWHGSSFAN, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evmwhgssfan_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evmwhgssfan_r_r_r(dst, src, src2)) } +emit_evmwhgssfan_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evmwhgssfan_r_r_r(dst, src, src2)) } inst_evmwhgsmfan_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVMWHGSMFAN, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evmwhgsmfan_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evmwhgsmfan_r_r_r(dst, src, src2)) } +emit_evmwhgsmfan_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evmwhgsmfan_r_r_r(dst, src, src2)) } inst_evdotpwcssi_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVDOTPWCSSI, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evdotpwcssi_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evdotpwcssi_r_r_r(dst, src, src2)) } +emit_evdotpwcssi_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evdotpwcssi_r_r_r(dst, src, src2)) } inst_evdotpwcsmi_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVDOTPWCSMI, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evdotpwcsmi_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evdotpwcsmi_r_r_r(dst, src, src2)) } +emit_evdotpwcsmi_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evdotpwcsmi_r_r_r(dst, src, src2)) } inst_evdotpwcssfr_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVDOTPWCSSFR, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evdotpwcssfr_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evdotpwcssfr_r_r_r(dst, src, src2)) } +emit_evdotpwcssfr_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evdotpwcssfr_r_r_r(dst, src, src2)) } inst_evdotpwcssf_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVDOTPWCSSF, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evdotpwcssf_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evdotpwcssf_r_r_r(dst, src, src2)) } +emit_evdotpwcssf_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evdotpwcssf_r_r_r(dst, src, src2)) } inst_evdotpwgasmf_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVDOTPWGASMF, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evdotpwgasmf_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evdotpwgasmf_r_r_r(dst, src, src2)) } +emit_evdotpwgasmf_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evdotpwgasmf_r_r_r(dst, src, src2)) } inst_evdotpwxgasmf_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVDOTPWXGASMF, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evdotpwxgasmf_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evdotpwxgasmf_r_r_r(dst, src, src2)) } +emit_evdotpwxgasmf_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evdotpwxgasmf_r_r_r(dst, src, src2)) } inst_evdotpwgasmfr_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVDOTPWGASMFR, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evdotpwgasmfr_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evdotpwgasmfr_r_r_r(dst, src, src2)) } +emit_evdotpwgasmfr_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evdotpwgasmfr_r_r_r(dst, src, src2)) } inst_evdotpwxgasmfr_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVDOTPWXGASMFR, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evdotpwxgasmfr_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evdotpwxgasmfr_r_r_r(dst, src, src2)) } +emit_evdotpwxgasmfr_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evdotpwxgasmfr_r_r_r(dst, src, src2)) } inst_evdotpwgssmf_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVDOTPWGSSMF, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evdotpwgssmf_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evdotpwgssmf_r_r_r(dst, src, src2)) } +emit_evdotpwgssmf_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evdotpwgssmf_r_r_r(dst, src, src2)) } inst_evdotpwxgssmf_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVDOTPWXGSSMF, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evdotpwxgssmf_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evdotpwxgssmf_r_r_r(dst, src, src2)) } +emit_evdotpwxgssmf_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evdotpwxgssmf_r_r_r(dst, src, src2)) } inst_evdotpwgssmfr_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVDOTPWGSSMFR, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evdotpwgssmfr_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evdotpwgssmfr_r_r_r(dst, src, src2)) } +emit_evdotpwgssmfr_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evdotpwgssmfr_r_r_r(dst, src, src2)) } inst_evdotpwxgssmfr_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVDOTPWXGSSMFR, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evdotpwxgssmfr_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evdotpwxgssmfr_r_r_r(dst, src, src2)) } +emit_evdotpwxgssmfr_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evdotpwxgssmfr_r_r_r(dst, src, src2)) } inst_evdotpwcssiaaw3_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVDOTPWCSSIAAW3, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evdotpwcssiaaw3_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evdotpwcssiaaw3_r_r_r(dst, src, src2)) } +emit_evdotpwcssiaaw3_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evdotpwcssiaaw3_r_r_r(dst, src, src2)) } inst_evdotpwcsmiaaw3_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVDOTPWCSMIAAW3, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evdotpwcsmiaaw3_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evdotpwcsmiaaw3_r_r_r(dst, src, src2)) } +emit_evdotpwcsmiaaw3_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evdotpwcsmiaaw3_r_r_r(dst, src, src2)) } inst_evdotpwcssfraaw3_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVDOTPWCSSFRAAW3, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evdotpwcssfraaw3_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evdotpwcssfraaw3_r_r_r(dst, src, src2)) } +emit_evdotpwcssfraaw3_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evdotpwcssfraaw3_r_r_r(dst, src, src2)) } inst_evdotpwcssfaaw3_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVDOTPWCSSFAAW3, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evdotpwcssfaaw3_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evdotpwcssfaaw3_r_r_r(dst, src, src2)) } +emit_evdotpwcssfaaw3_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evdotpwcssfaaw3_r_r_r(dst, src, src2)) } inst_evdotpwgasmfaa3_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVDOTPWGASMFAA3, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evdotpwgasmfaa3_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evdotpwgasmfaa3_r_r_r(dst, src, src2)) } +emit_evdotpwgasmfaa3_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evdotpwgasmfaa3_r_r_r(dst, src, src2)) } inst_evdotpwxgasmfaa3_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVDOTPWXGASMFAA3, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evdotpwxgasmfaa3_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evdotpwxgasmfaa3_r_r_r(dst, src, src2)) } +emit_evdotpwxgasmfaa3_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evdotpwxgasmfaa3_r_r_r(dst, src, src2)) } inst_evdotpwgasmfraa3_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVDOTPWGASMFRAA3, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evdotpwgasmfraa3_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evdotpwgasmfraa3_r_r_r(dst, src, src2)) } +emit_evdotpwgasmfraa3_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evdotpwgasmfraa3_r_r_r(dst, src, src2)) } inst_evdotpwxgasmfraa3_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVDOTPWXGASMFRAA3, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evdotpwxgasmfraa3_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evdotpwxgasmfraa3_r_r_r(dst, src, src2)) } +emit_evdotpwxgasmfraa3_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evdotpwxgasmfraa3_r_r_r(dst, src, src2)) } inst_evdotpwgssmfaa3_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVDOTPWGSSMFAA3, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evdotpwgssmfaa3_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evdotpwgssmfaa3_r_r_r(dst, src, src2)) } +emit_evdotpwgssmfaa3_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evdotpwgssmfaa3_r_r_r(dst, src, src2)) } inst_evdotpwxgssmfaa3_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVDOTPWXGSSMFAA3, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evdotpwxgssmfaa3_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evdotpwxgssmfaa3_r_r_r(dst, src, src2)) } +emit_evdotpwxgssmfaa3_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evdotpwxgssmfaa3_r_r_r(dst, src, src2)) } inst_evdotpwgssmfraa3_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVDOTPWGSSMFRAA3, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evdotpwgssmfraa3_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evdotpwgssmfraa3_r_r_r(dst, src, src2)) } +emit_evdotpwgssmfraa3_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evdotpwgssmfraa3_r_r_r(dst, src, src2)) } inst_evdotpwxgssmfraa3_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVDOTPWXGSSMFRAA3, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evdotpwxgssmfraa3_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evdotpwxgssmfraa3_r_r_r(dst, src, src2)) } +emit_evdotpwxgssmfraa3_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evdotpwxgssmfraa3_r_r_r(dst, src, src2)) } inst_evdotpwcssia_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVDOTPWCSSIA, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evdotpwcssia_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evdotpwcssia_r_r_r(dst, src, src2)) } +emit_evdotpwcssia_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evdotpwcssia_r_r_r(dst, src, src2)) } inst_evdotpwcsmia_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVDOTPWCSMIA, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evdotpwcsmia_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evdotpwcsmia_r_r_r(dst, src, src2)) } +emit_evdotpwcsmia_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evdotpwcsmia_r_r_r(dst, src, src2)) } inst_evdotpwcssfra_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVDOTPWCSSFRA, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evdotpwcssfra_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evdotpwcssfra_r_r_r(dst, src, src2)) } +emit_evdotpwcssfra_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evdotpwcssfra_r_r_r(dst, src, src2)) } inst_evdotpwcssfa_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVDOTPWCSSFA, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evdotpwcssfa_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evdotpwcssfa_r_r_r(dst, src, src2)) } +emit_evdotpwcssfa_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evdotpwcssfa_r_r_r(dst, src, src2)) } inst_evdotpwgasmfa_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVDOTPWGASMFA, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evdotpwgasmfa_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evdotpwgasmfa_r_r_r(dst, src, src2)) } +emit_evdotpwgasmfa_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evdotpwgasmfa_r_r_r(dst, src, src2)) } inst_evdotpwxgasmfa_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVDOTPWXGASMFA, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evdotpwxgasmfa_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evdotpwxgasmfa_r_r_r(dst, src, src2)) } +emit_evdotpwxgasmfa_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evdotpwxgasmfa_r_r_r(dst, src, src2)) } inst_evdotpwgasmfra_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVDOTPWGASMFRA, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evdotpwgasmfra_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evdotpwgasmfra_r_r_r(dst, src, src2)) } +emit_evdotpwgasmfra_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evdotpwgasmfra_r_r_r(dst, src, src2)) } inst_evdotpwxgasmfra_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVDOTPWXGASMFRA, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evdotpwxgasmfra_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evdotpwxgasmfra_r_r_r(dst, src, src2)) } +emit_evdotpwxgasmfra_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evdotpwxgasmfra_r_r_r(dst, src, src2)) } inst_evdotpwgssmfa_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVDOTPWGSSMFA, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evdotpwgssmfa_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evdotpwgssmfa_r_r_r(dst, src, src2)) } +emit_evdotpwgssmfa_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evdotpwgssmfa_r_r_r(dst, src, src2)) } inst_evdotpwxgssmfa_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVDOTPWXGSSMFA, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evdotpwxgssmfa_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evdotpwxgssmfa_r_r_r(dst, src, src2)) } +emit_evdotpwxgssmfa_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evdotpwxgssmfa_r_r_r(dst, src, src2)) } inst_evdotpwgssmfra_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVDOTPWGSSMFRA, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evdotpwgssmfra_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evdotpwgssmfra_r_r_r(dst, src, src2)) } +emit_evdotpwgssmfra_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evdotpwgssmfra_r_r_r(dst, src, src2)) } inst_evdotpwxgssmfra_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVDOTPWXGSSMFRA, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evdotpwxgssmfra_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evdotpwxgssmfra_r_r_r(dst, src, src2)) } +emit_evdotpwxgssmfra_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evdotpwxgssmfra_r_r_r(dst, src, src2)) } inst_evdotpwcssiaaw_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVDOTPWCSSIAAW, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evdotpwcssiaaw_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evdotpwcssiaaw_r_r_r(dst, src, src2)) } +emit_evdotpwcssiaaw_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evdotpwcssiaaw_r_r_r(dst, src, src2)) } inst_evdotpwcsmiaaw_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVDOTPWCSMIAAW, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evdotpwcsmiaaw_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evdotpwcsmiaaw_r_r_r(dst, src, src2)) } +emit_evdotpwcsmiaaw_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evdotpwcsmiaaw_r_r_r(dst, src, src2)) } inst_evdotpwcssfraaw_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVDOTPWCSSFRAAW, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evdotpwcssfraaw_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evdotpwcssfraaw_r_r_r(dst, src, src2)) } +emit_evdotpwcssfraaw_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evdotpwcssfraaw_r_r_r(dst, src, src2)) } inst_evdotpwcssfaaw_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVDOTPWCSSFAAW, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evdotpwcssfaaw_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evdotpwcssfaaw_r_r_r(dst, src, src2)) } +emit_evdotpwcssfaaw_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evdotpwcssfaaw_r_r_r(dst, src, src2)) } inst_evdotpwgasmfaa_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVDOTPWGASMFAA, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evdotpwgasmfaa_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evdotpwgasmfaa_r_r_r(dst, src, src2)) } +emit_evdotpwgasmfaa_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evdotpwgasmfaa_r_r_r(dst, src, src2)) } inst_evdotpwxgasmfaa_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVDOTPWXGASMFAA, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evdotpwxgasmfaa_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evdotpwxgasmfaa_r_r_r(dst, src, src2)) } +emit_evdotpwxgasmfaa_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evdotpwxgasmfaa_r_r_r(dst, src, src2)) } inst_evdotpwgasmfraa_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVDOTPWGASMFRAA, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evdotpwgasmfraa_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evdotpwgasmfraa_r_r_r(dst, src, src2)) } +emit_evdotpwgasmfraa_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evdotpwgasmfraa_r_r_r(dst, src, src2)) } inst_evdotpwxgasmfraa_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVDOTPWXGASMFRAA, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evdotpwxgasmfraa_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evdotpwxgasmfraa_r_r_r(dst, src, src2)) } +emit_evdotpwxgasmfraa_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evdotpwxgasmfraa_r_r_r(dst, src, src2)) } inst_evdotpwgssmfaa_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVDOTPWGSSMFAA, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evdotpwgssmfaa_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evdotpwgssmfaa_r_r_r(dst, src, src2)) } +emit_evdotpwgssmfaa_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evdotpwgssmfaa_r_r_r(dst, src, src2)) } inst_evdotpwxgssmfaa_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVDOTPWXGSSMFAA, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evdotpwxgssmfaa_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evdotpwxgssmfaa_r_r_r(dst, src, src2)) } +emit_evdotpwxgssmfaa_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evdotpwxgssmfaa_r_r_r(dst, src, src2)) } inst_evdotpwgssmfraa_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVDOTPWGSSMFRAA, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evdotpwgssmfraa_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evdotpwgssmfraa_r_r_r(dst, src, src2)) } +emit_evdotpwgssmfraa_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evdotpwgssmfraa_r_r_r(dst, src, src2)) } inst_evdotpwxgssmfraa_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVDOTPWXGSSMFRAA, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evdotpwxgssmfraa_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evdotpwxgssmfraa_r_r_r(dst, src, src2)) } +emit_evdotpwxgssmfraa_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evdotpwxgssmfraa_r_r_r(dst, src, src2)) } inst_evdotphihcssi_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVDOTPHIHCSSI, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evdotphihcssi_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evdotphihcssi_r_r_r(dst, src, src2)) } +emit_evdotphihcssi_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evdotphihcssi_r_r_r(dst, src, src2)) } inst_evdotplohcssi_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVDOTPLOHCSSI, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evdotplohcssi_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evdotplohcssi_r_r_r(dst, src, src2)) } +emit_evdotplohcssi_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evdotplohcssi_r_r_r(dst, src, src2)) } inst_evdotphihcssf_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVDOTPHIHCSSF, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evdotphihcssf_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evdotphihcssf_r_r_r(dst, src, src2)) } +emit_evdotphihcssf_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evdotphihcssf_r_r_r(dst, src, src2)) } inst_evdotplohcssf_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVDOTPLOHCSSF, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evdotplohcssf_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evdotplohcssf_r_r_r(dst, src, src2)) } +emit_evdotplohcssf_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evdotplohcssf_r_r_r(dst, src, src2)) } inst_evdotphihcsmi_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVDOTPHIHCSMI, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evdotphihcsmi_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evdotphihcsmi_r_r_r(dst, src, src2)) } +emit_evdotphihcsmi_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evdotphihcsmi_r_r_r(dst, src, src2)) } inst_evdotplohcsmi_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVDOTPLOHCSMI, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evdotplohcsmi_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evdotplohcsmi_r_r_r(dst, src, src2)) } +emit_evdotplohcsmi_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evdotplohcsmi_r_r_r(dst, src, src2)) } inst_evdotphihcssfr_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVDOTPHIHCSSFR, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evdotphihcssfr_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evdotphihcssfr_r_r_r(dst, src, src2)) } +emit_evdotphihcssfr_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evdotphihcssfr_r_r_r(dst, src, src2)) } inst_evdotplohcssfr_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVDOTPLOHCSSFR, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evdotplohcssfr_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evdotplohcssfr_r_r_r(dst, src, src2)) } +emit_evdotplohcssfr_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evdotplohcssfr_r_r_r(dst, src, src2)) } inst_evdotphihcssiaaw3_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVDOTPHIHCSSIAAW3, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evdotphihcssiaaw3_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evdotphihcssiaaw3_r_r_r(dst, src, src2)) } +emit_evdotphihcssiaaw3_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evdotphihcssiaaw3_r_r_r(dst, src, src2)) } inst_evdotplohcssiaaw3_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVDOTPLOHCSSIAAW3, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evdotplohcssiaaw3_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evdotplohcssiaaw3_r_r_r(dst, src, src2)) } +emit_evdotplohcssiaaw3_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evdotplohcssiaaw3_r_r_r(dst, src, src2)) } inst_evdotphihcssfaaw3_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVDOTPHIHCSSFAAW3, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evdotphihcssfaaw3_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evdotphihcssfaaw3_r_r_r(dst, src, src2)) } +emit_evdotphihcssfaaw3_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evdotphihcssfaaw3_r_r_r(dst, src, src2)) } inst_evdotplohcssfaaw3_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVDOTPLOHCSSFAAW3, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evdotplohcssfaaw3_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evdotplohcssfaaw3_r_r_r(dst, src, src2)) } +emit_evdotplohcssfaaw3_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evdotplohcssfaaw3_r_r_r(dst, src, src2)) } inst_evdotphihcsmiaaw3_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVDOTPHIHCSMIAAW3, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evdotphihcsmiaaw3_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evdotphihcsmiaaw3_r_r_r(dst, src, src2)) } +emit_evdotphihcsmiaaw3_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evdotphihcsmiaaw3_r_r_r(dst, src, src2)) } inst_evdotplohcsmiaaw3_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVDOTPLOHCSMIAAW3, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evdotplohcsmiaaw3_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evdotplohcsmiaaw3_r_r_r(dst, src, src2)) } +emit_evdotplohcsmiaaw3_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evdotplohcsmiaaw3_r_r_r(dst, src, src2)) } inst_evdotphihcssfraaw3_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVDOTPHIHCSSFRAAW3, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evdotphihcssfraaw3_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evdotphihcssfraaw3_r_r_r(dst, src, src2)) } +emit_evdotphihcssfraaw3_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evdotphihcssfraaw3_r_r_r(dst, src, src2)) } inst_evdotplohcssfraaw3_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVDOTPLOHCSSFRAAW3, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evdotplohcssfraaw3_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evdotplohcssfraaw3_r_r_r(dst, src, src2)) } +emit_evdotplohcssfraaw3_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evdotplohcssfraaw3_r_r_r(dst, src, src2)) } inst_evdotphihcssia_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVDOTPHIHCSSIA, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evdotphihcssia_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evdotphihcssia_r_r_r(dst, src, src2)) } +emit_evdotphihcssia_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evdotphihcssia_r_r_r(dst, src, src2)) } inst_evdotplohcssia_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVDOTPLOHCSSIA, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evdotplohcssia_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evdotplohcssia_r_r_r(dst, src, src2)) } +emit_evdotplohcssia_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evdotplohcssia_r_r_r(dst, src, src2)) } inst_evdotphihcssfa_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVDOTPHIHCSSFA, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evdotphihcssfa_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evdotphihcssfa_r_r_r(dst, src, src2)) } +emit_evdotphihcssfa_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evdotphihcssfa_r_r_r(dst, src, src2)) } inst_evdotplohcssfa_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVDOTPLOHCSSFA, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evdotplohcssfa_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evdotplohcssfa_r_r_r(dst, src, src2)) } +emit_evdotplohcssfa_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evdotplohcssfa_r_r_r(dst, src, src2)) } inst_evdotphihcsmia_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVDOTPHIHCSMIA, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evdotphihcsmia_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evdotphihcsmia_r_r_r(dst, src, src2)) } +emit_evdotphihcsmia_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evdotphihcsmia_r_r_r(dst, src, src2)) } inst_evdotplohcsmia_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVDOTPLOHCSMIA, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evdotplohcsmia_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evdotplohcsmia_r_r_r(dst, src, src2)) } +emit_evdotplohcsmia_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evdotplohcsmia_r_r_r(dst, src, src2)) } inst_evdotphihcssfra_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVDOTPHIHCSSFRA, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evdotphihcssfra_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evdotphihcssfra_r_r_r(dst, src, src2)) } +emit_evdotphihcssfra_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evdotphihcssfra_r_r_r(dst, src, src2)) } inst_evdotplohcssfra_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVDOTPLOHCSSFRA, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evdotplohcssfra_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evdotplohcssfra_r_r_r(dst, src, src2)) } +emit_evdotplohcssfra_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evdotplohcssfra_r_r_r(dst, src, src2)) } inst_evdotphihcssiaaw_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVDOTPHIHCSSIAAW, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evdotphihcssiaaw_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evdotphihcssiaaw_r_r_r(dst, src, src2)) } +emit_evdotphihcssiaaw_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evdotphihcssiaaw_r_r_r(dst, src, src2)) } inst_evdotplohcssiaaw_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVDOTPLOHCSSIAAW, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evdotplohcssiaaw_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evdotplohcssiaaw_r_r_r(dst, src, src2)) } +emit_evdotplohcssiaaw_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evdotplohcssiaaw_r_r_r(dst, src, src2)) } inst_evdotphihcssfaaw_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVDOTPHIHCSSFAAW, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evdotphihcssfaaw_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evdotphihcssfaaw_r_r_r(dst, src, src2)) } +emit_evdotphihcssfaaw_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evdotphihcssfaaw_r_r_r(dst, src, src2)) } inst_evdotplohcssfaaw_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVDOTPLOHCSSFAAW, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evdotplohcssfaaw_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evdotplohcssfaaw_r_r_r(dst, src, src2)) } +emit_evdotplohcssfaaw_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evdotplohcssfaaw_r_r_r(dst, src, src2)) } inst_evdotphihcsmiaaw_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVDOTPHIHCSMIAAW, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evdotphihcsmiaaw_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evdotphihcsmiaaw_r_r_r(dst, src, src2)) } +emit_evdotphihcsmiaaw_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evdotphihcsmiaaw_r_r_r(dst, src, src2)) } inst_evdotplohcsmiaaw_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVDOTPLOHCSMIAAW, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evdotplohcsmiaaw_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evdotplohcsmiaaw_r_r_r(dst, src, src2)) } +emit_evdotplohcsmiaaw_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evdotplohcsmiaaw_r_r_r(dst, src, src2)) } inst_evdotphihcssfraaw_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVDOTPHIHCSSFRAAW, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evdotphihcssfraaw_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evdotphihcssfraaw_r_r_r(dst, src, src2)) } +emit_evdotphihcssfraaw_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evdotphihcssfraaw_r_r_r(dst, src, src2)) } inst_evdotplohcssfraaw_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVDOTPLOHCSSFRAAW, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evdotplohcssfraaw_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evdotplohcssfraaw_r_r_r(dst, src, src2)) } +emit_evdotplohcssfraaw_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evdotplohcssfraaw_r_r_r(dst, src, src2)) } inst_evdotphausi_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVDOTPHAUSI, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evdotphausi_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evdotphausi_r_r_r(dst, src, src2)) } +emit_evdotphausi_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evdotphausi_r_r_r(dst, src, src2)) } inst_evdotphassi_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVDOTPHASSI, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evdotphassi_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evdotphassi_r_r_r(dst, src, src2)) } +emit_evdotphassi_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evdotphassi_r_r_r(dst, src, src2)) } inst_evdotphasusi_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVDOTPHASUSI, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evdotphasusi_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evdotphasusi_r_r_r(dst, src, src2)) } +emit_evdotphasusi_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evdotphasusi_r_r_r(dst, src, src2)) } inst_evdotphassf_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVDOTPHASSF, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evdotphassf_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evdotphassf_r_r_r(dst, src, src2)) } +emit_evdotphassf_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evdotphassf_r_r_r(dst, src, src2)) } inst_evdotphsssf_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVDOTPHSSSF, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evdotphsssf_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evdotphsssf_r_r_r(dst, src, src2)) } +emit_evdotphsssf_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evdotphsssf_r_r_r(dst, src, src2)) } inst_evdotphaumi_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVDOTPHAUMI, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evdotphaumi_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evdotphaumi_r_r_r(dst, src, src2)) } +emit_evdotphaumi_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evdotphaumi_r_r_r(dst, src, src2)) } inst_evdotphasmi_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVDOTPHASMI, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evdotphasmi_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evdotphasmi_r_r_r(dst, src, src2)) } +emit_evdotphasmi_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evdotphasmi_r_r_r(dst, src, src2)) } inst_evdotphasumi_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVDOTPHASUMI, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evdotphasumi_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evdotphasumi_r_r_r(dst, src, src2)) } +emit_evdotphasumi_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evdotphasumi_r_r_r(dst, src, src2)) } inst_evdotphassfr_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVDOTPHASSFR, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evdotphassfr_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evdotphassfr_r_r_r(dst, src, src2)) } +emit_evdotphassfr_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evdotphassfr_r_r_r(dst, src, src2)) } inst_evdotphssmi_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVDOTPHSSMI, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evdotphssmi_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evdotphssmi_r_r_r(dst, src, src2)) } +emit_evdotphssmi_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evdotphssmi_r_r_r(dst, src, src2)) } inst_evdotphsssi_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVDOTPHSSSI, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evdotphsssi_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evdotphsssi_r_r_r(dst, src, src2)) } +emit_evdotphsssi_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evdotphsssi_r_r_r(dst, src, src2)) } inst_evdotphsssfr_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVDOTPHSSSFR, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evdotphsssfr_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evdotphsssfr_r_r_r(dst, src, src2)) } +emit_evdotphsssfr_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evdotphsssfr_r_r_r(dst, src, src2)) } inst_evdotphausiaaw3_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVDOTPHAUSIAAW3, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evdotphausiaaw3_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evdotphausiaaw3_r_r_r(dst, src, src2)) } +emit_evdotphausiaaw3_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evdotphausiaaw3_r_r_r(dst, src, src2)) } inst_evdotphassiaaw3_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVDOTPHASSIAAW3, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evdotphassiaaw3_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evdotphassiaaw3_r_r_r(dst, src, src2)) } +emit_evdotphassiaaw3_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evdotphassiaaw3_r_r_r(dst, src, src2)) } inst_evdotphasusiaaw3_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVDOTPHASUSIAAW3, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evdotphasusiaaw3_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evdotphasusiaaw3_r_r_r(dst, src, src2)) } +emit_evdotphasusiaaw3_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evdotphasusiaaw3_r_r_r(dst, src, src2)) } inst_evdotphassfaaw3_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVDOTPHASSFAAW3, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evdotphassfaaw3_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evdotphassfaaw3_r_r_r(dst, src, src2)) } +emit_evdotphassfaaw3_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evdotphassfaaw3_r_r_r(dst, src, src2)) } inst_evdotphsssiaaw3_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVDOTPHSSSIAAW3, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evdotphsssiaaw3_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evdotphsssiaaw3_r_r_r(dst, src, src2)) } +emit_evdotphsssiaaw3_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evdotphsssiaaw3_r_r_r(dst, src, src2)) } inst_evdotphsssfaaw3_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVDOTPHSSSFAAW3, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evdotphsssfaaw3_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evdotphsssfaaw3_r_r_r(dst, src, src2)) } +emit_evdotphsssfaaw3_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evdotphsssfaaw3_r_r_r(dst, src, src2)) } inst_evdotphaumiaaw3_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVDOTPHAUMIAAW3, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evdotphaumiaaw3_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evdotphaumiaaw3_r_r_r(dst, src, src2)) } +emit_evdotphaumiaaw3_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evdotphaumiaaw3_r_r_r(dst, src, src2)) } inst_evdotphasmiaaw3_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVDOTPHASMIAAW3, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evdotphasmiaaw3_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evdotphasmiaaw3_r_r_r(dst, src, src2)) } +emit_evdotphasmiaaw3_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evdotphasmiaaw3_r_r_r(dst, src, src2)) } inst_evdotphasumiaaw3_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVDOTPHASUMIAAW3, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evdotphasumiaaw3_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evdotphasumiaaw3_r_r_r(dst, src, src2)) } +emit_evdotphasumiaaw3_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evdotphasumiaaw3_r_r_r(dst, src, src2)) } inst_evdotphassfraaw3_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVDOTPHASSFRAAW3, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evdotphassfraaw3_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evdotphassfraaw3_r_r_r(dst, src, src2)) } +emit_evdotphassfraaw3_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evdotphassfraaw3_r_r_r(dst, src, src2)) } inst_evdotphssmiaaw3_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVDOTPHSSMIAAW3, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evdotphssmiaaw3_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evdotphssmiaaw3_r_r_r(dst, src, src2)) } +emit_evdotphssmiaaw3_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evdotphssmiaaw3_r_r_r(dst, src, src2)) } inst_evdotphsssfraaw3_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVDOTPHSSSFRAAW3, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evdotphsssfraaw3_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evdotphsssfraaw3_r_r_r(dst, src, src2)) } +emit_evdotphsssfraaw3_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evdotphsssfraaw3_r_r_r(dst, src, src2)) } inst_evdotphausia_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVDOTPHAUSIA, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evdotphausia_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evdotphausia_r_r_r(dst, src, src2)) } +emit_evdotphausia_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evdotphausia_r_r_r(dst, src, src2)) } inst_evdotphassia_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVDOTPHASSIA, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evdotphassia_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evdotphassia_r_r_r(dst, src, src2)) } +emit_evdotphassia_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evdotphassia_r_r_r(dst, src, src2)) } inst_evdotphasusia_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVDOTPHASUSIA, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evdotphasusia_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evdotphasusia_r_r_r(dst, src, src2)) } +emit_evdotphasusia_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evdotphasusia_r_r_r(dst, src, src2)) } inst_evdotphassfa_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVDOTPHASSFA, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evdotphassfa_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evdotphassfa_r_r_r(dst, src, src2)) } +emit_evdotphassfa_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evdotphassfa_r_r_r(dst, src, src2)) } inst_evdotphsssfa_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVDOTPHSSSFA, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evdotphsssfa_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evdotphsssfa_r_r_r(dst, src, src2)) } +emit_evdotphsssfa_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evdotphsssfa_r_r_r(dst, src, src2)) } inst_evdotphaumia_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVDOTPHAUMIA, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evdotphaumia_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evdotphaumia_r_r_r(dst, src, src2)) } +emit_evdotphaumia_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evdotphaumia_r_r_r(dst, src, src2)) } inst_evdotphasmia_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVDOTPHASMIA, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evdotphasmia_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evdotphasmia_r_r_r(dst, src, src2)) } +emit_evdotphasmia_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evdotphasmia_r_r_r(dst, src, src2)) } inst_evdotphasumia_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVDOTPHASUMIA, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evdotphasumia_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evdotphasumia_r_r_r(dst, src, src2)) } +emit_evdotphasumia_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evdotphasumia_r_r_r(dst, src, src2)) } inst_evdotphassfra_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVDOTPHASSFRA, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evdotphassfra_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evdotphassfra_r_r_r(dst, src, src2)) } +emit_evdotphassfra_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evdotphassfra_r_r_r(dst, src, src2)) } inst_evdotphssmia_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVDOTPHSSMIA, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evdotphssmia_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evdotphssmia_r_r_r(dst, src, src2)) } +emit_evdotphssmia_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evdotphssmia_r_r_r(dst, src, src2)) } inst_evdotphsssia_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVDOTPHSSSIA, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evdotphsssia_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evdotphsssia_r_r_r(dst, src, src2)) } +emit_evdotphsssia_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evdotphsssia_r_r_r(dst, src, src2)) } inst_evdotphsssfra_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVDOTPHSSSFRA, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evdotphsssfra_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evdotphsssfra_r_r_r(dst, src, src2)) } +emit_evdotphsssfra_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evdotphsssfra_r_r_r(dst, src, src2)) } inst_evdotphausiaaw_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVDOTPHAUSIAAW, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evdotphausiaaw_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evdotphausiaaw_r_r_r(dst, src, src2)) } +emit_evdotphausiaaw_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evdotphausiaaw_r_r_r(dst, src, src2)) } inst_evdotphassiaaw_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVDOTPHASSIAAW, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evdotphassiaaw_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evdotphassiaaw_r_r_r(dst, src, src2)) } +emit_evdotphassiaaw_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evdotphassiaaw_r_r_r(dst, src, src2)) } inst_evdotphasusiaaw_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVDOTPHASUSIAAW, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evdotphasusiaaw_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evdotphasusiaaw_r_r_r(dst, src, src2)) } +emit_evdotphasusiaaw_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evdotphasusiaaw_r_r_r(dst, src, src2)) } inst_evdotphassfaaw_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVDOTPHASSFAAW, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evdotphassfaaw_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evdotphassfaaw_r_r_r(dst, src, src2)) } +emit_evdotphassfaaw_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evdotphassfaaw_r_r_r(dst, src, src2)) } inst_evdotphsssiaaw_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVDOTPHSSSIAAW, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evdotphsssiaaw_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evdotphsssiaaw_r_r_r(dst, src, src2)) } +emit_evdotphsssiaaw_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evdotphsssiaaw_r_r_r(dst, src, src2)) } inst_evdotphsssfaaw_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVDOTPHSSSFAAW, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evdotphsssfaaw_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evdotphsssfaaw_r_r_r(dst, src, src2)) } +emit_evdotphsssfaaw_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evdotphsssfaaw_r_r_r(dst, src, src2)) } inst_evdotphaumiaaw_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVDOTPHAUMIAAW, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evdotphaumiaaw_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evdotphaumiaaw_r_r_r(dst, src, src2)) } +emit_evdotphaumiaaw_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evdotphaumiaaw_r_r_r(dst, src, src2)) } inst_evdotphasmiaaw_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVDOTPHASMIAAW, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evdotphasmiaaw_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evdotphasmiaaw_r_r_r(dst, src, src2)) } +emit_evdotphasmiaaw_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evdotphasmiaaw_r_r_r(dst, src, src2)) } inst_evdotphasumiaaw_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVDOTPHASUMIAAW, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evdotphasumiaaw_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evdotphasumiaaw_r_r_r(dst, src, src2)) } +emit_evdotphasumiaaw_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evdotphasumiaaw_r_r_r(dst, src, src2)) } inst_evdotphassfraaw_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVDOTPHASSFRAAW, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evdotphassfraaw_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evdotphassfraaw_r_r_r(dst, src, src2)) } +emit_evdotphassfraaw_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evdotphassfraaw_r_r_r(dst, src, src2)) } inst_evdotphssmiaaw_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVDOTPHSSMIAAW, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evdotphssmiaaw_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evdotphssmiaaw_r_r_r(dst, src, src2)) } +emit_evdotphssmiaaw_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evdotphssmiaaw_r_r_r(dst, src, src2)) } inst_evdotphsssfraaw_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVDOTPHSSSFRAAW, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evdotphsssfraaw_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evdotphsssfraaw_r_r_r(dst, src, src2)) } +emit_evdotphsssfraaw_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evdotphsssfraaw_r_r_r(dst, src, src2)) } inst_evdotp4hgaumi_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVDOTP4HGAUMI, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evdotp4hgaumi_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evdotp4hgaumi_r_r_r(dst, src, src2)) } +emit_evdotp4hgaumi_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evdotp4hgaumi_r_r_r(dst, src, src2)) } inst_evdotp4hgasmi_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVDOTP4HGASMI, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evdotp4hgasmi_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evdotp4hgasmi_r_r_r(dst, src, src2)) } +emit_evdotp4hgasmi_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evdotp4hgasmi_r_r_r(dst, src, src2)) } inst_evdotp4hgasumi_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVDOTP4HGASUMI, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evdotp4hgasumi_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evdotp4hgasumi_r_r_r(dst, src, src2)) } +emit_evdotp4hgasumi_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evdotp4hgasumi_r_r_r(dst, src, src2)) } inst_evdotp4hgasmf_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVDOTP4HGASMF, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evdotp4hgasmf_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evdotp4hgasmf_r_r_r(dst, src, src2)) } +emit_evdotp4hgasmf_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evdotp4hgasmf_r_r_r(dst, src, src2)) } inst_evdotp4hgssmi_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVDOTP4HGSSMI, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evdotp4hgssmi_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evdotp4hgssmi_r_r_r(dst, src, src2)) } +emit_evdotp4hgssmi_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evdotp4hgssmi_r_r_r(dst, src, src2)) } inst_evdotp4hgssmf_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVDOTP4HGSSMF, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evdotp4hgssmf_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evdotp4hgssmf_r_r_r(dst, src, src2)) } +emit_evdotp4hgssmf_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evdotp4hgssmf_r_r_r(dst, src, src2)) } inst_evdotp4hxgasmi_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVDOTP4HXGASMI, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evdotp4hxgasmi_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evdotp4hxgasmi_r_r_r(dst, src, src2)) } +emit_evdotp4hxgasmi_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evdotp4hxgasmi_r_r_r(dst, src, src2)) } inst_evdotp4hxgasmf_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVDOTP4HXGASMF, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evdotp4hxgasmf_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evdotp4hxgasmf_r_r_r(dst, src, src2)) } +emit_evdotp4hxgasmf_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evdotp4hxgasmf_r_r_r(dst, src, src2)) } inst_evdotpbaumi_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVDOTPBAUMI, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evdotpbaumi_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evdotpbaumi_r_r_r(dst, src, src2)) } +emit_evdotpbaumi_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evdotpbaumi_r_r_r(dst, src, src2)) } inst_evdotpbasmi_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVDOTPBASMI, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evdotpbasmi_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evdotpbasmi_r_r_r(dst, src, src2)) } +emit_evdotpbasmi_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evdotpbasmi_r_r_r(dst, src, src2)) } inst_evdotpbasumi_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVDOTPBASUMI, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evdotpbasumi_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evdotpbasumi_r_r_r(dst, src, src2)) } +emit_evdotpbasumi_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evdotpbasumi_r_r_r(dst, src, src2)) } inst_evdotp4hxgssmi_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVDOTP4HXGSSMI, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evdotp4hxgssmi_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evdotp4hxgssmi_r_r_r(dst, src, src2)) } +emit_evdotp4hxgssmi_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evdotp4hxgssmi_r_r_r(dst, src, src2)) } inst_evdotp4hxgssmf_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVDOTP4HXGSSMF, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evdotp4hxgssmf_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evdotp4hxgssmf_r_r_r(dst, src, src2)) } +emit_evdotp4hxgssmf_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evdotp4hxgssmf_r_r_r(dst, src, src2)) } inst_evdotp4hgaumiaa3_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVDOTP4HGAUMIAA3, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evdotp4hgaumiaa3_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evdotp4hgaumiaa3_r_r_r(dst, src, src2)) } +emit_evdotp4hgaumiaa3_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evdotp4hgaumiaa3_r_r_r(dst, src, src2)) } inst_evdotp4hgasmiaa3_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVDOTP4HGASMIAA3, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evdotp4hgasmiaa3_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evdotp4hgasmiaa3_r_r_r(dst, src, src2)) } +emit_evdotp4hgasmiaa3_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evdotp4hgasmiaa3_r_r_r(dst, src, src2)) } inst_evdotp4hgasumiaa3_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVDOTP4HGASUMIAA3, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evdotp4hgasumiaa3_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evdotp4hgasumiaa3_r_r_r(dst, src, src2)) } +emit_evdotp4hgasumiaa3_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evdotp4hgasumiaa3_r_r_r(dst, src, src2)) } inst_evdotp4hgasmfaa3_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVDOTP4HGASMFAA3, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evdotp4hgasmfaa3_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evdotp4hgasmfaa3_r_r_r(dst, src, src2)) } +emit_evdotp4hgasmfaa3_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evdotp4hgasmfaa3_r_r_r(dst, src, src2)) } inst_evdotp4hgssmiaa3_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVDOTP4HGSSMIAA3, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evdotp4hgssmiaa3_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evdotp4hgssmiaa3_r_r_r(dst, src, src2)) } +emit_evdotp4hgssmiaa3_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evdotp4hgssmiaa3_r_r_r(dst, src, src2)) } inst_evdotp4hgssmfaa3_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVDOTP4HGSSMFAA3, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evdotp4hgssmfaa3_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evdotp4hgssmfaa3_r_r_r(dst, src, src2)) } +emit_evdotp4hgssmfaa3_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evdotp4hgssmfaa3_r_r_r(dst, src, src2)) } inst_evdotp4hxgasmiaa3_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVDOTP4HXGASMIAA3, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evdotp4hxgasmiaa3_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evdotp4hxgasmiaa3_r_r_r(dst, src, src2)) } +emit_evdotp4hxgasmiaa3_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evdotp4hxgasmiaa3_r_r_r(dst, src, src2)) } inst_evdotp4hxgasmfaa3_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVDOTP4HXGASMFAA3, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evdotp4hxgasmfaa3_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evdotp4hxgasmfaa3_r_r_r(dst, src, src2)) } +emit_evdotp4hxgasmfaa3_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evdotp4hxgasmfaa3_r_r_r(dst, src, src2)) } inst_evdotpbaumiaaw3_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVDOTPBAUMIAAW3, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evdotpbaumiaaw3_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evdotpbaumiaaw3_r_r_r(dst, src, src2)) } +emit_evdotpbaumiaaw3_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evdotpbaumiaaw3_r_r_r(dst, src, src2)) } inst_evdotpbasmiaaw3_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVDOTPBASMIAAW3, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evdotpbasmiaaw3_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evdotpbasmiaaw3_r_r_r(dst, src, src2)) } +emit_evdotpbasmiaaw3_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evdotpbasmiaaw3_r_r_r(dst, src, src2)) } inst_evdotpbasumiaaw3_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVDOTPBASUMIAAW3, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evdotpbasumiaaw3_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evdotpbasumiaaw3_r_r_r(dst, src, src2)) } +emit_evdotpbasumiaaw3_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evdotpbasumiaaw3_r_r_r(dst, src, src2)) } inst_evdotp4hxgssmiaa3_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVDOTP4HXGSSMIAA3, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evdotp4hxgssmiaa3_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evdotp4hxgssmiaa3_r_r_r(dst, src, src2)) } +emit_evdotp4hxgssmiaa3_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evdotp4hxgssmiaa3_r_r_r(dst, src, src2)) } inst_evdotp4hxgssmfaa3_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVDOTP4HXGSSMFAA3, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evdotp4hxgssmfaa3_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evdotp4hxgssmfaa3_r_r_r(dst, src, src2)) } +emit_evdotp4hxgssmfaa3_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evdotp4hxgssmfaa3_r_r_r(dst, src, src2)) } inst_evdotp4hgaumia_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVDOTP4HGAUMIA, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evdotp4hgaumia_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evdotp4hgaumia_r_r_r(dst, src, src2)) } +emit_evdotp4hgaumia_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evdotp4hgaumia_r_r_r(dst, src, src2)) } inst_evdotp4hgasmia_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVDOTP4HGASMIA, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evdotp4hgasmia_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evdotp4hgasmia_r_r_r(dst, src, src2)) } +emit_evdotp4hgasmia_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evdotp4hgasmia_r_r_r(dst, src, src2)) } inst_evdotp4hgasumia_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVDOTP4HGASUMIA, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evdotp4hgasumia_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evdotp4hgasumia_r_r_r(dst, src, src2)) } +emit_evdotp4hgasumia_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evdotp4hgasumia_r_r_r(dst, src, src2)) } inst_evdotp4hgasmfa_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVDOTP4HGASMFA, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evdotp4hgasmfa_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evdotp4hgasmfa_r_r_r(dst, src, src2)) } +emit_evdotp4hgasmfa_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evdotp4hgasmfa_r_r_r(dst, src, src2)) } inst_evdotp4hgssmia_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVDOTP4HGSSMIA, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evdotp4hgssmia_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evdotp4hgssmia_r_r_r(dst, src, src2)) } +emit_evdotp4hgssmia_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evdotp4hgssmia_r_r_r(dst, src, src2)) } inst_evdotp4hgssmfa_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVDOTP4HGSSMFA, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evdotp4hgssmfa_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evdotp4hgssmfa_r_r_r(dst, src, src2)) } +emit_evdotp4hgssmfa_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evdotp4hgssmfa_r_r_r(dst, src, src2)) } inst_evdotp4hxgasmia_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVDOTP4HXGASMIA, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evdotp4hxgasmia_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evdotp4hxgasmia_r_r_r(dst, src, src2)) } +emit_evdotp4hxgasmia_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evdotp4hxgasmia_r_r_r(dst, src, src2)) } inst_evdotp4hxgasmfa_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVDOTP4HXGASMFA, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evdotp4hxgasmfa_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evdotp4hxgasmfa_r_r_r(dst, src, src2)) } +emit_evdotp4hxgasmfa_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evdotp4hxgasmfa_r_r_r(dst, src, src2)) } inst_evdotpbaumia_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVDOTPBAUMIA, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evdotpbaumia_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evdotpbaumia_r_r_r(dst, src, src2)) } +emit_evdotpbaumia_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evdotpbaumia_r_r_r(dst, src, src2)) } inst_evdotpbasmia_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVDOTPBASMIA, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evdotpbasmia_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evdotpbasmia_r_r_r(dst, src, src2)) } +emit_evdotpbasmia_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evdotpbasmia_r_r_r(dst, src, src2)) } inst_evdotpbasumia_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVDOTPBASUMIA, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evdotpbasumia_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evdotpbasumia_r_r_r(dst, src, src2)) } +emit_evdotpbasumia_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evdotpbasumia_r_r_r(dst, src, src2)) } inst_evdotp4hxgssmia_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVDOTP4HXGSSMIA, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evdotp4hxgssmia_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evdotp4hxgssmia_r_r_r(dst, src, src2)) } +emit_evdotp4hxgssmia_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evdotp4hxgssmia_r_r_r(dst, src, src2)) } inst_evdotp4hxgssmfa_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVDOTP4HXGSSMFA, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evdotp4hxgssmfa_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evdotp4hxgssmfa_r_r_r(dst, src, src2)) } +emit_evdotp4hxgssmfa_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evdotp4hxgssmfa_r_r_r(dst, src, src2)) } inst_evdotp4hgaumiaa_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVDOTP4HGAUMIAA, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evdotp4hgaumiaa_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evdotp4hgaumiaa_r_r_r(dst, src, src2)) } +emit_evdotp4hgaumiaa_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evdotp4hgaumiaa_r_r_r(dst, src, src2)) } inst_evdotp4hgasmiaa_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVDOTP4HGASMIAA, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evdotp4hgasmiaa_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evdotp4hgasmiaa_r_r_r(dst, src, src2)) } +emit_evdotp4hgasmiaa_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evdotp4hgasmiaa_r_r_r(dst, src, src2)) } inst_evdotp4hgasumiaa_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVDOTP4HGASUMIAA, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evdotp4hgasumiaa_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evdotp4hgasumiaa_r_r_r(dst, src, src2)) } +emit_evdotp4hgasumiaa_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evdotp4hgasumiaa_r_r_r(dst, src, src2)) } inst_evdotp4hgasmfaa_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVDOTP4HGASMFAA, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evdotp4hgasmfaa_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evdotp4hgasmfaa_r_r_r(dst, src, src2)) } +emit_evdotp4hgasmfaa_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evdotp4hgasmfaa_r_r_r(dst, src, src2)) } inst_evdotp4hgssmiaa_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVDOTP4HGSSMIAA, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evdotp4hgssmiaa_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evdotp4hgssmiaa_r_r_r(dst, src, src2)) } +emit_evdotp4hgssmiaa_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evdotp4hgssmiaa_r_r_r(dst, src, src2)) } inst_evdotp4hgssmfaa_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVDOTP4HGSSMFAA, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evdotp4hgssmfaa_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evdotp4hgssmfaa_r_r_r(dst, src, src2)) } +emit_evdotp4hgssmfaa_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evdotp4hgssmfaa_r_r_r(dst, src, src2)) } inst_evdotp4hxgasmiaa_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVDOTP4HXGASMIAA, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evdotp4hxgasmiaa_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evdotp4hxgasmiaa_r_r_r(dst, src, src2)) } +emit_evdotp4hxgasmiaa_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evdotp4hxgasmiaa_r_r_r(dst, src, src2)) } inst_evdotp4hxgasmfaa_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVDOTP4HXGASMFAA, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evdotp4hxgasmfaa_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evdotp4hxgasmfaa_r_r_r(dst, src, src2)) } +emit_evdotp4hxgasmfaa_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evdotp4hxgasmfaa_r_r_r(dst, src, src2)) } inst_evdotpbaumiaaw_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVDOTPBAUMIAAW, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evdotpbaumiaaw_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evdotpbaumiaaw_r_r_r(dst, src, src2)) } +emit_evdotpbaumiaaw_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evdotpbaumiaaw_r_r_r(dst, src, src2)) } inst_evdotpbasmiaaw_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVDOTPBASMIAAW, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evdotpbasmiaaw_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evdotpbasmiaaw_r_r_r(dst, src, src2)) } +emit_evdotpbasmiaaw_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evdotpbasmiaaw_r_r_r(dst, src, src2)) } inst_evdotpbasumiaaw_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVDOTPBASUMIAAW, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evdotpbasumiaaw_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evdotpbasumiaaw_r_r_r(dst, src, src2)) } +emit_evdotpbasumiaaw_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evdotpbasumiaaw_r_r_r(dst, src, src2)) } inst_evdotp4hxgssmiaa_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVDOTP4HXGSSMIAA, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evdotp4hxgssmiaa_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evdotp4hxgssmiaa_r_r_r(dst, src, src2)) } +emit_evdotp4hxgssmiaa_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evdotp4hxgssmiaa_r_r_r(dst, src, src2)) } inst_evdotp4hxgssmfaa_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVDOTP4HXGSSMFAA, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evdotp4hxgssmfaa_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evdotp4hxgssmfaa_r_r_r(dst, src, src2)) } +emit_evdotp4hxgssmfaa_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evdotp4hxgssmfaa_r_r_r(dst, src, src2)) } inst_evdotpwausi_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVDOTPWAUSI, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evdotpwausi_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evdotpwausi_r_r_r(dst, src, src2)) } +emit_evdotpwausi_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evdotpwausi_r_r_r(dst, src, src2)) } inst_evdotpwassi_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVDOTPWASSI, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evdotpwassi_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evdotpwassi_r_r_r(dst, src, src2)) } +emit_evdotpwassi_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evdotpwassi_r_r_r(dst, src, src2)) } inst_evdotpwasusi_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVDOTPWASUSI, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evdotpwasusi_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evdotpwasusi_r_r_r(dst, src, src2)) } +emit_evdotpwasusi_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evdotpwasusi_r_r_r(dst, src, src2)) } inst_evdotpwaumi_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVDOTPWAUMI, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evdotpwaumi_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evdotpwaumi_r_r_r(dst, src, src2)) } +emit_evdotpwaumi_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evdotpwaumi_r_r_r(dst, src, src2)) } inst_evdotpwasmi_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVDOTPWASMI, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evdotpwasmi_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evdotpwasmi_r_r_r(dst, src, src2)) } +emit_evdotpwasmi_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evdotpwasmi_r_r_r(dst, src, src2)) } inst_evdotpwasumi_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVDOTPWASUMI, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evdotpwasumi_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evdotpwasumi_r_r_r(dst, src, src2)) } +emit_evdotpwasumi_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evdotpwasumi_r_r_r(dst, src, src2)) } inst_evdotpwssmi_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVDOTPWSSMI, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evdotpwssmi_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evdotpwssmi_r_r_r(dst, src, src2)) } +emit_evdotpwssmi_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evdotpwssmi_r_r_r(dst, src, src2)) } inst_evdotpwsssi_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVDOTPWSSSI, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evdotpwsssi_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evdotpwsssi_r_r_r(dst, src, src2)) } +emit_evdotpwsssi_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evdotpwsssi_r_r_r(dst, src, src2)) } inst_evdotpwausiaa3_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVDOTPWAUSIAA3, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evdotpwausiaa3_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evdotpwausiaa3_r_r_r(dst, src, src2)) } +emit_evdotpwausiaa3_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evdotpwausiaa3_r_r_r(dst, src, src2)) } inst_evdotpwassiaa3_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVDOTPWASSIAA3, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evdotpwassiaa3_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evdotpwassiaa3_r_r_r(dst, src, src2)) } +emit_evdotpwassiaa3_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evdotpwassiaa3_r_r_r(dst, src, src2)) } inst_evdotpwasusiaa3_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVDOTPWASUSIAA3, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evdotpwasusiaa3_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evdotpwasusiaa3_r_r_r(dst, src, src2)) } +emit_evdotpwasusiaa3_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evdotpwasusiaa3_r_r_r(dst, src, src2)) } inst_evdotpwsssiaa3_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVDOTPWSSSIAA3, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evdotpwsssiaa3_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evdotpwsssiaa3_r_r_r(dst, src, src2)) } +emit_evdotpwsssiaa3_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evdotpwsssiaa3_r_r_r(dst, src, src2)) } inst_evdotpwaumiaa3_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVDOTPWAUMIAA3, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evdotpwaumiaa3_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evdotpwaumiaa3_r_r_r(dst, src, src2)) } +emit_evdotpwaumiaa3_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evdotpwaumiaa3_r_r_r(dst, src, src2)) } inst_evdotpwasmiaa3_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVDOTPWASMIAA3, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evdotpwasmiaa3_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evdotpwasmiaa3_r_r_r(dst, src, src2)) } +emit_evdotpwasmiaa3_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evdotpwasmiaa3_r_r_r(dst, src, src2)) } inst_evdotpwasumiaa3_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVDOTPWASUMIAA3, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evdotpwasumiaa3_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evdotpwasumiaa3_r_r_r(dst, src, src2)) } +emit_evdotpwasumiaa3_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evdotpwasumiaa3_r_r_r(dst, src, src2)) } inst_evdotpwssmiaa3_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVDOTPWSSMIAA3, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evdotpwssmiaa3_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evdotpwssmiaa3_r_r_r(dst, src, src2)) } +emit_evdotpwssmiaa3_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evdotpwssmiaa3_r_r_r(dst, src, src2)) } inst_evdotpwausia_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVDOTPWAUSIA, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evdotpwausia_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evdotpwausia_r_r_r(dst, src, src2)) } +emit_evdotpwausia_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evdotpwausia_r_r_r(dst, src, src2)) } inst_evdotpwassia_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVDOTPWASSIA, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evdotpwassia_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evdotpwassia_r_r_r(dst, src, src2)) } +emit_evdotpwassia_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evdotpwassia_r_r_r(dst, src, src2)) } inst_evdotpwasusia_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVDOTPWASUSIA, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evdotpwasusia_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evdotpwasusia_r_r_r(dst, src, src2)) } +emit_evdotpwasusia_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evdotpwasusia_r_r_r(dst, src, src2)) } inst_evdotpwaumia_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVDOTPWAUMIA, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evdotpwaumia_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evdotpwaumia_r_r_r(dst, src, src2)) } +emit_evdotpwaumia_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evdotpwaumia_r_r_r(dst, src, src2)) } inst_evdotpwasmia_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVDOTPWASMIA, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evdotpwasmia_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evdotpwasmia_r_r_r(dst, src, src2)) } +emit_evdotpwasmia_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evdotpwasmia_r_r_r(dst, src, src2)) } inst_evdotpwasumia_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVDOTPWASUMIA, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evdotpwasumia_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evdotpwasumia_r_r_r(dst, src, src2)) } +emit_evdotpwasumia_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evdotpwasumia_r_r_r(dst, src, src2)) } inst_evdotpwssmia_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVDOTPWSSMIA, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evdotpwssmia_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evdotpwssmia_r_r_r(dst, src, src2)) } +emit_evdotpwssmia_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evdotpwssmia_r_r_r(dst, src, src2)) } inst_evdotpwsssia_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVDOTPWSSSIA, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evdotpwsssia_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evdotpwsssia_r_r_r(dst, src, src2)) } +emit_evdotpwsssia_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evdotpwsssia_r_r_r(dst, src, src2)) } inst_evdotpwausiaa_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVDOTPWAUSIAA, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evdotpwausiaa_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evdotpwausiaa_r_r_r(dst, src, src2)) } +emit_evdotpwausiaa_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evdotpwausiaa_r_r_r(dst, src, src2)) } inst_evdotpwassiaa_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVDOTPWASSIAA, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evdotpwassiaa_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evdotpwassiaa_r_r_r(dst, src, src2)) } +emit_evdotpwassiaa_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evdotpwassiaa_r_r_r(dst, src, src2)) } inst_evdotpwasusiaa_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVDOTPWASUSIAA, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evdotpwasusiaa_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evdotpwasusiaa_r_r_r(dst, src, src2)) } +emit_evdotpwasusiaa_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evdotpwasusiaa_r_r_r(dst, src, src2)) } inst_evdotpwsssiaa_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVDOTPWSSSIAA, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evdotpwsssiaa_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evdotpwsssiaa_r_r_r(dst, src, src2)) } +emit_evdotpwsssiaa_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evdotpwsssiaa_r_r_r(dst, src, src2)) } inst_evdotpwaumiaa_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVDOTPWAUMIAA, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evdotpwaumiaa_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evdotpwaumiaa_r_r_r(dst, src, src2)) } +emit_evdotpwaumiaa_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evdotpwaumiaa_r_r_r(dst, src, src2)) } inst_evdotpwasmiaa_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVDOTPWASMIAA, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evdotpwasmiaa_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evdotpwasmiaa_r_r_r(dst, src, src2)) } +emit_evdotpwasmiaa_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evdotpwasmiaa_r_r_r(dst, src, src2)) } inst_evdotpwasumiaa_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVDOTPWASUMIAA, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evdotpwasumiaa_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evdotpwasumiaa_r_r_r(dst, src, src2)) } +emit_evdotpwasumiaa_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evdotpwasumiaa_r_r_r(dst, src, src2)) } inst_evdotpwssmiaa_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVDOTPWSSMIAA, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evdotpwssmiaa_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evdotpwssmiaa_r_r_r(dst, src, src2)) } +emit_evdotpwssmiaa_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evdotpwssmiaa_r_r_r(dst, src, src2)) } inst_evaddib_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVADDIB, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evaddib_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evaddib_r_r_r(dst, src, src2)) } +emit_evaddib_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evaddib_r_r_r(dst, src, src2)) } inst_evaddih_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVADDIH, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evaddih_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evaddih_r_r_r(dst, src, src2)) } +emit_evaddih_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evaddih_r_r_r(dst, src, src2)) } inst_evsubifh_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVSUBIFH, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evsubifh_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evsubifh_r_r_r(dst, src, src2)) } +emit_evsubifh_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evsubifh_r_r_r(dst, src, src2)) } inst_evsubifb_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVSUBIFB, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evsubifb_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evsubifb_r_r_r(dst, src, src2)) } +emit_evsubifb_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evsubifb_r_r_r(dst, src, src2)) } inst_evabsb_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVABSB, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evabsb_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evabsb_r_r_r(dst, src, src2)) } +emit_evabsb_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evabsb_r_r_r(dst, src, src2)) } inst_evabsh_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVABSH, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evabsh_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evabsh_r_r_r(dst, src, src2)) } +emit_evabsh_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evabsh_r_r_r(dst, src, src2)) } inst_evabsd_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVABSD, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evabsd_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evabsd_r_r_r(dst, src, src2)) } +emit_evabsd_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evabsd_r_r_r(dst, src, src2)) } inst_evabss_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVABSS, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evabss_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evabss_r_r_r(dst, src, src2)) } +emit_evabss_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evabss_r_r_r(dst, src, src2)) } inst_evabsbs_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVABSBS, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evabsbs_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evabsbs_r_r_r(dst, src, src2)) } +emit_evabsbs_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evabsbs_r_r_r(dst, src, src2)) } inst_evabshs_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVABSHS, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evabshs_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evabshs_r_r_r(dst, src, src2)) } +emit_evabshs_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evabshs_r_r_r(dst, src, src2)) } inst_evabsds_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVABSDS, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evabsds_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evabsds_r_r_r(dst, src, src2)) } +emit_evabsds_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evabsds_r_r_r(dst, src, src2)) } inst_evnegwo_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVNEGWO, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evnegwo_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evnegwo_r_r_r(dst, src, src2)) } +emit_evnegwo_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evnegwo_r_r_r(dst, src, src2)) } inst_evnegb_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVNEGB, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evnegb_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evnegb_r_r_r(dst, src, src2)) } +emit_evnegb_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evnegb_r_r_r(dst, src, src2)) } inst_evnegbo_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVNEGBO, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evnegbo_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evnegbo_r_r_r(dst, src, src2)) } +emit_evnegbo_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evnegbo_r_r_r(dst, src, src2)) } inst_evnegh_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVNEGH, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evnegh_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evnegh_r_r_r(dst, src, src2)) } +emit_evnegh_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evnegh_r_r_r(dst, src, src2)) } inst_evnegho_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVNEGHO, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evnegho_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evnegho_r_r_r(dst, src, src2)) } +emit_evnegho_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evnegho_r_r_r(dst, src, src2)) } inst_evnegd_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVNEGD, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evnegd_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evnegd_r_r_r(dst, src, src2)) } +emit_evnegd_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evnegd_r_r_r(dst, src, src2)) } inst_evnegs_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVNEGS, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evnegs_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evnegs_r_r_r(dst, src, src2)) } +emit_evnegs_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evnegs_r_r_r(dst, src, src2)) } inst_evnegwos_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVNEGWOS, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evnegwos_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evnegwos_r_r_r(dst, src, src2)) } +emit_evnegwos_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evnegwos_r_r_r(dst, src, src2)) } inst_evnegbs_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVNEGBS, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evnegbs_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evnegbs_r_r_r(dst, src, src2)) } +emit_evnegbs_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evnegbs_r_r_r(dst, src, src2)) } inst_evnegbos_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVNEGBOS, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evnegbos_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evnegbos_r_r_r(dst, src, src2)) } +emit_evnegbos_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evnegbos_r_r_r(dst, src, src2)) } inst_evneghs_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVNEGHS, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evneghs_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evneghs_r_r_r(dst, src, src2)) } +emit_evneghs_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evneghs_r_r_r(dst, src, src2)) } inst_evneghos_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVNEGHOS, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evneghos_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evneghos_r_r_r(dst, src, src2)) } +emit_evneghos_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evneghos_r_r_r(dst, src, src2)) } inst_evnegds_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVNEGDS, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evnegds_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evnegds_r_r_r(dst, src, src2)) } +emit_evnegds_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evnegds_r_r_r(dst, src, src2)) } inst_evextzb_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVEXTZB, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evextzb_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evextzb_r_r_r(dst, src, src2)) } +emit_evextzb_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evextzb_r_r_r(dst, src, src2)) } inst_evextsbh_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVEXTSBH, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evextsbh_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evextsbh_r_r_r(dst, src, src2)) } +emit_evextsbh_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evextsbh_r_r_r(dst, src, src2)) } inst_evextsw_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVEXTSW, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evextsw_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evextsw_r_r_r(dst, src, src2)) } +emit_evextsw_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evextsw_r_r_r(dst, src, src2)) } inst_evrndwh_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVRNDWH, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evrndwh_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evrndwh_r_r_r(dst, src, src2)) } +emit_evrndwh_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evrndwh_r_r_r(dst, src, src2)) } inst_evrndhb_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVRNDHB, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evrndhb_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evrndhb_r_r_r(dst, src, src2)) } +emit_evrndhb_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evrndhb_r_r_r(dst, src, src2)) } inst_evrnddw_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVRNDDW, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evrnddw_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evrnddw_r_r_r(dst, src, src2)) } +emit_evrnddw_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evrnddw_r_r_r(dst, src, src2)) } inst_evrndwhus_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVRNDWHUS, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evrndwhus_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evrndwhus_r_r_r(dst, src, src2)) } +emit_evrndwhus_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evrndwhus_r_r_r(dst, src, src2)) } inst_evrndwhss_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVRNDWHSS, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evrndwhss_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evrndwhss_r_r_r(dst, src, src2)) } +emit_evrndwhss_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evrndwhss_r_r_r(dst, src, src2)) } inst_evrndhbus_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVRNDHBUS, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evrndhbus_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evrndhbus_r_r_r(dst, src, src2)) } +emit_evrndhbus_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evrndhbus_r_r_r(dst, src, src2)) } inst_evrndhbss_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVRNDHBSS, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evrndhbss_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evrndhbss_r_r_r(dst, src, src2)) } +emit_evrndhbss_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evrndhbss_r_r_r(dst, src, src2)) } inst_evrnddwus_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVRNDDWUS, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evrnddwus_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evrnddwus_r_r_r(dst, src, src2)) } +emit_evrnddwus_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evrnddwus_r_r_r(dst, src, src2)) } inst_evrnddwss_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVRNDDWSS, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evrnddwss_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evrnddwss_r_r_r(dst, src, src2)) } +emit_evrnddwss_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evrnddwss_r_r_r(dst, src, src2)) } inst_evrndwnh_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVRNDWNH, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evrndwnh_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evrndwnh_r_r_r(dst, src, src2)) } +emit_evrndwnh_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evrndwnh_r_r_r(dst, src, src2)) } inst_evrndhnb_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVRNDHNB, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evrndhnb_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evrndhnb_r_r_r(dst, src, src2)) } +emit_evrndhnb_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evrndhnb_r_r_r(dst, src, src2)) } inst_evrnddnw_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVRNDDNW, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evrnddnw_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evrnddnw_r_r_r(dst, src, src2)) } +emit_evrnddnw_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evrnddnw_r_r_r(dst, src, src2)) } inst_evrndwnhus_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVRNDWNHUS, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evrndwnhus_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evrndwnhus_r_r_r(dst, src, src2)) } +emit_evrndwnhus_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evrndwnhus_r_r_r(dst, src, src2)) } inst_evrndwnhss_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVRNDWNHSS, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evrndwnhss_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evrndwnhss_r_r_r(dst, src, src2)) } +emit_evrndwnhss_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evrndwnhss_r_r_r(dst, src, src2)) } inst_evrndhnbus_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVRNDHNBUS, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evrndhnbus_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evrndhnbus_r_r_r(dst, src, src2)) } +emit_evrndhnbus_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evrndhnbus_r_r_r(dst, src, src2)) } inst_evrndhnbss_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVRNDHNBSS, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evrndhnbss_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evrndhnbss_r_r_r(dst, src, src2)) } +emit_evrndhnbss_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evrndhnbss_r_r_r(dst, src, src2)) } inst_evrnddnwus_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVRNDDNWUS, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evrnddnwus_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evrnddnwus_r_r_r(dst, src, src2)) } +emit_evrnddnwus_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evrnddnwus_r_r_r(dst, src, src2)) } inst_evrnddnwss_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVRNDDNWSS, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evrnddnwss_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evrnddnwss_r_r_r(dst, src, src2)) } +emit_evrnddnwss_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evrnddnwss_r_r_r(dst, src, src2)) } inst_evcntlzh_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVCNTLZH, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evcntlzh_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evcntlzh_r_r_r(dst, src, src2)) } +emit_evcntlzh_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evcntlzh_r_r_r(dst, src, src2)) } inst_evcntlsh_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVCNTLSH, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evcntlsh_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evcntlsh_r_r_r(dst, src, src2)) } +emit_evcntlsh_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evcntlsh_r_r_r(dst, src, src2)) } inst_evpopcntb_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVPOPCNTB, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evpopcntb_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evpopcntb_r_r_r(dst, src, src2)) } +emit_evpopcntb_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evpopcntb_r_r_r(dst, src, src2)) } inst_circinc_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .CIRCINC, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_circinc_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_circinc_r_r_r(dst, src, src2)) } +emit_circinc_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_circinc_r_r_r(dst, src, src2)) } inst_evunpkhibui_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVUNPKHIBUI, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evunpkhibui_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evunpkhibui_r_r_r(dst, src, src2)) } +emit_evunpkhibui_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evunpkhibui_r_r_r(dst, src, src2)) } inst_evunpkhibsi_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVUNPKHIBSI, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evunpkhibsi_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evunpkhibsi_r_r_r(dst, src, src2)) } +emit_evunpkhibsi_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evunpkhibsi_r_r_r(dst, src, src2)) } inst_evunpkhihui_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVUNPKHIHUI, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evunpkhihui_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evunpkhihui_r_r_r(dst, src, src2)) } +emit_evunpkhihui_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evunpkhihui_r_r_r(dst, src, src2)) } inst_evunpkhihsi_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVUNPKHIHSI, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evunpkhihsi_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evunpkhihsi_r_r_r(dst, src, src2)) } +emit_evunpkhihsi_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evunpkhihsi_r_r_r(dst, src, src2)) } inst_evunpklobui_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVUNPKLOBUI, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evunpklobui_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evunpklobui_r_r_r(dst, src, src2)) } +emit_evunpklobui_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evunpklobui_r_r_r(dst, src, src2)) } inst_evunpklobsi_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVUNPKLOBSI, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evunpklobsi_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evunpklobsi_r_r_r(dst, src, src2)) } +emit_evunpklobsi_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evunpklobsi_r_r_r(dst, src, src2)) } inst_evunpklohui_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVUNPKLOHUI, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evunpklohui_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evunpklohui_r_r_r(dst, src, src2)) } +emit_evunpklohui_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evunpklohui_r_r_r(dst, src, src2)) } inst_evunpklohsi_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVUNPKLOHSI, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evunpklohsi_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evunpklohsi_r_r_r(dst, src, src2)) } +emit_evunpklohsi_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evunpklohsi_r_r_r(dst, src, src2)) } inst_evunpklohf_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVUNPKLOHF, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evunpklohf_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evunpklohf_r_r_r(dst, src, src2)) } +emit_evunpklohf_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evunpklohf_r_r_r(dst, src, src2)) } inst_evunpkhihf_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVUNPKHIHF, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evunpkhihf_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evunpkhihf_r_r_r(dst, src, src2)) } +emit_evunpkhihf_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evunpkhihf_r_r_r(dst, src, src2)) } inst_evunpklowgsf_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVUNPKLOWGSF, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evunpklowgsf_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evunpklowgsf_r_r_r(dst, src, src2)) } +emit_evunpklowgsf_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evunpklowgsf_r_r_r(dst, src, src2)) } inst_evunpkhiwgsf_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVUNPKHIWGSF, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evunpkhiwgsf_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evunpkhiwgsf_r_r_r(dst, src, src2)) } +emit_evunpkhiwgsf_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evunpkhiwgsf_r_r_r(dst, src, src2)) } inst_evsatsduw_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVSATSDUW, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evsatsduw_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evsatsduw_r_r_r(dst, src, src2)) } +emit_evsatsduw_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evsatsduw_r_r_r(dst, src, src2)) } inst_evsatsdsw_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVSATSDSW, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evsatsdsw_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evsatsdsw_r_r_r(dst, src, src2)) } +emit_evsatsdsw_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evsatsdsw_r_r_r(dst, src, src2)) } inst_evsatshub_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVSATSHUB, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evsatshub_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evsatshub_r_r_r(dst, src, src2)) } +emit_evsatshub_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evsatshub_r_r_r(dst, src, src2)) } inst_evsatshsb_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVSATSHSB, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evsatshsb_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evsatshsb_r_r_r(dst, src, src2)) } +emit_evsatshsb_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evsatshsb_r_r_r(dst, src, src2)) } inst_evsatuwuh_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVSATUWUH, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evsatuwuh_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evsatuwuh_r_r_r(dst, src, src2)) } +emit_evsatuwuh_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evsatuwuh_r_r_r(dst, src, src2)) } inst_evsatswsh_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVSATSWSH, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evsatswsh_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evsatswsh_r_r_r(dst, src, src2)) } +emit_evsatswsh_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evsatswsh_r_r_r(dst, src, src2)) } inst_evsatswuh_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVSATSWUH, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evsatswuh_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evsatswuh_r_r_r(dst, src, src2)) } +emit_evsatswuh_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evsatswuh_r_r_r(dst, src, src2)) } inst_evsatuhub_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVSATUHUB, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evsatuhub_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evsatuhub_r_r_r(dst, src, src2)) } +emit_evsatuhub_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evsatuhub_r_r_r(dst, src, src2)) } inst_evsatuduw_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVSATUDUW, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evsatuduw_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evsatuduw_r_r_r(dst, src, src2)) } +emit_evsatuduw_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evsatuduw_r_r_r(dst, src, src2)) } inst_evsatuwsw_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVSATUWSW, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evsatuwsw_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evsatuwsw_r_r_r(dst, src, src2)) } +emit_evsatuwsw_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evsatuwsw_r_r_r(dst, src, src2)) } inst_evsatshuh_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVSATSHUH, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evsatshuh_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evsatshuh_r_r_r(dst, src, src2)) } +emit_evsatshuh_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evsatshuh_r_r_r(dst, src, src2)) } inst_evsatuhsh_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVSATUHSH, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evsatuhsh_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evsatuhsh_r_r_r(dst, src, src2)) } +emit_evsatuhsh_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evsatuhsh_r_r_r(dst, src, src2)) } inst_evsatswuw_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVSATSWUW, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evsatswuw_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evsatswuw_r_r_r(dst, src, src2)) } +emit_evsatswuw_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evsatswuw_r_r_r(dst, src, src2)) } inst_evsatswgsdf_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVSATSWGSDF, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evsatswgsdf_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evsatswgsdf_r_r_r(dst, src, src2)) } +emit_evsatswgsdf_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evsatswgsdf_r_r_r(dst, src, src2)) } inst_evsatsbub_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVSATSBUB, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evsatsbub_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evsatsbub_r_r_r(dst, src, src2)) } +emit_evsatsbub_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evsatsbub_r_r_r(dst, src, src2)) } inst_evsatubsb_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVSATUBSB, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evsatubsb_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evsatubsb_r_r_r(dst, src, src2)) } +emit_evsatubsb_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evsatubsb_r_r_r(dst, src, src2)) } inst_evmaxhpuw_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVMAXHPUW, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evmaxhpuw_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evmaxhpuw_r_r_r(dst, src, src2)) } +emit_evmaxhpuw_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evmaxhpuw_r_r_r(dst, src, src2)) } inst_evmaxhpsw_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVMAXHPSW, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evmaxhpsw_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evmaxhpsw_r_r_r(dst, src, src2)) } +emit_evmaxhpsw_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evmaxhpsw_r_r_r(dst, src, src2)) } inst_evmaxbpuh_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVMAXBPUH, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evmaxbpuh_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evmaxbpuh_r_r_r(dst, src, src2)) } +emit_evmaxbpuh_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evmaxbpuh_r_r_r(dst, src, src2)) } inst_evmaxbpsh_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVMAXBPSH, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evmaxbpsh_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evmaxbpsh_r_r_r(dst, src, src2)) } +emit_evmaxbpsh_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evmaxbpsh_r_r_r(dst, src, src2)) } inst_evmaxwpud_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVMAXWPUD, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evmaxwpud_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evmaxwpud_r_r_r(dst, src, src2)) } +emit_evmaxwpud_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evmaxwpud_r_r_r(dst, src, src2)) } inst_evmaxwpsd_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVMAXWPSD, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evmaxwpsd_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evmaxwpsd_r_r_r(dst, src, src2)) } +emit_evmaxwpsd_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evmaxwpsd_r_r_r(dst, src, src2)) } inst_evminhpuw_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVMINHPUW, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evminhpuw_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evminhpuw_r_r_r(dst, src, src2)) } +emit_evminhpuw_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evminhpuw_r_r_r(dst, src, src2)) } inst_evminhpsw_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVMINHPSW, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evminhpsw_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evminhpsw_r_r_r(dst, src, src2)) } +emit_evminhpsw_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evminhpsw_r_r_r(dst, src, src2)) } inst_evminbpuh_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVMINBPUH, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evminbpuh_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evminbpuh_r_r_r(dst, src, src2)) } +emit_evminbpuh_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evminbpuh_r_r_r(dst, src, src2)) } inst_evminbpsh_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVMINBPSH, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evminbpsh_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evminbpsh_r_r_r(dst, src, src2)) } +emit_evminbpsh_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evminbpsh_r_r_r(dst, src, src2)) } inst_evminwpud_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVMINWPUD, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evminwpud_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evminwpud_r_r_r(dst, src, src2)) } +emit_evminwpud_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evminwpud_r_r_r(dst, src, src2)) } inst_evminwpsd_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVMINWPSD, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evminwpsd_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evminwpsd_r_r_r(dst, src, src2)) } +emit_evminwpsd_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evminwpsd_r_r_r(dst, src, src2)) } inst_evmaxmagws_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVMAXMAGWS, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evmaxmagws_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evmaxmagws_r_r_r(dst, src, src2)) } +emit_evmaxmagws_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evmaxmagws_r_r_r(dst, src, src2)) } inst_evsl_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVSL, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evsl_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evsl_r_r_r(dst, src, src2)) } +emit_evsl_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evsl_r_r_r(dst, src, src2)) } inst_evsli_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVSLI, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evsli_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evsli_r_r_r(dst, src, src2)) } +emit_evsli_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evsli_r_r_r(dst, src, src2)) } inst_evsplatie_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVSPLATIE, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evsplatie_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evsplatie_r_r_r(dst, src, src2)) } +emit_evsplatie_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evsplatie_r_r_r(dst, src, src2)) } inst_evsplatib_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVSPLATIB, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evsplatib_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evsplatib_r_r_r(dst, src, src2)) } +emit_evsplatib_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evsplatib_r_r_r(dst, src, src2)) } inst_evsplatibe_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVSPLATIBE, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evsplatibe_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evsplatibe_r_r_r(dst, src, src2)) } +emit_evsplatibe_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evsplatibe_r_r_r(dst, src, src2)) } inst_evsplatih_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVSPLATIH, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evsplatih_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evsplatih_r_r_r(dst, src, src2)) } +emit_evsplatih_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evsplatih_r_r_r(dst, src, src2)) } inst_evsplatihe_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVSPLATIHE, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evsplatihe_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evsplatihe_r_r_r(dst, src, src2)) } +emit_evsplatihe_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evsplatihe_r_r_r(dst, src, src2)) } inst_evsplatid_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVSPLATID, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evsplatid_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evsplatid_r_r_r(dst, src, src2)) } +emit_evsplatid_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evsplatid_r_r_r(dst, src, src2)) } inst_evsplatia_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVSPLATIA, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evsplatia_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evsplatia_r_r_r(dst, src, src2)) } +emit_evsplatia_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evsplatia_r_r_r(dst, src, src2)) } inst_evsplatiea_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVSPLATIEA, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evsplatiea_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evsplatiea_r_r_r(dst, src, src2)) } +emit_evsplatiea_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evsplatiea_r_r_r(dst, src, src2)) } inst_evsplatiba_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVSPLATIBA, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evsplatiba_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evsplatiba_r_r_r(dst, src, src2)) } +emit_evsplatiba_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evsplatiba_r_r_r(dst, src, src2)) } inst_evsplatibea_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVSPLATIBEA, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evsplatibea_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evsplatibea_r_r_r(dst, src, src2)) } +emit_evsplatibea_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evsplatibea_r_r_r(dst, src, src2)) } inst_evsplatiha_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVSPLATIHA, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evsplatiha_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evsplatiha_r_r_r(dst, src, src2)) } +emit_evsplatiha_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evsplatiha_r_r_r(dst, src, src2)) } inst_evsplatihea_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVSPLATIHEA, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evsplatihea_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evsplatihea_r_r_r(dst, src, src2)) } +emit_evsplatihea_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evsplatihea_r_r_r(dst, src, src2)) } inst_evsplatida_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVSPLATIDA, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evsplatida_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evsplatida_r_r_r(dst, src, src2)) } +emit_evsplatida_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evsplatida_r_r_r(dst, src, src2)) } inst_evsplatfio_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVSPLATFIO, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evsplatfio_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evsplatfio_r_r_r(dst, src, src2)) } +emit_evsplatfio_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evsplatfio_r_r_r(dst, src, src2)) } inst_evsplatfib_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVSPLATFIB, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evsplatfib_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evsplatfib_r_r_r(dst, src, src2)) } +emit_evsplatfib_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evsplatfib_r_r_r(dst, src, src2)) } inst_evsplatfibo_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVSPLATFIBO, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evsplatfibo_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evsplatfibo_r_r_r(dst, src, src2)) } +emit_evsplatfibo_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evsplatfibo_r_r_r(dst, src, src2)) } inst_evsplatfih_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVSPLATFIH, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evsplatfih_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evsplatfih_r_r_r(dst, src, src2)) } +emit_evsplatfih_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evsplatfih_r_r_r(dst, src, src2)) } inst_evsplatfiho_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVSPLATFIHO, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evsplatfiho_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evsplatfiho_r_r_r(dst, src, src2)) } +emit_evsplatfiho_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evsplatfiho_r_r_r(dst, src, src2)) } inst_evsplatfid_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVSPLATFID, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evsplatfid_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evsplatfid_r_r_r(dst, src, src2)) } +emit_evsplatfid_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evsplatfid_r_r_r(dst, src, src2)) } inst_evsplatfia_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVSPLATFIA, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evsplatfia_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evsplatfia_r_r_r(dst, src, src2)) } +emit_evsplatfia_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evsplatfia_r_r_r(dst, src, src2)) } inst_evsplatfioa_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVSPLATFIOA, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evsplatfioa_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evsplatfioa_r_r_r(dst, src, src2)) } +emit_evsplatfioa_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evsplatfioa_r_r_r(dst, src, src2)) } inst_evsplatfiba_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVSPLATFIBA, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evsplatfiba_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evsplatfiba_r_r_r(dst, src, src2)) } +emit_evsplatfiba_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evsplatfiba_r_r_r(dst, src, src2)) } inst_evsplatfiboa_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVSPLATFIBOA, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evsplatfiboa_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evsplatfiboa_r_r_r(dst, src, src2)) } +emit_evsplatfiboa_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evsplatfiboa_r_r_r(dst, src, src2)) } inst_evsplatfiha_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVSPLATFIHA, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evsplatfiha_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evsplatfiha_r_r_r(dst, src, src2)) } +emit_evsplatfiha_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evsplatfiha_r_r_r(dst, src, src2)) } inst_evsplatfihoa_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVSPLATFIHOA, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evsplatfihoa_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evsplatfihoa_r_r_r(dst, src, src2)) } +emit_evsplatfihoa_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evsplatfihoa_r_r_r(dst, src, src2)) } inst_evsplatfida_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVSPLATFIDA, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evsplatfida_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evsplatfida_r_r_r(dst, src, src2)) } +emit_evsplatfida_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evsplatfida_r_r_r(dst, src, src2)) } inst_evcmpgtdu_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVCMPGTDU, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evcmpgtdu_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evcmpgtdu_r_r_r(dst, src, src2)) } +emit_evcmpgtdu_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evcmpgtdu_r_r_r(dst, src, src2)) } inst_evcmpgtds_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVCMPGTDS, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evcmpgtds_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evcmpgtds_r_r_r(dst, src, src2)) } +emit_evcmpgtds_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evcmpgtds_r_r_r(dst, src, src2)) } inst_evcmpltdu_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVCMPLTDU, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evcmpltdu_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evcmpltdu_r_r_r(dst, src, src2)) } +emit_evcmpltdu_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evcmpltdu_r_r_r(dst, src, src2)) } inst_evcmpltds_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVCMPLTDS, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evcmpltds_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evcmpltds_r_r_r(dst, src, src2)) } +emit_evcmpltds_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evcmpltds_r_r_r(dst, src, src2)) } inst_evcmpeqd_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVCMPEQD, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evcmpeqd_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evcmpeqd_r_r_r(dst, src, src2)) } +emit_evcmpeqd_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evcmpeqd_r_r_r(dst, src, src2)) } inst_evswapbhilo_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVSWAPBHILO, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evswapbhilo_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evswapbhilo_r_r_r(dst, src, src2)) } +emit_evswapbhilo_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evswapbhilo_r_r_r(dst, src, src2)) } inst_evswapblohi_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVSWAPBLOHI, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evswapblohi_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evswapblohi_r_r_r(dst, src, src2)) } +emit_evswapblohi_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evswapblohi_r_r_r(dst, src, src2)) } inst_evswaphhilo_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVSWAPHHILO, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evswaphhilo_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evswaphhilo_r_r_r(dst, src, src2)) } +emit_evswaphhilo_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evswaphhilo_r_r_r(dst, src, src2)) } inst_evswaphlohi_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVSWAPHLOHI, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evswaphlohi_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evswaphlohi_r_r_r(dst, src, src2)) } +emit_evswaphlohi_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evswaphlohi_r_r_r(dst, src, src2)) } inst_evswaphe_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVSWAPHE, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evswaphe_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evswaphe_r_r_r(dst, src, src2)) } +emit_evswaphe_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evswaphe_r_r_r(dst, src, src2)) } inst_evswaphhi_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVSWAPHHI, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evswaphhi_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evswaphhi_r_r_r(dst, src, src2)) } +emit_evswaphhi_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evswaphhi_r_r_r(dst, src, src2)) } inst_evswaphlo_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVSWAPHLO, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evswaphlo_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evswaphlo_r_r_r(dst, src, src2)) } +emit_evswaphlo_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evswaphlo_r_r_r(dst, src, src2)) } inst_evswapho_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVSWAPHO, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evswapho_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evswapho_r_r_r(dst, src, src2)) } +emit_evswapho_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evswapho_r_r_r(dst, src, src2)) } inst_evinsb_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVINSB, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evinsb_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evinsb_r_r_r(dst, src, src2)) } +emit_evinsb_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evinsb_r_r_r(dst, src, src2)) } inst_evxtrb_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVXTRB, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evxtrb_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evxtrb_r_r_r(dst, src, src2)) } +emit_evxtrb_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evxtrb_r_r_r(dst, src, src2)) } inst_evsplath_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVSPLATH, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evsplath_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evsplath_r_r_r(dst, src, src2)) } +emit_evsplath_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evsplath_r_r_r(dst, src, src2)) } inst_evsplatb_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVSPLATB, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evsplatb_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evsplatb_r_r_r(dst, src, src2)) } +emit_evsplatb_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evsplatb_r_r_r(dst, src, src2)) } inst_evinsh_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVINSH, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evinsh_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evinsh_r_r_r(dst, src, src2)) } +emit_evinsh_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evinsh_r_r_r(dst, src, src2)) } inst_evclrbe_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVCLRBE, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evclrbe_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evclrbe_r_r_r(dst, src, src2)) } +emit_evclrbe_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evclrbe_r_r_r(dst, src, src2)) } inst_evclrbo_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVCLRBO, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evclrbo_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evclrbo_r_r_r(dst, src, src2)) } +emit_evclrbo_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evclrbo_r_r_r(dst, src, src2)) } inst_evclrh_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVCLRH, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evclrh_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evclrh_r_r_r(dst, src, src2)) } +emit_evclrh_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evclrh_r_r_r(dst, src, src2)) } inst_evxtrh_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVXTRH, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evxtrh_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evxtrh_r_r_r(dst, src, src2)) } +emit_evxtrh_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evxtrh_r_r_r(dst, src, src2)) } inst_evselbitm0_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVSELBITM0, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evselbitm0_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evselbitm0_r_r_r(dst, src, src2)) } +emit_evselbitm0_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evselbitm0_r_r_r(dst, src, src2)) } inst_evselbitm1_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVSELBITM1, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evselbitm1_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evselbitm1_r_r_r(dst, src, src2)) } +emit_evselbitm1_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evselbitm1_r_r_r(dst, src, src2)) } inst_evselbit_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVSELBIT, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evselbit_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evselbit_r_r_r(dst, src, src2)) } +emit_evselbit_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evselbit_r_r_r(dst, src, src2)) } inst_evperm_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVPERM, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evperm_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evperm_r_r_r(dst, src, src2)) } +emit_evperm_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evperm_r_r_r(dst, src, src2)) } inst_evperm2_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVPERM2, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evperm2_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evperm2_r_r_r(dst, src, src2)) } +emit_evperm2_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evperm2_r_r_r(dst, src, src2)) } inst_evperm3_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVPERM3, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evperm3_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evperm3_r_r_r(dst, src, src2)) } +emit_evperm3_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evperm3_r_r_r(dst, src, src2)) } inst_evxtrd_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVXTRD, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evxtrd_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evxtrd_r_r_r(dst, src, src2)) } +emit_evxtrd_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evxtrd_r_r_r(dst, src, src2)) } inst_evsrbu_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVSRBU, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evsrbu_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evsrbu_r_r_r(dst, src, src2)) } +emit_evsrbu_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evsrbu_r_r_r(dst, src, src2)) } inst_evsrbs_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVSRBS, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evsrbs_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evsrbs_r_r_r(dst, src, src2)) } +emit_evsrbs_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evsrbs_r_r_r(dst, src, src2)) } inst_evsrbiu_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVSRBIU, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evsrbiu_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evsrbiu_r_r_r(dst, src, src2)) } +emit_evsrbiu_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evsrbiu_r_r_r(dst, src, src2)) } inst_evsrbis_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVSRBIS, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evsrbis_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evsrbis_r_r_r(dst, src, src2)) } +emit_evsrbis_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evsrbis_r_r_r(dst, src, src2)) } inst_evslb_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVSLB, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evslb_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evslb_r_r_r(dst, src, src2)) } +emit_evslb_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evslb_r_r_r(dst, src, src2)) } inst_evrlb_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVRLB, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evrlb_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evrlb_r_r_r(dst, src, src2)) } +emit_evrlb_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evrlb_r_r_r(dst, src, src2)) } inst_evslbi_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVSLBI, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evslbi_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evslbi_r_r_r(dst, src, src2)) } +emit_evslbi_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evslbi_r_r_r(dst, src, src2)) } inst_evrlbi_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVRLBI, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evrlbi_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evrlbi_r_r_r(dst, src, src2)) } +emit_evrlbi_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evrlbi_r_r_r(dst, src, src2)) } inst_evsrhu_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVSRHU, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evsrhu_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evsrhu_r_r_r(dst, src, src2)) } +emit_evsrhu_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evsrhu_r_r_r(dst, src, src2)) } inst_evsrhs_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVSRHS, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evsrhs_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evsrhs_r_r_r(dst, src, src2)) } +emit_evsrhs_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evsrhs_r_r_r(dst, src, src2)) } inst_evsrhiu_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVSRHIU, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evsrhiu_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evsrhiu_r_r_r(dst, src, src2)) } +emit_evsrhiu_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evsrhiu_r_r_r(dst, src, src2)) } inst_evsrhis_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVSRHIS, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evsrhis_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evsrhis_r_r_r(dst, src, src2)) } +emit_evsrhis_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evsrhis_r_r_r(dst, src, src2)) } inst_evslh_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVSLH, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evslh_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evslh_r_r_r(dst, src, src2)) } +emit_evslh_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evslh_r_r_r(dst, src, src2)) } inst_evrlh_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVRLH, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evrlh_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evrlh_r_r_r(dst, src, src2)) } +emit_evrlh_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evrlh_r_r_r(dst, src, src2)) } inst_evslhi_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVSLHI, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evslhi_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evslhi_r_r_r(dst, src, src2)) } +emit_evslhi_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evslhi_r_r_r(dst, src, src2)) } inst_evrlhi_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVRLHI, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evrlhi_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evrlhi_r_r_r(dst, src, src2)) } +emit_evrlhi_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evrlhi_r_r_r(dst, src, src2)) } inst_evsru_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVSRU, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evsru_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evsru_r_r_r(dst, src, src2)) } +emit_evsru_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evsru_r_r_r(dst, src, src2)) } inst_evsrs_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVSRS, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evsrs_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evsrs_r_r_r(dst, src, src2)) } +emit_evsrs_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evsrs_r_r_r(dst, src, src2)) } inst_evsriu_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVSRIU, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evsriu_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evsriu_r_r_r(dst, src, src2)) } +emit_evsriu_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evsriu_r_r_r(dst, src, src2)) } inst_evsris_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVSRIS, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evsris_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evsris_r_r_r(dst, src, src2)) } +emit_evsris_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evsris_r_r_r(dst, src, src2)) } inst_evlvsl_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVLVSL, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evlvsl_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evlvsl_r_r_r(dst, src, src2)) } +emit_evlvsl_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evlvsl_r_r_r(dst, src, src2)) } inst_evlvsr_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVLVSR, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evlvsr_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evlvsr_r_r_r(dst, src, src2)) } +emit_evlvsr_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evlvsr_r_r_r(dst, src, src2)) } inst_evsroiu_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVSROIU, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evsroiu_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evsroiu_r_r_r(dst, src, src2)) } +emit_evsroiu_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evsroiu_r_r_r(dst, src, src2)) } inst_evsrois_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVSROIS, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evsrois_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evsrois_r_r_r(dst, src, src2)) } +emit_evsrois_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evsrois_r_r_r(dst, src, src2)) } inst_evsloi_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVSLOI, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evsloi_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evsloi_r_r_r(dst, src, src2)) } +emit_evsloi_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evsloi_r_r_r(dst, src, src2)) } inst_evldbx_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVLDBX, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evldbx_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evldbx_r_r_r(dst, src, src2)) } +emit_evldbx_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evldbx_r_r_r(dst, src, src2)) } inst_evldb_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVLDB, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evldb_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evldb_r_r_r(dst, src, src2)) } +emit_evldb_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evldb_r_r_r(dst, src, src2)) } inst_evlhhsplathx_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVLHHSPLATHX, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evlhhsplathx_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evlhhsplathx_r_r_r(dst, src, src2)) } +emit_evlhhsplathx_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evlhhsplathx_r_r_r(dst, src, src2)) } inst_evlhhsplath_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVLHHSPLATH, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evlhhsplath_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evlhhsplath_r_r_r(dst, src, src2)) } +emit_evlhhsplath_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evlhhsplath_r_r_r(dst, src, src2)) } inst_evlwbsplatwx_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVLWBSPLATWX, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evlwbsplatwx_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evlwbsplatwx_r_r_r(dst, src, src2)) } +emit_evlwbsplatwx_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evlwbsplatwx_r_r_r(dst, src, src2)) } inst_evlwbsplatw_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVLWBSPLATW, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evlwbsplatw_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evlwbsplatw_r_r_r(dst, src, src2)) } +emit_evlwbsplatw_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evlwbsplatw_r_r_r(dst, src, src2)) } inst_evlwhsplatwx_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVLWHSPLATWX, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evlwhsplatwx_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evlwhsplatwx_r_r_r(dst, src, src2)) } +emit_evlwhsplatwx_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evlwhsplatwx_r_r_r(dst, src, src2)) } inst_evlwhsplatw_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVLWHSPLATW, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evlwhsplatw_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evlwhsplatw_r_r_r(dst, src, src2)) } +emit_evlwhsplatw_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evlwhsplatw_r_r_r(dst, src, src2)) } inst_evlbbsplatbx_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVLBBSPLATBX, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evlbbsplatbx_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evlbbsplatbx_r_r_r(dst, src, src2)) } +emit_evlbbsplatbx_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evlbbsplatbx_r_r_r(dst, src, src2)) } inst_evlbbsplatb_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVLBBSPLATB, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evlbbsplatb_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evlbbsplatb_r_r_r(dst, src, src2)) } +emit_evlbbsplatb_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evlbbsplatb_r_r_r(dst, src, src2)) } inst_evstdbx_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVSTDBX, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evstdbx_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evstdbx_r_r_r(dst, src, src2)) } +emit_evstdbx_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evstdbx_r_r_r(dst, src, src2)) } inst_evstdb_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVSTDB, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evstdb_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evstdb_r_r_r(dst, src, src2)) } +emit_evstdb_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evstdb_r_r_r(dst, src, src2)) } inst_evlwbex_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVLWBEX, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evlwbex_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evlwbex_r_r_r(dst, src, src2)) } +emit_evlwbex_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evlwbex_r_r_r(dst, src, src2)) } inst_evlwbe_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVLWBE, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evlwbe_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evlwbe_r_r_r(dst, src, src2)) } +emit_evlwbe_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evlwbe_r_r_r(dst, src, src2)) } inst_evlwboux_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVLWBOUX, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evlwboux_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evlwboux_r_r_r(dst, src, src2)) } +emit_evlwboux_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evlwboux_r_r_r(dst, src, src2)) } inst_evlwbou_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVLWBOU, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evlwbou_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evlwbou_r_r_r(dst, src, src2)) } +emit_evlwbou_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evlwbou_r_r_r(dst, src, src2)) } inst_evlwbosx_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVLWBOSX, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evlwbosx_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evlwbosx_r_r_r(dst, src, src2)) } +emit_evlwbosx_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evlwbosx_r_r_r(dst, src, src2)) } inst_evlwbos_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVLWBOS, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evlwbos_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evlwbos_r_r_r(dst, src, src2)) } +emit_evlwbos_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evlwbos_r_r_r(dst, src, src2)) } inst_evstwbex_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVSTWBEX, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evstwbex_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evstwbex_r_r_r(dst, src, src2)) } +emit_evstwbex_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evstwbex_r_r_r(dst, src, src2)) } inst_evstwbe_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVSTWBE, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evstwbe_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evstwbe_r_r_r(dst, src, src2)) } +emit_evstwbe_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evstwbe_r_r_r(dst, src, src2)) } inst_evstwbox_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVSTWBOX, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evstwbox_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evstwbox_r_r_r(dst, src, src2)) } +emit_evstwbox_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evstwbox_r_r_r(dst, src, src2)) } inst_evstwbo_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVSTWBO, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evstwbo_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evstwbo_r_r_r(dst, src, src2)) } +emit_evstwbo_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evstwbo_r_r_r(dst, src, src2)) } inst_evstwbx_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVSTWBX, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evstwbx_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evstwbx_r_r_r(dst, src, src2)) } +emit_evstwbx_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evstwbx_r_r_r(dst, src, src2)) } inst_evstwb_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVSTWB, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evstwb_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evstwb_r_r_r(dst, src, src2)) } +emit_evstwb_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evstwb_r_r_r(dst, src, src2)) } inst_evsthbx_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVSTHBX, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evsthbx_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evsthbx_r_r_r(dst, src, src2)) } +emit_evsthbx_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evsthbx_r_r_r(dst, src, src2)) } inst_evsthb_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVSTHB, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evsthb_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evsthb_r_r_r(dst, src, src2)) } +emit_evsthb_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evsthb_r_r_r(dst, src, src2)) } inst_evlddmx_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVLDDMX, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evlddmx_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evlddmx_r_r_r(dst, src, src2)) } +emit_evlddmx_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evlddmx_r_r_r(dst, src, src2)) } inst_evlddu_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVLDDU, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evlddu_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evlddu_r_r_r(dst, src, src2)) } +emit_evlddu_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evlddu_r_r_r(dst, src, src2)) } inst_evldwmx_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVLDWMX, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evldwmx_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evldwmx_r_r_r(dst, src, src2)) } +emit_evldwmx_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evldwmx_r_r_r(dst, src, src2)) } inst_evldwu_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVLDWU, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evldwu_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evldwu_r_r_r(dst, src, src2)) } +emit_evldwu_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evldwu_r_r_r(dst, src, src2)) } inst_evldhmx_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVLDHMX, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evldhmx_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evldhmx_r_r_r(dst, src, src2)) } +emit_evldhmx_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evldhmx_r_r_r(dst, src, src2)) } inst_evldhu_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVLDHU, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evldhu_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evldhu_r_r_r(dst, src, src2)) } +emit_evldhu_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evldhu_r_r_r(dst, src, src2)) } inst_evldbmx_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVLDBMX, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evldbmx_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evldbmx_r_r_r(dst, src, src2)) } +emit_evldbmx_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evldbmx_r_r_r(dst, src, src2)) } inst_evldbu_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVLDBU, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evldbu_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evldbu_r_r_r(dst, src, src2)) } +emit_evldbu_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evldbu_r_r_r(dst, src, src2)) } inst_evlhhesplatmx_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVLHHESPLATMX, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evlhhesplatmx_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evlhhesplatmx_r_r_r(dst, src, src2)) } +emit_evlhhesplatmx_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evlhhesplatmx_r_r_r(dst, src, src2)) } inst_evlhhesplatu_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVLHHESPLATU, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evlhhesplatu_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evlhhesplatu_r_r_r(dst, src, src2)) } +emit_evlhhesplatu_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evlhhesplatu_r_r_r(dst, src, src2)) } inst_evlhhsplathmx_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVLHHSPLATHMX, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evlhhsplathmx_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evlhhsplathmx_r_r_r(dst, src, src2)) } +emit_evlhhsplathmx_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evlhhsplathmx_r_r_r(dst, src, src2)) } inst_evlhhsplathu_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVLHHSPLATHU, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evlhhsplathu_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evlhhsplathu_r_r_r(dst, src, src2)) } +emit_evlhhsplathu_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evlhhsplathu_r_r_r(dst, src, src2)) } inst_evlhhousplatmx_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVLHHOUSPLATMX, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evlhhousplatmx_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evlhhousplatmx_r_r_r(dst, src, src2)) } +emit_evlhhousplatmx_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evlhhousplatmx_r_r_r(dst, src, src2)) } inst_evlhhousplatu_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVLHHOUSPLATU, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evlhhousplatu_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evlhhousplatu_r_r_r(dst, src, src2)) } +emit_evlhhousplatu_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evlhhousplatu_r_r_r(dst, src, src2)) } inst_evlhhossplatmx_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVLHHOSSPLATMX, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evlhhossplatmx_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evlhhossplatmx_r_r_r(dst, src, src2)) } +emit_evlhhossplatmx_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evlhhossplatmx_r_r_r(dst, src, src2)) } inst_evlhhossplatu_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVLHHOSSPLATU, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evlhhossplatu_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evlhhossplatu_r_r_r(dst, src, src2)) } +emit_evlhhossplatu_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evlhhossplatu_r_r_r(dst, src, src2)) } inst_evlwhemx_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVLWHEMX, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evlwhemx_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evlwhemx_r_r_r(dst, src, src2)) } +emit_evlwhemx_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evlwhemx_r_r_r(dst, src, src2)) } inst_evlwheu_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVLWHEU, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evlwheu_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evlwheu_r_r_r(dst, src, src2)) } +emit_evlwheu_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evlwheu_r_r_r(dst, src, src2)) } inst_evlwbsplatwmx_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVLWBSPLATWMX, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evlwbsplatwmx_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evlwbsplatwmx_r_r_r(dst, src, src2)) } +emit_evlwbsplatwmx_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evlwbsplatwmx_r_r_r(dst, src, src2)) } inst_evlwbsplatwu_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVLWBSPLATWU, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evlwbsplatwu_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evlwbsplatwu_r_r_r(dst, src, src2)) } +emit_evlwbsplatwu_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evlwbsplatwu_r_r_r(dst, src, src2)) } inst_evlwhoumx_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVLWHOUMX, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evlwhoumx_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evlwhoumx_r_r_r(dst, src, src2)) } +emit_evlwhoumx_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evlwhoumx_r_r_r(dst, src, src2)) } inst_evlwhouu_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVLWHOUU, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evlwhouu_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evlwhouu_r_r_r(dst, src, src2)) } +emit_evlwhouu_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evlwhouu_r_r_r(dst, src, src2)) } inst_evlwhosmx_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVLWHOSMX, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evlwhosmx_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evlwhosmx_r_r_r(dst, src, src2)) } +emit_evlwhosmx_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evlwhosmx_r_r_r(dst, src, src2)) } inst_evlwhosu_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVLWHOSU, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evlwhosu_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evlwhosu_r_r_r(dst, src, src2)) } +emit_evlwhosu_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evlwhosu_r_r_r(dst, src, src2)) } inst_evlwwsplatmx_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVLWWSPLATMX, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evlwwsplatmx_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evlwwsplatmx_r_r_r(dst, src, src2)) } +emit_evlwwsplatmx_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evlwwsplatmx_r_r_r(dst, src, src2)) } inst_evlwwsplatu_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVLWWSPLATU, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evlwwsplatu_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evlwwsplatu_r_r_r(dst, src, src2)) } +emit_evlwwsplatu_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evlwwsplatu_r_r_r(dst, src, src2)) } inst_evlwhsplatwmx_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVLWHSPLATWMX, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evlwhsplatwmx_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evlwhsplatwmx_r_r_r(dst, src, src2)) } +emit_evlwhsplatwmx_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evlwhsplatwmx_r_r_r(dst, src, src2)) } inst_evlwhsplatwu_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVLWHSPLATWU, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evlwhsplatwu_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evlwhsplatwu_r_r_r(dst, src, src2)) } +emit_evlwhsplatwu_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evlwhsplatwu_r_r_r(dst, src, src2)) } inst_evlwhsplatmx_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVLWHSPLATMX, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evlwhsplatmx_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evlwhsplatmx_r_r_r(dst, src, src2)) } +emit_evlwhsplatmx_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evlwhsplatmx_r_r_r(dst, src, src2)) } inst_evlwhsplatu_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVLWHSPLATU, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evlwhsplatu_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evlwhsplatu_r_r_r(dst, src, src2)) } +emit_evlwhsplatu_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evlwhsplatu_r_r_r(dst, src, src2)) } inst_evlbbsplatbmx_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVLBBSPLATBMX, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evlbbsplatbmx_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evlbbsplatbmx_r_r_r(dst, src, src2)) } +emit_evlbbsplatbmx_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evlbbsplatbmx_r_r_r(dst, src, src2)) } inst_evlbbsplatbu_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVLBBSPLATBU, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evlbbsplatbu_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evlbbsplatbu_r_r_r(dst, src, src2)) } +emit_evlbbsplatbu_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evlbbsplatbu_r_r_r(dst, src, src2)) } inst_evstddmx_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVSTDDMX, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evstddmx_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evstddmx_r_r_r(dst, src, src2)) } +emit_evstddmx_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evstddmx_r_r_r(dst, src, src2)) } inst_evstddu_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVSTDDU, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evstddu_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evstddu_r_r_r(dst, src, src2)) } +emit_evstddu_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evstddu_r_r_r(dst, src, src2)) } inst_evstdwmx_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVSTDWMX, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evstdwmx_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evstdwmx_r_r_r(dst, src, src2)) } +emit_evstdwmx_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evstdwmx_r_r_r(dst, src, src2)) } inst_evstdwu_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVSTDWU, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evstdwu_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evstdwu_r_r_r(dst, src, src2)) } +emit_evstdwu_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evstdwu_r_r_r(dst, src, src2)) } inst_evstdhmx_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVSTDHMX, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evstdhmx_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evstdhmx_r_r_r(dst, src, src2)) } +emit_evstdhmx_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evstdhmx_r_r_r(dst, src, src2)) } inst_evstdhu_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVSTDHU, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evstdhu_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evstdhu_r_r_r(dst, src, src2)) } +emit_evstdhu_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evstdhu_r_r_r(dst, src, src2)) } inst_evstdbmx_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVSTDBMX, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evstdbmx_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evstdbmx_r_r_r(dst, src, src2)) } +emit_evstdbmx_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evstdbmx_r_r_r(dst, src, src2)) } inst_evstdbu_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVSTDBU, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evstdbu_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evstdbu_r_r_r(dst, src, src2)) } +emit_evstdbu_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evstdbu_r_r_r(dst, src, src2)) } inst_evlwbemx_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVLWBEMX, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evlwbemx_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evlwbemx_r_r_r(dst, src, src2)) } +emit_evlwbemx_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evlwbemx_r_r_r(dst, src, src2)) } inst_evlwbeu_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVLWBEU, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evlwbeu_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evlwbeu_r_r_r(dst, src, src2)) } +emit_evlwbeu_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evlwbeu_r_r_r(dst, src, src2)) } inst_evlwboumx_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVLWBOUMX, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evlwboumx_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evlwboumx_r_r_r(dst, src, src2)) } +emit_evlwboumx_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evlwboumx_r_r_r(dst, src, src2)) } inst_evlwbouu_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVLWBOUU, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evlwbouu_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evlwbouu_r_r_r(dst, src, src2)) } +emit_evlwbouu_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evlwbouu_r_r_r(dst, src, src2)) } inst_evlwbosmx_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVLWBOSMX, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evlwbosmx_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evlwbosmx_r_r_r(dst, src, src2)) } +emit_evlwbosmx_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evlwbosmx_r_r_r(dst, src, src2)) } inst_evlwbosu_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVLWBOSU, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evlwbosu_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evlwbosu_r_r_r(dst, src, src2)) } +emit_evlwbosu_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evlwbosu_r_r_r(dst, src, src2)) } inst_evstwhemx_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVSTWHEMX, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evstwhemx_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evstwhemx_r_r_r(dst, src, src2)) } +emit_evstwhemx_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evstwhemx_r_r_r(dst, src, src2)) } inst_evstwheu_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVSTWHEU, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evstwheu_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evstwheu_r_r_r(dst, src, src2)) } +emit_evstwheu_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evstwheu_r_r_r(dst, src, src2)) } inst_evstwbemx_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVSTWBEMX, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evstwbemx_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evstwbemx_r_r_r(dst, src, src2)) } +emit_evstwbemx_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evstwbemx_r_r_r(dst, src, src2)) } inst_evstwbeu_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVSTWBEU, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evstwbeu_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evstwbeu_r_r_r(dst, src, src2)) } +emit_evstwbeu_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evstwbeu_r_r_r(dst, src, src2)) } inst_evstwhomx_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVSTWHOMX, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evstwhomx_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evstwhomx_r_r_r(dst, src, src2)) } +emit_evstwhomx_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evstwhomx_r_r_r(dst, src, src2)) } inst_evstwhou_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVSTWHOU, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evstwhou_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evstwhou_r_r_r(dst, src, src2)) } +emit_evstwhou_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evstwhou_r_r_r(dst, src, src2)) } inst_evstwbomx_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVSTWBOMX, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evstwbomx_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evstwbomx_r_r_r(dst, src, src2)) } +emit_evstwbomx_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evstwbomx_r_r_r(dst, src, src2)) } inst_evstwbou_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVSTWBOU, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evstwbou_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evstwbou_r_r_r(dst, src, src2)) } +emit_evstwbou_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evstwbou_r_r_r(dst, src, src2)) } inst_evstwwemx_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVSTWWEMX, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evstwwemx_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evstwwemx_r_r_r(dst, src, src2)) } +emit_evstwwemx_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evstwwemx_r_r_r(dst, src, src2)) } inst_evstwweu_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVSTWWEU, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evstwweu_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evstwweu_r_r_r(dst, src, src2)) } +emit_evstwweu_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evstwweu_r_r_r(dst, src, src2)) } inst_evstwbmx_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVSTWBMX, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evstwbmx_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evstwbmx_r_r_r(dst, src, src2)) } +emit_evstwbmx_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evstwbmx_r_r_r(dst, src, src2)) } inst_evstwbu_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVSTWBU, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evstwbu_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evstwbu_r_r_r(dst, src, src2)) } +emit_evstwbu_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evstwbu_r_r_r(dst, src, src2)) } inst_evstwwomx_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVSTWWOMX, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evstwwomx_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evstwwomx_r_r_r(dst, src, src2)) } +emit_evstwwomx_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evstwwomx_r_r_r(dst, src, src2)) } inst_evstwwou_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVSTWWOU, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evstwwou_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evstwwou_r_r_r(dst, src, src2)) } +emit_evstwwou_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evstwwou_r_r_r(dst, src, src2)) } inst_evsthbmx_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVSTHBMX, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evsthbmx_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evsthbmx_r_r_r(dst, src, src2)) } +emit_evsthbmx_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evsthbmx_r_r_r(dst, src, src2)) } inst_evsthbu_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVSTHBU, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evsthbu_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evsthbu_r_r_r(dst, src, src2)) } +emit_evsthbu_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evsthbu_r_r_r(dst, src, src2)) } inst_evmhusi_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVMHUSI, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evmhusi_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evmhusi_r_r_r(dst, src, src2)) } +emit_evmhusi_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evmhusi_r_r_r(dst, src, src2)) } inst_evmhssi_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVMHSSI, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evmhssi_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evmhssi_r_r_r(dst, src, src2)) } +emit_evmhssi_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evmhssi_r_r_r(dst, src, src2)) } inst_evmhsusi_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVMHSUSI, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evmhsusi_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evmhsusi_r_r_r(dst, src, src2)) } +emit_evmhsusi_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evmhsusi_r_r_r(dst, src, src2)) } inst_evmhssf_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVMHSSF, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evmhssf_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evmhssf_r_r_r(dst, src, src2)) } +emit_evmhssf_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evmhssf_r_r_r(dst, src, src2)) } inst_evmhumi_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVMHUMI, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evmhumi_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evmhumi_r_r_r(dst, src, src2)) } +emit_evmhumi_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evmhumi_r_r_r(dst, src, src2)) } inst_evmhssfr_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVMHSSFR, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evmhssfr_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evmhssfr_r_r_r(dst, src, src2)) } +emit_evmhssfr_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evmhssfr_r_r_r(dst, src, src2)) } inst_evmhesumi_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVMHESUMI, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evmhesumi_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evmhesumi_r_r_r(dst, src, src2)) } +emit_evmhesumi_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evmhesumi_r_r_r(dst, src, src2)) } inst_evmhosumi_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVMHOSUMI, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evmhosumi_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evmhosumi_r_r_r(dst, src, src2)) } +emit_evmhosumi_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evmhosumi_r_r_r(dst, src, src2)) } inst_evmbeumi_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVMBEUMI, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evmbeumi_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evmbeumi_r_r_r(dst, src, src2)) } +emit_evmbeumi_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evmbeumi_r_r_r(dst, src, src2)) } inst_evmbesmi_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVMBESMI, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evmbesmi_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evmbesmi_r_r_r(dst, src, src2)) } +emit_evmbesmi_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evmbesmi_r_r_r(dst, src, src2)) } inst_evmbesumi_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVMBESUMI, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evmbesumi_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evmbesumi_r_r_r(dst, src, src2)) } +emit_evmbesumi_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evmbesumi_r_r_r(dst, src, src2)) } inst_evmboumi_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVMBOUMI, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evmboumi_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evmboumi_r_r_r(dst, src, src2)) } +emit_evmboumi_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evmboumi_r_r_r(dst, src, src2)) } inst_evmbosmi_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVMBOSMI, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evmbosmi_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evmbosmi_r_r_r(dst, src, src2)) } +emit_evmbosmi_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evmbosmi_r_r_r(dst, src, src2)) } inst_evmbosumi_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVMBOSUMI, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evmbosumi_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evmbosumi_r_r_r(dst, src, src2)) } +emit_evmbosumi_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evmbosumi_r_r_r(dst, src, src2)) } inst_evmhesumia_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVMHESUMIA, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evmhesumia_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evmhesumia_r_r_r(dst, src, src2)) } +emit_evmhesumia_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evmhesumia_r_r_r(dst, src, src2)) } inst_evmhosumia_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVMHOSUMIA, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evmhosumia_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evmhosumia_r_r_r(dst, src, src2)) } +emit_evmhosumia_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evmhosumia_r_r_r(dst, src, src2)) } inst_evmbeumia_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVMBEUMIA, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evmbeumia_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evmbeumia_r_r_r(dst, src, src2)) } +emit_evmbeumia_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evmbeumia_r_r_r(dst, src, src2)) } inst_evmbesmia_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVMBESMIA, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evmbesmia_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evmbesmia_r_r_r(dst, src, src2)) } +emit_evmbesmia_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evmbesmia_r_r_r(dst, src, src2)) } inst_evmbesumia_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVMBESUMIA, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evmbesumia_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evmbesumia_r_r_r(dst, src, src2)) } +emit_evmbesumia_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evmbesumia_r_r_r(dst, src, src2)) } inst_evmboumia_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVMBOUMIA, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evmboumia_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evmboumia_r_r_r(dst, src, src2)) } +emit_evmboumia_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evmboumia_r_r_r(dst, src, src2)) } inst_evmbosmia_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVMBOSMIA, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evmbosmia_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evmbosmia_r_r_r(dst, src, src2)) } +emit_evmbosmia_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evmbosmia_r_r_r(dst, src, src2)) } inst_evmbosumia_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVMBOSUMIA, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evmbosumia_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evmbosumia_r_r_r(dst, src, src2)) } +emit_evmbosumia_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evmbosumia_r_r_r(dst, src, src2)) } inst_evmwusiw_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVMWUSIW, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evmwusiw_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evmwusiw_r_r_r(dst, src, src2)) } +emit_evmwusiw_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evmwusiw_r_r_r(dst, src, src2)) } inst_evmwssiw_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVMWSSIW, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evmwssiw_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evmwssiw_r_r_r(dst, src, src2)) } +emit_evmwssiw_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evmwssiw_r_r_r(dst, src, src2)) } inst_evmwhssfr_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVMWHSSFR, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evmwhssfr_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evmwhssfr_r_r_r(dst, src, src2)) } +emit_evmwhssfr_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evmwhssfr_r_r_r(dst, src, src2)) } inst_evmwehgsmfr_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVMWEHGSMFR, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evmwehgsmfr_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evmwehgsmfr_r_r_r(dst, src, src2)) } +emit_evmwehgsmfr_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evmwehgsmfr_r_r_r(dst, src, src2)) } inst_evmwehgsmf_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVMWEHGSMF, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evmwehgsmf_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evmwehgsmf_r_r_r(dst, src, src2)) } +emit_evmwehgsmf_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evmwehgsmf_r_r_r(dst, src, src2)) } inst_evmwohgsmfr_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVMWOHGSMFR, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evmwohgsmfr_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evmwohgsmfr_r_r_r(dst, src, src2)) } +emit_evmwohgsmfr_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evmwohgsmfr_r_r_r(dst, src, src2)) } inst_evmwohgsmf_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVMWOHGSMF, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evmwohgsmf_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evmwohgsmf_r_r_r(dst, src, src2)) } +emit_evmwohgsmf_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evmwohgsmf_r_r_r(dst, src, src2)) } inst_evmwhssfra_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVMWHSSFRA, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evmwhssfra_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evmwhssfra_r_r_r(dst, src, src2)) } +emit_evmwhssfra_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evmwhssfra_r_r_r(dst, src, src2)) } inst_evmwehgsmfra_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVMWEHGSMFRA, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evmwehgsmfra_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evmwehgsmfra_r_r_r(dst, src, src2)) } +emit_evmwehgsmfra_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evmwehgsmfra_r_r_r(dst, src, src2)) } inst_evmwehgsmfa_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVMWEHGSMFA, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evmwehgsmfa_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evmwehgsmfa_r_r_r(dst, src, src2)) } +emit_evmwehgsmfa_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evmwehgsmfa_r_r_r(dst, src, src2)) } inst_evmwohgsmfra_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVMWOHGSMFRA, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evmwohgsmfra_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evmwohgsmfra_r_r_r(dst, src, src2)) } +emit_evmwohgsmfra_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evmwohgsmfra_r_r_r(dst, src, src2)) } inst_evmwohgsmfa_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVMWOHGSMFA, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evmwohgsmfa_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evmwohgsmfa_r_r_r(dst, src, src2)) } +emit_evmwohgsmfa_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evmwohgsmfa_r_r_r(dst, src, src2)) } inst_evaddusiaa_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVADDUSIAA, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evaddusiaa_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evaddusiaa_r_r_r(dst, src, src2)) } +emit_evaddusiaa_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evaddusiaa_r_r_r(dst, src, src2)) } inst_evaddssiaa_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVADDSSIAA, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evaddssiaa_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evaddssiaa_r_r_r(dst, src, src2)) } +emit_evaddssiaa_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evaddssiaa_r_r_r(dst, src, src2)) } inst_evsubfusiaa_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVSUBFUSIAA, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evsubfusiaa_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evsubfusiaa_r_r_r(dst, src, src2)) } +emit_evsubfusiaa_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evsubfusiaa_r_r_r(dst, src, src2)) } inst_evsubfssiaa_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVSUBFSSIAA, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evsubfssiaa_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evsubfssiaa_r_r_r(dst, src, src2)) } +emit_evsubfssiaa_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evsubfssiaa_r_r_r(dst, src, src2)) } inst_evaddsmiaa_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVADDSMIAA, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evaddsmiaa_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evaddsmiaa_r_r_r(dst, src, src2)) } +emit_evaddsmiaa_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evaddsmiaa_r_r_r(dst, src, src2)) } inst_evsubfsmiaa_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVSUBFSMIAA, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evsubfsmiaa_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evsubfsmiaa_r_r_r(dst, src, src2)) } +emit_evsubfsmiaa_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evsubfsmiaa_r_r_r(dst, src, src2)) } inst_evaddh_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVADDH, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evaddh_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evaddh_r_r_r(dst, src, src2)) } +emit_evaddh_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evaddh_r_r_r(dst, src, src2)) } inst_evaddhss_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVADDHSS, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evaddhss_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evaddhss_r_r_r(dst, src, src2)) } +emit_evaddhss_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evaddhss_r_r_r(dst, src, src2)) } inst_evsubfh_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVSUBFH, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evsubfh_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evsubfh_r_r_r(dst, src, src2)) } +emit_evsubfh_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evsubfh_r_r_r(dst, src, src2)) } inst_evsubfhss_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVSUBFHSS, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evsubfhss_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evsubfhss_r_r_r(dst, src, src2)) } +emit_evsubfhss_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evsubfhss_r_r_r(dst, src, src2)) } inst_evaddhx_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVADDHX, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evaddhx_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evaddhx_r_r_r(dst, src, src2)) } +emit_evaddhx_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evaddhx_r_r_r(dst, src, src2)) } inst_evaddhxss_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVADDHXSS, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evaddhxss_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evaddhxss_r_r_r(dst, src, src2)) } +emit_evaddhxss_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evaddhxss_r_r_r(dst, src, src2)) } inst_evsubfhx_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVSUBFHX, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evsubfhx_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evsubfhx_r_r_r(dst, src, src2)) } +emit_evsubfhx_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evsubfhx_r_r_r(dst, src, src2)) } inst_evsubfhxss_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVSUBFHXSS, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evsubfhxss_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evsubfhxss_r_r_r(dst, src, src2)) } +emit_evsubfhxss_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evsubfhxss_r_r_r(dst, src, src2)) } inst_evaddd_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVADDD, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evaddd_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evaddd_r_r_r(dst, src, src2)) } +emit_evaddd_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evaddd_r_r_r(dst, src, src2)) } inst_evadddss_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVADDDSS, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evadddss_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evadddss_r_r_r(dst, src, src2)) } +emit_evadddss_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evadddss_r_r_r(dst, src, src2)) } inst_evsubfd_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVSUBFD, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evsubfd_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evsubfd_r_r_r(dst, src, src2)) } +emit_evsubfd_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evsubfd_r_r_r(dst, src, src2)) } inst_evsubfdss_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVSUBFDSS, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evsubfdss_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evsubfdss_r_r_r(dst, src, src2)) } +emit_evsubfdss_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evsubfdss_r_r_r(dst, src, src2)) } inst_evaddb_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVADDB, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evaddb_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evaddb_r_r_r(dst, src, src2)) } +emit_evaddb_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evaddb_r_r_r(dst, src, src2)) } inst_evaddbss_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVADDBSS, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evaddbss_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evaddbss_r_r_r(dst, src, src2)) } +emit_evaddbss_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evaddbss_r_r_r(dst, src, src2)) } inst_evsubfb_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVSUBFB, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evsubfb_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evsubfb_r_r_r(dst, src, src2)) } +emit_evsubfb_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evsubfb_r_r_r(dst, src, src2)) } inst_evsubfbss_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVSUBFBSS, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evsubfbss_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evsubfbss_r_r_r(dst, src, src2)) } +emit_evsubfbss_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evsubfbss_r_r_r(dst, src, src2)) } inst_evaddsubfh_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVADDSUBFH, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evaddsubfh_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evaddsubfh_r_r_r(dst, src, src2)) } +emit_evaddsubfh_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evaddsubfh_r_r_r(dst, src, src2)) } inst_evaddsubfhss_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVADDSUBFHSS, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evaddsubfhss_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evaddsubfhss_r_r_r(dst, src, src2)) } +emit_evaddsubfhss_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evaddsubfhss_r_r_r(dst, src, src2)) } inst_evsubfaddh_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVSUBFADDH, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evsubfaddh_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evsubfaddh_r_r_r(dst, src, src2)) } +emit_evsubfaddh_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evsubfaddh_r_r_r(dst, src, src2)) } inst_evsubfaddhss_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVSUBFADDHSS, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evsubfaddhss_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evsubfaddhss_r_r_r(dst, src, src2)) } +emit_evsubfaddhss_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evsubfaddhss_r_r_r(dst, src, src2)) } inst_evaddsubfhx_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVADDSUBFHX, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evaddsubfhx_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evaddsubfhx_r_r_r(dst, src, src2)) } +emit_evaddsubfhx_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evaddsubfhx_r_r_r(dst, src, src2)) } inst_evaddsubfhxss_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVADDSUBFHXSS, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evaddsubfhxss_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evaddsubfhxss_r_r_r(dst, src, src2)) } +emit_evaddsubfhxss_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evaddsubfhxss_r_r_r(dst, src, src2)) } inst_evsubfaddhx_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVSUBFADDHX, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evsubfaddhx_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evsubfaddhx_r_r_r(dst, src, src2)) } +emit_evsubfaddhx_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evsubfaddhx_r_r_r(dst, src, src2)) } inst_evsubfaddhxss_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVSUBFADDHXSS, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evsubfaddhxss_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evsubfaddhxss_r_r_r(dst, src, src2)) } +emit_evsubfaddhxss_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evsubfaddhxss_r_r_r(dst, src, src2)) } inst_evadddus_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVADDDUS, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evadddus_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evadddus_r_r_r(dst, src, src2)) } +emit_evadddus_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evadddus_r_r_r(dst, src, src2)) } inst_evaddbus_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVADDBUS, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evaddbus_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evaddbus_r_r_r(dst, src, src2)) } +emit_evaddbus_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evaddbus_r_r_r(dst, src, src2)) } inst_evsubfdus_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVSUBFDUS, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evsubfdus_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evsubfdus_r_r_r(dst, src, src2)) } +emit_evsubfdus_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evsubfdus_r_r_r(dst, src, src2)) } inst_evsubfbus_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVSUBFBUS, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evsubfbus_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evsubfbus_r_r_r(dst, src, src2)) } +emit_evsubfbus_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evsubfbus_r_r_r(dst, src, src2)) } inst_evaddwus_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVADDWUS, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evaddwus_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evaddwus_r_r_r(dst, src, src2)) } +emit_evaddwus_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evaddwus_r_r_r(dst, src, src2)) } inst_evaddwxus_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVADDWXUS, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evaddwxus_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evaddwxus_r_r_r(dst, src, src2)) } +emit_evaddwxus_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evaddwxus_r_r_r(dst, src, src2)) } inst_evsubfwus_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVSUBFWUS, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evsubfwus_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evsubfwus_r_r_r(dst, src, src2)) } +emit_evsubfwus_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evsubfwus_r_r_r(dst, src, src2)) } inst_evsubfwxus_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVSUBFWXUS, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evsubfwxus_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evsubfwxus_r_r_r(dst, src, src2)) } +emit_evsubfwxus_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evsubfwxus_r_r_r(dst, src, src2)) } inst_evadd2subf2h_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVADD2SUBF2H, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evadd2subf2h_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evadd2subf2h_r_r_r(dst, src, src2)) } +emit_evadd2subf2h_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evadd2subf2h_r_r_r(dst, src, src2)) } inst_evadd2subf2hss_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVADD2SUBF2HSS, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evadd2subf2hss_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evadd2subf2hss_r_r_r(dst, src, src2)) } +emit_evadd2subf2hss_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evadd2subf2hss_r_r_r(dst, src, src2)) } inst_evsubf2add2h_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVSUBF2ADD2H, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evsubf2add2h_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evsubf2add2h_r_r_r(dst, src, src2)) } +emit_evsubf2add2h_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evsubf2add2h_r_r_r(dst, src, src2)) } inst_evsubf2add2hss_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVSUBF2ADD2HSS, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evsubf2add2hss_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evsubf2add2hss_r_r_r(dst, src, src2)) } +emit_evsubf2add2hss_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evsubf2add2hss_r_r_r(dst, src, src2)) } inst_evaddhus_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVADDHUS, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evaddhus_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evaddhus_r_r_r(dst, src, src2)) } +emit_evaddhus_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evaddhus_r_r_r(dst, src, src2)) } inst_evaddhxus_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVADDHXUS, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evaddhxus_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evaddhxus_r_r_r(dst, src, src2)) } +emit_evaddhxus_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evaddhxus_r_r_r(dst, src, src2)) } inst_evsubfhus_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVSUBFHUS, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evsubfhus_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evsubfhus_r_r_r(dst, src, src2)) } +emit_evsubfhus_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evsubfhus_r_r_r(dst, src, src2)) } inst_evsubfhxus_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVSUBFHXUS, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evsubfhxus_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evsubfhxus_r_r_r(dst, src, src2)) } +emit_evsubfhxus_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evsubfhxus_r_r_r(dst, src, src2)) } inst_evaddwss_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVADDWSS, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evaddwss_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evaddwss_r_r_r(dst, src, src2)) } +emit_evaddwss_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evaddwss_r_r_r(dst, src, src2)) } inst_evsubfwss_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVSUBFWSS, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evsubfwss_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evsubfwss_r_r_r(dst, src, src2)) } +emit_evsubfwss_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evsubfwss_r_r_r(dst, src, src2)) } inst_evaddwx_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVADDWX, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evaddwx_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evaddwx_r_r_r(dst, src, src2)) } +emit_evaddwx_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evaddwx_r_r_r(dst, src, src2)) } inst_evaddwxss_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVADDWXSS, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evaddwxss_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evaddwxss_r_r_r(dst, src, src2)) } +emit_evaddwxss_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evaddwxss_r_r_r(dst, src, src2)) } inst_evsubfwx_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVSUBFWX, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evsubfwx_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evsubfwx_r_r_r(dst, src, src2)) } +emit_evsubfwx_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evsubfwx_r_r_r(dst, src, src2)) } inst_evsubfwxss_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVSUBFWXSS, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evsubfwxss_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evsubfwxss_r_r_r(dst, src, src2)) } +emit_evsubfwxss_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evsubfwxss_r_r_r(dst, src, src2)) } inst_evaddsubfw_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVADDSUBFW, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evaddsubfw_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evaddsubfw_r_r_r(dst, src, src2)) } +emit_evaddsubfw_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evaddsubfw_r_r_r(dst, src, src2)) } inst_evaddsubfwss_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVADDSUBFWSS, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evaddsubfwss_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evaddsubfwss_r_r_r(dst, src, src2)) } +emit_evaddsubfwss_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evaddsubfwss_r_r_r(dst, src, src2)) } inst_evsubfaddw_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVSUBFADDW, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evsubfaddw_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evsubfaddw_r_r_r(dst, src, src2)) } +emit_evsubfaddw_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evsubfaddw_r_r_r(dst, src, src2)) } inst_evsubfaddwss_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVSUBFADDWSS, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evsubfaddwss_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evsubfaddwss_r_r_r(dst, src, src2)) } +emit_evsubfaddwss_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evsubfaddwss_r_r_r(dst, src, src2)) } inst_evaddsubfwx_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVADDSUBFWX, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evaddsubfwx_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evaddsubfwx_r_r_r(dst, src, src2)) } +emit_evaddsubfwx_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evaddsubfwx_r_r_r(dst, src, src2)) } inst_evaddsubfwxss_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVADDSUBFWXSS, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evaddsubfwxss_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evaddsubfwxss_r_r_r(dst, src, src2)) } +emit_evaddsubfwxss_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evaddsubfwxss_r_r_r(dst, src, src2)) } inst_evsubfaddwx_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVSUBFADDWX, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evsubfaddwx_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evsubfaddwx_r_r_r(dst, src, src2)) } +emit_evsubfaddwx_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evsubfaddwx_r_r_r(dst, src, src2)) } inst_evsubfaddwxss_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVSUBFADDWXSS, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evsubfaddwxss_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evsubfaddwxss_r_r_r(dst, src, src2)) } +emit_evsubfaddwxss_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evsubfaddwxss_r_r_r(dst, src, src2)) } inst_evmar_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVMAR, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evmar_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evmar_r_r_r(dst, src, src2)) } +emit_evmar_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evmar_r_r_r(dst, src, src2)) } inst_evsumwu_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVSUMWU, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evsumwu_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evsumwu_r_r_r(dst, src, src2)) } +emit_evsumwu_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evsumwu_r_r_r(dst, src, src2)) } inst_evsumws_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVSUMWS, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evsumws_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evsumws_r_r_r(dst, src, src2)) } +emit_evsumws_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evsumws_r_r_r(dst, src, src2)) } inst_evsum4bu_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVSUM4BU, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evsum4bu_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evsum4bu_r_r_r(dst, src, src2)) } +emit_evsum4bu_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evsum4bu_r_r_r(dst, src, src2)) } inst_evsum4bs_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVSUM4BS, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evsum4bs_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evsum4bs_r_r_r(dst, src, src2)) } +emit_evsum4bs_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evsum4bs_r_r_r(dst, src, src2)) } inst_evsum2hu_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVSUM2HU, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evsum2hu_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evsum2hu_r_r_r(dst, src, src2)) } +emit_evsum2hu_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evsum2hu_r_r_r(dst, src, src2)) } inst_evsum2hs_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVSUM2HS, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evsum2hs_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evsum2hs_r_r_r(dst, src, src2)) } +emit_evsum2hs_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evsum2hs_r_r_r(dst, src, src2)) } inst_evdiff2his_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVDIFF2HIS, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evdiff2his_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evdiff2his_r_r_r(dst, src, src2)) } +emit_evdiff2his_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evdiff2his_r_r_r(dst, src, src2)) } inst_evsum2his_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVSUM2HIS, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evsum2his_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evsum2his_r_r_r(dst, src, src2)) } +emit_evsum2his_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evsum2his_r_r_r(dst, src, src2)) } inst_evsumwua_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVSUMWUA, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evsumwua_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evsumwua_r_r_r(dst, src, src2)) } +emit_evsumwua_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evsumwua_r_r_r(dst, src, src2)) } inst_evsumwsa_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVSUMWSA, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evsumwsa_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evsumwsa_r_r_r(dst, src, src2)) } +emit_evsumwsa_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evsumwsa_r_r_r(dst, src, src2)) } inst_evsum4bua_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVSUM4BUA, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evsum4bua_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evsum4bua_r_r_r(dst, src, src2)) } +emit_evsum4bua_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evsum4bua_r_r_r(dst, src, src2)) } inst_evsum4bsa_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVSUM4BSA, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evsum4bsa_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evsum4bsa_r_r_r(dst, src, src2)) } +emit_evsum4bsa_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evsum4bsa_r_r_r(dst, src, src2)) } inst_evsum2hua_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVSUM2HUA, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evsum2hua_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evsum2hua_r_r_r(dst, src, src2)) } +emit_evsum2hua_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evsum2hua_r_r_r(dst, src, src2)) } inst_evsum2hsa_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVSUM2HSA, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evsum2hsa_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evsum2hsa_r_r_r(dst, src, src2)) } +emit_evsum2hsa_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evsum2hsa_r_r_r(dst, src, src2)) } inst_evdiff2hisa_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVDIFF2HISA, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evdiff2hisa_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evdiff2hisa_r_r_r(dst, src, src2)) } +emit_evdiff2hisa_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evdiff2hisa_r_r_r(dst, src, src2)) } inst_evsum2hisa_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVSUM2HISA, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evsum2hisa_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evsum2hisa_r_r_r(dst, src, src2)) } +emit_evsum2hisa_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evsum2hisa_r_r_r(dst, src, src2)) } inst_evsumwuaa_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVSUMWUAA, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evsumwuaa_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evsumwuaa_r_r_r(dst, src, src2)) } +emit_evsumwuaa_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evsumwuaa_r_r_r(dst, src, src2)) } inst_evsumwsaa_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVSUMWSAA, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evsumwsaa_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evsumwsaa_r_r_r(dst, src, src2)) } +emit_evsumwsaa_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evsumwsaa_r_r_r(dst, src, src2)) } inst_evsum4buaaw_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVSUM4BUAAW, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evsum4buaaw_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evsum4buaaw_r_r_r(dst, src, src2)) } +emit_evsum4buaaw_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evsum4buaaw_r_r_r(dst, src, src2)) } inst_evsum4bsaaw_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVSUM4BSAAW, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evsum4bsaaw_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evsum4bsaaw_r_r_r(dst, src, src2)) } +emit_evsum4bsaaw_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evsum4bsaaw_r_r_r(dst, src, src2)) } inst_evsum2huaaw_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVSUM2HUAAW, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evsum2huaaw_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evsum2huaaw_r_r_r(dst, src, src2)) } +emit_evsum2huaaw_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evsum2huaaw_r_r_r(dst, src, src2)) } inst_evsum2hsaaw_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVSUM2HSAAW, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evsum2hsaaw_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evsum2hsaaw_r_r_r(dst, src, src2)) } +emit_evsum2hsaaw_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evsum2hsaaw_r_r_r(dst, src, src2)) } inst_evdiff2hisaaw_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVDIFF2HISAAW, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evdiff2hisaaw_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evdiff2hisaaw_r_r_r(dst, src, src2)) } +emit_evdiff2hisaaw_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evdiff2hisaaw_r_r_r(dst, src, src2)) } inst_evsum2hisaaw_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVSUM2HISAAW, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evsum2hisaaw_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evsum2hisaaw_r_r_r(dst, src, src2)) } +emit_evsum2hisaaw_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evsum2hisaaw_r_r_r(dst, src, src2)) } inst_evdivwsf_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVDIVWSF, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evdivwsf_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evdivwsf_r_r_r(dst, src, src2)) } +emit_evdivwsf_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evdivwsf_r_r_r(dst, src, src2)) } inst_evdivwuf_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVDIVWUF, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evdivwuf_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evdivwuf_r_r_r(dst, src, src2)) } +emit_evdivwuf_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evdivwuf_r_r_r(dst, src, src2)) } inst_evdivs_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVDIVS, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evdivs_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evdivs_r_r_r(dst, src, src2)) } +emit_evdivs_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evdivs_r_r_r(dst, src, src2)) } inst_evdivu_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVDIVU, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evdivu_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evdivu_r_r_r(dst, src, src2)) } +emit_evdivu_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evdivu_r_r_r(dst, src, src2)) } inst_evaddwegsi_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVADDWEGSI, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evaddwegsi_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evaddwegsi_r_r_r(dst, src, src2)) } +emit_evaddwegsi_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evaddwegsi_r_r_r(dst, src, src2)) } inst_evaddwegsf_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVADDWEGSF, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evaddwegsf_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evaddwegsf_r_r_r(dst, src, src2)) } +emit_evaddwegsf_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evaddwegsf_r_r_r(dst, src, src2)) } inst_evsubfwegsi_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVSUBFWEGSI, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evsubfwegsi_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evsubfwegsi_r_r_r(dst, src, src2)) } +emit_evsubfwegsi_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evsubfwegsi_r_r_r(dst, src, src2)) } inst_evsubfwegsf_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVSUBFWEGSF, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evsubfwegsf_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evsubfwegsf_r_r_r(dst, src, src2)) } +emit_evsubfwegsf_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evsubfwegsf_r_r_r(dst, src, src2)) } inst_evaddwogsi_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVADDWOGSI, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evaddwogsi_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evaddwogsi_r_r_r(dst, src, src2)) } +emit_evaddwogsi_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evaddwogsi_r_r_r(dst, src, src2)) } inst_evaddwogsf_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVADDWOGSF, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evaddwogsf_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evaddwogsf_r_r_r(dst, src, src2)) } +emit_evaddwogsf_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evaddwogsf_r_r_r(dst, src, src2)) } inst_evsubfwogsi_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVSUBFWOGSI, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evsubfwogsi_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evsubfwogsi_r_r_r(dst, src, src2)) } +emit_evsubfwogsi_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evsubfwogsi_r_r_r(dst, src, src2)) } inst_evsubfwogsf_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVSUBFWOGSF, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evsubfwogsf_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evsubfwogsf_r_r_r(dst, src, src2)) } +emit_evsubfwogsf_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evsubfwogsf_r_r_r(dst, src, src2)) } inst_evaddhhiuw_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVADDHHIUW, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evaddhhiuw_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evaddhhiuw_r_r_r(dst, src, src2)) } +emit_evaddhhiuw_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evaddhhiuw_r_r_r(dst, src, src2)) } inst_evaddhhisw_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVADDHHISW, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evaddhhisw_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evaddhhisw_r_r_r(dst, src, src2)) } +emit_evaddhhisw_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evaddhhisw_r_r_r(dst, src, src2)) } inst_evsubfhhiuw_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVSUBFHHIUW, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evsubfhhiuw_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evsubfhhiuw_r_r_r(dst, src, src2)) } +emit_evsubfhhiuw_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evsubfhhiuw_r_r_r(dst, src, src2)) } inst_evsubfhhisw_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVSUBFHHISW, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evsubfhhisw_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evsubfhhisw_r_r_r(dst, src, src2)) } +emit_evsubfhhisw_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evsubfhhisw_r_r_r(dst, src, src2)) } inst_evaddhlouw_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVADDHLOUW, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evaddhlouw_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evaddhlouw_r_r_r(dst, src, src2)) } +emit_evaddhlouw_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evaddhlouw_r_r_r(dst, src, src2)) } inst_evaddhlosw_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVADDHLOSW, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evaddhlosw_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evaddhlosw_r_r_r(dst, src, src2)) } +emit_evaddhlosw_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evaddhlosw_r_r_r(dst, src, src2)) } inst_evsubfhlouw_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVSUBFHLOUW, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evsubfhlouw_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evsubfhlouw_r_r_r(dst, src, src2)) } +emit_evsubfhlouw_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evsubfhlouw_r_r_r(dst, src, src2)) } inst_evsubfhlosw_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVSUBFHLOSW, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evsubfhlosw_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evsubfhlosw_r_r_r(dst, src, src2)) } +emit_evsubfhlosw_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evsubfhlosw_r_r_r(dst, src, src2)) } inst_evmhesusiaaw_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVMHESUSIAAW, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evmhesusiaaw_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evmhesusiaaw_r_r_r(dst, src, src2)) } +emit_evmhesusiaaw_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evmhesusiaaw_r_r_r(dst, src, src2)) } inst_evmhosusiaaw_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVMHOSUSIAAW, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evmhosusiaaw_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evmhosusiaaw_r_r_r(dst, src, src2)) } +emit_evmhosusiaaw_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evmhosusiaaw_r_r_r(dst, src, src2)) } inst_evmhesumiaaw_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVMHESUMIAAW, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evmhesumiaaw_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evmhesumiaaw_r_r_r(dst, src, src2)) } +emit_evmhesumiaaw_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evmhesumiaaw_r_r_r(dst, src, src2)) } inst_evmhosumiaaw_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVMHOSUMIAAW, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evmhosumiaaw_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evmhosumiaaw_r_r_r(dst, src, src2)) } +emit_evmhosumiaaw_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evmhosumiaaw_r_r_r(dst, src, src2)) } inst_evmbeusiaah_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVMBEUSIAAH, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evmbeusiaah_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evmbeusiaah_r_r_r(dst, src, src2)) } +emit_evmbeusiaah_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evmbeusiaah_r_r_r(dst, src, src2)) } inst_evmbessiaah_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVMBESSIAAH, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evmbessiaah_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evmbessiaah_r_r_r(dst, src, src2)) } +emit_evmbessiaah_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evmbessiaah_r_r_r(dst, src, src2)) } inst_evmbesusiaah_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVMBESUSIAAH, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evmbesusiaah_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evmbesusiaah_r_r_r(dst, src, src2)) } +emit_evmbesusiaah_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evmbesusiaah_r_r_r(dst, src, src2)) } inst_evmbousiaah_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVMBOUSIAAH, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evmbousiaah_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evmbousiaah_r_r_r(dst, src, src2)) } +emit_evmbousiaah_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evmbousiaah_r_r_r(dst, src, src2)) } inst_evmbossiaah_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVMBOSSIAAH, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evmbossiaah_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evmbossiaah_r_r_r(dst, src, src2)) } +emit_evmbossiaah_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evmbossiaah_r_r_r(dst, src, src2)) } inst_evmbosusiaah_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVMBOSUSIAAH, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evmbosusiaah_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evmbosusiaah_r_r_r(dst, src, src2)) } +emit_evmbosusiaah_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evmbosusiaah_r_r_r(dst, src, src2)) } inst_evmbeumiaah_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVMBEUMIAAH, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evmbeumiaah_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evmbeumiaah_r_r_r(dst, src, src2)) } +emit_evmbeumiaah_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evmbeumiaah_r_r_r(dst, src, src2)) } inst_evmbesmiaah_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVMBESMIAAH, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evmbesmiaah_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evmbesmiaah_r_r_r(dst, src, src2)) } +emit_evmbesmiaah_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evmbesmiaah_r_r_r(dst, src, src2)) } inst_evmbesumiaah_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVMBESUMIAAH, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evmbesumiaah_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evmbesumiaah_r_r_r(dst, src, src2)) } +emit_evmbesumiaah_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evmbesumiaah_r_r_r(dst, src, src2)) } inst_evmboumiaah_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVMBOUMIAAH, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evmboumiaah_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evmboumiaah_r_r_r(dst, src, src2)) } +emit_evmboumiaah_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evmboumiaah_r_r_r(dst, src, src2)) } inst_evmbosmiaah_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVMBOSMIAAH, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evmbosmiaah_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evmbosmiaah_r_r_r(dst, src, src2)) } +emit_evmbosmiaah_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evmbosmiaah_r_r_r(dst, src, src2)) } inst_evmbosumiaah_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVMBOSUMIAAH, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evmbosumiaah_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evmbosumiaah_r_r_r(dst, src, src2)) } +emit_evmbosumiaah_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evmbosumiaah_r_r_r(dst, src, src2)) } inst_evmwlusiaaw3_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVMWLUSIAAW3, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evmwlusiaaw3_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evmwlusiaaw3_r_r_r(dst, src, src2)) } +emit_evmwlusiaaw3_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evmwlusiaaw3_r_r_r(dst, src, src2)) } inst_evmwlssiaaw3_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVMWLSSIAAW3, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evmwlssiaaw3_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evmwlssiaaw3_r_r_r(dst, src, src2)) } +emit_evmwlssiaaw3_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evmwlssiaaw3_r_r_r(dst, src, src2)) } inst_evmwhssfraaw3_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVMWHSSFRAAW3, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evmwhssfraaw3_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evmwhssfraaw3_r_r_r(dst, src, src2)) } +emit_evmwhssfraaw3_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evmwhssfraaw3_r_r_r(dst, src, src2)) } inst_evmwhssfaaw3_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVMWHSSFAAW3, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evmwhssfaaw3_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evmwhssfaaw3_r_r_r(dst, src, src2)) } +emit_evmwhssfaaw3_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evmwhssfaaw3_r_r_r(dst, src, src2)) } inst_evmwhssfraaw_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVMWHSSFRAAW, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evmwhssfraaw_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evmwhssfraaw_r_r_r(dst, src, src2)) } +emit_evmwhssfraaw_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evmwhssfraaw_r_r_r(dst, src, src2)) } inst_evmwhssfaaw_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVMWHSSFAAW, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evmwhssfaaw_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evmwhssfaaw_r_r_r(dst, src, src2)) } +emit_evmwhssfaaw_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evmwhssfaaw_r_r_r(dst, src, src2)) } inst_evmwlumiaaw3_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVMWLUMIAAW3, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evmwlumiaaw3_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evmwlumiaaw3_r_r_r(dst, src, src2)) } +emit_evmwlumiaaw3_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evmwlumiaaw3_r_r_r(dst, src, src2)) } inst_evmwlsmiaaw3_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVMWLSMIAAW3, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evmwlsmiaaw3_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evmwlsmiaaw3_r_r_r(dst, src, src2)) } +emit_evmwlsmiaaw3_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evmwlsmiaaw3_r_r_r(dst, src, src2)) } inst_evmwusiaa_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVMWUSIAA, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evmwusiaa_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evmwusiaa_r_r_r(dst, src, src2)) } +emit_evmwusiaa_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evmwusiaa_r_r_r(dst, src, src2)) } inst_evmwssiaa_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVMWSSIAA, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evmwssiaa_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evmwssiaa_r_r_r(dst, src, src2)) } +emit_evmwssiaa_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evmwssiaa_r_r_r(dst, src, src2)) } inst_evmwehgsmfraa_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVMWEHGSMFRAA, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evmwehgsmfraa_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evmwehgsmfraa_r_r_r(dst, src, src2)) } +emit_evmwehgsmfraa_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evmwehgsmfraa_r_r_r(dst, src, src2)) } inst_evmwehgsmfaa_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVMWEHGSMFAA, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evmwehgsmfaa_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evmwehgsmfaa_r_r_r(dst, src, src2)) } +emit_evmwehgsmfaa_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evmwehgsmfaa_r_r_r(dst, src, src2)) } inst_evmwohgsmfraa_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVMWOHGSMFRAA, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evmwohgsmfraa_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evmwohgsmfraa_r_r_r(dst, src, src2)) } +emit_evmwohgsmfraa_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evmwohgsmfraa_r_r_r(dst, src, src2)) } inst_evmwohgsmfaa_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVMWOHGSMFAA, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evmwohgsmfaa_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evmwohgsmfaa_r_r_r(dst, src, src2)) } +emit_evmwohgsmfaa_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evmwohgsmfaa_r_r_r(dst, src, src2)) } inst_evmhesusianw_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVMHESUSIANW, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evmhesusianw_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evmhesusianw_r_r_r(dst, src, src2)) } +emit_evmhesusianw_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evmhesusianw_r_r_r(dst, src, src2)) } inst_evmhosusianw_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVMHOSUSIANW, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evmhosusianw_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evmhosusianw_r_r_r(dst, src, src2)) } +emit_evmhosusianw_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evmhosusianw_r_r_r(dst, src, src2)) } inst_evmhesumianw_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVMHESUMIANW, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evmhesumianw_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evmhesumianw_r_r_r(dst, src, src2)) } +emit_evmhesumianw_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evmhesumianw_r_r_r(dst, src, src2)) } inst_evmhosumianw_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVMHOSUMIANW, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evmhosumianw_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evmhosumianw_r_r_r(dst, src, src2)) } +emit_evmhosumianw_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evmhosumianw_r_r_r(dst, src, src2)) } inst_evmbeusianh_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVMBEUSIANH, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evmbeusianh_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evmbeusianh_r_r_r(dst, src, src2)) } +emit_evmbeusianh_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evmbeusianh_r_r_r(dst, src, src2)) } inst_evmbessianh_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVMBESSIANH, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evmbessianh_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evmbessianh_r_r_r(dst, src, src2)) } +emit_evmbessianh_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evmbessianh_r_r_r(dst, src, src2)) } inst_evmbesusianh_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVMBESUSIANH, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evmbesusianh_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evmbesusianh_r_r_r(dst, src, src2)) } +emit_evmbesusianh_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evmbesusianh_r_r_r(dst, src, src2)) } inst_evmbousianh_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVMBOUSIANH, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evmbousianh_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evmbousianh_r_r_r(dst, src, src2)) } +emit_evmbousianh_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evmbousianh_r_r_r(dst, src, src2)) } inst_evmbossianh_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVMBOSSIANH, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evmbossianh_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evmbossianh_r_r_r(dst, src, src2)) } +emit_evmbossianh_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evmbossianh_r_r_r(dst, src, src2)) } inst_evmbosusianh_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVMBOSUSIANH, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evmbosusianh_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evmbosusianh_r_r_r(dst, src, src2)) } +emit_evmbosusianh_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evmbosusianh_r_r_r(dst, src, src2)) } inst_evmbeumianh_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVMBEUMIANH, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evmbeumianh_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evmbeumianh_r_r_r(dst, src, src2)) } +emit_evmbeumianh_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evmbeumianh_r_r_r(dst, src, src2)) } inst_evmbesmianh_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVMBESMIANH, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evmbesmianh_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evmbesmianh_r_r_r(dst, src, src2)) } +emit_evmbesmianh_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evmbesmianh_r_r_r(dst, src, src2)) } inst_evmbesumianh_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVMBESUMIANH, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evmbesumianh_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evmbesumianh_r_r_r(dst, src, src2)) } +emit_evmbesumianh_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evmbesumianh_r_r_r(dst, src, src2)) } inst_evmboumianh_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVMBOUMIANH, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evmboumianh_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evmboumianh_r_r_r(dst, src, src2)) } +emit_evmboumianh_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evmboumianh_r_r_r(dst, src, src2)) } inst_evmbosmianh_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVMBOSMIANH, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evmbosmianh_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evmbosmianh_r_r_r(dst, src, src2)) } +emit_evmbosmianh_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evmbosmianh_r_r_r(dst, src, src2)) } inst_evmbosumianh_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVMBOSUMIANH, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evmbosumianh_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evmbosumianh_r_r_r(dst, src, src2)) } +emit_evmbosumianh_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evmbosumianh_r_r_r(dst, src, src2)) } inst_evmwlusianw3_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVMWLUSIANW3, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evmwlusianw3_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evmwlusianw3_r_r_r(dst, src, src2)) } +emit_evmwlusianw3_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evmwlusianw3_r_r_r(dst, src, src2)) } inst_evmwlssianw3_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVMWLSSIANW3, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evmwlssianw3_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evmwlssianw3_r_r_r(dst, src, src2)) } +emit_evmwlssianw3_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evmwlssianw3_r_r_r(dst, src, src2)) } inst_evmwhssfranw3_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVMWHSSFRANW3, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evmwhssfranw3_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evmwhssfranw3_r_r_r(dst, src, src2)) } +emit_evmwhssfranw3_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evmwhssfranw3_r_r_r(dst, src, src2)) } inst_evmwhssfanw3_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVMWHSSFANW3, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evmwhssfanw3_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evmwhssfanw3_r_r_r(dst, src, src2)) } +emit_evmwhssfanw3_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evmwhssfanw3_r_r_r(dst, src, src2)) } inst_evmwhssfranw_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVMWHSSFRANW, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evmwhssfranw_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evmwhssfranw_r_r_r(dst, src, src2)) } +emit_evmwhssfranw_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evmwhssfranw_r_r_r(dst, src, src2)) } inst_evmwhssfanw_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVMWHSSFANW, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evmwhssfanw_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evmwhssfanw_r_r_r(dst, src, src2)) } +emit_evmwhssfanw_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evmwhssfanw_r_r_r(dst, src, src2)) } inst_evmwlumianw3_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVMWLUMIANW3, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evmwlumianw3_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evmwlumianw3_r_r_r(dst, src, src2)) } +emit_evmwlumianw3_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evmwlumianw3_r_r_r(dst, src, src2)) } inst_evmwlsmianw3_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVMWLSMIANW3, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evmwlsmianw3_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evmwlsmianw3_r_r_r(dst, src, src2)) } +emit_evmwlsmianw3_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evmwlsmianw3_r_r_r(dst, src, src2)) } inst_evmwusian_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVMWUSIAN, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evmwusian_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evmwusian_r_r_r(dst, src, src2)) } +emit_evmwusian_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evmwusian_r_r_r(dst, src, src2)) } inst_evmwssian_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVMWSSIAN, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evmwssian_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evmwssian_r_r_r(dst, src, src2)) } +emit_evmwssian_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evmwssian_r_r_r(dst, src, src2)) } inst_evmwehgsmfran_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVMWEHGSMFRAN, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evmwehgsmfran_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evmwehgsmfran_r_r_r(dst, src, src2)) } +emit_evmwehgsmfran_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evmwehgsmfran_r_r_r(dst, src, src2)) } inst_evmwehgsmfan_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVMWEHGSMFAN, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evmwehgsmfan_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evmwehgsmfan_r_r_r(dst, src, src2)) } +emit_evmwehgsmfan_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evmwehgsmfan_r_r_r(dst, src, src2)) } inst_evmwohgsmfran_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVMWOHGSMFRAN, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evmwohgsmfran_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evmwohgsmfran_r_r_r(dst, src, src2)) } +emit_evmwohgsmfran_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evmwohgsmfran_r_r_r(dst, src, src2)) } inst_evmwohgsmfan_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVMWOHGSMFAN, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evmwohgsmfan_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evmwohgsmfan_r_r_r(dst, src, src2)) } +emit_evmwohgsmfan_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evmwohgsmfan_r_r_r(dst, src, src2)) } inst_evseteqb_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVSETEQB, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evseteqb_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evseteqb_r_r_r(dst, src, src2)) } +emit_evseteqb_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evseteqb_r_r_r(dst, src, src2)) } inst_evseteqh_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVSETEQH, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evseteqh_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evseteqh_r_r_r(dst, src, src2)) } +emit_evseteqh_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evseteqh_r_r_r(dst, src, src2)) } inst_evseteqw_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVSETEQW, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evseteqw_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evseteqw_r_r_r(dst, src, src2)) } +emit_evseteqw_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evseteqw_r_r_r(dst, src, src2)) } inst_evsetgthu_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVSETGTHU, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evsetgthu_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evsetgthu_r_r_r(dst, src, src2)) } +emit_evsetgthu_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evsetgthu_r_r_r(dst, src, src2)) } inst_evsetgths_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVSETGTHS, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evsetgths_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evsetgths_r_r_r(dst, src, src2)) } +emit_evsetgths_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evsetgths_r_r_r(dst, src, src2)) } inst_evsetgtwu_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVSETGTWU, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evsetgtwu_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evsetgtwu_r_r_r(dst, src, src2)) } +emit_evsetgtwu_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evsetgtwu_r_r_r(dst, src, src2)) } inst_evsetgtws_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVSETGTWS, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evsetgtws_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evsetgtws_r_r_r(dst, src, src2)) } +emit_evsetgtws_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evsetgtws_r_r_r(dst, src, src2)) } inst_evsetgtbu_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVSETGTBU, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evsetgtbu_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evsetgtbu_r_r_r(dst, src, src2)) } +emit_evsetgtbu_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evsetgtbu_r_r_r(dst, src, src2)) } inst_evsetgtbs_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVSETGTBS, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evsetgtbs_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evsetgtbs_r_r_r(dst, src, src2)) } +emit_evsetgtbs_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evsetgtbs_r_r_r(dst, src, src2)) } inst_evsetltbu_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVSETLTBU, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evsetltbu_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evsetltbu_r_r_r(dst, src, src2)) } +emit_evsetltbu_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evsetltbu_r_r_r(dst, src, src2)) } inst_evsetltbs_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVSETLTBS, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evsetltbs_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evsetltbs_r_r_r(dst, src, src2)) } +emit_evsetltbs_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evsetltbs_r_r_r(dst, src, src2)) } inst_evsetlthu_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVSETLTHU, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evsetlthu_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evsetlthu_r_r_r(dst, src, src2)) } +emit_evsetlthu_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evsetlthu_r_r_r(dst, src, src2)) } inst_evsetlths_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVSETLTHS, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evsetlths_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evsetlths_r_r_r(dst, src, src2)) } +emit_evsetlths_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evsetlths_r_r_r(dst, src, src2)) } inst_evsetltwu_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVSETLTWU, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evsetltwu_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evsetltwu_r_r_r(dst, src, src2)) } +emit_evsetltwu_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evsetltwu_r_r_r(dst, src, src2)) } inst_evsetltws_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVSETLTWS, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evsetltws_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evsetltws_r_r_r(dst, src, src2)) } +emit_evsetltws_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evsetltws_r_r_r(dst, src, src2)) } inst_evsaduw_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVSADUW, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evsaduw_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evsaduw_r_r_r(dst, src, src2)) } +emit_evsaduw_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evsaduw_r_r_r(dst, src, src2)) } inst_evsadsw_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVSADSW, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evsadsw_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evsadsw_r_r_r(dst, src, src2)) } +emit_evsadsw_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evsadsw_r_r_r(dst, src, src2)) } inst_evsad4ub_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVSAD4UB, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evsad4ub_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evsad4ub_r_r_r(dst, src, src2)) } +emit_evsad4ub_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evsad4ub_r_r_r(dst, src, src2)) } inst_evsad4sb_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVSAD4SB, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evsad4sb_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evsad4sb_r_r_r(dst, src, src2)) } +emit_evsad4sb_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evsad4sb_r_r_r(dst, src, src2)) } inst_evsad2uh_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVSAD2UH, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evsad2uh_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evsad2uh_r_r_r(dst, src, src2)) } +emit_evsad2uh_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evsad2uh_r_r_r(dst, src, src2)) } inst_evsad2sh_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVSAD2SH, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evsad2sh_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evsad2sh_r_r_r(dst, src, src2)) } +emit_evsad2sh_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evsad2sh_r_r_r(dst, src, src2)) } inst_evsaduwa_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVSADUWA, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evsaduwa_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evsaduwa_r_r_r(dst, src, src2)) } +emit_evsaduwa_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evsaduwa_r_r_r(dst, src, src2)) } inst_evsadswa_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVSADSWA, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evsadswa_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evsadswa_r_r_r(dst, src, src2)) } +emit_evsadswa_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evsadswa_r_r_r(dst, src, src2)) } inst_evsad4uba_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVSAD4UBA, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evsad4uba_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evsad4uba_r_r_r(dst, src, src2)) } +emit_evsad4uba_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evsad4uba_r_r_r(dst, src, src2)) } inst_evsad4sba_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVSAD4SBA, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evsad4sba_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evsad4sba_r_r_r(dst, src, src2)) } +emit_evsad4sba_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evsad4sba_r_r_r(dst, src, src2)) } inst_evsad2uha_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVSAD2UHA, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evsad2uha_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evsad2uha_r_r_r(dst, src, src2)) } +emit_evsad2uha_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evsad2uha_r_r_r(dst, src, src2)) } inst_evsad2sha_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVSAD2SHA, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evsad2sha_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evsad2sha_r_r_r(dst, src, src2)) } +emit_evsad2sha_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evsad2sha_r_r_r(dst, src, src2)) } inst_evabsdifuw_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVABSDIFUW, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evabsdifuw_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evabsdifuw_r_r_r(dst, src, src2)) } +emit_evabsdifuw_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evabsdifuw_r_r_r(dst, src, src2)) } inst_evabsdifsw_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVABSDIFSW, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evabsdifsw_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evabsdifsw_r_r_r(dst, src, src2)) } +emit_evabsdifsw_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evabsdifsw_r_r_r(dst, src, src2)) } inst_evabsdifub_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVABSDIFUB, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evabsdifub_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evabsdifub_r_r_r(dst, src, src2)) } +emit_evabsdifub_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evabsdifub_r_r_r(dst, src, src2)) } inst_evabsdifsb_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVABSDIFSB, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evabsdifsb_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evabsdifsb_r_r_r(dst, src, src2)) } +emit_evabsdifsb_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evabsdifsb_r_r_r(dst, src, src2)) } inst_evabsdifuh_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVABSDIFUH, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evabsdifuh_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evabsdifuh_r_r_r(dst, src, src2)) } +emit_evabsdifuh_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evabsdifuh_r_r_r(dst, src, src2)) } inst_evabsdifsh_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVABSDIFSH, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evabsdifsh_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evabsdifsh_r_r_r(dst, src, src2)) } +emit_evabsdifsh_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evabsdifsh_r_r_r(dst, src, src2)) } inst_evsaduwaa_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVSADUWAA, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evsaduwaa_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evsaduwaa_r_r_r(dst, src, src2)) } +emit_evsaduwaa_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evsaduwaa_r_r_r(dst, src, src2)) } inst_evsadswaa_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVSADSWAA, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evsadswaa_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evsadswaa_r_r_r(dst, src, src2)) } +emit_evsadswaa_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evsadswaa_r_r_r(dst, src, src2)) } inst_evsad4ubaaw_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVSAD4UBAAW, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evsad4ubaaw_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evsad4ubaaw_r_r_r(dst, src, src2)) } +emit_evsad4ubaaw_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evsad4ubaaw_r_r_r(dst, src, src2)) } inst_evsad4sbaaw_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVSAD4SBAAW, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evsad4sbaaw_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evsad4sbaaw_r_r_r(dst, src, src2)) } +emit_evsad4sbaaw_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evsad4sbaaw_r_r_r(dst, src, src2)) } inst_evsad2uhaaw_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVSAD2UHAAW, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evsad2uhaaw_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evsad2uhaaw_r_r_r(dst, src, src2)) } +emit_evsad2uhaaw_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evsad2uhaaw_r_r_r(dst, src, src2)) } inst_evsad2shaaw_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVSAD2SHAAW, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evsad2shaaw_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evsad2shaaw_r_r_r(dst, src, src2)) } +emit_evsad2shaaw_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evsad2shaaw_r_r_r(dst, src, src2)) } inst_evpkshubs_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVPKSHUBS, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evpkshubs_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evpkshubs_r_r_r(dst, src, src2)) } +emit_evpkshubs_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evpkshubs_r_r_r(dst, src, src2)) } inst_evpkshsbs_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVPKSHSBS, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evpkshsbs_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evpkshsbs_r_r_r(dst, src, src2)) } +emit_evpkshsbs_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evpkshsbs_r_r_r(dst, src, src2)) } inst_evpkswuhs_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVPKSWUHS, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evpkswuhs_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evpkswuhs_r_r_r(dst, src, src2)) } +emit_evpkswuhs_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evpkswuhs_r_r_r(dst, src, src2)) } inst_evpkswshs_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVPKSWSHS, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evpkswshs_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evpkswshs_r_r_r(dst, src, src2)) } +emit_evpkswshs_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evpkswshs_r_r_r(dst, src, src2)) } inst_evpkuhubs_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVPKUHUBS, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evpkuhubs_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evpkuhubs_r_r_r(dst, src, src2)) } +emit_evpkuhubs_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evpkuhubs_r_r_r(dst, src, src2)) } inst_evpkuwuhs_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVPKUWUHS, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evpkuwuhs_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evpkuwuhs_r_r_r(dst, src, src2)) } +emit_evpkuwuhs_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evpkuwuhs_r_r_r(dst, src, src2)) } inst_evpkswshilvs_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVPKSWSHILVS, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evpkswshilvs_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evpkswshilvs_r_r_r(dst, src, src2)) } +emit_evpkswshilvs_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evpkswshilvs_r_r_r(dst, src, src2)) } inst_evpkswgshefrs_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVPKSWGSHEFRS, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evpkswgshefrs_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evpkswgshefrs_r_r_r(dst, src, src2)) } +emit_evpkswgshefrs_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evpkswgshefrs_r_r_r(dst, src, src2)) } inst_evpkswshfrs_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVPKSWSHFRS, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evpkswshfrs_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evpkswshfrs_r_r_r(dst, src, src2)) } +emit_evpkswshfrs_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evpkswshfrs_r_r_r(dst, src, src2)) } inst_evpkswshilvfrs_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVPKSWSHILVFRS, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evpkswshilvfrs_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evpkswshilvfrs_r_r_r(dst, src, src2)) } +emit_evpkswshilvfrs_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evpkswshilvfrs_r_r_r(dst, src, src2)) } inst_evpksdswfrs_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVPKSDSWFRS, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evpksdswfrs_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evpksdswfrs_r_r_r(dst, src, src2)) } +emit_evpksdswfrs_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evpksdswfrs_r_r_r(dst, src, src2)) } inst_evpksdshefrs_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVPKSDSHEFRS, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evpksdshefrs_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evpksdshefrs_r_r_r(dst, src, src2)) } +emit_evpksdshefrs_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evpksdshefrs_r_r_r(dst, src, src2)) } inst_evpkuduws_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVPKUDUWS, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evpkuduws_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evpkuduws_r_r_r(dst, src, src2)) } +emit_evpkuduws_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evpkuduws_r_r_r(dst, src, src2)) } inst_evpksdsws_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVPKSDSWS, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evpksdsws_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evpksdsws_r_r_r(dst, src, src2)) } +emit_evpksdsws_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evpksdsws_r_r_r(dst, src, src2)) } inst_evpkswgswfrs_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVPKSWGSWFRS, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evpkswgswfrs_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evpkswgswfrs_r_r_r(dst, src, src2)) } +emit_evpkswgswfrs_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evpkswgswfrs_r_r_r(dst, src, src2)) } inst_evilveh_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVILVEH, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evilveh_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evilveh_r_r_r(dst, src, src2)) } +emit_evilveh_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evilveh_r_r_r(dst, src, src2)) } inst_evilveoh_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVILVEOH, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evilveoh_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evilveoh_r_r_r(dst, src, src2)) } +emit_evilveoh_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evilveoh_r_r_r(dst, src, src2)) } inst_evilvhih_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVILVHIH, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evilvhih_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evilvhih_r_r_r(dst, src, src2)) } +emit_evilvhih_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evilvhih_r_r_r(dst, src, src2)) } inst_evilvhiloh_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVILVHILOH, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evilvhiloh_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evilvhiloh_r_r_r(dst, src, src2)) } +emit_evilvhiloh_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evilvhiloh_r_r_r(dst, src, src2)) } inst_evilvloh_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVILVLOH, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evilvloh_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evilvloh_r_r_r(dst, src, src2)) } +emit_evilvloh_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evilvloh_r_r_r(dst, src, src2)) } inst_evilvlohih_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVILVLOHIH, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evilvlohih_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evilvlohih_r_r_r(dst, src, src2)) } +emit_evilvlohih_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evilvlohih_r_r_r(dst, src, src2)) } inst_evilvoeh_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVILVOEH, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evilvoeh_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evilvoeh_r_r_r(dst, src, src2)) } +emit_evilvoeh_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evilvoeh_r_r_r(dst, src, src2)) } inst_evilvoh_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVILVOH, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evilvoh_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evilvoh_r_r_r(dst, src, src2)) } +emit_evilvoh_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evilvoh_r_r_r(dst, src, src2)) } inst_evdlveb_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVDLVEB, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evdlveb_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evdlveb_r_r_r(dst, src, src2)) } +emit_evdlveb_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evdlveb_r_r_r(dst, src, src2)) } inst_evdlveh_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVDLVEH, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evdlveh_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evdlveh_r_r_r(dst, src, src2)) } +emit_evdlveh_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evdlveh_r_r_r(dst, src, src2)) } inst_evdlveob_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVDLVEOB, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evdlveob_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evdlveob_r_r_r(dst, src, src2)) } +emit_evdlveob_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evdlveob_r_r_r(dst, src, src2)) } inst_evdlveoh_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVDLVEOH, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evdlveoh_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evdlveoh_r_r_r(dst, src, src2)) } +emit_evdlveoh_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evdlveoh_r_r_r(dst, src, src2)) } inst_evdlvob_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVDLVOB, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evdlvob_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evdlvob_r_r_r(dst, src, src2)) } +emit_evdlvob_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evdlvob_r_r_r(dst, src, src2)) } inst_evdlvoh_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVDLVOH, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evdlvoh_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evdlvoh_r_r_r(dst, src, src2)) } +emit_evdlvoh_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evdlvoh_r_r_r(dst, src, src2)) } inst_evdlvoeb_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVDLVOEB, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evdlvoeb_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evdlvoeb_r_r_r(dst, src, src2)) } +emit_evdlvoeb_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evdlvoeb_r_r_r(dst, src, src2)) } inst_evdlvoeh_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVDLVOEH, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evdlvoeh_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evdlvoeh_r_r_r(dst, src, src2)) } +emit_evdlvoeh_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evdlvoeh_r_r_r(dst, src, src2)) } inst_evmaxbu_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVMAXBU, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evmaxbu_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evmaxbu_r_r_r(dst, src, src2)) } +emit_evmaxbu_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evmaxbu_r_r_r(dst, src, src2)) } inst_evmaxbs_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVMAXBS, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evmaxbs_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evmaxbs_r_r_r(dst, src, src2)) } +emit_evmaxbs_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evmaxbs_r_r_r(dst, src, src2)) } inst_evmaxhu_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVMAXHU, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evmaxhu_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evmaxhu_r_r_r(dst, src, src2)) } +emit_evmaxhu_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evmaxhu_r_r_r(dst, src, src2)) } inst_evmaxhs_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVMAXHS, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evmaxhs_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evmaxhs_r_r_r(dst, src, src2)) } +emit_evmaxhs_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evmaxhs_r_r_r(dst, src, src2)) } inst_evmaxwu_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVMAXWU, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evmaxwu_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evmaxwu_r_r_r(dst, src, src2)) } +emit_evmaxwu_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evmaxwu_r_r_r(dst, src, src2)) } inst_evmaxws_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVMAXWS, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evmaxws_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evmaxws_r_r_r(dst, src, src2)) } +emit_evmaxws_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evmaxws_r_r_r(dst, src, src2)) } inst_evmaxdu_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVMAXDU, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evmaxdu_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evmaxdu_r_r_r(dst, src, src2)) } +emit_evmaxdu_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evmaxdu_r_r_r(dst, src, src2)) } inst_evmaxds_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVMAXDS, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evmaxds_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evmaxds_r_r_r(dst, src, src2)) } +emit_evmaxds_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evmaxds_r_r_r(dst, src, src2)) } inst_evminbu_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVMINBU, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evminbu_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evminbu_r_r_r(dst, src, src2)) } +emit_evminbu_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evminbu_r_r_r(dst, src, src2)) } inst_evminbs_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVMINBS, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evminbs_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evminbs_r_r_r(dst, src, src2)) } +emit_evminbs_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evminbs_r_r_r(dst, src, src2)) } inst_evminhu_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVMINHU, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evminhu_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evminhu_r_r_r(dst, src, src2)) } +emit_evminhu_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evminhu_r_r_r(dst, src, src2)) } inst_evminhs_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVMINHS, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evminhs_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evminhs_r_r_r(dst, src, src2)) } +emit_evminhs_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evminhs_r_r_r(dst, src, src2)) } inst_evminwu_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVMINWU, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evminwu_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evminwu_r_r_r(dst, src, src2)) } +emit_evminwu_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evminwu_r_r_r(dst, src, src2)) } inst_evminws_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVMINWS, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evminws_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evminws_r_r_r(dst, src, src2)) } +emit_evminws_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evminws_r_r_r(dst, src, src2)) } inst_evmindu_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVMINDU, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evmindu_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evmindu_r_r_r(dst, src, src2)) } +emit_evmindu_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evmindu_r_r_r(dst, src, src2)) } inst_evminds_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVMINDS, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evminds_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evminds_r_r_r(dst, src, src2)) } +emit_evminds_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evminds_r_r_r(dst, src, src2)) } inst_evavgwu_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVAVGWU, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evavgwu_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evavgwu_r_r_r(dst, src, src2)) } +emit_evavgwu_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evavgwu_r_r_r(dst, src, src2)) } inst_evavgws_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVAVGWS, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evavgws_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evavgws_r_r_r(dst, src, src2)) } +emit_evavgws_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evavgws_r_r_r(dst, src, src2)) } inst_evavgbu_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVAVGBU, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evavgbu_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evavgbu_r_r_r(dst, src, src2)) } +emit_evavgbu_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evavgbu_r_r_r(dst, src, src2)) } inst_evavgbs_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVAVGBS, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evavgbs_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evavgbs_r_r_r(dst, src, src2)) } +emit_evavgbs_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evavgbs_r_r_r(dst, src, src2)) } inst_evavghu_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVAVGHU, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evavghu_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evavghu_r_r_r(dst, src, src2)) } +emit_evavghu_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evavghu_r_r_r(dst, src, src2)) } inst_evavghs_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVAVGHS, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evavghs_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evavghs_r_r_r(dst, src, src2)) } +emit_evavghs_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evavghs_r_r_r(dst, src, src2)) } inst_evavgdu_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVAVGDU, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evavgdu_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evavgdu_r_r_r(dst, src, src2)) } +emit_evavgdu_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evavgdu_r_r_r(dst, src, src2)) } inst_evavgds_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVAVGDS, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evavgds_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evavgds_r_r_r(dst, src, src2)) } +emit_evavgds_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evavgds_r_r_r(dst, src, src2)) } inst_evavgwur_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVAVGWUR, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evavgwur_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evavgwur_r_r_r(dst, src, src2)) } +emit_evavgwur_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evavgwur_r_r_r(dst, src, src2)) } inst_evavgwsr_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVAVGWSR, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evavgwsr_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evavgwsr_r_r_r(dst, src, src2)) } +emit_evavgwsr_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evavgwsr_r_r_r(dst, src, src2)) } inst_evavgbur_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVAVGBUR, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evavgbur_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evavgbur_r_r_r(dst, src, src2)) } +emit_evavgbur_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evavgbur_r_r_r(dst, src, src2)) } inst_evavgbsr_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVAVGBSR, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evavgbsr_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evavgbsr_r_r_r(dst, src, src2)) } +emit_evavgbsr_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evavgbsr_r_r_r(dst, src, src2)) } inst_evavghur_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVAVGHUR, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evavghur_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evavghur_r_r_r(dst, src, src2)) } +emit_evavghur_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evavghur_r_r_r(dst, src, src2)) } inst_evavghsr_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVAVGHSR, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evavghsr_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evavghsr_r_r_r(dst, src, src2)) } +emit_evavghsr_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evavghsr_r_r_r(dst, src, src2)) } inst_evavgdur_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVAVGDUR, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evavgdur_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evavgdur_r_r_r(dst, src, src2)) } +emit_evavgdur_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evavgdur_r_r_r(dst, src, src2)) } inst_evavgdsr_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVAVGDSR, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evavgdsr_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evavgdsr_r_r_r(dst, src, src2)) } +emit_evavgdsr_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evavgdsr_r_r_r(dst, src, src2)) } inst_ps_div_fr_fr_fr :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .PS_DIV, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_ps_div_fr_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_ps_div_fr_fr_fr(dst, src, src2)) } +emit_ps_div_fr_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_ps_div_fr_fr_fr(dst, src, src2)) } inst_ps_div_dot_fr_fr_fr :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .PS_DIV_DOT, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_ps_div_dot_fr_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_ps_div_dot_fr_fr_fr(dst, src, src2)) } +emit_ps_div_dot_fr_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_ps_div_dot_fr_fr_fr(dst, src, src2)) } inst_ps_sub_fr_fr_fr :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .PS_SUB, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_ps_sub_fr_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_ps_sub_fr_fr_fr(dst, src, src2)) } +emit_ps_sub_fr_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_ps_sub_fr_fr_fr(dst, src, src2)) } inst_ps_sub_dot_fr_fr_fr :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .PS_SUB_DOT, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_ps_sub_dot_fr_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_ps_sub_dot_fr_fr_fr(dst, src, src2)) } +emit_ps_sub_dot_fr_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_ps_sub_dot_fr_fr_fr(dst, src, src2)) } inst_ps_add_fr_fr_fr :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .PS_ADD, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_ps_add_fr_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_ps_add_fr_fr_fr(dst, src, src2)) } +emit_ps_add_fr_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_ps_add_fr_fr_fr(dst, src, src2)) } inst_ps_add_dot_fr_fr_fr :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .PS_ADD_DOT, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_ps_add_dot_fr_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_ps_add_dot_fr_fr_fr(dst, src, src2)) } +emit_ps_add_dot_fr_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_ps_add_dot_fr_fr_fr(dst, src, src2)) } inst_ps_sel_fr_fr_fr_fr :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register, src3: Register) -> Instruction { return Instruction{mnemonic = .PS_SEL, operand_count = 4, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), op_reg(src3)}} } -emit_ps_sel_fr_fr_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, src3: Register) { append(instructions, inst_ps_sel_fr_fr_fr_fr(dst, src, src2, src3)) } +emit_ps_sel_fr_fr_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, src3: Register) { append_elem(instructions, inst_ps_sel_fr_fr_fr_fr(dst, src, src2, src3)) } inst_ps_sel_dot_fr_fr_fr_fr :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register, src3: Register) -> Instruction { return Instruction{mnemonic = .PS_SEL_DOT, operand_count = 4, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), op_reg(src3)}} } -emit_ps_sel_dot_fr_fr_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, src3: Register) { append(instructions, inst_ps_sel_dot_fr_fr_fr_fr(dst, src, src2, src3)) } +emit_ps_sel_dot_fr_fr_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, src3: Register) { append_elem(instructions, inst_ps_sel_dot_fr_fr_fr_fr(dst, src, src2, src3)) } inst_ps_res_fr_fr :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .PS_RES, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_ps_res_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_ps_res_fr_fr(dst, src)) } +emit_ps_res_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_ps_res_fr_fr(dst, src)) } inst_ps_res_dot_fr_fr :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .PS_RES_DOT, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_ps_res_dot_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_ps_res_dot_fr_fr(dst, src)) } +emit_ps_res_dot_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_ps_res_dot_fr_fr(dst, src)) } inst_ps_mul_fr_fr_fr :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .PS_MUL, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_ps_mul_fr_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_ps_mul_fr_fr_fr(dst, src, src2)) } +emit_ps_mul_fr_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_ps_mul_fr_fr_fr(dst, src, src2)) } inst_ps_mul_dot_fr_fr_fr :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .PS_MUL_DOT, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_ps_mul_dot_fr_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_ps_mul_dot_fr_fr_fr(dst, src, src2)) } +emit_ps_mul_dot_fr_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_ps_mul_dot_fr_fr_fr(dst, src, src2)) } inst_ps_rsqrte_fr_fr :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .PS_RSQRTE, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_ps_rsqrte_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_ps_rsqrte_fr_fr(dst, src)) } +emit_ps_rsqrte_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_ps_rsqrte_fr_fr(dst, src)) } inst_ps_rsqrte_dot_fr_fr :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .PS_RSQRTE_DOT, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_ps_rsqrte_dot_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_ps_rsqrte_dot_fr_fr(dst, src)) } +emit_ps_rsqrte_dot_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_ps_rsqrte_dot_fr_fr(dst, src)) } inst_ps_msub_fr_fr_fr_fr :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register, src3: Register) -> Instruction { return Instruction{mnemonic = .PS_MSUB, operand_count = 4, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), op_reg(src3)}} } -emit_ps_msub_fr_fr_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, src3: Register) { append(instructions, inst_ps_msub_fr_fr_fr_fr(dst, src, src2, src3)) } +emit_ps_msub_fr_fr_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, src3: Register) { append_elem(instructions, inst_ps_msub_fr_fr_fr_fr(dst, src, src2, src3)) } inst_ps_msub_dot_fr_fr_fr_fr :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register, src3: Register) -> Instruction { return Instruction{mnemonic = .PS_MSUB_DOT, operand_count = 4, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), op_reg(src3)}} } -emit_ps_msub_dot_fr_fr_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, src3: Register) { append(instructions, inst_ps_msub_dot_fr_fr_fr_fr(dst, src, src2, src3)) } +emit_ps_msub_dot_fr_fr_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, src3: Register) { append_elem(instructions, inst_ps_msub_dot_fr_fr_fr_fr(dst, src, src2, src3)) } inst_ps_madd_fr_fr_fr_fr :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register, src3: Register) -> Instruction { return Instruction{mnemonic = .PS_MADD, operand_count = 4, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), op_reg(src3)}} } -emit_ps_madd_fr_fr_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, src3: Register) { append(instructions, inst_ps_madd_fr_fr_fr_fr(dst, src, src2, src3)) } +emit_ps_madd_fr_fr_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, src3: Register) { append_elem(instructions, inst_ps_madd_fr_fr_fr_fr(dst, src, src2, src3)) } inst_ps_madd_dot_fr_fr_fr_fr :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register, src3: Register) -> Instruction { return Instruction{mnemonic = .PS_MADD_DOT, operand_count = 4, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), op_reg(src3)}} } -emit_ps_madd_dot_fr_fr_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, src3: Register) { append(instructions, inst_ps_madd_dot_fr_fr_fr_fr(dst, src, src2, src3)) } +emit_ps_madd_dot_fr_fr_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, src3: Register) { append_elem(instructions, inst_ps_madd_dot_fr_fr_fr_fr(dst, src, src2, src3)) } inst_ps_nmsub_fr_fr_fr_fr :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register, src3: Register) -> Instruction { return Instruction{mnemonic = .PS_NMSUB, operand_count = 4, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), op_reg(src3)}} } -emit_ps_nmsub_fr_fr_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, src3: Register) { append(instructions, inst_ps_nmsub_fr_fr_fr_fr(dst, src, src2, src3)) } +emit_ps_nmsub_fr_fr_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, src3: Register) { append_elem(instructions, inst_ps_nmsub_fr_fr_fr_fr(dst, src, src2, src3)) } inst_ps_nmsub_dot_fr_fr_fr_fr :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register, src3: Register) -> Instruction { return Instruction{mnemonic = .PS_NMSUB_DOT, operand_count = 4, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), op_reg(src3)}} } -emit_ps_nmsub_dot_fr_fr_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, src3: Register) { append(instructions, inst_ps_nmsub_dot_fr_fr_fr_fr(dst, src, src2, src3)) } +emit_ps_nmsub_dot_fr_fr_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, src3: Register) { append_elem(instructions, inst_ps_nmsub_dot_fr_fr_fr_fr(dst, src, src2, src3)) } inst_ps_nmadd_fr_fr_fr_fr :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register, src3: Register) -> Instruction { return Instruction{mnemonic = .PS_NMADD, operand_count = 4, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), op_reg(src3)}} } -emit_ps_nmadd_fr_fr_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, src3: Register) { append(instructions, inst_ps_nmadd_fr_fr_fr_fr(dst, src, src2, src3)) } +emit_ps_nmadd_fr_fr_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, src3: Register) { append_elem(instructions, inst_ps_nmadd_fr_fr_fr_fr(dst, src, src2, src3)) } inst_ps_nmadd_dot_fr_fr_fr_fr :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register, src3: Register) -> Instruction { return Instruction{mnemonic = .PS_NMADD_DOT, operand_count = 4, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), op_reg(src3)}} } -emit_ps_nmadd_dot_fr_fr_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, src3: Register) { append(instructions, inst_ps_nmadd_dot_fr_fr_fr_fr(dst, src, src2, src3)) } +emit_ps_nmadd_dot_fr_fr_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, src3: Register) { append_elem(instructions, inst_ps_nmadd_dot_fr_fr_fr_fr(dst, src, src2, src3)) } inst_ps_sum0_fr_fr_fr_fr :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register, src3: Register) -> Instruction { return Instruction{mnemonic = .PS_SUM0, operand_count = 4, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), op_reg(src3)}} } -emit_ps_sum0_fr_fr_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, src3: Register) { append(instructions, inst_ps_sum0_fr_fr_fr_fr(dst, src, src2, src3)) } +emit_ps_sum0_fr_fr_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, src3: Register) { append_elem(instructions, inst_ps_sum0_fr_fr_fr_fr(dst, src, src2, src3)) } inst_ps_sum0_dot_fr_fr_fr_fr :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register, src3: Register) -> Instruction { return Instruction{mnemonic = .PS_SUM0_DOT, operand_count = 4, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), op_reg(src3)}} } -emit_ps_sum0_dot_fr_fr_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, src3: Register) { append(instructions, inst_ps_sum0_dot_fr_fr_fr_fr(dst, src, src2, src3)) } +emit_ps_sum0_dot_fr_fr_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, src3: Register) { append_elem(instructions, inst_ps_sum0_dot_fr_fr_fr_fr(dst, src, src2, src3)) } inst_ps_sum1_fr_fr_fr_fr :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register, src3: Register) -> Instruction { return Instruction{mnemonic = .PS_SUM1, operand_count = 4, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), op_reg(src3)}} } -emit_ps_sum1_fr_fr_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, src3: Register) { append(instructions, inst_ps_sum1_fr_fr_fr_fr(dst, src, src2, src3)) } +emit_ps_sum1_fr_fr_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, src3: Register) { append_elem(instructions, inst_ps_sum1_fr_fr_fr_fr(dst, src, src2, src3)) } inst_ps_sum1_dot_fr_fr_fr_fr :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register, src3: Register) -> Instruction { return Instruction{mnemonic = .PS_SUM1_DOT, operand_count = 4, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), op_reg(src3)}} } -emit_ps_sum1_dot_fr_fr_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, src3: Register) { append(instructions, inst_ps_sum1_dot_fr_fr_fr_fr(dst, src, src2, src3)) } +emit_ps_sum1_dot_fr_fr_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, src3: Register) { append_elem(instructions, inst_ps_sum1_dot_fr_fr_fr_fr(dst, src, src2, src3)) } inst_ps_muls0_fr_fr_fr :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .PS_MULS0, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_ps_muls0_fr_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_ps_muls0_fr_fr_fr(dst, src, src2)) } +emit_ps_muls0_fr_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_ps_muls0_fr_fr_fr(dst, src, src2)) } inst_ps_muls0_dot_fr_fr_fr :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .PS_MULS0_DOT, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_ps_muls0_dot_fr_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_ps_muls0_dot_fr_fr_fr(dst, src, src2)) } +emit_ps_muls0_dot_fr_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_ps_muls0_dot_fr_fr_fr(dst, src, src2)) } inst_ps_muls1_fr_fr_fr :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .PS_MULS1, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_ps_muls1_fr_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_ps_muls1_fr_fr_fr(dst, src, src2)) } +emit_ps_muls1_fr_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_ps_muls1_fr_fr_fr(dst, src, src2)) } inst_ps_muls1_dot_fr_fr_fr :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .PS_MULS1_DOT, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_ps_muls1_dot_fr_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_ps_muls1_dot_fr_fr_fr(dst, src, src2)) } +emit_ps_muls1_dot_fr_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_ps_muls1_dot_fr_fr_fr(dst, src, src2)) } inst_ps_madds0_fr_fr_fr_fr :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register, src3: Register) -> Instruction { return Instruction{mnemonic = .PS_MADDS0, operand_count = 4, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), op_reg(src3)}} } -emit_ps_madds0_fr_fr_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, src3: Register) { append(instructions, inst_ps_madds0_fr_fr_fr_fr(dst, src, src2, src3)) } +emit_ps_madds0_fr_fr_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, src3: Register) { append_elem(instructions, inst_ps_madds0_fr_fr_fr_fr(dst, src, src2, src3)) } inst_ps_madds0_dot_fr_fr_fr_fr :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register, src3: Register) -> Instruction { return Instruction{mnemonic = .PS_MADDS0_DOT, operand_count = 4, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), op_reg(src3)}} } -emit_ps_madds0_dot_fr_fr_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, src3: Register) { append(instructions, inst_ps_madds0_dot_fr_fr_fr_fr(dst, src, src2, src3)) } +emit_ps_madds0_dot_fr_fr_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, src3: Register) { append_elem(instructions, inst_ps_madds0_dot_fr_fr_fr_fr(dst, src, src2, src3)) } inst_ps_madds1_fr_fr_fr_fr :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register, src3: Register) -> Instruction { return Instruction{mnemonic = .PS_MADDS1, operand_count = 4, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), op_reg(src3)}} } -emit_ps_madds1_fr_fr_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, src3: Register) { append(instructions, inst_ps_madds1_fr_fr_fr_fr(dst, src, src2, src3)) } +emit_ps_madds1_fr_fr_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, src3: Register) { append_elem(instructions, inst_ps_madds1_fr_fr_fr_fr(dst, src, src2, src3)) } inst_ps_madds1_dot_fr_fr_fr_fr :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register, src3: Register) -> Instruction { return Instruction{mnemonic = .PS_MADDS1_DOT, operand_count = 4, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), op_reg(src3)}} } -emit_ps_madds1_dot_fr_fr_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, src3: Register) { append(instructions, inst_ps_madds1_dot_fr_fr_fr_fr(dst, src, src2, src3)) } +emit_ps_madds1_dot_fr_fr_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, src3: Register) { append_elem(instructions, inst_ps_madds1_dot_fr_fr_fr_fr(dst, src, src2, src3)) } inst_ps_neg_fr_fr :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .PS_NEG, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_ps_neg_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_ps_neg_fr_fr(dst, src)) } +emit_ps_neg_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_ps_neg_fr_fr(dst, src)) } inst_ps_neg_dot_fr_fr :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .PS_NEG_DOT, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_ps_neg_dot_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_ps_neg_dot_fr_fr(dst, src)) } +emit_ps_neg_dot_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_ps_neg_dot_fr_fr(dst, src)) } inst_ps_mr_fr_fr :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .PS_MR, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_ps_mr_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_ps_mr_fr_fr(dst, src)) } +emit_ps_mr_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_ps_mr_fr_fr(dst, src)) } inst_ps_mr_dot_fr_fr :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .PS_MR_DOT, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_ps_mr_dot_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_ps_mr_dot_fr_fr(dst, src)) } +emit_ps_mr_dot_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_ps_mr_dot_fr_fr(dst, src)) } inst_ps_nabs_fr_fr :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .PS_NABS, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_ps_nabs_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_ps_nabs_fr_fr(dst, src)) } +emit_ps_nabs_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_ps_nabs_fr_fr(dst, src)) } inst_ps_nabs_dot_fr_fr :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .PS_NABS_DOT, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_ps_nabs_dot_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_ps_nabs_dot_fr_fr(dst, src)) } +emit_ps_nabs_dot_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_ps_nabs_dot_fr_fr(dst, src)) } inst_ps_abs_fr_fr :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .PS_ABS, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_ps_abs_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_ps_abs_fr_fr(dst, src)) } +emit_ps_abs_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_ps_abs_fr_fr(dst, src)) } inst_ps_abs_dot_fr_fr :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .PS_ABS_DOT, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_ps_abs_dot_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_ps_abs_dot_fr_fr(dst, src)) } +emit_ps_abs_dot_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_ps_abs_dot_fr_fr(dst, src)) } inst_ps_cmpu0_crf_fr_fr :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .PS_CMPU0, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_ps_cmpu0_crf_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_ps_cmpu0_crf_fr_fr(dst, src, src2)) } +emit_ps_cmpu0_crf_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_ps_cmpu0_crf_fr_fr(dst, src, src2)) } inst_ps_cmpu1_crf_fr_fr :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .PS_CMPU1, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_ps_cmpu1_crf_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_ps_cmpu1_crf_fr_fr(dst, src, src2)) } +emit_ps_cmpu1_crf_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_ps_cmpu1_crf_fr_fr(dst, src, src2)) } inst_ps_cmpo0_crf_fr_fr :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .PS_CMPO0, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_ps_cmpo0_crf_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_ps_cmpo0_crf_fr_fr(dst, src, src2)) } +emit_ps_cmpo0_crf_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_ps_cmpo0_crf_fr_fr(dst, src, src2)) } inst_ps_cmpo1_crf_fr_fr :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .PS_CMPO1, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_ps_cmpo1_crf_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_ps_cmpo1_crf_fr_fr(dst, src, src2)) } +emit_ps_cmpo1_crf_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_ps_cmpo1_crf_fr_fr(dst, src, src2)) } inst_ps_merge00_fr_fr_fr :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .PS_MERGE00, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_ps_merge00_fr_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_ps_merge00_fr_fr_fr(dst, src, src2)) } +emit_ps_merge00_fr_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_ps_merge00_fr_fr_fr(dst, src, src2)) } inst_ps_merge00_dot_fr_fr_fr :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .PS_MERGE00_DOT, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_ps_merge00_dot_fr_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_ps_merge00_dot_fr_fr_fr(dst, src, src2)) } +emit_ps_merge00_dot_fr_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_ps_merge00_dot_fr_fr_fr(dst, src, src2)) } inst_ps_merge01_fr_fr_fr :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .PS_MERGE01, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_ps_merge01_fr_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_ps_merge01_fr_fr_fr(dst, src, src2)) } +emit_ps_merge01_fr_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_ps_merge01_fr_fr_fr(dst, src, src2)) } inst_ps_merge01_dot_fr_fr_fr :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .PS_MERGE01_DOT, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_ps_merge01_dot_fr_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_ps_merge01_dot_fr_fr_fr(dst, src, src2)) } +emit_ps_merge01_dot_fr_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_ps_merge01_dot_fr_fr_fr(dst, src, src2)) } inst_ps_merge10_fr_fr_fr :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .PS_MERGE10, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_ps_merge10_fr_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_ps_merge10_fr_fr_fr(dst, src, src2)) } +emit_ps_merge10_fr_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_ps_merge10_fr_fr_fr(dst, src, src2)) } inst_ps_merge10_dot_fr_fr_fr :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .PS_MERGE10_DOT, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_ps_merge10_dot_fr_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_ps_merge10_dot_fr_fr_fr(dst, src, src2)) } +emit_ps_merge10_dot_fr_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_ps_merge10_dot_fr_fr_fr(dst, src, src2)) } inst_ps_merge11_fr_fr_fr :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .PS_MERGE11, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_ps_merge11_fr_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_ps_merge11_fr_fr_fr(dst, src, src2)) } +emit_ps_merge11_fr_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_ps_merge11_fr_fr_fr(dst, src, src2)) } inst_ps_merge11_dot_fr_fr_fr :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .PS_MERGE11_DOT, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_ps_merge11_dot_fr_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_ps_merge11_dot_fr_fr_fr(dst, src, src2)) } +emit_ps_merge11_dot_fr_fr_fr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_ps_merge11_dot_fr_fr_fr(dst, src, src2)) } inst_psq_lx_fr_mem :: #force_inline proc "contextless" (dst: Register, addr: Memory) -> Instruction { return Instruction{mnemonic = .PSQ_LX, operand_count = 2, length = 4, ops = {op_reg(dst), op_mem(addr), {}, {}}} } -emit_psq_lx_fr_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append(instructions, inst_psq_lx_fr_mem(dst, addr)) } +emit_psq_lx_fr_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append_elem(instructions, inst_psq_lx_fr_mem(dst, addr)) } inst_psq_lux_fr_mem :: #force_inline proc "contextless" (dst: Register, addr: Memory) -> Instruction { return Instruction{mnemonic = .PSQ_LUX, operand_count = 2, length = 4, ops = {op_reg(dst), op_mem(addr), {}, {}}} } -emit_psq_lux_fr_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append(instructions, inst_psq_lux_fr_mem(dst, addr)) } +emit_psq_lux_fr_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append_elem(instructions, inst_psq_lux_fr_mem(dst, addr)) } inst_psq_stx_fr_mem :: #force_inline proc "contextless" (dst: Register, addr: Memory) -> Instruction { return Instruction{mnemonic = .PSQ_STX, operand_count = 2, length = 4, ops = {op_reg(dst), op_mem(addr), {}, {}}} } -emit_psq_stx_fr_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append(instructions, inst_psq_stx_fr_mem(dst, addr)) } +emit_psq_stx_fr_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append_elem(instructions, inst_psq_stx_fr_mem(dst, addr)) } inst_psq_stux_fr_mem :: #force_inline proc "contextless" (dst: Register, addr: Memory) -> Instruction { return Instruction{mnemonic = .PSQ_STUX, operand_count = 2, length = 4, ops = {op_reg(dst), op_mem(addr), {}, {}}} } -emit_psq_stux_fr_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append(instructions, inst_psq_stux_fr_mem(dst, addr)) } +emit_psq_stux_fr_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append_elem(instructions, inst_psq_stux_fr_mem(dst, addr)) } inst_psq_l_fr_mem :: #force_inline proc "contextless" (dst: Register, addr: Memory) -> Instruction { return Instruction{mnemonic = .PSQ_L, operand_count = 2, length = 4, ops = {op_reg(dst), op_mem(addr), {}, {}}} } -emit_psq_l_fr_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append(instructions, inst_psq_l_fr_mem(dst, addr)) } +emit_psq_l_fr_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append_elem(instructions, inst_psq_l_fr_mem(dst, addr)) } inst_psq_lu_fr_mem :: #force_inline proc "contextless" (dst: Register, addr: Memory) -> Instruction { return Instruction{mnemonic = .PSQ_LU, operand_count = 2, length = 4, ops = {op_reg(dst), op_mem(addr), {}, {}}} } -emit_psq_lu_fr_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append(instructions, inst_psq_lu_fr_mem(dst, addr)) } +emit_psq_lu_fr_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append_elem(instructions, inst_psq_lu_fr_mem(dst, addr)) } inst_psq_st_fr_mem :: #force_inline proc "contextless" (dst: Register, addr: Memory) -> Instruction { return Instruction{mnemonic = .PSQ_ST, operand_count = 2, length = 4, ops = {op_reg(dst), op_mem(addr), {}, {}}} } -emit_psq_st_fr_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append(instructions, inst_psq_st_fr_mem(dst, addr)) } +emit_psq_st_fr_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append_elem(instructions, inst_psq_st_fr_mem(dst, addr)) } inst_psq_stu_fr_mem :: #force_inline proc "contextless" (dst: Register, addr: Memory) -> Instruction { return Instruction{mnemonic = .PSQ_STU, operand_count = 2, length = 4, ops = {op_reg(dst), op_mem(addr), {}, {}}} } -emit_psq_stu_fr_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append(instructions, inst_psq_stu_fr_mem(dst, addr)) } +emit_psq_stu_fr_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append_elem(instructions, inst_psq_stu_fr_mem(dst, addr)) } inst_vaddfp128_vr128_vr128_vr128 :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VADDFP128, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_vaddfp128_vr128_vr128_vr128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vaddfp128_vr128_vr128_vr128(dst, src, src2)) } +emit_vaddfp128_vr128_vr128_vr128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vaddfp128_vr128_vr128_vr128(dst, src, src2)) } inst_vsubfp128_vr128_vr128_vr128 :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VSUBFP128, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_vsubfp128_vr128_vr128_vr128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vsubfp128_vr128_vr128_vr128(dst, src, src2)) } +emit_vsubfp128_vr128_vr128_vr128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vsubfp128_vr128_vr128_vr128(dst, src, src2)) } inst_vmulfp128_vr128_vr128_vr128 :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VMULFP128, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_vmulfp128_vr128_vr128_vr128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vmulfp128_vr128_vr128_vr128(dst, src, src2)) } +emit_vmulfp128_vr128_vr128_vr128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vmulfp128_vr128_vr128_vr128(dst, src, src2)) } inst_vmaddfp128_vr128_vr128_vr128_vr128 :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register, src3: Register) -> Instruction { return Instruction{mnemonic = .VMADDFP128, operand_count = 4, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), op_reg(src3)}} } -emit_vmaddfp128_vr128_vr128_vr128_vr128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, src3: Register) { append(instructions, inst_vmaddfp128_vr128_vr128_vr128_vr128(dst, src, src2, src3)) } +emit_vmaddfp128_vr128_vr128_vr128_vr128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, src3: Register) { append_elem(instructions, inst_vmaddfp128_vr128_vr128_vr128_vr128(dst, src, src2, src3)) } inst_vmaddcfp128_vr128_vr128_vr128_vr128 :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register, src3: Register) -> Instruction { return Instruction{mnemonic = .VMADDCFP128, operand_count = 4, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), op_reg(src3)}} } -emit_vmaddcfp128_vr128_vr128_vr128_vr128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, src3: Register) { append(instructions, inst_vmaddcfp128_vr128_vr128_vr128_vr128(dst, src, src2, src3)) } +emit_vmaddcfp128_vr128_vr128_vr128_vr128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, src3: Register) { append_elem(instructions, inst_vmaddcfp128_vr128_vr128_vr128_vr128(dst, src, src2, src3)) } inst_vnmsubfp128_vr128_vr128_vr128_vr128 :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register, src3: Register) -> Instruction { return Instruction{mnemonic = .VNMSUBFP128, operand_count = 4, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), op_reg(src3)}} } -emit_vnmsubfp128_vr128_vr128_vr128_vr128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, src3: Register) { append(instructions, inst_vnmsubfp128_vr128_vr128_vr128_vr128(dst, src, src2, src3)) } +emit_vnmsubfp128_vr128_vr128_vr128_vr128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, src3: Register) { append_elem(instructions, inst_vnmsubfp128_vr128_vr128_vr128_vr128(dst, src, src2, src3)) } inst_vmsum3fp128_vr128_vr128_vr128_vr128 :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register, src3: Register) -> Instruction { return Instruction{mnemonic = .VMSUM3FP128, operand_count = 4, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), op_reg(src3)}} } -emit_vmsum3fp128_vr128_vr128_vr128_vr128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, src3: Register) { append(instructions, inst_vmsum3fp128_vr128_vr128_vr128_vr128(dst, src, src2, src3)) } +emit_vmsum3fp128_vr128_vr128_vr128_vr128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, src3: Register) { append_elem(instructions, inst_vmsum3fp128_vr128_vr128_vr128_vr128(dst, src, src2, src3)) } inst_vmsum4fp128_vr128_vr128_vr128_vr128 :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register, src3: Register) -> Instruction { return Instruction{mnemonic = .VMSUM4FP128, operand_count = 4, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), op_reg(src3)}} } -emit_vmsum4fp128_vr128_vr128_vr128_vr128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, src3: Register) { append(instructions, inst_vmsum4fp128_vr128_vr128_vr128_vr128(dst, src, src2, src3)) } +emit_vmsum4fp128_vr128_vr128_vr128_vr128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, src3: Register) { append_elem(instructions, inst_vmsum4fp128_vr128_vr128_vr128_vr128(dst, src, src2, src3)) } inst_vmaxfp128_vr128_vr128_vr128 :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VMAXFP128, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_vmaxfp128_vr128_vr128_vr128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vmaxfp128_vr128_vr128_vr128(dst, src, src2)) } +emit_vmaxfp128_vr128_vr128_vr128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vmaxfp128_vr128_vr128_vr128(dst, src, src2)) } inst_vminfp128_vr128_vr128_vr128 :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VMINFP128, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_vminfp128_vr128_vr128_vr128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vminfp128_vr128_vr128_vr128(dst, src, src2)) } +emit_vminfp128_vr128_vr128_vr128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vminfp128_vr128_vr128_vr128(dst, src, src2)) } inst_vrefp128_vr128_vr128 :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .VREFP128, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_vrefp128_vr128_vr128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_vrefp128_vr128_vr128(dst, src)) } +emit_vrefp128_vr128_vr128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_vrefp128_vr128_vr128(dst, src)) } inst_vrsqrtefp128_vr128_vr128 :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .VRSQRTEFP128, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_vrsqrtefp128_vr128_vr128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_vrsqrtefp128_vr128_vr128(dst, src)) } +emit_vrsqrtefp128_vr128_vr128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_vrsqrtefp128_vr128_vr128(dst, src)) } inst_vexptefp128_vr128_vr128 :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .VEXPTEFP128, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_vexptefp128_vr128_vr128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_vexptefp128_vr128_vr128(dst, src)) } +emit_vexptefp128_vr128_vr128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_vexptefp128_vr128_vr128(dst, src)) } inst_vlogefp128_vr128_vr128 :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .VLOGEFP128, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_vlogefp128_vr128_vr128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_vlogefp128_vr128_vr128(dst, src)) } +emit_vlogefp128_vr128_vr128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_vlogefp128_vr128_vr128(dst, src)) } inst_vand128_vr128_vr128_vr128 :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VAND128, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_vand128_vr128_vr128_vr128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vand128_vr128_vr128_vr128(dst, src, src2)) } +emit_vand128_vr128_vr128_vr128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vand128_vr128_vr128_vr128(dst, src, src2)) } inst_vandc128_vr128_vr128_vr128 :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VANDC128, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_vandc128_vr128_vr128_vr128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vandc128_vr128_vr128_vr128(dst, src, src2)) } +emit_vandc128_vr128_vr128_vr128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vandc128_vr128_vr128_vr128(dst, src, src2)) } inst_vor128_vr128_vr128_vr128 :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VOR128, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_vor128_vr128_vr128_vr128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vor128_vr128_vr128_vr128(dst, src, src2)) } +emit_vor128_vr128_vr128_vr128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vor128_vr128_vr128_vr128(dst, src, src2)) } inst_vxor128_vr128_vr128_vr128 :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VXOR128, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_vxor128_vr128_vr128_vr128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vxor128_vr128_vr128_vr128(dst, src, src2)) } +emit_vxor128_vr128_vr128_vr128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vxor128_vr128_vr128_vr128(dst, src, src2)) } inst_vnor128_vr128_vr128_vr128 :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VNOR128, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_vnor128_vr128_vr128_vr128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vnor128_vr128_vr128_vr128(dst, src, src2)) } +emit_vnor128_vr128_vr128_vr128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vnor128_vr128_vr128_vr128(dst, src, src2)) } inst_vsel128_vr128_vr128_vr128_vr128 :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register, src3: Register) -> Instruction { return Instruction{mnemonic = .VSEL128, operand_count = 4, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), op_reg(src3)}} } -emit_vsel128_vr128_vr128_vr128_vr128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, src3: Register) { append(instructions, inst_vsel128_vr128_vr128_vr128_vr128(dst, src, src2, src3)) } +emit_vsel128_vr128_vr128_vr128_vr128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, src3: Register) { append_elem(instructions, inst_vsel128_vr128_vr128_vr128_vr128(dst, src, src2, src3)) } inst_vcmpeqfp128_vr128_vr128_vr128 :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VCMPEQFP128, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_vcmpeqfp128_vr128_vr128_vr128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vcmpeqfp128_vr128_vr128_vr128(dst, src, src2)) } +emit_vcmpeqfp128_vr128_vr128_vr128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vcmpeqfp128_vr128_vr128_vr128(dst, src, src2)) } inst_vcmpeqfp128_dot_vr128_vr128_vr128 :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VCMPEQFP128_DOT, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_vcmpeqfp128_dot_vr128_vr128_vr128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vcmpeqfp128_dot_vr128_vr128_vr128(dst, src, src2)) } +emit_vcmpeqfp128_dot_vr128_vr128_vr128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vcmpeqfp128_dot_vr128_vr128_vr128(dst, src, src2)) } inst_vcmpgefp128_vr128_vr128_vr128 :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VCMPGEFP128, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_vcmpgefp128_vr128_vr128_vr128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vcmpgefp128_vr128_vr128_vr128(dst, src, src2)) } +emit_vcmpgefp128_vr128_vr128_vr128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vcmpgefp128_vr128_vr128_vr128(dst, src, src2)) } inst_vcmpgefp128_dot_vr128_vr128_vr128 :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VCMPGEFP128_DOT, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_vcmpgefp128_dot_vr128_vr128_vr128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vcmpgefp128_dot_vr128_vr128_vr128(dst, src, src2)) } +emit_vcmpgefp128_dot_vr128_vr128_vr128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vcmpgefp128_dot_vr128_vr128_vr128(dst, src, src2)) } inst_vcmpgtfp128_vr128_vr128_vr128 :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VCMPGTFP128, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_vcmpgtfp128_vr128_vr128_vr128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vcmpgtfp128_vr128_vr128_vr128(dst, src, src2)) } +emit_vcmpgtfp128_vr128_vr128_vr128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vcmpgtfp128_vr128_vr128_vr128(dst, src, src2)) } inst_vcmpgtfp128_dot_vr128_vr128_vr128 :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VCMPGTFP128_DOT, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_vcmpgtfp128_dot_vr128_vr128_vr128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vcmpgtfp128_dot_vr128_vr128_vr128(dst, src, src2)) } +emit_vcmpgtfp128_dot_vr128_vr128_vr128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vcmpgtfp128_dot_vr128_vr128_vr128(dst, src, src2)) } inst_vcmpbfp128_vr128_vr128_vr128 :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VCMPBFP128, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_vcmpbfp128_vr128_vr128_vr128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vcmpbfp128_vr128_vr128_vr128(dst, src, src2)) } +emit_vcmpbfp128_vr128_vr128_vr128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vcmpbfp128_vr128_vr128_vr128(dst, src, src2)) } inst_vcmpbfp128_dot_vr128_vr128_vr128 :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VCMPBFP128_DOT, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_vcmpbfp128_dot_vr128_vr128_vr128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vcmpbfp128_dot_vr128_vr128_vr128(dst, src, src2)) } +emit_vcmpbfp128_dot_vr128_vr128_vr128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vcmpbfp128_dot_vr128_vr128_vr128(dst, src, src2)) } inst_vcmpequw128_vr128_vr128_vr128 :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VCMPEQUW128, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_vcmpequw128_vr128_vr128_vr128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vcmpequw128_vr128_vr128_vr128(dst, src, src2)) } +emit_vcmpequw128_vr128_vr128_vr128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vcmpequw128_vr128_vr128_vr128(dst, src, src2)) } inst_vcmpequw128_dot_vr128_vr128_vr128 :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VCMPEQUW128_DOT, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_vcmpequw128_dot_vr128_vr128_vr128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vcmpequw128_dot_vr128_vr128_vr128(dst, src, src2)) } +emit_vcmpequw128_dot_vr128_vr128_vr128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vcmpequw128_dot_vr128_vr128_vr128(dst, src, src2)) } inst_vrfim128_vr128_vr128 :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .VRFIM128, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_vrfim128_vr128_vr128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_vrfim128_vr128_vr128(dst, src)) } +emit_vrfim128_vr128_vr128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_vrfim128_vr128_vr128(dst, src)) } inst_vrfin128_vr128_vr128 :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .VRFIN128, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_vrfin128_vr128_vr128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_vrfin128_vr128_vr128(dst, src)) } +emit_vrfin128_vr128_vr128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_vrfin128_vr128_vr128(dst, src)) } inst_vrfip128_vr128_vr128 :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .VRFIP128, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_vrfip128_vr128_vr128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_vrfip128_vr128_vr128(dst, src)) } +emit_vrfip128_vr128_vr128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_vrfip128_vr128_vr128(dst, src)) } inst_vrfiz128_vr128_vr128 :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .VRFIZ128, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_vrfiz128_vr128_vr128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_vrfiz128_vr128_vr128(dst, src)) } +emit_vrfiz128_vr128_vr128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_vrfiz128_vr128_vr128(dst, src)) } inst_vcfpsxws128_vr128_vr128 :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .VCFPSXWS128, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_vcfpsxws128_vr128_vr128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_vcfpsxws128_vr128_vr128(dst, src)) } +emit_vcfpsxws128_vr128_vr128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_vcfpsxws128_vr128_vr128(dst, src)) } inst_vcfpuxws128_vr128_vr128 :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .VCFPUXWS128, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_vcfpuxws128_vr128_vr128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_vcfpuxws128_vr128_vr128(dst, src)) } +emit_vcfpuxws128_vr128_vr128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_vcfpuxws128_vr128_vr128(dst, src)) } inst_vcsxwfp128_vr128_vr128 :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .VCSXWFP128, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_vcsxwfp128_vr128_vr128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_vcsxwfp128_vr128_vr128(dst, src)) } +emit_vcsxwfp128_vr128_vr128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_vcsxwfp128_vr128_vr128(dst, src)) } inst_vcuxwfp128_vr128_vr128 :: #force_inline proc "contextless" (dst: Register, src: Register) -> Instruction { return Instruction{mnemonic = .VCUXWFP128, operand_count = 2, length = 4, ops = {op_reg(dst), op_reg(src), {}, {}}} } -emit_vcuxwfp128_vr128_vr128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append(instructions, inst_vcuxwfp128_vr128_vr128(dst, src)) } +emit_vcuxwfp128_vr128_vr128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register) { append_elem(instructions, inst_vcuxwfp128_vr128_vr128(dst, src)) } inst_vspltw128_vr128_vr128_imm :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .VSPLTW128, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_imm(imm), {}}} } -emit_vspltw128_vr128_vr128_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_vspltw128_vr128_vr128_imm(dst, src, imm)) } +emit_vspltw128_vr128_vr128_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_vspltw128_vr128_vr128_imm(dst, src, imm)) } inst_vspltisw128_vr128_imm :: #force_inline proc "contextless" (dst: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .VSPLTISW128, operand_count = 2, length = 4, ops = {op_reg(dst), op_imm(imm), {}, {}}} } -emit_vspltisw128_vr128_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64) { append(instructions, inst_vspltisw128_vr128_imm(dst, imm)) } +emit_vspltisw128_vr128_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, imm: i64) { append_elem(instructions, inst_vspltisw128_vr128_imm(dst, imm)) } inst_vmrghw128_vr128_vr128_vr128 :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VMRGHW128, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_vmrghw128_vr128_vr128_vr128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vmrghw128_vr128_vr128_vr128(dst, src, src2)) } +emit_vmrghw128_vr128_vr128_vr128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vmrghw128_vr128_vr128_vr128(dst, src, src2)) } inst_vmrglw128_vr128_vr128_vr128 :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VMRGLW128, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_vmrglw128_vr128_vr128_vr128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vmrglw128_vr128_vr128_vr128(dst, src, src2)) } +emit_vmrglw128_vr128_vr128_vr128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vmrglw128_vr128_vr128_vr128(dst, src, src2)) } inst_vpkd3d128_vr128_vr128_imm_imm :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64, imm2: i64) -> Instruction { return Instruction{mnemonic = .VPKD3D128, operand_count = 4, length = 4, ops = {op_reg(dst), op_reg(src), op_imm(imm), op_imm(imm2)}} } -emit_vpkd3d128_vr128_vr128_imm_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64, imm2: i64) { append(instructions, inst_vpkd3d128_vr128_vr128_imm_imm(dst, src, imm, imm2)) } +emit_vpkd3d128_vr128_vr128_imm_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64, imm2: i64) { append_elem(instructions, inst_vpkd3d128_vr128_vr128_imm_imm(dst, src, imm, imm2)) } inst_vupkd3d128_vr128_vr128_imm :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .VUPKD3D128, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_imm(imm), {}}} } -emit_vupkd3d128_vr128_vr128_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_vupkd3d128_vr128_vr128_imm(dst, src, imm)) } +emit_vupkd3d128_vr128_vr128_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_vupkd3d128_vr128_vr128_imm(dst, src, imm)) } inst_vperm128_vr128_vr128_vr128_vr128 :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register, src3: Register) -> Instruction { return Instruction{mnemonic = .VPERM128, operand_count = 4, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), op_reg(src3)}} } -emit_vperm128_vr128_vr128_vr128_vr128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, src3: Register) { append(instructions, inst_vperm128_vr128_vr128_vr128_vr128(dst, src, src2, src3)) } +emit_vperm128_vr128_vr128_vr128_vr128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, src3: Register) { append_elem(instructions, inst_vperm128_vr128_vr128_vr128_vr128(dst, src, src2, src3)) } inst_vpermwi128_vr128_vr128_imm :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .VPERMWI128, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_imm(imm), {}}} } -emit_vpermwi128_vr128_vr128_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_vpermwi128_vr128_vr128_imm(dst, src, imm)) } +emit_vpermwi128_vr128_vr128_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_vpermwi128_vr128_vr128_imm(dst, src, imm)) } inst_vrlimi128_vr128_vr128_imm_imm :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64, imm2: i64) -> Instruction { return Instruction{mnemonic = .VRLIMI128, operand_count = 4, length = 4, ops = {op_reg(dst), op_reg(src), op_imm(imm), op_imm(imm2)}} } -emit_vrlimi128_vr128_vr128_imm_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64, imm2: i64) { append(instructions, inst_vrlimi128_vr128_vr128_imm_imm(dst, src, imm, imm2)) } +emit_vrlimi128_vr128_vr128_imm_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64, imm2: i64) { append_elem(instructions, inst_vrlimi128_vr128_vr128_imm_imm(dst, src, imm, imm2)) } inst_vsldoi128_vr128_vr128_vr128_imm :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .VSLDOI128, operand_count = 4, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), op_imm(imm)}} } -emit_vsldoi128_vr128_vr128_vr128_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, imm: i64) { append(instructions, inst_vsldoi128_vr128_vr128_vr128_imm(dst, src, src2, imm)) } +emit_vsldoi128_vr128_vr128_vr128_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register, imm: i64) { append_elem(instructions, inst_vsldoi128_vr128_vr128_vr128_imm(dst, src, src2, imm)) } inst_vrlw128_vr128_vr128_vr128 :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VRLW128, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_vrlw128_vr128_vr128_vr128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vrlw128_vr128_vr128_vr128(dst, src, src2)) } +emit_vrlw128_vr128_vr128_vr128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vrlw128_vr128_vr128_vr128(dst, src, src2)) } inst_vslw128_vr128_vr128_vr128 :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VSLW128, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_vslw128_vr128_vr128_vr128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vslw128_vr128_vr128_vr128(dst, src, src2)) } +emit_vslw128_vr128_vr128_vr128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vslw128_vr128_vr128_vr128(dst, src, src2)) } inst_vsrw128_vr128_vr128_vr128 :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VSRW128, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_vsrw128_vr128_vr128_vr128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vsrw128_vr128_vr128_vr128(dst, src, src2)) } +emit_vsrw128_vr128_vr128_vr128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vsrw128_vr128_vr128_vr128(dst, src, src2)) } inst_vsraw128_vr128_vr128_vr128 :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VSRAW128, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_vsraw128_vr128_vr128_vr128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vsraw128_vr128_vr128_vr128(dst, src, src2)) } +emit_vsraw128_vr128_vr128_vr128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vsraw128_vr128_vr128_vr128(dst, src, src2)) } inst_lvebx128_vr128_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .LVEBX128, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_lvebx128_vr128_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_lvebx128_vr128_r_r(dst, src, src2)) } +emit_lvebx128_vr128_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_lvebx128_vr128_r_r(dst, src, src2)) } inst_lvehx128_vr128_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .LVEHX128, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_lvehx128_vr128_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_lvehx128_vr128_r_r(dst, src, src2)) } +emit_lvehx128_vr128_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_lvehx128_vr128_r_r(dst, src, src2)) } inst_lvewx128_vr128_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .LVEWX128, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_lvewx128_vr128_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_lvewx128_vr128_r_r(dst, src, src2)) } +emit_lvewx128_vr128_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_lvewx128_vr128_r_r(dst, src, src2)) } inst_lvx128_vr128_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .LVX128, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_lvx128_vr128_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_lvx128_vr128_r_r(dst, src, src2)) } +emit_lvx128_vr128_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_lvx128_vr128_r_r(dst, src, src2)) } inst_lvxl128_vr128_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .LVXL128, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_lvxl128_vr128_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_lvxl128_vr128_r_r(dst, src, src2)) } +emit_lvxl128_vr128_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_lvxl128_vr128_r_r(dst, src, src2)) } inst_lvlx128_vr128_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .LVLX128, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_lvlx128_vr128_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_lvlx128_vr128_r_r(dst, src, src2)) } +emit_lvlx128_vr128_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_lvlx128_vr128_r_r(dst, src, src2)) } inst_lvrx128_vr128_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .LVRX128, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_lvrx128_vr128_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_lvrx128_vr128_r_r(dst, src, src2)) } +emit_lvrx128_vr128_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_lvrx128_vr128_r_r(dst, src, src2)) } inst_lvlxl128_vr128_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .LVLXL128, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_lvlxl128_vr128_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_lvlxl128_vr128_r_r(dst, src, src2)) } +emit_lvlxl128_vr128_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_lvlxl128_vr128_r_r(dst, src, src2)) } inst_lvrxl128_vr128_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .LVRXL128, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_lvrxl128_vr128_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_lvrxl128_vr128_r_r(dst, src, src2)) } +emit_lvrxl128_vr128_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_lvrxl128_vr128_r_r(dst, src, src2)) } inst_stvebx128_vr128_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .STVEBX128, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_stvebx128_vr128_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_stvebx128_vr128_r_r(dst, src, src2)) } +emit_stvebx128_vr128_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_stvebx128_vr128_r_r(dst, src, src2)) } inst_stvehx128_vr128_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .STVEHX128, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_stvehx128_vr128_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_stvehx128_vr128_r_r(dst, src, src2)) } +emit_stvehx128_vr128_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_stvehx128_vr128_r_r(dst, src, src2)) } inst_stvewx128_vr128_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .STVEWX128, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_stvewx128_vr128_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_stvewx128_vr128_r_r(dst, src, src2)) } +emit_stvewx128_vr128_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_stvewx128_vr128_r_r(dst, src, src2)) } inst_stvx128_vr128_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .STVX128, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_stvx128_vr128_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_stvx128_vr128_r_r(dst, src, src2)) } +emit_stvx128_vr128_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_stvx128_vr128_r_r(dst, src, src2)) } inst_stvxl128_vr128_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .STVXL128, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_stvxl128_vr128_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_stvxl128_vr128_r_r(dst, src, src2)) } +emit_stvxl128_vr128_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_stvxl128_vr128_r_r(dst, src, src2)) } inst_stvlx128_vr128_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .STVLX128, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_stvlx128_vr128_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_stvlx128_vr128_r_r(dst, src, src2)) } +emit_stvlx128_vr128_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_stvlx128_vr128_r_r(dst, src, src2)) } inst_stvrx128_vr128_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .STVRX128, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_stvrx128_vr128_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_stvrx128_vr128_r_r(dst, src, src2)) } +emit_stvrx128_vr128_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_stvrx128_vr128_r_r(dst, src, src2)) } inst_stvlxl128_vr128_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .STVLXL128, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_stvlxl128_vr128_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_stvlxl128_vr128_r_r(dst, src, src2)) } +emit_stvlxl128_vr128_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_stvlxl128_vr128_r_r(dst, src, src2)) } inst_stvrxl128_vr128_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .STVRXL128, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_stvrxl128_vr128_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_stvrxl128_vr128_r_r(dst, src, src2)) } +emit_stvrxl128_vr128_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_stvrxl128_vr128_r_r(dst, src, src2)) } inst_ti_r_r_imm :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .TI, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_imm(imm), {}}} } -emit_ti_r_r_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_ti_r_r_imm(dst, src, imm)) } +emit_ti_r_r_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_ti_r_r_imm(dst, src, imm)) } inst_mulhhwu_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .MULHHWU, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_mulhhwu_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_mulhhwu_r_r_r(dst, src, src2)) } +emit_mulhhwu_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_mulhhwu_r_r_r(dst, src, src2)) } inst_mulhhwu_dot_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .MULHHWU_DOT, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_mulhhwu_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_mulhhwu_dot_r_r_r(dst, src, src2)) } +emit_mulhhwu_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_mulhhwu_dot_r_r_r(dst, src, src2)) } inst_machhwu_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .MACHHWU, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_machhwu_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_machhwu_r_r_r(dst, src, src2)) } +emit_machhwu_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_machhwu_r_r_r(dst, src, src2)) } inst_machhwu_dot_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .MACHHWU_DOT, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_machhwu_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_machhwu_dot_r_r_r(dst, src, src2)) } +emit_machhwu_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_machhwu_dot_r_r_r(dst, src, src2)) } inst_mulhhw_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .MULHHW, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_mulhhw_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_mulhhw_r_r_r(dst, src, src2)) } +emit_mulhhw_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_mulhhw_r_r_r(dst, src, src2)) } inst_mulhhw_dot_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .MULHHW_DOT, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_mulhhw_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_mulhhw_dot_r_r_r(dst, src, src2)) } +emit_mulhhw_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_mulhhw_dot_r_r_r(dst, src, src2)) } inst_machhw_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .MACHHW, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_machhw_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_machhw_r_r_r(dst, src, src2)) } +emit_machhw_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_machhw_r_r_r(dst, src, src2)) } inst_machhw_dot_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .MACHHW_DOT, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_machhw_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_machhw_dot_r_r_r(dst, src, src2)) } +emit_machhw_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_machhw_dot_r_r_r(dst, src, src2)) } inst_nmachhw_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .NMACHHW, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_nmachhw_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_nmachhw_r_r_r(dst, src, src2)) } +emit_nmachhw_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_nmachhw_r_r_r(dst, src, src2)) } inst_nmachhw_dot_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .NMACHHW_DOT, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_nmachhw_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_nmachhw_dot_r_r_r(dst, src, src2)) } +emit_nmachhw_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_nmachhw_dot_r_r_r(dst, src, src2)) } inst_machhwsu_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .MACHHWSU, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_machhwsu_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_machhwsu_r_r_r(dst, src, src2)) } +emit_machhwsu_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_machhwsu_r_r_r(dst, src, src2)) } inst_machhwsu_dot_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .MACHHWSU_DOT, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_machhwsu_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_machhwsu_dot_r_r_r(dst, src, src2)) } +emit_machhwsu_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_machhwsu_dot_r_r_r(dst, src, src2)) } inst_machhws_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .MACHHWS, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_machhws_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_machhws_r_r_r(dst, src, src2)) } +emit_machhws_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_machhws_r_r_r(dst, src, src2)) } inst_machhws_dot_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .MACHHWS_DOT, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_machhws_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_machhws_dot_r_r_r(dst, src, src2)) } +emit_machhws_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_machhws_dot_r_r_r(dst, src, src2)) } inst_nmachhws_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .NMACHHWS, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_nmachhws_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_nmachhws_r_r_r(dst, src, src2)) } +emit_nmachhws_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_nmachhws_r_r_r(dst, src, src2)) } inst_nmachhws_dot_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .NMACHHWS_DOT, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_nmachhws_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_nmachhws_dot_r_r_r(dst, src, src2)) } +emit_nmachhws_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_nmachhws_dot_r_r_r(dst, src, src2)) } inst_vadduqm_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VADDUQM, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_vadduqm_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vadduqm_r_r_r(dst, src, src2)) } +emit_vadduqm_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vadduqm_r_r_r(dst, src, src2)) } inst_vcmpuq_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VCMPUQ, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_vcmpuq_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vcmpuq_r_r_r(dst, src, src2)) } +emit_vcmpuq_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vcmpuq_r_r_r(dst, src, src2)) } inst_mulchwu_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .MULCHWU, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_mulchwu_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_mulchwu_r_r_r(dst, src, src2)) } +emit_mulchwu_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_mulchwu_r_r_r(dst, src, src2)) } inst_mulchwu_dot_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .MULCHWU_DOT, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_mulchwu_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_mulchwu_dot_r_r_r(dst, src, src2)) } +emit_mulchwu_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_mulchwu_dot_r_r_r(dst, src, src2)) } inst_macchwu_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .MACCHWU, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_macchwu_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_macchwu_r_r_r(dst, src, src2)) } +emit_macchwu_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_macchwu_r_r_r(dst, src, src2)) } inst_macchwu_dot_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .MACCHWU_DOT, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_macchwu_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_macchwu_dot_r_r_r(dst, src, src2)) } +emit_macchwu_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_macchwu_dot_r_r_r(dst, src, src2)) } inst_vcmpsq_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VCMPSQ, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_vcmpsq_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vcmpsq_r_r_r(dst, src, src2)) } +emit_vcmpsq_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vcmpsq_r_r_r(dst, src, src2)) } inst_mulchw_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .MULCHW, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_mulchw_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_mulchw_r_r_r(dst, src, src2)) } +emit_mulchw_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_mulchw_r_r_r(dst, src, src2)) } inst_mulchw_dot_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .MULCHW_DOT, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_mulchw_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_mulchw_dot_r_r_r(dst, src, src2)) } +emit_mulchw_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_mulchw_dot_r_r_r(dst, src, src2)) } inst_macchw_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .MACCHW, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_macchw_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_macchw_r_r_r(dst, src, src2)) } +emit_macchw_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_macchw_r_r_r(dst, src, src2)) } inst_macchw_dot_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .MACCHW_DOT, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_macchw_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_macchw_dot_r_r_r(dst, src, src2)) } +emit_macchw_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_macchw_dot_r_r_r(dst, src, src2)) } inst_nmacchw_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .NMACCHW, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_nmacchw_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_nmacchw_r_r_r(dst, src, src2)) } +emit_nmacchw_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_nmacchw_r_r_r(dst, src, src2)) } inst_nmacchw_dot_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .NMACCHW_DOT, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_nmacchw_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_nmacchw_dot_r_r_r(dst, src, src2)) } +emit_nmacchw_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_nmacchw_dot_r_r_r(dst, src, src2)) } inst_macchwsu_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .MACCHWSU, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_macchwsu_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_macchwsu_r_r_r(dst, src, src2)) } +emit_macchwsu_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_macchwsu_r_r_r(dst, src, src2)) } inst_macchwsu_dot_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .MACCHWSU_DOT, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_macchwsu_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_macchwsu_dot_r_r_r(dst, src, src2)) } +emit_macchwsu_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_macchwsu_dot_r_r_r(dst, src, src2)) } inst_vcmpequq_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VCMPEQUQ, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_vcmpequq_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vcmpequq_r_r_r(dst, src, src2)) } +emit_vcmpequq_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vcmpequq_r_r_r(dst, src, src2)) } inst_macchws_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .MACCHWS, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_macchws_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_macchws_r_r_r(dst, src, src2)) } +emit_macchws_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_macchws_r_r_r(dst, src, src2)) } inst_macchws_dot_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .MACCHWS_DOT, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_macchws_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_macchws_dot_r_r_r(dst, src, src2)) } +emit_macchws_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_macchws_dot_r_r_r(dst, src, src2)) } inst_nmacchws_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .NMACCHWS, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_nmacchws_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_nmacchws_r_r_r(dst, src, src2)) } +emit_nmacchws_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_nmacchws_r_r_r(dst, src, src2)) } inst_nmacchws_dot_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .NMACCHWS_DOT, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_nmacchws_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_nmacchws_dot_r_r_r(dst, src, src2)) } +emit_nmacchws_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_nmacchws_dot_r_r_r(dst, src, src2)) } inst_vcmpgtuq_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VCMPGTUQ, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_vcmpgtuq_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vcmpgtuq_r_r_r(dst, src, src2)) } +emit_vcmpgtuq_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vcmpgtuq_r_r_r(dst, src, src2)) } inst_vcuxwfp_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VCUXWFP, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_vcuxwfp_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vcuxwfp_r_r_r(dst, src, src2)) } +emit_vcuxwfp_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vcuxwfp_r_r_r(dst, src, src2)) } inst_mullhwu_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .MULLHWU, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_mullhwu_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_mullhwu_r_r_r(dst, src, src2)) } +emit_mullhwu_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_mullhwu_r_r_r(dst, src, src2)) } inst_mullhwu_dot_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .MULLHWU_DOT, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_mullhwu_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_mullhwu_dot_r_r_r(dst, src, src2)) } +emit_mullhwu_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_mullhwu_dot_r_r_r(dst, src, src2)) } inst_maclhwu_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .MACLHWU, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_maclhwu_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_maclhwu_r_r_r(dst, src, src2)) } +emit_maclhwu_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_maclhwu_r_r_r(dst, src, src2)) } inst_maclhwu_dot_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .MACLHWU_DOT, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_maclhwu_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_maclhwu_dot_r_r_r(dst, src, src2)) } +emit_maclhwu_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_maclhwu_dot_r_r_r(dst, src, src2)) } inst_vcsxwfp_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VCSXWFP, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_vcsxwfp_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vcsxwfp_r_r_r(dst, src, src2)) } +emit_vcsxwfp_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vcsxwfp_r_r_r(dst, src, src2)) } inst_mullhw_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .MULLHW, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_mullhw_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_mullhw_r_r_r(dst, src, src2)) } +emit_mullhw_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_mullhw_r_r_r(dst, src, src2)) } inst_mullhw_dot_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .MULLHW_DOT, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_mullhw_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_mullhw_dot_r_r_r(dst, src, src2)) } +emit_mullhw_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_mullhw_dot_r_r_r(dst, src, src2)) } inst_maclhw_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .MACLHW, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_maclhw_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_maclhw_r_r_r(dst, src, src2)) } +emit_maclhw_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_maclhw_r_r_r(dst, src, src2)) } inst_maclhw_dot_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .MACLHW_DOT, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_maclhw_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_maclhw_dot_r_r_r(dst, src, src2)) } +emit_maclhw_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_maclhw_dot_r_r_r(dst, src, src2)) } inst_nmaclhw_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .NMACLHW, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_nmaclhw_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_nmaclhw_r_r_r(dst, src, src2)) } +emit_nmaclhw_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_nmaclhw_r_r_r(dst, src, src2)) } inst_nmaclhw_dot_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .NMACLHW_DOT, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_nmaclhw_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_nmaclhw_dot_r_r_r(dst, src, src2)) } +emit_nmaclhw_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_nmaclhw_dot_r_r_r(dst, src, src2)) } inst_vcmpgtsq_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VCMPGTSQ, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_vcmpgtsq_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vcmpgtsq_r_r_r(dst, src, src2)) } +emit_vcmpgtsq_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vcmpgtsq_r_r_r(dst, src, src2)) } inst_vcfpuxws_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VCFPUXWS, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_vcfpuxws_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vcfpuxws_r_r_r(dst, src, src2)) } +emit_vcfpuxws_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vcfpuxws_r_r_r(dst, src, src2)) } inst_maclhwsu_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .MACLHWSU, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_maclhwsu_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_maclhwsu_r_r_r(dst, src, src2)) } +emit_maclhwsu_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_maclhwsu_r_r_r(dst, src, src2)) } inst_maclhwsu_dot_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .MACLHWSU_DOT, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_maclhwsu_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_maclhwsu_dot_r_r_r(dst, src, src2)) } +emit_maclhwsu_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_maclhwsu_dot_r_r_r(dst, src, src2)) } inst_vcfpsxws_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VCFPSXWS, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_vcfpsxws_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vcfpsxws_r_r_r(dst, src, src2)) } +emit_vcfpsxws_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vcfpsxws_r_r_r(dst, src, src2)) } inst_maclhws_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .MACLHWS, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_maclhws_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_maclhws_r_r_r(dst, src, src2)) } +emit_maclhws_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_maclhws_r_r_r(dst, src, src2)) } inst_maclhws_dot_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .MACLHWS_DOT, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_maclhws_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_maclhws_dot_r_r_r(dst, src, src2)) } +emit_maclhws_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_maclhws_dot_r_r_r(dst, src, src2)) } inst_nmaclhws_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .NMACLHWS, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_nmaclhws_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_nmaclhws_r_r_r(dst, src, src2)) } +emit_nmaclhws_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_nmaclhws_r_r_r(dst, src, src2)) } inst_nmaclhws_dot_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .NMACLHWS_DOT, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_nmaclhws_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_nmaclhws_dot_r_r_r(dst, src, src2)) } +emit_nmaclhws_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_nmaclhws_dot_r_r_r(dst, src, src2)) } inst_machhwuo_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .MACHHWUO, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_machhwuo_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_machhwuo_r_r_r(dst, src, src2)) } +emit_machhwuo_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_machhwuo_r_r_r(dst, src, src2)) } inst_machhwuo_dot_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .MACHHWUO_DOT, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_machhwuo_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_machhwuo_dot_r_r_r(dst, src, src2)) } +emit_machhwuo_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_machhwuo_dot_r_r_r(dst, src, src2)) } inst_machhwo_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .MACHHWO, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_machhwo_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_machhwo_r_r_r(dst, src, src2)) } +emit_machhwo_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_machhwo_r_r_r(dst, src, src2)) } inst_machhwo_dot_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .MACHHWO_DOT, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_machhwo_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_machhwo_dot_r_r_r(dst, src, src2)) } +emit_machhwo_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_machhwo_dot_r_r_r(dst, src, src2)) } inst_nmachhwo_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .NMACHHWO, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_nmachhwo_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_nmachhwo_r_r_r(dst, src, src2)) } +emit_nmachhwo_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_nmachhwo_r_r_r(dst, src, src2)) } inst_nmachhwo_dot_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .NMACHHWO_DOT, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_nmachhwo_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_nmachhwo_dot_r_r_r(dst, src, src2)) } +emit_nmachhwo_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_nmachhwo_dot_r_r_r(dst, src, src2)) } inst_vmr_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VMR, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_vmr_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vmr_r_r_r(dst, src, src2)) } +emit_vmr_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vmr_r_r_r(dst, src, src2)) } inst_machhwsuo_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .MACHHWSUO, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_machhwsuo_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_machhwsuo_r_r_r(dst, src, src2)) } +emit_machhwsuo_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_machhwsuo_r_r_r(dst, src, src2)) } inst_machhwsuo_dot_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .MACHHWSUO_DOT, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_machhwsuo_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_machhwsuo_dot_r_r_r(dst, src, src2)) } +emit_machhwsuo_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_machhwsuo_dot_r_r_r(dst, src, src2)) } inst_machhwso_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .MACHHWSO, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_machhwso_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_machhwso_r_r_r(dst, src, src2)) } +emit_machhwso_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_machhwso_r_r_r(dst, src, src2)) } inst_machhwso_dot_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .MACHHWSO_DOT, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_machhwso_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_machhwso_dot_r_r_r(dst, src, src2)) } +emit_machhwso_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_machhwso_dot_r_r_r(dst, src, src2)) } inst_nmachhwso_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .NMACHHWSO, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_nmachhwso_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_nmachhwso_r_r_r(dst, src, src2)) } +emit_nmachhwso_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_nmachhwso_r_r_r(dst, src, src2)) } inst_nmachhwso_dot_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .NMACHHWSO_DOT, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_nmachhwso_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_nmachhwso_dot_r_r_r(dst, src, src2)) } +emit_nmachhwso_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_nmachhwso_dot_r_r_r(dst, src, src2)) } inst_vsubuqm_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VSUBUQM, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_vsubuqm_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vsubuqm_r_r_r(dst, src, src2)) } +emit_vsubuqm_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vsubuqm_r_r_r(dst, src, src2)) } inst_vnot_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VNOT, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_vnot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vnot_r_r_r(dst, src, src2)) } +emit_vnot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vnot_r_r_r(dst, src, src2)) } inst_vgbbd_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VGBBD, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_vgbbd_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vgbbd_r_r_r(dst, src, src2)) } +emit_vgbbd_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vgbbd_r_r_r(dst, src, src2)) } inst_macchwuo_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .MACCHWUO, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_macchwuo_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_macchwuo_r_r_r(dst, src, src2)) } +emit_macchwuo_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_macchwuo_r_r_r(dst, src, src2)) } inst_macchwuo_dot_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .MACCHWUO_DOT, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_macchwuo_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_macchwuo_dot_r_r_r(dst, src, src2)) } +emit_macchwuo_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_macchwuo_dot_r_r_r(dst, src, src2)) } inst_macchwo_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .MACCHWO, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_macchwo_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_macchwo_r_r_r(dst, src, src2)) } +emit_macchwo_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_macchwo_r_r_r(dst, src, src2)) } inst_macchwo_dot_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .MACCHWO_DOT, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_macchwo_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_macchwo_dot_r_r_r(dst, src, src2)) } +emit_macchwo_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_macchwo_dot_r_r_r(dst, src, src2)) } inst_nmacchwo_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .NMACCHWO, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_nmacchwo_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_nmacchwo_r_r_r(dst, src, src2)) } +emit_nmacchwo_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_nmacchwo_r_r_r(dst, src, src2)) } inst_nmacchwo_dot_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .NMACCHWO_DOT, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_nmacchwo_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_nmacchwo_dot_r_r_r(dst, src, src2)) } +emit_nmacchwo_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_nmacchwo_dot_r_r_r(dst, src, src2)) } inst_macchwsuo_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .MACCHWSUO, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_macchwsuo_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_macchwsuo_r_r_r(dst, src, src2)) } +emit_macchwsuo_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_macchwsuo_r_r_r(dst, src, src2)) } inst_macchwsuo_dot_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .MACCHWSUO_DOT, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_macchwsuo_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_macchwsuo_dot_r_r_r(dst, src, src2)) } +emit_macchwsuo_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_macchwsuo_dot_r_r_r(dst, src, src2)) } inst_vcmpequq_dot_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VCMPEQUQ_DOT, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_vcmpequq_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vcmpequq_dot_r_r_r(dst, src, src2)) } +emit_vcmpequq_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vcmpequq_dot_r_r_r(dst, src, src2)) } inst_macchwso_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .MACCHWSO, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_macchwso_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_macchwso_r_r_r(dst, src, src2)) } +emit_macchwso_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_macchwso_r_r_r(dst, src, src2)) } inst_macchwso_dot_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .MACCHWSO_DOT, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_macchwso_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_macchwso_dot_r_r_r(dst, src, src2)) } +emit_macchwso_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_macchwso_dot_r_r_r(dst, src, src2)) } inst_nmacchwso_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .NMACCHWSO, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_nmacchwso_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_nmacchwso_r_r_r(dst, src, src2)) } +emit_nmacchwso_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_nmacchwso_r_r_r(dst, src, src2)) } inst_nmacchwso_dot_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .NMACCHWSO_DOT, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_nmacchwso_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_nmacchwso_dot_r_r_r(dst, src, src2)) } +emit_nmacchwso_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_nmacchwso_dot_r_r_r(dst, src, src2)) } inst_vcmpgtuq_dot_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VCMPGTUQ_DOT, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_vcmpgtuq_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vcmpgtuq_dot_r_r_r(dst, src, src2)) } +emit_vcmpgtuq_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vcmpgtuq_dot_r_r_r(dst, src, src2)) } inst_maclhwuo_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .MACLHWUO, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_maclhwuo_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_maclhwuo_r_r_r(dst, src, src2)) } +emit_maclhwuo_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_maclhwuo_r_r_r(dst, src, src2)) } inst_maclhwuo_dot_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .MACLHWUO_DOT, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_maclhwuo_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_maclhwuo_dot_r_r_r(dst, src, src2)) } +emit_maclhwuo_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_maclhwuo_dot_r_r_r(dst, src, src2)) } inst_maclhwo_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .MACLHWO, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_maclhwo_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_maclhwo_r_r_r(dst, src, src2)) } +emit_maclhwo_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_maclhwo_r_r_r(dst, src, src2)) } inst_maclhwo_dot_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .MACLHWO_DOT, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_maclhwo_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_maclhwo_dot_r_r_r(dst, src, src2)) } +emit_maclhwo_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_maclhwo_dot_r_r_r(dst, src, src2)) } inst_nmaclhwo_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .NMACLHWO, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_nmaclhwo_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_nmaclhwo_r_r_r(dst, src, src2)) } +emit_nmaclhwo_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_nmaclhwo_r_r_r(dst, src, src2)) } inst_nmaclhwo_dot_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .NMACLHWO_DOT, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_nmaclhwo_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_nmaclhwo_dot_r_r_r(dst, src, src2)) } +emit_nmaclhwo_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_nmaclhwo_dot_r_r_r(dst, src, src2)) } inst_vcmpgtsq_dot_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .VCMPGTSQ_DOT, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_vcmpgtsq_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_vcmpgtsq_dot_r_r_r(dst, src, src2)) } +emit_vcmpgtsq_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_vcmpgtsq_dot_r_r_r(dst, src, src2)) } inst_maclhwsuo_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .MACLHWSUO, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_maclhwsuo_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_maclhwsuo_r_r_r(dst, src, src2)) } +emit_maclhwsuo_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_maclhwsuo_r_r_r(dst, src, src2)) } inst_maclhwsuo_dot_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .MACLHWSUO_DOT, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_maclhwsuo_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_maclhwsuo_dot_r_r_r(dst, src, src2)) } +emit_maclhwsuo_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_maclhwsuo_dot_r_r_r(dst, src, src2)) } inst_maclhwso_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .MACLHWSO, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_maclhwso_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_maclhwso_r_r_r(dst, src, src2)) } +emit_maclhwso_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_maclhwso_r_r_r(dst, src, src2)) } inst_maclhwso_dot_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .MACLHWSO_DOT, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_maclhwso_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_maclhwso_dot_r_r_r(dst, src, src2)) } +emit_maclhwso_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_maclhwso_dot_r_r_r(dst, src, src2)) } inst_nmaclhwso_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .NMACLHWSO, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_nmaclhwso_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_nmaclhwso_r_r_r(dst, src, src2)) } +emit_nmaclhwso_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_nmaclhwso_r_r_r(dst, src, src2)) } inst_nmaclhwso_dot_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .NMACLHWSO_DOT, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_nmaclhwso_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_nmaclhwso_dot_r_r_r(dst, src, src2)) } +emit_nmaclhwso_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_nmaclhwso_dot_r_r_r(dst, src, src2)) } inst_dcbz_l_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .DCBZ_L, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_dcbz_l_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_dcbz_l_r_r_r(dst, src, src2)) } +emit_dcbz_l_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_dcbz_l_r_r_r(dst, src, src2)) } inst_muli_r_r_imm :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .MULI, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_imm(imm), {}}} } -emit_muli_r_r_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_muli_r_r_imm(dst, src, imm)) } +emit_muli_r_r_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_muli_r_r_imm(dst, src, imm)) } inst_sfi_r_r_imm :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .SFI, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_imm(imm), {}}} } -emit_sfi_r_r_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_sfi_r_r_imm(dst, src, imm)) } +emit_sfi_r_r_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_sfi_r_r_imm(dst, src, imm)) } inst_dozi_r_r_imm :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .DOZI, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_imm(imm), {}}} } -emit_dozi_r_r_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_dozi_r_r_imm(dst, src, imm)) } +emit_dozi_r_r_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_dozi_r_r_imm(dst, src, imm)) } inst_ai_r_r_imm :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .AI, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_imm(imm), {}}} } -emit_ai_r_r_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_ai_r_r_imm(dst, src, imm)) } +emit_ai_r_r_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_ai_r_r_imm(dst, src, imm)) } inst_subic_r_r_imm :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .SUBIC, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_imm(imm), {}}} } -emit_subic_r_r_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_subic_r_r_imm(dst, src, imm)) } +emit_subic_r_r_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_subic_r_r_imm(dst, src, imm)) } inst_ai_dot_r_r_imm :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .AI_DOT, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_imm(imm), {}}} } -emit_ai_dot_r_r_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_ai_dot_r_r_imm(dst, src, imm)) } +emit_ai_dot_r_r_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_ai_dot_r_r_imm(dst, src, imm)) } inst_subic_dot_r_r_imm :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .SUBIC_DOT, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_imm(imm), {}}} } -emit_subic_dot_r_r_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_subic_dot_r_r_imm(dst, src, imm)) } +emit_subic_dot_r_r_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_subic_dot_r_r_imm(dst, src, imm)) } inst_lil_r_r_imm :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .LIL, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_imm(imm), {}}} } -emit_lil_r_r_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_lil_r_r_imm(dst, src, imm)) } +emit_lil_r_r_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_lil_r_r_imm(dst, src, imm)) } inst_cal_r_r_imm :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .CAL, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_imm(imm), {}}} } -emit_cal_r_r_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_cal_r_r_imm(dst, src, imm)) } +emit_cal_r_r_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_cal_r_r_imm(dst, src, imm)) } inst_subi_r_r_imm :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .SUBI, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_imm(imm), {}}} } -emit_subi_r_r_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_subi_r_r_imm(dst, src, imm)) } +emit_subi_r_r_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_subi_r_r_imm(dst, src, imm)) } inst_liu_r_r_imm :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .LIU, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_imm(imm), {}}} } -emit_liu_r_r_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_liu_r_r_imm(dst, src, imm)) } +emit_liu_r_r_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_liu_r_r_imm(dst, src, imm)) } inst_cau_r_r_imm :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .CAU, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_imm(imm), {}}} } -emit_cau_r_r_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_cau_r_r_imm(dst, src, imm)) } +emit_cau_r_r_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_cau_r_r_imm(dst, src, imm)) } inst_subis_r_r_imm :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .SUBIS, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_imm(imm), {}}} } -emit_subis_r_r_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_subis_r_r_imm(dst, src, imm)) } +emit_subis_r_r_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_subis_r_r_imm(dst, src, imm)) } inst_crnot_r_r_imm :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .CRNOT, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_imm(imm), {}}} } -emit_crnot_r_r_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_crnot_r_r_imm(dst, src, imm)) } +emit_crnot_r_r_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_crnot_r_r_imm(dst, src, imm)) } inst_rfci_r_r_imm :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .RFCI, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_imm(imm), {}}} } -emit_rfci_r_r_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_rfci_r_r_imm(dst, src, imm)) } +emit_rfci_r_r_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_rfci_r_r_imm(dst, src, imm)) } inst_rfscv_r_r_imm :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .RFSCV, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_imm(imm), {}}} } -emit_rfscv_r_r_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_rfscv_r_r_imm(dst, src, imm)) } +emit_rfscv_r_r_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_rfscv_r_r_imm(dst, src, imm)) } inst_rfsvc_r_r_imm :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .RFSVC, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_imm(imm), {}}} } -emit_rfsvc_r_r_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_rfsvc_r_r_imm(dst, src, imm)) } +emit_rfsvc_r_r_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_rfsvc_r_r_imm(dst, src, imm)) } inst_rfgi_r_r_imm :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .RFGI, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_imm(imm), {}}} } -emit_rfgi_r_r_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_rfgi_r_r_imm(dst, src, imm)) } +emit_rfgi_r_r_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_rfgi_r_r_imm(dst, src, imm)) } inst_ics_r_r_imm :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .ICS, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_imm(imm), {}}} } -emit_ics_r_r_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_ics_r_r_imm(dst, src, imm)) } +emit_ics_r_r_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_ics_r_r_imm(dst, src, imm)) } inst_crclr_r_r_imm :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .CRCLR, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_imm(imm), {}}} } -emit_crclr_r_r_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_crclr_r_r_imm(dst, src, imm)) } +emit_crclr_r_r_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_crclr_r_r_imm(dst, src, imm)) } inst_dnh_r_r_imm :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .DNH, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_imm(imm), {}}} } -emit_dnh_r_r_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_dnh_r_r_imm(dst, src, imm)) } +emit_dnh_r_r_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_dnh_r_r_imm(dst, src, imm)) } inst_crset_r_r_imm :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .CRSET, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_imm(imm), {}}} } -emit_crset_r_r_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_crset_r_r_imm(dst, src, imm)) } +emit_crset_r_r_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_crset_r_r_imm(dst, src, imm)) } inst_urfid_r_r_imm :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .URFID, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_imm(imm), {}}} } -emit_urfid_r_r_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_urfid_r_r_imm(dst, src, imm)) } +emit_urfid_r_r_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_urfid_r_r_imm(dst, src, imm)) } inst_doze_r_r_imm :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .DOZE, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_imm(imm), {}}} } -emit_doze_r_r_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_doze_r_r_imm(dst, src, imm)) } +emit_doze_r_r_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_doze_r_r_imm(dst, src, imm)) } inst_crmove_r_r_imm :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .CRMOVE, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_imm(imm), {}}} } -emit_crmove_r_r_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_crmove_r_r_imm(dst, src, imm)) } +emit_crmove_r_r_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_crmove_r_r_imm(dst, src, imm)) } inst_sleep_r_r_imm :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .SLEEP, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_imm(imm), {}}} } -emit_sleep_r_r_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_sleep_r_r_imm(dst, src, imm)) } +emit_sleep_r_r_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_sleep_r_r_imm(dst, src, imm)) } inst_rvwinkle_r_r_imm :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .RVWINKLE, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_imm(imm), {}}} } -emit_rvwinkle_r_r_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_rvwinkle_r_r_imm(dst, src, imm)) } +emit_rvwinkle_r_r_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_rvwinkle_r_r_imm(dst, src, imm)) } inst_oril_r_r_imm :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .ORIL, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_imm(imm), {}}} } -emit_oril_r_r_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_oril_r_r_imm(dst, src, imm)) } +emit_oril_r_r_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_oril_r_r_imm(dst, src, imm)) } inst_oriu_r_r_imm :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .ORIU, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_imm(imm), {}}} } -emit_oriu_r_r_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_oriu_r_r_imm(dst, src, imm)) } +emit_oriu_r_r_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_oriu_r_r_imm(dst, src, imm)) } inst_xoril_r_r_imm :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .XORIL, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_imm(imm), {}}} } -emit_xoril_r_r_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_xoril_r_r_imm(dst, src, imm)) } +emit_xoril_r_r_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_xoril_r_r_imm(dst, src, imm)) } inst_xoriu_r_r_imm :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .XORIU, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_imm(imm), {}}} } -emit_xoriu_r_r_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_xoriu_r_r_imm(dst, src, imm)) } +emit_xoriu_r_r_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_xoriu_r_r_imm(dst, src, imm)) } inst_andil_dot_r_r_imm :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .ANDIL_DOT, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_imm(imm), {}}} } -emit_andil_dot_r_r_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_andil_dot_r_r_imm(dst, src, imm)) } +emit_andil_dot_r_r_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_andil_dot_r_r_imm(dst, src, imm)) } inst_andiu_dot_r_r_imm :: #force_inline proc "contextless" (dst: Register, src: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .ANDIU_DOT, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_imm(imm), {}}} } -emit_andiu_dot_r_r_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append(instructions, inst_andiu_dot_r_r_imm(dst, src, imm)) } +emit_andiu_dot_r_r_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, imm: i64) { append_elem(instructions, inst_andiu_dot_r_r_imm(dst, src, imm)) } inst_rotldi_dot_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .ROTLDI_DOT, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_rotldi_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_rotldi_dot_r_r_r(dst, src, src2)) } +emit_rotldi_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_rotldi_dot_r_r_r(dst, src, src2)) } inst_rotrdi_dot_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .ROTRDI_DOT, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_rotrdi_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_rotrdi_dot_r_r_r(dst, src, src2)) } +emit_rotrdi_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_rotrdi_dot_r_r_r(dst, src, src2)) } inst_clrldi_dot_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .CLRLDI_DOT, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_clrldi_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_clrldi_dot_r_r_r(dst, src, src2)) } +emit_clrldi_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_clrldi_dot_r_r_r(dst, src, src2)) } inst_srdi_dot_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .SRDI_DOT, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_srdi_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_srdi_dot_r_r_r(dst, src, src2)) } +emit_srdi_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_srdi_dot_r_r_r(dst, src, src2)) } inst_extrdi_dot_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EXTRDI_DOT, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_extrdi_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_extrdi_dot_r_r_r(dst, src, src2)) } +emit_extrdi_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_extrdi_dot_r_r_r(dst, src, src2)) } inst_clrrdi_dot_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .CLRRDI_DOT, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_clrrdi_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_clrrdi_dot_r_r_r(dst, src, src2)) } +emit_clrrdi_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_clrrdi_dot_r_r_r(dst, src, src2)) } inst_sldi_dot_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .SLDI_DOT, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_sldi_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_sldi_dot_r_r_r(dst, src, src2)) } +emit_sldi_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_sldi_dot_r_r_r(dst, src, src2)) } inst_extldi_dot_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EXTLDI_DOT, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_extldi_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_extldi_dot_r_r_r(dst, src, src2)) } +emit_extldi_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_extldi_dot_r_r_r(dst, src, src2)) } inst_clrlsldi_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .CLRLSLDI, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_clrlsldi_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_clrlsldi_r_r_r(dst, src, src2)) } +emit_clrlsldi_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_clrlsldi_r_r_r(dst, src, src2)) } inst_clrlsldi_dot_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .CLRLSLDI_DOT, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_clrlsldi_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_clrlsldi_dot_r_r_r(dst, src, src2)) } +emit_clrlsldi_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_clrlsldi_dot_r_r_r(dst, src, src2)) } inst_insrdi_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .INSRDI, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_insrdi_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_insrdi_r_r_r(dst, src, src2)) } +emit_insrdi_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_insrdi_r_r_r(dst, src, src2)) } inst_insrdi_dot_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .INSRDI_DOT, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_insrdi_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_insrdi_dot_r_r_r(dst, src, src2)) } +emit_insrdi_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_insrdi_dot_r_r_r(dst, src, src2)) } inst_rotld_dot_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .ROTLD_DOT, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_rotld_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_rotld_dot_r_r_r(dst, src, src2)) } +emit_rotld_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_rotld_dot_r_r_r(dst, src, src2)) } inst_t_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .T, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_t_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_t_r_r_r(dst, src, src2)) } +emit_t_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_t_r_r_r(dst, src, src2)) } inst_sf_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .SF, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_sf_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_sf_r_r_r(dst, src, src2)) } +emit_sf_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_sf_r_r_r(dst, src, src2)) } inst_sf_dot_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .SF_DOT, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_sf_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_sf_dot_r_r_r(dst, src, src2)) } +emit_sf_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_sf_dot_r_r_r(dst, src, src2)) } inst_a_dot_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .A_DOT, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_a_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_a_dot_r_r_r(dst, src, src2)) } +emit_a_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_a_dot_r_r_r(dst, src, src2)) } inst_lx_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .LX, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_lx_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_lx_r_r_r(dst, src, src2)) } +emit_lx_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_lx_r_r_r(dst, src, src2)) } inst_sl_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .SL, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_sl_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_sl_r_r_r(dst, src, src2)) } +emit_sl_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_sl_r_r_r(dst, src, src2)) } inst_sl_dot_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .SL_DOT, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_sl_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_sl_dot_r_r_r(dst, src, src2)) } +emit_sl_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_sl_dot_r_r_r(dst, src, src2)) } inst_cntlz_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .CNTLZ, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_cntlz_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_cntlz_r_r_r(dst, src, src2)) } +emit_cntlz_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_cntlz_r_r_r(dst, src, src2)) } inst_cntlz_dot_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .CNTLZ_DOT, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_cntlz_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_cntlz_dot_r_r_r(dst, src, src2)) } +emit_cntlz_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_cntlz_dot_r_r_r(dst, src, src2)) } inst_maskg_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .MASKG, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_maskg_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_maskg_r_r_r(dst, src, src2)) } +emit_maskg_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_maskg_r_r_r(dst, src, src2)) } inst_maskg_dot_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .MASKG_DOT, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_maskg_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_maskg_dot_r_r_r(dst, src, src2)) } +emit_maskg_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_maskg_dot_r_r_r(dst, src, src2)) } inst_ldepx_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .LDEPX, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_ldepx_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_ldepx_r_r_r(dst, src, src2)) } +emit_ldepx_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_ldepx_r_r_r(dst, src, src2)) } inst_waitasec_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .WAITASEC, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_waitasec_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_waitasec_r_r_r(dst, src, src2)) } +emit_waitasec_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_waitasec_r_r_r(dst, src, src2)) } inst_mviwsplt_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .MVIWSPLT, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_mviwsplt_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_mviwsplt_r_r_r(dst, src, src2)) } +emit_mviwsplt_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_mviwsplt_r_r_r(dst, src, src2)) } inst_mfvsrd_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .MFVSRD, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_mfvsrd_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_mfvsrd_r_r_r(dst, src, src2)) } +emit_mfvsrd_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_mfvsrd_r_r_r(dst, src, src2)) } inst_eratilx_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .ERATILX, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_eratilx_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_eratilx_r_r_r(dst, src, src2)) } +emit_eratilx_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_eratilx_r_r_r(dst, src, src2)) } inst_lux_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .LUX, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_lux_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_lux_r_r_r(dst, src, src2)) } +emit_lux_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_lux_r_r_r(dst, src, src2)) } inst_subwus_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .SUBWUS, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_subwus_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_subwus_r_r_r(dst, src, src2)) } +emit_subwus_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_subwus_r_r_r(dst, src, src2)) } inst_subwus_dot_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .SUBWUS_DOT, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_subwus_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_subwus_dot_r_r_r(dst, src, src2)) } +emit_subwus_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_subwus_dot_r_r_r(dst, src, src2)) } inst_subdus_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .SUBDUS, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_subdus_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_subdus_r_r_r(dst, src, src2)) } +emit_subdus_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_subdus_r_r_r(dst, src, src2)) } inst_subdus_dot_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .SUBDUS_DOT, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_subdus_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_subdus_dot_r_r_r(dst, src, src2)) } +emit_subdus_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_subdus_dot_r_r_r(dst, src, src2)) } inst_subfus_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .SUBFUS, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_subfus_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_subfus_r_r_r(dst, src, src2)) } +emit_subfus_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_subfus_r_r_r(dst, src, src2)) } inst_subfus_dot_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .SUBFUS_DOT, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_subfus_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_subfus_dot_r_r_r(dst, src, src2)) } +emit_subfus_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_subfus_dot_r_r_r(dst, src, src2)) } inst_dlmzb_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .DLMZB, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_dlmzb_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_dlmzb_r_r_r(dst, src, src2)) } +emit_dlmzb_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_dlmzb_r_r_r(dst, src, src2)) } inst_dlmzb_dot_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .DLMZB_DOT, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_dlmzb_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_dlmzb_dot_r_r_r(dst, src, src2)) } +emit_dlmzb_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_dlmzb_dot_r_r_r(dst, src, src2)) } inst_dni_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .DNI, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_dni_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_dni_r_r_r(dst, src, src2)) } +emit_dni_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_dni_r_r_r(dst, src, src2)) } inst_mul_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .MUL, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_mul_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_mul_r_r_r(dst, src, src2)) } +emit_mul_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_mul_r_r_r(dst, src, src2)) } inst_mul_dot_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .MUL_DOT, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_mul_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_mul_dot_r_r_r(dst, src, src2)) } +emit_mul_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_mul_dot_r_r_r(dst, src, src2)) } inst_mvidsplt_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .MVIDSPLT, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_mvidsplt_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_mvidsplt_r_r_r(dst, src, src2)) } +emit_mvidsplt_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_mvidsplt_r_r_r(dst, src, src2)) } inst_mtsrdin_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .MTSRDIN, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_mtsrdin_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_mtsrdin_r_r_r(dst, src, src2)) } +emit_mtsrdin_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_mtsrdin_r_r_r(dst, src, src2)) } inst_mfvsrwz_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .MFVSRWZ, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_mfvsrwz_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_mfvsrwz_r_r_r(dst, src, src2)) } +emit_mfvsrwz_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_mfvsrwz_r_r_r(dst, src, src2)) } inst_clf_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .CLF, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_clf_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_clf_r_r_r(dst, src, src2)) } +emit_clf_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_clf_r_r_r(dst, src, src2)) } inst_dcbtstls_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .DCBTSTLS, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_dcbtstls_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_dcbtstls_r_r_r(dst, src, src2)) } +emit_dcbtstls_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_dcbtstls_r_r_r(dst, src, src2)) } inst_sfe_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .SFE, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_sfe_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_sfe_r_r_r(dst, src, src2)) } +emit_sfe_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_sfe_r_r_r(dst, src, src2)) } inst_sfe_dot_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .SFE_DOT, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_sfe_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_sfe_dot_r_r_r(dst, src, src2)) } +emit_sfe_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_sfe_dot_r_r_r(dst, src, src2)) } inst_ae_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .AE, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_ae_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_ae_r_r_r(dst, src, src2)) } +emit_ae_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_ae_r_r_r(dst, src, src2)) } inst_ae_dot_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .AE_DOT, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_ae_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_ae_dot_r_r_r(dst, src, src2)) } +emit_ae_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_ae_dot_r_r_r(dst, src, src2)) } inst_dcbtstlse_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .DCBTSTLSE, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_dcbtstlse_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_dcbtstlse_r_r_r(dst, src, src2)) } +emit_dcbtstlse_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_dcbtstlse_r_r_r(dst, src, src2)) } inst_mtsle_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .MTSLE, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_mtsle_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_mtsle_r_r_r(dst, src, src2)) } +emit_mtsle_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_mtsle_r_r_r(dst, src, src2)) } inst_eratsx_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .ERATSX, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_eratsx_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_eratsx_r_r_r(dst, src, src2)) } +emit_eratsx_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_eratsx_r_r_r(dst, src, src2)) } inst_eratsx_dot_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .ERATSX_DOT, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_eratsx_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_eratsx_dot_r_r_r(dst, src, src2)) } +emit_eratsx_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_eratsx_dot_r_r_r(dst, src, src2)) } inst_stx_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .STX, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_stx_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_stx_r_r_r(dst, src, src2)) } +emit_stx_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_stx_r_r_r(dst, src, src2)) } inst_slq_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .SLQ, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_slq_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_slq_r_r_r(dst, src, src2)) } +emit_slq_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_slq_r_r_r(dst, src, src2)) } inst_slq_dot_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .SLQ_DOT, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_slq_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_slq_dot_r_r_r(dst, src, src2)) } +emit_slq_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_slq_dot_r_r_r(dst, src, src2)) } inst_sle_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .SLE, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_sle_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_sle_r_r_r(dst, src, src2)) } +emit_sle_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_sle_r_r_r(dst, src, src2)) } inst_sle_dot_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .SLE_DOT, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_sle_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_sle_dot_r_r_r(dst, src, src2)) } +emit_sle_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_sle_dot_r_r_r(dst, src, src2)) } inst_stdepx_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .STDEPX, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_stdepx_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_stdepx_r_r_r(dst, src, src2)) } +emit_stdepx_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_stdepx_r_r_r(dst, src, src2)) } inst_dcbtls_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .DCBTLS, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_dcbtls_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_dcbtls_r_r_r(dst, src, src2)) } +emit_dcbtls_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_dcbtls_r_r_r(dst, src, src2)) } inst_dcbtlse_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .DCBTLSE, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_dcbtlse_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_dcbtlse_r_r_r(dst, src, src2)) } +emit_dcbtlse_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_dcbtlse_r_r_r(dst, src, src2)) } inst_mtvsrd_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .MTVSRD, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_mtvsrd_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_mtvsrd_r_r_r(dst, src, src2)) } +emit_mtvsrd_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_mtvsrd_r_r_r(dst, src, src2)) } inst_eratre_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .ERATRE, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_eratre_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_eratre_r_r_r(dst, src, src2)) } +emit_eratre_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_eratre_r_r_r(dst, src, src2)) } inst_wchkall_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .WCHKALL, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_wchkall_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_wchkall_r_r_r(dst, src, src2)) } +emit_wchkall_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_wchkall_r_r_r(dst, src, src2)) } inst_stux_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .STUX, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_stux_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_stux_r_r_r(dst, src, src2)) } +emit_stux_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_stux_r_r_r(dst, src, src2)) } inst_sliq_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .SLIQ, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_sliq_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_sliq_r_r_r(dst, src, src2)) } +emit_sliq_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_sliq_r_r_r(dst, src, src2)) } inst_sliq_dot_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .SLIQ_DOT, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_sliq_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_sliq_dot_r_r_r(dst, src, src2)) } +emit_sliq_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_sliq_dot_r_r_r(dst, src, src2)) } inst_icblq_dot_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .ICBLQ_DOT, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_icblq_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_icblq_dot_r_r_r(dst, src, src2)) } +emit_icblq_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_icblq_dot_r_r_r(dst, src, src2)) } inst_sfze_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .SFZE, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_sfze_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_sfze_r_r_r(dst, src, src2)) } +emit_sfze_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_sfze_r_r_r(dst, src, src2)) } inst_sfze_dot_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .SFZE_DOT, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_sfze_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_sfze_dot_r_r_r(dst, src, src2)) } +emit_sfze_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_sfze_dot_r_r_r(dst, src, src2)) } inst_aze_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .AZE, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_aze_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_aze_r_r_r(dst, src, src2)) } +emit_aze_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_aze_r_r_r(dst, src, src2)) } inst_aze_dot_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .AZE_DOT, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_aze_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_aze_dot_r_r_r(dst, src, src2)) } +emit_aze_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_aze_dot_r_r_r(dst, src, src2)) } inst_mtvsrwa_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .MTVSRWA, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_mtvsrwa_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_mtvsrwa_r_r_r(dst, src, src2)) } +emit_mtvsrwa_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_mtvsrwa_r_r_r(dst, src, src2)) } inst_eratwe_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .ERATWE, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_eratwe_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_eratwe_r_r_r(dst, src, src2)) } +emit_eratwe_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_eratwe_r_r_r(dst, src, src2)) } inst_ldawx_dot_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .LDAWX_DOT, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_ldawx_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_ldawx_dot_r_r_r(dst, src, src2)) } +emit_ldawx_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_ldawx_dot_r_r_r(dst, src, src2)) } inst_sllq_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .SLLQ, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_sllq_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_sllq_r_r_r(dst, src, src2)) } +emit_sllq_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_sllq_r_r_r(dst, src, src2)) } inst_sllq_dot_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .SLLQ_DOT, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_sllq_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_sllq_dot_r_r_r(dst, src, src2)) } +emit_sllq_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_sllq_dot_r_r_r(dst, src, src2)) } inst_sleq_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .SLEQ, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_sleq_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_sleq_r_r_r(dst, src, src2)) } +emit_sleq_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_sleq_r_r_r(dst, src, src2)) } inst_sleq_dot_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .SLEQ_DOT, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_sleq_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_sleq_dot_r_r_r(dst, src, src2)) } +emit_sleq_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_sleq_dot_r_r_r(dst, src, src2)) } inst_sfme_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .SFME, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_sfme_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_sfme_r_r_r(dst, src, src2)) } +emit_sfme_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_sfme_r_r_r(dst, src, src2)) } inst_sfme_dot_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .SFME_DOT, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_sfme_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_sfme_dot_r_r_r(dst, src, src2)) } +emit_sfme_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_sfme_dot_r_r_r(dst, src, src2)) } inst_ame_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .AME, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_ame_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_ame_r_r_r(dst, src, src2)) } +emit_ame_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_ame_r_r_r(dst, src, src2)) } inst_ame_dot_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .AME_DOT, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_ame_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_ame_dot_r_r_r(dst, src, src2)) } +emit_ame_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_ame_dot_r_r_r(dst, src, src2)) } inst_muls_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .MULS, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_muls_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_muls_r_r_r(dst, src, src2)) } +emit_muls_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_muls_r_r_r(dst, src, src2)) } inst_muls_dot_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .MULS_DOT, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_muls_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_muls_dot_r_r_r(dst, src, src2)) } +emit_muls_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_muls_dot_r_r_r(dst, src, src2)) } inst_icblce_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .ICBLCE, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_icblce_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_icblce_r_r_r(dst, src, src2)) } +emit_icblce_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_icblce_r_r_r(dst, src, src2)) } inst_mtsri_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .MTSRI, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_mtsri_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_mtsri_r_r_r(dst, src, src2)) } +emit_mtsri_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_mtsri_r_r_r(dst, src, src2)) } inst_mtvsrwz_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .MTVSRWZ, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_mtvsrwz_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_mtvsrwz_r_r_r(dst, src, src2)) } +emit_mtvsrwz_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_mtvsrwz_r_r_r(dst, src, src2)) } inst_dcbtstct_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .DCBTSTCT, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_dcbtstct_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_dcbtstct_r_r_r(dst, src, src2)) } +emit_dcbtstct_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_dcbtstct_r_r_r(dst, src, src2)) } inst_dcbtstds_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .DCBTSTDS, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_dcbtstds_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_dcbtstds_r_r_r(dst, src, src2)) } +emit_dcbtstds_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_dcbtstds_r_r_r(dst, src, src2)) } inst_slliq_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .SLLIQ, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_slliq_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_slliq_r_r_r(dst, src, src2)) } +emit_slliq_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_slliq_r_r_r(dst, src, src2)) } inst_slliq_dot_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .SLLIQ_DOT, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_slliq_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_slliq_dot_r_r_r(dst, src, src2)) } +emit_slliq_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_slliq_dot_r_r_r(dst, src, src2)) } inst_mfdcrx_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .MFDCRX, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_mfdcrx_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_mfdcrx_r_r_r(dst, src, src2)) } +emit_mfdcrx_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_mfdcrx_r_r_r(dst, src, src2)) } inst_mfdcrx_dot_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .MFDCRX_DOT, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_mfdcrx_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_mfdcrx_dot_r_r_r(dst, src, src2)) } +emit_mfdcrx_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_mfdcrx_dot_r_r_r(dst, src, src2)) } inst_lvexbx_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .LVEXBX, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_lvexbx_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_lvexbx_r_r_r(dst, src, src2)) } +emit_lvexbx_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_lvexbx_r_r_r(dst, src, src2)) } inst_lvepxl_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .LVEPXL, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_lvepxl_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_lvepxl_r_r_r(dst, src, src2)) } +emit_lvepxl_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_lvepxl_r_r_r(dst, src, src2)) } inst_doz_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .DOZ, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_doz_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_doz_r_r_r(dst, src, src2)) } +emit_doz_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_doz_r_r_r(dst, src, src2)) } inst_doz_dot_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .DOZ_DOT, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_doz_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_doz_dot_r_r_r(dst, src, src2)) } +emit_doz_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_doz_dot_r_r_r(dst, src, src2)) } inst_cax_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .CAX, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_cax_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_cax_r_r_r(dst, src, src2)) } +emit_cax_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_cax_r_r_r(dst, src, src2)) } inst_cax_dot_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .CAX_DOT, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_cax_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_cax_dot_r_r_r(dst, src, src2)) } +emit_cax_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_cax_dot_r_r_r(dst, src, src2)) } inst_ehpriv_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EHPRIV, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_ehpriv_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_ehpriv_r_r_r(dst, src, src2)) } +emit_ehpriv_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_ehpriv_r_r_r(dst, src, src2)) } inst_mfapidi_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .MFAPIDI, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_mfapidi_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_mfapidi_r_r_r(dst, src, src2)) } +emit_mfapidi_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_mfapidi_r_r_r(dst, src, src2)) } inst_lscbx_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .LSCBX, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_lscbx_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_lscbx_r_r_r(dst, src, src2)) } +emit_lscbx_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_lscbx_r_r_r(dst, src, src2)) } inst_lscbx_dot_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .LSCBX_DOT, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_lscbx_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_lscbx_dot_r_r_r(dst, src, src2)) } +emit_lscbx_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_lscbx_dot_r_r_r(dst, src, src2)) } inst_dcbtct_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .DCBTCT, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_dcbtct_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_dcbtct_r_r_r(dst, src, src2)) } +emit_dcbtct_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_dcbtct_r_r_r(dst, src, src2)) } inst_dcbtds_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .DCBTDS, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_dcbtds_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_dcbtds_r_r_r(dst, src, src2)) } +emit_dcbtds_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_dcbtds_r_r_r(dst, src, src2)) } inst_mfdcrux_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .MFDCRUX, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_mfdcrux_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_mfdcrux_r_r_r(dst, src, src2)) } +emit_mfdcrux_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_mfdcrux_r_r_r(dst, src, src2)) } inst_lvexhx_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .LVEXHX, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_lvexhx_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_lvexhx_r_r_r(dst, src, src2)) } +emit_lvexhx_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_lvexhx_r_r_r(dst, src, src2)) } inst_lvepx_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .LVEPX, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_lvepx_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_lvepx_r_r_r(dst, src, src2)) } +emit_lvepx_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_lvepx_r_r_r(dst, src, src2)) } inst_mfbhrbe_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .MFBHRBE, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_mfbhrbe_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_mfbhrbe_r_r_r(dst, src, src2)) } +emit_mfbhrbe_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_mfbhrbe_r_r_r(dst, src, src2)) } inst_tlbi_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .TLBI, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_tlbi_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_tlbi_r_r_r(dst, src, src2)) } +emit_tlbi_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_tlbi_r_r_r(dst, src, src2)) } inst_eciwx_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .ECIWX, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_eciwx_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_eciwx_r_r_r(dst, src, src2)) } +emit_eciwx_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_eciwx_r_r_r(dst, src, src2)) } inst_mfdcr_dot_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .MFDCR_DOT, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_mfdcr_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_mfdcr_dot_r_r_r(dst, src, src2)) } +emit_mfdcr_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_mfdcr_dot_r_r_r(dst, src, src2)) } inst_lvexwx_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .LVEXWX, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_lvexwx_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_lvexwx_r_r_r(dst, src, src2)) } +emit_lvexwx_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_lvexwx_r_r_r(dst, src, src2)) } inst_dcread_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .DCREAD, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_dcread_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_dcread_r_r_r(dst, src, src2)) } +emit_dcread_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_dcread_r_r_r(dst, src, src2)) } inst_div_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .DIV, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_div_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_div_r_r_r(dst, src, src2)) } +emit_div_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_div_r_r_r(dst, src, src2)) } inst_div_dot_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .DIV_DOT, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_div_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_div_dot_r_r_r(dst, src, src2)) } +emit_div_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_div_dot_r_r_r(dst, src, src2)) } inst_mftmr_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .MFTMR, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_mftmr_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_mftmr_r_r_r(dst, src, src2)) } +emit_mftmr_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_mftmr_r_r_r(dst, src, src2)) } inst_abs_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .ABS, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_abs_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_abs_r_r_r(dst, src, src2)) } +emit_abs_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_abs_r_r_r(dst, src, src2)) } inst_abs_dot_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .ABS_DOT, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_abs_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_abs_dot_r_r_r(dst, src, src2)) } +emit_abs_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_abs_dot_r_r_r(dst, src, src2)) } inst_divs_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .DIVS, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_divs_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_divs_r_r_r(dst, src, src2)) } +emit_divs_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_divs_r_r_r(dst, src, src2)) } inst_divs_dot_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .DIVS_DOT, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_divs_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_divs_dot_r_r_r(dst, src, src2)) } +emit_divs_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_divs_dot_r_r_r(dst, src, src2)) } inst_lxvwsx_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .LXVWSX, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_lxvwsx_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_lxvwsx_r_r_r(dst, src, src2)) } +emit_lxvwsx_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_lxvwsx_r_r_r(dst, src, src2)) } inst_tlbia_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .TLBIA, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_tlbia_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_tlbia_r_r_r(dst, src, src2)) } +emit_tlbia_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_tlbia_r_r_r(dst, src, src2)) } inst_setbc_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .SETBC, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_setbc_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_setbc_r_r_r(dst, src, src2)) } +emit_setbc_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_setbc_r_r_r(dst, src, src2)) } inst_mtdcrx_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .MTDCRX, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_mtdcrx_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_mtdcrx_r_r_r(dst, src, src2)) } +emit_mtdcrx_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_mtdcrx_r_r_r(dst, src, src2)) } inst_mtdcrx_dot_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .MTDCRX_DOT, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_mtdcrx_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_mtdcrx_dot_r_r_r(dst, src, src2)) } +emit_mtdcrx_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_mtdcrx_dot_r_r_r(dst, src, src2)) } inst_stvexbx_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .STVEXBX, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_stvexbx_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_stvexbx_r_r_r(dst, src, src2)) } +emit_stvexbx_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_stvexbx_r_r_r(dst, src, src2)) } inst_dcblc_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .DCBLC, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_dcblc_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_dcblc_r_r_r(dst, src, src2)) } +emit_dcblc_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_dcblc_r_r_r(dst, src, src2)) } inst_dcblce_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .DCBLCE, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_dcblce_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_dcblce_r_r_r(dst, src, src2)) } +emit_dcblce_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_dcblce_r_r_r(dst, src, src2)) } inst_pbt_dot_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .PBT_DOT, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_pbt_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_pbt_dot_r_r_r(dst, src, src2)) } +emit_pbt_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_pbt_dot_r_r_r(dst, src, src2)) } inst_icswx_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .ICSWX, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_icswx_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_icswx_r_r_r(dst, src, src2)) } +emit_icswx_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_icswx_r_r_r(dst, src, src2)) } inst_icswx_dot_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .ICSWX_DOT, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_icswx_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_icswx_dot_r_r_r(dst, src, src2)) } +emit_icswx_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_icswx_dot_r_r_r(dst, src, src2)) } inst_setbcr_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .SETBCR, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_setbcr_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_setbcr_r_r_r(dst, src, src2)) } +emit_setbcr_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_setbcr_r_r_r(dst, src, src2)) } inst_mtdcrux_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .MTDCRUX, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_mtdcrux_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_mtdcrux_r_r_r(dst, src, src2)) } +emit_mtdcrux_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_mtdcrux_r_r_r(dst, src, src2)) } inst_stvexhx_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .STVEXHX, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_stvexhx_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_stvexhx_r_r_r(dst, src, src2)) } +emit_stvexhx_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_stvexhx_r_r_r(dst, src, src2)) } inst_dcblq_dot_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .DCBLQ_DOT, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_dcblq_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_dcblq_dot_r_r_r(dst, src, src2)) } +emit_dcblq_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_dcblq_dot_r_r_r(dst, src, src2)) } inst_clrbhrb_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .CLRBHRB, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_clrbhrb_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_clrbhrb_r_r_r(dst, src, src2)) } +emit_clrbhrb_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_clrbhrb_r_r_r(dst, src, src2)) } inst_ecowx_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .ECOWX, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_ecowx_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_ecowx_r_r_r(dst, src, src2)) } +emit_ecowx_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_ecowx_r_r_r(dst, src, src2)) } inst_setnbc_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .SETNBC, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_setnbc_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_setnbc_r_r_r(dst, src, src2)) } +emit_setnbc_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_setnbc_r_r_r(dst, src, src2)) } inst_mtdcr_dot_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .MTDCR_DOT, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_mtdcr_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_mtdcr_dot_r_r_r(dst, src, src2)) } +emit_mtdcr_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_mtdcr_dot_r_r_r(dst, src, src2)) } inst_stvexwx_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .STVEXWX, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_stvexwx_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_stvexwx_r_r_r(dst, src, src2)) } +emit_stvexwx_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_stvexwx_r_r_r(dst, src, src2)) } inst_dci_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .DCI, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_dci_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_dci_r_r_r(dst, src, src2)) } +emit_dci_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_dci_r_r_r(dst, src, src2)) } inst_mttmr_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .MTTMR, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_mttmr_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_mttmr_r_r_r(dst, src, src2)) } +emit_mttmr_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_mttmr_r_r_r(dst, src, src2)) } inst_setnbcr_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .SETNBCR, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_setnbcr_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_setnbcr_r_r_r(dst, src, src2)) } +emit_setnbcr_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_setnbcr_r_r_r(dst, src, src2)) } inst_dsn_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .DSN, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_dsn_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_dsn_r_r_r(dst, src, src2)) } +emit_dsn_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_dsn_r_r_r(dst, src, src2)) } inst_nabs_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .NABS, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_nabs_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_nabs_r_r_r(dst, src, src2)) } +emit_nabs_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_nabs_r_r_r(dst, src, src2)) } inst_nabs_dot_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .NABS_DOT, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_nabs_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_nabs_dot_r_r_r(dst, src, src2)) } +emit_nabs_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_nabs_dot_r_r_r(dst, src, src2)) } inst_icbtlse_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .ICBTLSE, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_icbtlse_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_icbtlse_r_r_r(dst, src, src2)) } +emit_icbtlse_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_icbtlse_r_r_r(dst, src, src2)) } inst_cli_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .CLI, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_cli_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_cli_r_r_r(dst, src, src2)) } +emit_cli_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_cli_r_r_r(dst, src, src2)) } inst_mcrxr_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .MCRXR, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_mcrxr_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_mcrxr_r_r_r(dst, src, src2)) } +emit_mcrxr_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_mcrxr_r_r_r(dst, src, src2)) } inst_lbdcbx_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .LBDCBX, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_lbdcbx_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_lbdcbx_r_r_r(dst, src, src2)) } +emit_lbdcbx_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_lbdcbx_r_r_r(dst, src, src2)) } inst_lbdx_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .LBDX, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_lbdx_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_lbdx_r_r_r(dst, src, src2)) } +emit_lbdx_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_lbdx_r_r_r(dst, src, src2)) } inst_bblels_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .BBLELS, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_bblels_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_bblels_r_r_r(dst, src, src2)) } +emit_bblels_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_bblels_r_r_r(dst, src, src2)) } inst_lvlx_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .LVLX, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_lvlx_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_lvlx_r_r_r(dst, src, src2)) } +emit_lvlx_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_lvlx_r_r_r(dst, src, src2)) } inst_subfco_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .SUBFCO, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_subfco_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_subfco_r_r_r(dst, src, src2)) } +emit_subfco_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_subfco_r_r_r(dst, src, src2)) } inst_sfo_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .SFO, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_sfo_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_sfo_r_r_r(dst, src, src2)) } +emit_sfo_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_sfo_r_r_r(dst, src, src2)) } inst_subco_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .SUBCO, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_subco_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_subco_r_r_r(dst, src, src2)) } +emit_subco_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_subco_r_r_r(dst, src, src2)) } inst_subfco_dot_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .SUBFCO_DOT, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_subfco_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_subfco_dot_r_r_r(dst, src, src2)) } +emit_subfco_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_subfco_dot_r_r_r(dst, src, src2)) } inst_sfo_dot_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .SFO_DOT, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_sfo_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_sfo_dot_r_r_r(dst, src, src2)) } +emit_sfo_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_sfo_dot_r_r_r(dst, src, src2)) } inst_subco_dot_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .SUBCO_DOT, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_subco_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_subco_dot_r_r_r(dst, src, src2)) } +emit_subco_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_subco_dot_r_r_r(dst, src, src2)) } inst_addco_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .ADDCO, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_addco_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_addco_r_r_r(dst, src, src2)) } +emit_addco_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_addco_r_r_r(dst, src, src2)) } inst_ao_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .AO, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_ao_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_ao_r_r_r(dst, src, src2)) } +emit_ao_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_ao_r_r_r(dst, src, src2)) } inst_addco_dot_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .ADDCO_DOT, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_addco_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_addco_dot_r_r_r(dst, src, src2)) } +emit_addco_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_addco_dot_r_r_r(dst, src, src2)) } inst_ao_dot_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .AO_DOT, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_ao_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_ao_dot_r_r_r(dst, src, src2)) } +emit_ao_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_ao_dot_r_r_r(dst, src, src2)) } inst_clcs_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .CLCS, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_clcs_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_clcs_r_r_r(dst, src, src2)) } +emit_clcs_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_clcs_r_r_r(dst, src, src2)) } inst_lsx_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .LSX, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_lsx_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_lsx_r_r_r(dst, src, src2)) } +emit_lsx_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_lsx_r_r_r(dst, src, src2)) } inst_lbrx_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .LBRX, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_lbrx_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_lbrx_r_r_r(dst, src, src2)) } +emit_lbrx_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_lbrx_r_r_r(dst, src, src2)) } inst_sr_dot_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .SR_DOT, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_sr_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_sr_dot_r_r_r(dst, src, src2)) } +emit_sr_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_sr_dot_r_r_r(dst, src, src2)) } inst_rrib_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .RRIB, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_rrib_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_rrib_r_r_r(dst, src, src2)) } +emit_rrib_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_rrib_r_r_r(dst, src, src2)) } inst_rrib_dot_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .RRIB_DOT, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_rrib_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_rrib_dot_r_r_r(dst, src, src2)) } +emit_rrib_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_rrib_dot_r_r_r(dst, src, src2)) } inst_maskir_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .MASKIR, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_maskir_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_maskir_r_r_r(dst, src, src2)) } +emit_maskir_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_maskir_r_r_r(dst, src, src2)) } inst_maskir_dot_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .MASKIR_DOT, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_maskir_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_maskir_dot_r_r_r(dst, src, src2)) } +emit_maskir_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_maskir_dot_r_r_r(dst, src, src2)) } inst_lhdcbx_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .LHDCBX, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_lhdcbx_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_lhdcbx_r_r_r(dst, src, src2)) } +emit_lhdcbx_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_lhdcbx_r_r_r(dst, src, src2)) } inst_lhdx_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .LHDX, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_lhdx_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_lhdx_r_r_r(dst, src, src2)) } +emit_lhdx_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_lhdx_r_r_r(dst, src, src2)) } inst_lvtrx_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .LVTRX, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_lvtrx_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_lvtrx_r_r_r(dst, src, src2)) } +emit_lvtrx_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_lvtrx_r_r_r(dst, src, src2)) } inst_bbelr_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .BBELR, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_bbelr_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_bbelr_r_r_r(dst, src, src2)) } +emit_bbelr_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_bbelr_r_r_r(dst, src, src2)) } inst_lvrx_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .LVRX, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_lvrx_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_lvrx_r_r_r(dst, src, src2)) } +emit_lvrx_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_lvrx_r_r_r(dst, src, src2)) } inst_subfo_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .SUBFO, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_subfo_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_subfo_r_r_r(dst, src, src2)) } +emit_subfo_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_subfo_r_r_r(dst, src, src2)) } inst_subo_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .SUBO, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_subo_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_subo_r_r_r(dst, src, src2)) } +emit_subo_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_subo_r_r_r(dst, src, src2)) } inst_subfo_dot_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .SUBFO_DOT, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_subfo_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_subfo_dot_r_r_r(dst, src, src2)) } +emit_subfo_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_subfo_dot_r_r_r(dst, src, src2)) } inst_subo_dot_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .SUBO_DOT, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_subo_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_subo_dot_r_r_r(dst, src, src2)) } +emit_subo_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_subo_dot_r_r_r(dst, src, src2)) } inst_lwdcbx_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .LWDCBX, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_lwdcbx_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_lwdcbx_r_r_r(dst, src, src2)) } +emit_lwdcbx_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_lwdcbx_r_r_r(dst, src, src2)) } inst_lwdx_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .LWDX, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_lwdx_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_lwdx_r_r_r(dst, src, src2)) } +emit_lwdx_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_lwdx_r_r_r(dst, src, src2)) } inst_lvtlx_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .LVTLX, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_lvtlx_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_lvtlx_r_r_r(dst, src, src2)) } +emit_lvtlx_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_lvtlx_r_r_r(dst, src, src2)) } inst_lsi_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .LSI, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_lsi_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_lsi_r_r_r(dst, src, src2)) } +emit_lsi_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_lsi_r_r_r(dst, src, src2)) } inst_dcs_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .DCS, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_dcs_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_dcs_r_r_r(dst, src, src2)) } +emit_dcs_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_dcs_r_r_r(dst, src, src2)) } inst_mffgpr_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .MFFGPR, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_mffgpr_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_mffgpr_r_r_r(dst, src, src2)) } +emit_mffgpr_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_mffgpr_r_r_r(dst, src, src2)) } inst_lddx_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .LDDX, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_lddx_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_lddx_r_r_r(dst, src, src2)) } +emit_lddx_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_lddx_r_r_r(dst, src, src2)) } inst_lvswx_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .LVSWX, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_lvswx_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_lvswx_r_r_r(dst, src, src2)) } +emit_lvswx_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_lvswx_r_r_r(dst, src, src2)) } inst_nego_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .NEGO, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_nego_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_nego_r_r_r(dst, src, src2)) } +emit_nego_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_nego_r_r_r(dst, src, src2)) } inst_nego_dot_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .NEGO_DOT, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_nego_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_nego_dot_r_r_r(dst, src, src2)) } +emit_nego_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_nego_dot_r_r_r(dst, src, src2)) } inst_mulo_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .MULO, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_mulo_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_mulo_r_r_r(dst, src, src2)) } +emit_mulo_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_mulo_r_r_r(dst, src, src2)) } inst_mulo_dot_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .MULO_DOT, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_mulo_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_mulo_dot_r_r_r(dst, src, src2)) } +emit_mulo_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_mulo_dot_r_r_r(dst, src, src2)) } inst_mfsri_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .MFSRI, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_mfsri_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_mfsri_r_r_r(dst, src, src2)) } +emit_mfsri_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_mfsri_r_r_r(dst, src, src2)) } inst_dclst_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .DCLST, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_dclst_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_dclst_r_r_r(dst, src, src2)) } +emit_dclst_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_dclst_r_r_r(dst, src, src2)) } inst_stbdcbx_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .STBDCBX, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_stbdcbx_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_stbdcbx_r_r_r(dst, src, src2)) } +emit_stbdcbx_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_stbdcbx_r_r_r(dst, src, src2)) } inst_stbdx_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .STBDX, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_stbdx_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_stbdx_r_r_r(dst, src, src2)) } +emit_stbdx_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_stbdx_r_r_r(dst, src, src2)) } inst_stvlx_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .STVLX, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_stvlx_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_stvlx_r_r_r(dst, src, src2)) } +emit_stvlx_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_stvlx_r_r_r(dst, src, src2)) } inst_subfeo_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .SUBFEO, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_subfeo_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_subfeo_r_r_r(dst, src, src2)) } +emit_subfeo_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_subfeo_r_r_r(dst, src, src2)) } inst_sfeo_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .SFEO, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_sfeo_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_sfeo_r_r_r(dst, src, src2)) } +emit_sfeo_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_sfeo_r_r_r(dst, src, src2)) } inst_subfeo_dot_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .SUBFEO_DOT, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_subfeo_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_subfeo_dot_r_r_r(dst, src, src2)) } +emit_subfeo_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_subfeo_dot_r_r_r(dst, src, src2)) } inst_sfeo_dot_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .SFEO_DOT, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_sfeo_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_sfeo_dot_r_r_r(dst, src, src2)) } +emit_sfeo_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_sfeo_dot_r_r_r(dst, src, src2)) } inst_addeo_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .ADDEO, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_addeo_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_addeo_r_r_r(dst, src, src2)) } +emit_addeo_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_addeo_r_r_r(dst, src, src2)) } inst_aeo_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .AEO, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_aeo_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_aeo_r_r_r(dst, src, src2)) } +emit_aeo_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_aeo_r_r_r(dst, src, src2)) } inst_addeo_dot_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .ADDEO_DOT, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_addeo_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_addeo_dot_r_r_r(dst, src, src2)) } +emit_addeo_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_addeo_dot_r_r_r(dst, src, src2)) } inst_aeo_dot_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .AEO_DOT, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_aeo_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_aeo_dot_r_r_r(dst, src, src2)) } +emit_aeo_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_aeo_dot_r_r_r(dst, src, src2)) } inst_hashstp_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .HASHSTP, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_hashstp_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_hashstp_r_r_r(dst, src, src2)) } +emit_hashstp_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_hashstp_r_r_r(dst, src, src2)) } inst_stsx_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .STSX, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_stsx_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_stsx_r_r_r(dst, src, src2)) } +emit_stsx_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_stsx_r_r_r(dst, src, src2)) } inst_stbrx_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .STBRX, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_stbrx_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_stbrx_r_r_r(dst, src, src2)) } +emit_stbrx_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_stbrx_r_r_r(dst, src, src2)) } inst_srq_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .SRQ, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_srq_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_srq_r_r_r(dst, src, src2)) } +emit_srq_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_srq_r_r_r(dst, src, src2)) } inst_srq_dot_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .SRQ_DOT, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_srq_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_srq_dot_r_r_r(dst, src, src2)) } +emit_srq_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_srq_dot_r_r_r(dst, src, src2)) } inst_sre_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .SRE, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_sre_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_sre_r_r_r(dst, src, src2)) } +emit_sre_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_sre_r_r_r(dst, src, src2)) } inst_sre_dot_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .SRE_DOT, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_sre_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_sre_dot_r_r_r(dst, src, src2)) } +emit_sre_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_sre_dot_r_r_r(dst, src, src2)) } inst_sthdcbx_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .STHDCBX, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_sthdcbx_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_sthdcbx_r_r_r(dst, src, src2)) } +emit_sthdcbx_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_sthdcbx_r_r_r(dst, src, src2)) } inst_sthdx_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .STHDX, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_sthdx_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_sthdx_r_r_r(dst, src, src2)) } +emit_sthdx_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_sthdx_r_r_r(dst, src, src2)) } inst_stvfrx_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .STVFRX, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_stvfrx_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_stvfrx_r_r_r(dst, src, src2)) } +emit_stvfrx_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_stvfrx_r_r_r(dst, src, src2)) } inst_stvrx_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .STVRX, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_stvrx_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_stvrx_r_r_r(dst, src, src2)) } +emit_stvrx_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_stvrx_r_r_r(dst, src, src2)) } inst_hashchkp_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .HASHCHKP, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_hashchkp_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_hashchkp_r_r_r(dst, src, src2)) } +emit_hashchkp_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_hashchkp_r_r_r(dst, src, src2)) } inst_sriq_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .SRIQ, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_sriq_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_sriq_r_r_r(dst, src, src2)) } +emit_sriq_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_sriq_r_r_r(dst, src, src2)) } inst_sriq_dot_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .SRIQ_DOT, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_sriq_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_sriq_dot_r_r_r(dst, src, src2)) } +emit_sriq_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_sriq_dot_r_r_r(dst, src, src2)) } inst_stwdcbx_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .STWDCBX, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_stwdcbx_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_stwdcbx_r_r_r(dst, src, src2)) } +emit_stwdcbx_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_stwdcbx_r_r_r(dst, src, src2)) } inst_stwdx_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .STWDX, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_stwdx_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_stwdx_r_r_r(dst, src, src2)) } +emit_stwdx_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_stwdx_r_r_r(dst, src, src2)) } inst_stvflx_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .STVFLX, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_stvflx_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_stvflx_r_r_r(dst, src, src2)) } +emit_stvflx_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_stvflx_r_r_r(dst, src, src2)) } inst_subfzeo_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .SUBFZEO, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_subfzeo_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_subfzeo_r_r_r(dst, src, src2)) } +emit_subfzeo_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_subfzeo_r_r_r(dst, src, src2)) } inst_sfzeo_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .SFZEO, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_sfzeo_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_sfzeo_r_r_r(dst, src, src2)) } +emit_sfzeo_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_sfzeo_r_r_r(dst, src, src2)) } inst_subfzeo_dot_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .SUBFZEO_DOT, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_subfzeo_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_subfzeo_dot_r_r_r(dst, src, src2)) } +emit_subfzeo_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_subfzeo_dot_r_r_r(dst, src, src2)) } inst_sfzeo_dot_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .SFZEO_DOT, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_sfzeo_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_sfzeo_dot_r_r_r(dst, src, src2)) } +emit_sfzeo_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_sfzeo_dot_r_r_r(dst, src, src2)) } inst_addzeo_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .ADDZEO, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_addzeo_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_addzeo_r_r_r(dst, src, src2)) } +emit_addzeo_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_addzeo_r_r_r(dst, src, src2)) } inst_azeo_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .AZEO, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_azeo_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_azeo_r_r_r(dst, src, src2)) } +emit_azeo_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_azeo_r_r_r(dst, src, src2)) } inst_addzeo_dot_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .ADDZEO_DOT, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_addzeo_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_addzeo_dot_r_r_r(dst, src, src2)) } +emit_addzeo_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_addzeo_dot_r_r_r(dst, src, src2)) } inst_azeo_dot_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .AZEO_DOT, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_azeo_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_azeo_dot_r_r_r(dst, src, src2)) } +emit_azeo_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_azeo_dot_r_r_r(dst, src, src2)) } inst_hashst_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .HASHST, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_hashst_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_hashst_r_r_r(dst, src, src2)) } +emit_hashst_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_hashst_r_r_r(dst, src, src2)) } inst_stsi_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .STSI, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_stsi_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_stsi_r_r_r(dst, src, src2)) } +emit_stsi_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_stsi_r_r_r(dst, src, src2)) } inst_srlq_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .SRLQ, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_srlq_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_srlq_r_r_r(dst, src, src2)) } +emit_srlq_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_srlq_r_r_r(dst, src, src2)) } inst_srlq_dot_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .SRLQ_DOT, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_srlq_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_srlq_dot_r_r_r(dst, src, src2)) } +emit_srlq_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_srlq_dot_r_r_r(dst, src, src2)) } inst_sreq_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .SREQ, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_sreq_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_sreq_r_r_r(dst, src, src2)) } +emit_sreq_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_sreq_r_r_r(dst, src, src2)) } inst_sreq_dot_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .SREQ_DOT, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_sreq_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_sreq_dot_r_r_r(dst, src, src2)) } +emit_sreq_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_sreq_dot_r_r_r(dst, src, src2)) } inst_mftgpr_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .MFTGPR, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_mftgpr_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_mftgpr_r_r_r(dst, src, src2)) } +emit_mftgpr_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_mftgpr_r_r_r(dst, src, src2)) } inst_stddx_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .STDDX, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_stddx_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_stddx_r_r_r(dst, src, src2)) } +emit_stddx_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_stddx_r_r_r(dst, src, src2)) } inst_stvswx_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .STVSWX, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_stvswx_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_stvswx_r_r_r(dst, src, src2)) } +emit_stvswx_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_stvswx_r_r_r(dst, src, src2)) } inst_subfmeo_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .SUBFMEO, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_subfmeo_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_subfmeo_r_r_r(dst, src, src2)) } +emit_subfmeo_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_subfmeo_r_r_r(dst, src, src2)) } inst_sfmeo_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .SFMEO, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_sfmeo_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_sfmeo_r_r_r(dst, src, src2)) } +emit_sfmeo_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_sfmeo_r_r_r(dst, src, src2)) } inst_subfmeo_dot_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .SUBFMEO_DOT, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_subfmeo_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_subfmeo_dot_r_r_r(dst, src, src2)) } +emit_subfmeo_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_subfmeo_dot_r_r_r(dst, src, src2)) } inst_sfmeo_dot_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .SFMEO_DOT, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_sfmeo_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_sfmeo_dot_r_r_r(dst, src, src2)) } +emit_sfmeo_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_sfmeo_dot_r_r_r(dst, src, src2)) } inst_mulldo_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .MULLDO, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_mulldo_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_mulldo_r_r_r(dst, src, src2)) } +emit_mulldo_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_mulldo_r_r_r(dst, src, src2)) } inst_mulldo_dot_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .MULLDO_DOT, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_mulldo_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_mulldo_dot_r_r_r(dst, src, src2)) } +emit_mulldo_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_mulldo_dot_r_r_r(dst, src, src2)) } inst_addmeo_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .ADDMEO, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_addmeo_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_addmeo_r_r_r(dst, src, src2)) } +emit_addmeo_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_addmeo_r_r_r(dst, src, src2)) } inst_ameo_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .AMEO, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_ameo_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_ameo_r_r_r(dst, src, src2)) } +emit_ameo_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_ameo_r_r_r(dst, src, src2)) } inst_addmeo_dot_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .ADDMEO_DOT, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_addmeo_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_addmeo_dot_r_r_r(dst, src, src2)) } +emit_addmeo_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_addmeo_dot_r_r_r(dst, src, src2)) } inst_ameo_dot_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .AMEO_DOT, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_ameo_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_ameo_dot_r_r_r(dst, src, src2)) } +emit_ameo_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_ameo_dot_r_r_r(dst, src, src2)) } inst_mullwo_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .MULLWO, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_mullwo_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_mullwo_r_r_r(dst, src, src2)) } +emit_mullwo_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_mullwo_r_r_r(dst, src, src2)) } inst_mulso_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .MULSO, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_mulso_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_mulso_r_r_r(dst, src, src2)) } +emit_mulso_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_mulso_r_r_r(dst, src, src2)) } inst_mullwo_dot_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .MULLWO_DOT, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_mullwo_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_mullwo_dot_r_r_r(dst, src, src2)) } +emit_mullwo_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_mullwo_dot_r_r_r(dst, src, src2)) } inst_mulso_dot_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .MULSO_DOT, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_mulso_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_mulso_dot_r_r_r(dst, src, src2)) } +emit_mulso_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_mulso_dot_r_r_r(dst, src, src2)) } inst_tsr_dot_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .TSR_DOT, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_tsr_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_tsr_dot_r_r_r(dst, src, src2)) } +emit_tsr_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_tsr_dot_r_r_r(dst, src, src2)) } inst_hashchk_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .HASHCHK, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_hashchk_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_hashchk_r_r_r(dst, src, src2)) } +emit_hashchk_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_hashchk_r_r_r(dst, src, src2)) } inst_srliq_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .SRLIQ, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_srliq_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_srliq_r_r_r(dst, src, src2)) } +emit_srliq_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_srliq_r_r_r(dst, src, src2)) } inst_srliq_dot_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .SRLIQ_DOT, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_srliq_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_srliq_dot_r_r_r(dst, src, src2)) } +emit_srliq_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_srliq_dot_r_r_r(dst, src, src2)) } inst_lvsm_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .LVSM, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_lvsm_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_lvsm_r_r_r(dst, src, src2)) } +emit_lvsm_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_lvsm_r_r_r(dst, src, src2)) } inst_stvepxl_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .STVEPXL, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_stvepxl_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_stvepxl_r_r_r(dst, src, src2)) } +emit_stvepxl_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_stvepxl_r_r_r(dst, src, src2)) } inst_lvlxl_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .LVLXL, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_lvlxl_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_lvlxl_r_r_r(dst, src, src2)) } +emit_lvlxl_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_lvlxl_r_r_r(dst, src, src2)) } inst_dozo_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .DOZO, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_dozo_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_dozo_r_r_r(dst, src, src2)) } +emit_dozo_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_dozo_r_r_r(dst, src, src2)) } inst_dozo_dot_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .DOZO_DOT, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_dozo_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_dozo_dot_r_r_r(dst, src, src2)) } +emit_dozo_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_dozo_dot_r_r_r(dst, src, src2)) } inst_addo_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .ADDO, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_addo_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_addo_r_r_r(dst, src, src2)) } +emit_addo_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_addo_r_r_r(dst, src, src2)) } inst_caxo_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .CAXO, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_caxo_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_caxo_r_r_r(dst, src, src2)) } +emit_caxo_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_caxo_r_r_r(dst, src, src2)) } inst_addo_dot_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .ADDO_DOT, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_addo_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_addo_dot_r_r_r(dst, src, src2)) } +emit_addo_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_addo_dot_r_r_r(dst, src, src2)) } inst_caxo_dot_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .CAXO_DOT, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_caxo_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_caxo_dot_r_r_r(dst, src, src2)) } +emit_caxo_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_caxo_dot_r_r_r(dst, src, src2)) } inst_lfqx_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .LFQX, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_lfqx_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_lfqx_r_r_r(dst, src, src2)) } +emit_lfqx_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_lfqx_r_r_r(dst, src, src2)) } inst_sra_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .SRA, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_sra_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_sra_r_r_r(dst, src, src2)) } +emit_sra_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_sra_r_r_r(dst, src, src2)) } inst_sra_dot_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .SRA_DOT, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_sra_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_sra_dot_r_r_r(dst, src, src2)) } +emit_sra_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_sra_dot_r_r_r(dst, src, src2)) } inst_evlddepx_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVLDDEPX, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evlddepx_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evlddepx_r_r_r(dst, src, src2)) } +emit_evlddepx_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evlddepx_r_r_r(dst, src, src2)) } inst_lfddx_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .LFDDX, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_lfddx_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_lfddx_r_r_r(dst, src, src2)) } +emit_lfddx_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_lfddx_r_r_r(dst, src, src2)) } inst_lvtrxl_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .LVTRXL, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_lvtrxl_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_lvtrxl_r_r_r(dst, src, src2)) } +emit_lvtrxl_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_lvtrxl_r_r_r(dst, src, src2)) } inst_stvepx_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .STVEPX, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_stvepx_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_stvepx_r_r_r(dst, src, src2)) } +emit_stvepx_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_stvepx_r_r_r(dst, src, src2)) } inst_lvrxl_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .LVRXL, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_lvrxl_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_lvrxl_r_r_r(dst, src, src2)) } +emit_lvrxl_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_lvrxl_r_r_r(dst, src, src2)) } inst_rac_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .RAC, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_rac_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_rac_r_r_r(dst, src, src2)) } +emit_rac_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_rac_r_r_r(dst, src, src2)) } inst_erativax_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .ERATIVAX, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_erativax_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_erativax_r_r_r(dst, src, src2)) } +emit_erativax_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_erativax_r_r_r(dst, src, src2)) } inst_lfqux_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .LFQUX, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_lfqux_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_lfqux_r_r_r(dst, src, src2)) } +emit_lfqux_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_lfqux_r_r_r(dst, src, src2)) } inst_srai_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .SRAI, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_srai_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_srai_r_r_r(dst, src, src2)) } +emit_srai_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_srai_r_r_r(dst, src, src2)) } inst_srai_dot_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .SRAI_DOT, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_srai_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_srai_dot_r_r_r(dst, src, src2)) } +emit_srai_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_srai_dot_r_r_r(dst, src, src2)) } inst_lvtlxl_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .LVTLXL, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_lvtlxl_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_lvtlxl_r_r_r(dst, src, src2)) } +emit_lvtlxl_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_lvtlxl_r_r_r(dst, src, src2)) } inst_divo_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .DIVO, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_divo_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_divo_r_r_r(dst, src, src2)) } +emit_divo_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_divo_r_r_r(dst, src, src2)) } inst_divo_dot_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .DIVO_DOT, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_divo_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_divo_dot_r_r_r(dst, src, src2)) } +emit_divo_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_divo_dot_r_r_r(dst, src, src2)) } inst_tlbsrx_dot_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .TLBSRX_DOT, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_tlbsrx_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_tlbsrx_dot_r_r_r(dst, src, src2)) } +emit_tlbsrx_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_tlbsrx_dot_r_r_r(dst, src, src2)) } inst_slbiag_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .SLBIAG, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_slbiag_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_slbiag_r_r_r(dst, src, src2)) } +emit_slbiag_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_slbiag_r_r_r(dst, src, src2)) } inst_lvswxl_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .LVSWXL, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_lvswxl_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_lvswxl_r_r_r(dst, src, src2)) } +emit_lvswxl_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_lvswxl_r_r_r(dst, src, src2)) } inst_abso_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .ABSO, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_abso_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_abso_r_r_r(dst, src, src2)) } +emit_abso_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_abso_r_r_r(dst, src, src2)) } inst_abso_dot_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .ABSO_DOT, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_abso_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_abso_dot_r_r_r(dst, src, src2)) } +emit_abso_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_abso_dot_r_r_r(dst, src, src2)) } inst_divso_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .DIVSO, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_divso_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_divso_r_r_r(dst, src, src2)) } +emit_divso_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_divso_r_r_r(dst, src, src2)) } inst_divso_dot_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .DIVSO_DOT, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_divso_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_divso_dot_r_r_r(dst, src, src2)) } +emit_divso_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_divso_dot_r_r_r(dst, src, src2)) } inst_rmieg_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .RMIEG, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_rmieg_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_rmieg_r_r_r(dst, src, src2)) } +emit_rmieg_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_rmieg_r_r_r(dst, src, src2)) } inst_stvlxl_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .STVLXL, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_stvlxl_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_stvlxl_r_r_r(dst, src, src2)) } +emit_stvlxl_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_stvlxl_r_r_r(dst, src, src2)) } inst_divdeuo_dot_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .DIVDEUO_DOT, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_divdeuo_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_divdeuo_dot_r_r_r(dst, src, src2)) } +emit_divdeuo_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_divdeuo_dot_r_r_r(dst, src, src2)) } inst_divweuo_dot_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .DIVWEUO_DOT, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_divweuo_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_divweuo_dot_r_r_r(dst, src, src2)) } +emit_divweuo_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_divweuo_dot_r_r_r(dst, src, src2)) } inst_tlbsx_dot_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .TLBSX_DOT, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_tlbsx_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_tlbsx_dot_r_r_r(dst, src, src2)) } +emit_tlbsx_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_tlbsx_dot_r_r_r(dst, src, src2)) } inst_stfqx_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .STFQX, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_stfqx_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_stfqx_r_r_r(dst, src, src2)) } +emit_stfqx_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_stfqx_r_r_r(dst, src, src2)) } inst_sraq_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .SRAQ, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_sraq_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_sraq_r_r_r(dst, src, src2)) } +emit_sraq_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_sraq_r_r_r(dst, src, src2)) } inst_sraq_dot_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .SRAQ_DOT, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_sraq_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_sraq_dot_r_r_r(dst, src, src2)) } +emit_sraq_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_sraq_dot_r_r_r(dst, src, src2)) } inst_srea_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .SREA, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_srea_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_srea_r_r_r(dst, src, src2)) } +emit_srea_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_srea_r_r_r(dst, src, src2)) } inst_srea_dot_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .SREA_DOT, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_srea_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_srea_dot_r_r_r(dst, src, src2)) } +emit_srea_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_srea_dot_r_r_r(dst, src, src2)) } inst_exts_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EXTS, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_exts_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_exts_r_r_r(dst, src, src2)) } +emit_exts_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_exts_r_r_r(dst, src, src2)) } inst_exts_dot_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EXTS_DOT, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_exts_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_exts_dot_r_r_r(dst, src, src2)) } +emit_exts_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_exts_dot_r_r_r(dst, src, src2)) } inst_evstddepx_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVSTDDEPX, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evstddepx_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evstddepx_r_r_r(dst, src, src2)) } +emit_evstddepx_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evstddepx_r_r_r(dst, src, src2)) } inst_stfddx_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .STFDDX, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_stfddx_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_stfddx_r_r_r(dst, src, src2)) } +emit_stfddx_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_stfddx_r_r_r(dst, src, src2)) } inst_stvfrxl_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .STVFRXL, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_stvfrxl_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_stvfrxl_r_r_r(dst, src, src2)) } +emit_stvfrxl_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_stvfrxl_r_r_r(dst, src, src2)) } inst_wclrall_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .WCLRALL, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_wclrall_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_wclrall_r_r_r(dst, src, src2)) } +emit_wclrall_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_wclrall_r_r_r(dst, src, src2)) } inst_wclr_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .WCLR, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_wclr_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_wclr_r_r_r(dst, src, src2)) } +emit_wclr_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_wclr_r_r_r(dst, src, src2)) } inst_stvrxl_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .STVRXL, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_stvrxl_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_stvrxl_r_r_r(dst, src, src2)) } +emit_stvrxl_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_stvrxl_r_r_r(dst, src, src2)) } inst_divdeo_dot_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .DIVDEO_DOT, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_divdeo_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_divdeo_dot_r_r_r(dst, src, src2)) } +emit_divdeo_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_divdeo_dot_r_r_r(dst, src, src2)) } inst_divweo_dot_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .DIVWEO_DOT, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_divweo_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_divweo_dot_r_r_r(dst, src, src2)) } +emit_divweo_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_divweo_dot_r_r_r(dst, src, src2)) } inst_icswepx_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .ICSWEPX, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_icswepx_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_icswepx_r_r_r(dst, src, src2)) } +emit_icswepx_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_icswepx_r_r_r(dst, src, src2)) } inst_icswepx_dot_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .ICSWEPX_DOT, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_icswepx_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_icswepx_dot_r_r_r(dst, src, src2)) } +emit_icswepx_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_icswepx_dot_r_r_r(dst, src, src2)) } inst_stfqux_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .STFQUX, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_stfqux_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_stfqux_r_r_r(dst, src, src2)) } +emit_stfqux_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_stfqux_r_r_r(dst, src, src2)) } inst_sraiq_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .SRAIQ, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_sraiq_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_sraiq_r_r_r(dst, src, src2)) } +emit_sraiq_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_sraiq_r_r_r(dst, src, src2)) } inst_sraiq_dot_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .SRAIQ_DOT, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_sraiq_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_sraiq_dot_r_r_r(dst, src, src2)) } +emit_sraiq_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_sraiq_dot_r_r_r(dst, src, src2)) } inst_stvflxl_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .STVFLXL, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_stvflxl_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_stvflxl_r_r_r(dst, src, src2)) } +emit_stvflxl_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_stvflxl_r_r_r(dst, src, src2)) } inst_ici_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .ICI, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_ici_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_ici_r_r_r(dst, src, src2)) } +emit_ici_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_ici_r_r_r(dst, src, src2)) } inst_divduo_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .DIVDUO, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_divduo_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_divduo_r_r_r(dst, src, src2)) } +emit_divduo_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_divduo_r_r_r(dst, src, src2)) } inst_divduo_dot_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .DIVDUO_DOT, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_divduo_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_divduo_dot_r_r_r(dst, src, src2)) } +emit_divduo_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_divduo_dot_r_r_r(dst, src, src2)) } inst_divwuo_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .DIVWUO, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_divwuo_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_divwuo_r_r_r(dst, src, src2)) } +emit_divwuo_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_divwuo_r_r_r(dst, src, src2)) } inst_divwuo_dot_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .DIVWUO_DOT, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_divwuo_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_divwuo_dot_r_r_r(dst, src, src2)) } +emit_divwuo_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_divwuo_dot_r_r_r(dst, src, src2)) } inst_slbfee_dot_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .SLBFEE_DOT, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_slbfee_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_slbfee_dot_r_r_r(dst, src, src2)) } +emit_slbfee_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_slbfee_dot_r_r_r(dst, src, src2)) } inst_stvswxl_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .STVSWXL, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_stvswxl_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_stvswxl_r_r_r(dst, src, src2)) } +emit_stvswxl_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_stvswxl_r_r_r(dst, src, src2)) } inst_icread_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .ICREAD, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_icread_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_icread_r_r_r(dst, src, src2)) } +emit_icread_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_icread_r_r_r(dst, src, src2)) } inst_nabso_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .NABSO, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_nabso_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_nabso_r_r_r(dst, src, src2)) } +emit_nabso_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_nabso_r_r_r(dst, src, src2)) } inst_nabso_dot_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .NABSO_DOT, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_nabso_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_nabso_dot_r_r_r(dst, src, src2)) } +emit_nabso_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_nabso_dot_r_r_r(dst, src, src2)) } inst_divdo_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .DIVDO, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_divdo_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_divdo_r_r_r(dst, src, src2)) } +emit_divdo_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_divdo_r_r_r(dst, src, src2)) } inst_divdo_dot_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .DIVDO_DOT, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_divdo_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_divdo_dot_r_r_r(dst, src, src2)) } +emit_divdo_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_divdo_dot_r_r_r(dst, src, src2)) } inst_divwo_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .DIVWO, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_divwo_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_divwo_r_r_r(dst, src, src2)) } +emit_divwo_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_divwo_r_r_r(dst, src, src2)) } inst_divwo_dot_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .DIVWO_DOT, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_divwo_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_divwo_dot_r_r_r(dst, src, src2)) } +emit_divwo_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_divwo_dot_r_r_r(dst, src, src2)) } inst_dclz_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .DCLZ, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_dclz_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_dclz_r_r_r(dst, src, src2)) } +emit_dclz_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_dclz_r_r_r(dst, src, src2)) } inst_lu_r_mem :: #force_inline proc "contextless" (dst: Register, addr: Memory) -> Instruction { return Instruction{mnemonic = .LU, operand_count = 2, length = 4, ops = {op_reg(dst), op_mem(addr), {}, {}}} } -emit_lu_r_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append(instructions, inst_lu_r_mem(dst, addr)) } +emit_lu_r_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append_elem(instructions, inst_lu_r_mem(dst, addr)) } inst_st_r_mem :: #force_inline proc "contextless" (dst: Register, addr: Memory) -> Instruction { return Instruction{mnemonic = .ST, operand_count = 2, length = 4, ops = {op_reg(dst), op_mem(addr), {}, {}}} } -emit_st_r_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append(instructions, inst_st_r_mem(dst, addr)) } +emit_st_r_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append_elem(instructions, inst_st_r_mem(dst, addr)) } inst_stu_r_mem :: #force_inline proc "contextless" (dst: Register, addr: Memory) -> Instruction { return Instruction{mnemonic = .STU, operand_count = 2, length = 4, ops = {op_reg(dst), op_mem(addr), {}, {}}} } -emit_stu_r_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append(instructions, inst_stu_r_mem(dst, addr)) } +emit_stu_r_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append_elem(instructions, inst_stu_r_mem(dst, addr)) } inst_lm_r_mem :: #force_inline proc "contextless" (dst: Register, addr: Memory) -> Instruction { return Instruction{mnemonic = .LM, operand_count = 2, length = 4, ops = {op_reg(dst), op_mem(addr), {}, {}}} } -emit_lm_r_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append(instructions, inst_lm_r_mem(dst, addr)) } +emit_lm_r_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append_elem(instructions, inst_lm_r_mem(dst, addr)) } inst_stm_r_mem :: #force_inline proc "contextless" (dst: Register, addr: Memory) -> Instruction { return Instruction{mnemonic = .STM, operand_count = 2, length = 4, ops = {op_reg(dst), op_mem(addr), {}, {}}} } -emit_stm_r_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append(instructions, inst_stm_r_mem(dst, addr)) } +emit_stm_r_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append_elem(instructions, inst_stm_r_mem(dst, addr)) } inst_lfq_fr_mem :: #force_inline proc "contextless" (dst: Register, addr: Memory) -> Instruction { return Instruction{mnemonic = .LFQ, operand_count = 2, length = 4, ops = {op_reg(dst), op_mem(addr), {}, {}}} } -emit_lfq_fr_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append(instructions, inst_lfq_fr_mem(dst, addr)) } +emit_lfq_fr_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append_elem(instructions, inst_lfq_fr_mem(dst, addr)) } inst_lfqu_fr_mem :: #force_inline proc "contextless" (dst: Register, addr: Memory) -> Instruction { return Instruction{mnemonic = .LFQU, operand_count = 2, length = 4, ops = {op_reg(dst), op_mem(addr), {}, {}}} } -emit_lfqu_fr_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append(instructions, inst_lfqu_fr_mem(dst, addr)) } +emit_lfqu_fr_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append_elem(instructions, inst_lfqu_fr_mem(dst, addr)) } inst_stfq_fr_mem :: #force_inline proc "contextless" (dst: Register, addr: Memory) -> Instruction { return Instruction{mnemonic = .STFQ, operand_count = 2, length = 4, ops = {op_reg(dst), op_mem(addr), {}, {}}} } -emit_stfq_fr_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append(instructions, inst_stfq_fr_mem(dst, addr)) } +emit_stfq_fr_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append_elem(instructions, inst_stfq_fr_mem(dst, addr)) } inst_stfqu_fr_mem :: #force_inline proc "contextless" (dst: Register, addr: Memory) -> Instruction { return Instruction{mnemonic = .STFQU, operand_count = 2, length = 4, ops = {op_reg(dst), op_mem(addr), {}, {}}} } -emit_stfqu_fr_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append(instructions, inst_stfqu_fr_mem(dst, addr)) } +emit_stfqu_fr_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append_elem(instructions, inst_stfqu_fr_mem(dst, addr)) } inst_fcir_fr_mem :: #force_inline proc "contextless" (dst: Register, addr: Memory) -> Instruction { return Instruction{mnemonic = .FCIR, operand_count = 2, length = 4, ops = {op_reg(dst), op_mem(addr), {}, {}}} } -emit_fcir_fr_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append(instructions, inst_fcir_fr_mem(dst, addr)) } +emit_fcir_fr_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append_elem(instructions, inst_fcir_fr_mem(dst, addr)) } inst_fcir_dot_fr_mem :: #force_inline proc "contextless" (dst: Register, addr: Memory) -> Instruction { return Instruction{mnemonic = .FCIR_DOT, operand_count = 2, length = 4, ops = {op_reg(dst), op_mem(addr), {}, {}}} } -emit_fcir_dot_fr_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append(instructions, inst_fcir_dot_fr_mem(dst, addr)) } +emit_fcir_dot_fr_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append_elem(instructions, inst_fcir_dot_fr_mem(dst, addr)) } inst_fcirz_fr_mem :: #force_inline proc "contextless" (dst: Register, addr: Memory) -> Instruction { return Instruction{mnemonic = .FCIRZ, operand_count = 2, length = 4, ops = {op_reg(dst), op_mem(addr), {}, {}}} } -emit_fcirz_fr_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append(instructions, inst_fcirz_fr_mem(dst, addr)) } +emit_fcirz_fr_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append_elem(instructions, inst_fcirz_fr_mem(dst, addr)) } inst_fcirz_dot_fr_mem :: #force_inline proc "contextless" (dst: Register, addr: Memory) -> Instruction { return Instruction{mnemonic = .FCIRZ_DOT, operand_count = 2, length = 4, ops = {op_reg(dst), op_mem(addr), {}, {}}} } -emit_fcirz_dot_fr_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append(instructions, inst_fcirz_dot_fr_mem(dst, addr)) } +emit_fcirz_dot_fr_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append_elem(instructions, inst_fcirz_dot_fr_mem(dst, addr)) } inst_fd_fr_mem :: #force_inline proc "contextless" (dst: Register, addr: Memory) -> Instruction { return Instruction{mnemonic = .FD, operand_count = 2, length = 4, ops = {op_reg(dst), op_mem(addr), {}, {}}} } -emit_fd_fr_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append(instructions, inst_fd_fr_mem(dst, addr)) } +emit_fd_fr_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append_elem(instructions, inst_fd_fr_mem(dst, addr)) } inst_fd_dot_fr_mem :: #force_inline proc "contextless" (dst: Register, addr: Memory) -> Instruction { return Instruction{mnemonic = .FD_DOT, operand_count = 2, length = 4, ops = {op_reg(dst), op_mem(addr), {}, {}}} } -emit_fd_dot_fr_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append(instructions, inst_fd_dot_fr_mem(dst, addr)) } +emit_fd_dot_fr_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append_elem(instructions, inst_fd_dot_fr_mem(dst, addr)) } inst_fs_fr_mem :: #force_inline proc "contextless" (dst: Register, addr: Memory) -> Instruction { return Instruction{mnemonic = .FS, operand_count = 2, length = 4, ops = {op_reg(dst), op_mem(addr), {}, {}}} } -emit_fs_fr_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append(instructions, inst_fs_fr_mem(dst, addr)) } +emit_fs_fr_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append_elem(instructions, inst_fs_fr_mem(dst, addr)) } inst_fs_dot_fr_mem :: #force_inline proc "contextless" (dst: Register, addr: Memory) -> Instruction { return Instruction{mnemonic = .FS_DOT, operand_count = 2, length = 4, ops = {op_reg(dst), op_mem(addr), {}, {}}} } -emit_fs_dot_fr_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append(instructions, inst_fs_dot_fr_mem(dst, addr)) } +emit_fs_dot_fr_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append_elem(instructions, inst_fs_dot_fr_mem(dst, addr)) } inst_fa_fr_mem :: #force_inline proc "contextless" (dst: Register, addr: Memory) -> Instruction { return Instruction{mnemonic = .FA, operand_count = 2, length = 4, ops = {op_reg(dst), op_mem(addr), {}, {}}} } -emit_fa_fr_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append(instructions, inst_fa_fr_mem(dst, addr)) } +emit_fa_fr_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append_elem(instructions, inst_fa_fr_mem(dst, addr)) } inst_fa_dot_fr_mem :: #force_inline proc "contextless" (dst: Register, addr: Memory) -> Instruction { return Instruction{mnemonic = .FA_DOT, operand_count = 2, length = 4, ops = {op_reg(dst), op_mem(addr), {}, {}}} } -emit_fa_dot_fr_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append(instructions, inst_fa_dot_fr_mem(dst, addr)) } +emit_fa_dot_fr_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append_elem(instructions, inst_fa_dot_fr_mem(dst, addr)) } inst_fm_fr_mem :: #force_inline proc "contextless" (dst: Register, addr: Memory) -> Instruction { return Instruction{mnemonic = .FM, operand_count = 2, length = 4, ops = {op_reg(dst), op_mem(addr), {}, {}}} } -emit_fm_fr_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append(instructions, inst_fm_fr_mem(dst, addr)) } +emit_fm_fr_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append_elem(instructions, inst_fm_fr_mem(dst, addr)) } inst_fm_dot_fr_mem :: #force_inline proc "contextless" (dst: Register, addr: Memory) -> Instruction { return Instruction{mnemonic = .FM_DOT, operand_count = 2, length = 4, ops = {op_reg(dst), op_mem(addr), {}, {}}} } -emit_fm_dot_fr_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append(instructions, inst_fm_dot_fr_mem(dst, addr)) } +emit_fm_dot_fr_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append_elem(instructions, inst_fm_dot_fr_mem(dst, addr)) } inst_fms_fr_mem :: #force_inline proc "contextless" (dst: Register, addr: Memory) -> Instruction { return Instruction{mnemonic = .FMS, operand_count = 2, length = 4, ops = {op_reg(dst), op_mem(addr), {}, {}}} } -emit_fms_fr_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append(instructions, inst_fms_fr_mem(dst, addr)) } +emit_fms_fr_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append_elem(instructions, inst_fms_fr_mem(dst, addr)) } inst_fms_dot_fr_mem :: #force_inline proc "contextless" (dst: Register, addr: Memory) -> Instruction { return Instruction{mnemonic = .FMS_DOT, operand_count = 2, length = 4, ops = {op_reg(dst), op_mem(addr), {}, {}}} } -emit_fms_dot_fr_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append(instructions, inst_fms_dot_fr_mem(dst, addr)) } +emit_fms_dot_fr_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append_elem(instructions, inst_fms_dot_fr_mem(dst, addr)) } inst_fma_fr_mem :: #force_inline proc "contextless" (dst: Register, addr: Memory) -> Instruction { return Instruction{mnemonic = .FMA, operand_count = 2, length = 4, ops = {op_reg(dst), op_mem(addr), {}, {}}} } -emit_fma_fr_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append(instructions, inst_fma_fr_mem(dst, addr)) } +emit_fma_fr_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append_elem(instructions, inst_fma_fr_mem(dst, addr)) } inst_fma_dot_fr_mem :: #force_inline proc "contextless" (dst: Register, addr: Memory) -> Instruction { return Instruction{mnemonic = .FMA_DOT, operand_count = 2, length = 4, ops = {op_reg(dst), op_mem(addr), {}, {}}} } -emit_fma_dot_fr_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append(instructions, inst_fma_dot_fr_mem(dst, addr)) } +emit_fma_dot_fr_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append_elem(instructions, inst_fma_dot_fr_mem(dst, addr)) } inst_fnms_fr_mem :: #force_inline proc "contextless" (dst: Register, addr: Memory) -> Instruction { return Instruction{mnemonic = .FNMS, operand_count = 2, length = 4, ops = {op_reg(dst), op_mem(addr), {}, {}}} } -emit_fnms_fr_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append(instructions, inst_fnms_fr_mem(dst, addr)) } +emit_fnms_fr_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append_elem(instructions, inst_fnms_fr_mem(dst, addr)) } inst_fnms_dot_fr_mem :: #force_inline proc "contextless" (dst: Register, addr: Memory) -> Instruction { return Instruction{mnemonic = .FNMS_DOT, operand_count = 2, length = 4, ops = {op_reg(dst), op_mem(addr), {}, {}}} } -emit_fnms_dot_fr_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append(instructions, inst_fnms_dot_fr_mem(dst, addr)) } +emit_fnms_dot_fr_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append_elem(instructions, inst_fnms_dot_fr_mem(dst, addr)) } inst_fnma_fr_mem :: #force_inline proc "contextless" (dst: Register, addr: Memory) -> Instruction { return Instruction{mnemonic = .FNMA, operand_count = 2, length = 4, ops = {op_reg(dst), op_mem(addr), {}, {}}} } -emit_fnma_fr_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append(instructions, inst_fnma_fr_mem(dst, addr)) } +emit_fnma_fr_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append_elem(instructions, inst_fnma_fr_mem(dst, addr)) } inst_fnma_dot_fr_mem :: #force_inline proc "contextless" (dst: Register, addr: Memory) -> Instruction { return Instruction{mnemonic = .FNMA_DOT, operand_count = 2, length = 4, ops = {op_reg(dst), op_mem(addr), {}, {}}} } -emit_fnma_dot_fr_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append(instructions, inst_fnma_dot_fr_mem(dst, addr)) } +emit_fnma_dot_fr_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append_elem(instructions, inst_fnma_dot_fr_mem(dst, addr)) } inst_dtstexq_fr_mem :: #force_inline proc "contextless" (dst: Register, addr: Memory) -> Instruction { return Instruction{mnemonic = .DTSTEXQ, operand_count = 2, length = 4, ops = {op_reg(dst), op_mem(addr), {}, {}}} } -emit_dtstexq_fr_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append(instructions, inst_dtstexq_fr_mem(dst, addr)) } +emit_dtstexq_fr_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append_elem(instructions, inst_dtstexq_fr_mem(dst, addr)) } inst_xscmpexpqp_fr_mem :: #force_inline proc "contextless" (dst: Register, addr: Memory) -> Instruction { return Instruction{mnemonic = .XSCMPEXPQP, operand_count = 2, length = 4, ops = {op_reg(dst), op_mem(addr), {}, {}}} } -emit_xscmpexpqp_fr_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append(instructions, inst_xscmpexpqp_fr_mem(dst, addr)) } +emit_xscmpexpqp_fr_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append_elem(instructions, inst_xscmpexpqp_fr_mem(dst, addr)) } inst_dxexq_fr_mem :: #force_inline proc "contextless" (dst: Register, addr: Memory) -> Instruction { return Instruction{mnemonic = .DXEXQ, operand_count = 2, length = 4, ops = {op_reg(dst), op_mem(addr), {}, {}}} } -emit_dxexq_fr_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append(instructions, inst_dxexq_fr_mem(dst, addr)) } +emit_dxexq_fr_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append_elem(instructions, inst_dxexq_fr_mem(dst, addr)) } inst_dxexq_dot_fr_mem :: #force_inline proc "contextless" (dst: Register, addr: Memory) -> Instruction { return Instruction{mnemonic = .DXEXQ_DOT, operand_count = 2, length = 4, ops = {op_reg(dst), op_mem(addr), {}, {}}} } -emit_dxexq_dot_fr_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append(instructions, inst_dxexq_dot_fr_mem(dst, addr)) } +emit_dxexq_dot_fr_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append_elem(instructions, inst_dxexq_dot_fr_mem(dst, addr)) } inst_dtstsfq_fr_mem :: #force_inline proc "contextless" (dst: Register, addr: Memory) -> Instruction { return Instruction{mnemonic = .DTSTSFQ, operand_count = 2, length = 4, ops = {op_reg(dst), op_mem(addr), {}, {}}} } -emit_dtstsfq_fr_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append(instructions, inst_dtstsfq_fr_mem(dst, addr)) } +emit_dtstsfq_fr_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, addr: Memory) { append_elem(instructions, inst_dtstsfq_fr_mem(dst, addr)) } inst_evseteqb_dot_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVSETEQB_DOT, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evseteqb_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evseteqb_dot_r_r_r(dst, src, src2)) } +emit_evseteqb_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evseteqb_dot_r_r_r(dst, src, src2)) } inst_evseteqh_dot_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVSETEQH_DOT, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evseteqh_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evseteqh_dot_r_r_r(dst, src, src2)) } +emit_evseteqh_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evseteqh_dot_r_r_r(dst, src, src2)) } inst_evseteqw_dot_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVSETEQW_DOT, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evseteqw_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evseteqw_dot_r_r_r(dst, src, src2)) } +emit_evseteqw_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evseteqw_dot_r_r_r(dst, src, src2)) } inst_evsetgthu_dot_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVSETGTHU_DOT, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evsetgthu_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evsetgthu_dot_r_r_r(dst, src, src2)) } +emit_evsetgthu_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evsetgthu_dot_r_r_r(dst, src, src2)) } inst_evsetgths_dot_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVSETGTHS_DOT, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evsetgths_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evsetgths_dot_r_r_r(dst, src, src2)) } +emit_evsetgths_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evsetgths_dot_r_r_r(dst, src, src2)) } inst_evsetgtwu_dot_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVSETGTWU_DOT, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evsetgtwu_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evsetgtwu_dot_r_r_r(dst, src, src2)) } +emit_evsetgtwu_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evsetgtwu_dot_r_r_r(dst, src, src2)) } inst_evsetgtws_dot_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVSETGTWS_DOT, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evsetgtws_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evsetgtws_dot_r_r_r(dst, src, src2)) } +emit_evsetgtws_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evsetgtws_dot_r_r_r(dst, src, src2)) } inst_evsetgtbu_dot_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVSETGTBU_DOT, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evsetgtbu_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evsetgtbu_dot_r_r_r(dst, src, src2)) } +emit_evsetgtbu_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evsetgtbu_dot_r_r_r(dst, src, src2)) } inst_evsetgtbs_dot_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVSETGTBS_DOT, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evsetgtbs_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evsetgtbs_dot_r_r_r(dst, src, src2)) } +emit_evsetgtbs_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evsetgtbs_dot_r_r_r(dst, src, src2)) } inst_evsetltbu_dot_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVSETLTBU_DOT, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evsetltbu_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evsetltbu_dot_r_r_r(dst, src, src2)) } +emit_evsetltbu_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evsetltbu_dot_r_r_r(dst, src, src2)) } inst_evsetltbs_dot_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVSETLTBS_DOT, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evsetltbs_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evsetltbs_dot_r_r_r(dst, src, src2)) } +emit_evsetltbs_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evsetltbs_dot_r_r_r(dst, src, src2)) } inst_evsetlthu_dot_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVSETLTHU_DOT, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evsetlthu_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evsetlthu_dot_r_r_r(dst, src, src2)) } +emit_evsetlthu_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evsetlthu_dot_r_r_r(dst, src, src2)) } inst_evsetlths_dot_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVSETLTHS_DOT, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evsetlths_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evsetlths_dot_r_r_r(dst, src, src2)) } +emit_evsetlths_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evsetlths_dot_r_r_r(dst, src, src2)) } inst_evsetltwu_dot_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVSETLTWU_DOT, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evsetltwu_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evsetltwu_dot_r_r_r(dst, src, src2)) } +emit_evsetltwu_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evsetltwu_dot_r_r_r(dst, src, src2)) } inst_evsetltws_dot_r_r_r :: #force_inline proc "contextless" (dst: Register, src: Register, src2: Register) -> Instruction { return Instruction{mnemonic = .EVSETLTWS_DOT, operand_count = 3, length = 4, ops = {op_reg(dst), op_reg(src), op_reg(src2), {}}} } -emit_evsetltws_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append(instructions, inst_evsetltws_dot_r_r_r(dst, src, src2)) } +emit_evsetltws_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, src: Register, src2: Register) { append_elem(instructions, inst_evsetltws_dot_r_r_r(dst, src, src2)) } // ============================================================================= // Overload Groups diff --git a/core/rexcode/isa/ppc/tools/gen_mnemonic_builders.odin b/core/rexcode/isa/ppc/tools/gen_mnemonic_builders.odin index e27b21154..aff8398f4 100644 --- a/core/rexcode/isa/ppc/tools/gen_mnemonic_builders.odin +++ b/core/rexcode/isa/ppc/tools/gen_mnemonic_builders.odin @@ -364,7 +364,7 @@ generate_inst_proc :: proc(sb: ^strings.Builder, entry: Proc_Entry, pad: int) { strings.write_string(sb, " }\n") } -// emit__ :: #force_inline proc(instructions, params) { append(instructions, inst_<...>(args)) } +// emit__ :: #force_inline proc(instructions, params) { append_elem(instructions, inst_<...>(args)) } generate_emit_proc :: proc(sb: ^strings.Builder, entry: Proc_Entry, pad: int) { ops := entry.ops names := param_names(ops[:entry.count]) @@ -380,7 +380,7 @@ generate_emit_proc :: proc(sb: ^strings.Builder, entry: Proc_Entry, pad: int) { strings.write_string(sb, ": ") strings.write_string(sb, op_param_type(entry.ops[i])) } - strings.write_string(sb, ") { append(instructions, ") + strings.write_string(sb, ") { append_elem(instructions, ") strings.write_string(sb, entry.proc_name) strings.write_string(sb, "(") for i in 0.. Instruction { return Instruction{mnemonic = .SE_ILLEGAL, operand_count = 0, length = 2, mode = .PPC32_VLE, form_id = 1, ops = {{}, {}, {}, {}}} } -emit_se_illegal_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_se_illegal_none()) } +emit_se_illegal_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_se_illegal_none()) } inst_se_isync_none :: #force_inline proc "contextless" () -> Instruction { return Instruction{mnemonic = .SE_ISYNC, operand_count = 0, length = 2, mode = .PPC32_VLE, form_id = 1, ops = {{}, {}, {}, {}}} } -emit_se_isync_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_se_isync_none()) } +emit_se_isync_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_se_isync_none()) } inst_se_sc_none :: #force_inline proc "contextless" () -> Instruction { return Instruction{mnemonic = .SE_SC, operand_count = 0, length = 2, mode = .PPC32_VLE, form_id = 1, ops = {{}, {}, {}, {}}} } -emit_se_sc_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_se_sc_none()) } +emit_se_sc_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_se_sc_none()) } inst_se_blr_none :: #force_inline proc "contextless" () -> Instruction { return Instruction{mnemonic = .SE_BLR, operand_count = 0, length = 2, mode = .PPC32_VLE, form_id = 1, ops = {{}, {}, {}, {}}} } -emit_se_blr_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_se_blr_none()) } +emit_se_blr_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_se_blr_none()) } inst_se_blrl_none :: #force_inline proc "contextless" () -> Instruction { return Instruction{mnemonic = .SE_BLRL, operand_count = 0, length = 2, mode = .PPC32_VLE, form_id = 1, ops = {{}, {}, {}, {}}} } -emit_se_blrl_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_se_blrl_none()) } +emit_se_blrl_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_se_blrl_none()) } inst_se_bctr_none :: #force_inline proc "contextless" () -> Instruction { return Instruction{mnemonic = .SE_BCTR, operand_count = 0, length = 2, mode = .PPC32_VLE, form_id = 1, ops = {{}, {}, {}, {}}} } -emit_se_bctr_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_se_bctr_none()) } +emit_se_bctr_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_se_bctr_none()) } inst_se_bctrl_none :: #force_inline proc "contextless" () -> Instruction { return Instruction{mnemonic = .SE_BCTRL, operand_count = 0, length = 2, mode = .PPC32_VLE, form_id = 1, ops = {{}, {}, {}, {}}} } -emit_se_bctrl_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_se_bctrl_none()) } +emit_se_bctrl_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_se_bctrl_none()) } inst_se_rfi_none :: #force_inline proc "contextless" () -> Instruction { return Instruction{mnemonic = .SE_RFI, operand_count = 0, length = 2, mode = .PPC32_VLE, form_id = 1, ops = {{}, {}, {}, {}}} } -emit_se_rfi_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_se_rfi_none()) } +emit_se_rfi_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_se_rfi_none()) } inst_se_rfci_none :: #force_inline proc "contextless" () -> Instruction { return Instruction{mnemonic = .SE_RFCI, operand_count = 0, length = 2, mode = .PPC32_VLE, form_id = 1, ops = {{}, {}, {}, {}}} } -emit_se_rfci_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_se_rfci_none()) } +emit_se_rfci_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_se_rfci_none()) } inst_se_rfdi_none :: #force_inline proc "contextless" () -> Instruction { return Instruction{mnemonic = .SE_RFDI, operand_count = 0, length = 2, mode = .PPC32_VLE, form_id = 1, ops = {{}, {}, {}, {}}} } -emit_se_rfdi_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_se_rfdi_none()) } +emit_se_rfdi_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_se_rfdi_none()) } inst_se_rfmci_none :: #force_inline proc "contextless" () -> Instruction { return Instruction{mnemonic = .SE_RFMCI, operand_count = 0, length = 2, mode = .PPC32_VLE, form_id = 1, ops = {{}, {}, {}, {}}} } -emit_se_rfmci_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_se_rfmci_none()) } +emit_se_rfmci_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_se_rfmci_none()) } inst_se_rfgi_none :: #force_inline proc "contextless" () -> Instruction { return Instruction{mnemonic = .SE_RFGI, operand_count = 0, length = 2, mode = .PPC32_VLE, form_id = 1, ops = {{}, {}, {}, {}}} } -emit_se_rfgi_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_se_rfgi_none()) } +emit_se_rfgi_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_se_rfgi_none()) } inst_se_not_r :: #force_inline proc "contextless" (rd: Register) -> Instruction { return Instruction{mnemonic = .SE_NOT, operand_count = 1, length = 2, mode = .PPC32_VLE, form_id = 1, ops = {op_reg(rd), {}, {}, {}}} } -emit_se_not_r :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: Register) { append(instructions, inst_se_not_r(rd)) } +emit_se_not_r :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: Register) { append_elem(instructions, inst_se_not_r(rd)) } inst_se_neg_r :: #force_inline proc "contextless" (rd: Register) -> Instruction { return Instruction{mnemonic = .SE_NEG, operand_count = 1, length = 2, mode = .PPC32_VLE, form_id = 1, ops = {op_reg(rd), {}, {}, {}}} } -emit_se_neg_r :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: Register) { append(instructions, inst_se_neg_r(rd)) } +emit_se_neg_r :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: Register) { append_elem(instructions, inst_se_neg_r(rd)) } inst_se_mflr_r :: #force_inline proc "contextless" (rd: Register) -> Instruction { return Instruction{mnemonic = .SE_MFLR, operand_count = 1, length = 2, mode = .PPC32_VLE, form_id = 1, ops = {op_reg(rd), {}, {}, {}}} } -emit_se_mflr_r :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: Register) { append(instructions, inst_se_mflr_r(rd)) } +emit_se_mflr_r :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: Register) { append_elem(instructions, inst_se_mflr_r(rd)) } inst_se_mtlr_r :: #force_inline proc "contextless" (rd: Register) -> Instruction { return Instruction{mnemonic = .SE_MTLR, operand_count = 1, length = 2, mode = .PPC32_VLE, form_id = 1, ops = {op_reg(rd), {}, {}, {}}} } -emit_se_mtlr_r :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: Register) { append(instructions, inst_se_mtlr_r(rd)) } +emit_se_mtlr_r :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: Register) { append_elem(instructions, inst_se_mtlr_r(rd)) } inst_se_mfctr_r :: #force_inline proc "contextless" (rd: Register) -> Instruction { return Instruction{mnemonic = .SE_MFCTR, operand_count = 1, length = 2, mode = .PPC32_VLE, form_id = 1, ops = {op_reg(rd), {}, {}, {}}} } -emit_se_mfctr_r :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: Register) { append(instructions, inst_se_mfctr_r(rd)) } +emit_se_mfctr_r :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: Register) { append_elem(instructions, inst_se_mfctr_r(rd)) } inst_se_mtctr_r :: #force_inline proc "contextless" (rd: Register) -> Instruction { return Instruction{mnemonic = .SE_MTCTR, operand_count = 1, length = 2, mode = .PPC32_VLE, form_id = 1, ops = {op_reg(rd), {}, {}, {}}} } -emit_se_mtctr_r :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: Register) { append(instructions, inst_se_mtctr_r(rd)) } +emit_se_mtctr_r :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: Register) { append_elem(instructions, inst_se_mtctr_r(rd)) } inst_se_extzb_r :: #force_inline proc "contextless" (rd: Register) -> Instruction { return Instruction{mnemonic = .SE_EXTZB, operand_count = 1, length = 2, mode = .PPC32_VLE, form_id = 1, ops = {op_reg(rd), {}, {}, {}}} } -emit_se_extzb_r :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: Register) { append(instructions, inst_se_extzb_r(rd)) } +emit_se_extzb_r :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: Register) { append_elem(instructions, inst_se_extzb_r(rd)) } inst_se_extsb_r :: #force_inline proc "contextless" (rd: Register) -> Instruction { return Instruction{mnemonic = .SE_EXTSB, operand_count = 1, length = 2, mode = .PPC32_VLE, form_id = 1, ops = {op_reg(rd), {}, {}, {}}} } -emit_se_extsb_r :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: Register) { append(instructions, inst_se_extsb_r(rd)) } +emit_se_extsb_r :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: Register) { append_elem(instructions, inst_se_extsb_r(rd)) } inst_se_extzh_r :: #force_inline proc "contextless" (rd: Register) -> Instruction { return Instruction{mnemonic = .SE_EXTZH, operand_count = 1, length = 2, mode = .PPC32_VLE, form_id = 1, ops = {op_reg(rd), {}, {}, {}}} } -emit_se_extzh_r :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: Register) { append(instructions, inst_se_extzh_r(rd)) } +emit_se_extzh_r :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: Register) { append_elem(instructions, inst_se_extzh_r(rd)) } inst_se_extsh_r :: #force_inline proc "contextless" (rd: Register) -> Instruction { return Instruction{mnemonic = .SE_EXTSH, operand_count = 1, length = 2, mode = .PPC32_VLE, form_id = 1, ops = {op_reg(rd), {}, {}, {}}} } -emit_se_extsh_r :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: Register) { append(instructions, inst_se_extsh_r(rd)) } +emit_se_extsh_r :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: Register) { append_elem(instructions, inst_se_extsh_r(rd)) } inst_se_mr_r_r :: #force_inline proc "contextless" (rd: Register, r2: Register) -> Instruction { return Instruction{mnemonic = .SE_MR, operand_count = 2, length = 2, mode = .PPC32_VLE, form_id = 1, ops = {op_reg(rd), op_reg(r2), {}, {}}} } -emit_se_mr_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: Register, r2: Register) { append(instructions, inst_se_mr_r_r(rd, r2)) } +emit_se_mr_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: Register, r2: Register) { append_elem(instructions, inst_se_mr_r_r(rd, r2)) } inst_se_mtar_r_r :: #force_inline proc "contextless" (rd: Register, r2: Register) -> Instruction { return Instruction{mnemonic = .SE_MTAR, operand_count = 2, length = 2, mode = .PPC32_VLE, form_id = 1, ops = {op_reg(rd), op_reg(r2), {}, {}}} } -emit_se_mtar_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: Register, r2: Register) { append(instructions, inst_se_mtar_r_r(rd, r2)) } +emit_se_mtar_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: Register, r2: Register) { append_elem(instructions, inst_se_mtar_r_r(rd, r2)) } inst_se_mfar_r_r :: #force_inline proc "contextless" (rd: Register, r2: Register) -> Instruction { return Instruction{mnemonic = .SE_MFAR, operand_count = 2, length = 2, mode = .PPC32_VLE, form_id = 1, ops = {op_reg(rd), op_reg(r2), {}, {}}} } -emit_se_mfar_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: Register, r2: Register) { append(instructions, inst_se_mfar_r_r(rd, r2)) } +emit_se_mfar_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: Register, r2: Register) { append_elem(instructions, inst_se_mfar_r_r(rd, r2)) } inst_se_add_r_r :: #force_inline proc "contextless" (rd: Register, r2: Register) -> Instruction { return Instruction{mnemonic = .SE_ADD, operand_count = 2, length = 2, mode = .PPC32_VLE, form_id = 1, ops = {op_reg(rd), op_reg(r2), {}, {}}} } -emit_se_add_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: Register, r2: Register) { append(instructions, inst_se_add_r_r(rd, r2)) } +emit_se_add_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: Register, r2: Register) { append_elem(instructions, inst_se_add_r_r(rd, r2)) } inst_se_mullw_r_r :: #force_inline proc "contextless" (rd: Register, r2: Register) -> Instruction { return Instruction{mnemonic = .SE_MULLW, operand_count = 2, length = 2, mode = .PPC32_VLE, form_id = 1, ops = {op_reg(rd), op_reg(r2), {}, {}}} } -emit_se_mullw_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: Register, r2: Register) { append(instructions, inst_se_mullw_r_r(rd, r2)) } +emit_se_mullw_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: Register, r2: Register) { append_elem(instructions, inst_se_mullw_r_r(rd, r2)) } inst_se_sub_r_r :: #force_inline proc "contextless" (rd: Register, r2: Register) -> Instruction { return Instruction{mnemonic = .SE_SUB, operand_count = 2, length = 2, mode = .PPC32_VLE, form_id = 1, ops = {op_reg(rd), op_reg(r2), {}, {}}} } -emit_se_sub_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: Register, r2: Register) { append(instructions, inst_se_sub_r_r(rd, r2)) } +emit_se_sub_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: Register, r2: Register) { append_elem(instructions, inst_se_sub_r_r(rd, r2)) } inst_se_subf_r_r :: #force_inline proc "contextless" (rd: Register, r2: Register) -> Instruction { return Instruction{mnemonic = .SE_SUBF, operand_count = 2, length = 2, mode = .PPC32_VLE, form_id = 1, ops = {op_reg(rd), op_reg(r2), {}, {}}} } -emit_se_subf_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: Register, r2: Register) { append(instructions, inst_se_subf_r_r(rd, r2)) } +emit_se_subf_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: Register, r2: Register) { append_elem(instructions, inst_se_subf_r_r(rd, r2)) } inst_se_cmp_r_r :: #force_inline proc "contextless" (rd: Register, r2: Register) -> Instruction { return Instruction{mnemonic = .SE_CMP, operand_count = 2, length = 2, mode = .PPC32_VLE, form_id = 1, ops = {op_reg(rd), op_reg(r2), {}, {}}} } -emit_se_cmp_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: Register, r2: Register) { append(instructions, inst_se_cmp_r_r(rd, r2)) } +emit_se_cmp_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: Register, r2: Register) { append_elem(instructions, inst_se_cmp_r_r(rd, r2)) } inst_se_cmpl_r_r :: #force_inline proc "contextless" (rd: Register, r2: Register) -> Instruction { return Instruction{mnemonic = .SE_CMPL, operand_count = 2, length = 2, mode = .PPC32_VLE, form_id = 1, ops = {op_reg(rd), op_reg(r2), {}, {}}} } -emit_se_cmpl_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: Register, r2: Register) { append(instructions, inst_se_cmpl_r_r(rd, r2)) } +emit_se_cmpl_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: Register, r2: Register) { append_elem(instructions, inst_se_cmpl_r_r(rd, r2)) } inst_se_cmph_r_r :: #force_inline proc "contextless" (rd: Register, r2: Register) -> Instruction { return Instruction{mnemonic = .SE_CMPH, operand_count = 2, length = 2, mode = .PPC32_VLE, form_id = 1, ops = {op_reg(rd), op_reg(r2), {}, {}}} } -emit_se_cmph_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: Register, r2: Register) { append(instructions, inst_se_cmph_r_r(rd, r2)) } +emit_se_cmph_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: Register, r2: Register) { append_elem(instructions, inst_se_cmph_r_r(rd, r2)) } inst_se_cmphl_r_r :: #force_inline proc "contextless" (rd: Register, r2: Register) -> Instruction { return Instruction{mnemonic = .SE_CMPHL, operand_count = 2, length = 2, mode = .PPC32_VLE, form_id = 1, ops = {op_reg(rd), op_reg(r2), {}, {}}} } -emit_se_cmphl_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: Register, r2: Register) { append(instructions, inst_se_cmphl_r_r(rd, r2)) } +emit_se_cmphl_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: Register, r2: Register) { append_elem(instructions, inst_se_cmphl_r_r(rd, r2)) } inst_se_srw_r_r :: #force_inline proc "contextless" (rd: Register, r2: Register) -> Instruction { return Instruction{mnemonic = .SE_SRW, operand_count = 2, length = 2, mode = .PPC32_VLE, form_id = 1, ops = {op_reg(rd), op_reg(r2), {}, {}}} } -emit_se_srw_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: Register, r2: Register) { append(instructions, inst_se_srw_r_r(rd, r2)) } +emit_se_srw_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: Register, r2: Register) { append_elem(instructions, inst_se_srw_r_r(rd, r2)) } inst_se_sraw_r_r :: #force_inline proc "contextless" (rd: Register, r2: Register) -> Instruction { return Instruction{mnemonic = .SE_SRAW, operand_count = 2, length = 2, mode = .PPC32_VLE, form_id = 1, ops = {op_reg(rd), op_reg(r2), {}, {}}} } -emit_se_sraw_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: Register, r2: Register) { append(instructions, inst_se_sraw_r_r(rd, r2)) } +emit_se_sraw_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: Register, r2: Register) { append_elem(instructions, inst_se_sraw_r_r(rd, r2)) } inst_se_slw_r_r :: #force_inline proc "contextless" (rd: Register, r2: Register) -> Instruction { return Instruction{mnemonic = .SE_SLW, operand_count = 2, length = 2, mode = .PPC32_VLE, form_id = 1, ops = {op_reg(rd), op_reg(r2), {}, {}}} } -emit_se_slw_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: Register, r2: Register) { append(instructions, inst_se_slw_r_r(rd, r2)) } +emit_se_slw_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: Register, r2: Register) { append_elem(instructions, inst_se_slw_r_r(rd, r2)) } inst_se_or_r_r :: #force_inline proc "contextless" (rd: Register, r2: Register) -> Instruction { return Instruction{mnemonic = .SE_OR, operand_count = 2, length = 2, mode = .PPC32_VLE, form_id = 1, ops = {op_reg(rd), op_reg(r2), {}, {}}} } -emit_se_or_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: Register, r2: Register) { append(instructions, inst_se_or_r_r(rd, r2)) } +emit_se_or_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: Register, r2: Register) { append_elem(instructions, inst_se_or_r_r(rd, r2)) } inst_se_andc_r_r :: #force_inline proc "contextless" (rd: Register, r2: Register) -> Instruction { return Instruction{mnemonic = .SE_ANDC, operand_count = 2, length = 2, mode = .PPC32_VLE, form_id = 1, ops = {op_reg(rd), op_reg(r2), {}, {}}} } -emit_se_andc_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: Register, r2: Register) { append(instructions, inst_se_andc_r_r(rd, r2)) } +emit_se_andc_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: Register, r2: Register) { append_elem(instructions, inst_se_andc_r_r(rd, r2)) } inst_se_and_r_r :: #force_inline proc "contextless" (rd: Register, r2: Register) -> Instruction { return Instruction{mnemonic = .SE_AND, operand_count = 2, length = 2, mode = .PPC32_VLE, form_id = 1, ops = {op_reg(rd), op_reg(r2), {}, {}}} } -emit_se_and_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: Register, r2: Register) { append(instructions, inst_se_and_r_r(rd, r2)) } +emit_se_and_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: Register, r2: Register) { append_elem(instructions, inst_se_and_r_r(rd, r2)) } inst_se_and_dot_r_r :: #force_inline proc "contextless" (rd: Register, r2: Register) -> Instruction { return Instruction{mnemonic = .SE_AND_DOT, operand_count = 2, length = 2, mode = .PPC32_VLE, form_id = 1, ops = {op_reg(rd), op_reg(r2), {}, {}}} } -emit_se_and_dot_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: Register, r2: Register) { append(instructions, inst_se_and_dot_r_r(rd, r2)) } +emit_se_and_dot_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: Register, r2: Register) { append_elem(instructions, inst_se_and_dot_r_r(rd, r2)) } inst_se_addi_r_imm :: #force_inline proc "contextless" (rd: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .SE_ADDI, operand_count = 2, length = 2, mode = .PPC32_VLE, form_id = 1, ops = {op_reg(rd), op_imm(imm), {}, {}}} } -emit_se_addi_r_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: Register, imm: i64) { append(instructions, inst_se_addi_r_imm(rd, imm)) } +emit_se_addi_r_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: Register, imm: i64) { append_elem(instructions, inst_se_addi_r_imm(rd, imm)) } inst_se_cmpli_r_imm :: #force_inline proc "contextless" (rd: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .SE_CMPLI, operand_count = 2, length = 2, mode = .PPC32_VLE, form_id = 1, ops = {op_reg(rd), op_imm(imm), {}, {}}} } -emit_se_cmpli_r_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: Register, imm: i64) { append(instructions, inst_se_cmpli_r_imm(rd, imm)) } +emit_se_cmpli_r_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: Register, imm: i64) { append_elem(instructions, inst_se_cmpli_r_imm(rd, imm)) } inst_se_subi_r_imm :: #force_inline proc "contextless" (rd: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .SE_SUBI, operand_count = 2, length = 2, mode = .PPC32_VLE, form_id = 1, ops = {op_reg(rd), op_imm(imm), {}, {}}} } -emit_se_subi_r_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: Register, imm: i64) { append(instructions, inst_se_subi_r_imm(rd, imm)) } +emit_se_subi_r_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: Register, imm: i64) { append_elem(instructions, inst_se_subi_r_imm(rd, imm)) } inst_se_subi_dot_r_imm :: #force_inline proc "contextless" (rd: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .SE_SUBI_DOT, operand_count = 2, length = 2, mode = .PPC32_VLE, form_id = 1, ops = {op_reg(rd), op_imm(imm), {}, {}}} } -emit_se_subi_dot_r_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: Register, imm: i64) { append(instructions, inst_se_subi_dot_r_imm(rd, imm)) } +emit_se_subi_dot_r_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: Register, imm: i64) { append_elem(instructions, inst_se_subi_dot_r_imm(rd, imm)) } inst_se_cmpi_r_imm :: #force_inline proc "contextless" (rd: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .SE_CMPI, operand_count = 2, length = 2, mode = .PPC32_VLE, form_id = 1, ops = {op_reg(rd), op_imm(imm), {}, {}}} } -emit_se_cmpi_r_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: Register, imm: i64) { append(instructions, inst_se_cmpi_r_imm(rd, imm)) } +emit_se_cmpi_r_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: Register, imm: i64) { append_elem(instructions, inst_se_cmpi_r_imm(rd, imm)) } inst_se_bmaski_r_imm :: #force_inline proc "contextless" (rd: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .SE_BMASKI, operand_count = 2, length = 2, mode = .PPC32_VLE, form_id = 1, ops = {op_reg(rd), op_imm(imm), {}, {}}} } -emit_se_bmaski_r_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: Register, imm: i64) { append(instructions, inst_se_bmaski_r_imm(rd, imm)) } +emit_se_bmaski_r_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: Register, imm: i64) { append_elem(instructions, inst_se_bmaski_r_imm(rd, imm)) } inst_se_andi_r_imm :: #force_inline proc "contextless" (rd: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .SE_ANDI, operand_count = 2, length = 2, mode = .PPC32_VLE, form_id = 1, ops = {op_reg(rd), op_imm(imm), {}, {}}} } -emit_se_andi_r_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: Register, imm: i64) { append(instructions, inst_se_andi_r_imm(rd, imm)) } +emit_se_andi_r_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: Register, imm: i64) { append_elem(instructions, inst_se_andi_r_imm(rd, imm)) } inst_se_nop_r_r :: #force_inline proc "contextless" (rd: Register, r2: Register) -> Instruction { return Instruction{mnemonic = .SE_NOP, operand_count = 2, length = 2, mode = .PPC32_VLE, form_id = 1, ops = {op_reg(rd), op_reg(r2), {}, {}}} } -emit_se_nop_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: Register, r2: Register) { append(instructions, inst_se_nop_r_r(rd, r2)) } +emit_se_nop_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: Register, r2: Register) { append_elem(instructions, inst_se_nop_r_r(rd, r2)) } inst_se_li_r_imm :: #force_inline proc "contextless" (rd: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .SE_LI, operand_count = 2, length = 2, mode = .PPC32_VLE, form_id = 1, ops = {op_reg(rd), op_imm(imm), {}, {}}} } -emit_se_li_r_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: Register, imm: i64) { append(instructions, inst_se_li_r_imm(rd, imm)) } +emit_se_li_r_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: Register, imm: i64) { append_elem(instructions, inst_se_li_r_imm(rd, imm)) } inst_se_bclri_r_imm :: #force_inline proc "contextless" (rd: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .SE_BCLRI, operand_count = 2, length = 2, mode = .PPC32_VLE, form_id = 1, ops = {op_reg(rd), op_imm(imm), {}, {}}} } -emit_se_bclri_r_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: Register, imm: i64) { append(instructions, inst_se_bclri_r_imm(rd, imm)) } +emit_se_bclri_r_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: Register, imm: i64) { append_elem(instructions, inst_se_bclri_r_imm(rd, imm)) } inst_se_bgeni_r_imm :: #force_inline proc "contextless" (rd: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .SE_BGENI, operand_count = 2, length = 2, mode = .PPC32_VLE, form_id = 1, ops = {op_reg(rd), op_imm(imm), {}, {}}} } -emit_se_bgeni_r_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: Register, imm: i64) { append(instructions, inst_se_bgeni_r_imm(rd, imm)) } +emit_se_bgeni_r_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: Register, imm: i64) { append_elem(instructions, inst_se_bgeni_r_imm(rd, imm)) } inst_se_bseti_r_imm :: #force_inline proc "contextless" (rd: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .SE_BSETI, operand_count = 2, length = 2, mode = .PPC32_VLE, form_id = 1, ops = {op_reg(rd), op_imm(imm), {}, {}}} } -emit_se_bseti_r_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: Register, imm: i64) { append(instructions, inst_se_bseti_r_imm(rd, imm)) } +emit_se_bseti_r_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: Register, imm: i64) { append_elem(instructions, inst_se_bseti_r_imm(rd, imm)) } inst_se_btsti_r_imm :: #force_inline proc "contextless" (rd: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .SE_BTSTI, operand_count = 2, length = 2, mode = .PPC32_VLE, form_id = 1, ops = {op_reg(rd), op_imm(imm), {}, {}}} } -emit_se_btsti_r_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: Register, imm: i64) { append(instructions, inst_se_btsti_r_imm(rd, imm)) } +emit_se_btsti_r_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: Register, imm: i64) { append_elem(instructions, inst_se_btsti_r_imm(rd, imm)) } inst_se_srwi_r_imm :: #force_inline proc "contextless" (rd: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .SE_SRWI, operand_count = 2, length = 2, mode = .PPC32_VLE, form_id = 1, ops = {op_reg(rd), op_imm(imm), {}, {}}} } -emit_se_srwi_r_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: Register, imm: i64) { append(instructions, inst_se_srwi_r_imm(rd, imm)) } +emit_se_srwi_r_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: Register, imm: i64) { append_elem(instructions, inst_se_srwi_r_imm(rd, imm)) } inst_se_srawi_r_imm :: #force_inline proc "contextless" (rd: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .SE_SRAWI, operand_count = 2, length = 2, mode = .PPC32_VLE, form_id = 1, ops = {op_reg(rd), op_imm(imm), {}, {}}} } -emit_se_srawi_r_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: Register, imm: i64) { append(instructions, inst_se_srawi_r_imm(rd, imm)) } +emit_se_srawi_r_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: Register, imm: i64) { append_elem(instructions, inst_se_srawi_r_imm(rd, imm)) } inst_se_slwi_r_imm :: #force_inline proc "contextless" (rd: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .SE_SLWI, operand_count = 2, length = 2, mode = .PPC32_VLE, form_id = 1, ops = {op_reg(rd), op_imm(imm), {}, {}}} } -emit_se_slwi_r_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: Register, imm: i64) { append(instructions, inst_se_slwi_r_imm(rd, imm)) } +emit_se_slwi_r_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: Register, imm: i64) { append_elem(instructions, inst_se_slwi_r_imm(rd, imm)) } inst_se_lbz_r_mem :: #force_inline proc "contextless" (rd: Register, mem: Memory) -> Instruction { return Instruction{mnemonic = .SE_LBZ, operand_count = 2, length = 2, mode = .PPC32_VLE, form_id = 1, ops = {op_reg(rd), op_mem(mem), {}, {}}} } -emit_se_lbz_r_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: Register, mem: Memory) { append(instructions, inst_se_lbz_r_mem(rd, mem)) } +emit_se_lbz_r_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: Register, mem: Memory) { append_elem(instructions, inst_se_lbz_r_mem(rd, mem)) } inst_se_stb_r_mem :: #force_inline proc "contextless" (rd: Register, mem: Memory) -> Instruction { return Instruction{mnemonic = .SE_STB, operand_count = 2, length = 2, mode = .PPC32_VLE, form_id = 1, ops = {op_reg(rd), op_mem(mem), {}, {}}} } -emit_se_stb_r_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: Register, mem: Memory) { append(instructions, inst_se_stb_r_mem(rd, mem)) } +emit_se_stb_r_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: Register, mem: Memory) { append_elem(instructions, inst_se_stb_r_mem(rd, mem)) } inst_se_lhz_r_mem :: #force_inline proc "contextless" (rd: Register, mem: Memory) -> Instruction { return Instruction{mnemonic = .SE_LHZ, operand_count = 2, length = 2, mode = .PPC32_VLE, form_id = 1, ops = {op_reg(rd), op_mem(mem), {}, {}}} } -emit_se_lhz_r_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: Register, mem: Memory) { append(instructions, inst_se_lhz_r_mem(rd, mem)) } +emit_se_lhz_r_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: Register, mem: Memory) { append_elem(instructions, inst_se_lhz_r_mem(rd, mem)) } inst_se_sth_r_mem :: #force_inline proc "contextless" (rd: Register, mem: Memory) -> Instruction { return Instruction{mnemonic = .SE_STH, operand_count = 2, length = 2, mode = .PPC32_VLE, form_id = 1, ops = {op_reg(rd), op_mem(mem), {}, {}}} } -emit_se_sth_r_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: Register, mem: Memory) { append(instructions, inst_se_sth_r_mem(rd, mem)) } +emit_se_sth_r_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: Register, mem: Memory) { append_elem(instructions, inst_se_sth_r_mem(rd, mem)) } inst_se_lwz_r_mem :: #force_inline proc "contextless" (rd: Register, mem: Memory) -> Instruction { return Instruction{mnemonic = .SE_LWZ, operand_count = 2, length = 2, mode = .PPC32_VLE, form_id = 1, ops = {op_reg(rd), op_mem(mem), {}, {}}} } -emit_se_lwz_r_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: Register, mem: Memory) { append(instructions, inst_se_lwz_r_mem(rd, mem)) } +emit_se_lwz_r_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: Register, mem: Memory) { append_elem(instructions, inst_se_lwz_r_mem(rd, mem)) } inst_se_stw_r_mem :: #force_inline proc "contextless" (rd: Register, mem: Memory) -> Instruction { return Instruction{mnemonic = .SE_STW, operand_count = 2, length = 2, mode = .PPC32_VLE, form_id = 1, ops = {op_reg(rd), op_mem(mem), {}, {}}} } -emit_se_stw_r_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: Register, mem: Memory) { append(instructions, inst_se_stw_r_mem(rd, mem)) } +emit_se_stw_r_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: Register, mem: Memory) { append_elem(instructions, inst_se_stw_r_mem(rd, mem)) } inst_se_bge_rel :: #force_inline proc "contextless" (target: u32) -> Instruction { return Instruction{mnemonic = .SE_BGE, operand_count = 1, length = 2, mode = .PPC32_VLE, form_id = 1, ops = {op_label(target), {}, {}, {}}} } -emit_se_bge_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, target: u32) { append(instructions, inst_se_bge_rel(target)) } +emit_se_bge_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, target: u32) { append_elem(instructions, inst_se_bge_rel(target)) } inst_se_bnl_rel :: #force_inline proc "contextless" (target: u32) -> Instruction { return Instruction{mnemonic = .SE_BNL, operand_count = 1, length = 2, mode = .PPC32_VLE, form_id = 1, ops = {op_label(target), {}, {}, {}}} } -emit_se_bnl_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, target: u32) { append(instructions, inst_se_bnl_rel(target)) } +emit_se_bnl_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, target: u32) { append_elem(instructions, inst_se_bnl_rel(target)) } inst_se_ble_rel :: #force_inline proc "contextless" (target: u32) -> Instruction { return Instruction{mnemonic = .SE_BLE, operand_count = 1, length = 2, mode = .PPC32_VLE, form_id = 1, ops = {op_label(target), {}, {}, {}}} } -emit_se_ble_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, target: u32) { append(instructions, inst_se_ble_rel(target)) } +emit_se_ble_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, target: u32) { append_elem(instructions, inst_se_ble_rel(target)) } inst_se_bng_rel :: #force_inline proc "contextless" (target: u32) -> Instruction { return Instruction{mnemonic = .SE_BNG, operand_count = 1, length = 2, mode = .PPC32_VLE, form_id = 1, ops = {op_label(target), {}, {}, {}}} } -emit_se_bng_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, target: u32) { append(instructions, inst_se_bng_rel(target)) } +emit_se_bng_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, target: u32) { append_elem(instructions, inst_se_bng_rel(target)) } inst_se_bne_rel :: #force_inline proc "contextless" (target: u32) -> Instruction { return Instruction{mnemonic = .SE_BNE, operand_count = 1, length = 2, mode = .PPC32_VLE, form_id = 1, ops = {op_label(target), {}, {}, {}}} } -emit_se_bne_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, target: u32) { append(instructions, inst_se_bne_rel(target)) } +emit_se_bne_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, target: u32) { append_elem(instructions, inst_se_bne_rel(target)) } inst_se_bns_rel :: #force_inline proc "contextless" (target: u32) -> Instruction { return Instruction{mnemonic = .SE_BNS, operand_count = 1, length = 2, mode = .PPC32_VLE, form_id = 1, ops = {op_label(target), {}, {}, {}}} } -emit_se_bns_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, target: u32) { append(instructions, inst_se_bns_rel(target)) } +emit_se_bns_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, target: u32) { append_elem(instructions, inst_se_bns_rel(target)) } inst_se_bnu_rel :: #force_inline proc "contextless" (target: u32) -> Instruction { return Instruction{mnemonic = .SE_BNU, operand_count = 1, length = 2, mode = .PPC32_VLE, form_id = 1, ops = {op_label(target), {}, {}, {}}} } -emit_se_bnu_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, target: u32) { append(instructions, inst_se_bnu_rel(target)) } +emit_se_bnu_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, target: u32) { append_elem(instructions, inst_se_bnu_rel(target)) } inst_se_bf_rel :: #force_inline proc "contextless" (target: u32) -> Instruction { return Instruction{mnemonic = .SE_BF, operand_count = 1, length = 2, mode = .PPC32_VLE, form_id = 1, ops = {op_label(target), {}, {}, {}}} } -emit_se_bf_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, target: u32) { append(instructions, inst_se_bf_rel(target)) } +emit_se_bf_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, target: u32) { append_elem(instructions, inst_se_bf_rel(target)) } inst_se_blt_rel :: #force_inline proc "contextless" (target: u32) -> Instruction { return Instruction{mnemonic = .SE_BLT, operand_count = 1, length = 2, mode = .PPC32_VLE, form_id = 1, ops = {op_label(target), {}, {}, {}}} } -emit_se_blt_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, target: u32) { append(instructions, inst_se_blt_rel(target)) } +emit_se_blt_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, target: u32) { append_elem(instructions, inst_se_blt_rel(target)) } inst_se_bgt_rel :: #force_inline proc "contextless" (target: u32) -> Instruction { return Instruction{mnemonic = .SE_BGT, operand_count = 1, length = 2, mode = .PPC32_VLE, form_id = 1, ops = {op_label(target), {}, {}, {}}} } -emit_se_bgt_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, target: u32) { append(instructions, inst_se_bgt_rel(target)) } +emit_se_bgt_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, target: u32) { append_elem(instructions, inst_se_bgt_rel(target)) } inst_se_beq_rel :: #force_inline proc "contextless" (target: u32) -> Instruction { return Instruction{mnemonic = .SE_BEQ, operand_count = 1, length = 2, mode = .PPC32_VLE, form_id = 1, ops = {op_label(target), {}, {}, {}}} } -emit_se_beq_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, target: u32) { append(instructions, inst_se_beq_rel(target)) } +emit_se_beq_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, target: u32) { append_elem(instructions, inst_se_beq_rel(target)) } inst_se_bso_rel :: #force_inline proc "contextless" (target: u32) -> Instruction { return Instruction{mnemonic = .SE_BSO, operand_count = 1, length = 2, mode = .PPC32_VLE, form_id = 1, ops = {op_label(target), {}, {}, {}}} } -emit_se_bso_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, target: u32) { append(instructions, inst_se_bso_rel(target)) } +emit_se_bso_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, target: u32) { append_elem(instructions, inst_se_bso_rel(target)) } inst_se_bun_rel :: #force_inline proc "contextless" (target: u32) -> Instruction { return Instruction{mnemonic = .SE_BUN, operand_count = 1, length = 2, mode = .PPC32_VLE, form_id = 1, ops = {op_label(target), {}, {}, {}}} } -emit_se_bun_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, target: u32) { append(instructions, inst_se_bun_rel(target)) } +emit_se_bun_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, target: u32) { append_elem(instructions, inst_se_bun_rel(target)) } inst_se_bt_rel :: #force_inline proc "contextless" (target: u32) -> Instruction { return Instruction{mnemonic = .SE_BT, operand_count = 1, length = 2, mode = .PPC32_VLE, form_id = 1, ops = {op_label(target), {}, {}, {}}} } -emit_se_bt_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, target: u32) { append(instructions, inst_se_bt_rel(target)) } +emit_se_bt_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, target: u32) { append_elem(instructions, inst_se_bt_rel(target)) } inst_se_bc_bo_crb_rel :: #force_inline proc "contextless" (imm: i64, imm2: i64, target: u32) -> Instruction { return Instruction{mnemonic = .SE_BC, operand_count = 3, length = 2, mode = .PPC32_VLE, form_id = 1, ops = {op_imm(imm), op_imm(imm2), op_label(target), {}}} } -emit_se_bc_bo_crb_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, imm2: i64, target: u32) { append(instructions, inst_se_bc_bo_crb_rel(imm, imm2, target)) } +emit_se_bc_bo_crb_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, imm2: i64, target: u32) { append_elem(instructions, inst_se_bc_bo_crb_rel(imm, imm2, target)) } inst_se_b_rel :: #force_inline proc "contextless" (target: u32) -> Instruction { return Instruction{mnemonic = .SE_B, operand_count = 1, length = 2, mode = .PPC32_VLE, form_id = 1, ops = {op_label(target), {}, {}, {}}} } -emit_se_b_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, target: u32) { append(instructions, inst_se_b_rel(target)) } +emit_se_b_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, target: u32) { append_elem(instructions, inst_se_b_rel(target)) } inst_se_bl_rel :: #force_inline proc "contextless" (target: u32) -> Instruction { return Instruction{mnemonic = .SE_BL, operand_count = 1, length = 2, mode = .PPC32_VLE, form_id = 1, ops = {op_label(target), {}, {}, {}}} } -emit_se_bl_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, target: u32) { append(instructions, inst_se_bl_rel(target)) } +emit_se_bl_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, target: u32) { append_elem(instructions, inst_se_bl_rel(target)) } inst_e_lbzu_r_r :: #force_inline proc "contextless" (rd: Register, r2: Register) -> Instruction { return Instruction{mnemonic = .E_LBZU, operand_count = 2, length = 4, mode = .PPC32_VLE, form_id = 1, ops = {op_reg(rd), op_reg(r2), {}, {}}} } -emit_e_lbzu_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: Register, r2: Register) { append(instructions, inst_e_lbzu_r_r(rd, r2)) } +emit_e_lbzu_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: Register, r2: Register) { append_elem(instructions, inst_e_lbzu_r_r(rd, r2)) } inst_e_lhau_r_r :: #force_inline proc "contextless" (rd: Register, r2: Register) -> Instruction { return Instruction{mnemonic = .E_LHAU, operand_count = 2, length = 4, mode = .PPC32_VLE, form_id = 1, ops = {op_reg(rd), op_reg(r2), {}, {}}} } -emit_e_lhau_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: Register, r2: Register) { append(instructions, inst_e_lhau_r_r(rd, r2)) } +emit_e_lhau_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: Register, r2: Register) { append_elem(instructions, inst_e_lhau_r_r(rd, r2)) } inst_e_lhzu_r_r :: #force_inline proc "contextless" (rd: Register, r2: Register) -> Instruction { return Instruction{mnemonic = .E_LHZU, operand_count = 2, length = 4, mode = .PPC32_VLE, form_id = 1, ops = {op_reg(rd), op_reg(r2), {}, {}}} } -emit_e_lhzu_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: Register, r2: Register) { append(instructions, inst_e_lhzu_r_r(rd, r2)) } +emit_e_lhzu_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: Register, r2: Register) { append_elem(instructions, inst_e_lhzu_r_r(rd, r2)) } inst_e_lmw_r_r :: #force_inline proc "contextless" (rd: Register, r2: Register) -> Instruction { return Instruction{mnemonic = .E_LMW, operand_count = 2, length = 4, mode = .PPC32_VLE, form_id = 1, ops = {op_reg(rd), op_reg(r2), {}, {}}} } -emit_e_lmw_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: Register, r2: Register) { append(instructions, inst_e_lmw_r_r(rd, r2)) } +emit_e_lmw_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: Register, r2: Register) { append_elem(instructions, inst_e_lmw_r_r(rd, r2)) } inst_e_lwzu_r_r :: #force_inline proc "contextless" (rd: Register, r2: Register) -> Instruction { return Instruction{mnemonic = .E_LWZU, operand_count = 2, length = 4, mode = .PPC32_VLE, form_id = 1, ops = {op_reg(rd), op_reg(r2), {}, {}}} } -emit_e_lwzu_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: Register, r2: Register) { append(instructions, inst_e_lwzu_r_r(rd, r2)) } +emit_e_lwzu_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: Register, r2: Register) { append_elem(instructions, inst_e_lwzu_r_r(rd, r2)) } inst_e_stbu_r_r :: #force_inline proc "contextless" (rd: Register, r2: Register) -> Instruction { return Instruction{mnemonic = .E_STBU, operand_count = 2, length = 4, mode = .PPC32_VLE, form_id = 1, ops = {op_reg(rd), op_reg(r2), {}, {}}} } -emit_e_stbu_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: Register, r2: Register) { append(instructions, inst_e_stbu_r_r(rd, r2)) } +emit_e_stbu_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: Register, r2: Register) { append_elem(instructions, inst_e_stbu_r_r(rd, r2)) } inst_e_sthu_r_r :: #force_inline proc "contextless" (rd: Register, r2: Register) -> Instruction { return Instruction{mnemonic = .E_STHU, operand_count = 2, length = 4, mode = .PPC32_VLE, form_id = 1, ops = {op_reg(rd), op_reg(r2), {}, {}}} } -emit_e_sthu_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: Register, r2: Register) { append(instructions, inst_e_sthu_r_r(rd, r2)) } +emit_e_sthu_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: Register, r2: Register) { append_elem(instructions, inst_e_sthu_r_r(rd, r2)) } inst_e_stwu_r_r :: #force_inline proc "contextless" (rd: Register, r2: Register) -> Instruction { return Instruction{mnemonic = .E_STWU, operand_count = 2, length = 4, mode = .PPC32_VLE, form_id = 1, ops = {op_reg(rd), op_reg(r2), {}, {}}} } -emit_e_stwu_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: Register, r2: Register) { append(instructions, inst_e_stwu_r_r(rd, r2)) } +emit_e_stwu_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: Register, r2: Register) { append_elem(instructions, inst_e_stwu_r_r(rd, r2)) } inst_e_stmw_r_r :: #force_inline proc "contextless" (rd: Register, r2: Register) -> Instruction { return Instruction{mnemonic = .E_STMW, operand_count = 2, length = 4, mode = .PPC32_VLE, form_id = 1, ops = {op_reg(rd), op_reg(r2), {}, {}}} } -emit_e_stmw_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: Register, r2: Register) { append(instructions, inst_e_stmw_r_r(rd, r2)) } +emit_e_stmw_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: Register, r2: Register) { append_elem(instructions, inst_e_stmw_r_r(rd, r2)) } inst_e_lmvgprw_r_r :: #force_inline proc "contextless" (rd: Register, r2: Register) -> Instruction { return Instruction{mnemonic = .E_LMVGPRW, operand_count = 2, length = 4, mode = .PPC32_VLE, form_id = 1, ops = {op_reg(rd), op_reg(r2), {}, {}}} } -emit_e_lmvgprw_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: Register, r2: Register) { append(instructions, inst_e_lmvgprw_r_r(rd, r2)) } +emit_e_lmvgprw_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: Register, r2: Register) { append_elem(instructions, inst_e_lmvgprw_r_r(rd, r2)) } inst_e_ldmvgprw_r_r :: #force_inline proc "contextless" (rd: Register, r2: Register) -> Instruction { return Instruction{mnemonic = .E_LDMVGPRW, operand_count = 2, length = 4, mode = .PPC32_VLE, form_id = 1, ops = {op_reg(rd), op_reg(r2), {}, {}}} } -emit_e_ldmvgprw_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: Register, r2: Register) { append(instructions, inst_e_ldmvgprw_r_r(rd, r2)) } +emit_e_ldmvgprw_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: Register, r2: Register) { append_elem(instructions, inst_e_ldmvgprw_r_r(rd, r2)) } inst_e_stmvgprw_r_r :: #force_inline proc "contextless" (rd: Register, r2: Register) -> Instruction { return Instruction{mnemonic = .E_STMVGPRW, operand_count = 2, length = 4, mode = .PPC32_VLE, form_id = 1, ops = {op_reg(rd), op_reg(r2), {}, {}}} } -emit_e_stmvgprw_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: Register, r2: Register) { append(instructions, inst_e_stmvgprw_r_r(rd, r2)) } +emit_e_stmvgprw_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: Register, r2: Register) { append_elem(instructions, inst_e_stmvgprw_r_r(rd, r2)) } inst_e_lmvsprw_r_r :: #force_inline proc "contextless" (rd: Register, r2: Register) -> Instruction { return Instruction{mnemonic = .E_LMVSPRW, operand_count = 2, length = 4, mode = .PPC32_VLE, form_id = 1, ops = {op_reg(rd), op_reg(r2), {}, {}}} } -emit_e_lmvsprw_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: Register, r2: Register) { append(instructions, inst_e_lmvsprw_r_r(rd, r2)) } +emit_e_lmvsprw_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: Register, r2: Register) { append_elem(instructions, inst_e_lmvsprw_r_r(rd, r2)) } inst_e_ldmvsprw_r_r :: #force_inline proc "contextless" (rd: Register, r2: Register) -> Instruction { return Instruction{mnemonic = .E_LDMVSPRW, operand_count = 2, length = 4, mode = .PPC32_VLE, form_id = 1, ops = {op_reg(rd), op_reg(r2), {}, {}}} } -emit_e_ldmvsprw_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: Register, r2: Register) { append(instructions, inst_e_ldmvsprw_r_r(rd, r2)) } +emit_e_ldmvsprw_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: Register, r2: Register) { append_elem(instructions, inst_e_ldmvsprw_r_r(rd, r2)) } inst_e_stmvsprw_r_r :: #force_inline proc "contextless" (rd: Register, r2: Register) -> Instruction { return Instruction{mnemonic = .E_STMVSPRW, operand_count = 2, length = 4, mode = .PPC32_VLE, form_id = 1, ops = {op_reg(rd), op_reg(r2), {}, {}}} } -emit_e_stmvsprw_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: Register, r2: Register) { append(instructions, inst_e_stmvsprw_r_r(rd, r2)) } +emit_e_stmvsprw_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: Register, r2: Register) { append_elem(instructions, inst_e_stmvsprw_r_r(rd, r2)) } inst_e_lmvsrrw_r_r :: #force_inline proc "contextless" (rd: Register, r2: Register) -> Instruction { return Instruction{mnemonic = .E_LMVSRRW, operand_count = 2, length = 4, mode = .PPC32_VLE, form_id = 1, ops = {op_reg(rd), op_reg(r2), {}, {}}} } -emit_e_lmvsrrw_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: Register, r2: Register) { append(instructions, inst_e_lmvsrrw_r_r(rd, r2)) } +emit_e_lmvsrrw_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: Register, r2: Register) { append_elem(instructions, inst_e_lmvsrrw_r_r(rd, r2)) } inst_e_ldmvsrrw_r_r :: #force_inline proc "contextless" (rd: Register, r2: Register) -> Instruction { return Instruction{mnemonic = .E_LDMVSRRW, operand_count = 2, length = 4, mode = .PPC32_VLE, form_id = 1, ops = {op_reg(rd), op_reg(r2), {}, {}}} } -emit_e_ldmvsrrw_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: Register, r2: Register) { append(instructions, inst_e_ldmvsrrw_r_r(rd, r2)) } +emit_e_ldmvsrrw_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: Register, r2: Register) { append_elem(instructions, inst_e_ldmvsrrw_r_r(rd, r2)) } inst_e_stmvsrrw_r_r :: #force_inline proc "contextless" (rd: Register, r2: Register) -> Instruction { return Instruction{mnemonic = .E_STMVSRRW, operand_count = 2, length = 4, mode = .PPC32_VLE, form_id = 1, ops = {op_reg(rd), op_reg(r2), {}, {}}} } -emit_e_stmvsrrw_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: Register, r2: Register) { append(instructions, inst_e_stmvsrrw_r_r(rd, r2)) } +emit_e_stmvsrrw_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: Register, r2: Register) { append_elem(instructions, inst_e_stmvsrrw_r_r(rd, r2)) } inst_e_lmvcsrrw_r_r :: #force_inline proc "contextless" (rd: Register, r2: Register) -> Instruction { return Instruction{mnemonic = .E_LMVCSRRW, operand_count = 2, length = 4, mode = .PPC32_VLE, form_id = 1, ops = {op_reg(rd), op_reg(r2), {}, {}}} } -emit_e_lmvcsrrw_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: Register, r2: Register) { append(instructions, inst_e_lmvcsrrw_r_r(rd, r2)) } +emit_e_lmvcsrrw_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: Register, r2: Register) { append_elem(instructions, inst_e_lmvcsrrw_r_r(rd, r2)) } inst_e_ldmvcsrrw_r_r :: #force_inline proc "contextless" (rd: Register, r2: Register) -> Instruction { return Instruction{mnemonic = .E_LDMVCSRRW, operand_count = 2, length = 4, mode = .PPC32_VLE, form_id = 1, ops = {op_reg(rd), op_reg(r2), {}, {}}} } -emit_e_ldmvcsrrw_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: Register, r2: Register) { append(instructions, inst_e_ldmvcsrrw_r_r(rd, r2)) } +emit_e_ldmvcsrrw_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: Register, r2: Register) { append_elem(instructions, inst_e_ldmvcsrrw_r_r(rd, r2)) } inst_e_stmvcsrrw_r_r :: #force_inline proc "contextless" (rd: Register, r2: Register) -> Instruction { return Instruction{mnemonic = .E_STMVCSRRW, operand_count = 2, length = 4, mode = .PPC32_VLE, form_id = 1, ops = {op_reg(rd), op_reg(r2), {}, {}}} } -emit_e_stmvcsrrw_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: Register, r2: Register) { append(instructions, inst_e_stmvcsrrw_r_r(rd, r2)) } +emit_e_stmvcsrrw_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: Register, r2: Register) { append_elem(instructions, inst_e_stmvcsrrw_r_r(rd, r2)) } inst_e_lmvdsrrw_r_r :: #force_inline proc "contextless" (rd: Register, r2: Register) -> Instruction { return Instruction{mnemonic = .E_LMVDSRRW, operand_count = 2, length = 4, mode = .PPC32_VLE, form_id = 1, ops = {op_reg(rd), op_reg(r2), {}, {}}} } -emit_e_lmvdsrrw_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: Register, r2: Register) { append(instructions, inst_e_lmvdsrrw_r_r(rd, r2)) } +emit_e_lmvdsrrw_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: Register, r2: Register) { append_elem(instructions, inst_e_lmvdsrrw_r_r(rd, r2)) } inst_e_ldmvdsrrw_r_r :: #force_inline proc "contextless" (rd: Register, r2: Register) -> Instruction { return Instruction{mnemonic = .E_LDMVDSRRW, operand_count = 2, length = 4, mode = .PPC32_VLE, form_id = 1, ops = {op_reg(rd), op_reg(r2), {}, {}}} } -emit_e_ldmvdsrrw_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: Register, r2: Register) { append(instructions, inst_e_ldmvdsrrw_r_r(rd, r2)) } +emit_e_ldmvdsrrw_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: Register, r2: Register) { append_elem(instructions, inst_e_ldmvdsrrw_r_r(rd, r2)) } inst_e_stmvdsrrw_r_r :: #force_inline proc "contextless" (rd: Register, r2: Register) -> Instruction { return Instruction{mnemonic = .E_STMVDSRRW, operand_count = 2, length = 4, mode = .PPC32_VLE, form_id = 1, ops = {op_reg(rd), op_reg(r2), {}, {}}} } -emit_e_stmvdsrrw_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: Register, r2: Register) { append(instructions, inst_e_stmvdsrrw_r_r(rd, r2)) } +emit_e_stmvdsrrw_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: Register, r2: Register) { append_elem(instructions, inst_e_stmvdsrrw_r_r(rd, r2)) } inst_e_lmvmcsrrw_r_r :: #force_inline proc "contextless" (rd: Register, r2: Register) -> Instruction { return Instruction{mnemonic = .E_LMVMCSRRW, operand_count = 2, length = 4, mode = .PPC32_VLE, form_id = 1, ops = {op_reg(rd), op_reg(r2), {}, {}}} } -emit_e_lmvmcsrrw_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: Register, r2: Register) { append(instructions, inst_e_lmvmcsrrw_r_r(rd, r2)) } +emit_e_lmvmcsrrw_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: Register, r2: Register) { append_elem(instructions, inst_e_lmvmcsrrw_r_r(rd, r2)) } inst_e_stmvmcsrrw_r_r :: #force_inline proc "contextless" (rd: Register, r2: Register) -> Instruction { return Instruction{mnemonic = .E_STMVMCSRRW, operand_count = 2, length = 4, mode = .PPC32_VLE, form_id = 1, ops = {op_reg(rd), op_reg(r2), {}, {}}} } -emit_e_stmvmcsrrw_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: Register, r2: Register) { append(instructions, inst_e_stmvmcsrrw_r_r(rd, r2)) } +emit_e_stmvmcsrrw_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: Register, r2: Register) { append_elem(instructions, inst_e_stmvmcsrrw_r_r(rd, r2)) } inst_e_add16i_r_r_imm :: #force_inline proc "contextless" (rd: Register, r2: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .E_ADD16I, operand_count = 3, length = 4, mode = .PPC32_VLE, form_id = 1, ops = {op_reg(rd), op_reg(r2), op_imm(imm), {}}} } -emit_e_add16i_r_r_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: Register, r2: Register, imm: i64) { append(instructions, inst_e_add16i_r_r_imm(rd, r2, imm)) } +emit_e_add16i_r_r_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: Register, r2: Register, imm: i64) { append_elem(instructions, inst_e_add16i_r_r_imm(rd, r2, imm)) } inst_e_la_r_mem :: #force_inline proc "contextless" (rd: Register, mem: Memory) -> Instruction { return Instruction{mnemonic = .E_LA, operand_count = 2, length = 4, mode = .PPC32_VLE, form_id = 1, ops = {op_reg(rd), op_mem(mem), {}, {}}} } -emit_e_la_r_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: Register, mem: Memory) { append(instructions, inst_e_la_r_mem(rd, mem)) } +emit_e_la_r_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: Register, mem: Memory) { append_elem(instructions, inst_e_la_r_mem(rd, mem)) } inst_e_sub16i_r_r_imm :: #force_inline proc "contextless" (rd: Register, r2: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .E_SUB16I, operand_count = 3, length = 4, mode = .PPC32_VLE, form_id = 1, ops = {op_reg(rd), op_reg(r2), op_imm(imm), {}}} } -emit_e_sub16i_r_r_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: Register, r2: Register, imm: i64) { append(instructions, inst_e_sub16i_r_r_imm(rd, r2, imm)) } +emit_e_sub16i_r_r_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: Register, r2: Register, imm: i64) { append_elem(instructions, inst_e_sub16i_r_r_imm(rd, r2, imm)) } inst_e_lbz_r_mem :: #force_inline proc "contextless" (rd: Register, mem: Memory) -> Instruction { return Instruction{mnemonic = .E_LBZ, operand_count = 2, length = 4, mode = .PPC32_VLE, form_id = 1, ops = {op_reg(rd), op_mem(mem), {}, {}}} } -emit_e_lbz_r_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: Register, mem: Memory) { append(instructions, inst_e_lbz_r_mem(rd, mem)) } +emit_e_lbz_r_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: Register, mem: Memory) { append_elem(instructions, inst_e_lbz_r_mem(rd, mem)) } inst_e_stb_r_mem :: #force_inline proc "contextless" (rd: Register, mem: Memory) -> Instruction { return Instruction{mnemonic = .E_STB, operand_count = 2, length = 4, mode = .PPC32_VLE, form_id = 1, ops = {op_reg(rd), op_mem(mem), {}, {}}} } -emit_e_stb_r_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: Register, mem: Memory) { append(instructions, inst_e_stb_r_mem(rd, mem)) } +emit_e_stb_r_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: Register, mem: Memory) { append_elem(instructions, inst_e_stb_r_mem(rd, mem)) } inst_e_lha_r_mem :: #force_inline proc "contextless" (rd: Register, mem: Memory) -> Instruction { return Instruction{mnemonic = .E_LHA, operand_count = 2, length = 4, mode = .PPC32_VLE, form_id = 1, ops = {op_reg(rd), op_mem(mem), {}, {}}} } -emit_e_lha_r_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: Register, mem: Memory) { append(instructions, inst_e_lha_r_mem(rd, mem)) } +emit_e_lha_r_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: Register, mem: Memory) { append_elem(instructions, inst_e_lha_r_mem(rd, mem)) } inst_e_lwz_r_mem :: #force_inline proc "contextless" (rd: Register, mem: Memory) -> Instruction { return Instruction{mnemonic = .E_LWZ, operand_count = 2, length = 4, mode = .PPC32_VLE, form_id = 1, ops = {op_reg(rd), op_mem(mem), {}, {}}} } -emit_e_lwz_r_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: Register, mem: Memory) { append(instructions, inst_e_lwz_r_mem(rd, mem)) } +emit_e_lwz_r_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: Register, mem: Memory) { append_elem(instructions, inst_e_lwz_r_mem(rd, mem)) } inst_e_stw_r_mem :: #force_inline proc "contextless" (rd: Register, mem: Memory) -> Instruction { return Instruction{mnemonic = .E_STW, operand_count = 2, length = 4, mode = .PPC32_VLE, form_id = 1, ops = {op_reg(rd), op_mem(mem), {}, {}}} } -emit_e_stw_r_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: Register, mem: Memory) { append(instructions, inst_e_stw_r_mem(rd, mem)) } +emit_e_stw_r_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: Register, mem: Memory) { append_elem(instructions, inst_e_stw_r_mem(rd, mem)) } inst_e_lhz_r_mem :: #force_inline proc "contextless" (rd: Register, mem: Memory) -> Instruction { return Instruction{mnemonic = .E_LHZ, operand_count = 2, length = 4, mode = .PPC32_VLE, form_id = 1, ops = {op_reg(rd), op_mem(mem), {}, {}}} } -emit_e_lhz_r_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: Register, mem: Memory) { append(instructions, inst_e_lhz_r_mem(rd, mem)) } +emit_e_lhz_r_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: Register, mem: Memory) { append_elem(instructions, inst_e_lhz_r_mem(rd, mem)) } inst_e_sth_r_mem :: #force_inline proc "contextless" (rd: Register, mem: Memory) -> Instruction { return Instruction{mnemonic = .E_STH, operand_count = 2, length = 4, mode = .PPC32_VLE, form_id = 1, ops = {op_reg(rd), op_mem(mem), {}, {}}} } -emit_e_sth_r_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: Register, mem: Memory) { append(instructions, inst_e_sth_r_mem(rd, mem)) } +emit_e_sth_r_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: Register, mem: Memory) { append_elem(instructions, inst_e_sth_r_mem(rd, mem)) } inst_e_rlwimi_r_r_r :: #force_inline proc "contextless" (rd: Register, r2: Register, r3: Register) -> Instruction { return Instruction{mnemonic = .E_RLWIMI, operand_count = 3, length = 4, mode = .PPC32_VLE, form_id = 1, ops = {op_reg(rd), op_reg(r2), op_reg(r3), {}}} } -emit_e_rlwimi_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: Register, r2: Register, r3: Register) { append(instructions, inst_e_rlwimi_r_r_r(rd, r2, r3)) } +emit_e_rlwimi_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: Register, r2: Register, r3: Register) { append_elem(instructions, inst_e_rlwimi_r_r_r(rd, r2, r3)) } inst_e_inslwi_r_r_r :: #force_inline proc "contextless" (rd: Register, r2: Register, r3: Register) -> Instruction { return Instruction{mnemonic = .E_INSLWI, operand_count = 3, length = 4, mode = .PPC32_VLE, form_id = 1, ops = {op_reg(rd), op_reg(r2), op_reg(r3), {}}} } -emit_e_inslwi_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: Register, r2: Register, r3: Register) { append(instructions, inst_e_inslwi_r_r_r(rd, r2, r3)) } +emit_e_inslwi_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: Register, r2: Register, r3: Register) { append_elem(instructions, inst_e_inslwi_r_r_r(rd, r2, r3)) } inst_e_insrwi_r_r_r :: #force_inline proc "contextless" (rd: Register, r2: Register, r3: Register) -> Instruction { return Instruction{mnemonic = .E_INSRWI, operand_count = 3, length = 4, mode = .PPC32_VLE, form_id = 1, ops = {op_reg(rd), op_reg(r2), op_reg(r3), {}}} } -emit_e_insrwi_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: Register, r2: Register, r3: Register) { append(instructions, inst_e_insrwi_r_r_r(rd, r2, r3)) } +emit_e_insrwi_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: Register, r2: Register, r3: Register) { append_elem(instructions, inst_e_insrwi_r_r_r(rd, r2, r3)) } inst_e_rotlwi_r_r_r :: #force_inline proc "contextless" (rd: Register, r2: Register, r3: Register) -> Instruction { return Instruction{mnemonic = .E_ROTLWI, operand_count = 3, length = 4, mode = .PPC32_VLE, form_id = 1, ops = {op_reg(rd), op_reg(r2), op_reg(r3), {}}} } -emit_e_rotlwi_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: Register, r2: Register, r3: Register) { append(instructions, inst_e_rotlwi_r_r_r(rd, r2, r3)) } +emit_e_rotlwi_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: Register, r2: Register, r3: Register) { append_elem(instructions, inst_e_rotlwi_r_r_r(rd, r2, r3)) } inst_e_rotrwi_r_r_r :: #force_inline proc "contextless" (rd: Register, r2: Register, r3: Register) -> Instruction { return Instruction{mnemonic = .E_ROTRWI, operand_count = 3, length = 4, mode = .PPC32_VLE, form_id = 1, ops = {op_reg(rd), op_reg(r2), op_reg(r3), {}}} } -emit_e_rotrwi_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: Register, r2: Register, r3: Register) { append(instructions, inst_e_rotrwi_r_r_r(rd, r2, r3)) } +emit_e_rotrwi_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: Register, r2: Register, r3: Register) { append_elem(instructions, inst_e_rotrwi_r_r_r(rd, r2, r3)) } inst_e_clrlwi_r_r_r :: #force_inline proc "contextless" (rd: Register, r2: Register, r3: Register) -> Instruction { return Instruction{mnemonic = .E_CLRLWI, operand_count = 3, length = 4, mode = .PPC32_VLE, form_id = 1, ops = {op_reg(rd), op_reg(r2), op_reg(r3), {}}} } -emit_e_clrlwi_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: Register, r2: Register, r3: Register) { append(instructions, inst_e_clrlwi_r_r_r(rd, r2, r3)) } +emit_e_clrlwi_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: Register, r2: Register, r3: Register) { append_elem(instructions, inst_e_clrlwi_r_r_r(rd, r2, r3)) } inst_e_clrrwi_r_r_r :: #force_inline proc "contextless" (rd: Register, r2: Register, r3: Register) -> Instruction { return Instruction{mnemonic = .E_CLRRWI, operand_count = 3, length = 4, mode = .PPC32_VLE, form_id = 1, ops = {op_reg(rd), op_reg(r2), op_reg(r3), {}}} } -emit_e_clrrwi_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: Register, r2: Register, r3: Register) { append(instructions, inst_e_clrrwi_r_r_r(rd, r2, r3)) } +emit_e_clrrwi_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: Register, r2: Register, r3: Register) { append_elem(instructions, inst_e_clrrwi_r_r_r(rd, r2, r3)) } inst_e_rlwinm_r_r_r :: #force_inline proc "contextless" (rd: Register, r2: Register, r3: Register) -> Instruction { return Instruction{mnemonic = .E_RLWINM, operand_count = 3, length = 4, mode = .PPC32_VLE, form_id = 1, ops = {op_reg(rd), op_reg(r2), op_reg(r3), {}}} } -emit_e_rlwinm_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: Register, r2: Register, r3: Register) { append(instructions, inst_e_rlwinm_r_r_r(rd, r2, r3)) } +emit_e_rlwinm_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: Register, r2: Register, r3: Register) { append_elem(instructions, inst_e_rlwinm_r_r_r(rd, r2, r3)) } inst_e_extlwi_r_r_r :: #force_inline proc "contextless" (rd: Register, r2: Register, r3: Register) -> Instruction { return Instruction{mnemonic = .E_EXTLWI, operand_count = 3, length = 4, mode = .PPC32_VLE, form_id = 1, ops = {op_reg(rd), op_reg(r2), op_reg(r3), {}}} } -emit_e_extlwi_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: Register, r2: Register, r3: Register) { append(instructions, inst_e_extlwi_r_r_r(rd, r2, r3)) } +emit_e_extlwi_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: Register, r2: Register, r3: Register) { append_elem(instructions, inst_e_extlwi_r_r_r(rd, r2, r3)) } inst_e_extrwi_r_r_r :: #force_inline proc "contextless" (rd: Register, r2: Register, r3: Register) -> Instruction { return Instruction{mnemonic = .E_EXTRWI, operand_count = 3, length = 4, mode = .PPC32_VLE, form_id = 1, ops = {op_reg(rd), op_reg(r2), op_reg(r3), {}}} } -emit_e_extrwi_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: Register, r2: Register, r3: Register) { append(instructions, inst_e_extrwi_r_r_r(rd, r2, r3)) } +emit_e_extrwi_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: Register, r2: Register, r3: Register) { append_elem(instructions, inst_e_extrwi_r_r_r(rd, r2, r3)) } inst_e_clrlslwi_r_r_r :: #force_inline proc "contextless" (rd: Register, r2: Register, r3: Register) -> Instruction { return Instruction{mnemonic = .E_CLRLSLWI, operand_count = 3, length = 4, mode = .PPC32_VLE, form_id = 1, ops = {op_reg(rd), op_reg(r2), op_reg(r3), {}}} } -emit_e_clrlslwi_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: Register, r2: Register, r3: Register) { append(instructions, inst_e_clrlslwi_r_r_r(rd, r2, r3)) } +emit_e_clrlslwi_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: Register, r2: Register, r3: Register) { append_elem(instructions, inst_e_clrlslwi_r_r_r(rd, r2, r3)) } inst_e_cmph_r_r_r :: #force_inline proc "contextless" (rd: Register, r2: Register, r3: Register) -> Instruction { return Instruction{mnemonic = .E_CMPH, operand_count = 3, length = 4, mode = .PPC32_VLE, form_id = 1, ops = {op_reg(rd), op_reg(r2), op_reg(r3), {}}} } -emit_e_cmph_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: Register, r2: Register, r3: Register) { append(instructions, inst_e_cmph_r_r_r(rd, r2, r3)) } +emit_e_cmph_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: Register, r2: Register, r3: Register) { append_elem(instructions, inst_e_cmph_r_r_r(rd, r2, r3)) } inst_e_sc_r_r_r :: #force_inline proc "contextless" (rd: Register, r2: Register, r3: Register) -> Instruction { return Instruction{mnemonic = .E_SC, operand_count = 3, length = 4, mode = .PPC32_VLE, form_id = 1, ops = {op_reg(rd), op_reg(r2), op_reg(r3), {}}} } -emit_e_sc_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: Register, r2: Register, r3: Register) { append(instructions, inst_e_sc_r_r_r(rd, r2, r3)) } +emit_e_sc_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: Register, r2: Register, r3: Register) { append_elem(instructions, inst_e_sc_r_r_r(rd, r2, r3)) } inst_e_cmphl_r_r_r :: #force_inline proc "contextless" (rd: Register, r2: Register, r3: Register) -> Instruction { return Instruction{mnemonic = .E_CMPHL, operand_count = 3, length = 4, mode = .PPC32_VLE, form_id = 1, ops = {op_reg(rd), op_reg(r2), op_reg(r3), {}}} } -emit_e_cmphl_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: Register, r2: Register, r3: Register) { append(instructions, inst_e_cmphl_r_r_r(rd, r2, r3)) } +emit_e_cmphl_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: Register, r2: Register, r3: Register) { append_elem(instructions, inst_e_cmphl_r_r_r(rd, r2, r3)) } inst_e_crandc_bo_crb :: #force_inline proc "contextless" (imm: i64, imm2: i64) -> Instruction { return Instruction{mnemonic = .E_CRANDC, operand_count = 2, length = 4, mode = .PPC32_VLE, form_id = 1, ops = {op_imm(imm), op_imm(imm2), {}, {}}} } -emit_e_crandc_bo_crb :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, imm2: i64) { append(instructions, inst_e_crandc_bo_crb(imm, imm2)) } +emit_e_crandc_bo_crb :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, imm2: i64) { append_elem(instructions, inst_e_crandc_bo_crb(imm, imm2)) } inst_e_crnand_bo_crb :: #force_inline proc "contextless" (imm: i64, imm2: i64) -> Instruction { return Instruction{mnemonic = .E_CRNAND, operand_count = 2, length = 4, mode = .PPC32_VLE, form_id = 1, ops = {op_imm(imm), op_imm(imm2), {}, {}}} } -emit_e_crnand_bo_crb :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, imm2: i64) { append(instructions, inst_e_crnand_bo_crb(imm, imm2)) } +emit_e_crnand_bo_crb :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, imm2: i64) { append_elem(instructions, inst_e_crnand_bo_crb(imm, imm2)) } inst_e_crnot_bo_crb :: #force_inline proc "contextless" (imm: i64, imm2: i64) -> Instruction { return Instruction{mnemonic = .E_CRNOT, operand_count = 2, length = 4, mode = .PPC32_VLE, form_id = 1, ops = {op_imm(imm), op_imm(imm2), {}, {}}} } -emit_e_crnot_bo_crb :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, imm2: i64) { append(instructions, inst_e_crnot_bo_crb(imm, imm2)) } +emit_e_crnot_bo_crb :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, imm2: i64) { append_elem(instructions, inst_e_crnot_bo_crb(imm, imm2)) } inst_e_crnor_bo_crb :: #force_inline proc "contextless" (imm: i64, imm2: i64) -> Instruction { return Instruction{mnemonic = .E_CRNOR, operand_count = 2, length = 4, mode = .PPC32_VLE, form_id = 1, ops = {op_imm(imm), op_imm(imm2), {}, {}}} } -emit_e_crnor_bo_crb :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, imm2: i64) { append(instructions, inst_e_crnor_bo_crb(imm, imm2)) } +emit_e_crnor_bo_crb :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, imm2: i64) { append_elem(instructions, inst_e_crnor_bo_crb(imm, imm2)) } inst_e_crclr_bo_crb :: #force_inline proc "contextless" (imm: i64, imm2: i64) -> Instruction { return Instruction{mnemonic = .E_CRCLR, operand_count = 2, length = 4, mode = .PPC32_VLE, form_id = 1, ops = {op_imm(imm), op_imm(imm2), {}, {}}} } -emit_e_crclr_bo_crb :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, imm2: i64) { append(instructions, inst_e_crclr_bo_crb(imm, imm2)) } +emit_e_crclr_bo_crb :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, imm2: i64) { append_elem(instructions, inst_e_crclr_bo_crb(imm, imm2)) } inst_e_crxor_bo_crb :: #force_inline proc "contextless" (imm: i64, imm2: i64) -> Instruction { return Instruction{mnemonic = .E_CRXOR, operand_count = 2, length = 4, mode = .PPC32_VLE, form_id = 1, ops = {op_imm(imm), op_imm(imm2), {}, {}}} } -emit_e_crxor_bo_crb :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, imm2: i64) { append(instructions, inst_e_crxor_bo_crb(imm, imm2)) } +emit_e_crxor_bo_crb :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, imm2: i64) { append_elem(instructions, inst_e_crxor_bo_crb(imm, imm2)) } inst_e_mcrf_bo_crb :: #force_inline proc "contextless" (imm: i64, imm2: i64) -> Instruction { return Instruction{mnemonic = .E_MCRF, operand_count = 2, length = 4, mode = .PPC32_VLE, form_id = 1, ops = {op_imm(imm), op_imm(imm2), {}, {}}} } -emit_e_mcrf_bo_crb :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, imm2: i64) { append(instructions, inst_e_mcrf_bo_crb(imm, imm2)) } +emit_e_mcrf_bo_crb :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, imm2: i64) { append_elem(instructions, inst_e_mcrf_bo_crb(imm, imm2)) } inst_e_slwi_r_r_r :: #force_inline proc "contextless" (rd: Register, r2: Register, r3: Register) -> Instruction { return Instruction{mnemonic = .E_SLWI, operand_count = 3, length = 4, mode = .PPC32_VLE, form_id = 1, ops = {op_reg(rd), op_reg(r2), op_reg(r3), {}}} } -emit_e_slwi_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: Register, r2: Register, r3: Register) { append(instructions, inst_e_slwi_r_r_r(rd, r2, r3)) } +emit_e_slwi_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: Register, r2: Register, r3: Register) { append_elem(instructions, inst_e_slwi_r_r_r(rd, r2, r3)) } inst_e_slwi_dot_r_r_r :: #force_inline proc "contextless" (rd: Register, r2: Register, r3: Register) -> Instruction { return Instruction{mnemonic = .E_SLWI_DOT, operand_count = 3, length = 4, mode = .PPC32_VLE, form_id = 1, ops = {op_reg(rd), op_reg(r2), op_reg(r3), {}}} } -emit_e_slwi_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: Register, r2: Register, r3: Register) { append(instructions, inst_e_slwi_dot_r_r_r(rd, r2, r3)) } +emit_e_slwi_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: Register, r2: Register, r3: Register) { append_elem(instructions, inst_e_slwi_dot_r_r_r(rd, r2, r3)) } inst_e_crand_bo_crb :: #force_inline proc "contextless" (imm: i64, imm2: i64) -> Instruction { return Instruction{mnemonic = .E_CRAND, operand_count = 2, length = 4, mode = .PPC32_VLE, form_id = 1, ops = {op_imm(imm), op_imm(imm2), {}, {}}} } -emit_e_crand_bo_crb :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, imm2: i64) { append(instructions, inst_e_crand_bo_crb(imm, imm2)) } +emit_e_crand_bo_crb :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, imm2: i64) { append_elem(instructions, inst_e_crand_bo_crb(imm, imm2)) } inst_e_rlw_r_r_r :: #force_inline proc "contextless" (rd: Register, r2: Register, r3: Register) -> Instruction { return Instruction{mnemonic = .E_RLW, operand_count = 3, length = 4, mode = .PPC32_VLE, form_id = 1, ops = {op_reg(rd), op_reg(r2), op_reg(r3), {}}} } -emit_e_rlw_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: Register, r2: Register, r3: Register) { append(instructions, inst_e_rlw_r_r_r(rd, r2, r3)) } +emit_e_rlw_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: Register, r2: Register, r3: Register) { append_elem(instructions, inst_e_rlw_r_r_r(rd, r2, r3)) } inst_e_rlw_dot_r_r_r :: #force_inline proc "contextless" (rd: Register, r2: Register, r3: Register) -> Instruction { return Instruction{mnemonic = .E_RLW_DOT, operand_count = 3, length = 4, mode = .PPC32_VLE, form_id = 1, ops = {op_reg(rd), op_reg(r2), op_reg(r3), {}}} } -emit_e_rlw_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: Register, r2: Register, r3: Register) { append(instructions, inst_e_rlw_dot_r_r_r(rd, r2, r3)) } +emit_e_rlw_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: Register, r2: Register, r3: Register) { append_elem(instructions, inst_e_rlw_dot_r_r_r(rd, r2, r3)) } inst_e_crset_bo_crb :: #force_inline proc "contextless" (imm: i64, imm2: i64) -> Instruction { return Instruction{mnemonic = .E_CRSET, operand_count = 2, length = 4, mode = .PPC32_VLE, form_id = 1, ops = {op_imm(imm), op_imm(imm2), {}, {}}} } -emit_e_crset_bo_crb :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, imm2: i64) { append(instructions, inst_e_crset_bo_crb(imm, imm2)) } +emit_e_crset_bo_crb :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, imm2: i64) { append_elem(instructions, inst_e_crset_bo_crb(imm, imm2)) } inst_e_creqv_bo_crb :: #force_inline proc "contextless" (imm: i64, imm2: i64) -> Instruction { return Instruction{mnemonic = .E_CREQV, operand_count = 2, length = 4, mode = .PPC32_VLE, form_id = 1, ops = {op_imm(imm), op_imm(imm2), {}, {}}} } -emit_e_creqv_bo_crb :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, imm2: i64) { append(instructions, inst_e_creqv_bo_crb(imm, imm2)) } +emit_e_creqv_bo_crb :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, imm2: i64) { append_elem(instructions, inst_e_creqv_bo_crb(imm, imm2)) } inst_e_rlwi_r_r_r :: #force_inline proc "contextless" (rd: Register, r2: Register, r3: Register) -> Instruction { return Instruction{mnemonic = .E_RLWI, operand_count = 3, length = 4, mode = .PPC32_VLE, form_id = 1, ops = {op_reg(rd), op_reg(r2), op_reg(r3), {}}} } -emit_e_rlwi_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: Register, r2: Register, r3: Register) { append(instructions, inst_e_rlwi_r_r_r(rd, r2, r3)) } +emit_e_rlwi_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: Register, r2: Register, r3: Register) { append_elem(instructions, inst_e_rlwi_r_r_r(rd, r2, r3)) } inst_e_rlwi_dot_r_r_r :: #force_inline proc "contextless" (rd: Register, r2: Register, r3: Register) -> Instruction { return Instruction{mnemonic = .E_RLWI_DOT, operand_count = 3, length = 4, mode = .PPC32_VLE, form_id = 1, ops = {op_reg(rd), op_reg(r2), op_reg(r3), {}}} } -emit_e_rlwi_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: Register, r2: Register, r3: Register) { append(instructions, inst_e_rlwi_dot_r_r_r(rd, r2, r3)) } +emit_e_rlwi_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: Register, r2: Register, r3: Register) { append_elem(instructions, inst_e_rlwi_dot_r_r_r(rd, r2, r3)) } inst_e_crorc_bo_crb :: #force_inline proc "contextless" (imm: i64, imm2: i64) -> Instruction { return Instruction{mnemonic = .E_CRORC, operand_count = 2, length = 4, mode = .PPC32_VLE, form_id = 1, ops = {op_imm(imm), op_imm(imm2), {}, {}}} } -emit_e_crorc_bo_crb :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, imm2: i64) { append(instructions, inst_e_crorc_bo_crb(imm, imm2)) } +emit_e_crorc_bo_crb :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, imm2: i64) { append_elem(instructions, inst_e_crorc_bo_crb(imm, imm2)) } inst_e_crmove_bo_crb :: #force_inline proc "contextless" (imm: i64, imm2: i64) -> Instruction { return Instruction{mnemonic = .E_CRMOVE, operand_count = 2, length = 4, mode = .PPC32_VLE, form_id = 1, ops = {op_imm(imm), op_imm(imm2), {}, {}}} } -emit_e_crmove_bo_crb :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, imm2: i64) { append(instructions, inst_e_crmove_bo_crb(imm, imm2)) } +emit_e_crmove_bo_crb :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, imm2: i64) { append_elem(instructions, inst_e_crmove_bo_crb(imm, imm2)) } inst_e_cror_bo_crb :: #force_inline proc "contextless" (imm: i64, imm2: i64) -> Instruction { return Instruction{mnemonic = .E_CROR, operand_count = 2, length = 4, mode = .PPC32_VLE, form_id = 1, ops = {op_imm(imm), op_imm(imm2), {}, {}}} } -emit_e_cror_bo_crb :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, imm2: i64) { append(instructions, inst_e_cror_bo_crb(imm, imm2)) } +emit_e_cror_bo_crb :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, imm2: i64) { append_elem(instructions, inst_e_cror_bo_crb(imm, imm2)) } inst_e_srwi_r_r_r :: #force_inline proc "contextless" (rd: Register, r2: Register, r3: Register) -> Instruction { return Instruction{mnemonic = .E_SRWI, operand_count = 3, length = 4, mode = .PPC32_VLE, form_id = 1, ops = {op_reg(rd), op_reg(r2), op_reg(r3), {}}} } -emit_e_srwi_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: Register, r2: Register, r3: Register) { append(instructions, inst_e_srwi_r_r_r(rd, r2, r3)) } +emit_e_srwi_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: Register, r2: Register, r3: Register) { append_elem(instructions, inst_e_srwi_r_r_r(rd, r2, r3)) } inst_e_srwi_dot_r_r_r :: #force_inline proc "contextless" (rd: Register, r2: Register, r3: Register) -> Instruction { return Instruction{mnemonic = .E_SRWI_DOT, operand_count = 3, length = 4, mode = .PPC32_VLE, form_id = 1, ops = {op_reg(rd), op_reg(r2), op_reg(r3), {}}} } -emit_e_srwi_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: Register, r2: Register, r3: Register) { append(instructions, inst_e_srwi_dot_r_r_r(rd, r2, r3)) } +emit_e_srwi_dot_r_r_r :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: Register, r2: Register, r3: Register) { append_elem(instructions, inst_e_srwi_dot_r_r_r(rd, r2, r3)) } inst_e_bdnz_rel :: #force_inline proc "contextless" (target: u32) -> Instruction { return Instruction{mnemonic = .E_BDNZ, operand_count = 1, length = 4, mode = .PPC32_VLE, form_id = 1, ops = {op_label(target), {}, {}, {}}} } -emit_e_bdnz_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, target: u32) { append(instructions, inst_e_bdnz_rel(target)) } +emit_e_bdnz_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, target: u32) { append_elem(instructions, inst_e_bdnz_rel(target)) } inst_e_bdnzl_rel :: #force_inline proc "contextless" (target: u32) -> Instruction { return Instruction{mnemonic = .E_BDNZL, operand_count = 1, length = 4, mode = .PPC32_VLE, form_id = 1, ops = {op_label(target), {}, {}, {}}} } -emit_e_bdnzl_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, target: u32) { append(instructions, inst_e_bdnzl_rel(target)) } +emit_e_bdnzl_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, target: u32) { append_elem(instructions, inst_e_bdnzl_rel(target)) } inst_e_bdz_rel :: #force_inline proc "contextless" (target: u32) -> Instruction { return Instruction{mnemonic = .E_BDZ, operand_count = 1, length = 4, mode = .PPC32_VLE, form_id = 1, ops = {op_label(target), {}, {}, {}}} } -emit_e_bdz_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, target: u32) { append(instructions, inst_e_bdz_rel(target)) } +emit_e_bdz_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, target: u32) { append_elem(instructions, inst_e_bdz_rel(target)) } inst_e_bdzl_rel :: #force_inline proc "contextless" (target: u32) -> Instruction { return Instruction{mnemonic = .E_BDZL, operand_count = 1, length = 4, mode = .PPC32_VLE, form_id = 1, ops = {op_label(target), {}, {}, {}}} } -emit_e_bdzl_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, target: u32) { append(instructions, inst_e_bdzl_rel(target)) } +emit_e_bdzl_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, target: u32) { append_elem(instructions, inst_e_bdzl_rel(target)) } inst_e_cmpi_crf_r_imm :: #force_inline proc "contextless" (rd: Register, r2: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .E_CMPI, operand_count = 3, length = 4, mode = .PPC32_VLE, form_id = 1, ops = {op_reg(rd), op_reg(r2), op_imm(imm), {}}} } -emit_e_cmpi_crf_r_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: Register, r2: Register, imm: i64) { append(instructions, inst_e_cmpi_crf_r_imm(rd, r2, imm)) } +emit_e_cmpi_crf_r_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: Register, r2: Register, imm: i64) { append_elem(instructions, inst_e_cmpi_crf_r_imm(rd, r2, imm)) } inst_e_cmpwi_crf_r_imm :: #force_inline proc "contextless" (rd: Register, r2: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .E_CMPWI, operand_count = 3, length = 4, mode = .PPC32_VLE, form_id = 1, ops = {op_reg(rd), op_reg(r2), op_imm(imm), {}}} } -emit_e_cmpwi_crf_r_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: Register, r2: Register, imm: i64) { append(instructions, inst_e_cmpwi_crf_r_imm(rd, r2, imm)) } +emit_e_cmpwi_crf_r_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: Register, r2: Register, imm: i64) { append_elem(instructions, inst_e_cmpwi_crf_r_imm(rd, r2, imm)) } inst_e_cmpli_crf_r_imm :: #force_inline proc "contextless" (rd: Register, r2: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .E_CMPLI, operand_count = 3, length = 4, mode = .PPC32_VLE, form_id = 1, ops = {op_reg(rd), op_reg(r2), op_imm(imm), {}}} } -emit_e_cmpli_crf_r_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: Register, r2: Register, imm: i64) { append(instructions, inst_e_cmpli_crf_r_imm(rd, r2, imm)) } +emit_e_cmpli_crf_r_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: Register, r2: Register, imm: i64) { append_elem(instructions, inst_e_cmpli_crf_r_imm(rd, r2, imm)) } inst_e_cmplwi_crf_r_imm :: #force_inline proc "contextless" (rd: Register, r2: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .E_CMPLWI, operand_count = 3, length = 4, mode = .PPC32_VLE, form_id = 1, ops = {op_reg(rd), op_reg(r2), op_imm(imm), {}}} } -emit_e_cmplwi_crf_r_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: Register, r2: Register, imm: i64) { append(instructions, inst_e_cmplwi_crf_r_imm(rd, r2, imm)) } +emit_e_cmplwi_crf_r_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: Register, r2: Register, imm: i64) { append_elem(instructions, inst_e_cmplwi_crf_r_imm(rd, r2, imm)) } inst_e_addi_r_r_imm :: #force_inline proc "contextless" (rd: Register, r2: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .E_ADDI, operand_count = 3, length = 4, mode = .PPC32_VLE, form_id = 1, ops = {op_reg(rd), op_reg(r2), op_imm(imm), {}}} } -emit_e_addi_r_r_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: Register, r2: Register, imm: i64) { append(instructions, inst_e_addi_r_r_imm(rd, r2, imm)) } +emit_e_addi_r_r_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: Register, r2: Register, imm: i64) { append_elem(instructions, inst_e_addi_r_r_imm(rd, r2, imm)) } inst_e_subi_r_r_imm :: #force_inline proc "contextless" (rd: Register, r2: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .E_SUBI, operand_count = 3, length = 4, mode = .PPC32_VLE, form_id = 1, ops = {op_reg(rd), op_reg(r2), op_imm(imm), {}}} } -emit_e_subi_r_r_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: Register, r2: Register, imm: i64) { append(instructions, inst_e_subi_r_r_imm(rd, r2, imm)) } +emit_e_subi_r_r_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: Register, r2: Register, imm: i64) { append_elem(instructions, inst_e_subi_r_r_imm(rd, r2, imm)) } inst_e_addi_dot_r_r_imm :: #force_inline proc "contextless" (rd: Register, r2: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .E_ADDI_DOT, operand_count = 3, length = 4, mode = .PPC32_VLE, form_id = 1, ops = {op_reg(rd), op_reg(r2), op_imm(imm), {}}} } -emit_e_addi_dot_r_r_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: Register, r2: Register, imm: i64) { append(instructions, inst_e_addi_dot_r_r_imm(rd, r2, imm)) } +emit_e_addi_dot_r_r_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: Register, r2: Register, imm: i64) { append_elem(instructions, inst_e_addi_dot_r_r_imm(rd, r2, imm)) } inst_e_addic_r_r_imm :: #force_inline proc "contextless" (rd: Register, r2: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .E_ADDIC, operand_count = 3, length = 4, mode = .PPC32_VLE, form_id = 1, ops = {op_reg(rd), op_reg(r2), op_imm(imm), {}}} } -emit_e_addic_r_r_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: Register, r2: Register, imm: i64) { append(instructions, inst_e_addic_r_r_imm(rd, r2, imm)) } +emit_e_addic_r_r_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: Register, r2: Register, imm: i64) { append_elem(instructions, inst_e_addic_r_r_imm(rd, r2, imm)) } inst_e_subic_r_r_imm :: #force_inline proc "contextless" (rd: Register, r2: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .E_SUBIC, operand_count = 3, length = 4, mode = .PPC32_VLE, form_id = 1, ops = {op_reg(rd), op_reg(r2), op_imm(imm), {}}} } -emit_e_subic_r_r_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: Register, r2: Register, imm: i64) { append(instructions, inst_e_subic_r_r_imm(rd, r2, imm)) } +emit_e_subic_r_r_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: Register, r2: Register, imm: i64) { append_elem(instructions, inst_e_subic_r_r_imm(rd, r2, imm)) } inst_e_addic_dot_r_r_imm :: #force_inline proc "contextless" (rd: Register, r2: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .E_ADDIC_DOT, operand_count = 3, length = 4, mode = .PPC32_VLE, form_id = 1, ops = {op_reg(rd), op_reg(r2), op_imm(imm), {}}} } -emit_e_addic_dot_r_r_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: Register, r2: Register, imm: i64) { append(instructions, inst_e_addic_dot_r_r_imm(rd, r2, imm)) } +emit_e_addic_dot_r_r_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: Register, r2: Register, imm: i64) { append_elem(instructions, inst_e_addic_dot_r_r_imm(rd, r2, imm)) } inst_e_subic_dot_r_r_imm :: #force_inline proc "contextless" (rd: Register, r2: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .E_SUBIC_DOT, operand_count = 3, length = 4, mode = .PPC32_VLE, form_id = 1, ops = {op_reg(rd), op_reg(r2), op_imm(imm), {}}} } -emit_e_subic_dot_r_r_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: Register, r2: Register, imm: i64) { append(instructions, inst_e_subic_dot_r_r_imm(rd, r2, imm)) } +emit_e_subic_dot_r_r_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: Register, r2: Register, imm: i64) { append_elem(instructions, inst_e_subic_dot_r_r_imm(rd, r2, imm)) } inst_e_mulli_r_r_imm :: #force_inline proc "contextless" (rd: Register, r2: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .E_MULLI, operand_count = 3, length = 4, mode = .PPC32_VLE, form_id = 1, ops = {op_reg(rd), op_reg(r2), op_imm(imm), {}}} } -emit_e_mulli_r_r_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: Register, r2: Register, imm: i64) { append(instructions, inst_e_mulli_r_r_imm(rd, r2, imm)) } +emit_e_mulli_r_r_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: Register, r2: Register, imm: i64) { append_elem(instructions, inst_e_mulli_r_r_imm(rd, r2, imm)) } inst_e_subfic_r_r_imm :: #force_inline proc "contextless" (rd: Register, r2: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .E_SUBFIC, operand_count = 3, length = 4, mode = .PPC32_VLE, form_id = 1, ops = {op_reg(rd), op_reg(r2), op_imm(imm), {}}} } -emit_e_subfic_r_r_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: Register, r2: Register, imm: i64) { append(instructions, inst_e_subfic_r_r_imm(rd, r2, imm)) } +emit_e_subfic_r_r_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: Register, r2: Register, imm: i64) { append_elem(instructions, inst_e_subfic_r_r_imm(rd, r2, imm)) } inst_e_subfic_dot_r_r_imm :: #force_inline proc "contextless" (rd: Register, r2: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .E_SUBFIC_DOT, operand_count = 3, length = 4, mode = .PPC32_VLE, form_id = 1, ops = {op_reg(rd), op_reg(r2), op_imm(imm), {}}} } -emit_e_subfic_dot_r_r_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: Register, r2: Register, imm: i64) { append(instructions, inst_e_subfic_dot_r_r_imm(rd, r2, imm)) } +emit_e_subfic_dot_r_r_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: Register, r2: Register, imm: i64) { append_elem(instructions, inst_e_subfic_dot_r_r_imm(rd, r2, imm)) } inst_e_andi_r_r_imm :: #force_inline proc "contextless" (rd: Register, r2: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .E_ANDI, operand_count = 3, length = 4, mode = .PPC32_VLE, form_id = 1, ops = {op_reg(rd), op_reg(r2), op_imm(imm), {}}} } -emit_e_andi_r_r_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: Register, r2: Register, imm: i64) { append(instructions, inst_e_andi_r_r_imm(rd, r2, imm)) } +emit_e_andi_r_r_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: Register, r2: Register, imm: i64) { append_elem(instructions, inst_e_andi_r_r_imm(rd, r2, imm)) } inst_e_andi_dot_r_r_imm :: #force_inline proc "contextless" (rd: Register, r2: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .E_ANDI_DOT, operand_count = 3, length = 4, mode = .PPC32_VLE, form_id = 1, ops = {op_reg(rd), op_reg(r2), op_imm(imm), {}}} } -emit_e_andi_dot_r_r_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: Register, r2: Register, imm: i64) { append(instructions, inst_e_andi_dot_r_r_imm(rd, r2, imm)) } +emit_e_andi_dot_r_r_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: Register, r2: Register, imm: i64) { append_elem(instructions, inst_e_andi_dot_r_r_imm(rd, r2, imm)) } inst_e_nop_r_r_imm :: #force_inline proc "contextless" (rd: Register, r2: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .E_NOP, operand_count = 3, length = 4, mode = .PPC32_VLE, form_id = 1, ops = {op_reg(rd), op_reg(r2), op_imm(imm), {}}} } -emit_e_nop_r_r_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: Register, r2: Register, imm: i64) { append(instructions, inst_e_nop_r_r_imm(rd, r2, imm)) } +emit_e_nop_r_r_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: Register, r2: Register, imm: i64) { append_elem(instructions, inst_e_nop_r_r_imm(rd, r2, imm)) } inst_e_ori_r_r_imm :: #force_inline proc "contextless" (rd: Register, r2: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .E_ORI, operand_count = 3, length = 4, mode = .PPC32_VLE, form_id = 1, ops = {op_reg(rd), op_reg(r2), op_imm(imm), {}}} } -emit_e_ori_r_r_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: Register, r2: Register, imm: i64) { append(instructions, inst_e_ori_r_r_imm(rd, r2, imm)) } +emit_e_ori_r_r_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: Register, r2: Register, imm: i64) { append_elem(instructions, inst_e_ori_r_r_imm(rd, r2, imm)) } inst_e_ori_dot_r_r_imm :: #force_inline proc "contextless" (rd: Register, r2: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .E_ORI_DOT, operand_count = 3, length = 4, mode = .PPC32_VLE, form_id = 1, ops = {op_reg(rd), op_reg(r2), op_imm(imm), {}}} } -emit_e_ori_dot_r_r_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: Register, r2: Register, imm: i64) { append(instructions, inst_e_ori_dot_r_r_imm(rd, r2, imm)) } +emit_e_ori_dot_r_r_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: Register, r2: Register, imm: i64) { append_elem(instructions, inst_e_ori_dot_r_r_imm(rd, r2, imm)) } inst_e_xori_r_r_imm :: #force_inline proc "contextless" (rd: Register, r2: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .E_XORI, operand_count = 3, length = 4, mode = .PPC32_VLE, form_id = 1, ops = {op_reg(rd), op_reg(r2), op_imm(imm), {}}} } -emit_e_xori_r_r_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: Register, r2: Register, imm: i64) { append(instructions, inst_e_xori_r_r_imm(rd, r2, imm)) } +emit_e_xori_r_r_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: Register, r2: Register, imm: i64) { append_elem(instructions, inst_e_xori_r_r_imm(rd, r2, imm)) } inst_e_xori_dot_r_r_imm :: #force_inline proc "contextless" (rd: Register, r2: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .E_XORI_DOT, operand_count = 3, length = 4, mode = .PPC32_VLE, form_id = 1, ops = {op_reg(rd), op_reg(r2), op_imm(imm), {}}} } -emit_e_xori_dot_r_r_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: Register, r2: Register, imm: i64) { append(instructions, inst_e_xori_dot_r_r_imm(rd, r2, imm)) } +emit_e_xori_dot_r_r_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: Register, r2: Register, imm: i64) { append_elem(instructions, inst_e_xori_dot_r_r_imm(rd, r2, imm)) } inst_e_lis_r_imm :: #force_inline proc "contextless" (rd: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .E_LIS, operand_count = 2, length = 4, mode = .PPC32_VLE, form_id = 1, ops = {op_reg(rd), op_imm(imm), {}, {}}} } -emit_e_lis_r_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: Register, imm: i64) { append(instructions, inst_e_lis_r_imm(rd, imm)) } +emit_e_lis_r_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: Register, imm: i64) { append_elem(instructions, inst_e_lis_r_imm(rd, imm)) } inst_e_and2is_dot_r_imm :: #force_inline proc "contextless" (rd: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .E_AND2IS_DOT, operand_count = 2, length = 4, mode = .PPC32_VLE, form_id = 1, ops = {op_reg(rd), op_imm(imm), {}, {}}} } -emit_e_and2is_dot_r_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: Register, imm: i64) { append(instructions, inst_e_and2is_dot_r_imm(rd, imm)) } +emit_e_and2is_dot_r_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: Register, imm: i64) { append_elem(instructions, inst_e_and2is_dot_r_imm(rd, imm)) } inst_e_or2is_r_imm :: #force_inline proc "contextless" (rd: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .E_OR2IS, operand_count = 2, length = 4, mode = .PPC32_VLE, form_id = 1, ops = {op_reg(rd), op_imm(imm), {}, {}}} } -emit_e_or2is_r_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: Register, imm: i64) { append(instructions, inst_e_or2is_r_imm(rd, imm)) } +emit_e_or2is_r_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: Register, imm: i64) { append_elem(instructions, inst_e_or2is_r_imm(rd, imm)) } inst_e_and2i_dot_r_imm :: #force_inline proc "contextless" (rd: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .E_AND2I_DOT, operand_count = 2, length = 4, mode = .PPC32_VLE, form_id = 1, ops = {op_reg(rd), op_imm(imm), {}, {}}} } -emit_e_and2i_dot_r_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: Register, imm: i64) { append(instructions, inst_e_and2i_dot_r_imm(rd, imm)) } +emit_e_and2i_dot_r_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: Register, imm: i64) { append_elem(instructions, inst_e_and2i_dot_r_imm(rd, imm)) } inst_e_or2i_r_imm :: #force_inline proc "contextless" (rd: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .E_OR2I, operand_count = 2, length = 4, mode = .PPC32_VLE, form_id = 1, ops = {op_reg(rd), op_imm(imm), {}, {}}} } -emit_e_or2i_r_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: Register, imm: i64) { append(instructions, inst_e_or2i_r_imm(rd, imm)) } +emit_e_or2i_r_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: Register, imm: i64) { append_elem(instructions, inst_e_or2i_r_imm(rd, imm)) } inst_e_cmphl16i_r_r_imm :: #force_inline proc "contextless" (rd: Register, r2: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .E_CMPHL16I, operand_count = 3, length = 4, mode = .PPC32_VLE, form_id = 1, ops = {op_reg(rd), op_reg(r2), op_imm(imm), {}}} } -emit_e_cmphl16i_r_r_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: Register, r2: Register, imm: i64) { append(instructions, inst_e_cmphl16i_r_r_imm(rd, r2, imm)) } +emit_e_cmphl16i_r_r_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: Register, r2: Register, imm: i64) { append_elem(instructions, inst_e_cmphl16i_r_r_imm(rd, r2, imm)) } inst_e_cmph16i_r_r_imm :: #force_inline proc "contextless" (rd: Register, r2: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .E_CMPH16I, operand_count = 3, length = 4, mode = .PPC32_VLE, form_id = 1, ops = {op_reg(rd), op_reg(r2), op_imm(imm), {}}} } -emit_e_cmph16i_r_r_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: Register, r2: Register, imm: i64) { append(instructions, inst_e_cmph16i_r_r_imm(rd, r2, imm)) } +emit_e_cmph16i_r_r_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: Register, r2: Register, imm: i64) { append_elem(instructions, inst_e_cmph16i_r_r_imm(rd, r2, imm)) } inst_e_cmpl16i_r_r_imm :: #force_inline proc "contextless" (rd: Register, r2: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .E_CMPL16I, operand_count = 3, length = 4, mode = .PPC32_VLE, form_id = 1, ops = {op_reg(rd), op_reg(r2), op_imm(imm), {}}} } -emit_e_cmpl16i_r_r_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: Register, r2: Register, imm: i64) { append(instructions, inst_e_cmpl16i_r_r_imm(rd, r2, imm)) } +emit_e_cmpl16i_r_r_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: Register, r2: Register, imm: i64) { append_elem(instructions, inst_e_cmpl16i_r_r_imm(rd, r2, imm)) } inst_e_mull2i_r_r_imm :: #force_inline proc "contextless" (rd: Register, r2: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .E_MULL2I, operand_count = 3, length = 4, mode = .PPC32_VLE, form_id = 1, ops = {op_reg(rd), op_reg(r2), op_imm(imm), {}}} } -emit_e_mull2i_r_r_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: Register, r2: Register, imm: i64) { append(instructions, inst_e_mull2i_r_r_imm(rd, r2, imm)) } +emit_e_mull2i_r_r_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: Register, r2: Register, imm: i64) { append_elem(instructions, inst_e_mull2i_r_r_imm(rd, r2, imm)) } inst_e_cmp16i_r_r_imm :: #force_inline proc "contextless" (rd: Register, r2: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .E_CMP16I, operand_count = 3, length = 4, mode = .PPC32_VLE, form_id = 1, ops = {op_reg(rd), op_reg(r2), op_imm(imm), {}}} } -emit_e_cmp16i_r_r_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: Register, r2: Register, imm: i64) { append(instructions, inst_e_cmp16i_r_r_imm(rd, r2, imm)) } +emit_e_cmp16i_r_r_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: Register, r2: Register, imm: i64) { append_elem(instructions, inst_e_cmp16i_r_r_imm(rd, r2, imm)) } inst_e_sub2is_r_r_imm :: #force_inline proc "contextless" (rd: Register, r2: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .E_SUB2IS, operand_count = 3, length = 4, mode = .PPC32_VLE, form_id = 1, ops = {op_reg(rd), op_reg(r2), op_imm(imm), {}}} } -emit_e_sub2is_r_r_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: Register, r2: Register, imm: i64) { append(instructions, inst_e_sub2is_r_r_imm(rd, r2, imm)) } +emit_e_sub2is_r_r_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: Register, r2: Register, imm: i64) { append_elem(instructions, inst_e_sub2is_r_r_imm(rd, r2, imm)) } inst_e_add2is_r_r_imm :: #force_inline proc "contextless" (rd: Register, r2: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .E_ADD2IS, operand_count = 3, length = 4, mode = .PPC32_VLE, form_id = 1, ops = {op_reg(rd), op_reg(r2), op_imm(imm), {}}} } -emit_e_add2is_r_r_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: Register, r2: Register, imm: i64) { append(instructions, inst_e_add2is_r_r_imm(rd, r2, imm)) } +emit_e_add2is_r_r_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: Register, r2: Register, imm: i64) { append_elem(instructions, inst_e_add2is_r_r_imm(rd, r2, imm)) } inst_e_sub2i_dot_r_r_imm :: #force_inline proc "contextless" (rd: Register, r2: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .E_SUB2I_DOT, operand_count = 3, length = 4, mode = .PPC32_VLE, form_id = 1, ops = {op_reg(rd), op_reg(r2), op_imm(imm), {}}} } -emit_e_sub2i_dot_r_r_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: Register, r2: Register, imm: i64) { append(instructions, inst_e_sub2i_dot_r_r_imm(rd, r2, imm)) } +emit_e_sub2i_dot_r_r_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: Register, r2: Register, imm: i64) { append_elem(instructions, inst_e_sub2i_dot_r_r_imm(rd, r2, imm)) } inst_e_add2i_dot_r_r_imm :: #force_inline proc "contextless" (rd: Register, r2: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .E_ADD2I_DOT, operand_count = 3, length = 4, mode = .PPC32_VLE, form_id = 1, ops = {op_reg(rd), op_reg(r2), op_imm(imm), {}}} } -emit_e_add2i_dot_r_r_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: Register, r2: Register, imm: i64) { append(instructions, inst_e_add2i_dot_r_r_imm(rd, r2, imm)) } +emit_e_add2i_dot_r_r_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: Register, r2: Register, imm: i64) { append_elem(instructions, inst_e_add2i_dot_r_r_imm(rd, r2, imm)) } inst_e_li_r_imm :: #force_inline proc "contextless" (rd: Register, imm: i64) -> Instruction { return Instruction{mnemonic = .E_LI, operand_count = 2, length = 4, mode = .PPC32_VLE, form_id = 1, ops = {op_reg(rd), op_imm(imm), {}, {}}} } -emit_e_li_r_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: Register, imm: i64) { append(instructions, inst_e_li_r_imm(rd, imm)) } +emit_e_li_r_imm :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: Register, imm: i64) { append_elem(instructions, inst_e_li_r_imm(rd, imm)) } inst_e_b_rel :: #force_inline proc "contextless" (target: u32) -> Instruction { return Instruction{mnemonic = .E_B, operand_count = 1, length = 4, mode = .PPC32_VLE, form_id = 1, ops = {op_label(target), {}, {}, {}}} } -emit_e_b_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, target: u32) { append(instructions, inst_e_b_rel(target)) } +emit_e_b_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, target: u32) { append_elem(instructions, inst_e_b_rel(target)) } inst_e_bl_rel :: #force_inline proc "contextless" (target: u32) -> Instruction { return Instruction{mnemonic = .E_BL, operand_count = 1, length = 4, mode = .PPC32_VLE, form_id = 1, ops = {op_label(target), {}, {}, {}}} } -emit_e_bl_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, target: u32) { append(instructions, inst_e_bl_rel(target)) } +emit_e_bl_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, target: u32) { append_elem(instructions, inst_e_bl_rel(target)) } inst_e_bge_rel :: #force_inline proc "contextless" (target: u32) -> Instruction { return Instruction{mnemonic = .E_BGE, operand_count = 1, length = 4, mode = .PPC32_VLE, form_id = 1, ops = {op_label(target), {}, {}, {}}} } -emit_e_bge_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, target: u32) { append(instructions, inst_e_bge_rel(target)) } +emit_e_bge_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, target: u32) { append_elem(instructions, inst_e_bge_rel(target)) } inst_e_bgel_rel :: #force_inline proc "contextless" (target: u32) -> Instruction { return Instruction{mnemonic = .E_BGEL, operand_count = 1, length = 4, mode = .PPC32_VLE, form_id = 1, ops = {op_label(target), {}, {}, {}}} } -emit_e_bgel_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, target: u32) { append(instructions, inst_e_bgel_rel(target)) } +emit_e_bgel_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, target: u32) { append_elem(instructions, inst_e_bgel_rel(target)) } inst_e_bnl_rel :: #force_inline proc "contextless" (target: u32) -> Instruction { return Instruction{mnemonic = .E_BNL, operand_count = 1, length = 4, mode = .PPC32_VLE, form_id = 1, ops = {op_label(target), {}, {}, {}}} } -emit_e_bnl_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, target: u32) { append(instructions, inst_e_bnl_rel(target)) } +emit_e_bnl_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, target: u32) { append_elem(instructions, inst_e_bnl_rel(target)) } inst_e_bnll_rel :: #force_inline proc "contextless" (target: u32) -> Instruction { return Instruction{mnemonic = .E_BNLL, operand_count = 1, length = 4, mode = .PPC32_VLE, form_id = 1, ops = {op_label(target), {}, {}, {}}} } -emit_e_bnll_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, target: u32) { append(instructions, inst_e_bnll_rel(target)) } +emit_e_bnll_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, target: u32) { append_elem(instructions, inst_e_bnll_rel(target)) } inst_e_blt_rel :: #force_inline proc "contextless" (target: u32) -> Instruction { return Instruction{mnemonic = .E_BLT, operand_count = 1, length = 4, mode = .PPC32_VLE, form_id = 1, ops = {op_label(target), {}, {}, {}}} } -emit_e_blt_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, target: u32) { append(instructions, inst_e_blt_rel(target)) } +emit_e_blt_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, target: u32) { append_elem(instructions, inst_e_blt_rel(target)) } inst_e_bltl_rel :: #force_inline proc "contextless" (target: u32) -> Instruction { return Instruction{mnemonic = .E_BLTL, operand_count = 1, length = 4, mode = .PPC32_VLE, form_id = 1, ops = {op_label(target), {}, {}, {}}} } -emit_e_bltl_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, target: u32) { append(instructions, inst_e_bltl_rel(target)) } +emit_e_bltl_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, target: u32) { append_elem(instructions, inst_e_bltl_rel(target)) } inst_e_bgt_rel :: #force_inline proc "contextless" (target: u32) -> Instruction { return Instruction{mnemonic = .E_BGT, operand_count = 1, length = 4, mode = .PPC32_VLE, form_id = 1, ops = {op_label(target), {}, {}, {}}} } -emit_e_bgt_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, target: u32) { append(instructions, inst_e_bgt_rel(target)) } +emit_e_bgt_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, target: u32) { append_elem(instructions, inst_e_bgt_rel(target)) } inst_e_bgtl_rel :: #force_inline proc "contextless" (target: u32) -> Instruction { return Instruction{mnemonic = .E_BGTL, operand_count = 1, length = 4, mode = .PPC32_VLE, form_id = 1, ops = {op_label(target), {}, {}, {}}} } -emit_e_bgtl_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, target: u32) { append(instructions, inst_e_bgtl_rel(target)) } +emit_e_bgtl_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, target: u32) { append_elem(instructions, inst_e_bgtl_rel(target)) } inst_e_ble_rel :: #force_inline proc "contextless" (target: u32) -> Instruction { return Instruction{mnemonic = .E_BLE, operand_count = 1, length = 4, mode = .PPC32_VLE, form_id = 1, ops = {op_label(target), {}, {}, {}}} } -emit_e_ble_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, target: u32) { append(instructions, inst_e_ble_rel(target)) } +emit_e_ble_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, target: u32) { append_elem(instructions, inst_e_ble_rel(target)) } inst_e_blel_rel :: #force_inline proc "contextless" (target: u32) -> Instruction { return Instruction{mnemonic = .E_BLEL, operand_count = 1, length = 4, mode = .PPC32_VLE, form_id = 1, ops = {op_label(target), {}, {}, {}}} } -emit_e_blel_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, target: u32) { append(instructions, inst_e_blel_rel(target)) } +emit_e_blel_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, target: u32) { append_elem(instructions, inst_e_blel_rel(target)) } inst_e_bng_rel :: #force_inline proc "contextless" (target: u32) -> Instruction { return Instruction{mnemonic = .E_BNG, operand_count = 1, length = 4, mode = .PPC32_VLE, form_id = 1, ops = {op_label(target), {}, {}, {}}} } -emit_e_bng_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, target: u32) { append(instructions, inst_e_bng_rel(target)) } +emit_e_bng_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, target: u32) { append_elem(instructions, inst_e_bng_rel(target)) } inst_e_bngl_rel :: #force_inline proc "contextless" (target: u32) -> Instruction { return Instruction{mnemonic = .E_BNGL, operand_count = 1, length = 4, mode = .PPC32_VLE, form_id = 1, ops = {op_label(target), {}, {}, {}}} } -emit_e_bngl_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, target: u32) { append(instructions, inst_e_bngl_rel(target)) } +emit_e_bngl_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, target: u32) { append_elem(instructions, inst_e_bngl_rel(target)) } inst_e_bne_rel :: #force_inline proc "contextless" (target: u32) -> Instruction { return Instruction{mnemonic = .E_BNE, operand_count = 1, length = 4, mode = .PPC32_VLE, form_id = 1, ops = {op_label(target), {}, {}, {}}} } -emit_e_bne_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, target: u32) { append(instructions, inst_e_bne_rel(target)) } +emit_e_bne_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, target: u32) { append_elem(instructions, inst_e_bne_rel(target)) } inst_e_bnel_rel :: #force_inline proc "contextless" (target: u32) -> Instruction { return Instruction{mnemonic = .E_BNEL, operand_count = 1, length = 4, mode = .PPC32_VLE, form_id = 1, ops = {op_label(target), {}, {}, {}}} } -emit_e_bnel_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, target: u32) { append(instructions, inst_e_bnel_rel(target)) } +emit_e_bnel_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, target: u32) { append_elem(instructions, inst_e_bnel_rel(target)) } inst_e_beq_rel :: #force_inline proc "contextless" (target: u32) -> Instruction { return Instruction{mnemonic = .E_BEQ, operand_count = 1, length = 4, mode = .PPC32_VLE, form_id = 1, ops = {op_label(target), {}, {}, {}}} } -emit_e_beq_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, target: u32) { append(instructions, inst_e_beq_rel(target)) } +emit_e_beq_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, target: u32) { append_elem(instructions, inst_e_beq_rel(target)) } inst_e_beql_rel :: #force_inline proc "contextless" (target: u32) -> Instruction { return Instruction{mnemonic = .E_BEQL, operand_count = 1, length = 4, mode = .PPC32_VLE, form_id = 1, ops = {op_label(target), {}, {}, {}}} } -emit_e_beql_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, target: u32) { append(instructions, inst_e_beql_rel(target)) } +emit_e_beql_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, target: u32) { append_elem(instructions, inst_e_beql_rel(target)) } inst_e_bso_rel :: #force_inline proc "contextless" (target: u32) -> Instruction { return Instruction{mnemonic = .E_BSO, operand_count = 1, length = 4, mode = .PPC32_VLE, form_id = 1, ops = {op_label(target), {}, {}, {}}} } -emit_e_bso_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, target: u32) { append(instructions, inst_e_bso_rel(target)) } +emit_e_bso_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, target: u32) { append_elem(instructions, inst_e_bso_rel(target)) } inst_e_bsol_rel :: #force_inline proc "contextless" (target: u32) -> Instruction { return Instruction{mnemonic = .E_BSOL, operand_count = 1, length = 4, mode = .PPC32_VLE, form_id = 1, ops = {op_label(target), {}, {}, {}}} } -emit_e_bsol_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, target: u32) { append(instructions, inst_e_bsol_rel(target)) } +emit_e_bsol_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, target: u32) { append_elem(instructions, inst_e_bsol_rel(target)) } inst_e_bun_rel :: #force_inline proc "contextless" (target: u32) -> Instruction { return Instruction{mnemonic = .E_BUN, operand_count = 1, length = 4, mode = .PPC32_VLE, form_id = 1, ops = {op_label(target), {}, {}, {}}} } -emit_e_bun_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, target: u32) { append(instructions, inst_e_bun_rel(target)) } +emit_e_bun_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, target: u32) { append_elem(instructions, inst_e_bun_rel(target)) } inst_e_bunl_rel :: #force_inline proc "contextless" (target: u32) -> Instruction { return Instruction{mnemonic = .E_BUNL, operand_count = 1, length = 4, mode = .PPC32_VLE, form_id = 1, ops = {op_label(target), {}, {}, {}}} } -emit_e_bunl_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, target: u32) { append(instructions, inst_e_bunl_rel(target)) } +emit_e_bunl_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, target: u32) { append_elem(instructions, inst_e_bunl_rel(target)) } inst_e_bns_rel :: #force_inline proc "contextless" (target: u32) -> Instruction { return Instruction{mnemonic = .E_BNS, operand_count = 1, length = 4, mode = .PPC32_VLE, form_id = 1, ops = {op_label(target), {}, {}, {}}} } -emit_e_bns_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, target: u32) { append(instructions, inst_e_bns_rel(target)) } +emit_e_bns_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, target: u32) { append_elem(instructions, inst_e_bns_rel(target)) } inst_e_bnsl_rel :: #force_inline proc "contextless" (target: u32) -> Instruction { return Instruction{mnemonic = .E_BNSL, operand_count = 1, length = 4, mode = .PPC32_VLE, form_id = 1, ops = {op_label(target), {}, {}, {}}} } -emit_e_bnsl_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, target: u32) { append(instructions, inst_e_bnsl_rel(target)) } +emit_e_bnsl_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, target: u32) { append_elem(instructions, inst_e_bnsl_rel(target)) } inst_e_bnu_rel :: #force_inline proc "contextless" (target: u32) -> Instruction { return Instruction{mnemonic = .E_BNU, operand_count = 1, length = 4, mode = .PPC32_VLE, form_id = 1, ops = {op_label(target), {}, {}, {}}} } -emit_e_bnu_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, target: u32) { append(instructions, inst_e_bnu_rel(target)) } +emit_e_bnu_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, target: u32) { append_elem(instructions, inst_e_bnu_rel(target)) } inst_e_bnul_rel :: #force_inline proc "contextless" (target: u32) -> Instruction { return Instruction{mnemonic = .E_BNUL, operand_count = 1, length = 4, mode = .PPC32_VLE, form_id = 1, ops = {op_label(target), {}, {}, {}}} } -emit_e_bnul_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, target: u32) { append(instructions, inst_e_bnul_rel(target)) } +emit_e_bnul_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, target: u32) { append_elem(instructions, inst_e_bnul_rel(target)) } inst_e_bc_bo_crb_rel :: #force_inline proc "contextless" (imm: i64, imm2: i64, target: u32) -> Instruction { return Instruction{mnemonic = .E_BC, operand_count = 3, length = 4, mode = .PPC32_VLE, form_id = 1, ops = {op_imm(imm), op_imm(imm2), op_label(target), {}}} } -emit_e_bc_bo_crb_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, imm2: i64, target: u32) { append(instructions, inst_e_bc_bo_crb_rel(imm, imm2, target)) } +emit_e_bc_bo_crb_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, imm2: i64, target: u32) { append_elem(instructions, inst_e_bc_bo_crb_rel(imm, imm2, target)) } inst_e_bcl_bo_crb_rel :: #force_inline proc "contextless" (imm: i64, imm2: i64, target: u32) -> Instruction { return Instruction{mnemonic = .E_BCL, operand_count = 3, length = 4, mode = .PPC32_VLE, form_id = 1, ops = {op_imm(imm), op_imm(imm2), op_label(target), {}}} } -emit_e_bcl_bo_crb_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, imm2: i64, target: u32) { append(instructions, inst_e_bcl_bo_crb_rel(imm, imm2, target)) } +emit_e_bcl_bo_crb_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, imm2: i64, target: u32) { append_elem(instructions, inst_e_bcl_bo_crb_rel(imm, imm2, target)) } inst_e_bf_rel :: #force_inline proc "contextless" (target: u32) -> Instruction { return Instruction{mnemonic = .E_BF, operand_count = 1, length = 4, mode = .PPC32_VLE, form_id = 1, ops = {op_label(target), {}, {}, {}}} } -emit_e_bf_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, target: u32) { append(instructions, inst_e_bf_rel(target)) } +emit_e_bf_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, target: u32) { append_elem(instructions, inst_e_bf_rel(target)) } inst_e_bfl_rel :: #force_inline proc "contextless" (target: u32) -> Instruction { return Instruction{mnemonic = .E_BFL, operand_count = 1, length = 4, mode = .PPC32_VLE, form_id = 1, ops = {op_label(target), {}, {}, {}}} } -emit_e_bfl_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, target: u32) { append(instructions, inst_e_bfl_rel(target)) } +emit_e_bfl_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, target: u32) { append_elem(instructions, inst_e_bfl_rel(target)) } inst_e_bt_rel :: #force_inline proc "contextless" (target: u32) -> Instruction { return Instruction{mnemonic = .E_BT, operand_count = 1, length = 4, mode = .PPC32_VLE, form_id = 1, ops = {op_label(target), {}, {}, {}}} } -emit_e_bt_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, target: u32) { append(instructions, inst_e_bt_rel(target)) } +emit_e_bt_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, target: u32) { append_elem(instructions, inst_e_bt_rel(target)) } inst_e_btl_rel :: #force_inline proc "contextless" (target: u32) -> Instruction { return Instruction{mnemonic = .E_BTL, operand_count = 1, length = 4, mode = .PPC32_VLE, form_id = 1, ops = {op_label(target), {}, {}, {}}} } -emit_e_btl_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, target: u32) { append(instructions, inst_e_btl_rel(target)) } +emit_e_btl_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, target: u32) { append_elem(instructions, inst_e_btl_rel(target)) } // ============================================================================= // Overload Groups diff --git a/core/rexcode/isa/ppc_vle/tools/gen_mnemonic_builders.odin b/core/rexcode/isa/ppc_vle/tools/gen_mnemonic_builders.odin index 3c31564e4..3cdc45efb 100644 --- a/core/rexcode/isa/ppc_vle/tools/gen_mnemonic_builders.odin +++ b/core/rexcode/isa/ppc_vle/tools/gen_mnemonic_builders.odin @@ -420,7 +420,7 @@ generate_emit_proc :: proc(sb: ^strings.Builder, entry: Proc_Entry, max_name_pad strings.write_string(sb, ": ") strings.write_string(sb, operand_odin_type(entry.sig.types[i])) } - strings.write_string(sb, ") { append(instructions, ") + strings.write_string(sb, ") { append_elem(instructions, ") strings.write_string(sb, entry.proc_name) strings.write_string(sb, "(") for i in 0.. Instruction { return Instruction{mnemonic = .LUI, operand_count = 2, length = 4, ops = {op_gpr(rd), op_imm(imm, 4), {}, {}}} } -emit_lui_gpr_imm20 :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: GPR, imm: i64) { append(instructions, inst_lui_gpr_imm20(rd, imm)) } +emit_lui_gpr_imm20 :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: GPR, imm: i64) { append_elem(instructions, inst_lui_gpr_imm20(rd, imm)) } inst_auipc_gpr_imm20 :: #force_inline proc "contextless" (rd: GPR, imm: i64) -> Instruction { return Instruction{mnemonic = .AUIPC, operand_count = 2, length = 4, ops = {op_gpr(rd), op_imm(imm, 4), {}, {}}} } -emit_auipc_gpr_imm20 :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: GPR, imm: i64) { append(instructions, inst_auipc_gpr_imm20(rd, imm)) } +emit_auipc_gpr_imm20 :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: GPR, imm: i64) { append_elem(instructions, inst_auipc_gpr_imm20(rd, imm)) } inst_jal_gpr_label :: #force_inline proc "contextless" (rd: GPR, label: u32) -> Instruction { return Instruction{mnemonic = .JAL, operand_count = 2, length = 4, ops = {op_gpr(rd), op_label(label, 4), {}, {}}} } -emit_jal_gpr_label :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: GPR, label: u32) { append(instructions, inst_jal_gpr_label(rd, label)) } +emit_jal_gpr_label :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: GPR, label: u32) { append_elem(instructions, inst_jal_gpr_label(rd, label)) } inst_jalr_gpr_gpr_imm12 :: #force_inline proc "contextless" (rd: GPR, rs1: GPR, imm: i64) -> Instruction { return Instruction{mnemonic = .JALR, operand_count = 3, length = 4, ops = {op_gpr(rd), op_gpr(rs1), op_imm(imm, 2), {}}} } -emit_jalr_gpr_gpr_imm12 :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: GPR, rs1: GPR, imm: i64) { append(instructions, inst_jalr_gpr_gpr_imm12(rd, rs1, imm)) } +emit_jalr_gpr_gpr_imm12 :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: GPR, rs1: GPR, imm: i64) { append_elem(instructions, inst_jalr_gpr_gpr_imm12(rd, rs1, imm)) } inst_beq_gpr_gpr_label :: #force_inline proc "contextless" (rd: GPR, rs1: GPR, label: u32) -> Instruction { return Instruction{mnemonic = .BEQ, operand_count = 3, length = 4, ops = {op_gpr(rd), op_gpr(rs1), op_label(label, 2), {}}} } -emit_beq_gpr_gpr_label :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: GPR, rs1: GPR, label: u32) { append(instructions, inst_beq_gpr_gpr_label(rd, rs1, label)) } +emit_beq_gpr_gpr_label :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: GPR, rs1: GPR, label: u32) { append_elem(instructions, inst_beq_gpr_gpr_label(rd, rs1, label)) } inst_bne_gpr_gpr_label :: #force_inline proc "contextless" (rd: GPR, rs1: GPR, label: u32) -> Instruction { return Instruction{mnemonic = .BNE, operand_count = 3, length = 4, ops = {op_gpr(rd), op_gpr(rs1), op_label(label, 2), {}}} } -emit_bne_gpr_gpr_label :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: GPR, rs1: GPR, label: u32) { append(instructions, inst_bne_gpr_gpr_label(rd, rs1, label)) } +emit_bne_gpr_gpr_label :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: GPR, rs1: GPR, label: u32) { append_elem(instructions, inst_bne_gpr_gpr_label(rd, rs1, label)) } inst_blt_gpr_gpr_label :: #force_inline proc "contextless" (rd: GPR, rs1: GPR, label: u32) -> Instruction { return Instruction{mnemonic = .BLT, operand_count = 3, length = 4, ops = {op_gpr(rd), op_gpr(rs1), op_label(label, 2), {}}} } -emit_blt_gpr_gpr_label :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: GPR, rs1: GPR, label: u32) { append(instructions, inst_blt_gpr_gpr_label(rd, rs1, label)) } +emit_blt_gpr_gpr_label :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: GPR, rs1: GPR, label: u32) { append_elem(instructions, inst_blt_gpr_gpr_label(rd, rs1, label)) } inst_bge_gpr_gpr_label :: #force_inline proc "contextless" (rd: GPR, rs1: GPR, label: u32) -> Instruction { return Instruction{mnemonic = .BGE, operand_count = 3, length = 4, ops = {op_gpr(rd), op_gpr(rs1), op_label(label, 2), {}}} } -emit_bge_gpr_gpr_label :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: GPR, rs1: GPR, label: u32) { append(instructions, inst_bge_gpr_gpr_label(rd, rs1, label)) } +emit_bge_gpr_gpr_label :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: GPR, rs1: GPR, label: u32) { append_elem(instructions, inst_bge_gpr_gpr_label(rd, rs1, label)) } inst_bltu_gpr_gpr_label :: #force_inline proc "contextless" (rd: GPR, rs1: GPR, label: u32) -> Instruction { return Instruction{mnemonic = .BLTU, operand_count = 3, length = 4, ops = {op_gpr(rd), op_gpr(rs1), op_label(label, 2), {}}} } -emit_bltu_gpr_gpr_label :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: GPR, rs1: GPR, label: u32) { append(instructions, inst_bltu_gpr_gpr_label(rd, rs1, label)) } +emit_bltu_gpr_gpr_label :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: GPR, rs1: GPR, label: u32) { append_elem(instructions, inst_bltu_gpr_gpr_label(rd, rs1, label)) } inst_bgeu_gpr_gpr_label :: #force_inline proc "contextless" (rd: GPR, rs1: GPR, label: u32) -> Instruction { return Instruction{mnemonic = .BGEU, operand_count = 3, length = 4, ops = {op_gpr(rd), op_gpr(rs1), op_label(label, 2), {}}} } -emit_bgeu_gpr_gpr_label :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: GPR, rs1: GPR, label: u32) { append(instructions, inst_bgeu_gpr_gpr_label(rd, rs1, label)) } +emit_bgeu_gpr_gpr_label :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: GPR, rs1: GPR, label: u32) { append_elem(instructions, inst_bgeu_gpr_gpr_label(rd, rs1, label)) } inst_lb_gpr_mem :: #force_inline proc "contextless" (rd: GPR, mem: Memory) -> Instruction { return Instruction{mnemonic = .LB, operand_count = 2, length = 4, ops = {op_gpr(rd), op_mem(mem), {}, {}}} } -emit_lb_gpr_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: GPR, mem: Memory) { append(instructions, inst_lb_gpr_mem(rd, mem)) } +emit_lb_gpr_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: GPR, mem: Memory) { append_elem(instructions, inst_lb_gpr_mem(rd, mem)) } inst_lh_gpr_mem :: #force_inline proc "contextless" (rd: GPR, mem: Memory) -> Instruction { return Instruction{mnemonic = .LH, operand_count = 2, length = 4, ops = {op_gpr(rd), op_mem(mem), {}, {}}} } -emit_lh_gpr_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: GPR, mem: Memory) { append(instructions, inst_lh_gpr_mem(rd, mem)) } +emit_lh_gpr_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: GPR, mem: Memory) { append_elem(instructions, inst_lh_gpr_mem(rd, mem)) } inst_lw_gpr_mem :: #force_inline proc "contextless" (rd: GPR, mem: Memory) -> Instruction { return Instruction{mnemonic = .LW, operand_count = 2, length = 4, ops = {op_gpr(rd), op_mem(mem), {}, {}}} } -emit_lw_gpr_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: GPR, mem: Memory) { append(instructions, inst_lw_gpr_mem(rd, mem)) } +emit_lw_gpr_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: GPR, mem: Memory) { append_elem(instructions, inst_lw_gpr_mem(rd, mem)) } inst_lbu_gpr_mem :: #force_inline proc "contextless" (rd: GPR, mem: Memory) -> Instruction { return Instruction{mnemonic = .LBU, operand_count = 2, length = 4, ops = {op_gpr(rd), op_mem(mem), {}, {}}} } -emit_lbu_gpr_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: GPR, mem: Memory) { append(instructions, inst_lbu_gpr_mem(rd, mem)) } +emit_lbu_gpr_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: GPR, mem: Memory) { append_elem(instructions, inst_lbu_gpr_mem(rd, mem)) } inst_lhu_gpr_mem :: #force_inline proc "contextless" (rd: GPR, mem: Memory) -> Instruction { return Instruction{mnemonic = .LHU, operand_count = 2, length = 4, ops = {op_gpr(rd), op_mem(mem), {}, {}}} } -emit_lhu_gpr_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: GPR, mem: Memory) { append(instructions, inst_lhu_gpr_mem(rd, mem)) } +emit_lhu_gpr_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: GPR, mem: Memory) { append_elem(instructions, inst_lhu_gpr_mem(rd, mem)) } inst_sb_gpr_mem :: #force_inline proc "contextless" (rd: GPR, mem: Memory) -> Instruction { return Instruction{mnemonic = .SB, operand_count = 2, length = 4, ops = {op_gpr(rd), op_mem(mem), {}, {}}} } -emit_sb_gpr_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: GPR, mem: Memory) { append(instructions, inst_sb_gpr_mem(rd, mem)) } +emit_sb_gpr_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: GPR, mem: Memory) { append_elem(instructions, inst_sb_gpr_mem(rd, mem)) } inst_sh_gpr_mem :: #force_inline proc "contextless" (rd: GPR, mem: Memory) -> Instruction { return Instruction{mnemonic = .SH, operand_count = 2, length = 4, ops = {op_gpr(rd), op_mem(mem), {}, {}}} } -emit_sh_gpr_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: GPR, mem: Memory) { append(instructions, inst_sh_gpr_mem(rd, mem)) } +emit_sh_gpr_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: GPR, mem: Memory) { append_elem(instructions, inst_sh_gpr_mem(rd, mem)) } inst_sw_gpr_mem :: #force_inline proc "contextless" (rd: GPR, mem: Memory) -> Instruction { return Instruction{mnemonic = .SW, operand_count = 2, length = 4, ops = {op_gpr(rd), op_mem(mem), {}, {}}} } -emit_sw_gpr_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: GPR, mem: Memory) { append(instructions, inst_sw_gpr_mem(rd, mem)) } +emit_sw_gpr_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: GPR, mem: Memory) { append_elem(instructions, inst_sw_gpr_mem(rd, mem)) } inst_lwu_gpr_mem :: #force_inline proc "contextless" (rd: GPR, mem: Memory) -> Instruction { return Instruction{mnemonic = .LWU, operand_count = 2, length = 4, ops = {op_gpr(rd), op_mem(mem), {}, {}}} } -emit_lwu_gpr_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: GPR, mem: Memory) { append(instructions, inst_lwu_gpr_mem(rd, mem)) } +emit_lwu_gpr_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: GPR, mem: Memory) { append_elem(instructions, inst_lwu_gpr_mem(rd, mem)) } inst_ld_gpr_mem :: #force_inline proc "contextless" (rd: GPR, mem: Memory) -> Instruction { return Instruction{mnemonic = .LD, operand_count = 2, length = 4, ops = {op_gpr(rd), op_mem(mem), {}, {}}} } -emit_ld_gpr_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: GPR, mem: Memory) { append(instructions, inst_ld_gpr_mem(rd, mem)) } +emit_ld_gpr_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: GPR, mem: Memory) { append_elem(instructions, inst_ld_gpr_mem(rd, mem)) } inst_sd_gpr_mem :: #force_inline proc "contextless" (rd: GPR, mem: Memory) -> Instruction { return Instruction{mnemonic = .SD, operand_count = 2, length = 4, ops = {op_gpr(rd), op_mem(mem), {}, {}}} } -emit_sd_gpr_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: GPR, mem: Memory) { append(instructions, inst_sd_gpr_mem(rd, mem)) } +emit_sd_gpr_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: GPR, mem: Memory) { append_elem(instructions, inst_sd_gpr_mem(rd, mem)) } inst_addi_gpr_gpr_imm12 :: #force_inline proc "contextless" (rd: GPR, rs1: GPR, imm: i64) -> Instruction { return Instruction{mnemonic = .ADDI, operand_count = 3, length = 4, ops = {op_gpr(rd), op_gpr(rs1), op_imm(imm, 2), {}}} } -emit_addi_gpr_gpr_imm12 :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: GPR, rs1: GPR, imm: i64) { append(instructions, inst_addi_gpr_gpr_imm12(rd, rs1, imm)) } +emit_addi_gpr_gpr_imm12 :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: GPR, rs1: GPR, imm: i64) { append_elem(instructions, inst_addi_gpr_gpr_imm12(rd, rs1, imm)) } inst_slti_gpr_gpr_imm12 :: #force_inline proc "contextless" (rd: GPR, rs1: GPR, imm: i64) -> Instruction { return Instruction{mnemonic = .SLTI, operand_count = 3, length = 4, ops = {op_gpr(rd), op_gpr(rs1), op_imm(imm, 2), {}}} } -emit_slti_gpr_gpr_imm12 :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: GPR, rs1: GPR, imm: i64) { append(instructions, inst_slti_gpr_gpr_imm12(rd, rs1, imm)) } +emit_slti_gpr_gpr_imm12 :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: GPR, rs1: GPR, imm: i64) { append_elem(instructions, inst_slti_gpr_gpr_imm12(rd, rs1, imm)) } inst_sltiu_gpr_gpr_imm12 :: #force_inline proc "contextless" (rd: GPR, rs1: GPR, imm: i64) -> Instruction { return Instruction{mnemonic = .SLTIU, operand_count = 3, length = 4, ops = {op_gpr(rd), op_gpr(rs1), op_imm(imm, 2), {}}} } -emit_sltiu_gpr_gpr_imm12 :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: GPR, rs1: GPR, imm: i64) { append(instructions, inst_sltiu_gpr_gpr_imm12(rd, rs1, imm)) } +emit_sltiu_gpr_gpr_imm12 :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: GPR, rs1: GPR, imm: i64) { append_elem(instructions, inst_sltiu_gpr_gpr_imm12(rd, rs1, imm)) } inst_xori_gpr_gpr_imm12 :: #force_inline proc "contextless" (rd: GPR, rs1: GPR, imm: i64) -> Instruction { return Instruction{mnemonic = .XORI, operand_count = 3, length = 4, ops = {op_gpr(rd), op_gpr(rs1), op_imm(imm, 2), {}}} } -emit_xori_gpr_gpr_imm12 :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: GPR, rs1: GPR, imm: i64) { append(instructions, inst_xori_gpr_gpr_imm12(rd, rs1, imm)) } +emit_xori_gpr_gpr_imm12 :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: GPR, rs1: GPR, imm: i64) { append_elem(instructions, inst_xori_gpr_gpr_imm12(rd, rs1, imm)) } inst_ori_gpr_gpr_imm12 :: #force_inline proc "contextless" (rd: GPR, rs1: GPR, imm: i64) -> Instruction { return Instruction{mnemonic = .ORI, operand_count = 3, length = 4, ops = {op_gpr(rd), op_gpr(rs1), op_imm(imm, 2), {}}} } -emit_ori_gpr_gpr_imm12 :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: GPR, rs1: GPR, imm: i64) { append(instructions, inst_ori_gpr_gpr_imm12(rd, rs1, imm)) } +emit_ori_gpr_gpr_imm12 :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: GPR, rs1: GPR, imm: i64) { append_elem(instructions, inst_ori_gpr_gpr_imm12(rd, rs1, imm)) } inst_andi_gpr_gpr_imm12 :: #force_inline proc "contextless" (rd: GPR, rs1: GPR, imm: i64) -> Instruction { return Instruction{mnemonic = .ANDI, operand_count = 3, length = 4, ops = {op_gpr(rd), op_gpr(rs1), op_imm(imm, 2), {}}} } -emit_andi_gpr_gpr_imm12 :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: GPR, rs1: GPR, imm: i64) { append(instructions, inst_andi_gpr_gpr_imm12(rd, rs1, imm)) } +emit_andi_gpr_gpr_imm12 :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: GPR, rs1: GPR, imm: i64) { append_elem(instructions, inst_andi_gpr_gpr_imm12(rd, rs1, imm)) } inst_slli_gpr_gpr_imm6 :: #force_inline proc "contextless" (rd: GPR, rs1: GPR, imm: i64) -> Instruction { return Instruction{mnemonic = .SLLI, operand_count = 3, length = 4, ops = {op_gpr(rd), op_gpr(rs1), op_imm(imm, 1), {}}} } -emit_slli_gpr_gpr_imm6 :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: GPR, rs1: GPR, imm: i64) { append(instructions, inst_slli_gpr_gpr_imm6(rd, rs1, imm)) } +emit_slli_gpr_gpr_imm6 :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: GPR, rs1: GPR, imm: i64) { append_elem(instructions, inst_slli_gpr_gpr_imm6(rd, rs1, imm)) } inst_srli_gpr_gpr_imm6 :: #force_inline proc "contextless" (rd: GPR, rs1: GPR, imm: i64) -> Instruction { return Instruction{mnemonic = .SRLI, operand_count = 3, length = 4, ops = {op_gpr(rd), op_gpr(rs1), op_imm(imm, 1), {}}} } -emit_srli_gpr_gpr_imm6 :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: GPR, rs1: GPR, imm: i64) { append(instructions, inst_srli_gpr_gpr_imm6(rd, rs1, imm)) } +emit_srli_gpr_gpr_imm6 :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: GPR, rs1: GPR, imm: i64) { append_elem(instructions, inst_srli_gpr_gpr_imm6(rd, rs1, imm)) } inst_srai_gpr_gpr_imm6 :: #force_inline proc "contextless" (rd: GPR, rs1: GPR, imm: i64) -> Instruction { return Instruction{mnemonic = .SRAI, operand_count = 3, length = 4, ops = {op_gpr(rd), op_gpr(rs1), op_imm(imm, 1), {}}} } -emit_srai_gpr_gpr_imm6 :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: GPR, rs1: GPR, imm: i64) { append(instructions, inst_srai_gpr_gpr_imm6(rd, rs1, imm)) } +emit_srai_gpr_gpr_imm6 :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: GPR, rs1: GPR, imm: i64) { append_elem(instructions, inst_srai_gpr_gpr_imm6(rd, rs1, imm)) } inst_addiw_gpr_gpr_imm12 :: #force_inline proc "contextless" (rd: GPR, rs1: GPR, imm: i64) -> Instruction { return Instruction{mnemonic = .ADDIW, operand_count = 3, length = 4, ops = {op_gpr(rd), op_gpr(rs1), op_imm(imm, 2), {}}} } -emit_addiw_gpr_gpr_imm12 :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: GPR, rs1: GPR, imm: i64) { append(instructions, inst_addiw_gpr_gpr_imm12(rd, rs1, imm)) } +emit_addiw_gpr_gpr_imm12 :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: GPR, rs1: GPR, imm: i64) { append_elem(instructions, inst_addiw_gpr_gpr_imm12(rd, rs1, imm)) } inst_slliw_gpr_gpr_imm5 :: #force_inline proc "contextless" (rd: GPR, rs1: GPR, imm: i64) -> Instruction { return Instruction{mnemonic = .SLLIW, operand_count = 3, length = 4, ops = {op_gpr(rd), op_gpr(rs1), op_imm(imm, 1), {}}} } -emit_slliw_gpr_gpr_imm5 :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: GPR, rs1: GPR, imm: i64) { append(instructions, inst_slliw_gpr_gpr_imm5(rd, rs1, imm)) } +emit_slliw_gpr_gpr_imm5 :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: GPR, rs1: GPR, imm: i64) { append_elem(instructions, inst_slliw_gpr_gpr_imm5(rd, rs1, imm)) } inst_srliw_gpr_gpr_imm5 :: #force_inline proc "contextless" (rd: GPR, rs1: GPR, imm: i64) -> Instruction { return Instruction{mnemonic = .SRLIW, operand_count = 3, length = 4, ops = {op_gpr(rd), op_gpr(rs1), op_imm(imm, 1), {}}} } -emit_srliw_gpr_gpr_imm5 :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: GPR, rs1: GPR, imm: i64) { append(instructions, inst_srliw_gpr_gpr_imm5(rd, rs1, imm)) } +emit_srliw_gpr_gpr_imm5 :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: GPR, rs1: GPR, imm: i64) { append_elem(instructions, inst_srliw_gpr_gpr_imm5(rd, rs1, imm)) } inst_sraiw_gpr_gpr_imm5 :: #force_inline proc "contextless" (rd: GPR, rs1: GPR, imm: i64) -> Instruction { return Instruction{mnemonic = .SRAIW, operand_count = 3, length = 4, ops = {op_gpr(rd), op_gpr(rs1), op_imm(imm, 1), {}}} } -emit_sraiw_gpr_gpr_imm5 :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: GPR, rs1: GPR, imm: i64) { append(instructions, inst_sraiw_gpr_gpr_imm5(rd, rs1, imm)) } +emit_sraiw_gpr_gpr_imm5 :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: GPR, rs1: GPR, imm: i64) { append_elem(instructions, inst_sraiw_gpr_gpr_imm5(rd, rs1, imm)) } inst_add_gpr_gpr_gpr :: #force_inline proc "contextless" (rd: GPR, rs1: GPR, rs2: GPR) -> Instruction { return Instruction{mnemonic = .ADD, operand_count = 3, length = 4, ops = {op_gpr(rd), op_gpr(rs1), op_gpr(rs2), {}}} } -emit_add_gpr_gpr_gpr :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: GPR, rs1: GPR, rs2: GPR) { append(instructions, inst_add_gpr_gpr_gpr(rd, rs1, rs2)) } +emit_add_gpr_gpr_gpr :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: GPR, rs1: GPR, rs2: GPR) { append_elem(instructions, inst_add_gpr_gpr_gpr(rd, rs1, rs2)) } inst_sub_gpr_gpr_gpr :: #force_inline proc "contextless" (rd: GPR, rs1: GPR, rs2: GPR) -> Instruction { return Instruction{mnemonic = .SUB, operand_count = 3, length = 4, ops = {op_gpr(rd), op_gpr(rs1), op_gpr(rs2), {}}} } -emit_sub_gpr_gpr_gpr :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: GPR, rs1: GPR, rs2: GPR) { append(instructions, inst_sub_gpr_gpr_gpr(rd, rs1, rs2)) } +emit_sub_gpr_gpr_gpr :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: GPR, rs1: GPR, rs2: GPR) { append_elem(instructions, inst_sub_gpr_gpr_gpr(rd, rs1, rs2)) } inst_sll_gpr_gpr_gpr :: #force_inline proc "contextless" (rd: GPR, rs1: GPR, rs2: GPR) -> Instruction { return Instruction{mnemonic = .SLL, operand_count = 3, length = 4, ops = {op_gpr(rd), op_gpr(rs1), op_gpr(rs2), {}}} } -emit_sll_gpr_gpr_gpr :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: GPR, rs1: GPR, rs2: GPR) { append(instructions, inst_sll_gpr_gpr_gpr(rd, rs1, rs2)) } +emit_sll_gpr_gpr_gpr :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: GPR, rs1: GPR, rs2: GPR) { append_elem(instructions, inst_sll_gpr_gpr_gpr(rd, rs1, rs2)) } inst_slt_gpr_gpr_gpr :: #force_inline proc "contextless" (rd: GPR, rs1: GPR, rs2: GPR) -> Instruction { return Instruction{mnemonic = .SLT, operand_count = 3, length = 4, ops = {op_gpr(rd), op_gpr(rs1), op_gpr(rs2), {}}} } -emit_slt_gpr_gpr_gpr :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: GPR, rs1: GPR, rs2: GPR) { append(instructions, inst_slt_gpr_gpr_gpr(rd, rs1, rs2)) } +emit_slt_gpr_gpr_gpr :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: GPR, rs1: GPR, rs2: GPR) { append_elem(instructions, inst_slt_gpr_gpr_gpr(rd, rs1, rs2)) } inst_sltu_gpr_gpr_gpr :: #force_inline proc "contextless" (rd: GPR, rs1: GPR, rs2: GPR) -> Instruction { return Instruction{mnemonic = .SLTU, operand_count = 3, length = 4, ops = {op_gpr(rd), op_gpr(rs1), op_gpr(rs2), {}}} } -emit_sltu_gpr_gpr_gpr :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: GPR, rs1: GPR, rs2: GPR) { append(instructions, inst_sltu_gpr_gpr_gpr(rd, rs1, rs2)) } +emit_sltu_gpr_gpr_gpr :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: GPR, rs1: GPR, rs2: GPR) { append_elem(instructions, inst_sltu_gpr_gpr_gpr(rd, rs1, rs2)) } inst_xor_gpr_gpr_gpr :: #force_inline proc "contextless" (rd: GPR, rs1: GPR, rs2: GPR) -> Instruction { return Instruction{mnemonic = .XOR, operand_count = 3, length = 4, ops = {op_gpr(rd), op_gpr(rs1), op_gpr(rs2), {}}} } -emit_xor_gpr_gpr_gpr :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: GPR, rs1: GPR, rs2: GPR) { append(instructions, inst_xor_gpr_gpr_gpr(rd, rs1, rs2)) } +emit_xor_gpr_gpr_gpr :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: GPR, rs1: GPR, rs2: GPR) { append_elem(instructions, inst_xor_gpr_gpr_gpr(rd, rs1, rs2)) } inst_srl_gpr_gpr_gpr :: #force_inline proc "contextless" (rd: GPR, rs1: GPR, rs2: GPR) -> Instruction { return Instruction{mnemonic = .SRL, operand_count = 3, length = 4, ops = {op_gpr(rd), op_gpr(rs1), op_gpr(rs2), {}}} } -emit_srl_gpr_gpr_gpr :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: GPR, rs1: GPR, rs2: GPR) { append(instructions, inst_srl_gpr_gpr_gpr(rd, rs1, rs2)) } +emit_srl_gpr_gpr_gpr :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: GPR, rs1: GPR, rs2: GPR) { append_elem(instructions, inst_srl_gpr_gpr_gpr(rd, rs1, rs2)) } inst_sra_gpr_gpr_gpr :: #force_inline proc "contextless" (rd: GPR, rs1: GPR, rs2: GPR) -> Instruction { return Instruction{mnemonic = .SRA, operand_count = 3, length = 4, ops = {op_gpr(rd), op_gpr(rs1), op_gpr(rs2), {}}} } -emit_sra_gpr_gpr_gpr :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: GPR, rs1: GPR, rs2: GPR) { append(instructions, inst_sra_gpr_gpr_gpr(rd, rs1, rs2)) } +emit_sra_gpr_gpr_gpr :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: GPR, rs1: GPR, rs2: GPR) { append_elem(instructions, inst_sra_gpr_gpr_gpr(rd, rs1, rs2)) } inst_or_gpr_gpr_gpr :: #force_inline proc "contextless" (rd: GPR, rs1: GPR, rs2: GPR) -> Instruction { return Instruction{mnemonic = .OR, operand_count = 3, length = 4, ops = {op_gpr(rd), op_gpr(rs1), op_gpr(rs2), {}}} } -emit_or_gpr_gpr_gpr :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: GPR, rs1: GPR, rs2: GPR) { append(instructions, inst_or_gpr_gpr_gpr(rd, rs1, rs2)) } +emit_or_gpr_gpr_gpr :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: GPR, rs1: GPR, rs2: GPR) { append_elem(instructions, inst_or_gpr_gpr_gpr(rd, rs1, rs2)) } inst_and_gpr_gpr_gpr :: #force_inline proc "contextless" (rd: GPR, rs1: GPR, rs2: GPR) -> Instruction { return Instruction{mnemonic = .AND, operand_count = 3, length = 4, ops = {op_gpr(rd), op_gpr(rs1), op_gpr(rs2), {}}} } -emit_and_gpr_gpr_gpr :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: GPR, rs1: GPR, rs2: GPR) { append(instructions, inst_and_gpr_gpr_gpr(rd, rs1, rs2)) } +emit_and_gpr_gpr_gpr :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: GPR, rs1: GPR, rs2: GPR) { append_elem(instructions, inst_and_gpr_gpr_gpr(rd, rs1, rs2)) } inst_addw_gpr_gpr_gpr :: #force_inline proc "contextless" (rd: GPR, rs1: GPR, rs2: GPR) -> Instruction { return Instruction{mnemonic = .ADDW, operand_count = 3, length = 4, ops = {op_gpr(rd), op_gpr(rs1), op_gpr(rs2), {}}} } -emit_addw_gpr_gpr_gpr :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: GPR, rs1: GPR, rs2: GPR) { append(instructions, inst_addw_gpr_gpr_gpr(rd, rs1, rs2)) } +emit_addw_gpr_gpr_gpr :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: GPR, rs1: GPR, rs2: GPR) { append_elem(instructions, inst_addw_gpr_gpr_gpr(rd, rs1, rs2)) } inst_subw_gpr_gpr_gpr :: #force_inline proc "contextless" (rd: GPR, rs1: GPR, rs2: GPR) -> Instruction { return Instruction{mnemonic = .SUBW, operand_count = 3, length = 4, ops = {op_gpr(rd), op_gpr(rs1), op_gpr(rs2), {}}} } -emit_subw_gpr_gpr_gpr :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: GPR, rs1: GPR, rs2: GPR) { append(instructions, inst_subw_gpr_gpr_gpr(rd, rs1, rs2)) } +emit_subw_gpr_gpr_gpr :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: GPR, rs1: GPR, rs2: GPR) { append_elem(instructions, inst_subw_gpr_gpr_gpr(rd, rs1, rs2)) } inst_sllw_gpr_gpr_gpr :: #force_inline proc "contextless" (rd: GPR, rs1: GPR, rs2: GPR) -> Instruction { return Instruction{mnemonic = .SLLW, operand_count = 3, length = 4, ops = {op_gpr(rd), op_gpr(rs1), op_gpr(rs2), {}}} } -emit_sllw_gpr_gpr_gpr :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: GPR, rs1: GPR, rs2: GPR) { append(instructions, inst_sllw_gpr_gpr_gpr(rd, rs1, rs2)) } +emit_sllw_gpr_gpr_gpr :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: GPR, rs1: GPR, rs2: GPR) { append_elem(instructions, inst_sllw_gpr_gpr_gpr(rd, rs1, rs2)) } inst_srlw_gpr_gpr_gpr :: #force_inline proc "contextless" (rd: GPR, rs1: GPR, rs2: GPR) -> Instruction { return Instruction{mnemonic = .SRLW, operand_count = 3, length = 4, ops = {op_gpr(rd), op_gpr(rs1), op_gpr(rs2), {}}} } -emit_srlw_gpr_gpr_gpr :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: GPR, rs1: GPR, rs2: GPR) { append(instructions, inst_srlw_gpr_gpr_gpr(rd, rs1, rs2)) } +emit_srlw_gpr_gpr_gpr :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: GPR, rs1: GPR, rs2: GPR) { append_elem(instructions, inst_srlw_gpr_gpr_gpr(rd, rs1, rs2)) } inst_sraw_gpr_gpr_gpr :: #force_inline proc "contextless" (rd: GPR, rs1: GPR, rs2: GPR) -> Instruction { return Instruction{mnemonic = .SRAW, operand_count = 3, length = 4, ops = {op_gpr(rd), op_gpr(rs1), op_gpr(rs2), {}}} } -emit_sraw_gpr_gpr_gpr :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: GPR, rs1: GPR, rs2: GPR) { append(instructions, inst_sraw_gpr_gpr_gpr(rd, rs1, rs2)) } +emit_sraw_gpr_gpr_gpr :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: GPR, rs1: GPR, rs2: GPR) { append_elem(instructions, inst_sraw_gpr_gpr_gpr(rd, rs1, rs2)) } inst_fence_fence_fence :: #force_inline proc "contextless" (imm: i64, imm2: i64) -> Instruction { return Instruction{mnemonic = .FENCE, operand_count = 2, length = 4, ops = {op_imm(imm, 1), op_imm(imm2, 1), {}, {}}} } -emit_fence_fence_fence :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, imm2: i64) { append(instructions, inst_fence_fence_fence(imm, imm2)) } +emit_fence_fence_fence :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64, imm2: i64) { append_elem(instructions, inst_fence_fence_fence(imm, imm2)) } inst_fence_i_none :: #force_inline proc "contextless" () -> Instruction { return inst_none(.FENCE_I) } -emit_fence_i_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_fence_i_none()) } +emit_fence_i_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_fence_i_none()) } inst_ecall_none :: #force_inline proc "contextless" () -> Instruction { return inst_none(.ECALL) } -emit_ecall_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_ecall_none()) } +emit_ecall_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_ecall_none()) } inst_ebreak_none :: #force_inline proc "contextless" () -> Instruction { return inst_none(.EBREAK) } -emit_ebreak_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_ebreak_none()) } +emit_ebreak_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_ebreak_none()) } inst_csrrw_gpr_csr_gpr :: #force_inline proc "contextless" (rd: GPR, imm: i64, rs1: GPR) -> Instruction { return Instruction{mnemonic = .CSRRW, operand_count = 3, length = 4, ops = {op_gpr(rd), op_imm(imm, 2), op_gpr(rs1), {}}} } -emit_csrrw_gpr_csr_gpr :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: GPR, imm: i64, rs1: GPR) { append(instructions, inst_csrrw_gpr_csr_gpr(rd, imm, rs1)) } +emit_csrrw_gpr_csr_gpr :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: GPR, imm: i64, rs1: GPR) { append_elem(instructions, inst_csrrw_gpr_csr_gpr(rd, imm, rs1)) } inst_csrrs_gpr_csr_gpr :: #force_inline proc "contextless" (rd: GPR, imm: i64, rs1: GPR) -> Instruction { return Instruction{mnemonic = .CSRRS, operand_count = 3, length = 4, ops = {op_gpr(rd), op_imm(imm, 2), op_gpr(rs1), {}}} } -emit_csrrs_gpr_csr_gpr :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: GPR, imm: i64, rs1: GPR) { append(instructions, inst_csrrs_gpr_csr_gpr(rd, imm, rs1)) } +emit_csrrs_gpr_csr_gpr :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: GPR, imm: i64, rs1: GPR) { append_elem(instructions, inst_csrrs_gpr_csr_gpr(rd, imm, rs1)) } inst_csrrc_gpr_csr_gpr :: #force_inline proc "contextless" (rd: GPR, imm: i64, rs1: GPR) -> Instruction { return Instruction{mnemonic = .CSRRC, operand_count = 3, length = 4, ops = {op_gpr(rd), op_imm(imm, 2), op_gpr(rs1), {}}} } -emit_csrrc_gpr_csr_gpr :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: GPR, imm: i64, rs1: GPR) { append(instructions, inst_csrrc_gpr_csr_gpr(rd, imm, rs1)) } +emit_csrrc_gpr_csr_gpr :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: GPR, imm: i64, rs1: GPR) { append_elem(instructions, inst_csrrc_gpr_csr_gpr(rd, imm, rs1)) } inst_csrrwi_gpr_csr_zimm5 :: #force_inline proc "contextless" (rd: GPR, imm: i64, imm2: i64) -> Instruction { return Instruction{mnemonic = .CSRRWI, operand_count = 3, length = 4, ops = {op_gpr(rd), op_imm(imm, 2), op_imm(imm2, 1), {}}} } -emit_csrrwi_gpr_csr_zimm5 :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: GPR, imm: i64, imm2: i64) { append(instructions, inst_csrrwi_gpr_csr_zimm5(rd, imm, imm2)) } +emit_csrrwi_gpr_csr_zimm5 :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: GPR, imm: i64, imm2: i64) { append_elem(instructions, inst_csrrwi_gpr_csr_zimm5(rd, imm, imm2)) } inst_csrrsi_gpr_csr_zimm5 :: #force_inline proc "contextless" (rd: GPR, imm: i64, imm2: i64) -> Instruction { return Instruction{mnemonic = .CSRRSI, operand_count = 3, length = 4, ops = {op_gpr(rd), op_imm(imm, 2), op_imm(imm2, 1), {}}} } -emit_csrrsi_gpr_csr_zimm5 :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: GPR, imm: i64, imm2: i64) { append(instructions, inst_csrrsi_gpr_csr_zimm5(rd, imm, imm2)) } +emit_csrrsi_gpr_csr_zimm5 :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: GPR, imm: i64, imm2: i64) { append_elem(instructions, inst_csrrsi_gpr_csr_zimm5(rd, imm, imm2)) } inst_csrrci_gpr_csr_zimm5 :: #force_inline proc "contextless" (rd: GPR, imm: i64, imm2: i64) -> Instruction { return Instruction{mnemonic = .CSRRCI, operand_count = 3, length = 4, ops = {op_gpr(rd), op_imm(imm, 2), op_imm(imm2, 1), {}}} } -emit_csrrci_gpr_csr_zimm5 :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: GPR, imm: i64, imm2: i64) { append(instructions, inst_csrrci_gpr_csr_zimm5(rd, imm, imm2)) } +emit_csrrci_gpr_csr_zimm5 :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: GPR, imm: i64, imm2: i64) { append_elem(instructions, inst_csrrci_gpr_csr_zimm5(rd, imm, imm2)) } inst_mul_gpr_gpr_gpr :: #force_inline proc "contextless" (rd: GPR, rs1: GPR, rs2: GPR) -> Instruction { return Instruction{mnemonic = .MUL, operand_count = 3, length = 4, ops = {op_gpr(rd), op_gpr(rs1), op_gpr(rs2), {}}} } -emit_mul_gpr_gpr_gpr :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: GPR, rs1: GPR, rs2: GPR) { append(instructions, inst_mul_gpr_gpr_gpr(rd, rs1, rs2)) } +emit_mul_gpr_gpr_gpr :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: GPR, rs1: GPR, rs2: GPR) { append_elem(instructions, inst_mul_gpr_gpr_gpr(rd, rs1, rs2)) } inst_mulh_gpr_gpr_gpr :: #force_inline proc "contextless" (rd: GPR, rs1: GPR, rs2: GPR) -> Instruction { return Instruction{mnemonic = .MULH, operand_count = 3, length = 4, ops = {op_gpr(rd), op_gpr(rs1), op_gpr(rs2), {}}} } -emit_mulh_gpr_gpr_gpr :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: GPR, rs1: GPR, rs2: GPR) { append(instructions, inst_mulh_gpr_gpr_gpr(rd, rs1, rs2)) } +emit_mulh_gpr_gpr_gpr :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: GPR, rs1: GPR, rs2: GPR) { append_elem(instructions, inst_mulh_gpr_gpr_gpr(rd, rs1, rs2)) } inst_mulhsu_gpr_gpr_gpr :: #force_inline proc "contextless" (rd: GPR, rs1: GPR, rs2: GPR) -> Instruction { return Instruction{mnemonic = .MULHSU, operand_count = 3, length = 4, ops = {op_gpr(rd), op_gpr(rs1), op_gpr(rs2), {}}} } -emit_mulhsu_gpr_gpr_gpr :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: GPR, rs1: GPR, rs2: GPR) { append(instructions, inst_mulhsu_gpr_gpr_gpr(rd, rs1, rs2)) } +emit_mulhsu_gpr_gpr_gpr :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: GPR, rs1: GPR, rs2: GPR) { append_elem(instructions, inst_mulhsu_gpr_gpr_gpr(rd, rs1, rs2)) } inst_mulhu_gpr_gpr_gpr :: #force_inline proc "contextless" (rd: GPR, rs1: GPR, rs2: GPR) -> Instruction { return Instruction{mnemonic = .MULHU, operand_count = 3, length = 4, ops = {op_gpr(rd), op_gpr(rs1), op_gpr(rs2), {}}} } -emit_mulhu_gpr_gpr_gpr :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: GPR, rs1: GPR, rs2: GPR) { append(instructions, inst_mulhu_gpr_gpr_gpr(rd, rs1, rs2)) } +emit_mulhu_gpr_gpr_gpr :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: GPR, rs1: GPR, rs2: GPR) { append_elem(instructions, inst_mulhu_gpr_gpr_gpr(rd, rs1, rs2)) } inst_div_gpr_gpr_gpr :: #force_inline proc "contextless" (rd: GPR, rs1: GPR, rs2: GPR) -> Instruction { return Instruction{mnemonic = .DIV, operand_count = 3, length = 4, ops = {op_gpr(rd), op_gpr(rs1), op_gpr(rs2), {}}} } -emit_div_gpr_gpr_gpr :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: GPR, rs1: GPR, rs2: GPR) { append(instructions, inst_div_gpr_gpr_gpr(rd, rs1, rs2)) } +emit_div_gpr_gpr_gpr :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: GPR, rs1: GPR, rs2: GPR) { append_elem(instructions, inst_div_gpr_gpr_gpr(rd, rs1, rs2)) } inst_divu_gpr_gpr_gpr :: #force_inline proc "contextless" (rd: GPR, rs1: GPR, rs2: GPR) -> Instruction { return Instruction{mnemonic = .DIVU, operand_count = 3, length = 4, ops = {op_gpr(rd), op_gpr(rs1), op_gpr(rs2), {}}} } -emit_divu_gpr_gpr_gpr :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: GPR, rs1: GPR, rs2: GPR) { append(instructions, inst_divu_gpr_gpr_gpr(rd, rs1, rs2)) } +emit_divu_gpr_gpr_gpr :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: GPR, rs1: GPR, rs2: GPR) { append_elem(instructions, inst_divu_gpr_gpr_gpr(rd, rs1, rs2)) } inst_rem_gpr_gpr_gpr :: #force_inline proc "contextless" (rd: GPR, rs1: GPR, rs2: GPR) -> Instruction { return Instruction{mnemonic = .REM, operand_count = 3, length = 4, ops = {op_gpr(rd), op_gpr(rs1), op_gpr(rs2), {}}} } -emit_rem_gpr_gpr_gpr :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: GPR, rs1: GPR, rs2: GPR) { append(instructions, inst_rem_gpr_gpr_gpr(rd, rs1, rs2)) } +emit_rem_gpr_gpr_gpr :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: GPR, rs1: GPR, rs2: GPR) { append_elem(instructions, inst_rem_gpr_gpr_gpr(rd, rs1, rs2)) } inst_remu_gpr_gpr_gpr :: #force_inline proc "contextless" (rd: GPR, rs1: GPR, rs2: GPR) -> Instruction { return Instruction{mnemonic = .REMU, operand_count = 3, length = 4, ops = {op_gpr(rd), op_gpr(rs1), op_gpr(rs2), {}}} } -emit_remu_gpr_gpr_gpr :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: GPR, rs1: GPR, rs2: GPR) { append(instructions, inst_remu_gpr_gpr_gpr(rd, rs1, rs2)) } +emit_remu_gpr_gpr_gpr :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: GPR, rs1: GPR, rs2: GPR) { append_elem(instructions, inst_remu_gpr_gpr_gpr(rd, rs1, rs2)) } inst_mulw_gpr_gpr_gpr :: #force_inline proc "contextless" (rd: GPR, rs1: GPR, rs2: GPR) -> Instruction { return Instruction{mnemonic = .MULW, operand_count = 3, length = 4, ops = {op_gpr(rd), op_gpr(rs1), op_gpr(rs2), {}}} } -emit_mulw_gpr_gpr_gpr :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: GPR, rs1: GPR, rs2: GPR) { append(instructions, inst_mulw_gpr_gpr_gpr(rd, rs1, rs2)) } +emit_mulw_gpr_gpr_gpr :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: GPR, rs1: GPR, rs2: GPR) { append_elem(instructions, inst_mulw_gpr_gpr_gpr(rd, rs1, rs2)) } inst_divw_gpr_gpr_gpr :: #force_inline proc "contextless" (rd: GPR, rs1: GPR, rs2: GPR) -> Instruction { return Instruction{mnemonic = .DIVW, operand_count = 3, length = 4, ops = {op_gpr(rd), op_gpr(rs1), op_gpr(rs2), {}}} } -emit_divw_gpr_gpr_gpr :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: GPR, rs1: GPR, rs2: GPR) { append(instructions, inst_divw_gpr_gpr_gpr(rd, rs1, rs2)) } +emit_divw_gpr_gpr_gpr :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: GPR, rs1: GPR, rs2: GPR) { append_elem(instructions, inst_divw_gpr_gpr_gpr(rd, rs1, rs2)) } inst_divuw_gpr_gpr_gpr :: #force_inline proc "contextless" (rd: GPR, rs1: GPR, rs2: GPR) -> Instruction { return Instruction{mnemonic = .DIVUW, operand_count = 3, length = 4, ops = {op_gpr(rd), op_gpr(rs1), op_gpr(rs2), {}}} } -emit_divuw_gpr_gpr_gpr :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: GPR, rs1: GPR, rs2: GPR) { append(instructions, inst_divuw_gpr_gpr_gpr(rd, rs1, rs2)) } +emit_divuw_gpr_gpr_gpr :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: GPR, rs1: GPR, rs2: GPR) { append_elem(instructions, inst_divuw_gpr_gpr_gpr(rd, rs1, rs2)) } inst_remw_gpr_gpr_gpr :: #force_inline proc "contextless" (rd: GPR, rs1: GPR, rs2: GPR) -> Instruction { return Instruction{mnemonic = .REMW, operand_count = 3, length = 4, ops = {op_gpr(rd), op_gpr(rs1), op_gpr(rs2), {}}} } -emit_remw_gpr_gpr_gpr :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: GPR, rs1: GPR, rs2: GPR) { append(instructions, inst_remw_gpr_gpr_gpr(rd, rs1, rs2)) } +emit_remw_gpr_gpr_gpr :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: GPR, rs1: GPR, rs2: GPR) { append_elem(instructions, inst_remw_gpr_gpr_gpr(rd, rs1, rs2)) } inst_remuw_gpr_gpr_gpr :: #force_inline proc "contextless" (rd: GPR, rs1: GPR, rs2: GPR) -> Instruction { return Instruction{mnemonic = .REMUW, operand_count = 3, length = 4, ops = {op_gpr(rd), op_gpr(rs1), op_gpr(rs2), {}}} } -emit_remuw_gpr_gpr_gpr :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: GPR, rs1: GPR, rs2: GPR) { append(instructions, inst_remuw_gpr_gpr_gpr(rd, rs1, rs2)) } +emit_remuw_gpr_gpr_gpr :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: GPR, rs1: GPR, rs2: GPR) { append_elem(instructions, inst_remuw_gpr_gpr_gpr(rd, rs1, rs2)) } inst_lr_w_gpr_mem :: #force_inline proc "contextless" (rd: GPR, mem: Memory) -> Instruction { return Instruction{mnemonic = .LR_W, operand_count = 2, length = 4, ops = {op_gpr(rd), op_mem(mem), {}, {}}} } -emit_lr_w_gpr_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: GPR, mem: Memory) { append(instructions, inst_lr_w_gpr_mem(rd, mem)) } +emit_lr_w_gpr_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: GPR, mem: Memory) { append_elem(instructions, inst_lr_w_gpr_mem(rd, mem)) } inst_sc_w_gpr_gpr_mem :: #force_inline proc "contextless" (rd: GPR, rs1: GPR, mem: Memory) -> Instruction { return Instruction{mnemonic = .SC_W, operand_count = 3, length = 4, ops = {op_gpr(rd), op_gpr(rs1), op_mem(mem), {}}} } -emit_sc_w_gpr_gpr_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: GPR, rs1: GPR, mem: Memory) { append(instructions, inst_sc_w_gpr_gpr_mem(rd, rs1, mem)) } +emit_sc_w_gpr_gpr_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: GPR, rs1: GPR, mem: Memory) { append_elem(instructions, inst_sc_w_gpr_gpr_mem(rd, rs1, mem)) } inst_amoswap_w_gpr_gpr_mem :: #force_inline proc "contextless" (rd: GPR, rs1: GPR, mem: Memory) -> Instruction { return Instruction{mnemonic = .AMOSWAP_W, operand_count = 3, length = 4, ops = {op_gpr(rd), op_gpr(rs1), op_mem(mem), {}}} } -emit_amoswap_w_gpr_gpr_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: GPR, rs1: GPR, mem: Memory) { append(instructions, inst_amoswap_w_gpr_gpr_mem(rd, rs1, mem)) } +emit_amoswap_w_gpr_gpr_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: GPR, rs1: GPR, mem: Memory) { append_elem(instructions, inst_amoswap_w_gpr_gpr_mem(rd, rs1, mem)) } inst_amoadd_w_gpr_gpr_mem :: #force_inline proc "contextless" (rd: GPR, rs1: GPR, mem: Memory) -> Instruction { return Instruction{mnemonic = .AMOADD_W, operand_count = 3, length = 4, ops = {op_gpr(rd), op_gpr(rs1), op_mem(mem), {}}} } -emit_amoadd_w_gpr_gpr_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: GPR, rs1: GPR, mem: Memory) { append(instructions, inst_amoadd_w_gpr_gpr_mem(rd, rs1, mem)) } +emit_amoadd_w_gpr_gpr_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: GPR, rs1: GPR, mem: Memory) { append_elem(instructions, inst_amoadd_w_gpr_gpr_mem(rd, rs1, mem)) } inst_amoxor_w_gpr_gpr_mem :: #force_inline proc "contextless" (rd: GPR, rs1: GPR, mem: Memory) -> Instruction { return Instruction{mnemonic = .AMOXOR_W, operand_count = 3, length = 4, ops = {op_gpr(rd), op_gpr(rs1), op_mem(mem), {}}} } -emit_amoxor_w_gpr_gpr_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: GPR, rs1: GPR, mem: Memory) { append(instructions, inst_amoxor_w_gpr_gpr_mem(rd, rs1, mem)) } +emit_amoxor_w_gpr_gpr_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: GPR, rs1: GPR, mem: Memory) { append_elem(instructions, inst_amoxor_w_gpr_gpr_mem(rd, rs1, mem)) } inst_amoand_w_gpr_gpr_mem :: #force_inline proc "contextless" (rd: GPR, rs1: GPR, mem: Memory) -> Instruction { return Instruction{mnemonic = .AMOAND_W, operand_count = 3, length = 4, ops = {op_gpr(rd), op_gpr(rs1), op_mem(mem), {}}} } -emit_amoand_w_gpr_gpr_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: GPR, rs1: GPR, mem: Memory) { append(instructions, inst_amoand_w_gpr_gpr_mem(rd, rs1, mem)) } +emit_amoand_w_gpr_gpr_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: GPR, rs1: GPR, mem: Memory) { append_elem(instructions, inst_amoand_w_gpr_gpr_mem(rd, rs1, mem)) } inst_amoor_w_gpr_gpr_mem :: #force_inline proc "contextless" (rd: GPR, rs1: GPR, mem: Memory) -> Instruction { return Instruction{mnemonic = .AMOOR_W, operand_count = 3, length = 4, ops = {op_gpr(rd), op_gpr(rs1), op_mem(mem), {}}} } -emit_amoor_w_gpr_gpr_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: GPR, rs1: GPR, mem: Memory) { append(instructions, inst_amoor_w_gpr_gpr_mem(rd, rs1, mem)) } +emit_amoor_w_gpr_gpr_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: GPR, rs1: GPR, mem: Memory) { append_elem(instructions, inst_amoor_w_gpr_gpr_mem(rd, rs1, mem)) } inst_amomin_w_gpr_gpr_mem :: #force_inline proc "contextless" (rd: GPR, rs1: GPR, mem: Memory) -> Instruction { return Instruction{mnemonic = .AMOMIN_W, operand_count = 3, length = 4, ops = {op_gpr(rd), op_gpr(rs1), op_mem(mem), {}}} } -emit_amomin_w_gpr_gpr_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: GPR, rs1: GPR, mem: Memory) { append(instructions, inst_amomin_w_gpr_gpr_mem(rd, rs1, mem)) } +emit_amomin_w_gpr_gpr_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: GPR, rs1: GPR, mem: Memory) { append_elem(instructions, inst_amomin_w_gpr_gpr_mem(rd, rs1, mem)) } inst_amomax_w_gpr_gpr_mem :: #force_inline proc "contextless" (rd: GPR, rs1: GPR, mem: Memory) -> Instruction { return Instruction{mnemonic = .AMOMAX_W, operand_count = 3, length = 4, ops = {op_gpr(rd), op_gpr(rs1), op_mem(mem), {}}} } -emit_amomax_w_gpr_gpr_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: GPR, rs1: GPR, mem: Memory) { append(instructions, inst_amomax_w_gpr_gpr_mem(rd, rs1, mem)) } +emit_amomax_w_gpr_gpr_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: GPR, rs1: GPR, mem: Memory) { append_elem(instructions, inst_amomax_w_gpr_gpr_mem(rd, rs1, mem)) } inst_amominu_w_gpr_gpr_mem :: #force_inline proc "contextless" (rd: GPR, rs1: GPR, mem: Memory) -> Instruction { return Instruction{mnemonic = .AMOMINU_W, operand_count = 3, length = 4, ops = {op_gpr(rd), op_gpr(rs1), op_mem(mem), {}}} } -emit_amominu_w_gpr_gpr_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: GPR, rs1: GPR, mem: Memory) { append(instructions, inst_amominu_w_gpr_gpr_mem(rd, rs1, mem)) } +emit_amominu_w_gpr_gpr_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: GPR, rs1: GPR, mem: Memory) { append_elem(instructions, inst_amominu_w_gpr_gpr_mem(rd, rs1, mem)) } inst_amomaxu_w_gpr_gpr_mem :: #force_inline proc "contextless" (rd: GPR, rs1: GPR, mem: Memory) -> Instruction { return Instruction{mnemonic = .AMOMAXU_W, operand_count = 3, length = 4, ops = {op_gpr(rd), op_gpr(rs1), op_mem(mem), {}}} } -emit_amomaxu_w_gpr_gpr_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: GPR, rs1: GPR, mem: Memory) { append(instructions, inst_amomaxu_w_gpr_gpr_mem(rd, rs1, mem)) } +emit_amomaxu_w_gpr_gpr_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: GPR, rs1: GPR, mem: Memory) { append_elem(instructions, inst_amomaxu_w_gpr_gpr_mem(rd, rs1, mem)) } inst_lr_d_gpr_mem :: #force_inline proc "contextless" (rd: GPR, mem: Memory) -> Instruction { return Instruction{mnemonic = .LR_D, operand_count = 2, length = 4, ops = {op_gpr(rd), op_mem(mem), {}, {}}} } -emit_lr_d_gpr_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: GPR, mem: Memory) { append(instructions, inst_lr_d_gpr_mem(rd, mem)) } +emit_lr_d_gpr_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: GPR, mem: Memory) { append_elem(instructions, inst_lr_d_gpr_mem(rd, mem)) } inst_sc_d_gpr_gpr_mem :: #force_inline proc "contextless" (rd: GPR, rs1: GPR, mem: Memory) -> Instruction { return Instruction{mnemonic = .SC_D, operand_count = 3, length = 4, ops = {op_gpr(rd), op_gpr(rs1), op_mem(mem), {}}} } -emit_sc_d_gpr_gpr_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: GPR, rs1: GPR, mem: Memory) { append(instructions, inst_sc_d_gpr_gpr_mem(rd, rs1, mem)) } +emit_sc_d_gpr_gpr_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: GPR, rs1: GPR, mem: Memory) { append_elem(instructions, inst_sc_d_gpr_gpr_mem(rd, rs1, mem)) } inst_amoswap_d_gpr_gpr_mem :: #force_inline proc "contextless" (rd: GPR, rs1: GPR, mem: Memory) -> Instruction { return Instruction{mnemonic = .AMOSWAP_D, operand_count = 3, length = 4, ops = {op_gpr(rd), op_gpr(rs1), op_mem(mem), {}}} } -emit_amoswap_d_gpr_gpr_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: GPR, rs1: GPR, mem: Memory) { append(instructions, inst_amoswap_d_gpr_gpr_mem(rd, rs1, mem)) } +emit_amoswap_d_gpr_gpr_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: GPR, rs1: GPR, mem: Memory) { append_elem(instructions, inst_amoswap_d_gpr_gpr_mem(rd, rs1, mem)) } inst_amoadd_d_gpr_gpr_mem :: #force_inline proc "contextless" (rd: GPR, rs1: GPR, mem: Memory) -> Instruction { return Instruction{mnemonic = .AMOADD_D, operand_count = 3, length = 4, ops = {op_gpr(rd), op_gpr(rs1), op_mem(mem), {}}} } -emit_amoadd_d_gpr_gpr_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: GPR, rs1: GPR, mem: Memory) { append(instructions, inst_amoadd_d_gpr_gpr_mem(rd, rs1, mem)) } +emit_amoadd_d_gpr_gpr_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: GPR, rs1: GPR, mem: Memory) { append_elem(instructions, inst_amoadd_d_gpr_gpr_mem(rd, rs1, mem)) } inst_amoxor_d_gpr_gpr_mem :: #force_inline proc "contextless" (rd: GPR, rs1: GPR, mem: Memory) -> Instruction { return Instruction{mnemonic = .AMOXOR_D, operand_count = 3, length = 4, ops = {op_gpr(rd), op_gpr(rs1), op_mem(mem), {}}} } -emit_amoxor_d_gpr_gpr_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: GPR, rs1: GPR, mem: Memory) { append(instructions, inst_amoxor_d_gpr_gpr_mem(rd, rs1, mem)) } +emit_amoxor_d_gpr_gpr_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: GPR, rs1: GPR, mem: Memory) { append_elem(instructions, inst_amoxor_d_gpr_gpr_mem(rd, rs1, mem)) } inst_amoand_d_gpr_gpr_mem :: #force_inline proc "contextless" (rd: GPR, rs1: GPR, mem: Memory) -> Instruction { return Instruction{mnemonic = .AMOAND_D, operand_count = 3, length = 4, ops = {op_gpr(rd), op_gpr(rs1), op_mem(mem), {}}} } -emit_amoand_d_gpr_gpr_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: GPR, rs1: GPR, mem: Memory) { append(instructions, inst_amoand_d_gpr_gpr_mem(rd, rs1, mem)) } +emit_amoand_d_gpr_gpr_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: GPR, rs1: GPR, mem: Memory) { append_elem(instructions, inst_amoand_d_gpr_gpr_mem(rd, rs1, mem)) } inst_amoor_d_gpr_gpr_mem :: #force_inline proc "contextless" (rd: GPR, rs1: GPR, mem: Memory) -> Instruction { return Instruction{mnemonic = .AMOOR_D, operand_count = 3, length = 4, ops = {op_gpr(rd), op_gpr(rs1), op_mem(mem), {}}} } -emit_amoor_d_gpr_gpr_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: GPR, rs1: GPR, mem: Memory) { append(instructions, inst_amoor_d_gpr_gpr_mem(rd, rs1, mem)) } +emit_amoor_d_gpr_gpr_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: GPR, rs1: GPR, mem: Memory) { append_elem(instructions, inst_amoor_d_gpr_gpr_mem(rd, rs1, mem)) } inst_amomin_d_gpr_gpr_mem :: #force_inline proc "contextless" (rd: GPR, rs1: GPR, mem: Memory) -> Instruction { return Instruction{mnemonic = .AMOMIN_D, operand_count = 3, length = 4, ops = {op_gpr(rd), op_gpr(rs1), op_mem(mem), {}}} } -emit_amomin_d_gpr_gpr_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: GPR, rs1: GPR, mem: Memory) { append(instructions, inst_amomin_d_gpr_gpr_mem(rd, rs1, mem)) } +emit_amomin_d_gpr_gpr_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: GPR, rs1: GPR, mem: Memory) { append_elem(instructions, inst_amomin_d_gpr_gpr_mem(rd, rs1, mem)) } inst_amomax_d_gpr_gpr_mem :: #force_inline proc "contextless" (rd: GPR, rs1: GPR, mem: Memory) -> Instruction { return Instruction{mnemonic = .AMOMAX_D, operand_count = 3, length = 4, ops = {op_gpr(rd), op_gpr(rs1), op_mem(mem), {}}} } -emit_amomax_d_gpr_gpr_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: GPR, rs1: GPR, mem: Memory) { append(instructions, inst_amomax_d_gpr_gpr_mem(rd, rs1, mem)) } +emit_amomax_d_gpr_gpr_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: GPR, rs1: GPR, mem: Memory) { append_elem(instructions, inst_amomax_d_gpr_gpr_mem(rd, rs1, mem)) } inst_amominu_d_gpr_gpr_mem :: #force_inline proc "contextless" (rd: GPR, rs1: GPR, mem: Memory) -> Instruction { return Instruction{mnemonic = .AMOMINU_D, operand_count = 3, length = 4, ops = {op_gpr(rd), op_gpr(rs1), op_mem(mem), {}}} } -emit_amominu_d_gpr_gpr_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: GPR, rs1: GPR, mem: Memory) { append(instructions, inst_amominu_d_gpr_gpr_mem(rd, rs1, mem)) } +emit_amominu_d_gpr_gpr_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: GPR, rs1: GPR, mem: Memory) { append_elem(instructions, inst_amominu_d_gpr_gpr_mem(rd, rs1, mem)) } inst_amomaxu_d_gpr_gpr_mem :: #force_inline proc "contextless" (rd: GPR, rs1: GPR, mem: Memory) -> Instruction { return Instruction{mnemonic = .AMOMAXU_D, operand_count = 3, length = 4, ops = {op_gpr(rd), op_gpr(rs1), op_mem(mem), {}}} } -emit_amomaxu_d_gpr_gpr_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: GPR, rs1: GPR, mem: Memory) { append(instructions, inst_amomaxu_d_gpr_gpr_mem(rd, rs1, mem)) } +emit_amomaxu_d_gpr_gpr_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: GPR, rs1: GPR, mem: Memory) { append_elem(instructions, inst_amomaxu_d_gpr_gpr_mem(rd, rs1, mem)) } inst_flw_fpr_mem :: #force_inline proc "contextless" (rd: FPR, mem: Memory) -> Instruction { return Instruction{mnemonic = .FLW, operand_count = 2, length = 4, ops = {op_fpr(rd), op_mem(mem), {}, {}}} } -emit_flw_fpr_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: FPR, mem: Memory) { append(instructions, inst_flw_fpr_mem(rd, mem)) } +emit_flw_fpr_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: FPR, mem: Memory) { append_elem(instructions, inst_flw_fpr_mem(rd, mem)) } inst_fsw_fpr_mem :: #force_inline proc "contextless" (rd: FPR, mem: Memory) -> Instruction { return Instruction{mnemonic = .FSW, operand_count = 2, length = 4, ops = {op_fpr(rd), op_mem(mem), {}, {}}} } -emit_fsw_fpr_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: FPR, mem: Memory) { append(instructions, inst_fsw_fpr_mem(rd, mem)) } +emit_fsw_fpr_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: FPR, mem: Memory) { append_elem(instructions, inst_fsw_fpr_mem(rd, mem)) } inst_fmadd_s_fpr_fpr_fpr_fpr :: #force_inline proc "contextless" (rd: FPR, rs1: FPR, rs2: FPR, rs3: FPR) -> Instruction { return Instruction{mnemonic = .FMADD_S, operand_count = 4, length = 4, ops = {op_fpr(rd), op_fpr(rs1), op_fpr(rs2), op_fpr(rs3)}} } -emit_fmadd_s_fpr_fpr_fpr_fpr :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: FPR, rs1: FPR, rs2: FPR, rs3: FPR) { append(instructions, inst_fmadd_s_fpr_fpr_fpr_fpr(rd, rs1, rs2, rs3)) } +emit_fmadd_s_fpr_fpr_fpr_fpr :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: FPR, rs1: FPR, rs2: FPR, rs3: FPR) { append_elem(instructions, inst_fmadd_s_fpr_fpr_fpr_fpr(rd, rs1, rs2, rs3)) } inst_fmsub_s_fpr_fpr_fpr_fpr :: #force_inline proc "contextless" (rd: FPR, rs1: FPR, rs2: FPR, rs3: FPR) -> Instruction { return Instruction{mnemonic = .FMSUB_S, operand_count = 4, length = 4, ops = {op_fpr(rd), op_fpr(rs1), op_fpr(rs2), op_fpr(rs3)}} } -emit_fmsub_s_fpr_fpr_fpr_fpr :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: FPR, rs1: FPR, rs2: FPR, rs3: FPR) { append(instructions, inst_fmsub_s_fpr_fpr_fpr_fpr(rd, rs1, rs2, rs3)) } +emit_fmsub_s_fpr_fpr_fpr_fpr :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: FPR, rs1: FPR, rs2: FPR, rs3: FPR) { append_elem(instructions, inst_fmsub_s_fpr_fpr_fpr_fpr(rd, rs1, rs2, rs3)) } inst_fnmsub_s_fpr_fpr_fpr_fpr :: #force_inline proc "contextless" (rd: FPR, rs1: FPR, rs2: FPR, rs3: FPR) -> Instruction { return Instruction{mnemonic = .FNMSUB_S, operand_count = 4, length = 4, ops = {op_fpr(rd), op_fpr(rs1), op_fpr(rs2), op_fpr(rs3)}} } -emit_fnmsub_s_fpr_fpr_fpr_fpr :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: FPR, rs1: FPR, rs2: FPR, rs3: FPR) { append(instructions, inst_fnmsub_s_fpr_fpr_fpr_fpr(rd, rs1, rs2, rs3)) } +emit_fnmsub_s_fpr_fpr_fpr_fpr :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: FPR, rs1: FPR, rs2: FPR, rs3: FPR) { append_elem(instructions, inst_fnmsub_s_fpr_fpr_fpr_fpr(rd, rs1, rs2, rs3)) } inst_fnmadd_s_fpr_fpr_fpr_fpr :: #force_inline proc "contextless" (rd: FPR, rs1: FPR, rs2: FPR, rs3: FPR) -> Instruction { return Instruction{mnemonic = .FNMADD_S, operand_count = 4, length = 4, ops = {op_fpr(rd), op_fpr(rs1), op_fpr(rs2), op_fpr(rs3)}} } -emit_fnmadd_s_fpr_fpr_fpr_fpr :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: FPR, rs1: FPR, rs2: FPR, rs3: FPR) { append(instructions, inst_fnmadd_s_fpr_fpr_fpr_fpr(rd, rs1, rs2, rs3)) } +emit_fnmadd_s_fpr_fpr_fpr_fpr :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: FPR, rs1: FPR, rs2: FPR, rs3: FPR) { append_elem(instructions, inst_fnmadd_s_fpr_fpr_fpr_fpr(rd, rs1, rs2, rs3)) } inst_fadd_s_fpr_fpr_fpr :: #force_inline proc "contextless" (rd: FPR, rs1: FPR, rs2: FPR) -> Instruction { return Instruction{mnemonic = .FADD_S, operand_count = 3, length = 4, ops = {op_fpr(rd), op_fpr(rs1), op_fpr(rs2), {}}} } -emit_fadd_s_fpr_fpr_fpr :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: FPR, rs1: FPR, rs2: FPR) { append(instructions, inst_fadd_s_fpr_fpr_fpr(rd, rs1, rs2)) } +emit_fadd_s_fpr_fpr_fpr :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: FPR, rs1: FPR, rs2: FPR) { append_elem(instructions, inst_fadd_s_fpr_fpr_fpr(rd, rs1, rs2)) } inst_fsub_s_fpr_fpr_fpr :: #force_inline proc "contextless" (rd: FPR, rs1: FPR, rs2: FPR) -> Instruction { return Instruction{mnemonic = .FSUB_S, operand_count = 3, length = 4, ops = {op_fpr(rd), op_fpr(rs1), op_fpr(rs2), {}}} } -emit_fsub_s_fpr_fpr_fpr :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: FPR, rs1: FPR, rs2: FPR) { append(instructions, inst_fsub_s_fpr_fpr_fpr(rd, rs1, rs2)) } +emit_fsub_s_fpr_fpr_fpr :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: FPR, rs1: FPR, rs2: FPR) { append_elem(instructions, inst_fsub_s_fpr_fpr_fpr(rd, rs1, rs2)) } inst_fmul_s_fpr_fpr_fpr :: #force_inline proc "contextless" (rd: FPR, rs1: FPR, rs2: FPR) -> Instruction { return Instruction{mnemonic = .FMUL_S, operand_count = 3, length = 4, ops = {op_fpr(rd), op_fpr(rs1), op_fpr(rs2), {}}} } -emit_fmul_s_fpr_fpr_fpr :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: FPR, rs1: FPR, rs2: FPR) { append(instructions, inst_fmul_s_fpr_fpr_fpr(rd, rs1, rs2)) } +emit_fmul_s_fpr_fpr_fpr :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: FPR, rs1: FPR, rs2: FPR) { append_elem(instructions, inst_fmul_s_fpr_fpr_fpr(rd, rs1, rs2)) } inst_fdiv_s_fpr_fpr_fpr :: #force_inline proc "contextless" (rd: FPR, rs1: FPR, rs2: FPR) -> Instruction { return Instruction{mnemonic = .FDIV_S, operand_count = 3, length = 4, ops = {op_fpr(rd), op_fpr(rs1), op_fpr(rs2), {}}} } -emit_fdiv_s_fpr_fpr_fpr :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: FPR, rs1: FPR, rs2: FPR) { append(instructions, inst_fdiv_s_fpr_fpr_fpr(rd, rs1, rs2)) } +emit_fdiv_s_fpr_fpr_fpr :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: FPR, rs1: FPR, rs2: FPR) { append_elem(instructions, inst_fdiv_s_fpr_fpr_fpr(rd, rs1, rs2)) } inst_fsqrt_s_fpr_fpr :: #force_inline proc "contextless" (rd: FPR, rs1: FPR) -> Instruction { return Instruction{mnemonic = .FSQRT_S, operand_count = 2, length = 4, ops = {op_fpr(rd), op_fpr(rs1), {}, {}}} } -emit_fsqrt_s_fpr_fpr :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: FPR, rs1: FPR) { append(instructions, inst_fsqrt_s_fpr_fpr(rd, rs1)) } +emit_fsqrt_s_fpr_fpr :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: FPR, rs1: FPR) { append_elem(instructions, inst_fsqrt_s_fpr_fpr(rd, rs1)) } inst_fsgnj_s_fpr_fpr_fpr :: #force_inline proc "contextless" (rd: FPR, rs1: FPR, rs2: FPR) -> Instruction { return Instruction{mnemonic = .FSGNJ_S, operand_count = 3, length = 4, ops = {op_fpr(rd), op_fpr(rs1), op_fpr(rs2), {}}} } -emit_fsgnj_s_fpr_fpr_fpr :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: FPR, rs1: FPR, rs2: FPR) { append(instructions, inst_fsgnj_s_fpr_fpr_fpr(rd, rs1, rs2)) } +emit_fsgnj_s_fpr_fpr_fpr :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: FPR, rs1: FPR, rs2: FPR) { append_elem(instructions, inst_fsgnj_s_fpr_fpr_fpr(rd, rs1, rs2)) } inst_fsgnjn_s_fpr_fpr_fpr :: #force_inline proc "contextless" (rd: FPR, rs1: FPR, rs2: FPR) -> Instruction { return Instruction{mnemonic = .FSGNJN_S, operand_count = 3, length = 4, ops = {op_fpr(rd), op_fpr(rs1), op_fpr(rs2), {}}} } -emit_fsgnjn_s_fpr_fpr_fpr :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: FPR, rs1: FPR, rs2: FPR) { append(instructions, inst_fsgnjn_s_fpr_fpr_fpr(rd, rs1, rs2)) } +emit_fsgnjn_s_fpr_fpr_fpr :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: FPR, rs1: FPR, rs2: FPR) { append_elem(instructions, inst_fsgnjn_s_fpr_fpr_fpr(rd, rs1, rs2)) } inst_fsgnjx_s_fpr_fpr_fpr :: #force_inline proc "contextless" (rd: FPR, rs1: FPR, rs2: FPR) -> Instruction { return Instruction{mnemonic = .FSGNJX_S, operand_count = 3, length = 4, ops = {op_fpr(rd), op_fpr(rs1), op_fpr(rs2), {}}} } -emit_fsgnjx_s_fpr_fpr_fpr :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: FPR, rs1: FPR, rs2: FPR) { append(instructions, inst_fsgnjx_s_fpr_fpr_fpr(rd, rs1, rs2)) } +emit_fsgnjx_s_fpr_fpr_fpr :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: FPR, rs1: FPR, rs2: FPR) { append_elem(instructions, inst_fsgnjx_s_fpr_fpr_fpr(rd, rs1, rs2)) } inst_fmin_s_fpr_fpr_fpr :: #force_inline proc "contextless" (rd: FPR, rs1: FPR, rs2: FPR) -> Instruction { return Instruction{mnemonic = .FMIN_S, operand_count = 3, length = 4, ops = {op_fpr(rd), op_fpr(rs1), op_fpr(rs2), {}}} } -emit_fmin_s_fpr_fpr_fpr :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: FPR, rs1: FPR, rs2: FPR) { append(instructions, inst_fmin_s_fpr_fpr_fpr(rd, rs1, rs2)) } +emit_fmin_s_fpr_fpr_fpr :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: FPR, rs1: FPR, rs2: FPR) { append_elem(instructions, inst_fmin_s_fpr_fpr_fpr(rd, rs1, rs2)) } inst_fmax_s_fpr_fpr_fpr :: #force_inline proc "contextless" (rd: FPR, rs1: FPR, rs2: FPR) -> Instruction { return Instruction{mnemonic = .FMAX_S, operand_count = 3, length = 4, ops = {op_fpr(rd), op_fpr(rs1), op_fpr(rs2), {}}} } -emit_fmax_s_fpr_fpr_fpr :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: FPR, rs1: FPR, rs2: FPR) { append(instructions, inst_fmax_s_fpr_fpr_fpr(rd, rs1, rs2)) } +emit_fmax_s_fpr_fpr_fpr :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: FPR, rs1: FPR, rs2: FPR) { append_elem(instructions, inst_fmax_s_fpr_fpr_fpr(rd, rs1, rs2)) } inst_fcvt_w_s_gpr_fpr :: #force_inline proc "contextless" (rd: GPR, rs1: FPR) -> Instruction { return Instruction{mnemonic = .FCVT_W_S, operand_count = 2, length = 4, ops = {op_gpr(rd), op_fpr(rs1), {}, {}}} } -emit_fcvt_w_s_gpr_fpr :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: GPR, rs1: FPR) { append(instructions, inst_fcvt_w_s_gpr_fpr(rd, rs1)) } +emit_fcvt_w_s_gpr_fpr :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: GPR, rs1: FPR) { append_elem(instructions, inst_fcvt_w_s_gpr_fpr(rd, rs1)) } inst_fcvt_wu_s_gpr_fpr :: #force_inline proc "contextless" (rd: GPR, rs1: FPR) -> Instruction { return Instruction{mnemonic = .FCVT_WU_S, operand_count = 2, length = 4, ops = {op_gpr(rd), op_fpr(rs1), {}, {}}} } -emit_fcvt_wu_s_gpr_fpr :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: GPR, rs1: FPR) { append(instructions, inst_fcvt_wu_s_gpr_fpr(rd, rs1)) } +emit_fcvt_wu_s_gpr_fpr :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: GPR, rs1: FPR) { append_elem(instructions, inst_fcvt_wu_s_gpr_fpr(rd, rs1)) } inst_fmv_x_w_gpr_fpr :: #force_inline proc "contextless" (rd: GPR, rs1: FPR) -> Instruction { return Instruction{mnemonic = .FMV_X_W, operand_count = 2, length = 4, ops = {op_gpr(rd), op_fpr(rs1), {}, {}}} } -emit_fmv_x_w_gpr_fpr :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: GPR, rs1: FPR) { append(instructions, inst_fmv_x_w_gpr_fpr(rd, rs1)) } +emit_fmv_x_w_gpr_fpr :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: GPR, rs1: FPR) { append_elem(instructions, inst_fmv_x_w_gpr_fpr(rd, rs1)) } inst_feq_s_gpr_fpr_fpr :: #force_inline proc "contextless" (rd: GPR, rs1: FPR, rs2: FPR) -> Instruction { return Instruction{mnemonic = .FEQ_S, operand_count = 3, length = 4, ops = {op_gpr(rd), op_fpr(rs1), op_fpr(rs2), {}}} } -emit_feq_s_gpr_fpr_fpr :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: GPR, rs1: FPR, rs2: FPR) { append(instructions, inst_feq_s_gpr_fpr_fpr(rd, rs1, rs2)) } +emit_feq_s_gpr_fpr_fpr :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: GPR, rs1: FPR, rs2: FPR) { append_elem(instructions, inst_feq_s_gpr_fpr_fpr(rd, rs1, rs2)) } inst_flt_s_gpr_fpr_fpr :: #force_inline proc "contextless" (rd: GPR, rs1: FPR, rs2: FPR) -> Instruction { return Instruction{mnemonic = .FLT_S, operand_count = 3, length = 4, ops = {op_gpr(rd), op_fpr(rs1), op_fpr(rs2), {}}} } -emit_flt_s_gpr_fpr_fpr :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: GPR, rs1: FPR, rs2: FPR) { append(instructions, inst_flt_s_gpr_fpr_fpr(rd, rs1, rs2)) } +emit_flt_s_gpr_fpr_fpr :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: GPR, rs1: FPR, rs2: FPR) { append_elem(instructions, inst_flt_s_gpr_fpr_fpr(rd, rs1, rs2)) } inst_fle_s_gpr_fpr_fpr :: #force_inline proc "contextless" (rd: GPR, rs1: FPR, rs2: FPR) -> Instruction { return Instruction{mnemonic = .FLE_S, operand_count = 3, length = 4, ops = {op_gpr(rd), op_fpr(rs1), op_fpr(rs2), {}}} } -emit_fle_s_gpr_fpr_fpr :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: GPR, rs1: FPR, rs2: FPR) { append(instructions, inst_fle_s_gpr_fpr_fpr(rd, rs1, rs2)) } +emit_fle_s_gpr_fpr_fpr :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: GPR, rs1: FPR, rs2: FPR) { append_elem(instructions, inst_fle_s_gpr_fpr_fpr(rd, rs1, rs2)) } inst_fclass_s_gpr_fpr :: #force_inline proc "contextless" (rd: GPR, rs1: FPR) -> Instruction { return Instruction{mnemonic = .FCLASS_S, operand_count = 2, length = 4, ops = {op_gpr(rd), op_fpr(rs1), {}, {}}} } -emit_fclass_s_gpr_fpr :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: GPR, rs1: FPR) { append(instructions, inst_fclass_s_gpr_fpr(rd, rs1)) } +emit_fclass_s_gpr_fpr :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: GPR, rs1: FPR) { append_elem(instructions, inst_fclass_s_gpr_fpr(rd, rs1)) } inst_fcvt_s_w_fpr_gpr :: #force_inline proc "contextless" (rd: FPR, rs1: GPR) -> Instruction { return Instruction{mnemonic = .FCVT_S_W, operand_count = 2, length = 4, ops = {op_fpr(rd), op_gpr(rs1), {}, {}}} } -emit_fcvt_s_w_fpr_gpr :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: FPR, rs1: GPR) { append(instructions, inst_fcvt_s_w_fpr_gpr(rd, rs1)) } +emit_fcvt_s_w_fpr_gpr :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: FPR, rs1: GPR) { append_elem(instructions, inst_fcvt_s_w_fpr_gpr(rd, rs1)) } inst_fcvt_s_wu_fpr_gpr :: #force_inline proc "contextless" (rd: FPR, rs1: GPR) -> Instruction { return Instruction{mnemonic = .FCVT_S_WU, operand_count = 2, length = 4, ops = {op_fpr(rd), op_gpr(rs1), {}, {}}} } -emit_fcvt_s_wu_fpr_gpr :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: FPR, rs1: GPR) { append(instructions, inst_fcvt_s_wu_fpr_gpr(rd, rs1)) } +emit_fcvt_s_wu_fpr_gpr :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: FPR, rs1: GPR) { append_elem(instructions, inst_fcvt_s_wu_fpr_gpr(rd, rs1)) } inst_fmv_w_x_fpr_gpr :: #force_inline proc "contextless" (rd: FPR, rs1: GPR) -> Instruction { return Instruction{mnemonic = .FMV_W_X, operand_count = 2, length = 4, ops = {op_fpr(rd), op_gpr(rs1), {}, {}}} } -emit_fmv_w_x_fpr_gpr :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: FPR, rs1: GPR) { append(instructions, inst_fmv_w_x_fpr_gpr(rd, rs1)) } +emit_fmv_w_x_fpr_gpr :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: FPR, rs1: GPR) { append_elem(instructions, inst_fmv_w_x_fpr_gpr(rd, rs1)) } inst_fcvt_l_s_gpr_fpr :: #force_inline proc "contextless" (rd: GPR, rs1: FPR) -> Instruction { return Instruction{mnemonic = .FCVT_L_S, operand_count = 2, length = 4, ops = {op_gpr(rd), op_fpr(rs1), {}, {}}} } -emit_fcvt_l_s_gpr_fpr :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: GPR, rs1: FPR) { append(instructions, inst_fcvt_l_s_gpr_fpr(rd, rs1)) } +emit_fcvt_l_s_gpr_fpr :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: GPR, rs1: FPR) { append_elem(instructions, inst_fcvt_l_s_gpr_fpr(rd, rs1)) } inst_fcvt_lu_s_gpr_fpr :: #force_inline proc "contextless" (rd: GPR, rs1: FPR) -> Instruction { return Instruction{mnemonic = .FCVT_LU_S, operand_count = 2, length = 4, ops = {op_gpr(rd), op_fpr(rs1), {}, {}}} } -emit_fcvt_lu_s_gpr_fpr :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: GPR, rs1: FPR) { append(instructions, inst_fcvt_lu_s_gpr_fpr(rd, rs1)) } +emit_fcvt_lu_s_gpr_fpr :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: GPR, rs1: FPR) { append_elem(instructions, inst_fcvt_lu_s_gpr_fpr(rd, rs1)) } inst_fcvt_s_l_fpr_gpr :: #force_inline proc "contextless" (rd: FPR, rs1: GPR) -> Instruction { return Instruction{mnemonic = .FCVT_S_L, operand_count = 2, length = 4, ops = {op_fpr(rd), op_gpr(rs1), {}, {}}} } -emit_fcvt_s_l_fpr_gpr :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: FPR, rs1: GPR) { append(instructions, inst_fcvt_s_l_fpr_gpr(rd, rs1)) } +emit_fcvt_s_l_fpr_gpr :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: FPR, rs1: GPR) { append_elem(instructions, inst_fcvt_s_l_fpr_gpr(rd, rs1)) } inst_fcvt_s_lu_fpr_gpr :: #force_inline proc "contextless" (rd: FPR, rs1: GPR) -> Instruction { return Instruction{mnemonic = .FCVT_S_LU, operand_count = 2, length = 4, ops = {op_fpr(rd), op_gpr(rs1), {}, {}}} } -emit_fcvt_s_lu_fpr_gpr :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: FPR, rs1: GPR) { append(instructions, inst_fcvt_s_lu_fpr_gpr(rd, rs1)) } +emit_fcvt_s_lu_fpr_gpr :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: FPR, rs1: GPR) { append_elem(instructions, inst_fcvt_s_lu_fpr_gpr(rd, rs1)) } inst_fld_fpr_mem :: #force_inline proc "contextless" (rd: FPR, mem: Memory) -> Instruction { return Instruction{mnemonic = .FLD, operand_count = 2, length = 4, ops = {op_fpr(rd), op_mem(mem), {}, {}}} } -emit_fld_fpr_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: FPR, mem: Memory) { append(instructions, inst_fld_fpr_mem(rd, mem)) } +emit_fld_fpr_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: FPR, mem: Memory) { append_elem(instructions, inst_fld_fpr_mem(rd, mem)) } inst_fsd_fpr_mem :: #force_inline proc "contextless" (rd: FPR, mem: Memory) -> Instruction { return Instruction{mnemonic = .FSD, operand_count = 2, length = 4, ops = {op_fpr(rd), op_mem(mem), {}, {}}} } -emit_fsd_fpr_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: FPR, mem: Memory) { append(instructions, inst_fsd_fpr_mem(rd, mem)) } +emit_fsd_fpr_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: FPR, mem: Memory) { append_elem(instructions, inst_fsd_fpr_mem(rd, mem)) } inst_fmadd_d_fpr_fpr_fpr_fpr :: #force_inline proc "contextless" (rd: FPR, rs1: FPR, rs2: FPR, rs3: FPR) -> Instruction { return Instruction{mnemonic = .FMADD_D, operand_count = 4, length = 4, ops = {op_fpr(rd), op_fpr(rs1), op_fpr(rs2), op_fpr(rs3)}} } -emit_fmadd_d_fpr_fpr_fpr_fpr :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: FPR, rs1: FPR, rs2: FPR, rs3: FPR) { append(instructions, inst_fmadd_d_fpr_fpr_fpr_fpr(rd, rs1, rs2, rs3)) } +emit_fmadd_d_fpr_fpr_fpr_fpr :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: FPR, rs1: FPR, rs2: FPR, rs3: FPR) { append_elem(instructions, inst_fmadd_d_fpr_fpr_fpr_fpr(rd, rs1, rs2, rs3)) } inst_fmsub_d_fpr_fpr_fpr_fpr :: #force_inline proc "contextless" (rd: FPR, rs1: FPR, rs2: FPR, rs3: FPR) -> Instruction { return Instruction{mnemonic = .FMSUB_D, operand_count = 4, length = 4, ops = {op_fpr(rd), op_fpr(rs1), op_fpr(rs2), op_fpr(rs3)}} } -emit_fmsub_d_fpr_fpr_fpr_fpr :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: FPR, rs1: FPR, rs2: FPR, rs3: FPR) { append(instructions, inst_fmsub_d_fpr_fpr_fpr_fpr(rd, rs1, rs2, rs3)) } +emit_fmsub_d_fpr_fpr_fpr_fpr :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: FPR, rs1: FPR, rs2: FPR, rs3: FPR) { append_elem(instructions, inst_fmsub_d_fpr_fpr_fpr_fpr(rd, rs1, rs2, rs3)) } inst_fnmsub_d_fpr_fpr_fpr_fpr :: #force_inline proc "contextless" (rd: FPR, rs1: FPR, rs2: FPR, rs3: FPR) -> Instruction { return Instruction{mnemonic = .FNMSUB_D, operand_count = 4, length = 4, ops = {op_fpr(rd), op_fpr(rs1), op_fpr(rs2), op_fpr(rs3)}} } -emit_fnmsub_d_fpr_fpr_fpr_fpr :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: FPR, rs1: FPR, rs2: FPR, rs3: FPR) { append(instructions, inst_fnmsub_d_fpr_fpr_fpr_fpr(rd, rs1, rs2, rs3)) } +emit_fnmsub_d_fpr_fpr_fpr_fpr :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: FPR, rs1: FPR, rs2: FPR, rs3: FPR) { append_elem(instructions, inst_fnmsub_d_fpr_fpr_fpr_fpr(rd, rs1, rs2, rs3)) } inst_fnmadd_d_fpr_fpr_fpr_fpr :: #force_inline proc "contextless" (rd: FPR, rs1: FPR, rs2: FPR, rs3: FPR) -> Instruction { return Instruction{mnemonic = .FNMADD_D, operand_count = 4, length = 4, ops = {op_fpr(rd), op_fpr(rs1), op_fpr(rs2), op_fpr(rs3)}} } -emit_fnmadd_d_fpr_fpr_fpr_fpr :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: FPR, rs1: FPR, rs2: FPR, rs3: FPR) { append(instructions, inst_fnmadd_d_fpr_fpr_fpr_fpr(rd, rs1, rs2, rs3)) } +emit_fnmadd_d_fpr_fpr_fpr_fpr :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: FPR, rs1: FPR, rs2: FPR, rs3: FPR) { append_elem(instructions, inst_fnmadd_d_fpr_fpr_fpr_fpr(rd, rs1, rs2, rs3)) } inst_fadd_d_fpr_fpr_fpr :: #force_inline proc "contextless" (rd: FPR, rs1: FPR, rs2: FPR) -> Instruction { return Instruction{mnemonic = .FADD_D, operand_count = 3, length = 4, ops = {op_fpr(rd), op_fpr(rs1), op_fpr(rs2), {}}} } -emit_fadd_d_fpr_fpr_fpr :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: FPR, rs1: FPR, rs2: FPR) { append(instructions, inst_fadd_d_fpr_fpr_fpr(rd, rs1, rs2)) } +emit_fadd_d_fpr_fpr_fpr :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: FPR, rs1: FPR, rs2: FPR) { append_elem(instructions, inst_fadd_d_fpr_fpr_fpr(rd, rs1, rs2)) } inst_fsub_d_fpr_fpr_fpr :: #force_inline proc "contextless" (rd: FPR, rs1: FPR, rs2: FPR) -> Instruction { return Instruction{mnemonic = .FSUB_D, operand_count = 3, length = 4, ops = {op_fpr(rd), op_fpr(rs1), op_fpr(rs2), {}}} } -emit_fsub_d_fpr_fpr_fpr :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: FPR, rs1: FPR, rs2: FPR) { append(instructions, inst_fsub_d_fpr_fpr_fpr(rd, rs1, rs2)) } +emit_fsub_d_fpr_fpr_fpr :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: FPR, rs1: FPR, rs2: FPR) { append_elem(instructions, inst_fsub_d_fpr_fpr_fpr(rd, rs1, rs2)) } inst_fmul_d_fpr_fpr_fpr :: #force_inline proc "contextless" (rd: FPR, rs1: FPR, rs2: FPR) -> Instruction { return Instruction{mnemonic = .FMUL_D, operand_count = 3, length = 4, ops = {op_fpr(rd), op_fpr(rs1), op_fpr(rs2), {}}} } -emit_fmul_d_fpr_fpr_fpr :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: FPR, rs1: FPR, rs2: FPR) { append(instructions, inst_fmul_d_fpr_fpr_fpr(rd, rs1, rs2)) } +emit_fmul_d_fpr_fpr_fpr :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: FPR, rs1: FPR, rs2: FPR) { append_elem(instructions, inst_fmul_d_fpr_fpr_fpr(rd, rs1, rs2)) } inst_fdiv_d_fpr_fpr_fpr :: #force_inline proc "contextless" (rd: FPR, rs1: FPR, rs2: FPR) -> Instruction { return Instruction{mnemonic = .FDIV_D, operand_count = 3, length = 4, ops = {op_fpr(rd), op_fpr(rs1), op_fpr(rs2), {}}} } -emit_fdiv_d_fpr_fpr_fpr :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: FPR, rs1: FPR, rs2: FPR) { append(instructions, inst_fdiv_d_fpr_fpr_fpr(rd, rs1, rs2)) } +emit_fdiv_d_fpr_fpr_fpr :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: FPR, rs1: FPR, rs2: FPR) { append_elem(instructions, inst_fdiv_d_fpr_fpr_fpr(rd, rs1, rs2)) } inst_fsqrt_d_fpr_fpr :: #force_inline proc "contextless" (rd: FPR, rs1: FPR) -> Instruction { return Instruction{mnemonic = .FSQRT_D, operand_count = 2, length = 4, ops = {op_fpr(rd), op_fpr(rs1), {}, {}}} } -emit_fsqrt_d_fpr_fpr :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: FPR, rs1: FPR) { append(instructions, inst_fsqrt_d_fpr_fpr(rd, rs1)) } +emit_fsqrt_d_fpr_fpr :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: FPR, rs1: FPR) { append_elem(instructions, inst_fsqrt_d_fpr_fpr(rd, rs1)) } inst_fsgnj_d_fpr_fpr_fpr :: #force_inline proc "contextless" (rd: FPR, rs1: FPR, rs2: FPR) -> Instruction { return Instruction{mnemonic = .FSGNJ_D, operand_count = 3, length = 4, ops = {op_fpr(rd), op_fpr(rs1), op_fpr(rs2), {}}} } -emit_fsgnj_d_fpr_fpr_fpr :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: FPR, rs1: FPR, rs2: FPR) { append(instructions, inst_fsgnj_d_fpr_fpr_fpr(rd, rs1, rs2)) } +emit_fsgnj_d_fpr_fpr_fpr :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: FPR, rs1: FPR, rs2: FPR) { append_elem(instructions, inst_fsgnj_d_fpr_fpr_fpr(rd, rs1, rs2)) } inst_fsgnjn_d_fpr_fpr_fpr :: #force_inline proc "contextless" (rd: FPR, rs1: FPR, rs2: FPR) -> Instruction { return Instruction{mnemonic = .FSGNJN_D, operand_count = 3, length = 4, ops = {op_fpr(rd), op_fpr(rs1), op_fpr(rs2), {}}} } -emit_fsgnjn_d_fpr_fpr_fpr :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: FPR, rs1: FPR, rs2: FPR) { append(instructions, inst_fsgnjn_d_fpr_fpr_fpr(rd, rs1, rs2)) } +emit_fsgnjn_d_fpr_fpr_fpr :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: FPR, rs1: FPR, rs2: FPR) { append_elem(instructions, inst_fsgnjn_d_fpr_fpr_fpr(rd, rs1, rs2)) } inst_fsgnjx_d_fpr_fpr_fpr :: #force_inline proc "contextless" (rd: FPR, rs1: FPR, rs2: FPR) -> Instruction { return Instruction{mnemonic = .FSGNJX_D, operand_count = 3, length = 4, ops = {op_fpr(rd), op_fpr(rs1), op_fpr(rs2), {}}} } -emit_fsgnjx_d_fpr_fpr_fpr :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: FPR, rs1: FPR, rs2: FPR) { append(instructions, inst_fsgnjx_d_fpr_fpr_fpr(rd, rs1, rs2)) } +emit_fsgnjx_d_fpr_fpr_fpr :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: FPR, rs1: FPR, rs2: FPR) { append_elem(instructions, inst_fsgnjx_d_fpr_fpr_fpr(rd, rs1, rs2)) } inst_fmin_d_fpr_fpr_fpr :: #force_inline proc "contextless" (rd: FPR, rs1: FPR, rs2: FPR) -> Instruction { return Instruction{mnemonic = .FMIN_D, operand_count = 3, length = 4, ops = {op_fpr(rd), op_fpr(rs1), op_fpr(rs2), {}}} } -emit_fmin_d_fpr_fpr_fpr :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: FPR, rs1: FPR, rs2: FPR) { append(instructions, inst_fmin_d_fpr_fpr_fpr(rd, rs1, rs2)) } +emit_fmin_d_fpr_fpr_fpr :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: FPR, rs1: FPR, rs2: FPR) { append_elem(instructions, inst_fmin_d_fpr_fpr_fpr(rd, rs1, rs2)) } inst_fmax_d_fpr_fpr_fpr :: #force_inline proc "contextless" (rd: FPR, rs1: FPR, rs2: FPR) -> Instruction { return Instruction{mnemonic = .FMAX_D, operand_count = 3, length = 4, ops = {op_fpr(rd), op_fpr(rs1), op_fpr(rs2), {}}} } -emit_fmax_d_fpr_fpr_fpr :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: FPR, rs1: FPR, rs2: FPR) { append(instructions, inst_fmax_d_fpr_fpr_fpr(rd, rs1, rs2)) } +emit_fmax_d_fpr_fpr_fpr :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: FPR, rs1: FPR, rs2: FPR) { append_elem(instructions, inst_fmax_d_fpr_fpr_fpr(rd, rs1, rs2)) } inst_fcvt_s_d_fpr_fpr :: #force_inline proc "contextless" (rd: FPR, rs1: FPR) -> Instruction { return Instruction{mnemonic = .FCVT_S_D, operand_count = 2, length = 4, ops = {op_fpr(rd), op_fpr(rs1), {}, {}}} } -emit_fcvt_s_d_fpr_fpr :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: FPR, rs1: FPR) { append(instructions, inst_fcvt_s_d_fpr_fpr(rd, rs1)) } +emit_fcvt_s_d_fpr_fpr :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: FPR, rs1: FPR) { append_elem(instructions, inst_fcvt_s_d_fpr_fpr(rd, rs1)) } inst_fcvt_d_s_fpr_fpr :: #force_inline proc "contextless" (rd: FPR, rs1: FPR) -> Instruction { return Instruction{mnemonic = .FCVT_D_S, operand_count = 2, length = 4, ops = {op_fpr(rd), op_fpr(rs1), {}, {}}} } -emit_fcvt_d_s_fpr_fpr :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: FPR, rs1: FPR) { append(instructions, inst_fcvt_d_s_fpr_fpr(rd, rs1)) } +emit_fcvt_d_s_fpr_fpr :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: FPR, rs1: FPR) { append_elem(instructions, inst_fcvt_d_s_fpr_fpr(rd, rs1)) } inst_feq_d_gpr_fpr_fpr :: #force_inline proc "contextless" (rd: GPR, rs1: FPR, rs2: FPR) -> Instruction { return Instruction{mnemonic = .FEQ_D, operand_count = 3, length = 4, ops = {op_gpr(rd), op_fpr(rs1), op_fpr(rs2), {}}} } -emit_feq_d_gpr_fpr_fpr :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: GPR, rs1: FPR, rs2: FPR) { append(instructions, inst_feq_d_gpr_fpr_fpr(rd, rs1, rs2)) } +emit_feq_d_gpr_fpr_fpr :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: GPR, rs1: FPR, rs2: FPR) { append_elem(instructions, inst_feq_d_gpr_fpr_fpr(rd, rs1, rs2)) } inst_flt_d_gpr_fpr_fpr :: #force_inline proc "contextless" (rd: GPR, rs1: FPR, rs2: FPR) -> Instruction { return Instruction{mnemonic = .FLT_D, operand_count = 3, length = 4, ops = {op_gpr(rd), op_fpr(rs1), op_fpr(rs2), {}}} } -emit_flt_d_gpr_fpr_fpr :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: GPR, rs1: FPR, rs2: FPR) { append(instructions, inst_flt_d_gpr_fpr_fpr(rd, rs1, rs2)) } +emit_flt_d_gpr_fpr_fpr :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: GPR, rs1: FPR, rs2: FPR) { append_elem(instructions, inst_flt_d_gpr_fpr_fpr(rd, rs1, rs2)) } inst_fle_d_gpr_fpr_fpr :: #force_inline proc "contextless" (rd: GPR, rs1: FPR, rs2: FPR) -> Instruction { return Instruction{mnemonic = .FLE_D, operand_count = 3, length = 4, ops = {op_gpr(rd), op_fpr(rs1), op_fpr(rs2), {}}} } -emit_fle_d_gpr_fpr_fpr :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: GPR, rs1: FPR, rs2: FPR) { append(instructions, inst_fle_d_gpr_fpr_fpr(rd, rs1, rs2)) } +emit_fle_d_gpr_fpr_fpr :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: GPR, rs1: FPR, rs2: FPR) { append_elem(instructions, inst_fle_d_gpr_fpr_fpr(rd, rs1, rs2)) } inst_fclass_d_gpr_fpr :: #force_inline proc "contextless" (rd: GPR, rs1: FPR) -> Instruction { return Instruction{mnemonic = .FCLASS_D, operand_count = 2, length = 4, ops = {op_gpr(rd), op_fpr(rs1), {}, {}}} } -emit_fclass_d_gpr_fpr :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: GPR, rs1: FPR) { append(instructions, inst_fclass_d_gpr_fpr(rd, rs1)) } +emit_fclass_d_gpr_fpr :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: GPR, rs1: FPR) { append_elem(instructions, inst_fclass_d_gpr_fpr(rd, rs1)) } inst_fcvt_w_d_gpr_fpr :: #force_inline proc "contextless" (rd: GPR, rs1: FPR) -> Instruction { return Instruction{mnemonic = .FCVT_W_D, operand_count = 2, length = 4, ops = {op_gpr(rd), op_fpr(rs1), {}, {}}} } -emit_fcvt_w_d_gpr_fpr :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: GPR, rs1: FPR) { append(instructions, inst_fcvt_w_d_gpr_fpr(rd, rs1)) } +emit_fcvt_w_d_gpr_fpr :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: GPR, rs1: FPR) { append_elem(instructions, inst_fcvt_w_d_gpr_fpr(rd, rs1)) } inst_fcvt_wu_d_gpr_fpr :: #force_inline proc "contextless" (rd: GPR, rs1: FPR) -> Instruction { return Instruction{mnemonic = .FCVT_WU_D, operand_count = 2, length = 4, ops = {op_gpr(rd), op_fpr(rs1), {}, {}}} } -emit_fcvt_wu_d_gpr_fpr :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: GPR, rs1: FPR) { append(instructions, inst_fcvt_wu_d_gpr_fpr(rd, rs1)) } +emit_fcvt_wu_d_gpr_fpr :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: GPR, rs1: FPR) { append_elem(instructions, inst_fcvt_wu_d_gpr_fpr(rd, rs1)) } inst_fcvt_d_w_fpr_gpr :: #force_inline proc "contextless" (rd: FPR, rs1: GPR) -> Instruction { return Instruction{mnemonic = .FCVT_D_W, operand_count = 2, length = 4, ops = {op_fpr(rd), op_gpr(rs1), {}, {}}} } -emit_fcvt_d_w_fpr_gpr :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: FPR, rs1: GPR) { append(instructions, inst_fcvt_d_w_fpr_gpr(rd, rs1)) } +emit_fcvt_d_w_fpr_gpr :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: FPR, rs1: GPR) { append_elem(instructions, inst_fcvt_d_w_fpr_gpr(rd, rs1)) } inst_fcvt_d_wu_fpr_gpr :: #force_inline proc "contextless" (rd: FPR, rs1: GPR) -> Instruction { return Instruction{mnemonic = .FCVT_D_WU, operand_count = 2, length = 4, ops = {op_fpr(rd), op_gpr(rs1), {}, {}}} } -emit_fcvt_d_wu_fpr_gpr :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: FPR, rs1: GPR) { append(instructions, inst_fcvt_d_wu_fpr_gpr(rd, rs1)) } +emit_fcvt_d_wu_fpr_gpr :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: FPR, rs1: GPR) { append_elem(instructions, inst_fcvt_d_wu_fpr_gpr(rd, rs1)) } inst_fcvt_l_d_gpr_fpr :: #force_inline proc "contextless" (rd: GPR, rs1: FPR) -> Instruction { return Instruction{mnemonic = .FCVT_L_D, operand_count = 2, length = 4, ops = {op_gpr(rd), op_fpr(rs1), {}, {}}} } -emit_fcvt_l_d_gpr_fpr :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: GPR, rs1: FPR) { append(instructions, inst_fcvt_l_d_gpr_fpr(rd, rs1)) } +emit_fcvt_l_d_gpr_fpr :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: GPR, rs1: FPR) { append_elem(instructions, inst_fcvt_l_d_gpr_fpr(rd, rs1)) } inst_fcvt_lu_d_gpr_fpr :: #force_inline proc "contextless" (rd: GPR, rs1: FPR) -> Instruction { return Instruction{mnemonic = .FCVT_LU_D, operand_count = 2, length = 4, ops = {op_gpr(rd), op_fpr(rs1), {}, {}}} } -emit_fcvt_lu_d_gpr_fpr :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: GPR, rs1: FPR) { append(instructions, inst_fcvt_lu_d_gpr_fpr(rd, rs1)) } +emit_fcvt_lu_d_gpr_fpr :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: GPR, rs1: FPR) { append_elem(instructions, inst_fcvt_lu_d_gpr_fpr(rd, rs1)) } inst_fcvt_d_l_fpr_gpr :: #force_inline proc "contextless" (rd: FPR, rs1: GPR) -> Instruction { return Instruction{mnemonic = .FCVT_D_L, operand_count = 2, length = 4, ops = {op_fpr(rd), op_gpr(rs1), {}, {}}} } -emit_fcvt_d_l_fpr_gpr :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: FPR, rs1: GPR) { append(instructions, inst_fcvt_d_l_fpr_gpr(rd, rs1)) } +emit_fcvt_d_l_fpr_gpr :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: FPR, rs1: GPR) { append_elem(instructions, inst_fcvt_d_l_fpr_gpr(rd, rs1)) } inst_fcvt_d_lu_fpr_gpr :: #force_inline proc "contextless" (rd: FPR, rs1: GPR) -> Instruction { return Instruction{mnemonic = .FCVT_D_LU, operand_count = 2, length = 4, ops = {op_fpr(rd), op_gpr(rs1), {}, {}}} } -emit_fcvt_d_lu_fpr_gpr :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: FPR, rs1: GPR) { append(instructions, inst_fcvt_d_lu_fpr_gpr(rd, rs1)) } +emit_fcvt_d_lu_fpr_gpr :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: FPR, rs1: GPR) { append_elem(instructions, inst_fcvt_d_lu_fpr_gpr(rd, rs1)) } inst_fmv_x_d_gpr_fpr :: #force_inline proc "contextless" (rd: GPR, rs1: FPR) -> Instruction { return Instruction{mnemonic = .FMV_X_D, operand_count = 2, length = 4, ops = {op_gpr(rd), op_fpr(rs1), {}, {}}} } -emit_fmv_x_d_gpr_fpr :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: GPR, rs1: FPR) { append(instructions, inst_fmv_x_d_gpr_fpr(rd, rs1)) } +emit_fmv_x_d_gpr_fpr :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: GPR, rs1: FPR) { append_elem(instructions, inst_fmv_x_d_gpr_fpr(rd, rs1)) } inst_fmv_d_x_fpr_gpr :: #force_inline proc "contextless" (rd: FPR, rs1: GPR) -> Instruction { return Instruction{mnemonic = .FMV_D_X, operand_count = 2, length = 4, ops = {op_fpr(rd), op_gpr(rs1), {}, {}}} } -emit_fmv_d_x_fpr_gpr :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: FPR, rs1: GPR) { append(instructions, inst_fmv_d_x_fpr_gpr(rd, rs1)) } +emit_fmv_d_x_fpr_gpr :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: FPR, rs1: GPR) { append_elem(instructions, inst_fmv_d_x_fpr_gpr(rd, rs1)) } inst_c_nop_none :: #force_inline proc "contextless" () -> Instruction { return Instruction{mnemonic = .C_NOP, operand_count = 0, length = 2} } -emit_c_nop_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_c_nop_none()) } +emit_c_nop_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_c_nop_none()) } inst_c_ebreak_none :: #force_inline proc "contextless" () -> Instruction { return Instruction{mnemonic = .C_EBREAK, operand_count = 0, length = 2} } -emit_c_ebreak_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_c_ebreak_none()) } +emit_c_ebreak_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_c_ebreak_none()) } inst_c_addi4spn_gpr_gpr_imm8u :: #force_inline proc "contextless" (rd: GPR, rs1: GPR, imm: i64) -> Instruction { return Instruction{mnemonic = .C_ADDI4SPN, operand_count = 3, length = 2, ops = {op_gpr(rd), op_gpr(rs1), op_imm(imm, 2), {}}} } -emit_c_addi4spn_gpr_gpr_imm8u :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: GPR, rs1: GPR, imm: i64) { append(instructions, inst_c_addi4spn_gpr_gpr_imm8u(rd, rs1, imm)) } +emit_c_addi4spn_gpr_gpr_imm8u :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: GPR, rs1: GPR, imm: i64) { append_elem(instructions, inst_c_addi4spn_gpr_gpr_imm8u(rd, rs1, imm)) } inst_c_lw_gpr_mem :: #force_inline proc "contextless" (rd: GPR, mem: Memory) -> Instruction { return Instruction{mnemonic = .C_LW, operand_count = 2, length = 2, ops = {op_gpr(rd), op_mem(mem), {}, {}}} } -emit_c_lw_gpr_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: GPR, mem: Memory) { append(instructions, inst_c_lw_gpr_mem(rd, mem)) } +emit_c_lw_gpr_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: GPR, mem: Memory) { append_elem(instructions, inst_c_lw_gpr_mem(rd, mem)) } inst_c_ld_gpr_mem :: #force_inline proc "contextless" (rd: GPR, mem: Memory) -> Instruction { return Instruction{mnemonic = .C_LD, operand_count = 2, length = 2, ops = {op_gpr(rd), op_mem(mem), {}, {}}} } -emit_c_ld_gpr_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: GPR, mem: Memory) { append(instructions, inst_c_ld_gpr_mem(rd, mem)) } +emit_c_ld_gpr_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: GPR, mem: Memory) { append_elem(instructions, inst_c_ld_gpr_mem(rd, mem)) } inst_c_sw_gpr_mem :: #force_inline proc "contextless" (rd: GPR, mem: Memory) -> Instruction { return Instruction{mnemonic = .C_SW, operand_count = 2, length = 2, ops = {op_gpr(rd), op_mem(mem), {}, {}}} } -emit_c_sw_gpr_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: GPR, mem: Memory) { append(instructions, inst_c_sw_gpr_mem(rd, mem)) } +emit_c_sw_gpr_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: GPR, mem: Memory) { append_elem(instructions, inst_c_sw_gpr_mem(rd, mem)) } inst_c_sd_gpr_mem :: #force_inline proc "contextless" (rd: GPR, mem: Memory) -> Instruction { return Instruction{mnemonic = .C_SD, operand_count = 2, length = 2, ops = {op_gpr(rd), op_mem(mem), {}, {}}} } -emit_c_sd_gpr_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: GPR, mem: Memory) { append(instructions, inst_c_sd_gpr_mem(rd, mem)) } +emit_c_sd_gpr_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: GPR, mem: Memory) { append_elem(instructions, inst_c_sd_gpr_mem(rd, mem)) } +inst_c_flw_fpr_mem :: #force_inline proc "contextless" (rd: FPR, mem: Memory) -> Instruction { return Instruction{mnemonic = .C_FLW, operand_count = 2, length = 2, ops = {op_fpr(rd), op_mem(mem), {}, {}}} } +emit_c_flw_fpr_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: FPR, mem: Memory) { append_elem(instructions, inst_c_flw_fpr_mem(rd, mem)) } +inst_c_fsw_fpr_mem :: #force_inline proc "contextless" (rd: FPR, mem: Memory) -> Instruction { return Instruction{mnemonic = .C_FSW, operand_count = 2, length = 2, ops = {op_fpr(rd), op_mem(mem), {}, {}}} } +emit_c_fsw_fpr_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: FPR, mem: Memory) { append_elem(instructions, inst_c_fsw_fpr_mem(rd, mem)) } inst_c_fld_fpr_mem :: #force_inline proc "contextless" (rd: FPR, mem: Memory) -> Instruction { return Instruction{mnemonic = .C_FLD, operand_count = 2, length = 2, ops = {op_fpr(rd), op_mem(mem), {}, {}}} } -emit_c_fld_fpr_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: FPR, mem: Memory) { append(instructions, inst_c_fld_fpr_mem(rd, mem)) } +emit_c_fld_fpr_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: FPR, mem: Memory) { append_elem(instructions, inst_c_fld_fpr_mem(rd, mem)) } inst_c_fsd_fpr_mem :: #force_inline proc "contextless" (rd: FPR, mem: Memory) -> Instruction { return Instruction{mnemonic = .C_FSD, operand_count = 2, length = 2, ops = {op_fpr(rd), op_mem(mem), {}, {}}} } -emit_c_fsd_fpr_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: FPR, mem: Memory) { append(instructions, inst_c_fsd_fpr_mem(rd, mem)) } +emit_c_fsd_fpr_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: FPR, mem: Memory) { append_elem(instructions, inst_c_fsd_fpr_mem(rd, mem)) } inst_c_addi_gpr_imm6s :: #force_inline proc "contextless" (rd: GPR, imm: i64) -> Instruction { return Instruction{mnemonic = .C_ADDI, operand_count = 2, length = 2, ops = {op_gpr(rd), op_imm(imm, 2), {}, {}}} } -emit_c_addi_gpr_imm6s :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: GPR, imm: i64) { append(instructions, inst_c_addi_gpr_imm6s(rd, imm)) } +emit_c_addi_gpr_imm6s :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: GPR, imm: i64) { append_elem(instructions, inst_c_addi_gpr_imm6s(rd, imm)) } inst_c_addiw_gpr_imm6s :: #force_inline proc "contextless" (rd: GPR, imm: i64) -> Instruction { return Instruction{mnemonic = .C_ADDIW, operand_count = 2, length = 2, ops = {op_gpr(rd), op_imm(imm, 2), {}, {}}} } -emit_c_addiw_gpr_imm6s :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: GPR, imm: i64) { append(instructions, inst_c_addiw_gpr_imm6s(rd, imm)) } +emit_c_addiw_gpr_imm6s :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: GPR, imm: i64) { append_elem(instructions, inst_c_addiw_gpr_imm6s(rd, imm)) } inst_c_li_gpr_imm6s :: #force_inline proc "contextless" (rd: GPR, imm: i64) -> Instruction { return Instruction{mnemonic = .C_LI, operand_count = 2, length = 2, ops = {op_gpr(rd), op_imm(imm, 2), {}, {}}} } -emit_c_li_gpr_imm6s :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: GPR, imm: i64) { append(instructions, inst_c_li_gpr_imm6s(rd, imm)) } +emit_c_li_gpr_imm6s :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: GPR, imm: i64) { append_elem(instructions, inst_c_li_gpr_imm6s(rd, imm)) } inst_c_lui_gpr_imm18s :: #force_inline proc "contextless" (rd: GPR, imm: i64) -> Instruction { return Instruction{mnemonic = .C_LUI, operand_count = 2, length = 2, ops = {op_gpr(rd), op_imm(imm, 2), {}, {}}} } -emit_c_lui_gpr_imm18s :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: GPR, imm: i64) { append(instructions, inst_c_lui_gpr_imm18s(rd, imm)) } +emit_c_lui_gpr_imm18s :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: GPR, imm: i64) { append_elem(instructions, inst_c_lui_gpr_imm18s(rd, imm)) } inst_c_addi16sp_gpr_imm10s :: #force_inline proc "contextless" (rd: GPR, imm: i64) -> Instruction { return Instruction{mnemonic = .C_ADDI16SP, operand_count = 2, length = 2, ops = {op_gpr(rd), op_imm(imm, 2), {}, {}}} } -emit_c_addi16sp_gpr_imm10s :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: GPR, imm: i64) { append(instructions, inst_c_addi16sp_gpr_imm10s(rd, imm)) } +emit_c_addi16sp_gpr_imm10s :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: GPR, imm: i64) { append_elem(instructions, inst_c_addi16sp_gpr_imm10s(rd, imm)) } inst_c_srli_gpr_imm6u :: #force_inline proc "contextless" (rd: GPR, imm: i64) -> Instruction { return Instruction{mnemonic = .C_SRLI, operand_count = 2, length = 2, ops = {op_gpr(rd), op_imm(imm, 2), {}, {}}} } -emit_c_srli_gpr_imm6u :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: GPR, imm: i64) { append(instructions, inst_c_srli_gpr_imm6u(rd, imm)) } +emit_c_srli_gpr_imm6u :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: GPR, imm: i64) { append_elem(instructions, inst_c_srli_gpr_imm6u(rd, imm)) } inst_c_srai_gpr_imm6u :: #force_inline proc "contextless" (rd: GPR, imm: i64) -> Instruction { return Instruction{mnemonic = .C_SRAI, operand_count = 2, length = 2, ops = {op_gpr(rd), op_imm(imm, 2), {}, {}}} } -emit_c_srai_gpr_imm6u :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: GPR, imm: i64) { append(instructions, inst_c_srai_gpr_imm6u(rd, imm)) } +emit_c_srai_gpr_imm6u :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: GPR, imm: i64) { append_elem(instructions, inst_c_srai_gpr_imm6u(rd, imm)) } inst_c_andi_gpr_imm6s :: #force_inline proc "contextless" (rd: GPR, imm: i64) -> Instruction { return Instruction{mnemonic = .C_ANDI, operand_count = 2, length = 2, ops = {op_gpr(rd), op_imm(imm, 2), {}, {}}} } -emit_c_andi_gpr_imm6s :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: GPR, imm: i64) { append(instructions, inst_c_andi_gpr_imm6s(rd, imm)) } +emit_c_andi_gpr_imm6s :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: GPR, imm: i64) { append_elem(instructions, inst_c_andi_gpr_imm6s(rd, imm)) } inst_c_sub_gpr_gpr :: #force_inline proc "contextless" (rd: GPR, rs1: GPR) -> Instruction { return Instruction{mnemonic = .C_SUB, operand_count = 2, length = 2, ops = {op_gpr(rd), op_gpr(rs1), {}, {}}} } -emit_c_sub_gpr_gpr :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: GPR, rs1: GPR) { append(instructions, inst_c_sub_gpr_gpr(rd, rs1)) } +emit_c_sub_gpr_gpr :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: GPR, rs1: GPR) { append_elem(instructions, inst_c_sub_gpr_gpr(rd, rs1)) } inst_c_xor_gpr_gpr :: #force_inline proc "contextless" (rd: GPR, rs1: GPR) -> Instruction { return Instruction{mnemonic = .C_XOR, operand_count = 2, length = 2, ops = {op_gpr(rd), op_gpr(rs1), {}, {}}} } -emit_c_xor_gpr_gpr :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: GPR, rs1: GPR) { append(instructions, inst_c_xor_gpr_gpr(rd, rs1)) } +emit_c_xor_gpr_gpr :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: GPR, rs1: GPR) { append_elem(instructions, inst_c_xor_gpr_gpr(rd, rs1)) } inst_c_or_gpr_gpr :: #force_inline proc "contextless" (rd: GPR, rs1: GPR) -> Instruction { return Instruction{mnemonic = .C_OR, operand_count = 2, length = 2, ops = {op_gpr(rd), op_gpr(rs1), {}, {}}} } -emit_c_or_gpr_gpr :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: GPR, rs1: GPR) { append(instructions, inst_c_or_gpr_gpr(rd, rs1)) } +emit_c_or_gpr_gpr :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: GPR, rs1: GPR) { append_elem(instructions, inst_c_or_gpr_gpr(rd, rs1)) } inst_c_and_gpr_gpr :: #force_inline proc "contextless" (rd: GPR, rs1: GPR) -> Instruction { return Instruction{mnemonic = .C_AND, operand_count = 2, length = 2, ops = {op_gpr(rd), op_gpr(rs1), {}, {}}} } -emit_c_and_gpr_gpr :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: GPR, rs1: GPR) { append(instructions, inst_c_and_gpr_gpr(rd, rs1)) } +emit_c_and_gpr_gpr :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: GPR, rs1: GPR) { append_elem(instructions, inst_c_and_gpr_gpr(rd, rs1)) } inst_c_subw_gpr_gpr :: #force_inline proc "contextless" (rd: GPR, rs1: GPR) -> Instruction { return Instruction{mnemonic = .C_SUBW, operand_count = 2, length = 2, ops = {op_gpr(rd), op_gpr(rs1), {}, {}}} } -emit_c_subw_gpr_gpr :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: GPR, rs1: GPR) { append(instructions, inst_c_subw_gpr_gpr(rd, rs1)) } +emit_c_subw_gpr_gpr :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: GPR, rs1: GPR) { append_elem(instructions, inst_c_subw_gpr_gpr(rd, rs1)) } inst_c_addw_gpr_gpr :: #force_inline proc "contextless" (rd: GPR, rs1: GPR) -> Instruction { return Instruction{mnemonic = .C_ADDW, operand_count = 2, length = 2, ops = {op_gpr(rd), op_gpr(rs1), {}, {}}} } -emit_c_addw_gpr_gpr :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: GPR, rs1: GPR) { append(instructions, inst_c_addw_gpr_gpr(rd, rs1)) } +emit_c_addw_gpr_gpr :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: GPR, rs1: GPR) { append_elem(instructions, inst_c_addw_gpr_gpr(rd, rs1)) } inst_c_j_label :: #force_inline proc "contextless" (label: u32) -> Instruction { return Instruction{mnemonic = .C_J, operand_count = 1, length = 2, ops = {op_label(label, 4), {}, {}, {}}} } -emit_c_j_label :: #force_inline proc(instructions: ^[dynamic]Instruction, label: u32) { append(instructions, inst_c_j_label(label)) } +emit_c_j_label :: #force_inline proc(instructions: ^[dynamic]Instruction, label: u32) { append_elem(instructions, inst_c_j_label(label)) } inst_c_jal_label :: #force_inline proc "contextless" (label: u32) -> Instruction { return Instruction{mnemonic = .C_JAL, operand_count = 1, length = 2, ops = {op_label(label, 4), {}, {}, {}}} } -emit_c_jal_label :: #force_inline proc(instructions: ^[dynamic]Instruction, label: u32) { append(instructions, inst_c_jal_label(label)) } +emit_c_jal_label :: #force_inline proc(instructions: ^[dynamic]Instruction, label: u32) { append_elem(instructions, inst_c_jal_label(label)) } inst_c_beqz_gpr_label :: #force_inline proc "contextless" (rd: GPR, label: u32) -> Instruction { return Instruction{mnemonic = .C_BEQZ, operand_count = 2, length = 2, ops = {op_gpr(rd), op_label(label, 2), {}, {}}} } -emit_c_beqz_gpr_label :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: GPR, label: u32) { append(instructions, inst_c_beqz_gpr_label(rd, label)) } +emit_c_beqz_gpr_label :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: GPR, label: u32) { append_elem(instructions, inst_c_beqz_gpr_label(rd, label)) } inst_c_bnez_gpr_label :: #force_inline proc "contextless" (rd: GPR, label: u32) -> Instruction { return Instruction{mnemonic = .C_BNEZ, operand_count = 2, length = 2, ops = {op_gpr(rd), op_label(label, 2), {}, {}}} } -emit_c_bnez_gpr_label :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: GPR, label: u32) { append(instructions, inst_c_bnez_gpr_label(rd, label)) } +emit_c_bnez_gpr_label :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: GPR, label: u32) { append_elem(instructions, inst_c_bnez_gpr_label(rd, label)) } inst_c_slli_gpr_imm6u :: #force_inline proc "contextless" (rd: GPR, imm: i64) -> Instruction { return Instruction{mnemonic = .C_SLLI, operand_count = 2, length = 2, ops = {op_gpr(rd), op_imm(imm, 2), {}, {}}} } -emit_c_slli_gpr_imm6u :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: GPR, imm: i64) { append(instructions, inst_c_slli_gpr_imm6u(rd, imm)) } +emit_c_slli_gpr_imm6u :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: GPR, imm: i64) { append_elem(instructions, inst_c_slli_gpr_imm6u(rd, imm)) } inst_c_lwsp_gpr_mem :: #force_inline proc "contextless" (rd: GPR, mem: Memory) -> Instruction { return Instruction{mnemonic = .C_LWSP, operand_count = 2, length = 2, ops = {op_gpr(rd), op_mem(mem), {}, {}}} } -emit_c_lwsp_gpr_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: GPR, mem: Memory) { append(instructions, inst_c_lwsp_gpr_mem(rd, mem)) } +emit_c_lwsp_gpr_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: GPR, mem: Memory) { append_elem(instructions, inst_c_lwsp_gpr_mem(rd, mem)) } inst_c_ldsp_gpr_mem :: #force_inline proc "contextless" (rd: GPR, mem: Memory) -> Instruction { return Instruction{mnemonic = .C_LDSP, operand_count = 2, length = 2, ops = {op_gpr(rd), op_mem(mem), {}, {}}} } -emit_c_ldsp_gpr_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: GPR, mem: Memory) { append(instructions, inst_c_ldsp_gpr_mem(rd, mem)) } +emit_c_ldsp_gpr_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: GPR, mem: Memory) { append_elem(instructions, inst_c_ldsp_gpr_mem(rd, mem)) } inst_c_swsp_gpr_mem :: #force_inline proc "contextless" (rd: GPR, mem: Memory) -> Instruction { return Instruction{mnemonic = .C_SWSP, operand_count = 2, length = 2, ops = {op_gpr(rd), op_mem(mem), {}, {}}} } -emit_c_swsp_gpr_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: GPR, mem: Memory) { append(instructions, inst_c_swsp_gpr_mem(rd, mem)) } +emit_c_swsp_gpr_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: GPR, mem: Memory) { append_elem(instructions, inst_c_swsp_gpr_mem(rd, mem)) } inst_c_sdsp_gpr_mem :: #force_inline proc "contextless" (rd: GPR, mem: Memory) -> Instruction { return Instruction{mnemonic = .C_SDSP, operand_count = 2, length = 2, ops = {op_gpr(rd), op_mem(mem), {}, {}}} } -emit_c_sdsp_gpr_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: GPR, mem: Memory) { append(instructions, inst_c_sdsp_gpr_mem(rd, mem)) } +emit_c_sdsp_gpr_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: GPR, mem: Memory) { append_elem(instructions, inst_c_sdsp_gpr_mem(rd, mem)) } inst_c_fldsp_fpr_mem :: #force_inline proc "contextless" (rd: FPR, mem: Memory) -> Instruction { return Instruction{mnemonic = .C_FLDSP, operand_count = 2, length = 2, ops = {op_fpr(rd), op_mem(mem), {}, {}}} } -emit_c_fldsp_fpr_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: FPR, mem: Memory) { append(instructions, inst_c_fldsp_fpr_mem(rd, mem)) } +emit_c_fldsp_fpr_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: FPR, mem: Memory) { append_elem(instructions, inst_c_fldsp_fpr_mem(rd, mem)) } inst_c_fsdsp_fpr_mem :: #force_inline proc "contextless" (rd: FPR, mem: Memory) -> Instruction { return Instruction{mnemonic = .C_FSDSP, operand_count = 2, length = 2, ops = {op_fpr(rd), op_mem(mem), {}, {}}} } -emit_c_fsdsp_fpr_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: FPR, mem: Memory) { append(instructions, inst_c_fsdsp_fpr_mem(rd, mem)) } +emit_c_fsdsp_fpr_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: FPR, mem: Memory) { append_elem(instructions, inst_c_fsdsp_fpr_mem(rd, mem)) } inst_c_jr_gpr :: #force_inline proc "contextless" (rd: GPR) -> Instruction { return Instruction{mnemonic = .C_JR, operand_count = 1, length = 2, ops = {op_gpr(rd), {}, {}, {}}} } -emit_c_jr_gpr :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: GPR) { append(instructions, inst_c_jr_gpr(rd)) } +emit_c_jr_gpr :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: GPR) { append_elem(instructions, inst_c_jr_gpr(rd)) } inst_c_jalr_gpr :: #force_inline proc "contextless" (rd: GPR) -> Instruction { return Instruction{mnemonic = .C_JALR, operand_count = 1, length = 2, ops = {op_gpr(rd), {}, {}, {}}} } -emit_c_jalr_gpr :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: GPR) { append(instructions, inst_c_jalr_gpr(rd)) } +emit_c_jalr_gpr :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: GPR) { append_elem(instructions, inst_c_jalr_gpr(rd)) } inst_c_mv_gpr_gpr :: #force_inline proc "contextless" (rd: GPR, rs1: GPR) -> Instruction { return Instruction{mnemonic = .C_MV, operand_count = 2, length = 2, ops = {op_gpr(rd), op_gpr(rs1), {}, {}}} } -emit_c_mv_gpr_gpr :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: GPR, rs1: GPR) { append(instructions, inst_c_mv_gpr_gpr(rd, rs1)) } +emit_c_mv_gpr_gpr :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: GPR, rs1: GPR) { append_elem(instructions, inst_c_mv_gpr_gpr(rd, rs1)) } inst_c_add_gpr_gpr :: #force_inline proc "contextless" (rd: GPR, rs1: GPR) -> Instruction { return Instruction{mnemonic = .C_ADD, operand_count = 2, length = 2, ops = {op_gpr(rd), op_gpr(rs1), {}, {}}} } -emit_c_add_gpr_gpr :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: GPR, rs1: GPR) { append(instructions, inst_c_add_gpr_gpr(rd, rs1)) } +emit_c_add_gpr_gpr :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: GPR, rs1: GPR) { append_elem(instructions, inst_c_add_gpr_gpr(rd, rs1)) } +inst_c_flwsp_fpr_mem :: #force_inline proc "contextless" (rd: FPR, mem: Memory) -> Instruction { return Instruction{mnemonic = .C_FLWSP, operand_count = 2, length = 2, ops = {op_fpr(rd), op_mem(mem), {}, {}}} } +emit_c_flwsp_fpr_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: FPR, mem: Memory) { append_elem(instructions, inst_c_flwsp_fpr_mem(rd, mem)) } +inst_c_fswsp_fpr_mem :: #force_inline proc "contextless" (rd: FPR, mem: Memory) -> Instruction { return Instruction{mnemonic = .C_FSWSP, operand_count = 2, length = 2, ops = {op_fpr(rd), op_mem(mem), {}, {}}} } +emit_c_fswsp_fpr_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: FPR, mem: Memory) { append_elem(instructions, inst_c_fswsp_fpr_mem(rd, mem)) } +inst_sh1add_gpr_gpr_gpr :: #force_inline proc "contextless" (rd: GPR, rs1: GPR, rs2: GPR) -> Instruction { return Instruction{mnemonic = .SH1ADD, operand_count = 3, length = 4, ops = {op_gpr(rd), op_gpr(rs1), op_gpr(rs2), {}}} } +emit_sh1add_gpr_gpr_gpr :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: GPR, rs1: GPR, rs2: GPR) { append_elem(instructions, inst_sh1add_gpr_gpr_gpr(rd, rs1, rs2)) } +inst_sh2add_gpr_gpr_gpr :: #force_inline proc "contextless" (rd: GPR, rs1: GPR, rs2: GPR) -> Instruction { return Instruction{mnemonic = .SH2ADD, operand_count = 3, length = 4, ops = {op_gpr(rd), op_gpr(rs1), op_gpr(rs2), {}}} } +emit_sh2add_gpr_gpr_gpr :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: GPR, rs1: GPR, rs2: GPR) { append_elem(instructions, inst_sh2add_gpr_gpr_gpr(rd, rs1, rs2)) } +inst_sh3add_gpr_gpr_gpr :: #force_inline proc "contextless" (rd: GPR, rs1: GPR, rs2: GPR) -> Instruction { return Instruction{mnemonic = .SH3ADD, operand_count = 3, length = 4, ops = {op_gpr(rd), op_gpr(rs1), op_gpr(rs2), {}}} } +emit_sh3add_gpr_gpr_gpr :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: GPR, rs1: GPR, rs2: GPR) { append_elem(instructions, inst_sh3add_gpr_gpr_gpr(rd, rs1, rs2)) } +inst_add_uw_gpr_gpr_gpr :: #force_inline proc "contextless" (rd: GPR, rs1: GPR, rs2: GPR) -> Instruction { return Instruction{mnemonic = .ADD_UW, operand_count = 3, length = 4, ops = {op_gpr(rd), op_gpr(rs1), op_gpr(rs2), {}}} } +emit_add_uw_gpr_gpr_gpr :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: GPR, rs1: GPR, rs2: GPR) { append_elem(instructions, inst_add_uw_gpr_gpr_gpr(rd, rs1, rs2)) } +inst_sh1add_uw_gpr_gpr_gpr :: #force_inline proc "contextless" (rd: GPR, rs1: GPR, rs2: GPR) -> Instruction { return Instruction{mnemonic = .SH1ADD_UW, operand_count = 3, length = 4, ops = {op_gpr(rd), op_gpr(rs1), op_gpr(rs2), {}}} } +emit_sh1add_uw_gpr_gpr_gpr :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: GPR, rs1: GPR, rs2: GPR) { append_elem(instructions, inst_sh1add_uw_gpr_gpr_gpr(rd, rs1, rs2)) } +inst_sh2add_uw_gpr_gpr_gpr :: #force_inline proc "contextless" (rd: GPR, rs1: GPR, rs2: GPR) -> Instruction { return Instruction{mnemonic = .SH2ADD_UW, operand_count = 3, length = 4, ops = {op_gpr(rd), op_gpr(rs1), op_gpr(rs2), {}}} } +emit_sh2add_uw_gpr_gpr_gpr :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: GPR, rs1: GPR, rs2: GPR) { append_elem(instructions, inst_sh2add_uw_gpr_gpr_gpr(rd, rs1, rs2)) } +inst_sh3add_uw_gpr_gpr_gpr :: #force_inline proc "contextless" (rd: GPR, rs1: GPR, rs2: GPR) -> Instruction { return Instruction{mnemonic = .SH3ADD_UW, operand_count = 3, length = 4, ops = {op_gpr(rd), op_gpr(rs1), op_gpr(rs2), {}}} } +emit_sh3add_uw_gpr_gpr_gpr :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: GPR, rs1: GPR, rs2: GPR) { append_elem(instructions, inst_sh3add_uw_gpr_gpr_gpr(rd, rs1, rs2)) } +inst_slli_uw_gpr_gpr_imm6 :: #force_inline proc "contextless" (rd: GPR, rs1: GPR, imm: i64) -> Instruction { return Instruction{mnemonic = .SLLI_UW, operand_count = 3, length = 4, ops = {op_gpr(rd), op_gpr(rs1), op_imm(imm, 1), {}}} } +emit_slli_uw_gpr_gpr_imm6 :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: GPR, rs1: GPR, imm: i64) { append_elem(instructions, inst_slli_uw_gpr_gpr_imm6(rd, rs1, imm)) } +inst_andn_gpr_gpr_gpr :: #force_inline proc "contextless" (rd: GPR, rs1: GPR, rs2: GPR) -> Instruction { return Instruction{mnemonic = .ANDN, operand_count = 3, length = 4, ops = {op_gpr(rd), op_gpr(rs1), op_gpr(rs2), {}}} } +emit_andn_gpr_gpr_gpr :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: GPR, rs1: GPR, rs2: GPR) { append_elem(instructions, inst_andn_gpr_gpr_gpr(rd, rs1, rs2)) } +inst_orn_gpr_gpr_gpr :: #force_inline proc "contextless" (rd: GPR, rs1: GPR, rs2: GPR) -> Instruction { return Instruction{mnemonic = .ORN, operand_count = 3, length = 4, ops = {op_gpr(rd), op_gpr(rs1), op_gpr(rs2), {}}} } +emit_orn_gpr_gpr_gpr :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: GPR, rs1: GPR, rs2: GPR) { append_elem(instructions, inst_orn_gpr_gpr_gpr(rd, rs1, rs2)) } +inst_xnor_gpr_gpr_gpr :: #force_inline proc "contextless" (rd: GPR, rs1: GPR, rs2: GPR) -> Instruction { return Instruction{mnemonic = .XNOR, operand_count = 3, length = 4, ops = {op_gpr(rd), op_gpr(rs1), op_gpr(rs2), {}}} } +emit_xnor_gpr_gpr_gpr :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: GPR, rs1: GPR, rs2: GPR) { append_elem(instructions, inst_xnor_gpr_gpr_gpr(rd, rs1, rs2)) } +inst_clz_gpr_gpr :: #force_inline proc "contextless" (rd: GPR, rs1: GPR) -> Instruction { return Instruction{mnemonic = .CLZ, operand_count = 2, length = 4, ops = {op_gpr(rd), op_gpr(rs1), {}, {}}} } +emit_clz_gpr_gpr :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: GPR, rs1: GPR) { append_elem(instructions, inst_clz_gpr_gpr(rd, rs1)) } +inst_ctz_gpr_gpr :: #force_inline proc "contextless" (rd: GPR, rs1: GPR) -> Instruction { return Instruction{mnemonic = .CTZ, operand_count = 2, length = 4, ops = {op_gpr(rd), op_gpr(rs1), {}, {}}} } +emit_ctz_gpr_gpr :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: GPR, rs1: GPR) { append_elem(instructions, inst_ctz_gpr_gpr(rd, rs1)) } +inst_cpop_gpr_gpr :: #force_inline proc "contextless" (rd: GPR, rs1: GPR) -> Instruction { return Instruction{mnemonic = .CPOP, operand_count = 2, length = 4, ops = {op_gpr(rd), op_gpr(rs1), {}, {}}} } +emit_cpop_gpr_gpr :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: GPR, rs1: GPR) { append_elem(instructions, inst_cpop_gpr_gpr(rd, rs1)) } +inst_sext_b_gpr_gpr :: #force_inline proc "contextless" (rd: GPR, rs1: GPR) -> Instruction { return Instruction{mnemonic = .SEXT_B, operand_count = 2, length = 4, ops = {op_gpr(rd), op_gpr(rs1), {}, {}}} } +emit_sext_b_gpr_gpr :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: GPR, rs1: GPR) { append_elem(instructions, inst_sext_b_gpr_gpr(rd, rs1)) } +inst_sext_h_gpr_gpr :: #force_inline proc "contextless" (rd: GPR, rs1: GPR) -> Instruction { return Instruction{mnemonic = .SEXT_H, operand_count = 2, length = 4, ops = {op_gpr(rd), op_gpr(rs1), {}, {}}} } +emit_sext_h_gpr_gpr :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: GPR, rs1: GPR) { append_elem(instructions, inst_sext_h_gpr_gpr(rd, rs1)) } +inst_zext_h_gpr_gpr :: #force_inline proc "contextless" (rd: GPR, rs1: GPR) -> Instruction { return Instruction{mnemonic = .ZEXT_H, operand_count = 2, length = 4, ops = {op_gpr(rd), op_gpr(rs1), {}, {}}} } +emit_zext_h_gpr_gpr :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: GPR, rs1: GPR) { append_elem(instructions, inst_zext_h_gpr_gpr(rd, rs1)) } +inst_min_gpr_gpr_gpr :: #force_inline proc "contextless" (rd: GPR, rs1: GPR, rs2: GPR) -> Instruction { return Instruction{mnemonic = .MIN, operand_count = 3, length = 4, ops = {op_gpr(rd), op_gpr(rs1), op_gpr(rs2), {}}} } +emit_min_gpr_gpr_gpr :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: GPR, rs1: GPR, rs2: GPR) { append_elem(instructions, inst_min_gpr_gpr_gpr(rd, rs1, rs2)) } +inst_minu_gpr_gpr_gpr :: #force_inline proc "contextless" (rd: GPR, rs1: GPR, rs2: GPR) -> Instruction { return Instruction{mnemonic = .MINU, operand_count = 3, length = 4, ops = {op_gpr(rd), op_gpr(rs1), op_gpr(rs2), {}}} } +emit_minu_gpr_gpr_gpr :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: GPR, rs1: GPR, rs2: GPR) { append_elem(instructions, inst_minu_gpr_gpr_gpr(rd, rs1, rs2)) } +inst_max_gpr_gpr_gpr :: #force_inline proc "contextless" (rd: GPR, rs1: GPR, rs2: GPR) -> Instruction { return Instruction{mnemonic = .MAX, operand_count = 3, length = 4, ops = {op_gpr(rd), op_gpr(rs1), op_gpr(rs2), {}}} } +emit_max_gpr_gpr_gpr :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: GPR, rs1: GPR, rs2: GPR) { append_elem(instructions, inst_max_gpr_gpr_gpr(rd, rs1, rs2)) } +inst_maxu_gpr_gpr_gpr :: #force_inline proc "contextless" (rd: GPR, rs1: GPR, rs2: GPR) -> Instruction { return Instruction{mnemonic = .MAXU, operand_count = 3, length = 4, ops = {op_gpr(rd), op_gpr(rs1), op_gpr(rs2), {}}} } +emit_maxu_gpr_gpr_gpr :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: GPR, rs1: GPR, rs2: GPR) { append_elem(instructions, inst_maxu_gpr_gpr_gpr(rd, rs1, rs2)) } +inst_rol_gpr_gpr_gpr :: #force_inline proc "contextless" (rd: GPR, rs1: GPR, rs2: GPR) -> Instruction { return Instruction{mnemonic = .ROL, operand_count = 3, length = 4, ops = {op_gpr(rd), op_gpr(rs1), op_gpr(rs2), {}}} } +emit_rol_gpr_gpr_gpr :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: GPR, rs1: GPR, rs2: GPR) { append_elem(instructions, inst_rol_gpr_gpr_gpr(rd, rs1, rs2)) } +inst_ror_gpr_gpr_gpr :: #force_inline proc "contextless" (rd: GPR, rs1: GPR, rs2: GPR) -> Instruction { return Instruction{mnemonic = .ROR, operand_count = 3, length = 4, ops = {op_gpr(rd), op_gpr(rs1), op_gpr(rs2), {}}} } +emit_ror_gpr_gpr_gpr :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: GPR, rs1: GPR, rs2: GPR) { append_elem(instructions, inst_ror_gpr_gpr_gpr(rd, rs1, rs2)) } +inst_rori_gpr_gpr_imm6 :: #force_inline proc "contextless" (rd: GPR, rs1: GPR, imm: i64) -> Instruction { return Instruction{mnemonic = .RORI, operand_count = 3, length = 4, ops = {op_gpr(rd), op_gpr(rs1), op_imm(imm, 1), {}}} } +emit_rori_gpr_gpr_imm6 :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: GPR, rs1: GPR, imm: i64) { append_elem(instructions, inst_rori_gpr_gpr_imm6(rd, rs1, imm)) } +inst_orc_b_gpr_gpr :: #force_inline proc "contextless" (rd: GPR, rs1: GPR) -> Instruction { return Instruction{mnemonic = .ORC_B, operand_count = 2, length = 4, ops = {op_gpr(rd), op_gpr(rs1), {}, {}}} } +emit_orc_b_gpr_gpr :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: GPR, rs1: GPR) { append_elem(instructions, inst_orc_b_gpr_gpr(rd, rs1)) } +inst_rev8_gpr_gpr :: #force_inline proc "contextless" (rd: GPR, rs1: GPR) -> Instruction { return Instruction{mnemonic = .REV8, operand_count = 2, length = 4, ops = {op_gpr(rd), op_gpr(rs1), {}, {}}} } +emit_rev8_gpr_gpr :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: GPR, rs1: GPR) { append_elem(instructions, inst_rev8_gpr_gpr(rd, rs1)) } +inst_clzw_gpr_gpr :: #force_inline proc "contextless" (rd: GPR, rs1: GPR) -> Instruction { return Instruction{mnemonic = .CLZW, operand_count = 2, length = 4, ops = {op_gpr(rd), op_gpr(rs1), {}, {}}} } +emit_clzw_gpr_gpr :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: GPR, rs1: GPR) { append_elem(instructions, inst_clzw_gpr_gpr(rd, rs1)) } +inst_ctzw_gpr_gpr :: #force_inline proc "contextless" (rd: GPR, rs1: GPR) -> Instruction { return Instruction{mnemonic = .CTZW, operand_count = 2, length = 4, ops = {op_gpr(rd), op_gpr(rs1), {}, {}}} } +emit_ctzw_gpr_gpr :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: GPR, rs1: GPR) { append_elem(instructions, inst_ctzw_gpr_gpr(rd, rs1)) } +inst_cpopw_gpr_gpr :: #force_inline proc "contextless" (rd: GPR, rs1: GPR) -> Instruction { return Instruction{mnemonic = .CPOPW, operand_count = 2, length = 4, ops = {op_gpr(rd), op_gpr(rs1), {}, {}}} } +emit_cpopw_gpr_gpr :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: GPR, rs1: GPR) { append_elem(instructions, inst_cpopw_gpr_gpr(rd, rs1)) } +inst_rolw_gpr_gpr_gpr :: #force_inline proc "contextless" (rd: GPR, rs1: GPR, rs2: GPR) -> Instruction { return Instruction{mnemonic = .ROLW, operand_count = 3, length = 4, ops = {op_gpr(rd), op_gpr(rs1), op_gpr(rs2), {}}} } +emit_rolw_gpr_gpr_gpr :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: GPR, rs1: GPR, rs2: GPR) { append_elem(instructions, inst_rolw_gpr_gpr_gpr(rd, rs1, rs2)) } +inst_rorw_gpr_gpr_gpr :: #force_inline proc "contextless" (rd: GPR, rs1: GPR, rs2: GPR) -> Instruction { return Instruction{mnemonic = .RORW, operand_count = 3, length = 4, ops = {op_gpr(rd), op_gpr(rs1), op_gpr(rs2), {}}} } +emit_rorw_gpr_gpr_gpr :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: GPR, rs1: GPR, rs2: GPR) { append_elem(instructions, inst_rorw_gpr_gpr_gpr(rd, rs1, rs2)) } +inst_roriw_gpr_gpr_imm5 :: #force_inline proc "contextless" (rd: GPR, rs1: GPR, imm: i64) -> Instruction { return Instruction{mnemonic = .RORIW, operand_count = 3, length = 4, ops = {op_gpr(rd), op_gpr(rs1), op_imm(imm, 1), {}}} } +emit_roriw_gpr_gpr_imm5 :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: GPR, rs1: GPR, imm: i64) { append_elem(instructions, inst_roriw_gpr_gpr_imm5(rd, rs1, imm)) } +inst_clmul_gpr_gpr_gpr :: #force_inline proc "contextless" (rd: GPR, rs1: GPR, rs2: GPR) -> Instruction { return Instruction{mnemonic = .CLMUL, operand_count = 3, length = 4, ops = {op_gpr(rd), op_gpr(rs1), op_gpr(rs2), {}}} } +emit_clmul_gpr_gpr_gpr :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: GPR, rs1: GPR, rs2: GPR) { append_elem(instructions, inst_clmul_gpr_gpr_gpr(rd, rs1, rs2)) } +inst_clmulh_gpr_gpr_gpr :: #force_inline proc "contextless" (rd: GPR, rs1: GPR, rs2: GPR) -> Instruction { return Instruction{mnemonic = .CLMULH, operand_count = 3, length = 4, ops = {op_gpr(rd), op_gpr(rs1), op_gpr(rs2), {}}} } +emit_clmulh_gpr_gpr_gpr :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: GPR, rs1: GPR, rs2: GPR) { append_elem(instructions, inst_clmulh_gpr_gpr_gpr(rd, rs1, rs2)) } +inst_clmulr_gpr_gpr_gpr :: #force_inline proc "contextless" (rd: GPR, rs1: GPR, rs2: GPR) -> Instruction { return Instruction{mnemonic = .CLMULR, operand_count = 3, length = 4, ops = {op_gpr(rd), op_gpr(rs1), op_gpr(rs2), {}}} } +emit_clmulr_gpr_gpr_gpr :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: GPR, rs1: GPR, rs2: GPR) { append_elem(instructions, inst_clmulr_gpr_gpr_gpr(rd, rs1, rs2)) } +inst_bclr_gpr_gpr_gpr :: #force_inline proc "contextless" (rd: GPR, rs1: GPR, rs2: GPR) -> Instruction { return Instruction{mnemonic = .BCLR, operand_count = 3, length = 4, ops = {op_gpr(rd), op_gpr(rs1), op_gpr(rs2), {}}} } +emit_bclr_gpr_gpr_gpr :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: GPR, rs1: GPR, rs2: GPR) { append_elem(instructions, inst_bclr_gpr_gpr_gpr(rd, rs1, rs2)) } +inst_bclri_gpr_gpr_imm6 :: #force_inline proc "contextless" (rd: GPR, rs1: GPR, imm: i64) -> Instruction { return Instruction{mnemonic = .BCLRI, operand_count = 3, length = 4, ops = {op_gpr(rd), op_gpr(rs1), op_imm(imm, 1), {}}} } +emit_bclri_gpr_gpr_imm6 :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: GPR, rs1: GPR, imm: i64) { append_elem(instructions, inst_bclri_gpr_gpr_imm6(rd, rs1, imm)) } +inst_bext_gpr_gpr_gpr :: #force_inline proc "contextless" (rd: GPR, rs1: GPR, rs2: GPR) -> Instruction { return Instruction{mnemonic = .BEXT, operand_count = 3, length = 4, ops = {op_gpr(rd), op_gpr(rs1), op_gpr(rs2), {}}} } +emit_bext_gpr_gpr_gpr :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: GPR, rs1: GPR, rs2: GPR) { append_elem(instructions, inst_bext_gpr_gpr_gpr(rd, rs1, rs2)) } +inst_bexti_gpr_gpr_imm6 :: #force_inline proc "contextless" (rd: GPR, rs1: GPR, imm: i64) -> Instruction { return Instruction{mnemonic = .BEXTI, operand_count = 3, length = 4, ops = {op_gpr(rd), op_gpr(rs1), op_imm(imm, 1), {}}} } +emit_bexti_gpr_gpr_imm6 :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: GPR, rs1: GPR, imm: i64) { append_elem(instructions, inst_bexti_gpr_gpr_imm6(rd, rs1, imm)) } +inst_binv_gpr_gpr_gpr :: #force_inline proc "contextless" (rd: GPR, rs1: GPR, rs2: GPR) -> Instruction { return Instruction{mnemonic = .BINV, operand_count = 3, length = 4, ops = {op_gpr(rd), op_gpr(rs1), op_gpr(rs2), {}}} } +emit_binv_gpr_gpr_gpr :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: GPR, rs1: GPR, rs2: GPR) { append_elem(instructions, inst_binv_gpr_gpr_gpr(rd, rs1, rs2)) } +inst_binvi_gpr_gpr_imm6 :: #force_inline proc "contextless" (rd: GPR, rs1: GPR, imm: i64) -> Instruction { return Instruction{mnemonic = .BINVI, operand_count = 3, length = 4, ops = {op_gpr(rd), op_gpr(rs1), op_imm(imm, 1), {}}} } +emit_binvi_gpr_gpr_imm6 :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: GPR, rs1: GPR, imm: i64) { append_elem(instructions, inst_binvi_gpr_gpr_imm6(rd, rs1, imm)) } +inst_bset_gpr_gpr_gpr :: #force_inline proc "contextless" (rd: GPR, rs1: GPR, rs2: GPR) -> Instruction { return Instruction{mnemonic = .BSET, operand_count = 3, length = 4, ops = {op_gpr(rd), op_gpr(rs1), op_gpr(rs2), {}}} } +emit_bset_gpr_gpr_gpr :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: GPR, rs1: GPR, rs2: GPR) { append_elem(instructions, inst_bset_gpr_gpr_gpr(rd, rs1, rs2)) } +inst_bseti_gpr_gpr_imm6 :: #force_inline proc "contextless" (rd: GPR, rs1: GPR, imm: i64) -> Instruction { return Instruction{mnemonic = .BSETI, operand_count = 3, length = 4, ops = {op_gpr(rd), op_gpr(rs1), op_imm(imm, 1), {}}} } +emit_bseti_gpr_gpr_imm6 :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: GPR, rs1: GPR, imm: i64) { append_elem(instructions, inst_bseti_gpr_gpr_imm6(rd, rs1, imm)) } +inst_czero_eqz_gpr_gpr_gpr :: #force_inline proc "contextless" (rd: GPR, rs1: GPR, rs2: GPR) -> Instruction { return Instruction{mnemonic = .CZERO_EQZ, operand_count = 3, length = 4, ops = {op_gpr(rd), op_gpr(rs1), op_gpr(rs2), {}}} } +emit_czero_eqz_gpr_gpr_gpr :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: GPR, rs1: GPR, rs2: GPR) { append_elem(instructions, inst_czero_eqz_gpr_gpr_gpr(rd, rs1, rs2)) } +inst_czero_nez_gpr_gpr_gpr :: #force_inline proc "contextless" (rd: GPR, rs1: GPR, rs2: GPR) -> Instruction { return Instruction{mnemonic = .CZERO_NEZ, operand_count = 3, length = 4, ops = {op_gpr(rd), op_gpr(rs1), op_gpr(rs2), {}}} } +emit_czero_nez_gpr_gpr_gpr :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: GPR, rs1: GPR, rs2: GPR) { append_elem(instructions, inst_czero_nez_gpr_gpr_gpr(rd, rs1, rs2)) } +inst_flh_fpr_mem :: #force_inline proc "contextless" (rd: FPR, mem: Memory) -> Instruction { return Instruction{mnemonic = .FLH, operand_count = 2, length = 4, ops = {op_fpr(rd), op_mem(mem), {}, {}}} } +emit_flh_fpr_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: FPR, mem: Memory) { append_elem(instructions, inst_flh_fpr_mem(rd, mem)) } +inst_fsh_fpr_mem :: #force_inline proc "contextless" (rd: FPR, mem: Memory) -> Instruction { return Instruction{mnemonic = .FSH, operand_count = 2, length = 4, ops = {op_fpr(rd), op_mem(mem), {}, {}}} } +emit_fsh_fpr_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: FPR, mem: Memory) { append_elem(instructions, inst_fsh_fpr_mem(rd, mem)) } +inst_fmadd_h_fpr_fpr_fpr_fpr :: #force_inline proc "contextless" (rd: FPR, rs1: FPR, rs2: FPR, rs3: FPR) -> Instruction { return Instruction{mnemonic = .FMADD_H, operand_count = 4, length = 4, ops = {op_fpr(rd), op_fpr(rs1), op_fpr(rs2), op_fpr(rs3)}} } +emit_fmadd_h_fpr_fpr_fpr_fpr :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: FPR, rs1: FPR, rs2: FPR, rs3: FPR) { append_elem(instructions, inst_fmadd_h_fpr_fpr_fpr_fpr(rd, rs1, rs2, rs3)) } +inst_fmsub_h_fpr_fpr_fpr_fpr :: #force_inline proc "contextless" (rd: FPR, rs1: FPR, rs2: FPR, rs3: FPR) -> Instruction { return Instruction{mnemonic = .FMSUB_H, operand_count = 4, length = 4, ops = {op_fpr(rd), op_fpr(rs1), op_fpr(rs2), op_fpr(rs3)}} } +emit_fmsub_h_fpr_fpr_fpr_fpr :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: FPR, rs1: FPR, rs2: FPR, rs3: FPR) { append_elem(instructions, inst_fmsub_h_fpr_fpr_fpr_fpr(rd, rs1, rs2, rs3)) } +inst_fnmsub_h_fpr_fpr_fpr_fpr :: #force_inline proc "contextless" (rd: FPR, rs1: FPR, rs2: FPR, rs3: FPR) -> Instruction { return Instruction{mnemonic = .FNMSUB_H, operand_count = 4, length = 4, ops = {op_fpr(rd), op_fpr(rs1), op_fpr(rs2), op_fpr(rs3)}} } +emit_fnmsub_h_fpr_fpr_fpr_fpr :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: FPR, rs1: FPR, rs2: FPR, rs3: FPR) { append_elem(instructions, inst_fnmsub_h_fpr_fpr_fpr_fpr(rd, rs1, rs2, rs3)) } +inst_fnmadd_h_fpr_fpr_fpr_fpr :: #force_inline proc "contextless" (rd: FPR, rs1: FPR, rs2: FPR, rs3: FPR) -> Instruction { return Instruction{mnemonic = .FNMADD_H, operand_count = 4, length = 4, ops = {op_fpr(rd), op_fpr(rs1), op_fpr(rs2), op_fpr(rs3)}} } +emit_fnmadd_h_fpr_fpr_fpr_fpr :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: FPR, rs1: FPR, rs2: FPR, rs3: FPR) { append_elem(instructions, inst_fnmadd_h_fpr_fpr_fpr_fpr(rd, rs1, rs2, rs3)) } +inst_fadd_h_fpr_fpr_fpr :: #force_inline proc "contextless" (rd: FPR, rs1: FPR, rs2: FPR) -> Instruction { return Instruction{mnemonic = .FADD_H, operand_count = 3, length = 4, ops = {op_fpr(rd), op_fpr(rs1), op_fpr(rs2), {}}} } +emit_fadd_h_fpr_fpr_fpr :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: FPR, rs1: FPR, rs2: FPR) { append_elem(instructions, inst_fadd_h_fpr_fpr_fpr(rd, rs1, rs2)) } +inst_fsub_h_fpr_fpr_fpr :: #force_inline proc "contextless" (rd: FPR, rs1: FPR, rs2: FPR) -> Instruction { return Instruction{mnemonic = .FSUB_H, operand_count = 3, length = 4, ops = {op_fpr(rd), op_fpr(rs1), op_fpr(rs2), {}}} } +emit_fsub_h_fpr_fpr_fpr :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: FPR, rs1: FPR, rs2: FPR) { append_elem(instructions, inst_fsub_h_fpr_fpr_fpr(rd, rs1, rs2)) } +inst_fmul_h_fpr_fpr_fpr :: #force_inline proc "contextless" (rd: FPR, rs1: FPR, rs2: FPR) -> Instruction { return Instruction{mnemonic = .FMUL_H, operand_count = 3, length = 4, ops = {op_fpr(rd), op_fpr(rs1), op_fpr(rs2), {}}} } +emit_fmul_h_fpr_fpr_fpr :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: FPR, rs1: FPR, rs2: FPR) { append_elem(instructions, inst_fmul_h_fpr_fpr_fpr(rd, rs1, rs2)) } +inst_fdiv_h_fpr_fpr_fpr :: #force_inline proc "contextless" (rd: FPR, rs1: FPR, rs2: FPR) -> Instruction { return Instruction{mnemonic = .FDIV_H, operand_count = 3, length = 4, ops = {op_fpr(rd), op_fpr(rs1), op_fpr(rs2), {}}} } +emit_fdiv_h_fpr_fpr_fpr :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: FPR, rs1: FPR, rs2: FPR) { append_elem(instructions, inst_fdiv_h_fpr_fpr_fpr(rd, rs1, rs2)) } +inst_fsqrt_h_fpr_fpr :: #force_inline proc "contextless" (rd: FPR, rs1: FPR) -> Instruction { return Instruction{mnemonic = .FSQRT_H, operand_count = 2, length = 4, ops = {op_fpr(rd), op_fpr(rs1), {}, {}}} } +emit_fsqrt_h_fpr_fpr :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: FPR, rs1: FPR) { append_elem(instructions, inst_fsqrt_h_fpr_fpr(rd, rs1)) } +inst_fsgnj_h_fpr_fpr_fpr :: #force_inline proc "contextless" (rd: FPR, rs1: FPR, rs2: FPR) -> Instruction { return Instruction{mnemonic = .FSGNJ_H, operand_count = 3, length = 4, ops = {op_fpr(rd), op_fpr(rs1), op_fpr(rs2), {}}} } +emit_fsgnj_h_fpr_fpr_fpr :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: FPR, rs1: FPR, rs2: FPR) { append_elem(instructions, inst_fsgnj_h_fpr_fpr_fpr(rd, rs1, rs2)) } +inst_fsgnjn_h_fpr_fpr_fpr :: #force_inline proc "contextless" (rd: FPR, rs1: FPR, rs2: FPR) -> Instruction { return Instruction{mnemonic = .FSGNJN_H, operand_count = 3, length = 4, ops = {op_fpr(rd), op_fpr(rs1), op_fpr(rs2), {}}} } +emit_fsgnjn_h_fpr_fpr_fpr :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: FPR, rs1: FPR, rs2: FPR) { append_elem(instructions, inst_fsgnjn_h_fpr_fpr_fpr(rd, rs1, rs2)) } +inst_fsgnjx_h_fpr_fpr_fpr :: #force_inline proc "contextless" (rd: FPR, rs1: FPR, rs2: FPR) -> Instruction { return Instruction{mnemonic = .FSGNJX_H, operand_count = 3, length = 4, ops = {op_fpr(rd), op_fpr(rs1), op_fpr(rs2), {}}} } +emit_fsgnjx_h_fpr_fpr_fpr :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: FPR, rs1: FPR, rs2: FPR) { append_elem(instructions, inst_fsgnjx_h_fpr_fpr_fpr(rd, rs1, rs2)) } +inst_fmin_h_fpr_fpr_fpr :: #force_inline proc "contextless" (rd: FPR, rs1: FPR, rs2: FPR) -> Instruction { return Instruction{mnemonic = .FMIN_H, operand_count = 3, length = 4, ops = {op_fpr(rd), op_fpr(rs1), op_fpr(rs2), {}}} } +emit_fmin_h_fpr_fpr_fpr :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: FPR, rs1: FPR, rs2: FPR) { append_elem(instructions, inst_fmin_h_fpr_fpr_fpr(rd, rs1, rs2)) } +inst_fmax_h_fpr_fpr_fpr :: #force_inline proc "contextless" (rd: FPR, rs1: FPR, rs2: FPR) -> Instruction { return Instruction{mnemonic = .FMAX_H, operand_count = 3, length = 4, ops = {op_fpr(rd), op_fpr(rs1), op_fpr(rs2), {}}} } +emit_fmax_h_fpr_fpr_fpr :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: FPR, rs1: FPR, rs2: FPR) { append_elem(instructions, inst_fmax_h_fpr_fpr_fpr(rd, rs1, rs2)) } +inst_fcvt_w_h_gpr_fpr :: #force_inline proc "contextless" (rd: GPR, rs1: FPR) -> Instruction { return Instruction{mnemonic = .FCVT_W_H, operand_count = 2, length = 4, ops = {op_gpr(rd), op_fpr(rs1), {}, {}}} } +emit_fcvt_w_h_gpr_fpr :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: GPR, rs1: FPR) { append_elem(instructions, inst_fcvt_w_h_gpr_fpr(rd, rs1)) } +inst_fcvt_wu_h_gpr_fpr :: #force_inline proc "contextless" (rd: GPR, rs1: FPR) -> Instruction { return Instruction{mnemonic = .FCVT_WU_H, operand_count = 2, length = 4, ops = {op_gpr(rd), op_fpr(rs1), {}, {}}} } +emit_fcvt_wu_h_gpr_fpr :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: GPR, rs1: FPR) { append_elem(instructions, inst_fcvt_wu_h_gpr_fpr(rd, rs1)) } +inst_fcvt_l_h_gpr_fpr :: #force_inline proc "contextless" (rd: GPR, rs1: FPR) -> Instruction { return Instruction{mnemonic = .FCVT_L_H, operand_count = 2, length = 4, ops = {op_gpr(rd), op_fpr(rs1), {}, {}}} } +emit_fcvt_l_h_gpr_fpr :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: GPR, rs1: FPR) { append_elem(instructions, inst_fcvt_l_h_gpr_fpr(rd, rs1)) } +inst_fcvt_lu_h_gpr_fpr :: #force_inline proc "contextless" (rd: GPR, rs1: FPR) -> Instruction { return Instruction{mnemonic = .FCVT_LU_H, operand_count = 2, length = 4, ops = {op_gpr(rd), op_fpr(rs1), {}, {}}} } +emit_fcvt_lu_h_gpr_fpr :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: GPR, rs1: FPR) { append_elem(instructions, inst_fcvt_lu_h_gpr_fpr(rd, rs1)) } +inst_fcvt_h_w_fpr_gpr :: #force_inline proc "contextless" (rd: FPR, rs1: GPR) -> Instruction { return Instruction{mnemonic = .FCVT_H_W, operand_count = 2, length = 4, ops = {op_fpr(rd), op_gpr(rs1), {}, {}}} } +emit_fcvt_h_w_fpr_gpr :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: FPR, rs1: GPR) { append_elem(instructions, inst_fcvt_h_w_fpr_gpr(rd, rs1)) } +inst_fcvt_h_wu_fpr_gpr :: #force_inline proc "contextless" (rd: FPR, rs1: GPR) -> Instruction { return Instruction{mnemonic = .FCVT_H_WU, operand_count = 2, length = 4, ops = {op_fpr(rd), op_gpr(rs1), {}, {}}} } +emit_fcvt_h_wu_fpr_gpr :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: FPR, rs1: GPR) { append_elem(instructions, inst_fcvt_h_wu_fpr_gpr(rd, rs1)) } +inst_fcvt_h_l_fpr_gpr :: #force_inline proc "contextless" (rd: FPR, rs1: GPR) -> Instruction { return Instruction{mnemonic = .FCVT_H_L, operand_count = 2, length = 4, ops = {op_fpr(rd), op_gpr(rs1), {}, {}}} } +emit_fcvt_h_l_fpr_gpr :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: FPR, rs1: GPR) { append_elem(instructions, inst_fcvt_h_l_fpr_gpr(rd, rs1)) } +inst_fcvt_h_lu_fpr_gpr :: #force_inline proc "contextless" (rd: FPR, rs1: GPR) -> Instruction { return Instruction{mnemonic = .FCVT_H_LU, operand_count = 2, length = 4, ops = {op_fpr(rd), op_gpr(rs1), {}, {}}} } +emit_fcvt_h_lu_fpr_gpr :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: FPR, rs1: GPR) { append_elem(instructions, inst_fcvt_h_lu_fpr_gpr(rd, rs1)) } +inst_fcvt_s_h_fpr_fpr :: #force_inline proc "contextless" (rd: FPR, rs1: FPR) -> Instruction { return Instruction{mnemonic = .FCVT_S_H, operand_count = 2, length = 4, ops = {op_fpr(rd), op_fpr(rs1), {}, {}}} } +emit_fcvt_s_h_fpr_fpr :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: FPR, rs1: FPR) { append_elem(instructions, inst_fcvt_s_h_fpr_fpr(rd, rs1)) } +inst_fcvt_h_s_fpr_fpr :: #force_inline proc "contextless" (rd: FPR, rs1: FPR) -> Instruction { return Instruction{mnemonic = .FCVT_H_S, operand_count = 2, length = 4, ops = {op_fpr(rd), op_fpr(rs1), {}, {}}} } +emit_fcvt_h_s_fpr_fpr :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: FPR, rs1: FPR) { append_elem(instructions, inst_fcvt_h_s_fpr_fpr(rd, rs1)) } +inst_fcvt_d_h_fpr_fpr :: #force_inline proc "contextless" (rd: FPR, rs1: FPR) -> Instruction { return Instruction{mnemonic = .FCVT_D_H, operand_count = 2, length = 4, ops = {op_fpr(rd), op_fpr(rs1), {}, {}}} } +emit_fcvt_d_h_fpr_fpr :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: FPR, rs1: FPR) { append_elem(instructions, inst_fcvt_d_h_fpr_fpr(rd, rs1)) } +inst_fcvt_h_d_fpr_fpr :: #force_inline proc "contextless" (rd: FPR, rs1: FPR) -> Instruction { return Instruction{mnemonic = .FCVT_H_D, operand_count = 2, length = 4, ops = {op_fpr(rd), op_fpr(rs1), {}, {}}} } +emit_fcvt_h_d_fpr_fpr :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: FPR, rs1: FPR) { append_elem(instructions, inst_fcvt_h_d_fpr_fpr(rd, rs1)) } +inst_fmv_x_h_gpr_fpr :: #force_inline proc "contextless" (rd: GPR, rs1: FPR) -> Instruction { return Instruction{mnemonic = .FMV_X_H, operand_count = 2, length = 4, ops = {op_gpr(rd), op_fpr(rs1), {}, {}}} } +emit_fmv_x_h_gpr_fpr :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: GPR, rs1: FPR) { append_elem(instructions, inst_fmv_x_h_gpr_fpr(rd, rs1)) } +inst_fmv_h_x_fpr_gpr :: #force_inline proc "contextless" (rd: FPR, rs1: GPR) -> Instruction { return Instruction{mnemonic = .FMV_H_X, operand_count = 2, length = 4, ops = {op_fpr(rd), op_gpr(rs1), {}, {}}} } +emit_fmv_h_x_fpr_gpr :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: FPR, rs1: GPR) { append_elem(instructions, inst_fmv_h_x_fpr_gpr(rd, rs1)) } +inst_fclass_h_gpr_fpr :: #force_inline proc "contextless" (rd: GPR, rs1: FPR) -> Instruction { return Instruction{mnemonic = .FCLASS_H, operand_count = 2, length = 4, ops = {op_gpr(rd), op_fpr(rs1), {}, {}}} } +emit_fclass_h_gpr_fpr :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: GPR, rs1: FPR) { append_elem(instructions, inst_fclass_h_gpr_fpr(rd, rs1)) } +inst_feq_h_gpr_fpr_fpr :: #force_inline proc "contextless" (rd: GPR, rs1: FPR, rs2: FPR) -> Instruction { return Instruction{mnemonic = .FEQ_H, operand_count = 3, length = 4, ops = {op_gpr(rd), op_fpr(rs1), op_fpr(rs2), {}}} } +emit_feq_h_gpr_fpr_fpr :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: GPR, rs1: FPR, rs2: FPR) { append_elem(instructions, inst_feq_h_gpr_fpr_fpr(rd, rs1, rs2)) } +inst_flt_h_gpr_fpr_fpr :: #force_inline proc "contextless" (rd: GPR, rs1: FPR, rs2: FPR) -> Instruction { return Instruction{mnemonic = .FLT_H, operand_count = 3, length = 4, ops = {op_gpr(rd), op_fpr(rs1), op_fpr(rs2), {}}} } +emit_flt_h_gpr_fpr_fpr :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: GPR, rs1: FPR, rs2: FPR) { append_elem(instructions, inst_flt_h_gpr_fpr_fpr(rd, rs1, rs2)) } +inst_fle_h_gpr_fpr_fpr :: #force_inline proc "contextless" (rd: GPR, rs1: FPR, rs2: FPR) -> Instruction { return Instruction{mnemonic = .FLE_H, operand_count = 3, length = 4, ops = {op_gpr(rd), op_fpr(rs1), op_fpr(rs2), {}}} } +emit_fle_h_gpr_fpr_fpr :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: GPR, rs1: FPR, rs2: FPR) { append_elem(instructions, inst_fle_h_gpr_fpr_fpr(rd, rs1, rs2)) } +inst_mret_none :: #force_inline proc "contextless" () -> Instruction { return inst_none(.MRET) } +emit_mret_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_mret_none()) } +inst_sret_none :: #force_inline proc "contextless" () -> Instruction { return inst_none(.SRET) } +emit_sret_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_sret_none()) } +inst_wfi_none :: #force_inline proc "contextless" () -> Instruction { return inst_none(.WFI) } +emit_wfi_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_wfi_none()) } +inst_sfence_vma_gpr_gpr :: #force_inline proc "contextless" (rd: GPR, rs1: GPR) -> Instruction { return Instruction{mnemonic = .SFENCE_VMA, operand_count = 2, length = 4, ops = {op_gpr(rd), op_gpr(rs1), {}, {}}} } +emit_sfence_vma_gpr_gpr :: #force_inline proc(instructions: ^[dynamic]Instruction, rd: GPR, rs1: GPR) { append_elem(instructions, inst_sfence_vma_gpr_gpr(rd, rs1)) } // ============================================================================= // Overload Groups @@ -739,6 +913,10 @@ inst_c_sw :: inst_c_sw_gpr_mem emit_c_sw :: emit_c_sw_gpr_mem inst_c_sd :: inst_c_sd_gpr_mem emit_c_sd :: emit_c_sd_gpr_mem +inst_c_flw :: inst_c_flw_fpr_mem +emit_c_flw :: emit_c_flw_fpr_mem +inst_c_fsw :: inst_c_fsw_fpr_mem +emit_c_fsw :: emit_c_fsw_fpr_mem inst_c_fld :: inst_c_fld_fpr_mem emit_c_fld :: emit_c_fld_fpr_mem inst_c_fsd :: inst_c_fsd_fpr_mem @@ -801,3 +979,173 @@ inst_c_mv :: inst_c_mv_gpr_gpr emit_c_mv :: emit_c_mv_gpr_gpr inst_c_add :: inst_c_add_gpr_gpr emit_c_add :: emit_c_add_gpr_gpr +inst_c_flwsp :: inst_c_flwsp_fpr_mem +emit_c_flwsp :: emit_c_flwsp_fpr_mem +inst_c_fswsp :: inst_c_fswsp_fpr_mem +emit_c_fswsp :: emit_c_fswsp_fpr_mem +inst_sh1add :: inst_sh1add_gpr_gpr_gpr +emit_sh1add :: emit_sh1add_gpr_gpr_gpr +inst_sh2add :: inst_sh2add_gpr_gpr_gpr +emit_sh2add :: emit_sh2add_gpr_gpr_gpr +inst_sh3add :: inst_sh3add_gpr_gpr_gpr +emit_sh3add :: emit_sh3add_gpr_gpr_gpr +inst_add_uw :: inst_add_uw_gpr_gpr_gpr +emit_add_uw :: emit_add_uw_gpr_gpr_gpr +inst_sh1add_uw :: inst_sh1add_uw_gpr_gpr_gpr +emit_sh1add_uw :: emit_sh1add_uw_gpr_gpr_gpr +inst_sh2add_uw :: inst_sh2add_uw_gpr_gpr_gpr +emit_sh2add_uw :: emit_sh2add_uw_gpr_gpr_gpr +inst_sh3add_uw :: inst_sh3add_uw_gpr_gpr_gpr +emit_sh3add_uw :: emit_sh3add_uw_gpr_gpr_gpr +inst_slli_uw :: inst_slli_uw_gpr_gpr_imm6 +emit_slli_uw :: emit_slli_uw_gpr_gpr_imm6 +inst_andn :: inst_andn_gpr_gpr_gpr +emit_andn :: emit_andn_gpr_gpr_gpr +inst_orn :: inst_orn_gpr_gpr_gpr +emit_orn :: emit_orn_gpr_gpr_gpr +inst_xnor :: inst_xnor_gpr_gpr_gpr +emit_xnor :: emit_xnor_gpr_gpr_gpr +inst_clz :: inst_clz_gpr_gpr +emit_clz :: emit_clz_gpr_gpr +inst_ctz :: inst_ctz_gpr_gpr +emit_ctz :: emit_ctz_gpr_gpr +inst_cpop :: inst_cpop_gpr_gpr +emit_cpop :: emit_cpop_gpr_gpr +inst_sext_b :: inst_sext_b_gpr_gpr +emit_sext_b :: emit_sext_b_gpr_gpr +inst_sext_h :: inst_sext_h_gpr_gpr +emit_sext_h :: emit_sext_h_gpr_gpr +inst_zext_h :: inst_zext_h_gpr_gpr +emit_zext_h :: emit_zext_h_gpr_gpr +inst_min :: inst_min_gpr_gpr_gpr +emit_min :: emit_min_gpr_gpr_gpr +inst_minu :: inst_minu_gpr_gpr_gpr +emit_minu :: emit_minu_gpr_gpr_gpr +inst_max :: inst_max_gpr_gpr_gpr +emit_max :: emit_max_gpr_gpr_gpr +inst_maxu :: inst_maxu_gpr_gpr_gpr +emit_maxu :: emit_maxu_gpr_gpr_gpr +inst_rol :: inst_rol_gpr_gpr_gpr +emit_rol :: emit_rol_gpr_gpr_gpr +inst_ror :: inst_ror_gpr_gpr_gpr +emit_ror :: emit_ror_gpr_gpr_gpr +inst_rori :: inst_rori_gpr_gpr_imm6 +emit_rori :: emit_rori_gpr_gpr_imm6 +inst_orc_b :: inst_orc_b_gpr_gpr +emit_orc_b :: emit_orc_b_gpr_gpr +inst_rev8 :: inst_rev8_gpr_gpr +emit_rev8 :: emit_rev8_gpr_gpr +inst_clzw :: inst_clzw_gpr_gpr +emit_clzw :: emit_clzw_gpr_gpr +inst_ctzw :: inst_ctzw_gpr_gpr +emit_ctzw :: emit_ctzw_gpr_gpr +inst_cpopw :: inst_cpopw_gpr_gpr +emit_cpopw :: emit_cpopw_gpr_gpr +inst_rolw :: inst_rolw_gpr_gpr_gpr +emit_rolw :: emit_rolw_gpr_gpr_gpr +inst_rorw :: inst_rorw_gpr_gpr_gpr +emit_rorw :: emit_rorw_gpr_gpr_gpr +inst_roriw :: inst_roriw_gpr_gpr_imm5 +emit_roriw :: emit_roriw_gpr_gpr_imm5 +inst_clmul :: inst_clmul_gpr_gpr_gpr +emit_clmul :: emit_clmul_gpr_gpr_gpr +inst_clmulh :: inst_clmulh_gpr_gpr_gpr +emit_clmulh :: emit_clmulh_gpr_gpr_gpr +inst_clmulr :: inst_clmulr_gpr_gpr_gpr +emit_clmulr :: emit_clmulr_gpr_gpr_gpr +inst_bclr :: inst_bclr_gpr_gpr_gpr +emit_bclr :: emit_bclr_gpr_gpr_gpr +inst_bclri :: inst_bclri_gpr_gpr_imm6 +emit_bclri :: emit_bclri_gpr_gpr_imm6 +inst_bext :: inst_bext_gpr_gpr_gpr +emit_bext :: emit_bext_gpr_gpr_gpr +inst_bexti :: inst_bexti_gpr_gpr_imm6 +emit_bexti :: emit_bexti_gpr_gpr_imm6 +inst_binv :: inst_binv_gpr_gpr_gpr +emit_binv :: emit_binv_gpr_gpr_gpr +inst_binvi :: inst_binvi_gpr_gpr_imm6 +emit_binvi :: emit_binvi_gpr_gpr_imm6 +inst_bset :: inst_bset_gpr_gpr_gpr +emit_bset :: emit_bset_gpr_gpr_gpr +inst_bseti :: inst_bseti_gpr_gpr_imm6 +emit_bseti :: emit_bseti_gpr_gpr_imm6 +inst_czero_eqz :: inst_czero_eqz_gpr_gpr_gpr +emit_czero_eqz :: emit_czero_eqz_gpr_gpr_gpr +inst_czero_nez :: inst_czero_nez_gpr_gpr_gpr +emit_czero_nez :: emit_czero_nez_gpr_gpr_gpr +inst_flh :: inst_flh_fpr_mem +emit_flh :: emit_flh_fpr_mem +inst_fsh :: inst_fsh_fpr_mem +emit_fsh :: emit_fsh_fpr_mem +inst_fmadd_h :: inst_fmadd_h_fpr_fpr_fpr_fpr +emit_fmadd_h :: emit_fmadd_h_fpr_fpr_fpr_fpr +inst_fmsub_h :: inst_fmsub_h_fpr_fpr_fpr_fpr +emit_fmsub_h :: emit_fmsub_h_fpr_fpr_fpr_fpr +inst_fnmsub_h :: inst_fnmsub_h_fpr_fpr_fpr_fpr +emit_fnmsub_h :: emit_fnmsub_h_fpr_fpr_fpr_fpr +inst_fnmadd_h :: inst_fnmadd_h_fpr_fpr_fpr_fpr +emit_fnmadd_h :: emit_fnmadd_h_fpr_fpr_fpr_fpr +inst_fadd_h :: inst_fadd_h_fpr_fpr_fpr +emit_fadd_h :: emit_fadd_h_fpr_fpr_fpr +inst_fsub_h :: inst_fsub_h_fpr_fpr_fpr +emit_fsub_h :: emit_fsub_h_fpr_fpr_fpr +inst_fmul_h :: inst_fmul_h_fpr_fpr_fpr +emit_fmul_h :: emit_fmul_h_fpr_fpr_fpr +inst_fdiv_h :: inst_fdiv_h_fpr_fpr_fpr +emit_fdiv_h :: emit_fdiv_h_fpr_fpr_fpr +inst_fsqrt_h :: inst_fsqrt_h_fpr_fpr +emit_fsqrt_h :: emit_fsqrt_h_fpr_fpr +inst_fsgnj_h :: inst_fsgnj_h_fpr_fpr_fpr +emit_fsgnj_h :: emit_fsgnj_h_fpr_fpr_fpr +inst_fsgnjn_h :: inst_fsgnjn_h_fpr_fpr_fpr +emit_fsgnjn_h :: emit_fsgnjn_h_fpr_fpr_fpr +inst_fsgnjx_h :: inst_fsgnjx_h_fpr_fpr_fpr +emit_fsgnjx_h :: emit_fsgnjx_h_fpr_fpr_fpr +inst_fmin_h :: inst_fmin_h_fpr_fpr_fpr +emit_fmin_h :: emit_fmin_h_fpr_fpr_fpr +inst_fmax_h :: inst_fmax_h_fpr_fpr_fpr +emit_fmax_h :: emit_fmax_h_fpr_fpr_fpr +inst_fcvt_w_h :: inst_fcvt_w_h_gpr_fpr +emit_fcvt_w_h :: emit_fcvt_w_h_gpr_fpr +inst_fcvt_wu_h :: inst_fcvt_wu_h_gpr_fpr +emit_fcvt_wu_h :: emit_fcvt_wu_h_gpr_fpr +inst_fcvt_l_h :: inst_fcvt_l_h_gpr_fpr +emit_fcvt_l_h :: emit_fcvt_l_h_gpr_fpr +inst_fcvt_lu_h :: inst_fcvt_lu_h_gpr_fpr +emit_fcvt_lu_h :: emit_fcvt_lu_h_gpr_fpr +inst_fcvt_h_w :: inst_fcvt_h_w_fpr_gpr +emit_fcvt_h_w :: emit_fcvt_h_w_fpr_gpr +inst_fcvt_h_wu :: inst_fcvt_h_wu_fpr_gpr +emit_fcvt_h_wu :: emit_fcvt_h_wu_fpr_gpr +inst_fcvt_h_l :: inst_fcvt_h_l_fpr_gpr +emit_fcvt_h_l :: emit_fcvt_h_l_fpr_gpr +inst_fcvt_h_lu :: inst_fcvt_h_lu_fpr_gpr +emit_fcvt_h_lu :: emit_fcvt_h_lu_fpr_gpr +inst_fcvt_s_h :: inst_fcvt_s_h_fpr_fpr +emit_fcvt_s_h :: emit_fcvt_s_h_fpr_fpr +inst_fcvt_h_s :: inst_fcvt_h_s_fpr_fpr +emit_fcvt_h_s :: emit_fcvt_h_s_fpr_fpr +inst_fcvt_d_h :: inst_fcvt_d_h_fpr_fpr +emit_fcvt_d_h :: emit_fcvt_d_h_fpr_fpr +inst_fcvt_h_d :: inst_fcvt_h_d_fpr_fpr +emit_fcvt_h_d :: emit_fcvt_h_d_fpr_fpr +inst_fmv_x_h :: inst_fmv_x_h_gpr_fpr +emit_fmv_x_h :: emit_fmv_x_h_gpr_fpr +inst_fmv_h_x :: inst_fmv_h_x_fpr_gpr +emit_fmv_h_x :: emit_fmv_h_x_fpr_gpr +inst_fclass_h :: inst_fclass_h_gpr_fpr +emit_fclass_h :: emit_fclass_h_gpr_fpr +inst_feq_h :: inst_feq_h_gpr_fpr_fpr +emit_feq_h :: emit_feq_h_gpr_fpr_fpr +inst_flt_h :: inst_flt_h_gpr_fpr_fpr +emit_flt_h :: emit_flt_h_gpr_fpr_fpr +inst_fle_h :: inst_fle_h_gpr_fpr_fpr +emit_fle_h :: emit_fle_h_gpr_fpr_fpr +inst_mret :: inst_mret_none +emit_mret :: emit_mret_none +inst_sret :: inst_sret_none +emit_sret :: emit_sret_none +inst_wfi :: inst_wfi_none +emit_wfi :: emit_wfi_none +inst_sfence_vma :: inst_sfence_vma_gpr_gpr +emit_sfence_vma :: emit_sfence_vma_gpr_gpr diff --git a/core/rexcode/isa/riscv/tools/gen_mnemonic_builders.odin b/core/rexcode/isa/riscv/tools/gen_mnemonic_builders.odin index 37aca6413..2aa81ed5e 100644 --- a/core/rexcode/isa/riscv/tools/gen_mnemonic_builders.odin +++ b/core/rexcode/isa/riscv/tools/gen_mnemonic_builders.odin @@ -305,7 +305,7 @@ write_emit_body :: proc(sb: ^strings.Builder, entry: Proc_Entry) { sig := entry.sig names := param_names(sig) - strings.write_string(sb, "append(instructions, ") + strings.write_string(sb, "append_elem(instructions, ") strings.write_string(sb, entry.proc_name) strings.write_byte(sb, '(') for i in 0.. Instruction { return Instruction{ mnemonic = .ADD, operand_count = 3, length = 4, ops = {op_reg(a), op_reg(b), op_reg(c), {}} } } -emit_add_gpr_gpr_gpr :: #force_inline proc(instructions: ^[dynamic]Instruction, a: Register, b: Register, c: Register) { append(instructions, inst_add_gpr_gpr_gpr(a, b, c)) } +emit_add_gpr_gpr_gpr :: #force_inline proc(instructions: ^[dynamic]Instruction, a: Register, b: Register, c: Register) { append_elem(instructions, inst_add_gpr_gpr_gpr(a, b, c)) } inst_addu_gpr_gpr_gpr :: #force_inline proc "contextless" (a: Register, b: Register, c: Register) -> Instruction { return Instruction{ mnemonic = .ADDU, operand_count = 3, length = 4, ops = {op_reg(a), op_reg(b), op_reg(c), {}} } } -emit_addu_gpr_gpr_gpr :: #force_inline proc(instructions: ^[dynamic]Instruction, a: Register, b: Register, c: Register) { append(instructions, inst_addu_gpr_gpr_gpr(a, b, c)) } +emit_addu_gpr_gpr_gpr :: #force_inline proc(instructions: ^[dynamic]Instruction, a: Register, b: Register, c: Register) { append_elem(instructions, inst_addu_gpr_gpr_gpr(a, b, c)) } inst_sub_gpr_gpr_gpr :: #force_inline proc "contextless" (a: Register, b: Register, c: Register) -> Instruction { return Instruction{ mnemonic = .SUB, operand_count = 3, length = 4, ops = {op_reg(a), op_reg(b), op_reg(c), {}} } } -emit_sub_gpr_gpr_gpr :: #force_inline proc(instructions: ^[dynamic]Instruction, a: Register, b: Register, c: Register) { append(instructions, inst_sub_gpr_gpr_gpr(a, b, c)) } +emit_sub_gpr_gpr_gpr :: #force_inline proc(instructions: ^[dynamic]Instruction, a: Register, b: Register, c: Register) { append_elem(instructions, inst_sub_gpr_gpr_gpr(a, b, c)) } inst_subu_gpr_gpr_gpr :: #force_inline proc "contextless" (a: Register, b: Register, c: Register) -> Instruction { return Instruction{ mnemonic = .SUBU, operand_count = 3, length = 4, ops = {op_reg(a), op_reg(b), op_reg(c), {}} } } -emit_subu_gpr_gpr_gpr :: #force_inline proc(instructions: ^[dynamic]Instruction, a: Register, b: Register, c: Register) { append(instructions, inst_subu_gpr_gpr_gpr(a, b, c)) } +emit_subu_gpr_gpr_gpr :: #force_inline proc(instructions: ^[dynamic]Instruction, a: Register, b: Register, c: Register) { append_elem(instructions, inst_subu_gpr_gpr_gpr(a, b, c)) } inst_and_gpr_gpr_gpr :: #force_inline proc "contextless" (a: Register, b: Register, c: Register) -> Instruction { return Instruction{ mnemonic = .AND, operand_count = 3, length = 4, ops = {op_reg(a), op_reg(b), op_reg(c), {}} } } -emit_and_gpr_gpr_gpr :: #force_inline proc(instructions: ^[dynamic]Instruction, a: Register, b: Register, c: Register) { append(instructions, inst_and_gpr_gpr_gpr(a, b, c)) } +emit_and_gpr_gpr_gpr :: #force_inline proc(instructions: ^[dynamic]Instruction, a: Register, b: Register, c: Register) { append_elem(instructions, inst_and_gpr_gpr_gpr(a, b, c)) } inst_or_gpr_gpr_gpr :: #force_inline proc "contextless" (a: Register, b: Register, c: Register) -> Instruction { return Instruction{ mnemonic = .OR, operand_count = 3, length = 4, ops = {op_reg(a), op_reg(b), op_reg(c), {}} } } -emit_or_gpr_gpr_gpr :: #force_inline proc(instructions: ^[dynamic]Instruction, a: Register, b: Register, c: Register) { append(instructions, inst_or_gpr_gpr_gpr(a, b, c)) } +emit_or_gpr_gpr_gpr :: #force_inline proc(instructions: ^[dynamic]Instruction, a: Register, b: Register, c: Register) { append_elem(instructions, inst_or_gpr_gpr_gpr(a, b, c)) } inst_xor_gpr_gpr_gpr :: #force_inline proc "contextless" (a: Register, b: Register, c: Register) -> Instruction { return Instruction{ mnemonic = .XOR, operand_count = 3, length = 4, ops = {op_reg(a), op_reg(b), op_reg(c), {}} } } -emit_xor_gpr_gpr_gpr :: #force_inline proc(instructions: ^[dynamic]Instruction, a: Register, b: Register, c: Register) { append(instructions, inst_xor_gpr_gpr_gpr(a, b, c)) } +emit_xor_gpr_gpr_gpr :: #force_inline proc(instructions: ^[dynamic]Instruction, a: Register, b: Register, c: Register) { append_elem(instructions, inst_xor_gpr_gpr_gpr(a, b, c)) } inst_nor_gpr_gpr_gpr :: #force_inline proc "contextless" (a: Register, b: Register, c: Register) -> Instruction { return Instruction{ mnemonic = .NOR, operand_count = 3, length = 4, ops = {op_reg(a), op_reg(b), op_reg(c), {}} } } -emit_nor_gpr_gpr_gpr :: #force_inline proc(instructions: ^[dynamic]Instruction, a: Register, b: Register, c: Register) { append(instructions, inst_nor_gpr_gpr_gpr(a, b, c)) } +emit_nor_gpr_gpr_gpr :: #force_inline proc(instructions: ^[dynamic]Instruction, a: Register, b: Register, c: Register) { append_elem(instructions, inst_nor_gpr_gpr_gpr(a, b, c)) } inst_slt_gpr_gpr_gpr :: #force_inline proc "contextless" (a: Register, b: Register, c: Register) -> Instruction { return Instruction{ mnemonic = .SLT, operand_count = 3, length = 4, ops = {op_reg(a), op_reg(b), op_reg(c), {}} } } -emit_slt_gpr_gpr_gpr :: #force_inline proc(instructions: ^[dynamic]Instruction, a: Register, b: Register, c: Register) { append(instructions, inst_slt_gpr_gpr_gpr(a, b, c)) } +emit_slt_gpr_gpr_gpr :: #force_inline proc(instructions: ^[dynamic]Instruction, a: Register, b: Register, c: Register) { append_elem(instructions, inst_slt_gpr_gpr_gpr(a, b, c)) } inst_sltu_gpr_gpr_gpr :: #force_inline proc "contextless" (a: Register, b: Register, c: Register) -> Instruction { return Instruction{ mnemonic = .SLTU, operand_count = 3, length = 4, ops = {op_reg(a), op_reg(b), op_reg(c), {}} } } -emit_sltu_gpr_gpr_gpr :: #force_inline proc(instructions: ^[dynamic]Instruction, a: Register, b: Register, c: Register) { append(instructions, inst_sltu_gpr_gpr_gpr(a, b, c)) } +emit_sltu_gpr_gpr_gpr :: #force_inline proc(instructions: ^[dynamic]Instruction, a: Register, b: Register, c: Register) { append_elem(instructions, inst_sltu_gpr_gpr_gpr(a, b, c)) } inst_sll_gpr_gpr_imm5 :: #force_inline proc "contextless" (a: Register, b: Register, imm: i64) -> Instruction { return Instruction{ mnemonic = .SLL, operand_count = 3, length = 4, ops = {op_reg(a), op_reg(b), op_imm(imm, 1), {}} } } -emit_sll_gpr_gpr_imm5 :: #force_inline proc(instructions: ^[dynamic]Instruction, a: Register, b: Register, imm: i64) { append(instructions, inst_sll_gpr_gpr_imm5(a, b, imm)) } +emit_sll_gpr_gpr_imm5 :: #force_inline proc(instructions: ^[dynamic]Instruction, a: Register, b: Register, imm: i64) { append_elem(instructions, inst_sll_gpr_gpr_imm5(a, b, imm)) } inst_srl_gpr_gpr_imm5 :: #force_inline proc "contextless" (a: Register, b: Register, imm: i64) -> Instruction { return Instruction{ mnemonic = .SRL, operand_count = 3, length = 4, ops = {op_reg(a), op_reg(b), op_imm(imm, 1), {}} } } -emit_srl_gpr_gpr_imm5 :: #force_inline proc(instructions: ^[dynamic]Instruction, a: Register, b: Register, imm: i64) { append(instructions, inst_srl_gpr_gpr_imm5(a, b, imm)) } +emit_srl_gpr_gpr_imm5 :: #force_inline proc(instructions: ^[dynamic]Instruction, a: Register, b: Register, imm: i64) { append_elem(instructions, inst_srl_gpr_gpr_imm5(a, b, imm)) } inst_sra_gpr_gpr_imm5 :: #force_inline proc "contextless" (a: Register, b: Register, imm: i64) -> Instruction { return Instruction{ mnemonic = .SRA, operand_count = 3, length = 4, ops = {op_reg(a), op_reg(b), op_imm(imm, 1), {}} } } -emit_sra_gpr_gpr_imm5 :: #force_inline proc(instructions: ^[dynamic]Instruction, a: Register, b: Register, imm: i64) { append(instructions, inst_sra_gpr_gpr_imm5(a, b, imm)) } +emit_sra_gpr_gpr_imm5 :: #force_inline proc(instructions: ^[dynamic]Instruction, a: Register, b: Register, imm: i64) { append_elem(instructions, inst_sra_gpr_gpr_imm5(a, b, imm)) } inst_sllv_gpr_gpr_gpr :: #force_inline proc "contextless" (a: Register, b: Register, c: Register) -> Instruction { return Instruction{ mnemonic = .SLLV, operand_count = 3, length = 4, ops = {op_reg(a), op_reg(b), op_reg(c), {}} } } -emit_sllv_gpr_gpr_gpr :: #force_inline proc(instructions: ^[dynamic]Instruction, a: Register, b: Register, c: Register) { append(instructions, inst_sllv_gpr_gpr_gpr(a, b, c)) } +emit_sllv_gpr_gpr_gpr :: #force_inline proc(instructions: ^[dynamic]Instruction, a: Register, b: Register, c: Register) { append_elem(instructions, inst_sllv_gpr_gpr_gpr(a, b, c)) } inst_srlv_gpr_gpr_gpr :: #force_inline proc "contextless" (a: Register, b: Register, c: Register) -> Instruction { return Instruction{ mnemonic = .SRLV, operand_count = 3, length = 4, ops = {op_reg(a), op_reg(b), op_reg(c), {}} } } -emit_srlv_gpr_gpr_gpr :: #force_inline proc(instructions: ^[dynamic]Instruction, a: Register, b: Register, c: Register) { append(instructions, inst_srlv_gpr_gpr_gpr(a, b, c)) } +emit_srlv_gpr_gpr_gpr :: #force_inline proc(instructions: ^[dynamic]Instruction, a: Register, b: Register, c: Register) { append_elem(instructions, inst_srlv_gpr_gpr_gpr(a, b, c)) } inst_srav_gpr_gpr_gpr :: #force_inline proc "contextless" (a: Register, b: Register, c: Register) -> Instruction { return Instruction{ mnemonic = .SRAV, operand_count = 3, length = 4, ops = {op_reg(a), op_reg(b), op_reg(c), {}} } } -emit_srav_gpr_gpr_gpr :: #force_inline proc(instructions: ^[dynamic]Instruction, a: Register, b: Register, c: Register) { append(instructions, inst_srav_gpr_gpr_gpr(a, b, c)) } +emit_srav_gpr_gpr_gpr :: #force_inline proc(instructions: ^[dynamic]Instruction, a: Register, b: Register, c: Register) { append_elem(instructions, inst_srav_gpr_gpr_gpr(a, b, c)) } inst_addi_gpr_gpr_imm16 :: #force_inline proc "contextless" (a: Register, b: Register, imm: i64) -> Instruction { return Instruction{ mnemonic = .ADDI, operand_count = 3, length = 4, ops = {op_reg(a), op_reg(b), op_imm(imm, 2), {}} } } -emit_addi_gpr_gpr_imm16 :: #force_inline proc(instructions: ^[dynamic]Instruction, a: Register, b: Register, imm: i64) { append(instructions, inst_addi_gpr_gpr_imm16(a, b, imm)) } +emit_addi_gpr_gpr_imm16 :: #force_inline proc(instructions: ^[dynamic]Instruction, a: Register, b: Register, imm: i64) { append_elem(instructions, inst_addi_gpr_gpr_imm16(a, b, imm)) } inst_addiu_gpr_gpr_imm16 :: #force_inline proc "contextless" (a: Register, b: Register, imm: i64) -> Instruction { return Instruction{ mnemonic = .ADDIU, operand_count = 3, length = 4, ops = {op_reg(a), op_reg(b), op_imm(imm, 2), {}} } } -emit_addiu_gpr_gpr_imm16 :: #force_inline proc(instructions: ^[dynamic]Instruction, a: Register, b: Register, imm: i64) { append(instructions, inst_addiu_gpr_gpr_imm16(a, b, imm)) } +emit_addiu_gpr_gpr_imm16 :: #force_inline proc(instructions: ^[dynamic]Instruction, a: Register, b: Register, imm: i64) { append_elem(instructions, inst_addiu_gpr_gpr_imm16(a, b, imm)) } inst_slti_gpr_gpr_imm16 :: #force_inline proc "contextless" (a: Register, b: Register, imm: i64) -> Instruction { return Instruction{ mnemonic = .SLTI, operand_count = 3, length = 4, ops = {op_reg(a), op_reg(b), op_imm(imm, 2), {}} } } -emit_slti_gpr_gpr_imm16 :: #force_inline proc(instructions: ^[dynamic]Instruction, a: Register, b: Register, imm: i64) { append(instructions, inst_slti_gpr_gpr_imm16(a, b, imm)) } +emit_slti_gpr_gpr_imm16 :: #force_inline proc(instructions: ^[dynamic]Instruction, a: Register, b: Register, imm: i64) { append_elem(instructions, inst_slti_gpr_gpr_imm16(a, b, imm)) } inst_sltiu_gpr_gpr_imm16 :: #force_inline proc "contextless" (a: Register, b: Register, imm: i64) -> Instruction { return Instruction{ mnemonic = .SLTIU, operand_count = 3, length = 4, ops = {op_reg(a), op_reg(b), op_imm(imm, 2), {}} } } -emit_sltiu_gpr_gpr_imm16 :: #force_inline proc(instructions: ^[dynamic]Instruction, a: Register, b: Register, imm: i64) { append(instructions, inst_sltiu_gpr_gpr_imm16(a, b, imm)) } +emit_sltiu_gpr_gpr_imm16 :: #force_inline proc(instructions: ^[dynamic]Instruction, a: Register, b: Register, imm: i64) { append_elem(instructions, inst_sltiu_gpr_gpr_imm16(a, b, imm)) } inst_andi_gpr_gpr_imm16 :: #force_inline proc "contextless" (a: Register, b: Register, imm: i64) -> Instruction { return Instruction{ mnemonic = .ANDI, operand_count = 3, length = 4, ops = {op_reg(a), op_reg(b), op_imm(imm, 2), {}} } } -emit_andi_gpr_gpr_imm16 :: #force_inline proc(instructions: ^[dynamic]Instruction, a: Register, b: Register, imm: i64) { append(instructions, inst_andi_gpr_gpr_imm16(a, b, imm)) } +emit_andi_gpr_gpr_imm16 :: #force_inline proc(instructions: ^[dynamic]Instruction, a: Register, b: Register, imm: i64) { append_elem(instructions, inst_andi_gpr_gpr_imm16(a, b, imm)) } inst_ori_gpr_gpr_imm16 :: #force_inline proc "contextless" (a: Register, b: Register, imm: i64) -> Instruction { return Instruction{ mnemonic = .ORI, operand_count = 3, length = 4, ops = {op_reg(a), op_reg(b), op_imm(imm, 2), {}} } } -emit_ori_gpr_gpr_imm16 :: #force_inline proc(instructions: ^[dynamic]Instruction, a: Register, b: Register, imm: i64) { append(instructions, inst_ori_gpr_gpr_imm16(a, b, imm)) } +emit_ori_gpr_gpr_imm16 :: #force_inline proc(instructions: ^[dynamic]Instruction, a: Register, b: Register, imm: i64) { append_elem(instructions, inst_ori_gpr_gpr_imm16(a, b, imm)) } inst_xori_gpr_gpr_imm16 :: #force_inline proc "contextless" (a: Register, b: Register, imm: i64) -> Instruction { return Instruction{ mnemonic = .XORI, operand_count = 3, length = 4, ops = {op_reg(a), op_reg(b), op_imm(imm, 2), {}} } } -emit_xori_gpr_gpr_imm16 :: #force_inline proc(instructions: ^[dynamic]Instruction, a: Register, b: Register, imm: i64) { append(instructions, inst_xori_gpr_gpr_imm16(a, b, imm)) } +emit_xori_gpr_gpr_imm16 :: #force_inline proc(instructions: ^[dynamic]Instruction, a: Register, b: Register, imm: i64) { append_elem(instructions, inst_xori_gpr_gpr_imm16(a, b, imm)) } inst_lui_gpr_imm16 :: #force_inline proc "contextless" (a: Register, imm: i64) -> Instruction { return Instruction{ mnemonic = .LUI, operand_count = 2, length = 4, ops = {op_reg(a), op_imm(imm, 2), {}, {}} } } -emit_lui_gpr_imm16 :: #force_inline proc(instructions: ^[dynamic]Instruction, a: Register, imm: i64) { append(instructions, inst_lui_gpr_imm16(a, imm)) } +emit_lui_gpr_imm16 :: #force_inline proc(instructions: ^[dynamic]Instruction, a: Register, imm: i64) { append_elem(instructions, inst_lui_gpr_imm16(a, imm)) } inst_beq_gpr_gpr_rel :: #force_inline proc "contextless" (a: Register, b: Register, label_id: u32) -> Instruction { return Instruction{ mnemonic = .BEQ, operand_count = 3, length = 4, ops = {op_reg(a), op_reg(b), op_label(label_id), {}} } } -emit_beq_gpr_gpr_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, a: Register, b: Register, label_id: u32) { append(instructions, inst_beq_gpr_gpr_rel(a, b, label_id)) } +emit_beq_gpr_gpr_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, a: Register, b: Register, label_id: u32) { append_elem(instructions, inst_beq_gpr_gpr_rel(a, b, label_id)) } inst_bne_gpr_gpr_rel :: #force_inline proc "contextless" (a: Register, b: Register, label_id: u32) -> Instruction { return Instruction{ mnemonic = .BNE, operand_count = 3, length = 4, ops = {op_reg(a), op_reg(b), op_label(label_id), {}} } } -emit_bne_gpr_gpr_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, a: Register, b: Register, label_id: u32) { append(instructions, inst_bne_gpr_gpr_rel(a, b, label_id)) } +emit_bne_gpr_gpr_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, a: Register, b: Register, label_id: u32) { append_elem(instructions, inst_bne_gpr_gpr_rel(a, b, label_id)) } inst_blez_gpr_rel :: #force_inline proc "contextless" (a: Register, label_id: u32) -> Instruction { return Instruction{ mnemonic = .BLEZ, operand_count = 2, length = 4, ops = {op_reg(a), op_label(label_id), {}, {}} } } -emit_blez_gpr_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, a: Register, label_id: u32) { append(instructions, inst_blez_gpr_rel(a, label_id)) } +emit_blez_gpr_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, a: Register, label_id: u32) { append_elem(instructions, inst_blez_gpr_rel(a, label_id)) } inst_bgtz_gpr_rel :: #force_inline proc "contextless" (a: Register, label_id: u32) -> Instruction { return Instruction{ mnemonic = .BGTZ, operand_count = 2, length = 4, ops = {op_reg(a), op_label(label_id), {}, {}} } } -emit_bgtz_gpr_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, a: Register, label_id: u32) { append(instructions, inst_bgtz_gpr_rel(a, label_id)) } +emit_bgtz_gpr_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, a: Register, label_id: u32) { append_elem(instructions, inst_bgtz_gpr_rel(a, label_id)) } inst_bltz_gpr_rel :: #force_inline proc "contextless" (a: Register, label_id: u32) -> Instruction { return Instruction{ mnemonic = .BLTZ, operand_count = 2, length = 4, ops = {op_reg(a), op_label(label_id), {}, {}} } } -emit_bltz_gpr_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, a: Register, label_id: u32) { append(instructions, inst_bltz_gpr_rel(a, label_id)) } +emit_bltz_gpr_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, a: Register, label_id: u32) { append_elem(instructions, inst_bltz_gpr_rel(a, label_id)) } inst_bgez_gpr_rel :: #force_inline proc "contextless" (a: Register, label_id: u32) -> Instruction { return Instruction{ mnemonic = .BGEZ, operand_count = 2, length = 4, ops = {op_reg(a), op_label(label_id), {}, {}} } } -emit_bgez_gpr_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, a: Register, label_id: u32) { append(instructions, inst_bgez_gpr_rel(a, label_id)) } +emit_bgez_gpr_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, a: Register, label_id: u32) { append_elem(instructions, inst_bgez_gpr_rel(a, label_id)) } inst_bltzal_gpr_rel :: #force_inline proc "contextless" (a: Register, label_id: u32) -> Instruction { return Instruction{ mnemonic = .BLTZAL, operand_count = 2, length = 4, ops = {op_reg(a), op_label(label_id), {}, {}} } } -emit_bltzal_gpr_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, a: Register, label_id: u32) { append(instructions, inst_bltzal_gpr_rel(a, label_id)) } +emit_bltzal_gpr_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, a: Register, label_id: u32) { append_elem(instructions, inst_bltzal_gpr_rel(a, label_id)) } inst_bgezal_gpr_rel :: #force_inline proc "contextless" (a: Register, label_id: u32) -> Instruction { return Instruction{ mnemonic = .BGEZAL, operand_count = 2, length = 4, ops = {op_reg(a), op_label(label_id), {}, {}} } } -emit_bgezal_gpr_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, a: Register, label_id: u32) { append(instructions, inst_bgezal_gpr_rel(a, label_id)) } +emit_bgezal_gpr_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, a: Register, label_id: u32) { append_elem(instructions, inst_bgezal_gpr_rel(a, label_id)) } inst_j_rel :: #force_inline proc "contextless" (label_id: u32) -> Instruction { return Instruction{ mnemonic = .J, operand_count = 1, length = 4, ops = {op_label(label_id), {}, {}, {}} } } -emit_j_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, label_id: u32) { append(instructions, inst_j_rel(label_id)) } +emit_j_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, label_id: u32) { append_elem(instructions, inst_j_rel(label_id)) } inst_jal_rel :: #force_inline proc "contextless" (label_id: u32) -> Instruction { return Instruction{ mnemonic = .JAL, operand_count = 1, length = 4, ops = {op_label(label_id), {}, {}, {}} } } -emit_jal_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, label_id: u32) { append(instructions, inst_jal_rel(label_id)) } +emit_jal_rel :: #force_inline proc(instructions: ^[dynamic]Instruction, label_id: u32) { append_elem(instructions, inst_jal_rel(label_id)) } inst_jr_gpr :: #force_inline proc "contextless" (a: Register) -> Instruction { return Instruction{ mnemonic = .JR, operand_count = 1, length = 4, ops = {op_reg(a), {}, {}, {}} } } -emit_jr_gpr :: #force_inline proc(instructions: ^[dynamic]Instruction, a: Register) { append(instructions, inst_jr_gpr(a)) } +emit_jr_gpr :: #force_inline proc(instructions: ^[dynamic]Instruction, a: Register) { append_elem(instructions, inst_jr_gpr(a)) } inst_jalr_gpr_gpr :: #force_inline proc "contextless" (a: Register, b: Register) -> Instruction { return Instruction{ mnemonic = .JALR, operand_count = 2, length = 4, ops = {op_reg(a), op_reg(b), {}, {}} } } -emit_jalr_gpr_gpr :: #force_inline proc(instructions: ^[dynamic]Instruction, a: Register, b: Register) { append(instructions, inst_jalr_gpr_gpr(a, b)) } +emit_jalr_gpr_gpr :: #force_inline proc(instructions: ^[dynamic]Instruction, a: Register, b: Register) { append_elem(instructions, inst_jalr_gpr_gpr(a, b)) } inst_lb_gpr_mem :: #force_inline proc "contextless" (a: Register, m: Memory) -> Instruction { return Instruction{ mnemonic = .LB, operand_count = 2, length = 4, ops = {op_reg(a), op_mem(m, 4), {}, {}} } } -emit_lb_gpr_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, a: Register, m: Memory) { append(instructions, inst_lb_gpr_mem(a, m)) } +emit_lb_gpr_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, a: Register, m: Memory) { append_elem(instructions, inst_lb_gpr_mem(a, m)) } inst_lh_gpr_mem :: #force_inline proc "contextless" (a: Register, m: Memory) -> Instruction { return Instruction{ mnemonic = .LH, operand_count = 2, length = 4, ops = {op_reg(a), op_mem(m, 4), {}, {}} } } -emit_lh_gpr_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, a: Register, m: Memory) { append(instructions, inst_lh_gpr_mem(a, m)) } +emit_lh_gpr_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, a: Register, m: Memory) { append_elem(instructions, inst_lh_gpr_mem(a, m)) } inst_lw_gpr_mem :: #force_inline proc "contextless" (a: Register, m: Memory) -> Instruction { return Instruction{ mnemonic = .LW, operand_count = 2, length = 4, ops = {op_reg(a), op_mem(m, 4), {}, {}} } } -emit_lw_gpr_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, a: Register, m: Memory) { append(instructions, inst_lw_gpr_mem(a, m)) } +emit_lw_gpr_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, a: Register, m: Memory) { append_elem(instructions, inst_lw_gpr_mem(a, m)) } inst_lbu_gpr_mem :: #force_inline proc "contextless" (a: Register, m: Memory) -> Instruction { return Instruction{ mnemonic = .LBU, operand_count = 2, length = 4, ops = {op_reg(a), op_mem(m, 4), {}, {}} } } -emit_lbu_gpr_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, a: Register, m: Memory) { append(instructions, inst_lbu_gpr_mem(a, m)) } +emit_lbu_gpr_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, a: Register, m: Memory) { append_elem(instructions, inst_lbu_gpr_mem(a, m)) } inst_lhu_gpr_mem :: #force_inline proc "contextless" (a: Register, m: Memory) -> Instruction { return Instruction{ mnemonic = .LHU, operand_count = 2, length = 4, ops = {op_reg(a), op_mem(m, 4), {}, {}} } } -emit_lhu_gpr_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, a: Register, m: Memory) { append(instructions, inst_lhu_gpr_mem(a, m)) } +emit_lhu_gpr_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, a: Register, m: Memory) { append_elem(instructions, inst_lhu_gpr_mem(a, m)) } inst_sb_gpr_mem :: #force_inline proc "contextless" (a: Register, m: Memory) -> Instruction { return Instruction{ mnemonic = .SB, operand_count = 2, length = 4, ops = {op_reg(a), op_mem(m, 4), {}, {}} } } -emit_sb_gpr_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, a: Register, m: Memory) { append(instructions, inst_sb_gpr_mem(a, m)) } +emit_sb_gpr_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, a: Register, m: Memory) { append_elem(instructions, inst_sb_gpr_mem(a, m)) } inst_sh_gpr_mem :: #force_inline proc "contextless" (a: Register, m: Memory) -> Instruction { return Instruction{ mnemonic = .SH, operand_count = 2, length = 4, ops = {op_reg(a), op_mem(m, 4), {}, {}} } } -emit_sh_gpr_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, a: Register, m: Memory) { append(instructions, inst_sh_gpr_mem(a, m)) } +emit_sh_gpr_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, a: Register, m: Memory) { append_elem(instructions, inst_sh_gpr_mem(a, m)) } inst_sw_gpr_mem :: #force_inline proc "contextless" (a: Register, m: Memory) -> Instruction { return Instruction{ mnemonic = .SW, operand_count = 2, length = 4, ops = {op_reg(a), op_mem(m, 4), {}, {}} } } -emit_sw_gpr_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, a: Register, m: Memory) { append(instructions, inst_sw_gpr_mem(a, m)) } +emit_sw_gpr_mem :: #force_inline proc(instructions: ^[dynamic]Instruction, a: Register, m: Memory) { append_elem(instructions, inst_sw_gpr_mem(a, m)) } inst_break_imm20 :: #force_inline proc "contextless" (imm: i64) -> Instruction { return Instruction{ mnemonic = .BREAK, operand_count = 1, length = 4, ops = {op_imm(imm, 4), {}, {}, {}} } } -emit_break_imm20 :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64) { append(instructions, inst_break_imm20(imm)) } +emit_break_imm20 :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i64) { append_elem(instructions, inst_break_imm20(imm)) } inst_nop_none :: #force_inline proc "contextless" () -> Instruction { return Instruction{ mnemonic = .NOP, operand_count = 0, length = 4, ops = {{}, {}, {}, {}} } } -emit_nop_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_nop_none()) } +emit_nop_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_nop_none()) } inst_mfc0_gpr_cp0 :: #force_inline proc "contextless" (a: Register, b: Register) -> Instruction { return Instruction{ mnemonic = .MFC0, operand_count = 2, length = 4, ops = {op_reg(a), op_reg(b), {}, {}} } } -emit_mfc0_gpr_cp0 :: #force_inline proc(instructions: ^[dynamic]Instruction, a: Register, b: Register) { append(instructions, inst_mfc0_gpr_cp0(a, b)) } +emit_mfc0_gpr_cp0 :: #force_inline proc(instructions: ^[dynamic]Instruction, a: Register, b: Register) { append_elem(instructions, inst_mfc0_gpr_cp0(a, b)) } inst_mtc0_gpr_cp0 :: #force_inline proc "contextless" (a: Register, b: Register) -> Instruction { return Instruction{ mnemonic = .MTC0, operand_count = 2, length = 4, ops = {op_reg(a), op_reg(b), {}, {}} } } -emit_mtc0_gpr_cp0 :: #force_inline proc(instructions: ^[dynamic]Instruction, a: Register, b: Register) { append(instructions, inst_mtc0_gpr_cp0(a, b)) } +emit_mtc0_gpr_cp0 :: #force_inline proc(instructions: ^[dynamic]Instruction, a: Register, b: Register) { append_elem(instructions, inst_mtc0_gpr_cp0(a, b)) } inst_mfc2_gpr_vr :: #force_inline proc "contextless" (a: Register, b: Register) -> Instruction { return Instruction{ mnemonic = .MFC2, operand_count = 2, length = 4, ops = {op_reg(a), op_vr(b), {}, {}} } } -emit_mfc2_gpr_vr :: #force_inline proc(instructions: ^[dynamic]Instruction, a: Register, b: Register) { append(instructions, inst_mfc2_gpr_vr(a, b)) } +emit_mfc2_gpr_vr :: #force_inline proc(instructions: ^[dynamic]Instruction, a: Register, b: Register) { append_elem(instructions, inst_mfc2_gpr_vr(a, b)) } inst_mtc2_gpr_vr :: #force_inline proc "contextless" (a: Register, b: Register) -> Instruction { return Instruction{ mnemonic = .MTC2, operand_count = 2, length = 4, ops = {op_reg(a), op_vr(b), {}, {}} } } -emit_mtc2_gpr_vr :: #force_inline proc(instructions: ^[dynamic]Instruction, a: Register, b: Register) { append(instructions, inst_mtc2_gpr_vr(a, b)) } +emit_mtc2_gpr_vr :: #force_inline proc(instructions: ^[dynamic]Instruction, a: Register, b: Register) { append_elem(instructions, inst_mtc2_gpr_vr(a, b)) } inst_cfc2_gpr_cp2 :: #force_inline proc "contextless" (a: Register, b: Register) -> Instruction { return Instruction{ mnemonic = .CFC2, operand_count = 2, length = 4, ops = {op_reg(a), op_reg(b), {}, {}} } } -emit_cfc2_gpr_cp2 :: #force_inline proc(instructions: ^[dynamic]Instruction, a: Register, b: Register) { append(instructions, inst_cfc2_gpr_cp2(a, b)) } +emit_cfc2_gpr_cp2 :: #force_inline proc(instructions: ^[dynamic]Instruction, a: Register, b: Register) { append_elem(instructions, inst_cfc2_gpr_cp2(a, b)) } inst_ctc2_gpr_cp2 :: #force_inline proc "contextless" (a: Register, b: Register) -> Instruction { return Instruction{ mnemonic = .CTC2, operand_count = 2, length = 4, ops = {op_reg(a), op_reg(b), {}, {}} } } -emit_ctc2_gpr_cp2 :: #force_inline proc(instructions: ^[dynamic]Instruction, a: Register, b: Register) { append(instructions, inst_ctc2_gpr_cp2(a, b)) } +emit_ctc2_gpr_cp2 :: #force_inline proc(instructions: ^[dynamic]Instruction, a: Register, b: Register) { append_elem(instructions, inst_ctc2_gpr_cp2(a, b)) } inst_vmulf_vr_vr_vr :: #force_inline proc "contextless" (a: Register, b: Register, c: Register, element: u8 = 0) -> Instruction { return Instruction{ mnemonic = .VMULF, operand_count = 3, length = 4, ops = {op_vr(a), op_vr(b), op_vr(c, element), {}} } } -emit_vmulf_vr_vr_vr :: #force_inline proc(instructions: ^[dynamic]Instruction, a: Register, b: Register, c: Register, element: u8 = 0) { append(instructions, inst_vmulf_vr_vr_vr(a, b, c, element)) } +emit_vmulf_vr_vr_vr :: #force_inline proc(instructions: ^[dynamic]Instruction, a: Register, b: Register, c: Register, element: u8 = 0) { append_elem(instructions, inst_vmulf_vr_vr_vr(a, b, c, element)) } inst_vmulu_vr_vr_vr :: #force_inline proc "contextless" (a: Register, b: Register, c: Register, element: u8 = 0) -> Instruction { return Instruction{ mnemonic = .VMULU, operand_count = 3, length = 4, ops = {op_vr(a), op_vr(b), op_vr(c, element), {}} } } -emit_vmulu_vr_vr_vr :: #force_inline proc(instructions: ^[dynamic]Instruction, a: Register, b: Register, c: Register, element: u8 = 0) { append(instructions, inst_vmulu_vr_vr_vr(a, b, c, element)) } +emit_vmulu_vr_vr_vr :: #force_inline proc(instructions: ^[dynamic]Instruction, a: Register, b: Register, c: Register, element: u8 = 0) { append_elem(instructions, inst_vmulu_vr_vr_vr(a, b, c, element)) } inst_vmudl_vr_vr_vr :: #force_inline proc "contextless" (a: Register, b: Register, c: Register, element: u8 = 0) -> Instruction { return Instruction{ mnemonic = .VMUDL, operand_count = 3, length = 4, ops = {op_vr(a), op_vr(b), op_vr(c, element), {}} } } -emit_vmudl_vr_vr_vr :: #force_inline proc(instructions: ^[dynamic]Instruction, a: Register, b: Register, c: Register, element: u8 = 0) { append(instructions, inst_vmudl_vr_vr_vr(a, b, c, element)) } +emit_vmudl_vr_vr_vr :: #force_inline proc(instructions: ^[dynamic]Instruction, a: Register, b: Register, c: Register, element: u8 = 0) { append_elem(instructions, inst_vmudl_vr_vr_vr(a, b, c, element)) } inst_vmudm_vr_vr_vr :: #force_inline proc "contextless" (a: Register, b: Register, c: Register, element: u8 = 0) -> Instruction { return Instruction{ mnemonic = .VMUDM, operand_count = 3, length = 4, ops = {op_vr(a), op_vr(b), op_vr(c, element), {}} } } -emit_vmudm_vr_vr_vr :: #force_inline proc(instructions: ^[dynamic]Instruction, a: Register, b: Register, c: Register, element: u8 = 0) { append(instructions, inst_vmudm_vr_vr_vr(a, b, c, element)) } +emit_vmudm_vr_vr_vr :: #force_inline proc(instructions: ^[dynamic]Instruction, a: Register, b: Register, c: Register, element: u8 = 0) { append_elem(instructions, inst_vmudm_vr_vr_vr(a, b, c, element)) } inst_vmudn_vr_vr_vr :: #force_inline proc "contextless" (a: Register, b: Register, c: Register, element: u8 = 0) -> Instruction { return Instruction{ mnemonic = .VMUDN, operand_count = 3, length = 4, ops = {op_vr(a), op_vr(b), op_vr(c, element), {}} } } -emit_vmudn_vr_vr_vr :: #force_inline proc(instructions: ^[dynamic]Instruction, a: Register, b: Register, c: Register, element: u8 = 0) { append(instructions, inst_vmudn_vr_vr_vr(a, b, c, element)) } +emit_vmudn_vr_vr_vr :: #force_inline proc(instructions: ^[dynamic]Instruction, a: Register, b: Register, c: Register, element: u8 = 0) { append_elem(instructions, inst_vmudn_vr_vr_vr(a, b, c, element)) } inst_vmudh_vr_vr_vr :: #force_inline proc "contextless" (a: Register, b: Register, c: Register, element: u8 = 0) -> Instruction { return Instruction{ mnemonic = .VMUDH, operand_count = 3, length = 4, ops = {op_vr(a), op_vr(b), op_vr(c, element), {}} } } -emit_vmudh_vr_vr_vr :: #force_inline proc(instructions: ^[dynamic]Instruction, a: Register, b: Register, c: Register, element: u8 = 0) { append(instructions, inst_vmudh_vr_vr_vr(a, b, c, element)) } +emit_vmudh_vr_vr_vr :: #force_inline proc(instructions: ^[dynamic]Instruction, a: Register, b: Register, c: Register, element: u8 = 0) { append_elem(instructions, inst_vmudh_vr_vr_vr(a, b, c, element)) } inst_vmacf_vr_vr_vr :: #force_inline proc "contextless" (a: Register, b: Register, c: Register, element: u8 = 0) -> Instruction { return Instruction{ mnemonic = .VMACF, operand_count = 3, length = 4, ops = {op_vr(a), op_vr(b), op_vr(c, element), {}} } } -emit_vmacf_vr_vr_vr :: #force_inline proc(instructions: ^[dynamic]Instruction, a: Register, b: Register, c: Register, element: u8 = 0) { append(instructions, inst_vmacf_vr_vr_vr(a, b, c, element)) } +emit_vmacf_vr_vr_vr :: #force_inline proc(instructions: ^[dynamic]Instruction, a: Register, b: Register, c: Register, element: u8 = 0) { append_elem(instructions, inst_vmacf_vr_vr_vr(a, b, c, element)) } inst_vmacu_vr_vr_vr :: #force_inline proc "contextless" (a: Register, b: Register, c: Register, element: u8 = 0) -> Instruction { return Instruction{ mnemonic = .VMACU, operand_count = 3, length = 4, ops = {op_vr(a), op_vr(b), op_vr(c, element), {}} } } -emit_vmacu_vr_vr_vr :: #force_inline proc(instructions: ^[dynamic]Instruction, a: Register, b: Register, c: Register, element: u8 = 0) { append(instructions, inst_vmacu_vr_vr_vr(a, b, c, element)) } +emit_vmacu_vr_vr_vr :: #force_inline proc(instructions: ^[dynamic]Instruction, a: Register, b: Register, c: Register, element: u8 = 0) { append_elem(instructions, inst_vmacu_vr_vr_vr(a, b, c, element)) } inst_vmadl_vr_vr_vr :: #force_inline proc "contextless" (a: Register, b: Register, c: Register, element: u8 = 0) -> Instruction { return Instruction{ mnemonic = .VMADL, operand_count = 3, length = 4, ops = {op_vr(a), op_vr(b), op_vr(c, element), {}} } } -emit_vmadl_vr_vr_vr :: #force_inline proc(instructions: ^[dynamic]Instruction, a: Register, b: Register, c: Register, element: u8 = 0) { append(instructions, inst_vmadl_vr_vr_vr(a, b, c, element)) } +emit_vmadl_vr_vr_vr :: #force_inline proc(instructions: ^[dynamic]Instruction, a: Register, b: Register, c: Register, element: u8 = 0) { append_elem(instructions, inst_vmadl_vr_vr_vr(a, b, c, element)) } inst_vmadm_vr_vr_vr :: #force_inline proc "contextless" (a: Register, b: Register, c: Register, element: u8 = 0) -> Instruction { return Instruction{ mnemonic = .VMADM, operand_count = 3, length = 4, ops = {op_vr(a), op_vr(b), op_vr(c, element), {}} } } -emit_vmadm_vr_vr_vr :: #force_inline proc(instructions: ^[dynamic]Instruction, a: Register, b: Register, c: Register, element: u8 = 0) { append(instructions, inst_vmadm_vr_vr_vr(a, b, c, element)) } +emit_vmadm_vr_vr_vr :: #force_inline proc(instructions: ^[dynamic]Instruction, a: Register, b: Register, c: Register, element: u8 = 0) { append_elem(instructions, inst_vmadm_vr_vr_vr(a, b, c, element)) } inst_vmadn_vr_vr_vr :: #force_inline proc "contextless" (a: Register, b: Register, c: Register, element: u8 = 0) -> Instruction { return Instruction{ mnemonic = .VMADN, operand_count = 3, length = 4, ops = {op_vr(a), op_vr(b), op_vr(c, element), {}} } } -emit_vmadn_vr_vr_vr :: #force_inline proc(instructions: ^[dynamic]Instruction, a: Register, b: Register, c: Register, element: u8 = 0) { append(instructions, inst_vmadn_vr_vr_vr(a, b, c, element)) } +emit_vmadn_vr_vr_vr :: #force_inline proc(instructions: ^[dynamic]Instruction, a: Register, b: Register, c: Register, element: u8 = 0) { append_elem(instructions, inst_vmadn_vr_vr_vr(a, b, c, element)) } inst_vmadh_vr_vr_vr :: #force_inline proc "contextless" (a: Register, b: Register, c: Register, element: u8 = 0) -> Instruction { return Instruction{ mnemonic = .VMADH, operand_count = 3, length = 4, ops = {op_vr(a), op_vr(b), op_vr(c, element), {}} } } -emit_vmadh_vr_vr_vr :: #force_inline proc(instructions: ^[dynamic]Instruction, a: Register, b: Register, c: Register, element: u8 = 0) { append(instructions, inst_vmadh_vr_vr_vr(a, b, c, element)) } +emit_vmadh_vr_vr_vr :: #force_inline proc(instructions: ^[dynamic]Instruction, a: Register, b: Register, c: Register, element: u8 = 0) { append_elem(instructions, inst_vmadh_vr_vr_vr(a, b, c, element)) } inst_vadd_vr_vr_vr :: #force_inline proc "contextless" (a: Register, b: Register, c: Register, element: u8 = 0) -> Instruction { return Instruction{ mnemonic = .VADD, operand_count = 3, length = 4, ops = {op_vr(a), op_vr(b), op_vr(c, element), {}} } } -emit_vadd_vr_vr_vr :: #force_inline proc(instructions: ^[dynamic]Instruction, a: Register, b: Register, c: Register, element: u8 = 0) { append(instructions, inst_vadd_vr_vr_vr(a, b, c, element)) } +emit_vadd_vr_vr_vr :: #force_inline proc(instructions: ^[dynamic]Instruction, a: Register, b: Register, c: Register, element: u8 = 0) { append_elem(instructions, inst_vadd_vr_vr_vr(a, b, c, element)) } inst_vsub_vr_vr_vr :: #force_inline proc "contextless" (a: Register, b: Register, c: Register, element: u8 = 0) -> Instruction { return Instruction{ mnemonic = .VSUB, operand_count = 3, length = 4, ops = {op_vr(a), op_vr(b), op_vr(c, element), {}} } } -emit_vsub_vr_vr_vr :: #force_inline proc(instructions: ^[dynamic]Instruction, a: Register, b: Register, c: Register, element: u8 = 0) { append(instructions, inst_vsub_vr_vr_vr(a, b, c, element)) } +emit_vsub_vr_vr_vr :: #force_inline proc(instructions: ^[dynamic]Instruction, a: Register, b: Register, c: Register, element: u8 = 0) { append_elem(instructions, inst_vsub_vr_vr_vr(a, b, c, element)) } inst_vabs_vr_vr_vr :: #force_inline proc "contextless" (a: Register, b: Register, c: Register, element: u8 = 0) -> Instruction { return Instruction{ mnemonic = .VABS, operand_count = 3, length = 4, ops = {op_vr(a), op_vr(b), op_vr(c, element), {}} } } -emit_vabs_vr_vr_vr :: #force_inline proc(instructions: ^[dynamic]Instruction, a: Register, b: Register, c: Register, element: u8 = 0) { append(instructions, inst_vabs_vr_vr_vr(a, b, c, element)) } +emit_vabs_vr_vr_vr :: #force_inline proc(instructions: ^[dynamic]Instruction, a: Register, b: Register, c: Register, element: u8 = 0) { append_elem(instructions, inst_vabs_vr_vr_vr(a, b, c, element)) } inst_vaddc_vr_vr_vr :: #force_inline proc "contextless" (a: Register, b: Register, c: Register, element: u8 = 0) -> Instruction { return Instruction{ mnemonic = .VADDC, operand_count = 3, length = 4, ops = {op_vr(a), op_vr(b), op_vr(c, element), {}} } } -emit_vaddc_vr_vr_vr :: #force_inline proc(instructions: ^[dynamic]Instruction, a: Register, b: Register, c: Register, element: u8 = 0) { append(instructions, inst_vaddc_vr_vr_vr(a, b, c, element)) } +emit_vaddc_vr_vr_vr :: #force_inline proc(instructions: ^[dynamic]Instruction, a: Register, b: Register, c: Register, element: u8 = 0) { append_elem(instructions, inst_vaddc_vr_vr_vr(a, b, c, element)) } inst_vsubc_vr_vr_vr :: #force_inline proc "contextless" (a: Register, b: Register, c: Register, element: u8 = 0) -> Instruction { return Instruction{ mnemonic = .VSUBC, operand_count = 3, length = 4, ops = {op_vr(a), op_vr(b), op_vr(c, element), {}} } } -emit_vsubc_vr_vr_vr :: #force_inline proc(instructions: ^[dynamic]Instruction, a: Register, b: Register, c: Register, element: u8 = 0) { append(instructions, inst_vsubc_vr_vr_vr(a, b, c, element)) } +emit_vsubc_vr_vr_vr :: #force_inline proc(instructions: ^[dynamic]Instruction, a: Register, b: Register, c: Register, element: u8 = 0) { append_elem(instructions, inst_vsubc_vr_vr_vr(a, b, c, element)) } inst_vsar_vr_vr_vr :: #force_inline proc "contextless" (a: Register, b: Register, c: Register, element: u8 = 0) -> Instruction { return Instruction{ mnemonic = .VSAR, operand_count = 3, length = 4, ops = {op_vr(a), op_vr(b), op_vr(c, element), {}} } } -emit_vsar_vr_vr_vr :: #force_inline proc(instructions: ^[dynamic]Instruction, a: Register, b: Register, c: Register, element: u8 = 0) { append(instructions, inst_vsar_vr_vr_vr(a, b, c, element)) } +emit_vsar_vr_vr_vr :: #force_inline proc(instructions: ^[dynamic]Instruction, a: Register, b: Register, c: Register, element: u8 = 0) { append_elem(instructions, inst_vsar_vr_vr_vr(a, b, c, element)) } inst_vlt_vr_vr_vr :: #force_inline proc "contextless" (a: Register, b: Register, c: Register, element: u8 = 0) -> Instruction { return Instruction{ mnemonic = .VLT, operand_count = 3, length = 4, ops = {op_vr(a), op_vr(b), op_vr(c, element), {}} } } -emit_vlt_vr_vr_vr :: #force_inline proc(instructions: ^[dynamic]Instruction, a: Register, b: Register, c: Register, element: u8 = 0) { append(instructions, inst_vlt_vr_vr_vr(a, b, c, element)) } +emit_vlt_vr_vr_vr :: #force_inline proc(instructions: ^[dynamic]Instruction, a: Register, b: Register, c: Register, element: u8 = 0) { append_elem(instructions, inst_vlt_vr_vr_vr(a, b, c, element)) } inst_veq_vr_vr_vr :: #force_inline proc "contextless" (a: Register, b: Register, c: Register, element: u8 = 0) -> Instruction { return Instruction{ mnemonic = .VEQ, operand_count = 3, length = 4, ops = {op_vr(a), op_vr(b), op_vr(c, element), {}} } } -emit_veq_vr_vr_vr :: #force_inline proc(instructions: ^[dynamic]Instruction, a: Register, b: Register, c: Register, element: u8 = 0) { append(instructions, inst_veq_vr_vr_vr(a, b, c, element)) } +emit_veq_vr_vr_vr :: #force_inline proc(instructions: ^[dynamic]Instruction, a: Register, b: Register, c: Register, element: u8 = 0) { append_elem(instructions, inst_veq_vr_vr_vr(a, b, c, element)) } inst_vne_vr_vr_vr :: #force_inline proc "contextless" (a: Register, b: Register, c: Register, element: u8 = 0) -> Instruction { return Instruction{ mnemonic = .VNE, operand_count = 3, length = 4, ops = {op_vr(a), op_vr(b), op_vr(c, element), {}} } } -emit_vne_vr_vr_vr :: #force_inline proc(instructions: ^[dynamic]Instruction, a: Register, b: Register, c: Register, element: u8 = 0) { append(instructions, inst_vne_vr_vr_vr(a, b, c, element)) } +emit_vne_vr_vr_vr :: #force_inline proc(instructions: ^[dynamic]Instruction, a: Register, b: Register, c: Register, element: u8 = 0) { append_elem(instructions, inst_vne_vr_vr_vr(a, b, c, element)) } inst_vge_vr_vr_vr :: #force_inline proc "contextless" (a: Register, b: Register, c: Register, element: u8 = 0) -> Instruction { return Instruction{ mnemonic = .VGE, operand_count = 3, length = 4, ops = {op_vr(a), op_vr(b), op_vr(c, element), {}} } } -emit_vge_vr_vr_vr :: #force_inline proc(instructions: ^[dynamic]Instruction, a: Register, b: Register, c: Register, element: u8 = 0) { append(instructions, inst_vge_vr_vr_vr(a, b, c, element)) } +emit_vge_vr_vr_vr :: #force_inline proc(instructions: ^[dynamic]Instruction, a: Register, b: Register, c: Register, element: u8 = 0) { append_elem(instructions, inst_vge_vr_vr_vr(a, b, c, element)) } inst_vcl_vr_vr_vr :: #force_inline proc "contextless" (a: Register, b: Register, c: Register, element: u8 = 0) -> Instruction { return Instruction{ mnemonic = .VCL, operand_count = 3, length = 4, ops = {op_vr(a), op_vr(b), op_vr(c, element), {}} } } -emit_vcl_vr_vr_vr :: #force_inline proc(instructions: ^[dynamic]Instruction, a: Register, b: Register, c: Register, element: u8 = 0) { append(instructions, inst_vcl_vr_vr_vr(a, b, c, element)) } +emit_vcl_vr_vr_vr :: #force_inline proc(instructions: ^[dynamic]Instruction, a: Register, b: Register, c: Register, element: u8 = 0) { append_elem(instructions, inst_vcl_vr_vr_vr(a, b, c, element)) } inst_vch_vr_vr_vr :: #force_inline proc "contextless" (a: Register, b: Register, c: Register, element: u8 = 0) -> Instruction { return Instruction{ mnemonic = .VCH, operand_count = 3, length = 4, ops = {op_vr(a), op_vr(b), op_vr(c, element), {}} } } -emit_vch_vr_vr_vr :: #force_inline proc(instructions: ^[dynamic]Instruction, a: Register, b: Register, c: Register, element: u8 = 0) { append(instructions, inst_vch_vr_vr_vr(a, b, c, element)) } +emit_vch_vr_vr_vr :: #force_inline proc(instructions: ^[dynamic]Instruction, a: Register, b: Register, c: Register, element: u8 = 0) { append_elem(instructions, inst_vch_vr_vr_vr(a, b, c, element)) } inst_vcr_vr_vr_vr :: #force_inline proc "contextless" (a: Register, b: Register, c: Register, element: u8 = 0) -> Instruction { return Instruction{ mnemonic = .VCR, operand_count = 3, length = 4, ops = {op_vr(a), op_vr(b), op_vr(c, element), {}} } } -emit_vcr_vr_vr_vr :: #force_inline proc(instructions: ^[dynamic]Instruction, a: Register, b: Register, c: Register, element: u8 = 0) { append(instructions, inst_vcr_vr_vr_vr(a, b, c, element)) } +emit_vcr_vr_vr_vr :: #force_inline proc(instructions: ^[dynamic]Instruction, a: Register, b: Register, c: Register, element: u8 = 0) { append_elem(instructions, inst_vcr_vr_vr_vr(a, b, c, element)) } inst_vmrg_vr_vr_vr :: #force_inline proc "contextless" (a: Register, b: Register, c: Register, element: u8 = 0) -> Instruction { return Instruction{ mnemonic = .VMRG, operand_count = 3, length = 4, ops = {op_vr(a), op_vr(b), op_vr(c, element), {}} } } -emit_vmrg_vr_vr_vr :: #force_inline proc(instructions: ^[dynamic]Instruction, a: Register, b: Register, c: Register, element: u8 = 0) { append(instructions, inst_vmrg_vr_vr_vr(a, b, c, element)) } +emit_vmrg_vr_vr_vr :: #force_inline proc(instructions: ^[dynamic]Instruction, a: Register, b: Register, c: Register, element: u8 = 0) { append_elem(instructions, inst_vmrg_vr_vr_vr(a, b, c, element)) } inst_vand_vr_vr_vr :: #force_inline proc "contextless" (a: Register, b: Register, c: Register, element: u8 = 0) -> Instruction { return Instruction{ mnemonic = .VAND, operand_count = 3, length = 4, ops = {op_vr(a), op_vr(b), op_vr(c, element), {}} } } -emit_vand_vr_vr_vr :: #force_inline proc(instructions: ^[dynamic]Instruction, a: Register, b: Register, c: Register, element: u8 = 0) { append(instructions, inst_vand_vr_vr_vr(a, b, c, element)) } +emit_vand_vr_vr_vr :: #force_inline proc(instructions: ^[dynamic]Instruction, a: Register, b: Register, c: Register, element: u8 = 0) { append_elem(instructions, inst_vand_vr_vr_vr(a, b, c, element)) } inst_vnand_vr_vr_vr :: #force_inline proc "contextless" (a: Register, b: Register, c: Register, element: u8 = 0) -> Instruction { return Instruction{ mnemonic = .VNAND, operand_count = 3, length = 4, ops = {op_vr(a), op_vr(b), op_vr(c, element), {}} } } -emit_vnand_vr_vr_vr :: #force_inline proc(instructions: ^[dynamic]Instruction, a: Register, b: Register, c: Register, element: u8 = 0) { append(instructions, inst_vnand_vr_vr_vr(a, b, c, element)) } +emit_vnand_vr_vr_vr :: #force_inline proc(instructions: ^[dynamic]Instruction, a: Register, b: Register, c: Register, element: u8 = 0) { append_elem(instructions, inst_vnand_vr_vr_vr(a, b, c, element)) } inst_vor_vr_vr_vr :: #force_inline proc "contextless" (a: Register, b: Register, c: Register, element: u8 = 0) -> Instruction { return Instruction{ mnemonic = .VOR, operand_count = 3, length = 4, ops = {op_vr(a), op_vr(b), op_vr(c, element), {}} } } -emit_vor_vr_vr_vr :: #force_inline proc(instructions: ^[dynamic]Instruction, a: Register, b: Register, c: Register, element: u8 = 0) { append(instructions, inst_vor_vr_vr_vr(a, b, c, element)) } +emit_vor_vr_vr_vr :: #force_inline proc(instructions: ^[dynamic]Instruction, a: Register, b: Register, c: Register, element: u8 = 0) { append_elem(instructions, inst_vor_vr_vr_vr(a, b, c, element)) } inst_vnor_vr_vr_vr :: #force_inline proc "contextless" (a: Register, b: Register, c: Register, element: u8 = 0) -> Instruction { return Instruction{ mnemonic = .VNOR, operand_count = 3, length = 4, ops = {op_vr(a), op_vr(b), op_vr(c, element), {}} } } -emit_vnor_vr_vr_vr :: #force_inline proc(instructions: ^[dynamic]Instruction, a: Register, b: Register, c: Register, element: u8 = 0) { append(instructions, inst_vnor_vr_vr_vr(a, b, c, element)) } +emit_vnor_vr_vr_vr :: #force_inline proc(instructions: ^[dynamic]Instruction, a: Register, b: Register, c: Register, element: u8 = 0) { append_elem(instructions, inst_vnor_vr_vr_vr(a, b, c, element)) } inst_vxor_vr_vr_vr :: #force_inline proc "contextless" (a: Register, b: Register, c: Register, element: u8 = 0) -> Instruction { return Instruction{ mnemonic = .VXOR, operand_count = 3, length = 4, ops = {op_vr(a), op_vr(b), op_vr(c, element), {}} } } -emit_vxor_vr_vr_vr :: #force_inline proc(instructions: ^[dynamic]Instruction, a: Register, b: Register, c: Register, element: u8 = 0) { append(instructions, inst_vxor_vr_vr_vr(a, b, c, element)) } +emit_vxor_vr_vr_vr :: #force_inline proc(instructions: ^[dynamic]Instruction, a: Register, b: Register, c: Register, element: u8 = 0) { append_elem(instructions, inst_vxor_vr_vr_vr(a, b, c, element)) } inst_vnxor_vr_vr_vr :: #force_inline proc "contextless" (a: Register, b: Register, c: Register, element: u8 = 0) -> Instruction { return Instruction{ mnemonic = .VNXOR, operand_count = 3, length = 4, ops = {op_vr(a), op_vr(b), op_vr(c, element), {}} } } -emit_vnxor_vr_vr_vr :: #force_inline proc(instructions: ^[dynamic]Instruction, a: Register, b: Register, c: Register, element: u8 = 0) { append(instructions, inst_vnxor_vr_vr_vr(a, b, c, element)) } +emit_vnxor_vr_vr_vr :: #force_inline proc(instructions: ^[dynamic]Instruction, a: Register, b: Register, c: Register, element: u8 = 0) { append_elem(instructions, inst_vnxor_vr_vr_vr(a, b, c, element)) } inst_vrcp_vr_vr_vr :: #force_inline proc "contextless" (a: Register, b: Register, c: Register, element: u8 = 0) -> Instruction { return Instruction{ mnemonic = .VRCP, operand_count = 3, length = 4, ops = {op_vr(a), op_vr(b), op_vr(c, element), {}} } } -emit_vrcp_vr_vr_vr :: #force_inline proc(instructions: ^[dynamic]Instruction, a: Register, b: Register, c: Register, element: u8 = 0) { append(instructions, inst_vrcp_vr_vr_vr(a, b, c, element)) } +emit_vrcp_vr_vr_vr :: #force_inline proc(instructions: ^[dynamic]Instruction, a: Register, b: Register, c: Register, element: u8 = 0) { append_elem(instructions, inst_vrcp_vr_vr_vr(a, b, c, element)) } inst_vrcpl_vr_vr_vr :: #force_inline proc "contextless" (a: Register, b: Register, c: Register, element: u8 = 0) -> Instruction { return Instruction{ mnemonic = .VRCPL, operand_count = 3, length = 4, ops = {op_vr(a), op_vr(b), op_vr(c, element), {}} } } -emit_vrcpl_vr_vr_vr :: #force_inline proc(instructions: ^[dynamic]Instruction, a: Register, b: Register, c: Register, element: u8 = 0) { append(instructions, inst_vrcpl_vr_vr_vr(a, b, c, element)) } +emit_vrcpl_vr_vr_vr :: #force_inline proc(instructions: ^[dynamic]Instruction, a: Register, b: Register, c: Register, element: u8 = 0) { append_elem(instructions, inst_vrcpl_vr_vr_vr(a, b, c, element)) } inst_vrcph_vr_vr_vr :: #force_inline proc "contextless" (a: Register, b: Register, c: Register, element: u8 = 0) -> Instruction { return Instruction{ mnemonic = .VRCPH, operand_count = 3, length = 4, ops = {op_vr(a), op_vr(b), op_vr(c, element), {}} } } -emit_vrcph_vr_vr_vr :: #force_inline proc(instructions: ^[dynamic]Instruction, a: Register, b: Register, c: Register, element: u8 = 0) { append(instructions, inst_vrcph_vr_vr_vr(a, b, c, element)) } +emit_vrcph_vr_vr_vr :: #force_inline proc(instructions: ^[dynamic]Instruction, a: Register, b: Register, c: Register, element: u8 = 0) { append_elem(instructions, inst_vrcph_vr_vr_vr(a, b, c, element)) } inst_vmov_vr_vr :: #force_inline proc "contextless" (a: Register, b: Register, element: u8 = 0) -> Instruction { return Instruction{ mnemonic = .VMOV, operand_count = 2, length = 4, ops = {op_vr(a), op_vr(b, element), {}, {}} } } -emit_vmov_vr_vr :: #force_inline proc(instructions: ^[dynamic]Instruction, a: Register, b: Register, element: u8 = 0) { append(instructions, inst_vmov_vr_vr(a, b, element)) } +emit_vmov_vr_vr :: #force_inline proc(instructions: ^[dynamic]Instruction, a: Register, b: Register, element: u8 = 0) { append_elem(instructions, inst_vmov_vr_vr(a, b, element)) } inst_vrsq_vr_vr_vr :: #force_inline proc "contextless" (a: Register, b: Register, c: Register, element: u8 = 0) -> Instruction { return Instruction{ mnemonic = .VRSQ, operand_count = 3, length = 4, ops = {op_vr(a), op_vr(b), op_vr(c, element), {}} } } -emit_vrsq_vr_vr_vr :: #force_inline proc(instructions: ^[dynamic]Instruction, a: Register, b: Register, c: Register, element: u8 = 0) { append(instructions, inst_vrsq_vr_vr_vr(a, b, c, element)) } +emit_vrsq_vr_vr_vr :: #force_inline proc(instructions: ^[dynamic]Instruction, a: Register, b: Register, c: Register, element: u8 = 0) { append_elem(instructions, inst_vrsq_vr_vr_vr(a, b, c, element)) } inst_vrsql_vr_vr_vr :: #force_inline proc "contextless" (a: Register, b: Register, c: Register, element: u8 = 0) -> Instruction { return Instruction{ mnemonic = .VRSQL, operand_count = 3, length = 4, ops = {op_vr(a), op_vr(b), op_vr(c, element), {}} } } -emit_vrsql_vr_vr_vr :: #force_inline proc(instructions: ^[dynamic]Instruction, a: Register, b: Register, c: Register, element: u8 = 0) { append(instructions, inst_vrsql_vr_vr_vr(a, b, c, element)) } +emit_vrsql_vr_vr_vr :: #force_inline proc(instructions: ^[dynamic]Instruction, a: Register, b: Register, c: Register, element: u8 = 0) { append_elem(instructions, inst_vrsql_vr_vr_vr(a, b, c, element)) } inst_vrsqh_vr_vr_vr :: #force_inline proc "contextless" (a: Register, b: Register, c: Register, element: u8 = 0) -> Instruction { return Instruction{ mnemonic = .VRSQH, operand_count = 3, length = 4, ops = {op_vr(a), op_vr(b), op_vr(c, element), {}} } } -emit_vrsqh_vr_vr_vr :: #force_inline proc(instructions: ^[dynamic]Instruction, a: Register, b: Register, c: Register, element: u8 = 0) { append(instructions, inst_vrsqh_vr_vr_vr(a, b, c, element)) } +emit_vrsqh_vr_vr_vr :: #force_inline proc(instructions: ^[dynamic]Instruction, a: Register, b: Register, c: Register, element: u8 = 0) { append_elem(instructions, inst_vrsqh_vr_vr_vr(a, b, c, element)) } inst_vnop_none :: #force_inline proc "contextless" () -> Instruction { return Instruction{ mnemonic = .VNOP, operand_count = 0, length = 4, ops = {{}, {}, {}, {}} } } -emit_vnop_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_vnop_none()) } +emit_vnop_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_vnop_none()) } inst_lbv_vr_vmem :: #force_inline proc "contextless" (a: Register, m: Vector_Mem) -> Instruction { return Instruction{ mnemonic = .LBV, operand_count = 2, length = 4, ops = {op_vr(a), op_vmem(m, 16), {}, {}} } } -emit_lbv_vr_vmem :: #force_inline proc(instructions: ^[dynamic]Instruction, a: Register, m: Vector_Mem) { append(instructions, inst_lbv_vr_vmem(a, m)) } +emit_lbv_vr_vmem :: #force_inline proc(instructions: ^[dynamic]Instruction, a: Register, m: Vector_Mem) { append_elem(instructions, inst_lbv_vr_vmem(a, m)) } inst_lsv_vr_vmem :: #force_inline proc "contextless" (a: Register, m: Vector_Mem) -> Instruction { return Instruction{ mnemonic = .LSV, operand_count = 2, length = 4, ops = {op_vr(a), op_vmem(m, 16), {}, {}} } } -emit_lsv_vr_vmem :: #force_inline proc(instructions: ^[dynamic]Instruction, a: Register, m: Vector_Mem) { append(instructions, inst_lsv_vr_vmem(a, m)) } +emit_lsv_vr_vmem :: #force_inline proc(instructions: ^[dynamic]Instruction, a: Register, m: Vector_Mem) { append_elem(instructions, inst_lsv_vr_vmem(a, m)) } inst_llv_vr_vmem :: #force_inline proc "contextless" (a: Register, m: Vector_Mem) -> Instruction { return Instruction{ mnemonic = .LLV, operand_count = 2, length = 4, ops = {op_vr(a), op_vmem(m, 16), {}, {}} } } -emit_llv_vr_vmem :: #force_inline proc(instructions: ^[dynamic]Instruction, a: Register, m: Vector_Mem) { append(instructions, inst_llv_vr_vmem(a, m)) } +emit_llv_vr_vmem :: #force_inline proc(instructions: ^[dynamic]Instruction, a: Register, m: Vector_Mem) { append_elem(instructions, inst_llv_vr_vmem(a, m)) } inst_ldv_vr_vmem :: #force_inline proc "contextless" (a: Register, m: Vector_Mem) -> Instruction { return Instruction{ mnemonic = .LDV, operand_count = 2, length = 4, ops = {op_vr(a), op_vmem(m, 16), {}, {}} } } -emit_ldv_vr_vmem :: #force_inline proc(instructions: ^[dynamic]Instruction, a: Register, m: Vector_Mem) { append(instructions, inst_ldv_vr_vmem(a, m)) } +emit_ldv_vr_vmem :: #force_inline proc(instructions: ^[dynamic]Instruction, a: Register, m: Vector_Mem) { append_elem(instructions, inst_ldv_vr_vmem(a, m)) } inst_lqv_vr_vmem :: #force_inline proc "contextless" (a: Register, m: Vector_Mem) -> Instruction { return Instruction{ mnemonic = .LQV, operand_count = 2, length = 4, ops = {op_vr(a), op_vmem(m, 16), {}, {}} } } -emit_lqv_vr_vmem :: #force_inline proc(instructions: ^[dynamic]Instruction, a: Register, m: Vector_Mem) { append(instructions, inst_lqv_vr_vmem(a, m)) } +emit_lqv_vr_vmem :: #force_inline proc(instructions: ^[dynamic]Instruction, a: Register, m: Vector_Mem) { append_elem(instructions, inst_lqv_vr_vmem(a, m)) } inst_lrv_vr_vmem :: #force_inline proc "contextless" (a: Register, m: Vector_Mem) -> Instruction { return Instruction{ mnemonic = .LRV, operand_count = 2, length = 4, ops = {op_vr(a), op_vmem(m, 16), {}, {}} } } -emit_lrv_vr_vmem :: #force_inline proc(instructions: ^[dynamic]Instruction, a: Register, m: Vector_Mem) { append(instructions, inst_lrv_vr_vmem(a, m)) } +emit_lrv_vr_vmem :: #force_inline proc(instructions: ^[dynamic]Instruction, a: Register, m: Vector_Mem) { append_elem(instructions, inst_lrv_vr_vmem(a, m)) } inst_lpv_vr_vmem :: #force_inline proc "contextless" (a: Register, m: Vector_Mem) -> Instruction { return Instruction{ mnemonic = .LPV, operand_count = 2, length = 4, ops = {op_vr(a), op_vmem(m, 16), {}, {}} } } -emit_lpv_vr_vmem :: #force_inline proc(instructions: ^[dynamic]Instruction, a: Register, m: Vector_Mem) { append(instructions, inst_lpv_vr_vmem(a, m)) } +emit_lpv_vr_vmem :: #force_inline proc(instructions: ^[dynamic]Instruction, a: Register, m: Vector_Mem) { append_elem(instructions, inst_lpv_vr_vmem(a, m)) } inst_luv_vr_vmem :: #force_inline proc "contextless" (a: Register, m: Vector_Mem) -> Instruction { return Instruction{ mnemonic = .LUV, operand_count = 2, length = 4, ops = {op_vr(a), op_vmem(m, 16), {}, {}} } } -emit_luv_vr_vmem :: #force_inline proc(instructions: ^[dynamic]Instruction, a: Register, m: Vector_Mem) { append(instructions, inst_luv_vr_vmem(a, m)) } +emit_luv_vr_vmem :: #force_inline proc(instructions: ^[dynamic]Instruction, a: Register, m: Vector_Mem) { append_elem(instructions, inst_luv_vr_vmem(a, m)) } inst_lhv_vr_vmem :: #force_inline proc "contextless" (a: Register, m: Vector_Mem) -> Instruction { return Instruction{ mnemonic = .LHV, operand_count = 2, length = 4, ops = {op_vr(a), op_vmem(m, 16), {}, {}} } } -emit_lhv_vr_vmem :: #force_inline proc(instructions: ^[dynamic]Instruction, a: Register, m: Vector_Mem) { append(instructions, inst_lhv_vr_vmem(a, m)) } +emit_lhv_vr_vmem :: #force_inline proc(instructions: ^[dynamic]Instruction, a: Register, m: Vector_Mem) { append_elem(instructions, inst_lhv_vr_vmem(a, m)) } inst_lfv_vr_vmem :: #force_inline proc "contextless" (a: Register, m: Vector_Mem) -> Instruction { return Instruction{ mnemonic = .LFV, operand_count = 2, length = 4, ops = {op_vr(a), op_vmem(m, 16), {}, {}} } } -emit_lfv_vr_vmem :: #force_inline proc(instructions: ^[dynamic]Instruction, a: Register, m: Vector_Mem) { append(instructions, inst_lfv_vr_vmem(a, m)) } +emit_lfv_vr_vmem :: #force_inline proc(instructions: ^[dynamic]Instruction, a: Register, m: Vector_Mem) { append_elem(instructions, inst_lfv_vr_vmem(a, m)) } inst_lwv_vr_vmem :: #force_inline proc "contextless" (a: Register, m: Vector_Mem) -> Instruction { return Instruction{ mnemonic = .LWV, operand_count = 2, length = 4, ops = {op_vr(a), op_vmem(m, 16), {}, {}} } } -emit_lwv_vr_vmem :: #force_inline proc(instructions: ^[dynamic]Instruction, a: Register, m: Vector_Mem) { append(instructions, inst_lwv_vr_vmem(a, m)) } +emit_lwv_vr_vmem :: #force_inline proc(instructions: ^[dynamic]Instruction, a: Register, m: Vector_Mem) { append_elem(instructions, inst_lwv_vr_vmem(a, m)) } inst_ltv_vr_vmem :: #force_inline proc "contextless" (a: Register, m: Vector_Mem) -> Instruction { return Instruction{ mnemonic = .LTV, operand_count = 2, length = 4, ops = {op_vr(a), op_vmem(m, 16), {}, {}} } } -emit_ltv_vr_vmem :: #force_inline proc(instructions: ^[dynamic]Instruction, a: Register, m: Vector_Mem) { append(instructions, inst_ltv_vr_vmem(a, m)) } +emit_ltv_vr_vmem :: #force_inline proc(instructions: ^[dynamic]Instruction, a: Register, m: Vector_Mem) { append_elem(instructions, inst_ltv_vr_vmem(a, m)) } inst_sbv_vr_vmem :: #force_inline proc "contextless" (a: Register, m: Vector_Mem) -> Instruction { return Instruction{ mnemonic = .SBV, operand_count = 2, length = 4, ops = {op_vr(a), op_vmem(m, 16), {}, {}} } } -emit_sbv_vr_vmem :: #force_inline proc(instructions: ^[dynamic]Instruction, a: Register, m: Vector_Mem) { append(instructions, inst_sbv_vr_vmem(a, m)) } +emit_sbv_vr_vmem :: #force_inline proc(instructions: ^[dynamic]Instruction, a: Register, m: Vector_Mem) { append_elem(instructions, inst_sbv_vr_vmem(a, m)) } inst_ssv_vr_vmem :: #force_inline proc "contextless" (a: Register, m: Vector_Mem) -> Instruction { return Instruction{ mnemonic = .SSV, operand_count = 2, length = 4, ops = {op_vr(a), op_vmem(m, 16), {}, {}} } } -emit_ssv_vr_vmem :: #force_inline proc(instructions: ^[dynamic]Instruction, a: Register, m: Vector_Mem) { append(instructions, inst_ssv_vr_vmem(a, m)) } +emit_ssv_vr_vmem :: #force_inline proc(instructions: ^[dynamic]Instruction, a: Register, m: Vector_Mem) { append_elem(instructions, inst_ssv_vr_vmem(a, m)) } inst_slv_vr_vmem :: #force_inline proc "contextless" (a: Register, m: Vector_Mem) -> Instruction { return Instruction{ mnemonic = .SLV, operand_count = 2, length = 4, ops = {op_vr(a), op_vmem(m, 16), {}, {}} } } -emit_slv_vr_vmem :: #force_inline proc(instructions: ^[dynamic]Instruction, a: Register, m: Vector_Mem) { append(instructions, inst_slv_vr_vmem(a, m)) } +emit_slv_vr_vmem :: #force_inline proc(instructions: ^[dynamic]Instruction, a: Register, m: Vector_Mem) { append_elem(instructions, inst_slv_vr_vmem(a, m)) } inst_sdv_vr_vmem :: #force_inline proc "contextless" (a: Register, m: Vector_Mem) -> Instruction { return Instruction{ mnemonic = .SDV, operand_count = 2, length = 4, ops = {op_vr(a), op_vmem(m, 16), {}, {}} } } -emit_sdv_vr_vmem :: #force_inline proc(instructions: ^[dynamic]Instruction, a: Register, m: Vector_Mem) { append(instructions, inst_sdv_vr_vmem(a, m)) } +emit_sdv_vr_vmem :: #force_inline proc(instructions: ^[dynamic]Instruction, a: Register, m: Vector_Mem) { append_elem(instructions, inst_sdv_vr_vmem(a, m)) } inst_sqv_vr_vmem :: #force_inline proc "contextless" (a: Register, m: Vector_Mem) -> Instruction { return Instruction{ mnemonic = .SQV, operand_count = 2, length = 4, ops = {op_vr(a), op_vmem(m, 16), {}, {}} } } -emit_sqv_vr_vmem :: #force_inline proc(instructions: ^[dynamic]Instruction, a: Register, m: Vector_Mem) { append(instructions, inst_sqv_vr_vmem(a, m)) } +emit_sqv_vr_vmem :: #force_inline proc(instructions: ^[dynamic]Instruction, a: Register, m: Vector_Mem) { append_elem(instructions, inst_sqv_vr_vmem(a, m)) } inst_srv_vr_vmem :: #force_inline proc "contextless" (a: Register, m: Vector_Mem) -> Instruction { return Instruction{ mnemonic = .SRV, operand_count = 2, length = 4, ops = {op_vr(a), op_vmem(m, 16), {}, {}} } } -emit_srv_vr_vmem :: #force_inline proc(instructions: ^[dynamic]Instruction, a: Register, m: Vector_Mem) { append(instructions, inst_srv_vr_vmem(a, m)) } +emit_srv_vr_vmem :: #force_inline proc(instructions: ^[dynamic]Instruction, a: Register, m: Vector_Mem) { append_elem(instructions, inst_srv_vr_vmem(a, m)) } inst_spv_vr_vmem :: #force_inline proc "contextless" (a: Register, m: Vector_Mem) -> Instruction { return Instruction{ mnemonic = .SPV, operand_count = 2, length = 4, ops = {op_vr(a), op_vmem(m, 16), {}, {}} } } -emit_spv_vr_vmem :: #force_inline proc(instructions: ^[dynamic]Instruction, a: Register, m: Vector_Mem) { append(instructions, inst_spv_vr_vmem(a, m)) } +emit_spv_vr_vmem :: #force_inline proc(instructions: ^[dynamic]Instruction, a: Register, m: Vector_Mem) { append_elem(instructions, inst_spv_vr_vmem(a, m)) } inst_suv_vr_vmem :: #force_inline proc "contextless" (a: Register, m: Vector_Mem) -> Instruction { return Instruction{ mnemonic = .SUV, operand_count = 2, length = 4, ops = {op_vr(a), op_vmem(m, 16), {}, {}} } } -emit_suv_vr_vmem :: #force_inline proc(instructions: ^[dynamic]Instruction, a: Register, m: Vector_Mem) { append(instructions, inst_suv_vr_vmem(a, m)) } +emit_suv_vr_vmem :: #force_inline proc(instructions: ^[dynamic]Instruction, a: Register, m: Vector_Mem) { append_elem(instructions, inst_suv_vr_vmem(a, m)) } inst_shv_vr_vmem :: #force_inline proc "contextless" (a: Register, m: Vector_Mem) -> Instruction { return Instruction{ mnemonic = .SHV, operand_count = 2, length = 4, ops = {op_vr(a), op_vmem(m, 16), {}, {}} } } -emit_shv_vr_vmem :: #force_inline proc(instructions: ^[dynamic]Instruction, a: Register, m: Vector_Mem) { append(instructions, inst_shv_vr_vmem(a, m)) } +emit_shv_vr_vmem :: #force_inline proc(instructions: ^[dynamic]Instruction, a: Register, m: Vector_Mem) { append_elem(instructions, inst_shv_vr_vmem(a, m)) } inst_sfv_vr_vmem :: #force_inline proc "contextless" (a: Register, m: Vector_Mem) -> Instruction { return Instruction{ mnemonic = .SFV, operand_count = 2, length = 4, ops = {op_vr(a), op_vmem(m, 16), {}, {}} } } -emit_sfv_vr_vmem :: #force_inline proc(instructions: ^[dynamic]Instruction, a: Register, m: Vector_Mem) { append(instructions, inst_sfv_vr_vmem(a, m)) } +emit_sfv_vr_vmem :: #force_inline proc(instructions: ^[dynamic]Instruction, a: Register, m: Vector_Mem) { append_elem(instructions, inst_sfv_vr_vmem(a, m)) } inst_swv_vr_vmem :: #force_inline proc "contextless" (a: Register, m: Vector_Mem) -> Instruction { return Instruction{ mnemonic = .SWV, operand_count = 2, length = 4, ops = {op_vr(a), op_vmem(m, 16), {}, {}} } } -emit_swv_vr_vmem :: #force_inline proc(instructions: ^[dynamic]Instruction, a: Register, m: Vector_Mem) { append(instructions, inst_swv_vr_vmem(a, m)) } +emit_swv_vr_vmem :: #force_inline proc(instructions: ^[dynamic]Instruction, a: Register, m: Vector_Mem) { append_elem(instructions, inst_swv_vr_vmem(a, m)) } inst_stv_vr_vmem :: #force_inline proc "contextless" (a: Register, m: Vector_Mem) -> Instruction { return Instruction{ mnemonic = .STV, operand_count = 2, length = 4, ops = {op_vr(a), op_vmem(m, 16), {}, {}} } } -emit_stv_vr_vmem :: #force_inline proc(instructions: ^[dynamic]Instruction, a: Register, m: Vector_Mem) { append(instructions, inst_stv_vr_vmem(a, m)) } +emit_stv_vr_vmem :: #force_inline proc(instructions: ^[dynamic]Instruction, a: Register, m: Vector_Mem) { append_elem(instructions, inst_stv_vr_vmem(a, m)) } // ============================================================================= // Overload Groups diff --git a/core/rexcode/isa/rsp/tools/gen_mnemonic_builders.odin b/core/rexcode/isa/rsp/tools/gen_mnemonic_builders.odin index 94c432a55..786f2be18 100644 --- a/core/rexcode/isa/rsp/tools/gen_mnemonic_builders.odin +++ b/core/rexcode/isa/rsp/tools/gen_mnemonic_builders.odin @@ -408,7 +408,7 @@ generate_emit_proc :: proc(sb: ^strings.Builder, entry: Proc_Entry, pad: int) { strings.write_string(sb, " = 0") } } - strings.write_string(sb, ") { append(instructions, ") + strings.write_string(sb, ") { append_elem(instructions, ") strings.write_string(sb, entry.proc_name) strings.write_string(sb, "(") for p, i in params { diff --git a/core/rexcode/isa/x86/mnemonic_builders.odin b/core/rexcode/isa/x86/mnemonic_builders.odin index ba96b34f9..643b86135 100644 --- a/core/rexcode/isa/x86/mnemonic_builders.odin +++ b/core/rexcode/isa/x86/mnemonic_builders.odin @@ -104,41 +104,41 @@ inst_mov_r64_cr :: #force_inline proc "contextless" (dst: GP inst_mov_cr_r64 :: #force_inline proc "contextless" (dst: CREG, src: GPR64) -> Instruction { return with_hint(Instruction{ mnemonic = .MOV, operand_count = 2, ops = {op_creg(dst), op_gpr64(src), {}, {}} }, 30) } inst_mov_r64_dr :: #force_inline proc "contextless" (dst: GPR64, src: DREG) -> Instruction { return with_hint(Instruction{ mnemonic = .MOV, operand_count = 2, ops = {op_gpr64(dst), op_dreg(src), {}, {}} }, 31) } inst_mov_dr_r64 :: #force_inline proc "contextless" (dst: DREG, src: GPR64) -> Instruction { return with_hint(Instruction{ mnemonic = .MOV, operand_count = 2, ops = {op_dreg(dst), op_gpr64(src), {}, {}} }, 32) } -emit_mov_r8_r8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR8, src: GPR8) { append(instructions, inst_mov_r8_r8(dst, src)) } -emit_mov_m8_r8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem8, src: GPR8) { append(instructions, inst_mov_m8_r8(dst, src)) } -emit_mov_r16_r16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR16, src: GPR16) { append(instructions, inst_mov_r16_r16(dst, src)) } -emit_mov_m16_r16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem16, src: GPR16) { append(instructions, inst_mov_m16_r16(dst, src)) } -emit_mov_r32_r32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: GPR32) { append(instructions, inst_mov_r32_r32(dst, src)) } -emit_mov_m32_r32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem32, src: GPR32) { append(instructions, inst_mov_m32_r32(dst, src)) } -emit_mov_r64_r64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: GPR64) { append(instructions, inst_mov_r64_r64(dst, src)) } -emit_mov_m64_r64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem64, src: GPR64) { append(instructions, inst_mov_m64_r64(dst, src)) } -emit_mov_r8_m8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR8, src: Mem8) { append(instructions, inst_mov_r8_m8(dst, src)) } -emit_mov_r16_m16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR16, src: Mem16) { append(instructions, inst_mov_r16_m16(dst, src)) } -emit_mov_r32_m32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: Mem32) { append(instructions, inst_mov_r32_m32(dst, src)) } -emit_mov_r64_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: Mem64) { append(instructions, inst_mov_r64_m64(dst, src)) } -emit_mov_r8_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR8, imm: i8) { append(instructions, inst_mov_r8_imm8(dst, imm)) } -emit_mov_r16_imm16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR16, imm: i16) { append(instructions, inst_mov_r16_imm16(dst, imm)) } -emit_mov_r32_imm32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, imm: i32) { append(instructions, inst_mov_r32_imm32(dst, imm)) } -emit_mov_r64_imm64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, imm: i64) { append(instructions, inst_mov_r64_imm64(dst, imm)) } -emit_mov_m8_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem8, imm: i8) { append(instructions, inst_mov_m8_imm8(dst, imm)) } -emit_mov_m16_imm16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem16, imm: i16) { append(instructions, inst_mov_m16_imm16(dst, imm)) } -emit_mov_m32_imm32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem32, imm: i32) { append(instructions, inst_mov_m32_imm32(dst, imm)) } -emit_mov_r64_imm32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, imm: i32) { append(instructions, inst_mov_r64_imm32(dst, imm)) } -emit_mov_m64_imm32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem64, imm: i32) { append(instructions, inst_mov_m64_imm32(dst, imm)) } -emit_mov_r16_sreg :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR16, src: SREG) { append(instructions, inst_mov_r16_sreg(dst, src)) } -emit_mov_m16_sreg :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem16, src: SREG) { append(instructions, inst_mov_m16_sreg(dst, src)) } -emit_mov_r64_sreg :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: SREG) { append(instructions, inst_mov_r64_sreg(dst, src)) } -emit_mov_m64_sreg :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem64, src: SREG) { append(instructions, inst_mov_m64_sreg(dst, src)) } -emit_mov_sreg_r16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: SREG, src: GPR16) { append(instructions, inst_mov_sreg_r16(dst, src)) } -emit_mov_sreg_m16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: SREG, src: Mem16) { append(instructions, inst_mov_sreg_m16(dst, src)) } -emit_mov_sreg_r64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: SREG, src: GPR64) { append(instructions, inst_mov_sreg_r64(dst, src)) } -emit_mov_sreg_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: SREG, src: Mem64) { append(instructions, inst_mov_sreg_m64(dst, src)) } -emit_mov_r64_cr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: CREG) { append(instructions, inst_mov_r64_cr(dst, src)) } -emit_mov_cr_r64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: CREG, src: GPR64) { append(instructions, inst_mov_cr_r64(dst, src)) } -emit_mov_r64_dr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: DREG) { append(instructions, inst_mov_r64_dr(dst, src)) } -emit_mov_dr_r64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: DREG, src: GPR64) { append(instructions, inst_mov_dr_r64(dst, src)) } +emit_mov_r8_r8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR8, src: GPR8) { append_elem(instructions, inst_mov_r8_r8(dst, src)) } +emit_mov_m8_r8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem8, src: GPR8) { append_elem(instructions, inst_mov_m8_r8(dst, src)) } +emit_mov_r16_r16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR16, src: GPR16) { append_elem(instructions, inst_mov_r16_r16(dst, src)) } +emit_mov_m16_r16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem16, src: GPR16) { append_elem(instructions, inst_mov_m16_r16(dst, src)) } +emit_mov_r32_r32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: GPR32) { append_elem(instructions, inst_mov_r32_r32(dst, src)) } +emit_mov_m32_r32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem32, src: GPR32) { append_elem(instructions, inst_mov_m32_r32(dst, src)) } +emit_mov_r64_r64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: GPR64) { append_elem(instructions, inst_mov_r64_r64(dst, src)) } +emit_mov_m64_r64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem64, src: GPR64) { append_elem(instructions, inst_mov_m64_r64(dst, src)) } +emit_mov_r8_m8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR8, src: Mem8) { append_elem(instructions, inst_mov_r8_m8(dst, src)) } +emit_mov_r16_m16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR16, src: Mem16) { append_elem(instructions, inst_mov_r16_m16(dst, src)) } +emit_mov_r32_m32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: Mem32) { append_elem(instructions, inst_mov_r32_m32(dst, src)) } +emit_mov_r64_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: Mem64) { append_elem(instructions, inst_mov_r64_m64(dst, src)) } +emit_mov_r8_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR8, imm: i8) { append_elem(instructions, inst_mov_r8_imm8(dst, imm)) } +emit_mov_r16_imm16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR16, imm: i16) { append_elem(instructions, inst_mov_r16_imm16(dst, imm)) } +emit_mov_r32_imm32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, imm: i32) { append_elem(instructions, inst_mov_r32_imm32(dst, imm)) } +emit_mov_r64_imm64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, imm: i64) { append_elem(instructions, inst_mov_r64_imm64(dst, imm)) } +emit_mov_m8_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem8, imm: i8) { append_elem(instructions, inst_mov_m8_imm8(dst, imm)) } +emit_mov_m16_imm16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem16, imm: i16) { append_elem(instructions, inst_mov_m16_imm16(dst, imm)) } +emit_mov_m32_imm32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem32, imm: i32) { append_elem(instructions, inst_mov_m32_imm32(dst, imm)) } +emit_mov_r64_imm32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, imm: i32) { append_elem(instructions, inst_mov_r64_imm32(dst, imm)) } +emit_mov_m64_imm32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem64, imm: i32) { append_elem(instructions, inst_mov_m64_imm32(dst, imm)) } +emit_mov_r16_sreg :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR16, src: SREG) { append_elem(instructions, inst_mov_r16_sreg(dst, src)) } +emit_mov_m16_sreg :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem16, src: SREG) { append_elem(instructions, inst_mov_m16_sreg(dst, src)) } +emit_mov_r64_sreg :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: SREG) { append_elem(instructions, inst_mov_r64_sreg(dst, src)) } +emit_mov_m64_sreg :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem64, src: SREG) { append_elem(instructions, inst_mov_m64_sreg(dst, src)) } +emit_mov_sreg_r16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: SREG, src: GPR16) { append_elem(instructions, inst_mov_sreg_r16(dst, src)) } +emit_mov_sreg_m16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: SREG, src: Mem16) { append_elem(instructions, inst_mov_sreg_m16(dst, src)) } +emit_mov_sreg_r64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: SREG, src: GPR64) { append_elem(instructions, inst_mov_sreg_r64(dst, src)) } +emit_mov_sreg_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: SREG, src: Mem64) { append_elem(instructions, inst_mov_sreg_m64(dst, src)) } +emit_mov_r64_cr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: CREG) { append_elem(instructions, inst_mov_r64_cr(dst, src)) } +emit_mov_cr_r64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: CREG, src: GPR64) { append_elem(instructions, inst_mov_cr_r64(dst, src)) } +emit_mov_r64_dr :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: DREG) { append_elem(instructions, inst_mov_r64_dr(dst, src)) } +emit_mov_dr_r64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: DREG, src: GPR64) { append_elem(instructions, inst_mov_dr_r64(dst, src)) } inst_movabs_r64_imm64 :: #force_inline proc "contextless" (dst: GPR64, imm: i64) -> Instruction { return with_hint(Instruction{ mnemonic = .MOVABS, operand_count = 2, ops = {op_gpr64(dst), op_imm64(imm), {}, {}} }, 33) } -emit_movabs_r64_imm64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, imm: i64) { append(instructions, inst_movabs_r64_imm64(dst, imm)) } +emit_movabs_r64_imm64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, imm: i64) { append_elem(instructions, inst_movabs_r64_imm64(dst, imm)) } inst_movzx_r16_r8 :: #force_inline proc "contextless" (dst: GPR16, src: GPR8) -> Instruction { return with_hint(Instruction{ mnemonic = .MOVZX, operand_count = 2, ops = {op_gpr16(dst), op_gpr8(src), {}, {}} }, 42) } inst_movzx_r16_m8 :: #force_inline proc "contextless" (dst: GPR16, src: Mem8) -> Instruction { return with_hint(Instruction{ mnemonic = .MOVZX, operand_count = 2, ops = {op_gpr16(dst), op_mem(src.mem, 1), {}, {}} }, 42) } inst_movzx_r32_r8 :: #force_inline proc "contextless" (dst: GPR32, src: GPR8) -> Instruction { return with_hint(Instruction{ mnemonic = .MOVZX, operand_count = 2, ops = {op_gpr32(dst), op_gpr8(src), {}, {}} }, 43) } @@ -149,16 +149,16 @@ inst_movzx_r32_r16 :: #force_inline proc "contextless" (dst: GP inst_movzx_r32_m16 :: #force_inline proc "contextless" (dst: GPR32, src: Mem16) -> Instruction { return with_hint(Instruction{ mnemonic = .MOVZX, operand_count = 2, ops = {op_gpr32(dst), op_mem(src.mem, 2), {}, {}} }, 45) } inst_movzx_r64_r16 :: #force_inline proc "contextless" (dst: GPR64, src: GPR16) -> Instruction { return with_hint(Instruction{ mnemonic = .MOVZX, operand_count = 2, ops = {op_gpr64(dst), op_gpr16(src), {}, {}} }, 46) } inst_movzx_r64_m16 :: #force_inline proc "contextless" (dst: GPR64, src: Mem16) -> Instruction { return with_hint(Instruction{ mnemonic = .MOVZX, operand_count = 2, ops = {op_gpr64(dst), op_mem(src.mem, 2), {}, {}} }, 46) } -emit_movzx_r16_r8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR16, src: GPR8) { append(instructions, inst_movzx_r16_r8(dst, src)) } -emit_movzx_r16_m8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR16, src: Mem8) { append(instructions, inst_movzx_r16_m8(dst, src)) } -emit_movzx_r32_r8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: GPR8) { append(instructions, inst_movzx_r32_r8(dst, src)) } -emit_movzx_r32_m8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: Mem8) { append(instructions, inst_movzx_r32_m8(dst, src)) } -emit_movzx_r64_r8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: GPR8) { append(instructions, inst_movzx_r64_r8(dst, src)) } -emit_movzx_r64_m8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: Mem8) { append(instructions, inst_movzx_r64_m8(dst, src)) } -emit_movzx_r32_r16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: GPR16) { append(instructions, inst_movzx_r32_r16(dst, src)) } -emit_movzx_r32_m16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: Mem16) { append(instructions, inst_movzx_r32_m16(dst, src)) } -emit_movzx_r64_r16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: GPR16) { append(instructions, inst_movzx_r64_r16(dst, src)) } -emit_movzx_r64_m16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: Mem16) { append(instructions, inst_movzx_r64_m16(dst, src)) } +emit_movzx_r16_r8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR16, src: GPR8) { append_elem(instructions, inst_movzx_r16_r8(dst, src)) } +emit_movzx_r16_m8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR16, src: Mem8) { append_elem(instructions, inst_movzx_r16_m8(dst, src)) } +emit_movzx_r32_r8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: GPR8) { append_elem(instructions, inst_movzx_r32_r8(dst, src)) } +emit_movzx_r32_m8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: Mem8) { append_elem(instructions, inst_movzx_r32_m8(dst, src)) } +emit_movzx_r64_r8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: GPR8) { append_elem(instructions, inst_movzx_r64_r8(dst, src)) } +emit_movzx_r64_m8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: Mem8) { append_elem(instructions, inst_movzx_r64_m8(dst, src)) } +emit_movzx_r32_r16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: GPR16) { append_elem(instructions, inst_movzx_r32_r16(dst, src)) } +emit_movzx_r32_m16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: Mem16) { append_elem(instructions, inst_movzx_r32_m16(dst, src)) } +emit_movzx_r64_r16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: GPR16) { append_elem(instructions, inst_movzx_r64_r16(dst, src)) } +emit_movzx_r64_m16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: Mem16) { append_elem(instructions, inst_movzx_r64_m16(dst, src)) } inst_movsx_r16_r8 :: #force_inline proc "contextless" (dst: GPR16, src: GPR8) -> Instruction { return with_hint(Instruction{ mnemonic = .MOVSX, operand_count = 2, ops = {op_gpr16(dst), op_gpr8(src), {}, {}} }, 47) } inst_movsx_r16_m8 :: #force_inline proc "contextless" (dst: GPR16, src: Mem8) -> Instruction { return with_hint(Instruction{ mnemonic = .MOVSX, operand_count = 2, ops = {op_gpr16(dst), op_mem(src.mem, 1), {}, {}} }, 47) } inst_movsx_r32_r8 :: #force_inline proc "contextless" (dst: GPR32, src: GPR8) -> Instruction { return with_hint(Instruction{ mnemonic = .MOVSX, operand_count = 2, ops = {op_gpr32(dst), op_gpr8(src), {}, {}} }, 48) } @@ -169,20 +169,20 @@ inst_movsx_r32_r16 :: #force_inline proc "contextless" (dst: GP inst_movsx_r32_m16 :: #force_inline proc "contextless" (dst: GPR32, src: Mem16) -> Instruction { return with_hint(Instruction{ mnemonic = .MOVSX, operand_count = 2, ops = {op_gpr32(dst), op_mem(src.mem, 2), {}, {}} }, 50) } inst_movsx_r64_r16 :: #force_inline proc "contextless" (dst: GPR64, src: GPR16) -> Instruction { return with_hint(Instruction{ mnemonic = .MOVSX, operand_count = 2, ops = {op_gpr64(dst), op_gpr16(src), {}, {}} }, 51) } inst_movsx_r64_m16 :: #force_inline proc "contextless" (dst: GPR64, src: Mem16) -> Instruction { return with_hint(Instruction{ mnemonic = .MOVSX, operand_count = 2, ops = {op_gpr64(dst), op_mem(src.mem, 2), {}, {}} }, 51) } -emit_movsx_r16_r8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR16, src: GPR8) { append(instructions, inst_movsx_r16_r8(dst, src)) } -emit_movsx_r16_m8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR16, src: Mem8) { append(instructions, inst_movsx_r16_m8(dst, src)) } -emit_movsx_r32_r8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: GPR8) { append(instructions, inst_movsx_r32_r8(dst, src)) } -emit_movsx_r32_m8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: Mem8) { append(instructions, inst_movsx_r32_m8(dst, src)) } -emit_movsx_r64_r8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: GPR8) { append(instructions, inst_movsx_r64_r8(dst, src)) } -emit_movsx_r64_m8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: Mem8) { append(instructions, inst_movsx_r64_m8(dst, src)) } -emit_movsx_r32_r16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: GPR16) { append(instructions, inst_movsx_r32_r16(dst, src)) } -emit_movsx_r32_m16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: Mem16) { append(instructions, inst_movsx_r32_m16(dst, src)) } -emit_movsx_r64_r16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: GPR16) { append(instructions, inst_movsx_r64_r16(dst, src)) } -emit_movsx_r64_m16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: Mem16) { append(instructions, inst_movsx_r64_m16(dst, src)) } +emit_movsx_r16_r8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR16, src: GPR8) { append_elem(instructions, inst_movsx_r16_r8(dst, src)) } +emit_movsx_r16_m8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR16, src: Mem8) { append_elem(instructions, inst_movsx_r16_m8(dst, src)) } +emit_movsx_r32_r8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: GPR8) { append_elem(instructions, inst_movsx_r32_r8(dst, src)) } +emit_movsx_r32_m8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: Mem8) { append_elem(instructions, inst_movsx_r32_m8(dst, src)) } +emit_movsx_r64_r8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: GPR8) { append_elem(instructions, inst_movsx_r64_r8(dst, src)) } +emit_movsx_r64_m8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: Mem8) { append_elem(instructions, inst_movsx_r64_m8(dst, src)) } +emit_movsx_r32_r16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: GPR16) { append_elem(instructions, inst_movsx_r32_r16(dst, src)) } +emit_movsx_r32_m16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: Mem16) { append_elem(instructions, inst_movsx_r32_m16(dst, src)) } +emit_movsx_r64_r16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: GPR16) { append_elem(instructions, inst_movsx_r64_r16(dst, src)) } +emit_movsx_r64_m16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: Mem16) { append_elem(instructions, inst_movsx_r64_m16(dst, src)) } inst_movsxd_r64_r32 :: #force_inline proc "contextless" (dst: GPR64, src: GPR32) -> Instruction { return with_hint(Instruction{ mnemonic = .MOVSXD, operand_count = 2, ops = {op_gpr64(dst), op_gpr32(src), {}, {}} }, 52) } inst_movsxd_r64_m32 :: #force_inline proc "contextless" (dst: GPR64, src: Mem32) -> Instruction { return with_hint(Instruction{ mnemonic = .MOVSXD, operand_count = 2, ops = {op_gpr64(dst), op_mem(src.mem, 4), {}, {}} }, 52) } -emit_movsxd_r64_r32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: GPR32) { append(instructions, inst_movsxd_r64_r32(dst, src)) } -emit_movsxd_r64_m32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: Mem32) { append(instructions, inst_movsxd_r64_m32(dst, src)) } +emit_movsxd_r64_r32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: GPR32) { append_elem(instructions, inst_movsxd_r64_r32(dst, src)) } +emit_movsxd_r64_m32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: Mem32) { append_elem(instructions, inst_movsxd_r64_m32(dst, src)) } inst_xchg_r16 :: #force_inline proc "contextless" (dst: GPR16) -> Instruction { return with_hint(Instruction{ mnemonic = .XCHG, operand_count = 1, ops = {op_gpr16(dst), {}, {}, {}} }, 53) } inst_xchg_r32 :: #force_inline proc "contextless" (dst: GPR32) -> Instruction { return with_hint(Instruction{ mnemonic = .XCHG, operand_count = 1, ops = {op_gpr32(dst), {}, {}, {}} }, 54) } inst_xchg_r64 :: #force_inline proc "contextless" (dst: GPR64) -> Instruction { return with_hint(Instruction{ mnemonic = .XCHG, operand_count = 1, ops = {op_gpr64(dst), {}, {}, {}} }, 55) } @@ -194,17 +194,17 @@ inst_xchg_r32_r32 :: #force_inline proc "contextless" (dst: GP inst_xchg_m32_r32 :: #force_inline proc "contextless" (dst: Mem32, src: GPR32) -> Instruction { return with_hint(Instruction{ mnemonic = .XCHG, operand_count = 2, ops = {op_mem(dst.mem, 4), op_gpr32(src), {}, {}} }, 58) } inst_xchg_r64_r64 :: #force_inline proc "contextless" (dst: GPR64, src: GPR64) -> Instruction { return with_hint(Instruction{ mnemonic = .XCHG, operand_count = 2, ops = {op_gpr64(dst), op_gpr64(src), {}, {}} }, 59) } inst_xchg_m64_r64 :: #force_inline proc "contextless" (dst: Mem64, src: GPR64) -> Instruction { return with_hint(Instruction{ mnemonic = .XCHG, operand_count = 2, ops = {op_mem(dst.mem, 8), op_gpr64(src), {}, {}} }, 59) } -emit_xchg_r16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR16) { append(instructions, inst_xchg_r16(dst)) } -emit_xchg_r32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32) { append(instructions, inst_xchg_r32(dst)) } -emit_xchg_r64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64) { append(instructions, inst_xchg_r64(dst)) } -emit_xchg_r8_r8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR8, src: GPR8) { append(instructions, inst_xchg_r8_r8(dst, src)) } -emit_xchg_m8_r8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem8, src: GPR8) { append(instructions, inst_xchg_m8_r8(dst, src)) } -emit_xchg_r16_r16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR16, src: GPR16) { append(instructions, inst_xchg_r16_r16(dst, src)) } -emit_xchg_m16_r16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem16, src: GPR16) { append(instructions, inst_xchg_m16_r16(dst, src)) } -emit_xchg_r32_r32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: GPR32) { append(instructions, inst_xchg_r32_r32(dst, src)) } -emit_xchg_m32_r32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem32, src: GPR32) { append(instructions, inst_xchg_m32_r32(dst, src)) } -emit_xchg_r64_r64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: GPR64) { append(instructions, inst_xchg_r64_r64(dst, src)) } -emit_xchg_m64_r64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem64, src: GPR64) { append(instructions, inst_xchg_m64_r64(dst, src)) } +emit_xchg_r16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR16) { append_elem(instructions, inst_xchg_r16(dst)) } +emit_xchg_r32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32) { append_elem(instructions, inst_xchg_r32(dst)) } +emit_xchg_r64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64) { append_elem(instructions, inst_xchg_r64(dst)) } +emit_xchg_r8_r8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR8, src: GPR8) { append_elem(instructions, inst_xchg_r8_r8(dst, src)) } +emit_xchg_m8_r8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem8, src: GPR8) { append_elem(instructions, inst_xchg_m8_r8(dst, src)) } +emit_xchg_r16_r16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR16, src: GPR16) { append_elem(instructions, inst_xchg_r16_r16(dst, src)) } +emit_xchg_m16_r16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem16, src: GPR16) { append_elem(instructions, inst_xchg_m16_r16(dst, src)) } +emit_xchg_r32_r32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: GPR32) { append_elem(instructions, inst_xchg_r32_r32(dst, src)) } +emit_xchg_m32_r32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem32, src: GPR32) { append_elem(instructions, inst_xchg_m32_r32(dst, src)) } +emit_xchg_r64_r64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: GPR64) { append_elem(instructions, inst_xchg_r64_r64(dst, src)) } +emit_xchg_m64_r64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem64, src: GPR64) { append_elem(instructions, inst_xchg_m64_r64(dst, src)) } inst_push_r16 :: #force_inline proc "contextless" (dst: GPR16) -> Instruction { return with_hint(Instruction{ mnemonic = .PUSH, operand_count = 1, ops = {op_gpr16(dst), {}, {}, {}} }, 60) } inst_push_r64 :: #force_inline proc "contextless" (dst: GPR64) -> Instruction { return with_hint(Instruction{ mnemonic = .PUSH, operand_count = 1, ops = {op_gpr64(dst), {}, {}, {}} }, 61) } inst_push_m16 :: #force_inline proc "contextless" (dst: Mem16) -> Instruction { return with_hint(Instruction{ mnemonic = .PUSH, operand_count = 1, ops = {op_mem(dst.mem, 2), {}, {}, {}} }, 62) } @@ -212,29 +212,29 @@ inst_push_m64 :: #force_inline proc "contextless" (dst: Me inst_push_imm16 :: #force_inline proc "contextless" (imm: i16) -> Instruction { return with_hint(Instruction{ mnemonic = .PUSH, operand_count = 1, ops = {op_imm16(imm), {}, {}, {}} }, 65) } inst_push_imm32 :: #force_inline proc "contextless" (imm: i32) -> Instruction { return with_hint(Instruction{ mnemonic = .PUSH, operand_count = 1, ops = {op_imm32(imm), {}, {}, {}} }, 66) } inst_push_sreg :: #force_inline proc "contextless" (dst: SREG) -> Instruction { return with_hint(Instruction{ mnemonic = .PUSH, operand_count = 1, ops = {op_sreg(dst), {}, {}, {}} }, 67) } -emit_push_r16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR16) { append(instructions, inst_push_r16(dst)) } -emit_push_r64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64) { append(instructions, inst_push_r64(dst)) } -emit_push_m16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem16) { append(instructions, inst_push_m16(dst)) } -emit_push_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem64) { append(instructions, inst_push_m64(dst)) } -emit_push_imm16 :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i16) { append(instructions, inst_push_imm16(imm)) } -emit_push_imm32 :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i32) { append(instructions, inst_push_imm32(imm)) } -emit_push_sreg :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: SREG) { append(instructions, inst_push_sreg(dst)) } +emit_push_r16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR16) { append_elem(instructions, inst_push_r16(dst)) } +emit_push_r64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64) { append_elem(instructions, inst_push_r64(dst)) } +emit_push_m16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem16) { append_elem(instructions, inst_push_m16(dst)) } +emit_push_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem64) { append_elem(instructions, inst_push_m64(dst)) } +emit_push_imm16 :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i16) { append_elem(instructions, inst_push_imm16(imm)) } +emit_push_imm32 :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i32) { append_elem(instructions, inst_push_imm32(imm)) } +emit_push_sreg :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: SREG) { append_elem(instructions, inst_push_sreg(dst)) } inst_pop_r16 :: #force_inline proc "contextless" (dst: GPR16) -> Instruction { return with_hint(Instruction{ mnemonic = .POP, operand_count = 1, ops = {op_gpr16(dst), {}, {}, {}} }, 69) } inst_pop_r64 :: #force_inline proc "contextless" (dst: GPR64) -> Instruction { return with_hint(Instruction{ mnemonic = .POP, operand_count = 1, ops = {op_gpr64(dst), {}, {}, {}} }, 70) } inst_pop_m16 :: #force_inline proc "contextless" (dst: Mem16) -> Instruction { return with_hint(Instruction{ mnemonic = .POP, operand_count = 1, ops = {op_mem(dst.mem, 2), {}, {}, {}} }, 71) } inst_pop_m64 :: #force_inline proc "contextless" (dst: Mem64) -> Instruction { return with_hint(Instruction{ mnemonic = .POP, operand_count = 1, ops = {op_mem(dst.mem, 8), {}, {}, {}} }, 72) } inst_pop_sreg :: #force_inline proc "contextless" (dst: SREG) -> Instruction { return with_hint(Instruction{ mnemonic = .POP, operand_count = 1, ops = {op_sreg(dst), {}, {}, {}} }, 73) } -emit_pop_r16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR16) { append(instructions, inst_pop_r16(dst)) } -emit_pop_r64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64) { append(instructions, inst_pop_r64(dst)) } -emit_pop_m16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem16) { append(instructions, inst_pop_m16(dst)) } -emit_pop_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem64) { append(instructions, inst_pop_m64(dst)) } -emit_pop_sreg :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: SREG) { append(instructions, inst_pop_sreg(dst)) } +emit_pop_r16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR16) { append_elem(instructions, inst_pop_r16(dst)) } +emit_pop_r64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64) { append_elem(instructions, inst_pop_r64(dst)) } +emit_pop_m16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem16) { append_elem(instructions, inst_pop_m16(dst)) } +emit_pop_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem64) { append_elem(instructions, inst_pop_m64(dst)) } +emit_pop_sreg :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: SREG) { append_elem(instructions, inst_pop_sreg(dst)) } inst_lea_r16_m :: #force_inline proc "contextless" (dst: GPR16, src: Memory) -> Instruction { return with_hint(Instruction{ mnemonic = .LEA, operand_count = 2, ops = {op_gpr16(dst), op_mem(src, 0), {}, {}} }, 75) } inst_lea_r32_m :: #force_inline proc "contextless" (dst: GPR32, src: Memory) -> Instruction { return with_hint(Instruction{ mnemonic = .LEA, operand_count = 2, ops = {op_gpr32(dst), op_mem(src, 0), {}, {}} }, 76) } inst_lea_r64_m :: #force_inline proc "contextless" (dst: GPR64, src: Memory) -> Instruction { return with_hint(Instruction{ mnemonic = .LEA, operand_count = 2, ops = {op_gpr64(dst), op_mem(src, 0), {}, {}} }, 77) } -emit_lea_r16_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR16, src: Memory) { append(instructions, inst_lea_r16_m(dst, src)) } -emit_lea_r32_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: Memory) { append(instructions, inst_lea_r32_m(dst, src)) } -emit_lea_r64_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: Memory) { append(instructions, inst_lea_r64_m(dst, src)) } +emit_lea_r16_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR16, src: Memory) { append_elem(instructions, inst_lea_r16_m(dst, src)) } +emit_lea_r32_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: Memory) { append_elem(instructions, inst_lea_r32_m(dst, src)) } +emit_lea_r64_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: Memory) { append_elem(instructions, inst_lea_r64_m(dst, src)) } inst_add_r8_r8 :: #force_inline proc "contextless" (dst: GPR8, src: GPR8) -> Instruction { return with_hint(Instruction{ mnemonic = .ADD, operand_count = 2, ops = {op_gpr8(dst), op_gpr8(src), {}, {}} }, 78) } inst_add_m8_r8 :: #force_inline proc "contextless" (dst: Mem8, src: GPR8) -> Instruction { return with_hint(Instruction{ mnemonic = .ADD, operand_count = 2, ops = {op_mem(dst.mem, 1), op_gpr8(src), {}, {}} }, 78) } inst_add_r16_r16 :: #force_inline proc "contextless" (dst: GPR16, src: GPR16) -> Instruction { return with_hint(Instruction{ mnemonic = .ADD, operand_count = 2, ops = {op_gpr16(dst), op_gpr16(src), {}, {}} }, 79) } @@ -258,29 +258,29 @@ inst_add_r32_imm32 :: #force_inline proc "contextless" (dst: GP inst_add_m32_imm32 :: #force_inline proc "contextless" (dst: Mem32, imm: i32) -> Instruction { return with_hint(Instruction{ mnemonic = .ADD, operand_count = 2, ops = {op_mem(dst.mem, 4), op_imm32(imm), {}, {}} }, 92) } inst_add_r64_imm32 :: #force_inline proc "contextless" (dst: GPR64, imm: i32) -> Instruction { return with_hint(Instruction{ mnemonic = .ADD, operand_count = 2, ops = {op_gpr64(dst), op_imm32(imm), {}, {}} }, 93) } inst_add_m64_imm32 :: #force_inline proc "contextless" (dst: Mem64, imm: i32) -> Instruction { return with_hint(Instruction{ mnemonic = .ADD, operand_count = 2, ops = {op_mem(dst.mem, 8), op_imm32(imm), {}, {}} }, 93) } -emit_add_r8_r8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR8, src: GPR8) { append(instructions, inst_add_r8_r8(dst, src)) } -emit_add_m8_r8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem8, src: GPR8) { append(instructions, inst_add_m8_r8(dst, src)) } -emit_add_r16_r16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR16, src: GPR16) { append(instructions, inst_add_r16_r16(dst, src)) } -emit_add_m16_r16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem16, src: GPR16) { append(instructions, inst_add_m16_r16(dst, src)) } -emit_add_r32_r32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: GPR32) { append(instructions, inst_add_r32_r32(dst, src)) } -emit_add_m32_r32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem32, src: GPR32) { append(instructions, inst_add_m32_r32(dst, src)) } -emit_add_r64_r64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: GPR64) { append(instructions, inst_add_r64_r64(dst, src)) } -emit_add_m64_r64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem64, src: GPR64) { append(instructions, inst_add_m64_r64(dst, src)) } -emit_add_r8_m8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR8, src: Mem8) { append(instructions, inst_add_r8_m8(dst, src)) } -emit_add_r16_m16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR16, src: Mem16) { append(instructions, inst_add_r16_m16(dst, src)) } -emit_add_r32_m32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: Mem32) { append(instructions, inst_add_r32_m32(dst, src)) } -emit_add_r64_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: Mem64) { append(instructions, inst_add_r64_m64(dst, src)) } -emit_add_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i8) { append(instructions, inst_add_imm8(imm)) } -emit_add_imm16 :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i16) { append(instructions, inst_add_imm16(imm)) } -emit_add_imm32 :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i32) { append(instructions, inst_add_imm32(imm)) } -emit_add_r8_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR8, imm: i8) { append(instructions, inst_add_r8_imm8(dst, imm)) } -emit_add_m8_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem8, imm: i8) { append(instructions, inst_add_m8_imm8(dst, imm)) } -emit_add_r16_imm16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR16, imm: i16) { append(instructions, inst_add_r16_imm16(dst, imm)) } -emit_add_m16_imm16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem16, imm: i16) { append(instructions, inst_add_m16_imm16(dst, imm)) } -emit_add_r32_imm32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, imm: i32) { append(instructions, inst_add_r32_imm32(dst, imm)) } -emit_add_m32_imm32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem32, imm: i32) { append(instructions, inst_add_m32_imm32(dst, imm)) } -emit_add_r64_imm32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, imm: i32) { append(instructions, inst_add_r64_imm32(dst, imm)) } -emit_add_m64_imm32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem64, imm: i32) { append(instructions, inst_add_m64_imm32(dst, imm)) } +emit_add_r8_r8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR8, src: GPR8) { append_elem(instructions, inst_add_r8_r8(dst, src)) } +emit_add_m8_r8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem8, src: GPR8) { append_elem(instructions, inst_add_m8_r8(dst, src)) } +emit_add_r16_r16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR16, src: GPR16) { append_elem(instructions, inst_add_r16_r16(dst, src)) } +emit_add_m16_r16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem16, src: GPR16) { append_elem(instructions, inst_add_m16_r16(dst, src)) } +emit_add_r32_r32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: GPR32) { append_elem(instructions, inst_add_r32_r32(dst, src)) } +emit_add_m32_r32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem32, src: GPR32) { append_elem(instructions, inst_add_m32_r32(dst, src)) } +emit_add_r64_r64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: GPR64) { append_elem(instructions, inst_add_r64_r64(dst, src)) } +emit_add_m64_r64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem64, src: GPR64) { append_elem(instructions, inst_add_m64_r64(dst, src)) } +emit_add_r8_m8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR8, src: Mem8) { append_elem(instructions, inst_add_r8_m8(dst, src)) } +emit_add_r16_m16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR16, src: Mem16) { append_elem(instructions, inst_add_r16_m16(dst, src)) } +emit_add_r32_m32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: Mem32) { append_elem(instructions, inst_add_r32_m32(dst, src)) } +emit_add_r64_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: Mem64) { append_elem(instructions, inst_add_r64_m64(dst, src)) } +emit_add_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i8) { append_elem(instructions, inst_add_imm8(imm)) } +emit_add_imm16 :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i16) { append_elem(instructions, inst_add_imm16(imm)) } +emit_add_imm32 :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i32) { append_elem(instructions, inst_add_imm32(imm)) } +emit_add_r8_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR8, imm: i8) { append_elem(instructions, inst_add_r8_imm8(dst, imm)) } +emit_add_m8_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem8, imm: i8) { append_elem(instructions, inst_add_m8_imm8(dst, imm)) } +emit_add_r16_imm16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR16, imm: i16) { append_elem(instructions, inst_add_r16_imm16(dst, imm)) } +emit_add_m16_imm16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem16, imm: i16) { append_elem(instructions, inst_add_m16_imm16(dst, imm)) } +emit_add_r32_imm32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, imm: i32) { append_elem(instructions, inst_add_r32_imm32(dst, imm)) } +emit_add_m32_imm32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem32, imm: i32) { append_elem(instructions, inst_add_m32_imm32(dst, imm)) } +emit_add_r64_imm32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, imm: i32) { append_elem(instructions, inst_add_r64_imm32(dst, imm)) } +emit_add_m64_imm32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem64, imm: i32) { append_elem(instructions, inst_add_m64_imm32(dst, imm)) } inst_adc_r8_r8 :: #force_inline proc "contextless" (dst: GPR8, src: GPR8) -> Instruction { return with_hint(Instruction{ mnemonic = .ADC, operand_count = 2, ops = {op_gpr8(dst), op_gpr8(src), {}, {}} }, 97) } inst_adc_m8_r8 :: #force_inline proc "contextless" (dst: Mem8, src: GPR8) -> Instruction { return with_hint(Instruction{ mnemonic = .ADC, operand_count = 2, ops = {op_mem(dst.mem, 1), op_gpr8(src), {}, {}} }, 97) } inst_adc_r16_r16 :: #force_inline proc "contextless" (dst: GPR16, src: GPR16) -> Instruction { return with_hint(Instruction{ mnemonic = .ADC, operand_count = 2, ops = {op_gpr16(dst), op_gpr16(src), {}, {}} }, 98) } @@ -304,29 +304,29 @@ inst_adc_r32_imm32 :: #force_inline proc "contextless" (dst: GP inst_adc_m32_imm32 :: #force_inline proc "contextless" (dst: Mem32, imm: i32) -> Instruction { return with_hint(Instruction{ mnemonic = .ADC, operand_count = 2, ops = {op_mem(dst.mem, 4), op_imm32(imm), {}, {}} }, 111) } inst_adc_r64_imm32 :: #force_inline proc "contextless" (dst: GPR64, imm: i32) -> Instruction { return with_hint(Instruction{ mnemonic = .ADC, operand_count = 2, ops = {op_gpr64(dst), op_imm32(imm), {}, {}} }, 112) } inst_adc_m64_imm32 :: #force_inline proc "contextless" (dst: Mem64, imm: i32) -> Instruction { return with_hint(Instruction{ mnemonic = .ADC, operand_count = 2, ops = {op_mem(dst.mem, 8), op_imm32(imm), {}, {}} }, 112) } -emit_adc_r8_r8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR8, src: GPR8) { append(instructions, inst_adc_r8_r8(dst, src)) } -emit_adc_m8_r8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem8, src: GPR8) { append(instructions, inst_adc_m8_r8(dst, src)) } -emit_adc_r16_r16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR16, src: GPR16) { append(instructions, inst_adc_r16_r16(dst, src)) } -emit_adc_m16_r16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem16, src: GPR16) { append(instructions, inst_adc_m16_r16(dst, src)) } -emit_adc_r32_r32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: GPR32) { append(instructions, inst_adc_r32_r32(dst, src)) } -emit_adc_m32_r32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem32, src: GPR32) { append(instructions, inst_adc_m32_r32(dst, src)) } -emit_adc_r64_r64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: GPR64) { append(instructions, inst_adc_r64_r64(dst, src)) } -emit_adc_m64_r64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem64, src: GPR64) { append(instructions, inst_adc_m64_r64(dst, src)) } -emit_adc_r8_m8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR8, src: Mem8) { append(instructions, inst_adc_r8_m8(dst, src)) } -emit_adc_r16_m16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR16, src: Mem16) { append(instructions, inst_adc_r16_m16(dst, src)) } -emit_adc_r32_m32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: Mem32) { append(instructions, inst_adc_r32_m32(dst, src)) } -emit_adc_r64_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: Mem64) { append(instructions, inst_adc_r64_m64(dst, src)) } -emit_adc_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i8) { append(instructions, inst_adc_imm8(imm)) } -emit_adc_imm16 :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i16) { append(instructions, inst_adc_imm16(imm)) } -emit_adc_imm32 :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i32) { append(instructions, inst_adc_imm32(imm)) } -emit_adc_r8_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR8, imm: i8) { append(instructions, inst_adc_r8_imm8(dst, imm)) } -emit_adc_m8_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem8, imm: i8) { append(instructions, inst_adc_m8_imm8(dst, imm)) } -emit_adc_r16_imm16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR16, imm: i16) { append(instructions, inst_adc_r16_imm16(dst, imm)) } -emit_adc_m16_imm16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem16, imm: i16) { append(instructions, inst_adc_m16_imm16(dst, imm)) } -emit_adc_r32_imm32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, imm: i32) { append(instructions, inst_adc_r32_imm32(dst, imm)) } -emit_adc_m32_imm32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem32, imm: i32) { append(instructions, inst_adc_m32_imm32(dst, imm)) } -emit_adc_r64_imm32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, imm: i32) { append(instructions, inst_adc_r64_imm32(dst, imm)) } -emit_adc_m64_imm32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem64, imm: i32) { append(instructions, inst_adc_m64_imm32(dst, imm)) } +emit_adc_r8_r8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR8, src: GPR8) { append_elem(instructions, inst_adc_r8_r8(dst, src)) } +emit_adc_m8_r8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem8, src: GPR8) { append_elem(instructions, inst_adc_m8_r8(dst, src)) } +emit_adc_r16_r16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR16, src: GPR16) { append_elem(instructions, inst_adc_r16_r16(dst, src)) } +emit_adc_m16_r16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem16, src: GPR16) { append_elem(instructions, inst_adc_m16_r16(dst, src)) } +emit_adc_r32_r32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: GPR32) { append_elem(instructions, inst_adc_r32_r32(dst, src)) } +emit_adc_m32_r32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem32, src: GPR32) { append_elem(instructions, inst_adc_m32_r32(dst, src)) } +emit_adc_r64_r64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: GPR64) { append_elem(instructions, inst_adc_r64_r64(dst, src)) } +emit_adc_m64_r64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem64, src: GPR64) { append_elem(instructions, inst_adc_m64_r64(dst, src)) } +emit_adc_r8_m8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR8, src: Mem8) { append_elem(instructions, inst_adc_r8_m8(dst, src)) } +emit_adc_r16_m16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR16, src: Mem16) { append_elem(instructions, inst_adc_r16_m16(dst, src)) } +emit_adc_r32_m32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: Mem32) { append_elem(instructions, inst_adc_r32_m32(dst, src)) } +emit_adc_r64_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: Mem64) { append_elem(instructions, inst_adc_r64_m64(dst, src)) } +emit_adc_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i8) { append_elem(instructions, inst_adc_imm8(imm)) } +emit_adc_imm16 :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i16) { append_elem(instructions, inst_adc_imm16(imm)) } +emit_adc_imm32 :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i32) { append_elem(instructions, inst_adc_imm32(imm)) } +emit_adc_r8_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR8, imm: i8) { append_elem(instructions, inst_adc_r8_imm8(dst, imm)) } +emit_adc_m8_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem8, imm: i8) { append_elem(instructions, inst_adc_m8_imm8(dst, imm)) } +emit_adc_r16_imm16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR16, imm: i16) { append_elem(instructions, inst_adc_r16_imm16(dst, imm)) } +emit_adc_m16_imm16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem16, imm: i16) { append_elem(instructions, inst_adc_m16_imm16(dst, imm)) } +emit_adc_r32_imm32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, imm: i32) { append_elem(instructions, inst_adc_r32_imm32(dst, imm)) } +emit_adc_m32_imm32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem32, imm: i32) { append_elem(instructions, inst_adc_m32_imm32(dst, imm)) } +emit_adc_r64_imm32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, imm: i32) { append_elem(instructions, inst_adc_r64_imm32(dst, imm)) } +emit_adc_m64_imm32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem64, imm: i32) { append_elem(instructions, inst_adc_m64_imm32(dst, imm)) } inst_sub_r8_r8 :: #force_inline proc "contextless" (dst: GPR8, src: GPR8) -> Instruction { return with_hint(Instruction{ mnemonic = .SUB, operand_count = 2, ops = {op_gpr8(dst), op_gpr8(src), {}, {}} }, 116) } inst_sub_m8_r8 :: #force_inline proc "contextless" (dst: Mem8, src: GPR8) -> Instruction { return with_hint(Instruction{ mnemonic = .SUB, operand_count = 2, ops = {op_mem(dst.mem, 1), op_gpr8(src), {}, {}} }, 116) } inst_sub_r16_r16 :: #force_inline proc "contextless" (dst: GPR16, src: GPR16) -> Instruction { return with_hint(Instruction{ mnemonic = .SUB, operand_count = 2, ops = {op_gpr16(dst), op_gpr16(src), {}, {}} }, 117) } @@ -350,29 +350,29 @@ inst_sub_r32_imm32 :: #force_inline proc "contextless" (dst: GP inst_sub_m32_imm32 :: #force_inline proc "contextless" (dst: Mem32, imm: i32) -> Instruction { return with_hint(Instruction{ mnemonic = .SUB, operand_count = 2, ops = {op_mem(dst.mem, 4), op_imm32(imm), {}, {}} }, 130) } inst_sub_r64_imm32 :: #force_inline proc "contextless" (dst: GPR64, imm: i32) -> Instruction { return with_hint(Instruction{ mnemonic = .SUB, operand_count = 2, ops = {op_gpr64(dst), op_imm32(imm), {}, {}} }, 131) } inst_sub_m64_imm32 :: #force_inline proc "contextless" (dst: Mem64, imm: i32) -> Instruction { return with_hint(Instruction{ mnemonic = .SUB, operand_count = 2, ops = {op_mem(dst.mem, 8), op_imm32(imm), {}, {}} }, 131) } -emit_sub_r8_r8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR8, src: GPR8) { append(instructions, inst_sub_r8_r8(dst, src)) } -emit_sub_m8_r8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem8, src: GPR8) { append(instructions, inst_sub_m8_r8(dst, src)) } -emit_sub_r16_r16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR16, src: GPR16) { append(instructions, inst_sub_r16_r16(dst, src)) } -emit_sub_m16_r16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem16, src: GPR16) { append(instructions, inst_sub_m16_r16(dst, src)) } -emit_sub_r32_r32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: GPR32) { append(instructions, inst_sub_r32_r32(dst, src)) } -emit_sub_m32_r32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem32, src: GPR32) { append(instructions, inst_sub_m32_r32(dst, src)) } -emit_sub_r64_r64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: GPR64) { append(instructions, inst_sub_r64_r64(dst, src)) } -emit_sub_m64_r64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem64, src: GPR64) { append(instructions, inst_sub_m64_r64(dst, src)) } -emit_sub_r8_m8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR8, src: Mem8) { append(instructions, inst_sub_r8_m8(dst, src)) } -emit_sub_r16_m16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR16, src: Mem16) { append(instructions, inst_sub_r16_m16(dst, src)) } -emit_sub_r32_m32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: Mem32) { append(instructions, inst_sub_r32_m32(dst, src)) } -emit_sub_r64_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: Mem64) { append(instructions, inst_sub_r64_m64(dst, src)) } -emit_sub_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i8) { append(instructions, inst_sub_imm8(imm)) } -emit_sub_imm16 :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i16) { append(instructions, inst_sub_imm16(imm)) } -emit_sub_imm32 :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i32) { append(instructions, inst_sub_imm32(imm)) } -emit_sub_r8_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR8, imm: i8) { append(instructions, inst_sub_r8_imm8(dst, imm)) } -emit_sub_m8_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem8, imm: i8) { append(instructions, inst_sub_m8_imm8(dst, imm)) } -emit_sub_r16_imm16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR16, imm: i16) { append(instructions, inst_sub_r16_imm16(dst, imm)) } -emit_sub_m16_imm16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem16, imm: i16) { append(instructions, inst_sub_m16_imm16(dst, imm)) } -emit_sub_r32_imm32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, imm: i32) { append(instructions, inst_sub_r32_imm32(dst, imm)) } -emit_sub_m32_imm32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem32, imm: i32) { append(instructions, inst_sub_m32_imm32(dst, imm)) } -emit_sub_r64_imm32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, imm: i32) { append(instructions, inst_sub_r64_imm32(dst, imm)) } -emit_sub_m64_imm32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem64, imm: i32) { append(instructions, inst_sub_m64_imm32(dst, imm)) } +emit_sub_r8_r8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR8, src: GPR8) { append_elem(instructions, inst_sub_r8_r8(dst, src)) } +emit_sub_m8_r8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem8, src: GPR8) { append_elem(instructions, inst_sub_m8_r8(dst, src)) } +emit_sub_r16_r16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR16, src: GPR16) { append_elem(instructions, inst_sub_r16_r16(dst, src)) } +emit_sub_m16_r16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem16, src: GPR16) { append_elem(instructions, inst_sub_m16_r16(dst, src)) } +emit_sub_r32_r32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: GPR32) { append_elem(instructions, inst_sub_r32_r32(dst, src)) } +emit_sub_m32_r32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem32, src: GPR32) { append_elem(instructions, inst_sub_m32_r32(dst, src)) } +emit_sub_r64_r64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: GPR64) { append_elem(instructions, inst_sub_r64_r64(dst, src)) } +emit_sub_m64_r64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem64, src: GPR64) { append_elem(instructions, inst_sub_m64_r64(dst, src)) } +emit_sub_r8_m8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR8, src: Mem8) { append_elem(instructions, inst_sub_r8_m8(dst, src)) } +emit_sub_r16_m16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR16, src: Mem16) { append_elem(instructions, inst_sub_r16_m16(dst, src)) } +emit_sub_r32_m32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: Mem32) { append_elem(instructions, inst_sub_r32_m32(dst, src)) } +emit_sub_r64_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: Mem64) { append_elem(instructions, inst_sub_r64_m64(dst, src)) } +emit_sub_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i8) { append_elem(instructions, inst_sub_imm8(imm)) } +emit_sub_imm16 :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i16) { append_elem(instructions, inst_sub_imm16(imm)) } +emit_sub_imm32 :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i32) { append_elem(instructions, inst_sub_imm32(imm)) } +emit_sub_r8_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR8, imm: i8) { append_elem(instructions, inst_sub_r8_imm8(dst, imm)) } +emit_sub_m8_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem8, imm: i8) { append_elem(instructions, inst_sub_m8_imm8(dst, imm)) } +emit_sub_r16_imm16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR16, imm: i16) { append_elem(instructions, inst_sub_r16_imm16(dst, imm)) } +emit_sub_m16_imm16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem16, imm: i16) { append_elem(instructions, inst_sub_m16_imm16(dst, imm)) } +emit_sub_r32_imm32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, imm: i32) { append_elem(instructions, inst_sub_r32_imm32(dst, imm)) } +emit_sub_m32_imm32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem32, imm: i32) { append_elem(instructions, inst_sub_m32_imm32(dst, imm)) } +emit_sub_r64_imm32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, imm: i32) { append_elem(instructions, inst_sub_r64_imm32(dst, imm)) } +emit_sub_m64_imm32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem64, imm: i32) { append_elem(instructions, inst_sub_m64_imm32(dst, imm)) } inst_sbb_r8_r8 :: #force_inline proc "contextless" (dst: GPR8, src: GPR8) -> Instruction { return with_hint(Instruction{ mnemonic = .SBB, operand_count = 2, ops = {op_gpr8(dst), op_gpr8(src), {}, {}} }, 135) } inst_sbb_m8_r8 :: #force_inline proc "contextless" (dst: Mem8, src: GPR8) -> Instruction { return with_hint(Instruction{ mnemonic = .SBB, operand_count = 2, ops = {op_mem(dst.mem, 1), op_gpr8(src), {}, {}} }, 135) } inst_sbb_r16_r16 :: #force_inline proc "contextless" (dst: GPR16, src: GPR16) -> Instruction { return with_hint(Instruction{ mnemonic = .SBB, operand_count = 2, ops = {op_gpr16(dst), op_gpr16(src), {}, {}} }, 136) } @@ -396,29 +396,29 @@ inst_sbb_r32_imm32 :: #force_inline proc "contextless" (dst: GP inst_sbb_m32_imm32 :: #force_inline proc "contextless" (dst: Mem32, imm: i32) -> Instruction { return with_hint(Instruction{ mnemonic = .SBB, operand_count = 2, ops = {op_mem(dst.mem, 4), op_imm32(imm), {}, {}} }, 149) } inst_sbb_r64_imm32 :: #force_inline proc "contextless" (dst: GPR64, imm: i32) -> Instruction { return with_hint(Instruction{ mnemonic = .SBB, operand_count = 2, ops = {op_gpr64(dst), op_imm32(imm), {}, {}} }, 150) } inst_sbb_m64_imm32 :: #force_inline proc "contextless" (dst: Mem64, imm: i32) -> Instruction { return with_hint(Instruction{ mnemonic = .SBB, operand_count = 2, ops = {op_mem(dst.mem, 8), op_imm32(imm), {}, {}} }, 150) } -emit_sbb_r8_r8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR8, src: GPR8) { append(instructions, inst_sbb_r8_r8(dst, src)) } -emit_sbb_m8_r8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem8, src: GPR8) { append(instructions, inst_sbb_m8_r8(dst, src)) } -emit_sbb_r16_r16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR16, src: GPR16) { append(instructions, inst_sbb_r16_r16(dst, src)) } -emit_sbb_m16_r16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem16, src: GPR16) { append(instructions, inst_sbb_m16_r16(dst, src)) } -emit_sbb_r32_r32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: GPR32) { append(instructions, inst_sbb_r32_r32(dst, src)) } -emit_sbb_m32_r32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem32, src: GPR32) { append(instructions, inst_sbb_m32_r32(dst, src)) } -emit_sbb_r64_r64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: GPR64) { append(instructions, inst_sbb_r64_r64(dst, src)) } -emit_sbb_m64_r64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem64, src: GPR64) { append(instructions, inst_sbb_m64_r64(dst, src)) } -emit_sbb_r8_m8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR8, src: Mem8) { append(instructions, inst_sbb_r8_m8(dst, src)) } -emit_sbb_r16_m16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR16, src: Mem16) { append(instructions, inst_sbb_r16_m16(dst, src)) } -emit_sbb_r32_m32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: Mem32) { append(instructions, inst_sbb_r32_m32(dst, src)) } -emit_sbb_r64_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: Mem64) { append(instructions, inst_sbb_r64_m64(dst, src)) } -emit_sbb_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i8) { append(instructions, inst_sbb_imm8(imm)) } -emit_sbb_imm16 :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i16) { append(instructions, inst_sbb_imm16(imm)) } -emit_sbb_imm32 :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i32) { append(instructions, inst_sbb_imm32(imm)) } -emit_sbb_r8_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR8, imm: i8) { append(instructions, inst_sbb_r8_imm8(dst, imm)) } -emit_sbb_m8_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem8, imm: i8) { append(instructions, inst_sbb_m8_imm8(dst, imm)) } -emit_sbb_r16_imm16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR16, imm: i16) { append(instructions, inst_sbb_r16_imm16(dst, imm)) } -emit_sbb_m16_imm16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem16, imm: i16) { append(instructions, inst_sbb_m16_imm16(dst, imm)) } -emit_sbb_r32_imm32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, imm: i32) { append(instructions, inst_sbb_r32_imm32(dst, imm)) } -emit_sbb_m32_imm32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem32, imm: i32) { append(instructions, inst_sbb_m32_imm32(dst, imm)) } -emit_sbb_r64_imm32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, imm: i32) { append(instructions, inst_sbb_r64_imm32(dst, imm)) } -emit_sbb_m64_imm32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem64, imm: i32) { append(instructions, inst_sbb_m64_imm32(dst, imm)) } +emit_sbb_r8_r8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR8, src: GPR8) { append_elem(instructions, inst_sbb_r8_r8(dst, src)) } +emit_sbb_m8_r8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem8, src: GPR8) { append_elem(instructions, inst_sbb_m8_r8(dst, src)) } +emit_sbb_r16_r16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR16, src: GPR16) { append_elem(instructions, inst_sbb_r16_r16(dst, src)) } +emit_sbb_m16_r16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem16, src: GPR16) { append_elem(instructions, inst_sbb_m16_r16(dst, src)) } +emit_sbb_r32_r32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: GPR32) { append_elem(instructions, inst_sbb_r32_r32(dst, src)) } +emit_sbb_m32_r32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem32, src: GPR32) { append_elem(instructions, inst_sbb_m32_r32(dst, src)) } +emit_sbb_r64_r64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: GPR64) { append_elem(instructions, inst_sbb_r64_r64(dst, src)) } +emit_sbb_m64_r64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem64, src: GPR64) { append_elem(instructions, inst_sbb_m64_r64(dst, src)) } +emit_sbb_r8_m8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR8, src: Mem8) { append_elem(instructions, inst_sbb_r8_m8(dst, src)) } +emit_sbb_r16_m16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR16, src: Mem16) { append_elem(instructions, inst_sbb_r16_m16(dst, src)) } +emit_sbb_r32_m32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: Mem32) { append_elem(instructions, inst_sbb_r32_m32(dst, src)) } +emit_sbb_r64_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: Mem64) { append_elem(instructions, inst_sbb_r64_m64(dst, src)) } +emit_sbb_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i8) { append_elem(instructions, inst_sbb_imm8(imm)) } +emit_sbb_imm16 :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i16) { append_elem(instructions, inst_sbb_imm16(imm)) } +emit_sbb_imm32 :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i32) { append_elem(instructions, inst_sbb_imm32(imm)) } +emit_sbb_r8_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR8, imm: i8) { append_elem(instructions, inst_sbb_r8_imm8(dst, imm)) } +emit_sbb_m8_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem8, imm: i8) { append_elem(instructions, inst_sbb_m8_imm8(dst, imm)) } +emit_sbb_r16_imm16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR16, imm: i16) { append_elem(instructions, inst_sbb_r16_imm16(dst, imm)) } +emit_sbb_m16_imm16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem16, imm: i16) { append_elem(instructions, inst_sbb_m16_imm16(dst, imm)) } +emit_sbb_r32_imm32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, imm: i32) { append_elem(instructions, inst_sbb_r32_imm32(dst, imm)) } +emit_sbb_m32_imm32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem32, imm: i32) { append_elem(instructions, inst_sbb_m32_imm32(dst, imm)) } +emit_sbb_r64_imm32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, imm: i32) { append_elem(instructions, inst_sbb_r64_imm32(dst, imm)) } +emit_sbb_m64_imm32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem64, imm: i32) { append_elem(instructions, inst_sbb_m64_imm32(dst, imm)) } inst_mul_r8 :: #force_inline proc "contextless" (dst: GPR8) -> Instruction { return with_hint(Instruction{ mnemonic = .MUL, operand_count = 1, ops = {op_gpr8(dst), {}, {}, {}} }, 154) } inst_mul_m8 :: #force_inline proc "contextless" (dst: Mem8) -> Instruction { return with_hint(Instruction{ mnemonic = .MUL, operand_count = 1, ops = {op_mem(dst.mem, 1), {}, {}, {}} }, 154) } inst_mul_r16 :: #force_inline proc "contextless" (dst: GPR16) -> Instruction { return with_hint(Instruction{ mnemonic = .MUL, operand_count = 1, ops = {op_gpr16(dst), {}, {}, {}} }, 155) } @@ -427,14 +427,14 @@ inst_mul_r32 :: #force_inline proc "contextless" (dst: GP inst_mul_m32 :: #force_inline proc "contextless" (dst: Mem32) -> Instruction { return with_hint(Instruction{ mnemonic = .MUL, operand_count = 1, ops = {op_mem(dst.mem, 4), {}, {}, {}} }, 156) } inst_mul_r64 :: #force_inline proc "contextless" (dst: GPR64) -> Instruction { return with_hint(Instruction{ mnemonic = .MUL, operand_count = 1, ops = {op_gpr64(dst), {}, {}, {}} }, 157) } inst_mul_m64 :: #force_inline proc "contextless" (dst: Mem64) -> Instruction { return with_hint(Instruction{ mnemonic = .MUL, operand_count = 1, ops = {op_mem(dst.mem, 8), {}, {}, {}} }, 157) } -emit_mul_r8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR8) { append(instructions, inst_mul_r8(dst)) } -emit_mul_m8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem8) { append(instructions, inst_mul_m8(dst)) } -emit_mul_r16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR16) { append(instructions, inst_mul_r16(dst)) } -emit_mul_m16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem16) { append(instructions, inst_mul_m16(dst)) } -emit_mul_r32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32) { append(instructions, inst_mul_r32(dst)) } -emit_mul_m32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem32) { append(instructions, inst_mul_m32(dst)) } -emit_mul_r64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64) { append(instructions, inst_mul_r64(dst)) } -emit_mul_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem64) { append(instructions, inst_mul_m64(dst)) } +emit_mul_r8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR8) { append_elem(instructions, inst_mul_r8(dst)) } +emit_mul_m8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem8) { append_elem(instructions, inst_mul_m8(dst)) } +emit_mul_r16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR16) { append_elem(instructions, inst_mul_r16(dst)) } +emit_mul_m16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem16) { append_elem(instructions, inst_mul_m16(dst)) } +emit_mul_r32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32) { append_elem(instructions, inst_mul_r32(dst)) } +emit_mul_m32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem32) { append_elem(instructions, inst_mul_m32(dst)) } +emit_mul_r64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64) { append_elem(instructions, inst_mul_r64(dst)) } +emit_mul_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem64) { append_elem(instructions, inst_mul_m64(dst)) } inst_imul_r8 :: #force_inline proc "contextless" (dst: GPR8) -> Instruction { return with_hint(Instruction{ mnemonic = .IMUL, operand_count = 1, ops = {op_gpr8(dst), {}, {}, {}} }, 158) } inst_imul_m8 :: #force_inline proc "contextless" (dst: Mem8) -> Instruction { return with_hint(Instruction{ mnemonic = .IMUL, operand_count = 1, ops = {op_mem(dst.mem, 1), {}, {}, {}} }, 158) } inst_imul_r16 :: #force_inline proc "contextless" (dst: GPR16) -> Instruction { return with_hint(Instruction{ mnemonic = .IMUL, operand_count = 1, ops = {op_gpr16(dst), {}, {}, {}} }, 159) } @@ -455,26 +455,26 @@ inst_imul_r32_r32_imm32 :: #force_inline proc "contextless" (dst: GP inst_imul_r32_m32_imm32 :: #force_inline proc "contextless" (dst: GPR32, src: Mem32, imm: i32) -> Instruction { return with_hint(Instruction{ mnemonic = .IMUL, operand_count = 3, ops = {op_gpr32(dst), op_mem(src.mem, 4), op_imm32(imm), {}} }, 169) } inst_imul_r64_r64_imm32 :: #force_inline proc "contextless" (dst: GPR64, src: GPR64, imm: i32) -> Instruction { return with_hint(Instruction{ mnemonic = .IMUL, operand_count = 3, ops = {op_gpr64(dst), op_gpr64(src), op_imm32(imm), {}} }, 170) } inst_imul_r64_m64_imm32 :: #force_inline proc "contextless" (dst: GPR64, src: Mem64, imm: i32) -> Instruction { return with_hint(Instruction{ mnemonic = .IMUL, operand_count = 3, ops = {op_gpr64(dst), op_mem(src.mem, 8), op_imm32(imm), {}} }, 170) } -emit_imul_r8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR8) { append(instructions, inst_imul_r8(dst)) } -emit_imul_m8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem8) { append(instructions, inst_imul_m8(dst)) } -emit_imul_r16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR16) { append(instructions, inst_imul_r16(dst)) } -emit_imul_m16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem16) { append(instructions, inst_imul_m16(dst)) } -emit_imul_r32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32) { append(instructions, inst_imul_r32(dst)) } -emit_imul_m32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem32) { append(instructions, inst_imul_m32(dst)) } -emit_imul_r64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64) { append(instructions, inst_imul_r64(dst)) } -emit_imul_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem64) { append(instructions, inst_imul_m64(dst)) } -emit_imul_r16_r16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR16, src: GPR16) { append(instructions, inst_imul_r16_r16(dst, src)) } -emit_imul_r16_m16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR16, src: Mem16) { append(instructions, inst_imul_r16_m16(dst, src)) } -emit_imul_r32_r32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: GPR32) { append(instructions, inst_imul_r32_r32(dst, src)) } -emit_imul_r32_m32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: Mem32) { append(instructions, inst_imul_r32_m32(dst, src)) } -emit_imul_r64_r64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: GPR64) { append(instructions, inst_imul_r64_r64(dst, src)) } -emit_imul_r64_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: Mem64) { append(instructions, inst_imul_r64_m64(dst, src)) } -emit_imul_r16_r16_imm16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR16, src: GPR16, imm: i16) { append(instructions, inst_imul_r16_r16_imm16(dst, src, imm)) } -emit_imul_r16_m16_imm16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR16, src: Mem16, imm: i16) { append(instructions, inst_imul_r16_m16_imm16(dst, src, imm)) } -emit_imul_r32_r32_imm32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: GPR32, imm: i32) { append(instructions, inst_imul_r32_r32_imm32(dst, src, imm)) } -emit_imul_r32_m32_imm32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: Mem32, imm: i32) { append(instructions, inst_imul_r32_m32_imm32(dst, src, imm)) } -emit_imul_r64_r64_imm32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: GPR64, imm: i32) { append(instructions, inst_imul_r64_r64_imm32(dst, src, imm)) } -emit_imul_r64_m64_imm32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: Mem64, imm: i32) { append(instructions, inst_imul_r64_m64_imm32(dst, src, imm)) } +emit_imul_r8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR8) { append_elem(instructions, inst_imul_r8(dst)) } +emit_imul_m8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem8) { append_elem(instructions, inst_imul_m8(dst)) } +emit_imul_r16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR16) { append_elem(instructions, inst_imul_r16(dst)) } +emit_imul_m16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem16) { append_elem(instructions, inst_imul_m16(dst)) } +emit_imul_r32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32) { append_elem(instructions, inst_imul_r32(dst)) } +emit_imul_m32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem32) { append_elem(instructions, inst_imul_m32(dst)) } +emit_imul_r64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64) { append_elem(instructions, inst_imul_r64(dst)) } +emit_imul_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem64) { append_elem(instructions, inst_imul_m64(dst)) } +emit_imul_r16_r16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR16, src: GPR16) { append_elem(instructions, inst_imul_r16_r16(dst, src)) } +emit_imul_r16_m16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR16, src: Mem16) { append_elem(instructions, inst_imul_r16_m16(dst, src)) } +emit_imul_r32_r32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: GPR32) { append_elem(instructions, inst_imul_r32_r32(dst, src)) } +emit_imul_r32_m32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: Mem32) { append_elem(instructions, inst_imul_r32_m32(dst, src)) } +emit_imul_r64_r64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: GPR64) { append_elem(instructions, inst_imul_r64_r64(dst, src)) } +emit_imul_r64_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: Mem64) { append_elem(instructions, inst_imul_r64_m64(dst, src)) } +emit_imul_r16_r16_imm16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR16, src: GPR16, imm: i16) { append_elem(instructions, inst_imul_r16_r16_imm16(dst, src, imm)) } +emit_imul_r16_m16_imm16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR16, src: Mem16, imm: i16) { append_elem(instructions, inst_imul_r16_m16_imm16(dst, src, imm)) } +emit_imul_r32_r32_imm32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: GPR32, imm: i32) { append_elem(instructions, inst_imul_r32_r32_imm32(dst, src, imm)) } +emit_imul_r32_m32_imm32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: Mem32, imm: i32) { append_elem(instructions, inst_imul_r32_m32_imm32(dst, src, imm)) } +emit_imul_r64_r64_imm32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: GPR64, imm: i32) { append_elem(instructions, inst_imul_r64_r64_imm32(dst, src, imm)) } +emit_imul_r64_m64_imm32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: Mem64, imm: i32) { append_elem(instructions, inst_imul_r64_m64_imm32(dst, src, imm)) } inst_div_r8 :: #force_inline proc "contextless" (dst: GPR8) -> Instruction { return with_hint(Instruction{ mnemonic = .DIV, operand_count = 1, ops = {op_gpr8(dst), {}, {}, {}} }, 171) } inst_div_m8 :: #force_inline proc "contextless" (dst: Mem8) -> Instruction { return with_hint(Instruction{ mnemonic = .DIV, operand_count = 1, ops = {op_mem(dst.mem, 1), {}, {}, {}} }, 171) } inst_div_r16 :: #force_inline proc "contextless" (dst: GPR16) -> Instruction { return with_hint(Instruction{ mnemonic = .DIV, operand_count = 1, ops = {op_gpr16(dst), {}, {}, {}} }, 172) } @@ -483,14 +483,14 @@ inst_div_r32 :: #force_inline proc "contextless" (dst: GP inst_div_m32 :: #force_inline proc "contextless" (dst: Mem32) -> Instruction { return with_hint(Instruction{ mnemonic = .DIV, operand_count = 1, ops = {op_mem(dst.mem, 4), {}, {}, {}} }, 173) } inst_div_r64 :: #force_inline proc "contextless" (dst: GPR64) -> Instruction { return with_hint(Instruction{ mnemonic = .DIV, operand_count = 1, ops = {op_gpr64(dst), {}, {}, {}} }, 174) } inst_div_m64 :: #force_inline proc "contextless" (dst: Mem64) -> Instruction { return with_hint(Instruction{ mnemonic = .DIV, operand_count = 1, ops = {op_mem(dst.mem, 8), {}, {}, {}} }, 174) } -emit_div_r8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR8) { append(instructions, inst_div_r8(dst)) } -emit_div_m8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem8) { append(instructions, inst_div_m8(dst)) } -emit_div_r16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR16) { append(instructions, inst_div_r16(dst)) } -emit_div_m16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem16) { append(instructions, inst_div_m16(dst)) } -emit_div_r32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32) { append(instructions, inst_div_r32(dst)) } -emit_div_m32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem32) { append(instructions, inst_div_m32(dst)) } -emit_div_r64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64) { append(instructions, inst_div_r64(dst)) } -emit_div_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem64) { append(instructions, inst_div_m64(dst)) } +emit_div_r8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR8) { append_elem(instructions, inst_div_r8(dst)) } +emit_div_m8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem8) { append_elem(instructions, inst_div_m8(dst)) } +emit_div_r16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR16) { append_elem(instructions, inst_div_r16(dst)) } +emit_div_m16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem16) { append_elem(instructions, inst_div_m16(dst)) } +emit_div_r32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32) { append_elem(instructions, inst_div_r32(dst)) } +emit_div_m32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem32) { append_elem(instructions, inst_div_m32(dst)) } +emit_div_r64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64) { append_elem(instructions, inst_div_r64(dst)) } +emit_div_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem64) { append_elem(instructions, inst_div_m64(dst)) } inst_idiv_r8 :: #force_inline proc "contextless" (dst: GPR8) -> Instruction { return with_hint(Instruction{ mnemonic = .IDIV, operand_count = 1, ops = {op_gpr8(dst), {}, {}, {}} }, 175) } inst_idiv_m8 :: #force_inline proc "contextless" (dst: Mem8) -> Instruction { return with_hint(Instruction{ mnemonic = .IDIV, operand_count = 1, ops = {op_mem(dst.mem, 1), {}, {}, {}} }, 175) } inst_idiv_r16 :: #force_inline proc "contextless" (dst: GPR16) -> Instruction { return with_hint(Instruction{ mnemonic = .IDIV, operand_count = 1, ops = {op_gpr16(dst), {}, {}, {}} }, 176) } @@ -499,14 +499,14 @@ inst_idiv_r32 :: #force_inline proc "contextless" (dst: GP inst_idiv_m32 :: #force_inline proc "contextless" (dst: Mem32) -> Instruction { return with_hint(Instruction{ mnemonic = .IDIV, operand_count = 1, ops = {op_mem(dst.mem, 4), {}, {}, {}} }, 177) } inst_idiv_r64 :: #force_inline proc "contextless" (dst: GPR64) -> Instruction { return with_hint(Instruction{ mnemonic = .IDIV, operand_count = 1, ops = {op_gpr64(dst), {}, {}, {}} }, 178) } inst_idiv_m64 :: #force_inline proc "contextless" (dst: Mem64) -> Instruction { return with_hint(Instruction{ mnemonic = .IDIV, operand_count = 1, ops = {op_mem(dst.mem, 8), {}, {}, {}} }, 178) } -emit_idiv_r8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR8) { append(instructions, inst_idiv_r8(dst)) } -emit_idiv_m8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem8) { append(instructions, inst_idiv_m8(dst)) } -emit_idiv_r16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR16) { append(instructions, inst_idiv_r16(dst)) } -emit_idiv_m16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem16) { append(instructions, inst_idiv_m16(dst)) } -emit_idiv_r32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32) { append(instructions, inst_idiv_r32(dst)) } -emit_idiv_m32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem32) { append(instructions, inst_idiv_m32(dst)) } -emit_idiv_r64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64) { append(instructions, inst_idiv_r64(dst)) } -emit_idiv_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem64) { append(instructions, inst_idiv_m64(dst)) } +emit_idiv_r8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR8) { append_elem(instructions, inst_idiv_r8(dst)) } +emit_idiv_m8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem8) { append_elem(instructions, inst_idiv_m8(dst)) } +emit_idiv_r16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR16) { append_elem(instructions, inst_idiv_r16(dst)) } +emit_idiv_m16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem16) { append_elem(instructions, inst_idiv_m16(dst)) } +emit_idiv_r32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32) { append_elem(instructions, inst_idiv_r32(dst)) } +emit_idiv_m32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem32) { append_elem(instructions, inst_idiv_m32(dst)) } +emit_idiv_r64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64) { append_elem(instructions, inst_idiv_r64(dst)) } +emit_idiv_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem64) { append_elem(instructions, inst_idiv_m64(dst)) } inst_inc_r16 :: #force_inline proc "contextless" (dst: GPR16) -> Instruction { return with_hint(Instruction{ mnemonic = .INC, operand_count = 1, ops = {op_gpr16(dst), {}, {}, {}} }, 179) } inst_inc_r32 :: #force_inline proc "contextless" (dst: GPR32) -> Instruction { return with_hint(Instruction{ mnemonic = .INC, operand_count = 1, ops = {op_gpr32(dst), {}, {}, {}} }, 180) } inst_inc_r8 :: #force_inline proc "contextless" (dst: GPR8) -> Instruction { return with_hint(Instruction{ mnemonic = .INC, operand_count = 1, ops = {op_gpr8(dst), {}, {}, {}} }, 181) } @@ -515,14 +515,14 @@ inst_inc_m16 :: #force_inline proc "contextless" (dst: Me inst_inc_m32 :: #force_inline proc "contextless" (dst: Mem32) -> Instruction { return with_hint(Instruction{ mnemonic = .INC, operand_count = 1, ops = {op_mem(dst.mem, 4), {}, {}, {}} }, 183) } inst_inc_r64 :: #force_inline proc "contextless" (dst: GPR64) -> Instruction { return with_hint(Instruction{ mnemonic = .INC, operand_count = 1, ops = {op_gpr64(dst), {}, {}, {}} }, 184) } inst_inc_m64 :: #force_inline proc "contextless" (dst: Mem64) -> Instruction { return with_hint(Instruction{ mnemonic = .INC, operand_count = 1, ops = {op_mem(dst.mem, 8), {}, {}, {}} }, 184) } -emit_inc_r16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR16) { append(instructions, inst_inc_r16(dst)) } -emit_inc_r32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32) { append(instructions, inst_inc_r32(dst)) } -emit_inc_r8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR8) { append(instructions, inst_inc_r8(dst)) } -emit_inc_m8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem8) { append(instructions, inst_inc_m8(dst)) } -emit_inc_m16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem16) { append(instructions, inst_inc_m16(dst)) } -emit_inc_m32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem32) { append(instructions, inst_inc_m32(dst)) } -emit_inc_r64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64) { append(instructions, inst_inc_r64(dst)) } -emit_inc_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem64) { append(instructions, inst_inc_m64(dst)) } +emit_inc_r16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR16) { append_elem(instructions, inst_inc_r16(dst)) } +emit_inc_r32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32) { append_elem(instructions, inst_inc_r32(dst)) } +emit_inc_r8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR8) { append_elem(instructions, inst_inc_r8(dst)) } +emit_inc_m8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem8) { append_elem(instructions, inst_inc_m8(dst)) } +emit_inc_m16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem16) { append_elem(instructions, inst_inc_m16(dst)) } +emit_inc_m32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem32) { append_elem(instructions, inst_inc_m32(dst)) } +emit_inc_r64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64) { append_elem(instructions, inst_inc_r64(dst)) } +emit_inc_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem64) { append_elem(instructions, inst_inc_m64(dst)) } inst_dec_r16 :: #force_inline proc "contextless" (dst: GPR16) -> Instruction { return with_hint(Instruction{ mnemonic = .DEC, operand_count = 1, ops = {op_gpr16(dst), {}, {}, {}} }, 185) } inst_dec_r32 :: #force_inline proc "contextless" (dst: GPR32) -> Instruction { return with_hint(Instruction{ mnemonic = .DEC, operand_count = 1, ops = {op_gpr32(dst), {}, {}, {}} }, 186) } inst_dec_r8 :: #force_inline proc "contextless" (dst: GPR8) -> Instruction { return with_hint(Instruction{ mnemonic = .DEC, operand_count = 1, ops = {op_gpr8(dst), {}, {}, {}} }, 187) } @@ -531,14 +531,14 @@ inst_dec_m16 :: #force_inline proc "contextless" (dst: Me inst_dec_m32 :: #force_inline proc "contextless" (dst: Mem32) -> Instruction { return with_hint(Instruction{ mnemonic = .DEC, operand_count = 1, ops = {op_mem(dst.mem, 4), {}, {}, {}} }, 189) } inst_dec_r64 :: #force_inline proc "contextless" (dst: GPR64) -> Instruction { return with_hint(Instruction{ mnemonic = .DEC, operand_count = 1, ops = {op_gpr64(dst), {}, {}, {}} }, 190) } inst_dec_m64 :: #force_inline proc "contextless" (dst: Mem64) -> Instruction { return with_hint(Instruction{ mnemonic = .DEC, operand_count = 1, ops = {op_mem(dst.mem, 8), {}, {}, {}} }, 190) } -emit_dec_r16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR16) { append(instructions, inst_dec_r16(dst)) } -emit_dec_r32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32) { append(instructions, inst_dec_r32(dst)) } -emit_dec_r8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR8) { append(instructions, inst_dec_r8(dst)) } -emit_dec_m8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem8) { append(instructions, inst_dec_m8(dst)) } -emit_dec_m16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem16) { append(instructions, inst_dec_m16(dst)) } -emit_dec_m32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem32) { append(instructions, inst_dec_m32(dst)) } -emit_dec_r64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64) { append(instructions, inst_dec_r64(dst)) } -emit_dec_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem64) { append(instructions, inst_dec_m64(dst)) } +emit_dec_r16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR16) { append_elem(instructions, inst_dec_r16(dst)) } +emit_dec_r32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32) { append_elem(instructions, inst_dec_r32(dst)) } +emit_dec_r8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR8) { append_elem(instructions, inst_dec_r8(dst)) } +emit_dec_m8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem8) { append_elem(instructions, inst_dec_m8(dst)) } +emit_dec_m16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem16) { append_elem(instructions, inst_dec_m16(dst)) } +emit_dec_m32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem32) { append_elem(instructions, inst_dec_m32(dst)) } +emit_dec_r64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64) { append_elem(instructions, inst_dec_r64(dst)) } +emit_dec_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem64) { append_elem(instructions, inst_dec_m64(dst)) } inst_neg_r8 :: #force_inline proc "contextless" (dst: GPR8) -> Instruction { return with_hint(Instruction{ mnemonic = .NEG, operand_count = 1, ops = {op_gpr8(dst), {}, {}, {}} }, 191) } inst_neg_m8 :: #force_inline proc "contextless" (dst: Mem8) -> Instruction { return with_hint(Instruction{ mnemonic = .NEG, operand_count = 1, ops = {op_mem(dst.mem, 1), {}, {}, {}} }, 191) } inst_neg_r16 :: #force_inline proc "contextless" (dst: GPR16) -> Instruction { return with_hint(Instruction{ mnemonic = .NEG, operand_count = 1, ops = {op_gpr16(dst), {}, {}, {}} }, 192) } @@ -547,14 +547,14 @@ inst_neg_r32 :: #force_inline proc "contextless" (dst: GP inst_neg_m32 :: #force_inline proc "contextless" (dst: Mem32) -> Instruction { return with_hint(Instruction{ mnemonic = .NEG, operand_count = 1, ops = {op_mem(dst.mem, 4), {}, {}, {}} }, 193) } inst_neg_r64 :: #force_inline proc "contextless" (dst: GPR64) -> Instruction { return with_hint(Instruction{ mnemonic = .NEG, operand_count = 1, ops = {op_gpr64(dst), {}, {}, {}} }, 194) } inst_neg_m64 :: #force_inline proc "contextless" (dst: Mem64) -> Instruction { return with_hint(Instruction{ mnemonic = .NEG, operand_count = 1, ops = {op_mem(dst.mem, 8), {}, {}, {}} }, 194) } -emit_neg_r8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR8) { append(instructions, inst_neg_r8(dst)) } -emit_neg_m8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem8) { append(instructions, inst_neg_m8(dst)) } -emit_neg_r16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR16) { append(instructions, inst_neg_r16(dst)) } -emit_neg_m16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem16) { append(instructions, inst_neg_m16(dst)) } -emit_neg_r32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32) { append(instructions, inst_neg_r32(dst)) } -emit_neg_m32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem32) { append(instructions, inst_neg_m32(dst)) } -emit_neg_r64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64) { append(instructions, inst_neg_r64(dst)) } -emit_neg_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem64) { append(instructions, inst_neg_m64(dst)) } +emit_neg_r8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR8) { append_elem(instructions, inst_neg_r8(dst)) } +emit_neg_m8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem8) { append_elem(instructions, inst_neg_m8(dst)) } +emit_neg_r16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR16) { append_elem(instructions, inst_neg_r16(dst)) } +emit_neg_m16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem16) { append_elem(instructions, inst_neg_m16(dst)) } +emit_neg_r32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32) { append_elem(instructions, inst_neg_r32(dst)) } +emit_neg_m32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem32) { append_elem(instructions, inst_neg_m32(dst)) } +emit_neg_r64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64) { append_elem(instructions, inst_neg_r64(dst)) } +emit_neg_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem64) { append_elem(instructions, inst_neg_m64(dst)) } inst_cmp_r8_r8 :: #force_inline proc "contextless" (dst: GPR8, src: GPR8) -> Instruction { return with_hint(Instruction{ mnemonic = .CMP, operand_count = 2, ops = {op_gpr8(dst), op_gpr8(src), {}, {}} }, 195) } inst_cmp_m8_r8 :: #force_inline proc "contextless" (dst: Mem8, src: GPR8) -> Instruction { return with_hint(Instruction{ mnemonic = .CMP, operand_count = 2, ops = {op_mem(dst.mem, 1), op_gpr8(src), {}, {}} }, 195) } inst_cmp_r16_r16 :: #force_inline proc "contextless" (dst: GPR16, src: GPR16) -> Instruction { return with_hint(Instruction{ mnemonic = .CMP, operand_count = 2, ops = {op_gpr16(dst), op_gpr16(src), {}, {}} }, 196) } @@ -578,29 +578,29 @@ inst_cmp_r32_imm32 :: #force_inline proc "contextless" (dst: GP inst_cmp_m32_imm32 :: #force_inline proc "contextless" (dst: Mem32, imm: i32) -> Instruction { return with_hint(Instruction{ mnemonic = .CMP, operand_count = 2, ops = {op_mem(dst.mem, 4), op_imm32(imm), {}, {}} }, 209) } inst_cmp_r64_imm32 :: #force_inline proc "contextless" (dst: GPR64, imm: i32) -> Instruction { return with_hint(Instruction{ mnemonic = .CMP, operand_count = 2, ops = {op_gpr64(dst), op_imm32(imm), {}, {}} }, 210) } inst_cmp_m64_imm32 :: #force_inline proc "contextless" (dst: Mem64, imm: i32) -> Instruction { return with_hint(Instruction{ mnemonic = .CMP, operand_count = 2, ops = {op_mem(dst.mem, 8), op_imm32(imm), {}, {}} }, 210) } -emit_cmp_r8_r8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR8, src: GPR8) { append(instructions, inst_cmp_r8_r8(dst, src)) } -emit_cmp_m8_r8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem8, src: GPR8) { append(instructions, inst_cmp_m8_r8(dst, src)) } -emit_cmp_r16_r16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR16, src: GPR16) { append(instructions, inst_cmp_r16_r16(dst, src)) } -emit_cmp_m16_r16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem16, src: GPR16) { append(instructions, inst_cmp_m16_r16(dst, src)) } -emit_cmp_r32_r32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: GPR32) { append(instructions, inst_cmp_r32_r32(dst, src)) } -emit_cmp_m32_r32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem32, src: GPR32) { append(instructions, inst_cmp_m32_r32(dst, src)) } -emit_cmp_r64_r64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: GPR64) { append(instructions, inst_cmp_r64_r64(dst, src)) } -emit_cmp_m64_r64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem64, src: GPR64) { append(instructions, inst_cmp_m64_r64(dst, src)) } -emit_cmp_r8_m8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR8, src: Mem8) { append(instructions, inst_cmp_r8_m8(dst, src)) } -emit_cmp_r16_m16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR16, src: Mem16) { append(instructions, inst_cmp_r16_m16(dst, src)) } -emit_cmp_r32_m32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: Mem32) { append(instructions, inst_cmp_r32_m32(dst, src)) } -emit_cmp_r64_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: Mem64) { append(instructions, inst_cmp_r64_m64(dst, src)) } -emit_cmp_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i8) { append(instructions, inst_cmp_imm8(imm)) } -emit_cmp_imm16 :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i16) { append(instructions, inst_cmp_imm16(imm)) } -emit_cmp_imm32 :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i32) { append(instructions, inst_cmp_imm32(imm)) } -emit_cmp_r8_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR8, imm: i8) { append(instructions, inst_cmp_r8_imm8(dst, imm)) } -emit_cmp_m8_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem8, imm: i8) { append(instructions, inst_cmp_m8_imm8(dst, imm)) } -emit_cmp_r16_imm16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR16, imm: i16) { append(instructions, inst_cmp_r16_imm16(dst, imm)) } -emit_cmp_m16_imm16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem16, imm: i16) { append(instructions, inst_cmp_m16_imm16(dst, imm)) } -emit_cmp_r32_imm32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, imm: i32) { append(instructions, inst_cmp_r32_imm32(dst, imm)) } -emit_cmp_m32_imm32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem32, imm: i32) { append(instructions, inst_cmp_m32_imm32(dst, imm)) } -emit_cmp_r64_imm32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, imm: i32) { append(instructions, inst_cmp_r64_imm32(dst, imm)) } -emit_cmp_m64_imm32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem64, imm: i32) { append(instructions, inst_cmp_m64_imm32(dst, imm)) } +emit_cmp_r8_r8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR8, src: GPR8) { append_elem(instructions, inst_cmp_r8_r8(dst, src)) } +emit_cmp_m8_r8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem8, src: GPR8) { append_elem(instructions, inst_cmp_m8_r8(dst, src)) } +emit_cmp_r16_r16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR16, src: GPR16) { append_elem(instructions, inst_cmp_r16_r16(dst, src)) } +emit_cmp_m16_r16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem16, src: GPR16) { append_elem(instructions, inst_cmp_m16_r16(dst, src)) } +emit_cmp_r32_r32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: GPR32) { append_elem(instructions, inst_cmp_r32_r32(dst, src)) } +emit_cmp_m32_r32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem32, src: GPR32) { append_elem(instructions, inst_cmp_m32_r32(dst, src)) } +emit_cmp_r64_r64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: GPR64) { append_elem(instructions, inst_cmp_r64_r64(dst, src)) } +emit_cmp_m64_r64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem64, src: GPR64) { append_elem(instructions, inst_cmp_m64_r64(dst, src)) } +emit_cmp_r8_m8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR8, src: Mem8) { append_elem(instructions, inst_cmp_r8_m8(dst, src)) } +emit_cmp_r16_m16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR16, src: Mem16) { append_elem(instructions, inst_cmp_r16_m16(dst, src)) } +emit_cmp_r32_m32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: Mem32) { append_elem(instructions, inst_cmp_r32_m32(dst, src)) } +emit_cmp_r64_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: Mem64) { append_elem(instructions, inst_cmp_r64_m64(dst, src)) } +emit_cmp_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i8) { append_elem(instructions, inst_cmp_imm8(imm)) } +emit_cmp_imm16 :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i16) { append_elem(instructions, inst_cmp_imm16(imm)) } +emit_cmp_imm32 :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i32) { append_elem(instructions, inst_cmp_imm32(imm)) } +emit_cmp_r8_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR8, imm: i8) { append_elem(instructions, inst_cmp_r8_imm8(dst, imm)) } +emit_cmp_m8_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem8, imm: i8) { append_elem(instructions, inst_cmp_m8_imm8(dst, imm)) } +emit_cmp_r16_imm16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR16, imm: i16) { append_elem(instructions, inst_cmp_r16_imm16(dst, imm)) } +emit_cmp_m16_imm16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem16, imm: i16) { append_elem(instructions, inst_cmp_m16_imm16(dst, imm)) } +emit_cmp_r32_imm32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, imm: i32) { append_elem(instructions, inst_cmp_r32_imm32(dst, imm)) } +emit_cmp_m32_imm32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem32, imm: i32) { append_elem(instructions, inst_cmp_m32_imm32(dst, imm)) } +emit_cmp_r64_imm32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, imm: i32) { append_elem(instructions, inst_cmp_r64_imm32(dst, imm)) } +emit_cmp_m64_imm32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem64, imm: i32) { append_elem(instructions, inst_cmp_m64_imm32(dst, imm)) } inst_and_r8_r8 :: #force_inline proc "contextless" (dst: GPR8, src: GPR8) -> Instruction { return with_hint(Instruction{ mnemonic = .AND, operand_count = 2, ops = {op_gpr8(dst), op_gpr8(src), {}, {}} }, 214) } inst_and_m8_r8 :: #force_inline proc "contextless" (dst: Mem8, src: GPR8) -> Instruction { return with_hint(Instruction{ mnemonic = .AND, operand_count = 2, ops = {op_mem(dst.mem, 1), op_gpr8(src), {}, {}} }, 214) } inst_and_r16_r16 :: #force_inline proc "contextless" (dst: GPR16, src: GPR16) -> Instruction { return with_hint(Instruction{ mnemonic = .AND, operand_count = 2, ops = {op_gpr16(dst), op_gpr16(src), {}, {}} }, 215) } @@ -624,29 +624,29 @@ inst_and_r32_imm32 :: #force_inline proc "contextless" (dst: GP inst_and_m32_imm32 :: #force_inline proc "contextless" (dst: Mem32, imm: i32) -> Instruction { return with_hint(Instruction{ mnemonic = .AND, operand_count = 2, ops = {op_mem(dst.mem, 4), op_imm32(imm), {}, {}} }, 228) } inst_and_r64_imm32 :: #force_inline proc "contextless" (dst: GPR64, imm: i32) -> Instruction { return with_hint(Instruction{ mnemonic = .AND, operand_count = 2, ops = {op_gpr64(dst), op_imm32(imm), {}, {}} }, 229) } inst_and_m64_imm32 :: #force_inline proc "contextless" (dst: Mem64, imm: i32) -> Instruction { return with_hint(Instruction{ mnemonic = .AND, operand_count = 2, ops = {op_mem(dst.mem, 8), op_imm32(imm), {}, {}} }, 229) } -emit_and_r8_r8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR8, src: GPR8) { append(instructions, inst_and_r8_r8(dst, src)) } -emit_and_m8_r8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem8, src: GPR8) { append(instructions, inst_and_m8_r8(dst, src)) } -emit_and_r16_r16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR16, src: GPR16) { append(instructions, inst_and_r16_r16(dst, src)) } -emit_and_m16_r16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem16, src: GPR16) { append(instructions, inst_and_m16_r16(dst, src)) } -emit_and_r32_r32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: GPR32) { append(instructions, inst_and_r32_r32(dst, src)) } -emit_and_m32_r32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem32, src: GPR32) { append(instructions, inst_and_m32_r32(dst, src)) } -emit_and_r64_r64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: GPR64) { append(instructions, inst_and_r64_r64(dst, src)) } -emit_and_m64_r64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem64, src: GPR64) { append(instructions, inst_and_m64_r64(dst, src)) } -emit_and_r8_m8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR8, src: Mem8) { append(instructions, inst_and_r8_m8(dst, src)) } -emit_and_r16_m16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR16, src: Mem16) { append(instructions, inst_and_r16_m16(dst, src)) } -emit_and_r32_m32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: Mem32) { append(instructions, inst_and_r32_m32(dst, src)) } -emit_and_r64_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: Mem64) { append(instructions, inst_and_r64_m64(dst, src)) } -emit_and_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i8) { append(instructions, inst_and_imm8(imm)) } -emit_and_imm16 :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i16) { append(instructions, inst_and_imm16(imm)) } -emit_and_imm32 :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i32) { append(instructions, inst_and_imm32(imm)) } -emit_and_r8_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR8, imm: i8) { append(instructions, inst_and_r8_imm8(dst, imm)) } -emit_and_m8_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem8, imm: i8) { append(instructions, inst_and_m8_imm8(dst, imm)) } -emit_and_r16_imm16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR16, imm: i16) { append(instructions, inst_and_r16_imm16(dst, imm)) } -emit_and_m16_imm16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem16, imm: i16) { append(instructions, inst_and_m16_imm16(dst, imm)) } -emit_and_r32_imm32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, imm: i32) { append(instructions, inst_and_r32_imm32(dst, imm)) } -emit_and_m32_imm32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem32, imm: i32) { append(instructions, inst_and_m32_imm32(dst, imm)) } -emit_and_r64_imm32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, imm: i32) { append(instructions, inst_and_r64_imm32(dst, imm)) } -emit_and_m64_imm32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem64, imm: i32) { append(instructions, inst_and_m64_imm32(dst, imm)) } +emit_and_r8_r8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR8, src: GPR8) { append_elem(instructions, inst_and_r8_r8(dst, src)) } +emit_and_m8_r8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem8, src: GPR8) { append_elem(instructions, inst_and_m8_r8(dst, src)) } +emit_and_r16_r16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR16, src: GPR16) { append_elem(instructions, inst_and_r16_r16(dst, src)) } +emit_and_m16_r16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem16, src: GPR16) { append_elem(instructions, inst_and_m16_r16(dst, src)) } +emit_and_r32_r32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: GPR32) { append_elem(instructions, inst_and_r32_r32(dst, src)) } +emit_and_m32_r32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem32, src: GPR32) { append_elem(instructions, inst_and_m32_r32(dst, src)) } +emit_and_r64_r64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: GPR64) { append_elem(instructions, inst_and_r64_r64(dst, src)) } +emit_and_m64_r64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem64, src: GPR64) { append_elem(instructions, inst_and_m64_r64(dst, src)) } +emit_and_r8_m8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR8, src: Mem8) { append_elem(instructions, inst_and_r8_m8(dst, src)) } +emit_and_r16_m16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR16, src: Mem16) { append_elem(instructions, inst_and_r16_m16(dst, src)) } +emit_and_r32_m32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: Mem32) { append_elem(instructions, inst_and_r32_m32(dst, src)) } +emit_and_r64_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: Mem64) { append_elem(instructions, inst_and_r64_m64(dst, src)) } +emit_and_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i8) { append_elem(instructions, inst_and_imm8(imm)) } +emit_and_imm16 :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i16) { append_elem(instructions, inst_and_imm16(imm)) } +emit_and_imm32 :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i32) { append_elem(instructions, inst_and_imm32(imm)) } +emit_and_r8_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR8, imm: i8) { append_elem(instructions, inst_and_r8_imm8(dst, imm)) } +emit_and_m8_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem8, imm: i8) { append_elem(instructions, inst_and_m8_imm8(dst, imm)) } +emit_and_r16_imm16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR16, imm: i16) { append_elem(instructions, inst_and_r16_imm16(dst, imm)) } +emit_and_m16_imm16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem16, imm: i16) { append_elem(instructions, inst_and_m16_imm16(dst, imm)) } +emit_and_r32_imm32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, imm: i32) { append_elem(instructions, inst_and_r32_imm32(dst, imm)) } +emit_and_m32_imm32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem32, imm: i32) { append_elem(instructions, inst_and_m32_imm32(dst, imm)) } +emit_and_r64_imm32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, imm: i32) { append_elem(instructions, inst_and_r64_imm32(dst, imm)) } +emit_and_m64_imm32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem64, imm: i32) { append_elem(instructions, inst_and_m64_imm32(dst, imm)) } inst_or_r8_r8 :: #force_inline proc "contextless" (dst: GPR8, src: GPR8) -> Instruction { return with_hint(Instruction{ mnemonic = .OR, operand_count = 2, ops = {op_gpr8(dst), op_gpr8(src), {}, {}} }, 233) } inst_or_m8_r8 :: #force_inline proc "contextless" (dst: Mem8, src: GPR8) -> Instruction { return with_hint(Instruction{ mnemonic = .OR, operand_count = 2, ops = {op_mem(dst.mem, 1), op_gpr8(src), {}, {}} }, 233) } inst_or_r16_r16 :: #force_inline proc "contextless" (dst: GPR16, src: GPR16) -> Instruction { return with_hint(Instruction{ mnemonic = .OR, operand_count = 2, ops = {op_gpr16(dst), op_gpr16(src), {}, {}} }, 234) } @@ -670,29 +670,29 @@ inst_or_r32_imm32 :: #force_inline proc "contextless" (dst: GP inst_or_m32_imm32 :: #force_inline proc "contextless" (dst: Mem32, imm: i32) -> Instruction { return with_hint(Instruction{ mnemonic = .OR, operand_count = 2, ops = {op_mem(dst.mem, 4), op_imm32(imm), {}, {}} }, 247) } inst_or_r64_imm32 :: #force_inline proc "contextless" (dst: GPR64, imm: i32) -> Instruction { return with_hint(Instruction{ mnemonic = .OR, operand_count = 2, ops = {op_gpr64(dst), op_imm32(imm), {}, {}} }, 248) } inst_or_m64_imm32 :: #force_inline proc "contextless" (dst: Mem64, imm: i32) -> Instruction { return with_hint(Instruction{ mnemonic = .OR, operand_count = 2, ops = {op_mem(dst.mem, 8), op_imm32(imm), {}, {}} }, 248) } -emit_or_r8_r8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR8, src: GPR8) { append(instructions, inst_or_r8_r8(dst, src)) } -emit_or_m8_r8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem8, src: GPR8) { append(instructions, inst_or_m8_r8(dst, src)) } -emit_or_r16_r16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR16, src: GPR16) { append(instructions, inst_or_r16_r16(dst, src)) } -emit_or_m16_r16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem16, src: GPR16) { append(instructions, inst_or_m16_r16(dst, src)) } -emit_or_r32_r32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: GPR32) { append(instructions, inst_or_r32_r32(dst, src)) } -emit_or_m32_r32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem32, src: GPR32) { append(instructions, inst_or_m32_r32(dst, src)) } -emit_or_r64_r64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: GPR64) { append(instructions, inst_or_r64_r64(dst, src)) } -emit_or_m64_r64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem64, src: GPR64) { append(instructions, inst_or_m64_r64(dst, src)) } -emit_or_r8_m8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR8, src: Mem8) { append(instructions, inst_or_r8_m8(dst, src)) } -emit_or_r16_m16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR16, src: Mem16) { append(instructions, inst_or_r16_m16(dst, src)) } -emit_or_r32_m32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: Mem32) { append(instructions, inst_or_r32_m32(dst, src)) } -emit_or_r64_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: Mem64) { append(instructions, inst_or_r64_m64(dst, src)) } -emit_or_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i8) { append(instructions, inst_or_imm8(imm)) } -emit_or_imm16 :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i16) { append(instructions, inst_or_imm16(imm)) } -emit_or_imm32 :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i32) { append(instructions, inst_or_imm32(imm)) } -emit_or_r8_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR8, imm: i8) { append(instructions, inst_or_r8_imm8(dst, imm)) } -emit_or_m8_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem8, imm: i8) { append(instructions, inst_or_m8_imm8(dst, imm)) } -emit_or_r16_imm16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR16, imm: i16) { append(instructions, inst_or_r16_imm16(dst, imm)) } -emit_or_m16_imm16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem16, imm: i16) { append(instructions, inst_or_m16_imm16(dst, imm)) } -emit_or_r32_imm32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, imm: i32) { append(instructions, inst_or_r32_imm32(dst, imm)) } -emit_or_m32_imm32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem32, imm: i32) { append(instructions, inst_or_m32_imm32(dst, imm)) } -emit_or_r64_imm32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, imm: i32) { append(instructions, inst_or_r64_imm32(dst, imm)) } -emit_or_m64_imm32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem64, imm: i32) { append(instructions, inst_or_m64_imm32(dst, imm)) } +emit_or_r8_r8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR8, src: GPR8) { append_elem(instructions, inst_or_r8_r8(dst, src)) } +emit_or_m8_r8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem8, src: GPR8) { append_elem(instructions, inst_or_m8_r8(dst, src)) } +emit_or_r16_r16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR16, src: GPR16) { append_elem(instructions, inst_or_r16_r16(dst, src)) } +emit_or_m16_r16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem16, src: GPR16) { append_elem(instructions, inst_or_m16_r16(dst, src)) } +emit_or_r32_r32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: GPR32) { append_elem(instructions, inst_or_r32_r32(dst, src)) } +emit_or_m32_r32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem32, src: GPR32) { append_elem(instructions, inst_or_m32_r32(dst, src)) } +emit_or_r64_r64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: GPR64) { append_elem(instructions, inst_or_r64_r64(dst, src)) } +emit_or_m64_r64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem64, src: GPR64) { append_elem(instructions, inst_or_m64_r64(dst, src)) } +emit_or_r8_m8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR8, src: Mem8) { append_elem(instructions, inst_or_r8_m8(dst, src)) } +emit_or_r16_m16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR16, src: Mem16) { append_elem(instructions, inst_or_r16_m16(dst, src)) } +emit_or_r32_m32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: Mem32) { append_elem(instructions, inst_or_r32_m32(dst, src)) } +emit_or_r64_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: Mem64) { append_elem(instructions, inst_or_r64_m64(dst, src)) } +emit_or_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i8) { append_elem(instructions, inst_or_imm8(imm)) } +emit_or_imm16 :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i16) { append_elem(instructions, inst_or_imm16(imm)) } +emit_or_imm32 :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i32) { append_elem(instructions, inst_or_imm32(imm)) } +emit_or_r8_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR8, imm: i8) { append_elem(instructions, inst_or_r8_imm8(dst, imm)) } +emit_or_m8_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem8, imm: i8) { append_elem(instructions, inst_or_m8_imm8(dst, imm)) } +emit_or_r16_imm16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR16, imm: i16) { append_elem(instructions, inst_or_r16_imm16(dst, imm)) } +emit_or_m16_imm16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem16, imm: i16) { append_elem(instructions, inst_or_m16_imm16(dst, imm)) } +emit_or_r32_imm32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, imm: i32) { append_elem(instructions, inst_or_r32_imm32(dst, imm)) } +emit_or_m32_imm32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem32, imm: i32) { append_elem(instructions, inst_or_m32_imm32(dst, imm)) } +emit_or_r64_imm32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, imm: i32) { append_elem(instructions, inst_or_r64_imm32(dst, imm)) } +emit_or_m64_imm32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem64, imm: i32) { append_elem(instructions, inst_or_m64_imm32(dst, imm)) } inst_xor_r8_r8 :: #force_inline proc "contextless" (dst: GPR8, src: GPR8) -> Instruction { return with_hint(Instruction{ mnemonic = .XOR, operand_count = 2, ops = {op_gpr8(dst), op_gpr8(src), {}, {}} }, 252) } inst_xor_m8_r8 :: #force_inline proc "contextless" (dst: Mem8, src: GPR8) -> Instruction { return with_hint(Instruction{ mnemonic = .XOR, operand_count = 2, ops = {op_mem(dst.mem, 1), op_gpr8(src), {}, {}} }, 252) } inst_xor_r16_r16 :: #force_inline proc "contextless" (dst: GPR16, src: GPR16) -> Instruction { return with_hint(Instruction{ mnemonic = .XOR, operand_count = 2, ops = {op_gpr16(dst), op_gpr16(src), {}, {}} }, 253) } @@ -716,29 +716,29 @@ inst_xor_r32_imm32 :: #force_inline proc "contextless" (dst: GP inst_xor_m32_imm32 :: #force_inline proc "contextless" (dst: Mem32, imm: i32) -> Instruction { return with_hint(Instruction{ mnemonic = .XOR, operand_count = 2, ops = {op_mem(dst.mem, 4), op_imm32(imm), {}, {}} }, 266) } inst_xor_r64_imm32 :: #force_inline proc "contextless" (dst: GPR64, imm: i32) -> Instruction { return with_hint(Instruction{ mnemonic = .XOR, operand_count = 2, ops = {op_gpr64(dst), op_imm32(imm), {}, {}} }, 267) } inst_xor_m64_imm32 :: #force_inline proc "contextless" (dst: Mem64, imm: i32) -> Instruction { return with_hint(Instruction{ mnemonic = .XOR, operand_count = 2, ops = {op_mem(dst.mem, 8), op_imm32(imm), {}, {}} }, 267) } -emit_xor_r8_r8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR8, src: GPR8) { append(instructions, inst_xor_r8_r8(dst, src)) } -emit_xor_m8_r8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem8, src: GPR8) { append(instructions, inst_xor_m8_r8(dst, src)) } -emit_xor_r16_r16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR16, src: GPR16) { append(instructions, inst_xor_r16_r16(dst, src)) } -emit_xor_m16_r16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem16, src: GPR16) { append(instructions, inst_xor_m16_r16(dst, src)) } -emit_xor_r32_r32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: GPR32) { append(instructions, inst_xor_r32_r32(dst, src)) } -emit_xor_m32_r32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem32, src: GPR32) { append(instructions, inst_xor_m32_r32(dst, src)) } -emit_xor_r64_r64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: GPR64) { append(instructions, inst_xor_r64_r64(dst, src)) } -emit_xor_m64_r64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem64, src: GPR64) { append(instructions, inst_xor_m64_r64(dst, src)) } -emit_xor_r8_m8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR8, src: Mem8) { append(instructions, inst_xor_r8_m8(dst, src)) } -emit_xor_r16_m16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR16, src: Mem16) { append(instructions, inst_xor_r16_m16(dst, src)) } -emit_xor_r32_m32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: Mem32) { append(instructions, inst_xor_r32_m32(dst, src)) } -emit_xor_r64_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: Mem64) { append(instructions, inst_xor_r64_m64(dst, src)) } -emit_xor_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i8) { append(instructions, inst_xor_imm8(imm)) } -emit_xor_imm16 :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i16) { append(instructions, inst_xor_imm16(imm)) } -emit_xor_imm32 :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i32) { append(instructions, inst_xor_imm32(imm)) } -emit_xor_r8_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR8, imm: i8) { append(instructions, inst_xor_r8_imm8(dst, imm)) } -emit_xor_m8_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem8, imm: i8) { append(instructions, inst_xor_m8_imm8(dst, imm)) } -emit_xor_r16_imm16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR16, imm: i16) { append(instructions, inst_xor_r16_imm16(dst, imm)) } -emit_xor_m16_imm16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem16, imm: i16) { append(instructions, inst_xor_m16_imm16(dst, imm)) } -emit_xor_r32_imm32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, imm: i32) { append(instructions, inst_xor_r32_imm32(dst, imm)) } -emit_xor_m32_imm32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem32, imm: i32) { append(instructions, inst_xor_m32_imm32(dst, imm)) } -emit_xor_r64_imm32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, imm: i32) { append(instructions, inst_xor_r64_imm32(dst, imm)) } -emit_xor_m64_imm32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem64, imm: i32) { append(instructions, inst_xor_m64_imm32(dst, imm)) } +emit_xor_r8_r8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR8, src: GPR8) { append_elem(instructions, inst_xor_r8_r8(dst, src)) } +emit_xor_m8_r8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem8, src: GPR8) { append_elem(instructions, inst_xor_m8_r8(dst, src)) } +emit_xor_r16_r16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR16, src: GPR16) { append_elem(instructions, inst_xor_r16_r16(dst, src)) } +emit_xor_m16_r16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem16, src: GPR16) { append_elem(instructions, inst_xor_m16_r16(dst, src)) } +emit_xor_r32_r32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: GPR32) { append_elem(instructions, inst_xor_r32_r32(dst, src)) } +emit_xor_m32_r32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem32, src: GPR32) { append_elem(instructions, inst_xor_m32_r32(dst, src)) } +emit_xor_r64_r64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: GPR64) { append_elem(instructions, inst_xor_r64_r64(dst, src)) } +emit_xor_m64_r64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem64, src: GPR64) { append_elem(instructions, inst_xor_m64_r64(dst, src)) } +emit_xor_r8_m8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR8, src: Mem8) { append_elem(instructions, inst_xor_r8_m8(dst, src)) } +emit_xor_r16_m16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR16, src: Mem16) { append_elem(instructions, inst_xor_r16_m16(dst, src)) } +emit_xor_r32_m32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: Mem32) { append_elem(instructions, inst_xor_r32_m32(dst, src)) } +emit_xor_r64_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: Mem64) { append_elem(instructions, inst_xor_r64_m64(dst, src)) } +emit_xor_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i8) { append_elem(instructions, inst_xor_imm8(imm)) } +emit_xor_imm16 :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i16) { append_elem(instructions, inst_xor_imm16(imm)) } +emit_xor_imm32 :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i32) { append_elem(instructions, inst_xor_imm32(imm)) } +emit_xor_r8_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR8, imm: i8) { append_elem(instructions, inst_xor_r8_imm8(dst, imm)) } +emit_xor_m8_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem8, imm: i8) { append_elem(instructions, inst_xor_m8_imm8(dst, imm)) } +emit_xor_r16_imm16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR16, imm: i16) { append_elem(instructions, inst_xor_r16_imm16(dst, imm)) } +emit_xor_m16_imm16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem16, imm: i16) { append_elem(instructions, inst_xor_m16_imm16(dst, imm)) } +emit_xor_r32_imm32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, imm: i32) { append_elem(instructions, inst_xor_r32_imm32(dst, imm)) } +emit_xor_m32_imm32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem32, imm: i32) { append_elem(instructions, inst_xor_m32_imm32(dst, imm)) } +emit_xor_r64_imm32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, imm: i32) { append_elem(instructions, inst_xor_r64_imm32(dst, imm)) } +emit_xor_m64_imm32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem64, imm: i32) { append_elem(instructions, inst_xor_m64_imm32(dst, imm)) } inst_not_r8 :: #force_inline proc "contextless" (dst: GPR8) -> Instruction { return with_hint(Instruction{ mnemonic = .NOT, operand_count = 1, ops = {op_gpr8(dst), {}, {}, {}} }, 271) } inst_not_m8 :: #force_inline proc "contextless" (dst: Mem8) -> Instruction { return with_hint(Instruction{ mnemonic = .NOT, operand_count = 1, ops = {op_mem(dst.mem, 1), {}, {}, {}} }, 271) } inst_not_r16 :: #force_inline proc "contextless" (dst: GPR16) -> Instruction { return with_hint(Instruction{ mnemonic = .NOT, operand_count = 1, ops = {op_gpr16(dst), {}, {}, {}} }, 272) } @@ -747,14 +747,14 @@ inst_not_r32 :: #force_inline proc "contextless" (dst: GP inst_not_m32 :: #force_inline proc "contextless" (dst: Mem32) -> Instruction { return with_hint(Instruction{ mnemonic = .NOT, operand_count = 1, ops = {op_mem(dst.mem, 4), {}, {}, {}} }, 273) } inst_not_r64 :: #force_inline proc "contextless" (dst: GPR64) -> Instruction { return with_hint(Instruction{ mnemonic = .NOT, operand_count = 1, ops = {op_gpr64(dst), {}, {}, {}} }, 274) } inst_not_m64 :: #force_inline proc "contextless" (dst: Mem64) -> Instruction { return with_hint(Instruction{ mnemonic = .NOT, operand_count = 1, ops = {op_mem(dst.mem, 8), {}, {}, {}} }, 274) } -emit_not_r8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR8) { append(instructions, inst_not_r8(dst)) } -emit_not_m8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem8) { append(instructions, inst_not_m8(dst)) } -emit_not_r16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR16) { append(instructions, inst_not_r16(dst)) } -emit_not_m16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem16) { append(instructions, inst_not_m16(dst)) } -emit_not_r32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32) { append(instructions, inst_not_r32(dst)) } -emit_not_m32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem32) { append(instructions, inst_not_m32(dst)) } -emit_not_r64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64) { append(instructions, inst_not_r64(dst)) } -emit_not_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem64) { append(instructions, inst_not_m64(dst)) } +emit_not_r8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR8) { append_elem(instructions, inst_not_r8(dst)) } +emit_not_m8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem8) { append_elem(instructions, inst_not_m8(dst)) } +emit_not_r16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR16) { append_elem(instructions, inst_not_r16(dst)) } +emit_not_m16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem16) { append_elem(instructions, inst_not_m16(dst)) } +emit_not_r32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32) { append_elem(instructions, inst_not_r32(dst)) } +emit_not_m32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem32) { append_elem(instructions, inst_not_m32(dst)) } +emit_not_r64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64) { append_elem(instructions, inst_not_r64(dst)) } +emit_not_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem64) { append_elem(instructions, inst_not_m64(dst)) } inst_test_r8_r8 :: #force_inline proc "contextless" (dst: GPR8, src: GPR8) -> Instruction { return with_hint(Instruction{ mnemonic = .TEST, operand_count = 2, ops = {op_gpr8(dst), op_gpr8(src), {}, {}} }, 275) } inst_test_m8_r8 :: #force_inline proc "contextless" (dst: Mem8, src: GPR8) -> Instruction { return with_hint(Instruction{ mnemonic = .TEST, operand_count = 2, ops = {op_mem(dst.mem, 1), op_gpr8(src), {}, {}} }, 275) } inst_test_r16_r16 :: #force_inline proc "contextless" (dst: GPR16, src: GPR16) -> Instruction { return with_hint(Instruction{ mnemonic = .TEST, operand_count = 2, ops = {op_gpr16(dst), op_gpr16(src), {}, {}} }, 276) } @@ -774,25 +774,25 @@ inst_test_r32_imm32 :: #force_inline proc "contextless" (dst: GP inst_test_m32_imm32 :: #force_inline proc "contextless" (dst: Mem32, imm: i32) -> Instruction { return with_hint(Instruction{ mnemonic = .TEST, operand_count = 2, ops = {op_mem(dst.mem, 4), op_imm32(imm), {}, {}} }, 285) } inst_test_r64_imm32 :: #force_inline proc "contextless" (dst: GPR64, imm: i32) -> Instruction { return with_hint(Instruction{ mnemonic = .TEST, operand_count = 2, ops = {op_gpr64(dst), op_imm32(imm), {}, {}} }, 286) } inst_test_m64_imm32 :: #force_inline proc "contextless" (dst: Mem64, imm: i32) -> Instruction { return with_hint(Instruction{ mnemonic = .TEST, operand_count = 2, ops = {op_mem(dst.mem, 8), op_imm32(imm), {}, {}} }, 286) } -emit_test_r8_r8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR8, src: GPR8) { append(instructions, inst_test_r8_r8(dst, src)) } -emit_test_m8_r8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem8, src: GPR8) { append(instructions, inst_test_m8_r8(dst, src)) } -emit_test_r16_r16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR16, src: GPR16) { append(instructions, inst_test_r16_r16(dst, src)) } -emit_test_m16_r16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem16, src: GPR16) { append(instructions, inst_test_m16_r16(dst, src)) } -emit_test_r32_r32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: GPR32) { append(instructions, inst_test_r32_r32(dst, src)) } -emit_test_m32_r32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem32, src: GPR32) { append(instructions, inst_test_m32_r32(dst, src)) } -emit_test_r64_r64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: GPR64) { append(instructions, inst_test_r64_r64(dst, src)) } -emit_test_m64_r64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem64, src: GPR64) { append(instructions, inst_test_m64_r64(dst, src)) } -emit_test_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i8) { append(instructions, inst_test_imm8(imm)) } -emit_test_imm16 :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i16) { append(instructions, inst_test_imm16(imm)) } -emit_test_imm32 :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i32) { append(instructions, inst_test_imm32(imm)) } -emit_test_r8_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR8, imm: i8) { append(instructions, inst_test_r8_imm8(dst, imm)) } -emit_test_m8_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem8, imm: i8) { append(instructions, inst_test_m8_imm8(dst, imm)) } -emit_test_r16_imm16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR16, imm: i16) { append(instructions, inst_test_r16_imm16(dst, imm)) } -emit_test_m16_imm16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem16, imm: i16) { append(instructions, inst_test_m16_imm16(dst, imm)) } -emit_test_r32_imm32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, imm: i32) { append(instructions, inst_test_r32_imm32(dst, imm)) } -emit_test_m32_imm32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem32, imm: i32) { append(instructions, inst_test_m32_imm32(dst, imm)) } -emit_test_r64_imm32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, imm: i32) { append(instructions, inst_test_r64_imm32(dst, imm)) } -emit_test_m64_imm32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem64, imm: i32) { append(instructions, inst_test_m64_imm32(dst, imm)) } +emit_test_r8_r8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR8, src: GPR8) { append_elem(instructions, inst_test_r8_r8(dst, src)) } +emit_test_m8_r8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem8, src: GPR8) { append_elem(instructions, inst_test_m8_r8(dst, src)) } +emit_test_r16_r16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR16, src: GPR16) { append_elem(instructions, inst_test_r16_r16(dst, src)) } +emit_test_m16_r16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem16, src: GPR16) { append_elem(instructions, inst_test_m16_r16(dst, src)) } +emit_test_r32_r32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: GPR32) { append_elem(instructions, inst_test_r32_r32(dst, src)) } +emit_test_m32_r32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem32, src: GPR32) { append_elem(instructions, inst_test_m32_r32(dst, src)) } +emit_test_r64_r64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: GPR64) { append_elem(instructions, inst_test_r64_r64(dst, src)) } +emit_test_m64_r64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem64, src: GPR64) { append_elem(instructions, inst_test_m64_r64(dst, src)) } +emit_test_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i8) { append_elem(instructions, inst_test_imm8(imm)) } +emit_test_imm16 :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i16) { append_elem(instructions, inst_test_imm16(imm)) } +emit_test_imm32 :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i32) { append_elem(instructions, inst_test_imm32(imm)) } +emit_test_r8_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR8, imm: i8) { append_elem(instructions, inst_test_r8_imm8(dst, imm)) } +emit_test_m8_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem8, imm: i8) { append_elem(instructions, inst_test_m8_imm8(dst, imm)) } +emit_test_r16_imm16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR16, imm: i16) { append_elem(instructions, inst_test_r16_imm16(dst, imm)) } +emit_test_m16_imm16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem16, imm: i16) { append_elem(instructions, inst_test_m16_imm16(dst, imm)) } +emit_test_r32_imm32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, imm: i32) { append_elem(instructions, inst_test_r32_imm32(dst, imm)) } +emit_test_m32_imm32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem32, imm: i32) { append_elem(instructions, inst_test_m32_imm32(dst, imm)) } +emit_test_r64_imm32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, imm: i32) { append_elem(instructions, inst_test_r64_imm32(dst, imm)) } +emit_test_m64_imm32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem64, imm: i32) { append_elem(instructions, inst_test_m64_imm32(dst, imm)) } inst_shl_r8 :: #force_inline proc "contextless" (dst: GPR8) -> Instruction { return with_hint(Instruction{ mnemonic = .SHL, operand_count = 1, ops = {op_gpr8(dst), {}, {}, {}} }, 287) } inst_shl_m8 :: #force_inline proc "contextless" (dst: Mem8) -> Instruction { return with_hint(Instruction{ mnemonic = .SHL, operand_count = 1, ops = {op_mem(dst.mem, 1), {}, {}, {}} }, 287) } inst_shl_r8_imm8 :: #force_inline proc "contextless" (dst: GPR8, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .SHL, operand_count = 2, ops = {op_gpr8(dst), op_imm8(imm), {}, {}} }, 289) } @@ -809,22 +809,22 @@ inst_shl_r64 :: #force_inline proc "contextless" (dst: GP inst_shl_m64 :: #force_inline proc "contextless" (dst: Mem64) -> Instruction { return with_hint(Instruction{ mnemonic = .SHL, operand_count = 1, ops = {op_mem(dst.mem, 8), {}, {}, {}} }, 296) } inst_shl_r64_imm8 :: #force_inline proc "contextless" (dst: GPR64, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .SHL, operand_count = 2, ops = {op_gpr64(dst), op_imm8(imm), {}, {}} }, 298) } inst_shl_m64_imm8 :: #force_inline proc "contextless" (dst: Mem64, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .SHL, operand_count = 2, ops = {op_mem(dst.mem, 8), op_imm8(imm), {}, {}} }, 298) } -emit_shl_r8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR8) { append(instructions, inst_shl_r8(dst)) } -emit_shl_m8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem8) { append(instructions, inst_shl_m8(dst)) } -emit_shl_r8_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR8, imm: i8) { append(instructions, inst_shl_r8_imm8(dst, imm)) } -emit_shl_m8_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem8, imm: i8) { append(instructions, inst_shl_m8_imm8(dst, imm)) } -emit_shl_r16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR16) { append(instructions, inst_shl_r16(dst)) } -emit_shl_m16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem16) { append(instructions, inst_shl_m16(dst)) } -emit_shl_r16_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR16, imm: i8) { append(instructions, inst_shl_r16_imm8(dst, imm)) } -emit_shl_m16_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem16, imm: i8) { append(instructions, inst_shl_m16_imm8(dst, imm)) } -emit_shl_r32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32) { append(instructions, inst_shl_r32(dst)) } -emit_shl_m32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem32) { append(instructions, inst_shl_m32(dst)) } -emit_shl_r32_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, imm: i8) { append(instructions, inst_shl_r32_imm8(dst, imm)) } -emit_shl_m32_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem32, imm: i8) { append(instructions, inst_shl_m32_imm8(dst, imm)) } -emit_shl_r64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64) { append(instructions, inst_shl_r64(dst)) } -emit_shl_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem64) { append(instructions, inst_shl_m64(dst)) } -emit_shl_r64_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, imm: i8) { append(instructions, inst_shl_r64_imm8(dst, imm)) } -emit_shl_m64_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem64, imm: i8) { append(instructions, inst_shl_m64_imm8(dst, imm)) } +emit_shl_r8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR8) { append_elem(instructions, inst_shl_r8(dst)) } +emit_shl_m8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem8) { append_elem(instructions, inst_shl_m8(dst)) } +emit_shl_r8_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR8, imm: i8) { append_elem(instructions, inst_shl_r8_imm8(dst, imm)) } +emit_shl_m8_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem8, imm: i8) { append_elem(instructions, inst_shl_m8_imm8(dst, imm)) } +emit_shl_r16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR16) { append_elem(instructions, inst_shl_r16(dst)) } +emit_shl_m16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem16) { append_elem(instructions, inst_shl_m16(dst)) } +emit_shl_r16_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR16, imm: i8) { append_elem(instructions, inst_shl_r16_imm8(dst, imm)) } +emit_shl_m16_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem16, imm: i8) { append_elem(instructions, inst_shl_m16_imm8(dst, imm)) } +emit_shl_r32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32) { append_elem(instructions, inst_shl_r32(dst)) } +emit_shl_m32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem32) { append_elem(instructions, inst_shl_m32(dst)) } +emit_shl_r32_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, imm: i8) { append_elem(instructions, inst_shl_r32_imm8(dst, imm)) } +emit_shl_m32_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem32, imm: i8) { append_elem(instructions, inst_shl_m32_imm8(dst, imm)) } +emit_shl_r64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64) { append_elem(instructions, inst_shl_r64(dst)) } +emit_shl_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem64) { append_elem(instructions, inst_shl_m64(dst)) } +emit_shl_r64_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, imm: i8) { append_elem(instructions, inst_shl_r64_imm8(dst, imm)) } +emit_shl_m64_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem64, imm: i8) { append_elem(instructions, inst_shl_m64_imm8(dst, imm)) } inst_shr_r8 :: #force_inline proc "contextless" (dst: GPR8) -> Instruction { return with_hint(Instruction{ mnemonic = .SHR, operand_count = 1, ops = {op_gpr8(dst), {}, {}, {}} }, 299) } inst_shr_m8 :: #force_inline proc "contextless" (dst: Mem8) -> Instruction { return with_hint(Instruction{ mnemonic = .SHR, operand_count = 1, ops = {op_mem(dst.mem, 1), {}, {}, {}} }, 299) } inst_shr_r8_imm8 :: #force_inline proc "contextless" (dst: GPR8, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .SHR, operand_count = 2, ops = {op_gpr8(dst), op_imm8(imm), {}, {}} }, 301) } @@ -841,22 +841,22 @@ inst_shr_r64 :: #force_inline proc "contextless" (dst: GP inst_shr_m64 :: #force_inline proc "contextless" (dst: Mem64) -> Instruction { return with_hint(Instruction{ mnemonic = .SHR, operand_count = 1, ops = {op_mem(dst.mem, 8), {}, {}, {}} }, 308) } inst_shr_r64_imm8 :: #force_inline proc "contextless" (dst: GPR64, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .SHR, operand_count = 2, ops = {op_gpr64(dst), op_imm8(imm), {}, {}} }, 310) } inst_shr_m64_imm8 :: #force_inline proc "contextless" (dst: Mem64, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .SHR, operand_count = 2, ops = {op_mem(dst.mem, 8), op_imm8(imm), {}, {}} }, 310) } -emit_shr_r8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR8) { append(instructions, inst_shr_r8(dst)) } -emit_shr_m8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem8) { append(instructions, inst_shr_m8(dst)) } -emit_shr_r8_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR8, imm: i8) { append(instructions, inst_shr_r8_imm8(dst, imm)) } -emit_shr_m8_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem8, imm: i8) { append(instructions, inst_shr_m8_imm8(dst, imm)) } -emit_shr_r16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR16) { append(instructions, inst_shr_r16(dst)) } -emit_shr_m16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem16) { append(instructions, inst_shr_m16(dst)) } -emit_shr_r16_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR16, imm: i8) { append(instructions, inst_shr_r16_imm8(dst, imm)) } -emit_shr_m16_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem16, imm: i8) { append(instructions, inst_shr_m16_imm8(dst, imm)) } -emit_shr_r32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32) { append(instructions, inst_shr_r32(dst)) } -emit_shr_m32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem32) { append(instructions, inst_shr_m32(dst)) } -emit_shr_r32_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, imm: i8) { append(instructions, inst_shr_r32_imm8(dst, imm)) } -emit_shr_m32_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem32, imm: i8) { append(instructions, inst_shr_m32_imm8(dst, imm)) } -emit_shr_r64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64) { append(instructions, inst_shr_r64(dst)) } -emit_shr_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem64) { append(instructions, inst_shr_m64(dst)) } -emit_shr_r64_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, imm: i8) { append(instructions, inst_shr_r64_imm8(dst, imm)) } -emit_shr_m64_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem64, imm: i8) { append(instructions, inst_shr_m64_imm8(dst, imm)) } +emit_shr_r8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR8) { append_elem(instructions, inst_shr_r8(dst)) } +emit_shr_m8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem8) { append_elem(instructions, inst_shr_m8(dst)) } +emit_shr_r8_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR8, imm: i8) { append_elem(instructions, inst_shr_r8_imm8(dst, imm)) } +emit_shr_m8_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem8, imm: i8) { append_elem(instructions, inst_shr_m8_imm8(dst, imm)) } +emit_shr_r16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR16) { append_elem(instructions, inst_shr_r16(dst)) } +emit_shr_m16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem16) { append_elem(instructions, inst_shr_m16(dst)) } +emit_shr_r16_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR16, imm: i8) { append_elem(instructions, inst_shr_r16_imm8(dst, imm)) } +emit_shr_m16_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem16, imm: i8) { append_elem(instructions, inst_shr_m16_imm8(dst, imm)) } +emit_shr_r32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32) { append_elem(instructions, inst_shr_r32(dst)) } +emit_shr_m32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem32) { append_elem(instructions, inst_shr_m32(dst)) } +emit_shr_r32_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, imm: i8) { append_elem(instructions, inst_shr_r32_imm8(dst, imm)) } +emit_shr_m32_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem32, imm: i8) { append_elem(instructions, inst_shr_m32_imm8(dst, imm)) } +emit_shr_r64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64) { append_elem(instructions, inst_shr_r64(dst)) } +emit_shr_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem64) { append_elem(instructions, inst_shr_m64(dst)) } +emit_shr_r64_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, imm: i8) { append_elem(instructions, inst_shr_r64_imm8(dst, imm)) } +emit_shr_m64_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem64, imm: i8) { append_elem(instructions, inst_shr_m64_imm8(dst, imm)) } inst_sar_r8 :: #force_inline proc "contextless" (dst: GPR8) -> Instruction { return with_hint(Instruction{ mnemonic = .SAR, operand_count = 1, ops = {op_gpr8(dst), {}, {}, {}} }, 311) } inst_sar_m8 :: #force_inline proc "contextless" (dst: Mem8) -> Instruction { return with_hint(Instruction{ mnemonic = .SAR, operand_count = 1, ops = {op_mem(dst.mem, 1), {}, {}, {}} }, 311) } inst_sar_r8_imm8 :: #force_inline proc "contextless" (dst: GPR8, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .SAR, operand_count = 2, ops = {op_gpr8(dst), op_imm8(imm), {}, {}} }, 313) } @@ -873,22 +873,22 @@ inst_sar_r64 :: #force_inline proc "contextless" (dst: GP inst_sar_m64 :: #force_inline proc "contextless" (dst: Mem64) -> Instruction { return with_hint(Instruction{ mnemonic = .SAR, operand_count = 1, ops = {op_mem(dst.mem, 8), {}, {}, {}} }, 320) } inst_sar_r64_imm8 :: #force_inline proc "contextless" (dst: GPR64, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .SAR, operand_count = 2, ops = {op_gpr64(dst), op_imm8(imm), {}, {}} }, 322) } inst_sar_m64_imm8 :: #force_inline proc "contextless" (dst: Mem64, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .SAR, operand_count = 2, ops = {op_mem(dst.mem, 8), op_imm8(imm), {}, {}} }, 322) } -emit_sar_r8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR8) { append(instructions, inst_sar_r8(dst)) } -emit_sar_m8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem8) { append(instructions, inst_sar_m8(dst)) } -emit_sar_r8_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR8, imm: i8) { append(instructions, inst_sar_r8_imm8(dst, imm)) } -emit_sar_m8_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem8, imm: i8) { append(instructions, inst_sar_m8_imm8(dst, imm)) } -emit_sar_r16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR16) { append(instructions, inst_sar_r16(dst)) } -emit_sar_m16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem16) { append(instructions, inst_sar_m16(dst)) } -emit_sar_r16_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR16, imm: i8) { append(instructions, inst_sar_r16_imm8(dst, imm)) } -emit_sar_m16_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem16, imm: i8) { append(instructions, inst_sar_m16_imm8(dst, imm)) } -emit_sar_r32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32) { append(instructions, inst_sar_r32(dst)) } -emit_sar_m32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem32) { append(instructions, inst_sar_m32(dst)) } -emit_sar_r32_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, imm: i8) { append(instructions, inst_sar_r32_imm8(dst, imm)) } -emit_sar_m32_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem32, imm: i8) { append(instructions, inst_sar_m32_imm8(dst, imm)) } -emit_sar_r64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64) { append(instructions, inst_sar_r64(dst)) } -emit_sar_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem64) { append(instructions, inst_sar_m64(dst)) } -emit_sar_r64_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, imm: i8) { append(instructions, inst_sar_r64_imm8(dst, imm)) } -emit_sar_m64_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem64, imm: i8) { append(instructions, inst_sar_m64_imm8(dst, imm)) } +emit_sar_r8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR8) { append_elem(instructions, inst_sar_r8(dst)) } +emit_sar_m8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem8) { append_elem(instructions, inst_sar_m8(dst)) } +emit_sar_r8_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR8, imm: i8) { append_elem(instructions, inst_sar_r8_imm8(dst, imm)) } +emit_sar_m8_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem8, imm: i8) { append_elem(instructions, inst_sar_m8_imm8(dst, imm)) } +emit_sar_r16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR16) { append_elem(instructions, inst_sar_r16(dst)) } +emit_sar_m16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem16) { append_elem(instructions, inst_sar_m16(dst)) } +emit_sar_r16_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR16, imm: i8) { append_elem(instructions, inst_sar_r16_imm8(dst, imm)) } +emit_sar_m16_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem16, imm: i8) { append_elem(instructions, inst_sar_m16_imm8(dst, imm)) } +emit_sar_r32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32) { append_elem(instructions, inst_sar_r32(dst)) } +emit_sar_m32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem32) { append_elem(instructions, inst_sar_m32(dst)) } +emit_sar_r32_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, imm: i8) { append_elem(instructions, inst_sar_r32_imm8(dst, imm)) } +emit_sar_m32_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem32, imm: i8) { append_elem(instructions, inst_sar_m32_imm8(dst, imm)) } +emit_sar_r64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64) { append_elem(instructions, inst_sar_r64(dst)) } +emit_sar_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem64) { append_elem(instructions, inst_sar_m64(dst)) } +emit_sar_r64_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, imm: i8) { append_elem(instructions, inst_sar_r64_imm8(dst, imm)) } +emit_sar_m64_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem64, imm: i8) { append_elem(instructions, inst_sar_m64_imm8(dst, imm)) } inst_sal_r8 :: #force_inline proc "contextless" (dst: GPR8) -> Instruction { return with_hint(Instruction{ mnemonic = .SAL, operand_count = 1, ops = {op_gpr8(dst), {}, {}, {}} }, 323) } inst_sal_m8 :: #force_inline proc "contextless" (dst: Mem8) -> Instruction { return with_hint(Instruction{ mnemonic = .SAL, operand_count = 1, ops = {op_mem(dst.mem, 1), {}, {}, {}} }, 323) } inst_sal_r8_imm8 :: #force_inline proc "contextless" (dst: GPR8, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .SAL, operand_count = 2, ops = {op_gpr8(dst), op_imm8(imm), {}, {}} }, 325) } @@ -905,22 +905,22 @@ inst_sal_r64 :: #force_inline proc "contextless" (dst: GP inst_sal_m64 :: #force_inline proc "contextless" (dst: Mem64) -> Instruction { return with_hint(Instruction{ mnemonic = .SAL, operand_count = 1, ops = {op_mem(dst.mem, 8), {}, {}, {}} }, 332) } inst_sal_r64_imm8 :: #force_inline proc "contextless" (dst: GPR64, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .SAL, operand_count = 2, ops = {op_gpr64(dst), op_imm8(imm), {}, {}} }, 334) } inst_sal_m64_imm8 :: #force_inline proc "contextless" (dst: Mem64, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .SAL, operand_count = 2, ops = {op_mem(dst.mem, 8), op_imm8(imm), {}, {}} }, 334) } -emit_sal_r8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR8) { append(instructions, inst_sal_r8(dst)) } -emit_sal_m8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem8) { append(instructions, inst_sal_m8(dst)) } -emit_sal_r8_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR8, imm: i8) { append(instructions, inst_sal_r8_imm8(dst, imm)) } -emit_sal_m8_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem8, imm: i8) { append(instructions, inst_sal_m8_imm8(dst, imm)) } -emit_sal_r16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR16) { append(instructions, inst_sal_r16(dst)) } -emit_sal_m16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem16) { append(instructions, inst_sal_m16(dst)) } -emit_sal_r16_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR16, imm: i8) { append(instructions, inst_sal_r16_imm8(dst, imm)) } -emit_sal_m16_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem16, imm: i8) { append(instructions, inst_sal_m16_imm8(dst, imm)) } -emit_sal_r32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32) { append(instructions, inst_sal_r32(dst)) } -emit_sal_m32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem32) { append(instructions, inst_sal_m32(dst)) } -emit_sal_r32_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, imm: i8) { append(instructions, inst_sal_r32_imm8(dst, imm)) } -emit_sal_m32_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem32, imm: i8) { append(instructions, inst_sal_m32_imm8(dst, imm)) } -emit_sal_r64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64) { append(instructions, inst_sal_r64(dst)) } -emit_sal_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem64) { append(instructions, inst_sal_m64(dst)) } -emit_sal_r64_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, imm: i8) { append(instructions, inst_sal_r64_imm8(dst, imm)) } -emit_sal_m64_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem64, imm: i8) { append(instructions, inst_sal_m64_imm8(dst, imm)) } +emit_sal_r8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR8) { append_elem(instructions, inst_sal_r8(dst)) } +emit_sal_m8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem8) { append_elem(instructions, inst_sal_m8(dst)) } +emit_sal_r8_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR8, imm: i8) { append_elem(instructions, inst_sal_r8_imm8(dst, imm)) } +emit_sal_m8_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem8, imm: i8) { append_elem(instructions, inst_sal_m8_imm8(dst, imm)) } +emit_sal_r16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR16) { append_elem(instructions, inst_sal_r16(dst)) } +emit_sal_m16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem16) { append_elem(instructions, inst_sal_m16(dst)) } +emit_sal_r16_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR16, imm: i8) { append_elem(instructions, inst_sal_r16_imm8(dst, imm)) } +emit_sal_m16_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem16, imm: i8) { append_elem(instructions, inst_sal_m16_imm8(dst, imm)) } +emit_sal_r32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32) { append_elem(instructions, inst_sal_r32(dst)) } +emit_sal_m32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem32) { append_elem(instructions, inst_sal_m32(dst)) } +emit_sal_r32_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, imm: i8) { append_elem(instructions, inst_sal_r32_imm8(dst, imm)) } +emit_sal_m32_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem32, imm: i8) { append_elem(instructions, inst_sal_m32_imm8(dst, imm)) } +emit_sal_r64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64) { append_elem(instructions, inst_sal_r64(dst)) } +emit_sal_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem64) { append_elem(instructions, inst_sal_m64(dst)) } +emit_sal_r64_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, imm: i8) { append_elem(instructions, inst_sal_r64_imm8(dst, imm)) } +emit_sal_m64_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem64, imm: i8) { append_elem(instructions, inst_sal_m64_imm8(dst, imm)) } inst_rol_r8 :: #force_inline proc "contextless" (dst: GPR8) -> Instruction { return with_hint(Instruction{ mnemonic = .ROL, operand_count = 1, ops = {op_gpr8(dst), {}, {}, {}} }, 335) } inst_rol_m8 :: #force_inline proc "contextless" (dst: Mem8) -> Instruction { return with_hint(Instruction{ mnemonic = .ROL, operand_count = 1, ops = {op_mem(dst.mem, 1), {}, {}, {}} }, 335) } inst_rol_r8_imm8 :: #force_inline proc "contextless" (dst: GPR8, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .ROL, operand_count = 2, ops = {op_gpr8(dst), op_imm8(imm), {}, {}} }, 337) } @@ -937,22 +937,22 @@ inst_rol_r64 :: #force_inline proc "contextless" (dst: GP inst_rol_m64 :: #force_inline proc "contextless" (dst: Mem64) -> Instruction { return with_hint(Instruction{ mnemonic = .ROL, operand_count = 1, ops = {op_mem(dst.mem, 8), {}, {}, {}} }, 344) } inst_rol_r64_imm8 :: #force_inline proc "contextless" (dst: GPR64, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .ROL, operand_count = 2, ops = {op_gpr64(dst), op_imm8(imm), {}, {}} }, 346) } inst_rol_m64_imm8 :: #force_inline proc "contextless" (dst: Mem64, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .ROL, operand_count = 2, ops = {op_mem(dst.mem, 8), op_imm8(imm), {}, {}} }, 346) } -emit_rol_r8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR8) { append(instructions, inst_rol_r8(dst)) } -emit_rol_m8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem8) { append(instructions, inst_rol_m8(dst)) } -emit_rol_r8_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR8, imm: i8) { append(instructions, inst_rol_r8_imm8(dst, imm)) } -emit_rol_m8_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem8, imm: i8) { append(instructions, inst_rol_m8_imm8(dst, imm)) } -emit_rol_r16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR16) { append(instructions, inst_rol_r16(dst)) } -emit_rol_m16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem16) { append(instructions, inst_rol_m16(dst)) } -emit_rol_r16_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR16, imm: i8) { append(instructions, inst_rol_r16_imm8(dst, imm)) } -emit_rol_m16_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem16, imm: i8) { append(instructions, inst_rol_m16_imm8(dst, imm)) } -emit_rol_r32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32) { append(instructions, inst_rol_r32(dst)) } -emit_rol_m32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem32) { append(instructions, inst_rol_m32(dst)) } -emit_rol_r32_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, imm: i8) { append(instructions, inst_rol_r32_imm8(dst, imm)) } -emit_rol_m32_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem32, imm: i8) { append(instructions, inst_rol_m32_imm8(dst, imm)) } -emit_rol_r64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64) { append(instructions, inst_rol_r64(dst)) } -emit_rol_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem64) { append(instructions, inst_rol_m64(dst)) } -emit_rol_r64_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, imm: i8) { append(instructions, inst_rol_r64_imm8(dst, imm)) } -emit_rol_m64_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem64, imm: i8) { append(instructions, inst_rol_m64_imm8(dst, imm)) } +emit_rol_r8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR8) { append_elem(instructions, inst_rol_r8(dst)) } +emit_rol_m8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem8) { append_elem(instructions, inst_rol_m8(dst)) } +emit_rol_r8_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR8, imm: i8) { append_elem(instructions, inst_rol_r8_imm8(dst, imm)) } +emit_rol_m8_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem8, imm: i8) { append_elem(instructions, inst_rol_m8_imm8(dst, imm)) } +emit_rol_r16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR16) { append_elem(instructions, inst_rol_r16(dst)) } +emit_rol_m16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem16) { append_elem(instructions, inst_rol_m16(dst)) } +emit_rol_r16_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR16, imm: i8) { append_elem(instructions, inst_rol_r16_imm8(dst, imm)) } +emit_rol_m16_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem16, imm: i8) { append_elem(instructions, inst_rol_m16_imm8(dst, imm)) } +emit_rol_r32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32) { append_elem(instructions, inst_rol_r32(dst)) } +emit_rol_m32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem32) { append_elem(instructions, inst_rol_m32(dst)) } +emit_rol_r32_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, imm: i8) { append_elem(instructions, inst_rol_r32_imm8(dst, imm)) } +emit_rol_m32_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem32, imm: i8) { append_elem(instructions, inst_rol_m32_imm8(dst, imm)) } +emit_rol_r64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64) { append_elem(instructions, inst_rol_r64(dst)) } +emit_rol_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem64) { append_elem(instructions, inst_rol_m64(dst)) } +emit_rol_r64_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, imm: i8) { append_elem(instructions, inst_rol_r64_imm8(dst, imm)) } +emit_rol_m64_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem64, imm: i8) { append_elem(instructions, inst_rol_m64_imm8(dst, imm)) } inst_ror_r8 :: #force_inline proc "contextless" (dst: GPR8) -> Instruction { return with_hint(Instruction{ mnemonic = .ROR, operand_count = 1, ops = {op_gpr8(dst), {}, {}, {}} }, 347) } inst_ror_m8 :: #force_inline proc "contextless" (dst: Mem8) -> Instruction { return with_hint(Instruction{ mnemonic = .ROR, operand_count = 1, ops = {op_mem(dst.mem, 1), {}, {}, {}} }, 347) } inst_ror_r8_imm8 :: #force_inline proc "contextless" (dst: GPR8, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .ROR, operand_count = 2, ops = {op_gpr8(dst), op_imm8(imm), {}, {}} }, 349) } @@ -969,22 +969,22 @@ inst_ror_r64 :: #force_inline proc "contextless" (dst: GP inst_ror_m64 :: #force_inline proc "contextless" (dst: Mem64) -> Instruction { return with_hint(Instruction{ mnemonic = .ROR, operand_count = 1, ops = {op_mem(dst.mem, 8), {}, {}, {}} }, 356) } inst_ror_r64_imm8 :: #force_inline proc "contextless" (dst: GPR64, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .ROR, operand_count = 2, ops = {op_gpr64(dst), op_imm8(imm), {}, {}} }, 358) } inst_ror_m64_imm8 :: #force_inline proc "contextless" (dst: Mem64, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .ROR, operand_count = 2, ops = {op_mem(dst.mem, 8), op_imm8(imm), {}, {}} }, 358) } -emit_ror_r8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR8) { append(instructions, inst_ror_r8(dst)) } -emit_ror_m8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem8) { append(instructions, inst_ror_m8(dst)) } -emit_ror_r8_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR8, imm: i8) { append(instructions, inst_ror_r8_imm8(dst, imm)) } -emit_ror_m8_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem8, imm: i8) { append(instructions, inst_ror_m8_imm8(dst, imm)) } -emit_ror_r16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR16) { append(instructions, inst_ror_r16(dst)) } -emit_ror_m16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem16) { append(instructions, inst_ror_m16(dst)) } -emit_ror_r16_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR16, imm: i8) { append(instructions, inst_ror_r16_imm8(dst, imm)) } -emit_ror_m16_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem16, imm: i8) { append(instructions, inst_ror_m16_imm8(dst, imm)) } -emit_ror_r32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32) { append(instructions, inst_ror_r32(dst)) } -emit_ror_m32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem32) { append(instructions, inst_ror_m32(dst)) } -emit_ror_r32_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, imm: i8) { append(instructions, inst_ror_r32_imm8(dst, imm)) } -emit_ror_m32_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem32, imm: i8) { append(instructions, inst_ror_m32_imm8(dst, imm)) } -emit_ror_r64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64) { append(instructions, inst_ror_r64(dst)) } -emit_ror_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem64) { append(instructions, inst_ror_m64(dst)) } -emit_ror_r64_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, imm: i8) { append(instructions, inst_ror_r64_imm8(dst, imm)) } -emit_ror_m64_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem64, imm: i8) { append(instructions, inst_ror_m64_imm8(dst, imm)) } +emit_ror_r8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR8) { append_elem(instructions, inst_ror_r8(dst)) } +emit_ror_m8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem8) { append_elem(instructions, inst_ror_m8(dst)) } +emit_ror_r8_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR8, imm: i8) { append_elem(instructions, inst_ror_r8_imm8(dst, imm)) } +emit_ror_m8_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem8, imm: i8) { append_elem(instructions, inst_ror_m8_imm8(dst, imm)) } +emit_ror_r16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR16) { append_elem(instructions, inst_ror_r16(dst)) } +emit_ror_m16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem16) { append_elem(instructions, inst_ror_m16(dst)) } +emit_ror_r16_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR16, imm: i8) { append_elem(instructions, inst_ror_r16_imm8(dst, imm)) } +emit_ror_m16_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem16, imm: i8) { append_elem(instructions, inst_ror_m16_imm8(dst, imm)) } +emit_ror_r32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32) { append_elem(instructions, inst_ror_r32(dst)) } +emit_ror_m32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem32) { append_elem(instructions, inst_ror_m32(dst)) } +emit_ror_r32_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, imm: i8) { append_elem(instructions, inst_ror_r32_imm8(dst, imm)) } +emit_ror_m32_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem32, imm: i8) { append_elem(instructions, inst_ror_m32_imm8(dst, imm)) } +emit_ror_r64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64) { append_elem(instructions, inst_ror_r64(dst)) } +emit_ror_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem64) { append_elem(instructions, inst_ror_m64(dst)) } +emit_ror_r64_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, imm: i8) { append_elem(instructions, inst_ror_r64_imm8(dst, imm)) } +emit_ror_m64_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem64, imm: i8) { append_elem(instructions, inst_ror_m64_imm8(dst, imm)) } inst_rcl_r8 :: #force_inline proc "contextless" (dst: GPR8) -> Instruction { return with_hint(Instruction{ mnemonic = .RCL, operand_count = 1, ops = {op_gpr8(dst), {}, {}, {}} }, 359) } inst_rcl_m8 :: #force_inline proc "contextless" (dst: Mem8) -> Instruction { return with_hint(Instruction{ mnemonic = .RCL, operand_count = 1, ops = {op_mem(dst.mem, 1), {}, {}, {}} }, 359) } inst_rcl_r8_imm8 :: #force_inline proc "contextless" (dst: GPR8, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .RCL, operand_count = 2, ops = {op_gpr8(dst), op_imm8(imm), {}, {}} }, 361) } @@ -1001,22 +1001,22 @@ inst_rcl_r64 :: #force_inline proc "contextless" (dst: GP inst_rcl_m64 :: #force_inline proc "contextless" (dst: Mem64) -> Instruction { return with_hint(Instruction{ mnemonic = .RCL, operand_count = 1, ops = {op_mem(dst.mem, 8), {}, {}, {}} }, 368) } inst_rcl_r64_imm8 :: #force_inline proc "contextless" (dst: GPR64, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .RCL, operand_count = 2, ops = {op_gpr64(dst), op_imm8(imm), {}, {}} }, 370) } inst_rcl_m64_imm8 :: #force_inline proc "contextless" (dst: Mem64, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .RCL, operand_count = 2, ops = {op_mem(dst.mem, 8), op_imm8(imm), {}, {}} }, 370) } -emit_rcl_r8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR8) { append(instructions, inst_rcl_r8(dst)) } -emit_rcl_m8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem8) { append(instructions, inst_rcl_m8(dst)) } -emit_rcl_r8_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR8, imm: i8) { append(instructions, inst_rcl_r8_imm8(dst, imm)) } -emit_rcl_m8_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem8, imm: i8) { append(instructions, inst_rcl_m8_imm8(dst, imm)) } -emit_rcl_r16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR16) { append(instructions, inst_rcl_r16(dst)) } -emit_rcl_m16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem16) { append(instructions, inst_rcl_m16(dst)) } -emit_rcl_r16_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR16, imm: i8) { append(instructions, inst_rcl_r16_imm8(dst, imm)) } -emit_rcl_m16_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem16, imm: i8) { append(instructions, inst_rcl_m16_imm8(dst, imm)) } -emit_rcl_r32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32) { append(instructions, inst_rcl_r32(dst)) } -emit_rcl_m32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem32) { append(instructions, inst_rcl_m32(dst)) } -emit_rcl_r32_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, imm: i8) { append(instructions, inst_rcl_r32_imm8(dst, imm)) } -emit_rcl_m32_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem32, imm: i8) { append(instructions, inst_rcl_m32_imm8(dst, imm)) } -emit_rcl_r64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64) { append(instructions, inst_rcl_r64(dst)) } -emit_rcl_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem64) { append(instructions, inst_rcl_m64(dst)) } -emit_rcl_r64_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, imm: i8) { append(instructions, inst_rcl_r64_imm8(dst, imm)) } -emit_rcl_m64_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem64, imm: i8) { append(instructions, inst_rcl_m64_imm8(dst, imm)) } +emit_rcl_r8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR8) { append_elem(instructions, inst_rcl_r8(dst)) } +emit_rcl_m8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem8) { append_elem(instructions, inst_rcl_m8(dst)) } +emit_rcl_r8_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR8, imm: i8) { append_elem(instructions, inst_rcl_r8_imm8(dst, imm)) } +emit_rcl_m8_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem8, imm: i8) { append_elem(instructions, inst_rcl_m8_imm8(dst, imm)) } +emit_rcl_r16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR16) { append_elem(instructions, inst_rcl_r16(dst)) } +emit_rcl_m16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem16) { append_elem(instructions, inst_rcl_m16(dst)) } +emit_rcl_r16_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR16, imm: i8) { append_elem(instructions, inst_rcl_r16_imm8(dst, imm)) } +emit_rcl_m16_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem16, imm: i8) { append_elem(instructions, inst_rcl_m16_imm8(dst, imm)) } +emit_rcl_r32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32) { append_elem(instructions, inst_rcl_r32(dst)) } +emit_rcl_m32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem32) { append_elem(instructions, inst_rcl_m32(dst)) } +emit_rcl_r32_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, imm: i8) { append_elem(instructions, inst_rcl_r32_imm8(dst, imm)) } +emit_rcl_m32_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem32, imm: i8) { append_elem(instructions, inst_rcl_m32_imm8(dst, imm)) } +emit_rcl_r64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64) { append_elem(instructions, inst_rcl_r64(dst)) } +emit_rcl_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem64) { append_elem(instructions, inst_rcl_m64(dst)) } +emit_rcl_r64_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, imm: i8) { append_elem(instructions, inst_rcl_r64_imm8(dst, imm)) } +emit_rcl_m64_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem64, imm: i8) { append_elem(instructions, inst_rcl_m64_imm8(dst, imm)) } inst_rcr_r8 :: #force_inline proc "contextless" (dst: GPR8) -> Instruction { return with_hint(Instruction{ mnemonic = .RCR, operand_count = 1, ops = {op_gpr8(dst), {}, {}, {}} }, 371) } inst_rcr_m8 :: #force_inline proc "contextless" (dst: Mem8) -> Instruction { return with_hint(Instruction{ mnemonic = .RCR, operand_count = 1, ops = {op_mem(dst.mem, 1), {}, {}, {}} }, 371) } inst_rcr_r8_imm8 :: #force_inline proc "contextless" (dst: GPR8, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .RCR, operand_count = 2, ops = {op_gpr8(dst), op_imm8(imm), {}, {}} }, 373) } @@ -1033,22 +1033,22 @@ inst_rcr_r64 :: #force_inline proc "contextless" (dst: GP inst_rcr_m64 :: #force_inline proc "contextless" (dst: Mem64) -> Instruction { return with_hint(Instruction{ mnemonic = .RCR, operand_count = 1, ops = {op_mem(dst.mem, 8), {}, {}, {}} }, 380) } inst_rcr_r64_imm8 :: #force_inline proc "contextless" (dst: GPR64, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .RCR, operand_count = 2, ops = {op_gpr64(dst), op_imm8(imm), {}, {}} }, 382) } inst_rcr_m64_imm8 :: #force_inline proc "contextless" (dst: Mem64, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .RCR, operand_count = 2, ops = {op_mem(dst.mem, 8), op_imm8(imm), {}, {}} }, 382) } -emit_rcr_r8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR8) { append(instructions, inst_rcr_r8(dst)) } -emit_rcr_m8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem8) { append(instructions, inst_rcr_m8(dst)) } -emit_rcr_r8_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR8, imm: i8) { append(instructions, inst_rcr_r8_imm8(dst, imm)) } -emit_rcr_m8_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem8, imm: i8) { append(instructions, inst_rcr_m8_imm8(dst, imm)) } -emit_rcr_r16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR16) { append(instructions, inst_rcr_r16(dst)) } -emit_rcr_m16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem16) { append(instructions, inst_rcr_m16(dst)) } -emit_rcr_r16_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR16, imm: i8) { append(instructions, inst_rcr_r16_imm8(dst, imm)) } -emit_rcr_m16_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem16, imm: i8) { append(instructions, inst_rcr_m16_imm8(dst, imm)) } -emit_rcr_r32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32) { append(instructions, inst_rcr_r32(dst)) } -emit_rcr_m32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem32) { append(instructions, inst_rcr_m32(dst)) } -emit_rcr_r32_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, imm: i8) { append(instructions, inst_rcr_r32_imm8(dst, imm)) } -emit_rcr_m32_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem32, imm: i8) { append(instructions, inst_rcr_m32_imm8(dst, imm)) } -emit_rcr_r64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64) { append(instructions, inst_rcr_r64(dst)) } -emit_rcr_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem64) { append(instructions, inst_rcr_m64(dst)) } -emit_rcr_r64_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, imm: i8) { append(instructions, inst_rcr_r64_imm8(dst, imm)) } -emit_rcr_m64_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem64, imm: i8) { append(instructions, inst_rcr_m64_imm8(dst, imm)) } +emit_rcr_r8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR8) { append_elem(instructions, inst_rcr_r8(dst)) } +emit_rcr_m8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem8) { append_elem(instructions, inst_rcr_m8(dst)) } +emit_rcr_r8_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR8, imm: i8) { append_elem(instructions, inst_rcr_r8_imm8(dst, imm)) } +emit_rcr_m8_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem8, imm: i8) { append_elem(instructions, inst_rcr_m8_imm8(dst, imm)) } +emit_rcr_r16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR16) { append_elem(instructions, inst_rcr_r16(dst)) } +emit_rcr_m16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem16) { append_elem(instructions, inst_rcr_m16(dst)) } +emit_rcr_r16_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR16, imm: i8) { append_elem(instructions, inst_rcr_r16_imm8(dst, imm)) } +emit_rcr_m16_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem16, imm: i8) { append_elem(instructions, inst_rcr_m16_imm8(dst, imm)) } +emit_rcr_r32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32) { append_elem(instructions, inst_rcr_r32(dst)) } +emit_rcr_m32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem32) { append_elem(instructions, inst_rcr_m32(dst)) } +emit_rcr_r32_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, imm: i8) { append_elem(instructions, inst_rcr_r32_imm8(dst, imm)) } +emit_rcr_m32_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem32, imm: i8) { append_elem(instructions, inst_rcr_m32_imm8(dst, imm)) } +emit_rcr_r64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64) { append_elem(instructions, inst_rcr_r64(dst)) } +emit_rcr_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem64) { append_elem(instructions, inst_rcr_m64(dst)) } +emit_rcr_r64_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, imm: i8) { append_elem(instructions, inst_rcr_r64_imm8(dst, imm)) } +emit_rcr_m64_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem64, imm: i8) { append_elem(instructions, inst_rcr_m64_imm8(dst, imm)) } inst_shld_r16_r16_imm8 :: #force_inline proc "contextless" (dst: GPR16, src: GPR16, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .SHLD, operand_count = 3, ops = {op_gpr16(dst), op_gpr16(src), op_imm8(imm), {}} }, 383) } inst_shld_m16_r16_imm8 :: #force_inline proc "contextless" (dst: Mem16, src: GPR16, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .SHLD, operand_count = 3, ops = {op_mem(dst.mem, 2), op_gpr16(src), op_imm8(imm), {}} }, 383) } inst_shld_r32_r32_imm8 :: #force_inline proc "contextless" (dst: GPR32, src: GPR32, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .SHLD, operand_count = 3, ops = {op_gpr32(dst), op_gpr32(src), op_imm8(imm), {}} }, 384) } @@ -1061,18 +1061,18 @@ inst_shld_r32_r32 :: #force_inline proc "contextless" (dst: GP inst_shld_m32_r32 :: #force_inline proc "contextless" (dst: Mem32, src: GPR32) -> Instruction { return with_hint(Instruction{ mnemonic = .SHLD, operand_count = 2, ops = {op_mem(dst.mem, 4), op_gpr32(src), {}, {}} }, 387) } inst_shld_r64_r64 :: #force_inline proc "contextless" (dst: GPR64, src: GPR64) -> Instruction { return with_hint(Instruction{ mnemonic = .SHLD, operand_count = 2, ops = {op_gpr64(dst), op_gpr64(src), {}, {}} }, 388) } inst_shld_m64_r64 :: #force_inline proc "contextless" (dst: Mem64, src: GPR64) -> Instruction { return with_hint(Instruction{ mnemonic = .SHLD, operand_count = 2, ops = {op_mem(dst.mem, 8), op_gpr64(src), {}, {}} }, 388) } -emit_shld_r16_r16_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR16, src: GPR16, imm: i8) { append(instructions, inst_shld_r16_r16_imm8(dst, src, imm)) } -emit_shld_m16_r16_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem16, src: GPR16, imm: i8) { append(instructions, inst_shld_m16_r16_imm8(dst, src, imm)) } -emit_shld_r32_r32_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: GPR32, imm: i8) { append(instructions, inst_shld_r32_r32_imm8(dst, src, imm)) } -emit_shld_m32_r32_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem32, src: GPR32, imm: i8) { append(instructions, inst_shld_m32_r32_imm8(dst, src, imm)) } -emit_shld_r64_r64_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: GPR64, imm: i8) { append(instructions, inst_shld_r64_r64_imm8(dst, src, imm)) } -emit_shld_m64_r64_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem64, src: GPR64, imm: i8) { append(instructions, inst_shld_m64_r64_imm8(dst, src, imm)) } -emit_shld_r16_r16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR16, src: GPR16) { append(instructions, inst_shld_r16_r16(dst, src)) } -emit_shld_m16_r16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem16, src: GPR16) { append(instructions, inst_shld_m16_r16(dst, src)) } -emit_shld_r32_r32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: GPR32) { append(instructions, inst_shld_r32_r32(dst, src)) } -emit_shld_m32_r32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem32, src: GPR32) { append(instructions, inst_shld_m32_r32(dst, src)) } -emit_shld_r64_r64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: GPR64) { append(instructions, inst_shld_r64_r64(dst, src)) } -emit_shld_m64_r64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem64, src: GPR64) { append(instructions, inst_shld_m64_r64(dst, src)) } +emit_shld_r16_r16_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR16, src: GPR16, imm: i8) { append_elem(instructions, inst_shld_r16_r16_imm8(dst, src, imm)) } +emit_shld_m16_r16_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem16, src: GPR16, imm: i8) { append_elem(instructions, inst_shld_m16_r16_imm8(dst, src, imm)) } +emit_shld_r32_r32_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: GPR32, imm: i8) { append_elem(instructions, inst_shld_r32_r32_imm8(dst, src, imm)) } +emit_shld_m32_r32_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem32, src: GPR32, imm: i8) { append_elem(instructions, inst_shld_m32_r32_imm8(dst, src, imm)) } +emit_shld_r64_r64_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: GPR64, imm: i8) { append_elem(instructions, inst_shld_r64_r64_imm8(dst, src, imm)) } +emit_shld_m64_r64_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem64, src: GPR64, imm: i8) { append_elem(instructions, inst_shld_m64_r64_imm8(dst, src, imm)) } +emit_shld_r16_r16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR16, src: GPR16) { append_elem(instructions, inst_shld_r16_r16(dst, src)) } +emit_shld_m16_r16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem16, src: GPR16) { append_elem(instructions, inst_shld_m16_r16(dst, src)) } +emit_shld_r32_r32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: GPR32) { append_elem(instructions, inst_shld_r32_r32(dst, src)) } +emit_shld_m32_r32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem32, src: GPR32) { append_elem(instructions, inst_shld_m32_r32(dst, src)) } +emit_shld_r64_r64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: GPR64) { append_elem(instructions, inst_shld_r64_r64(dst, src)) } +emit_shld_m64_r64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem64, src: GPR64) { append_elem(instructions, inst_shld_m64_r64(dst, src)) } inst_shrd_r16_r16_imm8 :: #force_inline proc "contextless" (dst: GPR16, src: GPR16, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .SHRD, operand_count = 3, ops = {op_gpr16(dst), op_gpr16(src), op_imm8(imm), {}} }, 389) } inst_shrd_m16_r16_imm8 :: #force_inline proc "contextless" (dst: Mem16, src: GPR16, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .SHRD, operand_count = 3, ops = {op_mem(dst.mem, 2), op_gpr16(src), op_imm8(imm), {}} }, 389) } inst_shrd_r32_r32_imm8 :: #force_inline proc "contextless" (dst: GPR32, src: GPR32, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .SHRD, operand_count = 3, ops = {op_gpr32(dst), op_gpr32(src), op_imm8(imm), {}} }, 390) } @@ -1085,18 +1085,18 @@ inst_shrd_r32_r32 :: #force_inline proc "contextless" (dst: GP inst_shrd_m32_r32 :: #force_inline proc "contextless" (dst: Mem32, src: GPR32) -> Instruction { return with_hint(Instruction{ mnemonic = .SHRD, operand_count = 2, ops = {op_mem(dst.mem, 4), op_gpr32(src), {}, {}} }, 393) } inst_shrd_r64_r64 :: #force_inline proc "contextless" (dst: GPR64, src: GPR64) -> Instruction { return with_hint(Instruction{ mnemonic = .SHRD, operand_count = 2, ops = {op_gpr64(dst), op_gpr64(src), {}, {}} }, 394) } inst_shrd_m64_r64 :: #force_inline proc "contextless" (dst: Mem64, src: GPR64) -> Instruction { return with_hint(Instruction{ mnemonic = .SHRD, operand_count = 2, ops = {op_mem(dst.mem, 8), op_gpr64(src), {}, {}} }, 394) } -emit_shrd_r16_r16_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR16, src: GPR16, imm: i8) { append(instructions, inst_shrd_r16_r16_imm8(dst, src, imm)) } -emit_shrd_m16_r16_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem16, src: GPR16, imm: i8) { append(instructions, inst_shrd_m16_r16_imm8(dst, src, imm)) } -emit_shrd_r32_r32_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: GPR32, imm: i8) { append(instructions, inst_shrd_r32_r32_imm8(dst, src, imm)) } -emit_shrd_m32_r32_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem32, src: GPR32, imm: i8) { append(instructions, inst_shrd_m32_r32_imm8(dst, src, imm)) } -emit_shrd_r64_r64_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: GPR64, imm: i8) { append(instructions, inst_shrd_r64_r64_imm8(dst, src, imm)) } -emit_shrd_m64_r64_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem64, src: GPR64, imm: i8) { append(instructions, inst_shrd_m64_r64_imm8(dst, src, imm)) } -emit_shrd_r16_r16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR16, src: GPR16) { append(instructions, inst_shrd_r16_r16(dst, src)) } -emit_shrd_m16_r16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem16, src: GPR16) { append(instructions, inst_shrd_m16_r16(dst, src)) } -emit_shrd_r32_r32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: GPR32) { append(instructions, inst_shrd_r32_r32(dst, src)) } -emit_shrd_m32_r32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem32, src: GPR32) { append(instructions, inst_shrd_m32_r32(dst, src)) } -emit_shrd_r64_r64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: GPR64) { append(instructions, inst_shrd_r64_r64(dst, src)) } -emit_shrd_m64_r64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem64, src: GPR64) { append(instructions, inst_shrd_m64_r64(dst, src)) } +emit_shrd_r16_r16_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR16, src: GPR16, imm: i8) { append_elem(instructions, inst_shrd_r16_r16_imm8(dst, src, imm)) } +emit_shrd_m16_r16_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem16, src: GPR16, imm: i8) { append_elem(instructions, inst_shrd_m16_r16_imm8(dst, src, imm)) } +emit_shrd_r32_r32_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: GPR32, imm: i8) { append_elem(instructions, inst_shrd_r32_r32_imm8(dst, src, imm)) } +emit_shrd_m32_r32_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem32, src: GPR32, imm: i8) { append_elem(instructions, inst_shrd_m32_r32_imm8(dst, src, imm)) } +emit_shrd_r64_r64_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: GPR64, imm: i8) { append_elem(instructions, inst_shrd_r64_r64_imm8(dst, src, imm)) } +emit_shrd_m64_r64_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem64, src: GPR64, imm: i8) { append_elem(instructions, inst_shrd_m64_r64_imm8(dst, src, imm)) } +emit_shrd_r16_r16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR16, src: GPR16) { append_elem(instructions, inst_shrd_r16_r16(dst, src)) } +emit_shrd_m16_r16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem16, src: GPR16) { append_elem(instructions, inst_shrd_m16_r16(dst, src)) } +emit_shrd_r32_r32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: GPR32) { append_elem(instructions, inst_shrd_r32_r32(dst, src)) } +emit_shrd_m32_r32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem32, src: GPR32) { append_elem(instructions, inst_shrd_m32_r32(dst, src)) } +emit_shrd_r64_r64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: GPR64) { append_elem(instructions, inst_shrd_r64_r64(dst, src)) } +emit_shrd_m64_r64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem64, src: GPR64) { append_elem(instructions, inst_shrd_m64_r64(dst, src)) } inst_bt_r16_r16 :: #force_inline proc "contextless" (dst: GPR16, src: GPR16) -> Instruction { return with_hint(Instruction{ mnemonic = .BT, operand_count = 2, ops = {op_gpr16(dst), op_gpr16(src), {}, {}} }, 395) } inst_bt_m16_r16 :: #force_inline proc "contextless" (dst: Mem16, src: GPR16) -> Instruction { return with_hint(Instruction{ mnemonic = .BT, operand_count = 2, ops = {op_mem(dst.mem, 2), op_gpr16(src), {}, {}} }, 395) } inst_bt_r32_r32 :: #force_inline proc "contextless" (dst: GPR32, src: GPR32) -> Instruction { return with_hint(Instruction{ mnemonic = .BT, operand_count = 2, ops = {op_gpr32(dst), op_gpr32(src), {}, {}} }, 396) } @@ -1109,18 +1109,18 @@ inst_bt_r32_imm8 :: #force_inline proc "contextless" (dst: GP inst_bt_m32_imm8 :: #force_inline proc "contextless" (dst: Mem32, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .BT, operand_count = 2, ops = {op_mem(dst.mem, 4), op_imm8(imm), {}, {}} }, 399) } inst_bt_r64_imm8 :: #force_inline proc "contextless" (dst: GPR64, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .BT, operand_count = 2, ops = {op_gpr64(dst), op_imm8(imm), {}, {}} }, 400) } inst_bt_m64_imm8 :: #force_inline proc "contextless" (dst: Mem64, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .BT, operand_count = 2, ops = {op_mem(dst.mem, 8), op_imm8(imm), {}, {}} }, 400) } -emit_bt_r16_r16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR16, src: GPR16) { append(instructions, inst_bt_r16_r16(dst, src)) } -emit_bt_m16_r16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem16, src: GPR16) { append(instructions, inst_bt_m16_r16(dst, src)) } -emit_bt_r32_r32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: GPR32) { append(instructions, inst_bt_r32_r32(dst, src)) } -emit_bt_m32_r32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem32, src: GPR32) { append(instructions, inst_bt_m32_r32(dst, src)) } -emit_bt_r64_r64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: GPR64) { append(instructions, inst_bt_r64_r64(dst, src)) } -emit_bt_m64_r64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem64, src: GPR64) { append(instructions, inst_bt_m64_r64(dst, src)) } -emit_bt_r16_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR16, imm: i8) { append(instructions, inst_bt_r16_imm8(dst, imm)) } -emit_bt_m16_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem16, imm: i8) { append(instructions, inst_bt_m16_imm8(dst, imm)) } -emit_bt_r32_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, imm: i8) { append(instructions, inst_bt_r32_imm8(dst, imm)) } -emit_bt_m32_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem32, imm: i8) { append(instructions, inst_bt_m32_imm8(dst, imm)) } -emit_bt_r64_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, imm: i8) { append(instructions, inst_bt_r64_imm8(dst, imm)) } -emit_bt_m64_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem64, imm: i8) { append(instructions, inst_bt_m64_imm8(dst, imm)) } +emit_bt_r16_r16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR16, src: GPR16) { append_elem(instructions, inst_bt_r16_r16(dst, src)) } +emit_bt_m16_r16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem16, src: GPR16) { append_elem(instructions, inst_bt_m16_r16(dst, src)) } +emit_bt_r32_r32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: GPR32) { append_elem(instructions, inst_bt_r32_r32(dst, src)) } +emit_bt_m32_r32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem32, src: GPR32) { append_elem(instructions, inst_bt_m32_r32(dst, src)) } +emit_bt_r64_r64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: GPR64) { append_elem(instructions, inst_bt_r64_r64(dst, src)) } +emit_bt_m64_r64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem64, src: GPR64) { append_elem(instructions, inst_bt_m64_r64(dst, src)) } +emit_bt_r16_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR16, imm: i8) { append_elem(instructions, inst_bt_r16_imm8(dst, imm)) } +emit_bt_m16_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem16, imm: i8) { append_elem(instructions, inst_bt_m16_imm8(dst, imm)) } +emit_bt_r32_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, imm: i8) { append_elem(instructions, inst_bt_r32_imm8(dst, imm)) } +emit_bt_m32_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem32, imm: i8) { append_elem(instructions, inst_bt_m32_imm8(dst, imm)) } +emit_bt_r64_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, imm: i8) { append_elem(instructions, inst_bt_r64_imm8(dst, imm)) } +emit_bt_m64_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem64, imm: i8) { append_elem(instructions, inst_bt_m64_imm8(dst, imm)) } inst_bts_r16_r16 :: #force_inline proc "contextless" (dst: GPR16, src: GPR16) -> Instruction { return with_hint(Instruction{ mnemonic = .BTS, operand_count = 2, ops = {op_gpr16(dst), op_gpr16(src), {}, {}} }, 401) } inst_bts_m16_r16 :: #force_inline proc "contextless" (dst: Mem16, src: GPR16) -> Instruction { return with_hint(Instruction{ mnemonic = .BTS, operand_count = 2, ops = {op_mem(dst.mem, 2), op_gpr16(src), {}, {}} }, 401) } inst_bts_r32_r32 :: #force_inline proc "contextless" (dst: GPR32, src: GPR32) -> Instruction { return with_hint(Instruction{ mnemonic = .BTS, operand_count = 2, ops = {op_gpr32(dst), op_gpr32(src), {}, {}} }, 402) } @@ -1133,18 +1133,18 @@ inst_bts_r32_imm8 :: #force_inline proc "contextless" (dst: GP inst_bts_m32_imm8 :: #force_inline proc "contextless" (dst: Mem32, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .BTS, operand_count = 2, ops = {op_mem(dst.mem, 4), op_imm8(imm), {}, {}} }, 405) } inst_bts_r64_imm8 :: #force_inline proc "contextless" (dst: GPR64, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .BTS, operand_count = 2, ops = {op_gpr64(dst), op_imm8(imm), {}, {}} }, 406) } inst_bts_m64_imm8 :: #force_inline proc "contextless" (dst: Mem64, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .BTS, operand_count = 2, ops = {op_mem(dst.mem, 8), op_imm8(imm), {}, {}} }, 406) } -emit_bts_r16_r16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR16, src: GPR16) { append(instructions, inst_bts_r16_r16(dst, src)) } -emit_bts_m16_r16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem16, src: GPR16) { append(instructions, inst_bts_m16_r16(dst, src)) } -emit_bts_r32_r32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: GPR32) { append(instructions, inst_bts_r32_r32(dst, src)) } -emit_bts_m32_r32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem32, src: GPR32) { append(instructions, inst_bts_m32_r32(dst, src)) } -emit_bts_r64_r64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: GPR64) { append(instructions, inst_bts_r64_r64(dst, src)) } -emit_bts_m64_r64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem64, src: GPR64) { append(instructions, inst_bts_m64_r64(dst, src)) } -emit_bts_r16_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR16, imm: i8) { append(instructions, inst_bts_r16_imm8(dst, imm)) } -emit_bts_m16_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem16, imm: i8) { append(instructions, inst_bts_m16_imm8(dst, imm)) } -emit_bts_r32_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, imm: i8) { append(instructions, inst_bts_r32_imm8(dst, imm)) } -emit_bts_m32_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem32, imm: i8) { append(instructions, inst_bts_m32_imm8(dst, imm)) } -emit_bts_r64_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, imm: i8) { append(instructions, inst_bts_r64_imm8(dst, imm)) } -emit_bts_m64_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem64, imm: i8) { append(instructions, inst_bts_m64_imm8(dst, imm)) } +emit_bts_r16_r16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR16, src: GPR16) { append_elem(instructions, inst_bts_r16_r16(dst, src)) } +emit_bts_m16_r16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem16, src: GPR16) { append_elem(instructions, inst_bts_m16_r16(dst, src)) } +emit_bts_r32_r32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: GPR32) { append_elem(instructions, inst_bts_r32_r32(dst, src)) } +emit_bts_m32_r32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem32, src: GPR32) { append_elem(instructions, inst_bts_m32_r32(dst, src)) } +emit_bts_r64_r64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: GPR64) { append_elem(instructions, inst_bts_r64_r64(dst, src)) } +emit_bts_m64_r64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem64, src: GPR64) { append_elem(instructions, inst_bts_m64_r64(dst, src)) } +emit_bts_r16_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR16, imm: i8) { append_elem(instructions, inst_bts_r16_imm8(dst, imm)) } +emit_bts_m16_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem16, imm: i8) { append_elem(instructions, inst_bts_m16_imm8(dst, imm)) } +emit_bts_r32_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, imm: i8) { append_elem(instructions, inst_bts_r32_imm8(dst, imm)) } +emit_bts_m32_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem32, imm: i8) { append_elem(instructions, inst_bts_m32_imm8(dst, imm)) } +emit_bts_r64_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, imm: i8) { append_elem(instructions, inst_bts_r64_imm8(dst, imm)) } +emit_bts_m64_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem64, imm: i8) { append_elem(instructions, inst_bts_m64_imm8(dst, imm)) } inst_btr_r16_r16 :: #force_inline proc "contextless" (dst: GPR16, src: GPR16) -> Instruction { return with_hint(Instruction{ mnemonic = .BTR, operand_count = 2, ops = {op_gpr16(dst), op_gpr16(src), {}, {}} }, 407) } inst_btr_m16_r16 :: #force_inline proc "contextless" (dst: Mem16, src: GPR16) -> Instruction { return with_hint(Instruction{ mnemonic = .BTR, operand_count = 2, ops = {op_mem(dst.mem, 2), op_gpr16(src), {}, {}} }, 407) } inst_btr_r32_r32 :: #force_inline proc "contextless" (dst: GPR32, src: GPR32) -> Instruction { return with_hint(Instruction{ mnemonic = .BTR, operand_count = 2, ops = {op_gpr32(dst), op_gpr32(src), {}, {}} }, 408) } @@ -1157,18 +1157,18 @@ inst_btr_r32_imm8 :: #force_inline proc "contextless" (dst: GP inst_btr_m32_imm8 :: #force_inline proc "contextless" (dst: Mem32, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .BTR, operand_count = 2, ops = {op_mem(dst.mem, 4), op_imm8(imm), {}, {}} }, 411) } inst_btr_r64_imm8 :: #force_inline proc "contextless" (dst: GPR64, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .BTR, operand_count = 2, ops = {op_gpr64(dst), op_imm8(imm), {}, {}} }, 412) } inst_btr_m64_imm8 :: #force_inline proc "contextless" (dst: Mem64, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .BTR, operand_count = 2, ops = {op_mem(dst.mem, 8), op_imm8(imm), {}, {}} }, 412) } -emit_btr_r16_r16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR16, src: GPR16) { append(instructions, inst_btr_r16_r16(dst, src)) } -emit_btr_m16_r16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem16, src: GPR16) { append(instructions, inst_btr_m16_r16(dst, src)) } -emit_btr_r32_r32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: GPR32) { append(instructions, inst_btr_r32_r32(dst, src)) } -emit_btr_m32_r32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem32, src: GPR32) { append(instructions, inst_btr_m32_r32(dst, src)) } -emit_btr_r64_r64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: GPR64) { append(instructions, inst_btr_r64_r64(dst, src)) } -emit_btr_m64_r64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem64, src: GPR64) { append(instructions, inst_btr_m64_r64(dst, src)) } -emit_btr_r16_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR16, imm: i8) { append(instructions, inst_btr_r16_imm8(dst, imm)) } -emit_btr_m16_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem16, imm: i8) { append(instructions, inst_btr_m16_imm8(dst, imm)) } -emit_btr_r32_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, imm: i8) { append(instructions, inst_btr_r32_imm8(dst, imm)) } -emit_btr_m32_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem32, imm: i8) { append(instructions, inst_btr_m32_imm8(dst, imm)) } -emit_btr_r64_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, imm: i8) { append(instructions, inst_btr_r64_imm8(dst, imm)) } -emit_btr_m64_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem64, imm: i8) { append(instructions, inst_btr_m64_imm8(dst, imm)) } +emit_btr_r16_r16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR16, src: GPR16) { append_elem(instructions, inst_btr_r16_r16(dst, src)) } +emit_btr_m16_r16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem16, src: GPR16) { append_elem(instructions, inst_btr_m16_r16(dst, src)) } +emit_btr_r32_r32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: GPR32) { append_elem(instructions, inst_btr_r32_r32(dst, src)) } +emit_btr_m32_r32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem32, src: GPR32) { append_elem(instructions, inst_btr_m32_r32(dst, src)) } +emit_btr_r64_r64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: GPR64) { append_elem(instructions, inst_btr_r64_r64(dst, src)) } +emit_btr_m64_r64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem64, src: GPR64) { append_elem(instructions, inst_btr_m64_r64(dst, src)) } +emit_btr_r16_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR16, imm: i8) { append_elem(instructions, inst_btr_r16_imm8(dst, imm)) } +emit_btr_m16_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem16, imm: i8) { append_elem(instructions, inst_btr_m16_imm8(dst, imm)) } +emit_btr_r32_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, imm: i8) { append_elem(instructions, inst_btr_r32_imm8(dst, imm)) } +emit_btr_m32_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem32, imm: i8) { append_elem(instructions, inst_btr_m32_imm8(dst, imm)) } +emit_btr_r64_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, imm: i8) { append_elem(instructions, inst_btr_r64_imm8(dst, imm)) } +emit_btr_m64_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem64, imm: i8) { append_elem(instructions, inst_btr_m64_imm8(dst, imm)) } inst_btc_r16_r16 :: #force_inline proc "contextless" (dst: GPR16, src: GPR16) -> Instruction { return with_hint(Instruction{ mnemonic = .BTC, operand_count = 2, ops = {op_gpr16(dst), op_gpr16(src), {}, {}} }, 413) } inst_btc_m16_r16 :: #force_inline proc "contextless" (dst: Mem16, src: GPR16) -> Instruction { return with_hint(Instruction{ mnemonic = .BTC, operand_count = 2, ops = {op_mem(dst.mem, 2), op_gpr16(src), {}, {}} }, 413) } inst_btc_r32_r32 :: #force_inline proc "contextless" (dst: GPR32, src: GPR32) -> Instruction { return with_hint(Instruction{ mnemonic = .BTC, operand_count = 2, ops = {op_gpr32(dst), op_gpr32(src), {}, {}} }, 414) } @@ -1181,822 +1181,822 @@ inst_btc_r32_imm8 :: #force_inline proc "contextless" (dst: GP inst_btc_m32_imm8 :: #force_inline proc "contextless" (dst: Mem32, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .BTC, operand_count = 2, ops = {op_mem(dst.mem, 4), op_imm8(imm), {}, {}} }, 417) } inst_btc_r64_imm8 :: #force_inline proc "contextless" (dst: GPR64, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .BTC, operand_count = 2, ops = {op_gpr64(dst), op_imm8(imm), {}, {}} }, 418) } inst_btc_m64_imm8 :: #force_inline proc "contextless" (dst: Mem64, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .BTC, operand_count = 2, ops = {op_mem(dst.mem, 8), op_imm8(imm), {}, {}} }, 418) } -emit_btc_r16_r16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR16, src: GPR16) { append(instructions, inst_btc_r16_r16(dst, src)) } -emit_btc_m16_r16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem16, src: GPR16) { append(instructions, inst_btc_m16_r16(dst, src)) } -emit_btc_r32_r32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: GPR32) { append(instructions, inst_btc_r32_r32(dst, src)) } -emit_btc_m32_r32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem32, src: GPR32) { append(instructions, inst_btc_m32_r32(dst, src)) } -emit_btc_r64_r64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: GPR64) { append(instructions, inst_btc_r64_r64(dst, src)) } -emit_btc_m64_r64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem64, src: GPR64) { append(instructions, inst_btc_m64_r64(dst, src)) } -emit_btc_r16_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR16, imm: i8) { append(instructions, inst_btc_r16_imm8(dst, imm)) } -emit_btc_m16_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem16, imm: i8) { append(instructions, inst_btc_m16_imm8(dst, imm)) } -emit_btc_r32_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, imm: i8) { append(instructions, inst_btc_r32_imm8(dst, imm)) } -emit_btc_m32_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem32, imm: i8) { append(instructions, inst_btc_m32_imm8(dst, imm)) } -emit_btc_r64_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, imm: i8) { append(instructions, inst_btc_r64_imm8(dst, imm)) } -emit_btc_m64_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem64, imm: i8) { append(instructions, inst_btc_m64_imm8(dst, imm)) } +emit_btc_r16_r16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR16, src: GPR16) { append_elem(instructions, inst_btc_r16_r16(dst, src)) } +emit_btc_m16_r16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem16, src: GPR16) { append_elem(instructions, inst_btc_m16_r16(dst, src)) } +emit_btc_r32_r32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: GPR32) { append_elem(instructions, inst_btc_r32_r32(dst, src)) } +emit_btc_m32_r32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem32, src: GPR32) { append_elem(instructions, inst_btc_m32_r32(dst, src)) } +emit_btc_r64_r64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: GPR64) { append_elem(instructions, inst_btc_r64_r64(dst, src)) } +emit_btc_m64_r64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem64, src: GPR64) { append_elem(instructions, inst_btc_m64_r64(dst, src)) } +emit_btc_r16_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR16, imm: i8) { append_elem(instructions, inst_btc_r16_imm8(dst, imm)) } +emit_btc_m16_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem16, imm: i8) { append_elem(instructions, inst_btc_m16_imm8(dst, imm)) } +emit_btc_r32_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, imm: i8) { append_elem(instructions, inst_btc_r32_imm8(dst, imm)) } +emit_btc_m32_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem32, imm: i8) { append_elem(instructions, inst_btc_m32_imm8(dst, imm)) } +emit_btc_r64_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, imm: i8) { append_elem(instructions, inst_btc_r64_imm8(dst, imm)) } +emit_btc_m64_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem64, imm: i8) { append_elem(instructions, inst_btc_m64_imm8(dst, imm)) } inst_bsf_r16_r16 :: #force_inline proc "contextless" (dst: GPR16, src: GPR16) -> Instruction { return with_hint(Instruction{ mnemonic = .BSF, operand_count = 2, ops = {op_gpr16(dst), op_gpr16(src), {}, {}} }, 419) } inst_bsf_r16_m16 :: #force_inline proc "contextless" (dst: GPR16, src: Mem16) -> Instruction { return with_hint(Instruction{ mnemonic = .BSF, operand_count = 2, ops = {op_gpr16(dst), op_mem(src.mem, 2), {}, {}} }, 419) } inst_bsf_r32_r32 :: #force_inline proc "contextless" (dst: GPR32, src: GPR32) -> Instruction { return with_hint(Instruction{ mnemonic = .BSF, operand_count = 2, ops = {op_gpr32(dst), op_gpr32(src), {}, {}} }, 420) } inst_bsf_r32_m32 :: #force_inline proc "contextless" (dst: GPR32, src: Mem32) -> Instruction { return with_hint(Instruction{ mnemonic = .BSF, operand_count = 2, ops = {op_gpr32(dst), op_mem(src.mem, 4), {}, {}} }, 420) } inst_bsf_r64_r64 :: #force_inline proc "contextless" (dst: GPR64, src: GPR64) -> Instruction { return with_hint(Instruction{ mnemonic = .BSF, operand_count = 2, ops = {op_gpr64(dst), op_gpr64(src), {}, {}} }, 421) } inst_bsf_r64_m64 :: #force_inline proc "contextless" (dst: GPR64, src: Mem64) -> Instruction { return with_hint(Instruction{ mnemonic = .BSF, operand_count = 2, ops = {op_gpr64(dst), op_mem(src.mem, 8), {}, {}} }, 421) } -emit_bsf_r16_r16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR16, src: GPR16) { append(instructions, inst_bsf_r16_r16(dst, src)) } -emit_bsf_r16_m16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR16, src: Mem16) { append(instructions, inst_bsf_r16_m16(dst, src)) } -emit_bsf_r32_r32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: GPR32) { append(instructions, inst_bsf_r32_r32(dst, src)) } -emit_bsf_r32_m32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: Mem32) { append(instructions, inst_bsf_r32_m32(dst, src)) } -emit_bsf_r64_r64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: GPR64) { append(instructions, inst_bsf_r64_r64(dst, src)) } -emit_bsf_r64_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: Mem64) { append(instructions, inst_bsf_r64_m64(dst, src)) } +emit_bsf_r16_r16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR16, src: GPR16) { append_elem(instructions, inst_bsf_r16_r16(dst, src)) } +emit_bsf_r16_m16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR16, src: Mem16) { append_elem(instructions, inst_bsf_r16_m16(dst, src)) } +emit_bsf_r32_r32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: GPR32) { append_elem(instructions, inst_bsf_r32_r32(dst, src)) } +emit_bsf_r32_m32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: Mem32) { append_elem(instructions, inst_bsf_r32_m32(dst, src)) } +emit_bsf_r64_r64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: GPR64) { append_elem(instructions, inst_bsf_r64_r64(dst, src)) } +emit_bsf_r64_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: Mem64) { append_elem(instructions, inst_bsf_r64_m64(dst, src)) } inst_bsr_r16_r16 :: #force_inline proc "contextless" (dst: GPR16, src: GPR16) -> Instruction { return with_hint(Instruction{ mnemonic = .BSR, operand_count = 2, ops = {op_gpr16(dst), op_gpr16(src), {}, {}} }, 422) } inst_bsr_r16_m16 :: #force_inline proc "contextless" (dst: GPR16, src: Mem16) -> Instruction { return with_hint(Instruction{ mnemonic = .BSR, operand_count = 2, ops = {op_gpr16(dst), op_mem(src.mem, 2), {}, {}} }, 422) } inst_bsr_r32_r32 :: #force_inline proc "contextless" (dst: GPR32, src: GPR32) -> Instruction { return with_hint(Instruction{ mnemonic = .BSR, operand_count = 2, ops = {op_gpr32(dst), op_gpr32(src), {}, {}} }, 423) } inst_bsr_r32_m32 :: #force_inline proc "contextless" (dst: GPR32, src: Mem32) -> Instruction { return with_hint(Instruction{ mnemonic = .BSR, operand_count = 2, ops = {op_gpr32(dst), op_mem(src.mem, 4), {}, {}} }, 423) } inst_bsr_r64_r64 :: #force_inline proc "contextless" (dst: GPR64, src: GPR64) -> Instruction { return with_hint(Instruction{ mnemonic = .BSR, operand_count = 2, ops = {op_gpr64(dst), op_gpr64(src), {}, {}} }, 424) } inst_bsr_r64_m64 :: #force_inline proc "contextless" (dst: GPR64, src: Mem64) -> Instruction { return with_hint(Instruction{ mnemonic = .BSR, operand_count = 2, ops = {op_gpr64(dst), op_mem(src.mem, 8), {}, {}} }, 424) } -emit_bsr_r16_r16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR16, src: GPR16) { append(instructions, inst_bsr_r16_r16(dst, src)) } -emit_bsr_r16_m16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR16, src: Mem16) { append(instructions, inst_bsr_r16_m16(dst, src)) } -emit_bsr_r32_r32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: GPR32) { append(instructions, inst_bsr_r32_r32(dst, src)) } -emit_bsr_r32_m32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: Mem32) { append(instructions, inst_bsr_r32_m32(dst, src)) } -emit_bsr_r64_r64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: GPR64) { append(instructions, inst_bsr_r64_r64(dst, src)) } -emit_bsr_r64_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: Mem64) { append(instructions, inst_bsr_r64_m64(dst, src)) } +emit_bsr_r16_r16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR16, src: GPR16) { append_elem(instructions, inst_bsr_r16_r16(dst, src)) } +emit_bsr_r16_m16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR16, src: Mem16) { append_elem(instructions, inst_bsr_r16_m16(dst, src)) } +emit_bsr_r32_r32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: GPR32) { append_elem(instructions, inst_bsr_r32_r32(dst, src)) } +emit_bsr_r32_m32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: Mem32) { append_elem(instructions, inst_bsr_r32_m32(dst, src)) } +emit_bsr_r64_r64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: GPR64) { append_elem(instructions, inst_bsr_r64_r64(dst, src)) } +emit_bsr_r64_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: Mem64) { append_elem(instructions, inst_bsr_r64_m64(dst, src)) } inst_popcnt_r16_r16 :: #force_inline proc "contextless" (dst: GPR16, src: GPR16) -> Instruction { return with_hint(Instruction{ mnemonic = .POPCNT, operand_count = 2, ops = {op_gpr16(dst), op_gpr16(src), {}, {}} }, 425) } inst_popcnt_r16_m16 :: #force_inline proc "contextless" (dst: GPR16, src: Mem16) -> Instruction { return with_hint(Instruction{ mnemonic = .POPCNT, operand_count = 2, ops = {op_gpr16(dst), op_mem(src.mem, 2), {}, {}} }, 425) } inst_popcnt_r32_r32 :: #force_inline proc "contextless" (dst: GPR32, src: GPR32) -> Instruction { return with_hint(Instruction{ mnemonic = .POPCNT, operand_count = 2, ops = {op_gpr32(dst), op_gpr32(src), {}, {}} }, 426) } inst_popcnt_r32_m32 :: #force_inline proc "contextless" (dst: GPR32, src: Mem32) -> Instruction { return with_hint(Instruction{ mnemonic = .POPCNT, operand_count = 2, ops = {op_gpr32(dst), op_mem(src.mem, 4), {}, {}} }, 426) } inst_popcnt_r64_r64 :: #force_inline proc "contextless" (dst: GPR64, src: GPR64) -> Instruction { return with_hint(Instruction{ mnemonic = .POPCNT, operand_count = 2, ops = {op_gpr64(dst), op_gpr64(src), {}, {}} }, 427) } inst_popcnt_r64_m64 :: #force_inline proc "contextless" (dst: GPR64, src: Mem64) -> Instruction { return with_hint(Instruction{ mnemonic = .POPCNT, operand_count = 2, ops = {op_gpr64(dst), op_mem(src.mem, 8), {}, {}} }, 427) } -emit_popcnt_r16_r16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR16, src: GPR16) { append(instructions, inst_popcnt_r16_r16(dst, src)) } -emit_popcnt_r16_m16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR16, src: Mem16) { append(instructions, inst_popcnt_r16_m16(dst, src)) } -emit_popcnt_r32_r32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: GPR32) { append(instructions, inst_popcnt_r32_r32(dst, src)) } -emit_popcnt_r32_m32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: Mem32) { append(instructions, inst_popcnt_r32_m32(dst, src)) } -emit_popcnt_r64_r64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: GPR64) { append(instructions, inst_popcnt_r64_r64(dst, src)) } -emit_popcnt_r64_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: Mem64) { append(instructions, inst_popcnt_r64_m64(dst, src)) } +emit_popcnt_r16_r16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR16, src: GPR16) { append_elem(instructions, inst_popcnt_r16_r16(dst, src)) } +emit_popcnt_r16_m16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR16, src: Mem16) { append_elem(instructions, inst_popcnt_r16_m16(dst, src)) } +emit_popcnt_r32_r32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: GPR32) { append_elem(instructions, inst_popcnt_r32_r32(dst, src)) } +emit_popcnt_r32_m32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: Mem32) { append_elem(instructions, inst_popcnt_r32_m32(dst, src)) } +emit_popcnt_r64_r64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: GPR64) { append_elem(instructions, inst_popcnt_r64_r64(dst, src)) } +emit_popcnt_r64_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: Mem64) { append_elem(instructions, inst_popcnt_r64_m64(dst, src)) } inst_lzcnt_r16_r16 :: #force_inline proc "contextless" (dst: GPR16, src: GPR16) -> Instruction { return with_hint(Instruction{ mnemonic = .LZCNT, operand_count = 2, ops = {op_gpr16(dst), op_gpr16(src), {}, {}} }, 428) } inst_lzcnt_r16_m16 :: #force_inline proc "contextless" (dst: GPR16, src: Mem16) -> Instruction { return with_hint(Instruction{ mnemonic = .LZCNT, operand_count = 2, ops = {op_gpr16(dst), op_mem(src.mem, 2), {}, {}} }, 428) } inst_lzcnt_r32_r32 :: #force_inline proc "contextless" (dst: GPR32, src: GPR32) -> Instruction { return with_hint(Instruction{ mnemonic = .LZCNT, operand_count = 2, ops = {op_gpr32(dst), op_gpr32(src), {}, {}} }, 429) } inst_lzcnt_r32_m32 :: #force_inline proc "contextless" (dst: GPR32, src: Mem32) -> Instruction { return with_hint(Instruction{ mnemonic = .LZCNT, operand_count = 2, ops = {op_gpr32(dst), op_mem(src.mem, 4), {}, {}} }, 429) } inst_lzcnt_r64_r64 :: #force_inline proc "contextless" (dst: GPR64, src: GPR64) -> Instruction { return with_hint(Instruction{ mnemonic = .LZCNT, operand_count = 2, ops = {op_gpr64(dst), op_gpr64(src), {}, {}} }, 430) } inst_lzcnt_r64_m64 :: #force_inline proc "contextless" (dst: GPR64, src: Mem64) -> Instruction { return with_hint(Instruction{ mnemonic = .LZCNT, operand_count = 2, ops = {op_gpr64(dst), op_mem(src.mem, 8), {}, {}} }, 430) } -emit_lzcnt_r16_r16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR16, src: GPR16) { append(instructions, inst_lzcnt_r16_r16(dst, src)) } -emit_lzcnt_r16_m16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR16, src: Mem16) { append(instructions, inst_lzcnt_r16_m16(dst, src)) } -emit_lzcnt_r32_r32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: GPR32) { append(instructions, inst_lzcnt_r32_r32(dst, src)) } -emit_lzcnt_r32_m32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: Mem32) { append(instructions, inst_lzcnt_r32_m32(dst, src)) } -emit_lzcnt_r64_r64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: GPR64) { append(instructions, inst_lzcnt_r64_r64(dst, src)) } -emit_lzcnt_r64_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: Mem64) { append(instructions, inst_lzcnt_r64_m64(dst, src)) } +emit_lzcnt_r16_r16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR16, src: GPR16) { append_elem(instructions, inst_lzcnt_r16_r16(dst, src)) } +emit_lzcnt_r16_m16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR16, src: Mem16) { append_elem(instructions, inst_lzcnt_r16_m16(dst, src)) } +emit_lzcnt_r32_r32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: GPR32) { append_elem(instructions, inst_lzcnt_r32_r32(dst, src)) } +emit_lzcnt_r32_m32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: Mem32) { append_elem(instructions, inst_lzcnt_r32_m32(dst, src)) } +emit_lzcnt_r64_r64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: GPR64) { append_elem(instructions, inst_lzcnt_r64_r64(dst, src)) } +emit_lzcnt_r64_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: Mem64) { append_elem(instructions, inst_lzcnt_r64_m64(dst, src)) } inst_tzcnt_r16_r16 :: #force_inline proc "contextless" (dst: GPR16, src: GPR16) -> Instruction { return with_hint(Instruction{ mnemonic = .TZCNT, operand_count = 2, ops = {op_gpr16(dst), op_gpr16(src), {}, {}} }, 431) } inst_tzcnt_r16_m16 :: #force_inline proc "contextless" (dst: GPR16, src: Mem16) -> Instruction { return with_hint(Instruction{ mnemonic = .TZCNT, operand_count = 2, ops = {op_gpr16(dst), op_mem(src.mem, 2), {}, {}} }, 431) } inst_tzcnt_r32_r32 :: #force_inline proc "contextless" (dst: GPR32, src: GPR32) -> Instruction { return with_hint(Instruction{ mnemonic = .TZCNT, operand_count = 2, ops = {op_gpr32(dst), op_gpr32(src), {}, {}} }, 432) } inst_tzcnt_r32_m32 :: #force_inline proc "contextless" (dst: GPR32, src: Mem32) -> Instruction { return with_hint(Instruction{ mnemonic = .TZCNT, operand_count = 2, ops = {op_gpr32(dst), op_mem(src.mem, 4), {}, {}} }, 432) } inst_tzcnt_r64_r64 :: #force_inline proc "contextless" (dst: GPR64, src: GPR64) -> Instruction { return with_hint(Instruction{ mnemonic = .TZCNT, operand_count = 2, ops = {op_gpr64(dst), op_gpr64(src), {}, {}} }, 433) } inst_tzcnt_r64_m64 :: #force_inline proc "contextless" (dst: GPR64, src: Mem64) -> Instruction { return with_hint(Instruction{ mnemonic = .TZCNT, operand_count = 2, ops = {op_gpr64(dst), op_mem(src.mem, 8), {}, {}} }, 433) } -emit_tzcnt_r16_r16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR16, src: GPR16) { append(instructions, inst_tzcnt_r16_r16(dst, src)) } -emit_tzcnt_r16_m16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR16, src: Mem16) { append(instructions, inst_tzcnt_r16_m16(dst, src)) } -emit_tzcnt_r32_r32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: GPR32) { append(instructions, inst_tzcnt_r32_r32(dst, src)) } -emit_tzcnt_r32_m32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: Mem32) { append(instructions, inst_tzcnt_r32_m32(dst, src)) } -emit_tzcnt_r64_r64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: GPR64) { append(instructions, inst_tzcnt_r64_r64(dst, src)) } -emit_tzcnt_r64_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: Mem64) { append(instructions, inst_tzcnt_r64_m64(dst, src)) } +emit_tzcnt_r16_r16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR16, src: GPR16) { append_elem(instructions, inst_tzcnt_r16_r16(dst, src)) } +emit_tzcnt_r16_m16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR16, src: Mem16) { append_elem(instructions, inst_tzcnt_r16_m16(dst, src)) } +emit_tzcnt_r32_r32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: GPR32) { append_elem(instructions, inst_tzcnt_r32_r32(dst, src)) } +emit_tzcnt_r32_m32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: Mem32) { append_elem(instructions, inst_tzcnt_r32_m32(dst, src)) } +emit_tzcnt_r64_r64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: GPR64) { append_elem(instructions, inst_tzcnt_r64_r64(dst, src)) } +emit_tzcnt_r64_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: Mem64) { append_elem(instructions, inst_tzcnt_r64_m64(dst, src)) } inst_jmp_rel8 :: #force_inline proc "contextless" (offset: i8) -> Instruction { return Instruction{ mnemonic = .JMP, operand_count = 1, ops = {op_rel8(offset), {}, {}, {}} } } inst_jmp_rel32 :: #force_inline proc "contextless" (offset: i32) -> Instruction { return Instruction{ mnemonic = .JMP, operand_count = 1, ops = {op_rel32(offset), {}, {}, {}} } } inst_jmp_r64 :: #force_inline proc "contextless" (dst: GPR64) -> Instruction { return with_hint(Instruction{ mnemonic = .JMP, operand_count = 1, ops = {op_gpr64(dst), {}, {}, {}} }, 436) } inst_jmp_m64 :: #force_inline proc "contextless" (dst: Mem64) -> Instruction { return with_hint(Instruction{ mnemonic = .JMP, operand_count = 1, ops = {op_mem(dst.mem, 8), {}, {}, {}} }, 436) } inst_jmp_m :: #force_inline proc "contextless" (dst: Memory) -> Instruction { return with_hint(Instruction{ mnemonic = .JMP, operand_count = 1, ops = {op_mem(dst, 0), {}, {}, {}} }, 437) } -emit_jmp_rel8 :: #force_inline proc(instructions: ^[dynamic]Instruction, offset: i8) { append(instructions, inst_jmp_rel8(offset)) } -emit_jmp_rel32 :: #force_inline proc(instructions: ^[dynamic]Instruction, offset: i32) { append(instructions, inst_jmp_rel32(offset)) } -emit_jmp_r64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64) { append(instructions, inst_jmp_r64(dst)) } -emit_jmp_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem64) { append(instructions, inst_jmp_m64(dst)) } -emit_jmp_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Memory) { append(instructions, inst_jmp_m(dst)) } +emit_jmp_rel8 :: #force_inline proc(instructions: ^[dynamic]Instruction, offset: i8) { append_elem(instructions, inst_jmp_rel8(offset)) } +emit_jmp_rel32 :: #force_inline proc(instructions: ^[dynamic]Instruction, offset: i32) { append_elem(instructions, inst_jmp_rel32(offset)) } +emit_jmp_r64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64) { append_elem(instructions, inst_jmp_r64(dst)) } +emit_jmp_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem64) { append_elem(instructions, inst_jmp_m64(dst)) } +emit_jmp_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Memory) { append_elem(instructions, inst_jmp_m(dst)) } inst_ja_rel8 :: #force_inline proc "contextless" (offset: i8) -> Instruction { return Instruction{ mnemonic = .JA, operand_count = 1, ops = {op_rel8(offset), {}, {}, {}} } } inst_ja_rel32 :: #force_inline proc "contextless" (offset: i32) -> Instruction { return Instruction{ mnemonic = .JA, operand_count = 1, ops = {op_rel32(offset), {}, {}, {}} } } -emit_ja_rel8 :: #force_inline proc(instructions: ^[dynamic]Instruction, offset: i8) { append(instructions, inst_ja_rel8(offset)) } -emit_ja_rel32 :: #force_inline proc(instructions: ^[dynamic]Instruction, offset: i32) { append(instructions, inst_ja_rel32(offset)) } +emit_ja_rel8 :: #force_inline proc(instructions: ^[dynamic]Instruction, offset: i8) { append_elem(instructions, inst_ja_rel8(offset)) } +emit_ja_rel32 :: #force_inline proc(instructions: ^[dynamic]Instruction, offset: i32) { append_elem(instructions, inst_ja_rel32(offset)) } inst_jae_rel8 :: #force_inline proc "contextless" (offset: i8) -> Instruction { return Instruction{ mnemonic = .JAE, operand_count = 1, ops = {op_rel8(offset), {}, {}, {}} } } inst_jae_rel32 :: #force_inline proc "contextless" (offset: i32) -> Instruction { return Instruction{ mnemonic = .JAE, operand_count = 1, ops = {op_rel32(offset), {}, {}, {}} } } -emit_jae_rel8 :: #force_inline proc(instructions: ^[dynamic]Instruction, offset: i8) { append(instructions, inst_jae_rel8(offset)) } -emit_jae_rel32 :: #force_inline proc(instructions: ^[dynamic]Instruction, offset: i32) { append(instructions, inst_jae_rel32(offset)) } +emit_jae_rel8 :: #force_inline proc(instructions: ^[dynamic]Instruction, offset: i8) { append_elem(instructions, inst_jae_rel8(offset)) } +emit_jae_rel32 :: #force_inline proc(instructions: ^[dynamic]Instruction, offset: i32) { append_elem(instructions, inst_jae_rel32(offset)) } inst_jb_rel8 :: #force_inline proc "contextless" (offset: i8) -> Instruction { return Instruction{ mnemonic = .JB, operand_count = 1, ops = {op_rel8(offset), {}, {}, {}} } } inst_jb_rel32 :: #force_inline proc "contextless" (offset: i32) -> Instruction { return Instruction{ mnemonic = .JB, operand_count = 1, ops = {op_rel32(offset), {}, {}, {}} } } -emit_jb_rel8 :: #force_inline proc(instructions: ^[dynamic]Instruction, offset: i8) { append(instructions, inst_jb_rel8(offset)) } -emit_jb_rel32 :: #force_inline proc(instructions: ^[dynamic]Instruction, offset: i32) { append(instructions, inst_jb_rel32(offset)) } +emit_jb_rel8 :: #force_inline proc(instructions: ^[dynamic]Instruction, offset: i8) { append_elem(instructions, inst_jb_rel8(offset)) } +emit_jb_rel32 :: #force_inline proc(instructions: ^[dynamic]Instruction, offset: i32) { append_elem(instructions, inst_jb_rel32(offset)) } inst_jbe_rel8 :: #force_inline proc "contextless" (offset: i8) -> Instruction { return Instruction{ mnemonic = .JBE, operand_count = 1, ops = {op_rel8(offset), {}, {}, {}} } } inst_jbe_rel32 :: #force_inline proc "contextless" (offset: i32) -> Instruction { return Instruction{ mnemonic = .JBE, operand_count = 1, ops = {op_rel32(offset), {}, {}, {}} } } -emit_jbe_rel8 :: #force_inline proc(instructions: ^[dynamic]Instruction, offset: i8) { append(instructions, inst_jbe_rel8(offset)) } -emit_jbe_rel32 :: #force_inline proc(instructions: ^[dynamic]Instruction, offset: i32) { append(instructions, inst_jbe_rel32(offset)) } +emit_jbe_rel8 :: #force_inline proc(instructions: ^[dynamic]Instruction, offset: i8) { append_elem(instructions, inst_jbe_rel8(offset)) } +emit_jbe_rel32 :: #force_inline proc(instructions: ^[dynamic]Instruction, offset: i32) { append_elem(instructions, inst_jbe_rel32(offset)) } inst_jc_rel8 :: #force_inline proc "contextless" (offset: i8) -> Instruction { return Instruction{ mnemonic = .JC, operand_count = 1, ops = {op_rel8(offset), {}, {}, {}} } } inst_jc_rel32 :: #force_inline proc "contextless" (offset: i32) -> Instruction { return Instruction{ mnemonic = .JC, operand_count = 1, ops = {op_rel32(offset), {}, {}, {}} } } -emit_jc_rel8 :: #force_inline proc(instructions: ^[dynamic]Instruction, offset: i8) { append(instructions, inst_jc_rel8(offset)) } -emit_jc_rel32 :: #force_inline proc(instructions: ^[dynamic]Instruction, offset: i32) { append(instructions, inst_jc_rel32(offset)) } +emit_jc_rel8 :: #force_inline proc(instructions: ^[dynamic]Instruction, offset: i8) { append_elem(instructions, inst_jc_rel8(offset)) } +emit_jc_rel32 :: #force_inline proc(instructions: ^[dynamic]Instruction, offset: i32) { append_elem(instructions, inst_jc_rel32(offset)) } inst_je_rel8 :: #force_inline proc "contextless" (offset: i8) -> Instruction { return Instruction{ mnemonic = .JE, operand_count = 1, ops = {op_rel8(offset), {}, {}, {}} } } inst_je_rel32 :: #force_inline proc "contextless" (offset: i32) -> Instruction { return Instruction{ mnemonic = .JE, operand_count = 1, ops = {op_rel32(offset), {}, {}, {}} } } -emit_je_rel8 :: #force_inline proc(instructions: ^[dynamic]Instruction, offset: i8) { append(instructions, inst_je_rel8(offset)) } -emit_je_rel32 :: #force_inline proc(instructions: ^[dynamic]Instruction, offset: i32) { append(instructions, inst_je_rel32(offset)) } +emit_je_rel8 :: #force_inline proc(instructions: ^[dynamic]Instruction, offset: i8) { append_elem(instructions, inst_je_rel8(offset)) } +emit_je_rel32 :: #force_inline proc(instructions: ^[dynamic]Instruction, offset: i32) { append_elem(instructions, inst_je_rel32(offset)) } inst_jz_rel8 :: #force_inline proc "contextless" (offset: i8) -> Instruction { return Instruction{ mnemonic = .JZ, operand_count = 1, ops = {op_rel8(offset), {}, {}, {}} } } inst_jz_rel32 :: #force_inline proc "contextless" (offset: i32) -> Instruction { return Instruction{ mnemonic = .JZ, operand_count = 1, ops = {op_rel32(offset), {}, {}, {}} } } -emit_jz_rel8 :: #force_inline proc(instructions: ^[dynamic]Instruction, offset: i8) { append(instructions, inst_jz_rel8(offset)) } -emit_jz_rel32 :: #force_inline proc(instructions: ^[dynamic]Instruction, offset: i32) { append(instructions, inst_jz_rel32(offset)) } +emit_jz_rel8 :: #force_inline proc(instructions: ^[dynamic]Instruction, offset: i8) { append_elem(instructions, inst_jz_rel8(offset)) } +emit_jz_rel32 :: #force_inline proc(instructions: ^[dynamic]Instruction, offset: i32) { append_elem(instructions, inst_jz_rel32(offset)) } inst_jg_rel8 :: #force_inline proc "contextless" (offset: i8) -> Instruction { return Instruction{ mnemonic = .JG, operand_count = 1, ops = {op_rel8(offset), {}, {}, {}} } } inst_jg_rel32 :: #force_inline proc "contextless" (offset: i32) -> Instruction { return Instruction{ mnemonic = .JG, operand_count = 1, ops = {op_rel32(offset), {}, {}, {}} } } -emit_jg_rel8 :: #force_inline proc(instructions: ^[dynamic]Instruction, offset: i8) { append(instructions, inst_jg_rel8(offset)) } -emit_jg_rel32 :: #force_inline proc(instructions: ^[dynamic]Instruction, offset: i32) { append(instructions, inst_jg_rel32(offset)) } +emit_jg_rel8 :: #force_inline proc(instructions: ^[dynamic]Instruction, offset: i8) { append_elem(instructions, inst_jg_rel8(offset)) } +emit_jg_rel32 :: #force_inline proc(instructions: ^[dynamic]Instruction, offset: i32) { append_elem(instructions, inst_jg_rel32(offset)) } inst_jge_rel8 :: #force_inline proc "contextless" (offset: i8) -> Instruction { return Instruction{ mnemonic = .JGE, operand_count = 1, ops = {op_rel8(offset), {}, {}, {}} } } inst_jge_rel32 :: #force_inline proc "contextless" (offset: i32) -> Instruction { return Instruction{ mnemonic = .JGE, operand_count = 1, ops = {op_rel32(offset), {}, {}, {}} } } -emit_jge_rel8 :: #force_inline proc(instructions: ^[dynamic]Instruction, offset: i8) { append(instructions, inst_jge_rel8(offset)) } -emit_jge_rel32 :: #force_inline proc(instructions: ^[dynamic]Instruction, offset: i32) { append(instructions, inst_jge_rel32(offset)) } +emit_jge_rel8 :: #force_inline proc(instructions: ^[dynamic]Instruction, offset: i8) { append_elem(instructions, inst_jge_rel8(offset)) } +emit_jge_rel32 :: #force_inline proc(instructions: ^[dynamic]Instruction, offset: i32) { append_elem(instructions, inst_jge_rel32(offset)) } inst_jl_rel8 :: #force_inline proc "contextless" (offset: i8) -> Instruction { return Instruction{ mnemonic = .JL, operand_count = 1, ops = {op_rel8(offset), {}, {}, {}} } } inst_jl_rel32 :: #force_inline proc "contextless" (offset: i32) -> Instruction { return Instruction{ mnemonic = .JL, operand_count = 1, ops = {op_rel32(offset), {}, {}, {}} } } -emit_jl_rel8 :: #force_inline proc(instructions: ^[dynamic]Instruction, offset: i8) { append(instructions, inst_jl_rel8(offset)) } -emit_jl_rel32 :: #force_inline proc(instructions: ^[dynamic]Instruction, offset: i32) { append(instructions, inst_jl_rel32(offset)) } +emit_jl_rel8 :: #force_inline proc(instructions: ^[dynamic]Instruction, offset: i8) { append_elem(instructions, inst_jl_rel8(offset)) } +emit_jl_rel32 :: #force_inline proc(instructions: ^[dynamic]Instruction, offset: i32) { append_elem(instructions, inst_jl_rel32(offset)) } inst_jle_rel8 :: #force_inline proc "contextless" (offset: i8) -> Instruction { return Instruction{ mnemonic = .JLE, operand_count = 1, ops = {op_rel8(offset), {}, {}, {}} } } inst_jle_rel32 :: #force_inline proc "contextless" (offset: i32) -> Instruction { return Instruction{ mnemonic = .JLE, operand_count = 1, ops = {op_rel32(offset), {}, {}, {}} } } -emit_jle_rel8 :: #force_inline proc(instructions: ^[dynamic]Instruction, offset: i8) { append(instructions, inst_jle_rel8(offset)) } -emit_jle_rel32 :: #force_inline proc(instructions: ^[dynamic]Instruction, offset: i32) { append(instructions, inst_jle_rel32(offset)) } +emit_jle_rel8 :: #force_inline proc(instructions: ^[dynamic]Instruction, offset: i8) { append_elem(instructions, inst_jle_rel8(offset)) } +emit_jle_rel32 :: #force_inline proc(instructions: ^[dynamic]Instruction, offset: i32) { append_elem(instructions, inst_jle_rel32(offset)) } inst_jna_rel8 :: #force_inline proc "contextless" (offset: i8) -> Instruction { return Instruction{ mnemonic = .JNA, operand_count = 1, ops = {op_rel8(offset), {}, {}, {}} } } inst_jna_rel32 :: #force_inline proc "contextless" (offset: i32) -> Instruction { return Instruction{ mnemonic = .JNA, operand_count = 1, ops = {op_rel32(offset), {}, {}, {}} } } -emit_jna_rel8 :: #force_inline proc(instructions: ^[dynamic]Instruction, offset: i8) { append(instructions, inst_jna_rel8(offset)) } -emit_jna_rel32 :: #force_inline proc(instructions: ^[dynamic]Instruction, offset: i32) { append(instructions, inst_jna_rel32(offset)) } +emit_jna_rel8 :: #force_inline proc(instructions: ^[dynamic]Instruction, offset: i8) { append_elem(instructions, inst_jna_rel8(offset)) } +emit_jna_rel32 :: #force_inline proc(instructions: ^[dynamic]Instruction, offset: i32) { append_elem(instructions, inst_jna_rel32(offset)) } inst_jnae_rel8 :: #force_inline proc "contextless" (offset: i8) -> Instruction { return Instruction{ mnemonic = .JNAE, operand_count = 1, ops = {op_rel8(offset), {}, {}, {}} } } inst_jnae_rel32 :: #force_inline proc "contextless" (offset: i32) -> Instruction { return Instruction{ mnemonic = .JNAE, operand_count = 1, ops = {op_rel32(offset), {}, {}, {}} } } -emit_jnae_rel8 :: #force_inline proc(instructions: ^[dynamic]Instruction, offset: i8) { append(instructions, inst_jnae_rel8(offset)) } -emit_jnae_rel32 :: #force_inline proc(instructions: ^[dynamic]Instruction, offset: i32) { append(instructions, inst_jnae_rel32(offset)) } +emit_jnae_rel8 :: #force_inline proc(instructions: ^[dynamic]Instruction, offset: i8) { append_elem(instructions, inst_jnae_rel8(offset)) } +emit_jnae_rel32 :: #force_inline proc(instructions: ^[dynamic]Instruction, offset: i32) { append_elem(instructions, inst_jnae_rel32(offset)) } inst_jnb_rel8 :: #force_inline proc "contextless" (offset: i8) -> Instruction { return Instruction{ mnemonic = .JNB, operand_count = 1, ops = {op_rel8(offset), {}, {}, {}} } } inst_jnb_rel32 :: #force_inline proc "contextless" (offset: i32) -> Instruction { return Instruction{ mnemonic = .JNB, operand_count = 1, ops = {op_rel32(offset), {}, {}, {}} } } -emit_jnb_rel8 :: #force_inline proc(instructions: ^[dynamic]Instruction, offset: i8) { append(instructions, inst_jnb_rel8(offset)) } -emit_jnb_rel32 :: #force_inline proc(instructions: ^[dynamic]Instruction, offset: i32) { append(instructions, inst_jnb_rel32(offset)) } +emit_jnb_rel8 :: #force_inline proc(instructions: ^[dynamic]Instruction, offset: i8) { append_elem(instructions, inst_jnb_rel8(offset)) } +emit_jnb_rel32 :: #force_inline proc(instructions: ^[dynamic]Instruction, offset: i32) { append_elem(instructions, inst_jnb_rel32(offset)) } inst_jnbe_rel8 :: #force_inline proc "contextless" (offset: i8) -> Instruction { return Instruction{ mnemonic = .JNBE, operand_count = 1, ops = {op_rel8(offset), {}, {}, {}} } } inst_jnbe_rel32 :: #force_inline proc "contextless" (offset: i32) -> Instruction { return Instruction{ mnemonic = .JNBE, operand_count = 1, ops = {op_rel32(offset), {}, {}, {}} } } -emit_jnbe_rel8 :: #force_inline proc(instructions: ^[dynamic]Instruction, offset: i8) { append(instructions, inst_jnbe_rel8(offset)) } -emit_jnbe_rel32 :: #force_inline proc(instructions: ^[dynamic]Instruction, offset: i32) { append(instructions, inst_jnbe_rel32(offset)) } +emit_jnbe_rel8 :: #force_inline proc(instructions: ^[dynamic]Instruction, offset: i8) { append_elem(instructions, inst_jnbe_rel8(offset)) } +emit_jnbe_rel32 :: #force_inline proc(instructions: ^[dynamic]Instruction, offset: i32) { append_elem(instructions, inst_jnbe_rel32(offset)) } inst_jnc_rel8 :: #force_inline proc "contextless" (offset: i8) -> Instruction { return Instruction{ mnemonic = .JNC, operand_count = 1, ops = {op_rel8(offset), {}, {}, {}} } } inst_jnc_rel32 :: #force_inline proc "contextless" (offset: i32) -> Instruction { return Instruction{ mnemonic = .JNC, operand_count = 1, ops = {op_rel32(offset), {}, {}, {}} } } -emit_jnc_rel8 :: #force_inline proc(instructions: ^[dynamic]Instruction, offset: i8) { append(instructions, inst_jnc_rel8(offset)) } -emit_jnc_rel32 :: #force_inline proc(instructions: ^[dynamic]Instruction, offset: i32) { append(instructions, inst_jnc_rel32(offset)) } +emit_jnc_rel8 :: #force_inline proc(instructions: ^[dynamic]Instruction, offset: i8) { append_elem(instructions, inst_jnc_rel8(offset)) } +emit_jnc_rel32 :: #force_inline proc(instructions: ^[dynamic]Instruction, offset: i32) { append_elem(instructions, inst_jnc_rel32(offset)) } inst_jne_rel8 :: #force_inline proc "contextless" (offset: i8) -> Instruction { return Instruction{ mnemonic = .JNE, operand_count = 1, ops = {op_rel8(offset), {}, {}, {}} } } inst_jne_rel32 :: #force_inline proc "contextless" (offset: i32) -> Instruction { return Instruction{ mnemonic = .JNE, operand_count = 1, ops = {op_rel32(offset), {}, {}, {}} } } -emit_jne_rel8 :: #force_inline proc(instructions: ^[dynamic]Instruction, offset: i8) { append(instructions, inst_jne_rel8(offset)) } -emit_jne_rel32 :: #force_inline proc(instructions: ^[dynamic]Instruction, offset: i32) { append(instructions, inst_jne_rel32(offset)) } +emit_jne_rel8 :: #force_inline proc(instructions: ^[dynamic]Instruction, offset: i8) { append_elem(instructions, inst_jne_rel8(offset)) } +emit_jne_rel32 :: #force_inline proc(instructions: ^[dynamic]Instruction, offset: i32) { append_elem(instructions, inst_jne_rel32(offset)) } inst_jnz_rel8 :: #force_inline proc "contextless" (offset: i8) -> Instruction { return Instruction{ mnemonic = .JNZ, operand_count = 1, ops = {op_rel8(offset), {}, {}, {}} } } inst_jnz_rel32 :: #force_inline proc "contextless" (offset: i32) -> Instruction { return Instruction{ mnemonic = .JNZ, operand_count = 1, ops = {op_rel32(offset), {}, {}, {}} } } -emit_jnz_rel8 :: #force_inline proc(instructions: ^[dynamic]Instruction, offset: i8) { append(instructions, inst_jnz_rel8(offset)) } -emit_jnz_rel32 :: #force_inline proc(instructions: ^[dynamic]Instruction, offset: i32) { append(instructions, inst_jnz_rel32(offset)) } +emit_jnz_rel8 :: #force_inline proc(instructions: ^[dynamic]Instruction, offset: i8) { append_elem(instructions, inst_jnz_rel8(offset)) } +emit_jnz_rel32 :: #force_inline proc(instructions: ^[dynamic]Instruction, offset: i32) { append_elem(instructions, inst_jnz_rel32(offset)) } inst_jng_rel8 :: #force_inline proc "contextless" (offset: i8) -> Instruction { return Instruction{ mnemonic = .JNG, operand_count = 1, ops = {op_rel8(offset), {}, {}, {}} } } inst_jng_rel32 :: #force_inline proc "contextless" (offset: i32) -> Instruction { return Instruction{ mnemonic = .JNG, operand_count = 1, ops = {op_rel32(offset), {}, {}, {}} } } -emit_jng_rel8 :: #force_inline proc(instructions: ^[dynamic]Instruction, offset: i8) { append(instructions, inst_jng_rel8(offset)) } -emit_jng_rel32 :: #force_inline proc(instructions: ^[dynamic]Instruction, offset: i32) { append(instructions, inst_jng_rel32(offset)) } +emit_jng_rel8 :: #force_inline proc(instructions: ^[dynamic]Instruction, offset: i8) { append_elem(instructions, inst_jng_rel8(offset)) } +emit_jng_rel32 :: #force_inline proc(instructions: ^[dynamic]Instruction, offset: i32) { append_elem(instructions, inst_jng_rel32(offset)) } inst_jnge_rel8 :: #force_inline proc "contextless" (offset: i8) -> Instruction { return Instruction{ mnemonic = .JNGE, operand_count = 1, ops = {op_rel8(offset), {}, {}, {}} } } inst_jnge_rel32 :: #force_inline proc "contextless" (offset: i32) -> Instruction { return Instruction{ mnemonic = .JNGE, operand_count = 1, ops = {op_rel32(offset), {}, {}, {}} } } -emit_jnge_rel8 :: #force_inline proc(instructions: ^[dynamic]Instruction, offset: i8) { append(instructions, inst_jnge_rel8(offset)) } -emit_jnge_rel32 :: #force_inline proc(instructions: ^[dynamic]Instruction, offset: i32) { append(instructions, inst_jnge_rel32(offset)) } +emit_jnge_rel8 :: #force_inline proc(instructions: ^[dynamic]Instruction, offset: i8) { append_elem(instructions, inst_jnge_rel8(offset)) } +emit_jnge_rel32 :: #force_inline proc(instructions: ^[dynamic]Instruction, offset: i32) { append_elem(instructions, inst_jnge_rel32(offset)) } inst_jnl_rel8 :: #force_inline proc "contextless" (offset: i8) -> Instruction { return Instruction{ mnemonic = .JNL, operand_count = 1, ops = {op_rel8(offset), {}, {}, {}} } } inst_jnl_rel32 :: #force_inline proc "contextless" (offset: i32) -> Instruction { return Instruction{ mnemonic = .JNL, operand_count = 1, ops = {op_rel32(offset), {}, {}, {}} } } -emit_jnl_rel8 :: #force_inline proc(instructions: ^[dynamic]Instruction, offset: i8) { append(instructions, inst_jnl_rel8(offset)) } -emit_jnl_rel32 :: #force_inline proc(instructions: ^[dynamic]Instruction, offset: i32) { append(instructions, inst_jnl_rel32(offset)) } +emit_jnl_rel8 :: #force_inline proc(instructions: ^[dynamic]Instruction, offset: i8) { append_elem(instructions, inst_jnl_rel8(offset)) } +emit_jnl_rel32 :: #force_inline proc(instructions: ^[dynamic]Instruction, offset: i32) { append_elem(instructions, inst_jnl_rel32(offset)) } inst_jnle_rel8 :: #force_inline proc "contextless" (offset: i8) -> Instruction { return Instruction{ mnemonic = .JNLE, operand_count = 1, ops = {op_rel8(offset), {}, {}, {}} } } inst_jnle_rel32 :: #force_inline proc "contextless" (offset: i32) -> Instruction { return Instruction{ mnemonic = .JNLE, operand_count = 1, ops = {op_rel32(offset), {}, {}, {}} } } -emit_jnle_rel8 :: #force_inline proc(instructions: ^[dynamic]Instruction, offset: i8) { append(instructions, inst_jnle_rel8(offset)) } -emit_jnle_rel32 :: #force_inline proc(instructions: ^[dynamic]Instruction, offset: i32) { append(instructions, inst_jnle_rel32(offset)) } +emit_jnle_rel8 :: #force_inline proc(instructions: ^[dynamic]Instruction, offset: i8) { append_elem(instructions, inst_jnle_rel8(offset)) } +emit_jnle_rel32 :: #force_inline proc(instructions: ^[dynamic]Instruction, offset: i32) { append_elem(instructions, inst_jnle_rel32(offset)) } inst_jno_rel8 :: #force_inline proc "contextless" (offset: i8) -> Instruction { return Instruction{ mnemonic = .JNO, operand_count = 1, ops = {op_rel8(offset), {}, {}, {}} } } inst_jno_rel32 :: #force_inline proc "contextless" (offset: i32) -> Instruction { return Instruction{ mnemonic = .JNO, operand_count = 1, ops = {op_rel32(offset), {}, {}, {}} } } -emit_jno_rel8 :: #force_inline proc(instructions: ^[dynamic]Instruction, offset: i8) { append(instructions, inst_jno_rel8(offset)) } -emit_jno_rel32 :: #force_inline proc(instructions: ^[dynamic]Instruction, offset: i32) { append(instructions, inst_jno_rel32(offset)) } +emit_jno_rel8 :: #force_inline proc(instructions: ^[dynamic]Instruction, offset: i8) { append_elem(instructions, inst_jno_rel8(offset)) } +emit_jno_rel32 :: #force_inline proc(instructions: ^[dynamic]Instruction, offset: i32) { append_elem(instructions, inst_jno_rel32(offset)) } inst_jnp_rel8 :: #force_inline proc "contextless" (offset: i8) -> Instruction { return Instruction{ mnemonic = .JNP, operand_count = 1, ops = {op_rel8(offset), {}, {}, {}} } } inst_jnp_rel32 :: #force_inline proc "contextless" (offset: i32) -> Instruction { return Instruction{ mnemonic = .JNP, operand_count = 1, ops = {op_rel32(offset), {}, {}, {}} } } -emit_jnp_rel8 :: #force_inline proc(instructions: ^[dynamic]Instruction, offset: i8) { append(instructions, inst_jnp_rel8(offset)) } -emit_jnp_rel32 :: #force_inline proc(instructions: ^[dynamic]Instruction, offset: i32) { append(instructions, inst_jnp_rel32(offset)) } +emit_jnp_rel8 :: #force_inline proc(instructions: ^[dynamic]Instruction, offset: i8) { append_elem(instructions, inst_jnp_rel8(offset)) } +emit_jnp_rel32 :: #force_inline proc(instructions: ^[dynamic]Instruction, offset: i32) { append_elem(instructions, inst_jnp_rel32(offset)) } inst_jns_rel8 :: #force_inline proc "contextless" (offset: i8) -> Instruction { return Instruction{ mnemonic = .JNS, operand_count = 1, ops = {op_rel8(offset), {}, {}, {}} } } inst_jns_rel32 :: #force_inline proc "contextless" (offset: i32) -> Instruction { return Instruction{ mnemonic = .JNS, operand_count = 1, ops = {op_rel32(offset), {}, {}, {}} } } -emit_jns_rel8 :: #force_inline proc(instructions: ^[dynamic]Instruction, offset: i8) { append(instructions, inst_jns_rel8(offset)) } -emit_jns_rel32 :: #force_inline proc(instructions: ^[dynamic]Instruction, offset: i32) { append(instructions, inst_jns_rel32(offset)) } +emit_jns_rel8 :: #force_inline proc(instructions: ^[dynamic]Instruction, offset: i8) { append_elem(instructions, inst_jns_rel8(offset)) } +emit_jns_rel32 :: #force_inline proc(instructions: ^[dynamic]Instruction, offset: i32) { append_elem(instructions, inst_jns_rel32(offset)) } inst_jo_rel8 :: #force_inline proc "contextless" (offset: i8) -> Instruction { return Instruction{ mnemonic = .JO, operand_count = 1, ops = {op_rel8(offset), {}, {}, {}} } } inst_jo_rel32 :: #force_inline proc "contextless" (offset: i32) -> Instruction { return Instruction{ mnemonic = .JO, operand_count = 1, ops = {op_rel32(offset), {}, {}, {}} } } -emit_jo_rel8 :: #force_inline proc(instructions: ^[dynamic]Instruction, offset: i8) { append(instructions, inst_jo_rel8(offset)) } -emit_jo_rel32 :: #force_inline proc(instructions: ^[dynamic]Instruction, offset: i32) { append(instructions, inst_jo_rel32(offset)) } +emit_jo_rel8 :: #force_inline proc(instructions: ^[dynamic]Instruction, offset: i8) { append_elem(instructions, inst_jo_rel8(offset)) } +emit_jo_rel32 :: #force_inline proc(instructions: ^[dynamic]Instruction, offset: i32) { append_elem(instructions, inst_jo_rel32(offset)) } inst_jp_rel8 :: #force_inline proc "contextless" (offset: i8) -> Instruction { return Instruction{ mnemonic = .JP, operand_count = 1, ops = {op_rel8(offset), {}, {}, {}} } } inst_jp_rel32 :: #force_inline proc "contextless" (offset: i32) -> Instruction { return Instruction{ mnemonic = .JP, operand_count = 1, ops = {op_rel32(offset), {}, {}, {}} } } -emit_jp_rel8 :: #force_inline proc(instructions: ^[dynamic]Instruction, offset: i8) { append(instructions, inst_jp_rel8(offset)) } -emit_jp_rel32 :: #force_inline proc(instructions: ^[dynamic]Instruction, offset: i32) { append(instructions, inst_jp_rel32(offset)) } +emit_jp_rel8 :: #force_inline proc(instructions: ^[dynamic]Instruction, offset: i8) { append_elem(instructions, inst_jp_rel8(offset)) } +emit_jp_rel32 :: #force_inline proc(instructions: ^[dynamic]Instruction, offset: i32) { append_elem(instructions, inst_jp_rel32(offset)) } inst_jpe_rel8 :: #force_inline proc "contextless" (offset: i8) -> Instruction { return Instruction{ mnemonic = .JPE, operand_count = 1, ops = {op_rel8(offset), {}, {}, {}} } } inst_jpe_rel32 :: #force_inline proc "contextless" (offset: i32) -> Instruction { return Instruction{ mnemonic = .JPE, operand_count = 1, ops = {op_rel32(offset), {}, {}, {}} } } -emit_jpe_rel8 :: #force_inline proc(instructions: ^[dynamic]Instruction, offset: i8) { append(instructions, inst_jpe_rel8(offset)) } -emit_jpe_rel32 :: #force_inline proc(instructions: ^[dynamic]Instruction, offset: i32) { append(instructions, inst_jpe_rel32(offset)) } +emit_jpe_rel8 :: #force_inline proc(instructions: ^[dynamic]Instruction, offset: i8) { append_elem(instructions, inst_jpe_rel8(offset)) } +emit_jpe_rel32 :: #force_inline proc(instructions: ^[dynamic]Instruction, offset: i32) { append_elem(instructions, inst_jpe_rel32(offset)) } inst_jpo_rel8 :: #force_inline proc "contextless" (offset: i8) -> Instruction { return Instruction{ mnemonic = .JPO, operand_count = 1, ops = {op_rel8(offset), {}, {}, {}} } } inst_jpo_rel32 :: #force_inline proc "contextless" (offset: i32) -> Instruction { return Instruction{ mnemonic = .JPO, operand_count = 1, ops = {op_rel32(offset), {}, {}, {}} } } -emit_jpo_rel8 :: #force_inline proc(instructions: ^[dynamic]Instruction, offset: i8) { append(instructions, inst_jpo_rel8(offset)) } -emit_jpo_rel32 :: #force_inline proc(instructions: ^[dynamic]Instruction, offset: i32) { append(instructions, inst_jpo_rel32(offset)) } +emit_jpo_rel8 :: #force_inline proc(instructions: ^[dynamic]Instruction, offset: i8) { append_elem(instructions, inst_jpo_rel8(offset)) } +emit_jpo_rel32 :: #force_inline proc(instructions: ^[dynamic]Instruction, offset: i32) { append_elem(instructions, inst_jpo_rel32(offset)) } inst_js_rel8 :: #force_inline proc "contextless" (offset: i8) -> Instruction { return Instruction{ mnemonic = .JS, operand_count = 1, ops = {op_rel8(offset), {}, {}, {}} } } inst_js_rel32 :: #force_inline proc "contextless" (offset: i32) -> Instruction { return Instruction{ mnemonic = .JS, operand_count = 1, ops = {op_rel32(offset), {}, {}, {}} } } -emit_js_rel8 :: #force_inline proc(instructions: ^[dynamic]Instruction, offset: i8) { append(instructions, inst_js_rel8(offset)) } -emit_js_rel32 :: #force_inline proc(instructions: ^[dynamic]Instruction, offset: i32) { append(instructions, inst_js_rel32(offset)) } +emit_js_rel8 :: #force_inline proc(instructions: ^[dynamic]Instruction, offset: i8) { append_elem(instructions, inst_js_rel8(offset)) } +emit_js_rel32 :: #force_inline proc(instructions: ^[dynamic]Instruction, offset: i32) { append_elem(instructions, inst_js_rel32(offset)) } inst_jcxz_rel8 :: #force_inline proc "contextless" (offset: i8) -> Instruction { return Instruction{ mnemonic = .JCXZ, operand_count = 1, ops = {op_rel8(offset), {}, {}, {}} } } -emit_jcxz_rel8 :: #force_inline proc(instructions: ^[dynamic]Instruction, offset: i8) { append(instructions, inst_jcxz_rel8(offset)) } +emit_jcxz_rel8 :: #force_inline proc(instructions: ^[dynamic]Instruction, offset: i8) { append_elem(instructions, inst_jcxz_rel8(offset)) } inst_jecxz_rel8 :: #force_inline proc "contextless" (offset: i8) -> Instruction { return Instruction{ mnemonic = .JECXZ, operand_count = 1, ops = {op_rel8(offset), {}, {}, {}} } } -emit_jecxz_rel8 :: #force_inline proc(instructions: ^[dynamic]Instruction, offset: i8) { append(instructions, inst_jecxz_rel8(offset)) } +emit_jecxz_rel8 :: #force_inline proc(instructions: ^[dynamic]Instruction, offset: i8) { append_elem(instructions, inst_jecxz_rel8(offset)) } inst_jrcxz_rel8 :: #force_inline proc "contextless" (offset: i8) -> Instruction { return Instruction{ mnemonic = .JRCXZ, operand_count = 1, ops = {op_rel8(offset), {}, {}, {}} } } -emit_jrcxz_rel8 :: #force_inline proc(instructions: ^[dynamic]Instruction, offset: i8) { append(instructions, inst_jrcxz_rel8(offset)) } +emit_jrcxz_rel8 :: #force_inline proc(instructions: ^[dynamic]Instruction, offset: i8) { append_elem(instructions, inst_jrcxz_rel8(offset)) } inst_loop_rel8 :: #force_inline proc "contextless" (offset: i8) -> Instruction { return Instruction{ mnemonic = .LOOP, operand_count = 1, ops = {op_rel8(offset), {}, {}, {}} } } -emit_loop_rel8 :: #force_inline proc(instructions: ^[dynamic]Instruction, offset: i8) { append(instructions, inst_loop_rel8(offset)) } +emit_loop_rel8 :: #force_inline proc(instructions: ^[dynamic]Instruction, offset: i8) { append_elem(instructions, inst_loop_rel8(offset)) } inst_loope_rel8 :: #force_inline proc "contextless" (offset: i8) -> Instruction { return Instruction{ mnemonic = .LOOPE, operand_count = 1, ops = {op_rel8(offset), {}, {}, {}} } } -emit_loope_rel8 :: #force_inline proc(instructions: ^[dynamic]Instruction, offset: i8) { append(instructions, inst_loope_rel8(offset)) } +emit_loope_rel8 :: #force_inline proc(instructions: ^[dynamic]Instruction, offset: i8) { append_elem(instructions, inst_loope_rel8(offset)) } inst_loopne_rel8 :: #force_inline proc "contextless" (offset: i8) -> Instruction { return Instruction{ mnemonic = .LOOPNE, operand_count = 1, ops = {op_rel8(offset), {}, {}, {}} } } -emit_loopne_rel8 :: #force_inline proc(instructions: ^[dynamic]Instruction, offset: i8) { append(instructions, inst_loopne_rel8(offset)) } +emit_loopne_rel8 :: #force_inline proc(instructions: ^[dynamic]Instruction, offset: i8) { append_elem(instructions, inst_loopne_rel8(offset)) } inst_call_rel32 :: #force_inline proc "contextless" (offset: i32) -> Instruction { return Instruction{ mnemonic = .CALL, operand_count = 1, ops = {op_rel32(offset), {}, {}, {}} } } inst_call_r64 :: #force_inline proc "contextless" (dst: GPR64) -> Instruction { return with_hint(Instruction{ mnemonic = .CALL, operand_count = 1, ops = {op_gpr64(dst), {}, {}, {}} }, 507) } inst_call_m64 :: #force_inline proc "contextless" (dst: Mem64) -> Instruction { return with_hint(Instruction{ mnemonic = .CALL, operand_count = 1, ops = {op_mem(dst.mem, 8), {}, {}, {}} }, 507) } inst_call_m :: #force_inline proc "contextless" (dst: Memory) -> Instruction { return with_hint(Instruction{ mnemonic = .CALL, operand_count = 1, ops = {op_mem(dst, 0), {}, {}, {}} }, 508) } -emit_call_rel32 :: #force_inline proc(instructions: ^[dynamic]Instruction, offset: i32) { append(instructions, inst_call_rel32(offset)) } -emit_call_r64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64) { append(instructions, inst_call_r64(dst)) } -emit_call_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem64) { append(instructions, inst_call_m64(dst)) } -emit_call_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Memory) { append(instructions, inst_call_m(dst)) } +emit_call_rel32 :: #force_inline proc(instructions: ^[dynamic]Instruction, offset: i32) { append_elem(instructions, inst_call_rel32(offset)) } +emit_call_r64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64) { append_elem(instructions, inst_call_r64(dst)) } +emit_call_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem64) { append_elem(instructions, inst_call_m64(dst)) } +emit_call_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Memory) { append_elem(instructions, inst_call_m(dst)) } inst_ret_none :: #force_inline proc "contextless" () -> Instruction { return with_hint(Instruction{ mnemonic = .RET, operand_count = 0, ops = {{}, {}, {}, {}} }, 511) } inst_ret_imm16 :: #force_inline proc "contextless" (imm: i16) -> Instruction { return with_hint(Instruction{ mnemonic = .RET, operand_count = 1, ops = {op_imm16(imm), {}, {}, {}} }, 512) } -emit_ret_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_ret_none()) } -emit_ret_imm16 :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i16) { append(instructions, inst_ret_imm16(imm)) } +emit_ret_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_ret_none()) } +emit_ret_imm16 :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i16) { append_elem(instructions, inst_ret_imm16(imm)) } inst_iret_none :: #force_inline proc "contextless" () -> Instruction { return with_hint(Instruction{ mnemonic = .IRET, operand_count = 0, ops = {{}, {}, {}, {}} }, 513) } -emit_iret_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_iret_none()) } +emit_iret_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_iret_none()) } inst_iretd_none :: #force_inline proc "contextless" () -> Instruction { return with_hint(Instruction{ mnemonic = .IRETD, operand_count = 0, ops = {{}, {}, {}, {}} }, 514) } -emit_iretd_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_iretd_none()) } +emit_iretd_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_iretd_none()) } inst_iretq_none :: #force_inline proc "contextless" () -> Instruction { return with_hint(Instruction{ mnemonic = .IRETQ, operand_count = 0, ops = {{}, {}, {}, {}} }, 515) } -emit_iretq_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_iretq_none()) } +emit_iretq_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_iretq_none()) } inst_int_imm8 :: #force_inline proc "contextless" (imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .INT, operand_count = 1, ops = {op_imm8(imm), {}, {}, {}} }, 516) } -emit_int_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i8) { append(instructions, inst_int_imm8(imm)) } +emit_int_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i8) { append_elem(instructions, inst_int_imm8(imm)) } inst_int3_none :: #force_inline proc "contextless" () -> Instruction { return with_hint(Instruction{ mnemonic = .INT3, operand_count = 0, ops = {{}, {}, {}, {}} }, 517) } -emit_int3_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_int3_none()) } +emit_int3_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_int3_none()) } inst_into_none :: #force_inline proc "contextless" () -> Instruction { return with_hint(Instruction{ mnemonic = .INTO, operand_count = 0, ops = {{}, {}, {}, {}} }, 518) } -emit_into_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_into_none()) } +emit_into_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_into_none()) } inst_syscall_none :: #force_inline proc "contextless" () -> Instruction { return with_hint(Instruction{ mnemonic = .SYSCALL, operand_count = 0, ops = {{}, {}, {}, {}} }, 519) } -emit_syscall_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_syscall_none()) } +emit_syscall_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_syscall_none()) } inst_sysret_none :: #force_inline proc "contextless" () -> Instruction { return with_hint(Instruction{ mnemonic = .SYSRET, operand_count = 0, ops = {{}, {}, {}, {}} }, 520) } -emit_sysret_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_sysret_none()) } +emit_sysret_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_sysret_none()) } inst_sysenter_none :: #force_inline proc "contextless" () -> Instruction { return with_hint(Instruction{ mnemonic = .SYSENTER, operand_count = 0, ops = {{}, {}, {}, {}} }, 521) } -emit_sysenter_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_sysenter_none()) } +emit_sysenter_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_sysenter_none()) } inst_sysexit_none :: #force_inline proc "contextless" () -> Instruction { return with_hint(Instruction{ mnemonic = .SYSEXIT, operand_count = 0, ops = {{}, {}, {}, {}} }, 522) } -emit_sysexit_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_sysexit_none()) } +emit_sysexit_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_sysexit_none()) } inst_seta_r8 :: #force_inline proc "contextless" (dst: GPR8) -> Instruction { return with_hint(Instruction{ mnemonic = .SETA, operand_count = 1, ops = {op_gpr8(dst), {}, {}, {}} }, 523) } inst_seta_m8 :: #force_inline proc "contextless" (dst: Mem8) -> Instruction { return with_hint(Instruction{ mnemonic = .SETA, operand_count = 1, ops = {op_mem(dst.mem, 1), {}, {}, {}} }, 523) } -emit_seta_r8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR8) { append(instructions, inst_seta_r8(dst)) } -emit_seta_m8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem8) { append(instructions, inst_seta_m8(dst)) } +emit_seta_r8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR8) { append_elem(instructions, inst_seta_r8(dst)) } +emit_seta_m8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem8) { append_elem(instructions, inst_seta_m8(dst)) } inst_setae_r8 :: #force_inline proc "contextless" (dst: GPR8) -> Instruction { return with_hint(Instruction{ mnemonic = .SETAE, operand_count = 1, ops = {op_gpr8(dst), {}, {}, {}} }, 524) } inst_setae_m8 :: #force_inline proc "contextless" (dst: Mem8) -> Instruction { return with_hint(Instruction{ mnemonic = .SETAE, operand_count = 1, ops = {op_mem(dst.mem, 1), {}, {}, {}} }, 524) } -emit_setae_r8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR8) { append(instructions, inst_setae_r8(dst)) } -emit_setae_m8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem8) { append(instructions, inst_setae_m8(dst)) } +emit_setae_r8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR8) { append_elem(instructions, inst_setae_r8(dst)) } +emit_setae_m8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem8) { append_elem(instructions, inst_setae_m8(dst)) } inst_setb_r8 :: #force_inline proc "contextless" (dst: GPR8) -> Instruction { return with_hint(Instruction{ mnemonic = .SETB, operand_count = 1, ops = {op_gpr8(dst), {}, {}, {}} }, 525) } inst_setb_m8 :: #force_inline proc "contextless" (dst: Mem8) -> Instruction { return with_hint(Instruction{ mnemonic = .SETB, operand_count = 1, ops = {op_mem(dst.mem, 1), {}, {}, {}} }, 525) } -emit_setb_r8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR8) { append(instructions, inst_setb_r8(dst)) } -emit_setb_m8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem8) { append(instructions, inst_setb_m8(dst)) } +emit_setb_r8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR8) { append_elem(instructions, inst_setb_r8(dst)) } +emit_setb_m8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem8) { append_elem(instructions, inst_setb_m8(dst)) } inst_setbe_r8 :: #force_inline proc "contextless" (dst: GPR8) -> Instruction { return with_hint(Instruction{ mnemonic = .SETBE, operand_count = 1, ops = {op_gpr8(dst), {}, {}, {}} }, 526) } inst_setbe_m8 :: #force_inline proc "contextless" (dst: Mem8) -> Instruction { return with_hint(Instruction{ mnemonic = .SETBE, operand_count = 1, ops = {op_mem(dst.mem, 1), {}, {}, {}} }, 526) } -emit_setbe_r8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR8) { append(instructions, inst_setbe_r8(dst)) } -emit_setbe_m8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem8) { append(instructions, inst_setbe_m8(dst)) } +emit_setbe_r8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR8) { append_elem(instructions, inst_setbe_r8(dst)) } +emit_setbe_m8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem8) { append_elem(instructions, inst_setbe_m8(dst)) } inst_setc_r8 :: #force_inline proc "contextless" (dst: GPR8) -> Instruction { return with_hint(Instruction{ mnemonic = .SETC, operand_count = 1, ops = {op_gpr8(dst), {}, {}, {}} }, 527) } inst_setc_m8 :: #force_inline proc "contextless" (dst: Mem8) -> Instruction { return with_hint(Instruction{ mnemonic = .SETC, operand_count = 1, ops = {op_mem(dst.mem, 1), {}, {}, {}} }, 527) } -emit_setc_r8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR8) { append(instructions, inst_setc_r8(dst)) } -emit_setc_m8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem8) { append(instructions, inst_setc_m8(dst)) } +emit_setc_r8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR8) { append_elem(instructions, inst_setc_r8(dst)) } +emit_setc_m8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem8) { append_elem(instructions, inst_setc_m8(dst)) } inst_sete_r8 :: #force_inline proc "contextless" (dst: GPR8) -> Instruction { return with_hint(Instruction{ mnemonic = .SETE, operand_count = 1, ops = {op_gpr8(dst), {}, {}, {}} }, 528) } inst_sete_m8 :: #force_inline proc "contextless" (dst: Mem8) -> Instruction { return with_hint(Instruction{ mnemonic = .SETE, operand_count = 1, ops = {op_mem(dst.mem, 1), {}, {}, {}} }, 528) } -emit_sete_r8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR8) { append(instructions, inst_sete_r8(dst)) } -emit_sete_m8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem8) { append(instructions, inst_sete_m8(dst)) } +emit_sete_r8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR8) { append_elem(instructions, inst_sete_r8(dst)) } +emit_sete_m8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem8) { append_elem(instructions, inst_sete_m8(dst)) } inst_setg_r8 :: #force_inline proc "contextless" (dst: GPR8) -> Instruction { return with_hint(Instruction{ mnemonic = .SETG, operand_count = 1, ops = {op_gpr8(dst), {}, {}, {}} }, 529) } inst_setg_m8 :: #force_inline proc "contextless" (dst: Mem8) -> Instruction { return with_hint(Instruction{ mnemonic = .SETG, operand_count = 1, ops = {op_mem(dst.mem, 1), {}, {}, {}} }, 529) } -emit_setg_r8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR8) { append(instructions, inst_setg_r8(dst)) } -emit_setg_m8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem8) { append(instructions, inst_setg_m8(dst)) } +emit_setg_r8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR8) { append_elem(instructions, inst_setg_r8(dst)) } +emit_setg_m8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem8) { append_elem(instructions, inst_setg_m8(dst)) } inst_setge_r8 :: #force_inline proc "contextless" (dst: GPR8) -> Instruction { return with_hint(Instruction{ mnemonic = .SETGE, operand_count = 1, ops = {op_gpr8(dst), {}, {}, {}} }, 530) } inst_setge_m8 :: #force_inline proc "contextless" (dst: Mem8) -> Instruction { return with_hint(Instruction{ mnemonic = .SETGE, operand_count = 1, ops = {op_mem(dst.mem, 1), {}, {}, {}} }, 530) } -emit_setge_r8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR8) { append(instructions, inst_setge_r8(dst)) } -emit_setge_m8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem8) { append(instructions, inst_setge_m8(dst)) } +emit_setge_r8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR8) { append_elem(instructions, inst_setge_r8(dst)) } +emit_setge_m8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem8) { append_elem(instructions, inst_setge_m8(dst)) } inst_setl_r8 :: #force_inline proc "contextless" (dst: GPR8) -> Instruction { return with_hint(Instruction{ mnemonic = .SETL, operand_count = 1, ops = {op_gpr8(dst), {}, {}, {}} }, 531) } inst_setl_m8 :: #force_inline proc "contextless" (dst: Mem8) -> Instruction { return with_hint(Instruction{ mnemonic = .SETL, operand_count = 1, ops = {op_mem(dst.mem, 1), {}, {}, {}} }, 531) } -emit_setl_r8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR8) { append(instructions, inst_setl_r8(dst)) } -emit_setl_m8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem8) { append(instructions, inst_setl_m8(dst)) } +emit_setl_r8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR8) { append_elem(instructions, inst_setl_r8(dst)) } +emit_setl_m8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem8) { append_elem(instructions, inst_setl_m8(dst)) } inst_setle_r8 :: #force_inline proc "contextless" (dst: GPR8) -> Instruction { return with_hint(Instruction{ mnemonic = .SETLE, operand_count = 1, ops = {op_gpr8(dst), {}, {}, {}} }, 532) } inst_setle_m8 :: #force_inline proc "contextless" (dst: Mem8) -> Instruction { return with_hint(Instruction{ mnemonic = .SETLE, operand_count = 1, ops = {op_mem(dst.mem, 1), {}, {}, {}} }, 532) } -emit_setle_r8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR8) { append(instructions, inst_setle_r8(dst)) } -emit_setle_m8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem8) { append(instructions, inst_setle_m8(dst)) } +emit_setle_r8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR8) { append_elem(instructions, inst_setle_r8(dst)) } +emit_setle_m8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem8) { append_elem(instructions, inst_setle_m8(dst)) } inst_setna_r8 :: #force_inline proc "contextless" (dst: GPR8) -> Instruction { return with_hint(Instruction{ mnemonic = .SETNA, operand_count = 1, ops = {op_gpr8(dst), {}, {}, {}} }, 533) } inst_setna_m8 :: #force_inline proc "contextless" (dst: Mem8) -> Instruction { return with_hint(Instruction{ mnemonic = .SETNA, operand_count = 1, ops = {op_mem(dst.mem, 1), {}, {}, {}} }, 533) } -emit_setna_r8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR8) { append(instructions, inst_setna_r8(dst)) } -emit_setna_m8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem8) { append(instructions, inst_setna_m8(dst)) } +emit_setna_r8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR8) { append_elem(instructions, inst_setna_r8(dst)) } +emit_setna_m8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem8) { append_elem(instructions, inst_setna_m8(dst)) } inst_setnae_r8 :: #force_inline proc "contextless" (dst: GPR8) -> Instruction { return with_hint(Instruction{ mnemonic = .SETNAE, operand_count = 1, ops = {op_gpr8(dst), {}, {}, {}} }, 534) } inst_setnae_m8 :: #force_inline proc "contextless" (dst: Mem8) -> Instruction { return with_hint(Instruction{ mnemonic = .SETNAE, operand_count = 1, ops = {op_mem(dst.mem, 1), {}, {}, {}} }, 534) } -emit_setnae_r8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR8) { append(instructions, inst_setnae_r8(dst)) } -emit_setnae_m8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem8) { append(instructions, inst_setnae_m8(dst)) } +emit_setnae_r8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR8) { append_elem(instructions, inst_setnae_r8(dst)) } +emit_setnae_m8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem8) { append_elem(instructions, inst_setnae_m8(dst)) } inst_setnb_r8 :: #force_inline proc "contextless" (dst: GPR8) -> Instruction { return with_hint(Instruction{ mnemonic = .SETNB, operand_count = 1, ops = {op_gpr8(dst), {}, {}, {}} }, 535) } inst_setnb_m8 :: #force_inline proc "contextless" (dst: Mem8) -> Instruction { return with_hint(Instruction{ mnemonic = .SETNB, operand_count = 1, ops = {op_mem(dst.mem, 1), {}, {}, {}} }, 535) } -emit_setnb_r8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR8) { append(instructions, inst_setnb_r8(dst)) } -emit_setnb_m8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem8) { append(instructions, inst_setnb_m8(dst)) } +emit_setnb_r8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR8) { append_elem(instructions, inst_setnb_r8(dst)) } +emit_setnb_m8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem8) { append_elem(instructions, inst_setnb_m8(dst)) } inst_setnbe_r8 :: #force_inline proc "contextless" (dst: GPR8) -> Instruction { return with_hint(Instruction{ mnemonic = .SETNBE, operand_count = 1, ops = {op_gpr8(dst), {}, {}, {}} }, 536) } inst_setnbe_m8 :: #force_inline proc "contextless" (dst: Mem8) -> Instruction { return with_hint(Instruction{ mnemonic = .SETNBE, operand_count = 1, ops = {op_mem(dst.mem, 1), {}, {}, {}} }, 536) } -emit_setnbe_r8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR8) { append(instructions, inst_setnbe_r8(dst)) } -emit_setnbe_m8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem8) { append(instructions, inst_setnbe_m8(dst)) } +emit_setnbe_r8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR8) { append_elem(instructions, inst_setnbe_r8(dst)) } +emit_setnbe_m8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem8) { append_elem(instructions, inst_setnbe_m8(dst)) } inst_setnc_r8 :: #force_inline proc "contextless" (dst: GPR8) -> Instruction { return with_hint(Instruction{ mnemonic = .SETNC, operand_count = 1, ops = {op_gpr8(dst), {}, {}, {}} }, 537) } inst_setnc_m8 :: #force_inline proc "contextless" (dst: Mem8) -> Instruction { return with_hint(Instruction{ mnemonic = .SETNC, operand_count = 1, ops = {op_mem(dst.mem, 1), {}, {}, {}} }, 537) } -emit_setnc_r8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR8) { append(instructions, inst_setnc_r8(dst)) } -emit_setnc_m8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem8) { append(instructions, inst_setnc_m8(dst)) } +emit_setnc_r8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR8) { append_elem(instructions, inst_setnc_r8(dst)) } +emit_setnc_m8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem8) { append_elem(instructions, inst_setnc_m8(dst)) } inst_setne_r8 :: #force_inline proc "contextless" (dst: GPR8) -> Instruction { return with_hint(Instruction{ mnemonic = .SETNE, operand_count = 1, ops = {op_gpr8(dst), {}, {}, {}} }, 538) } inst_setne_m8 :: #force_inline proc "contextless" (dst: Mem8) -> Instruction { return with_hint(Instruction{ mnemonic = .SETNE, operand_count = 1, ops = {op_mem(dst.mem, 1), {}, {}, {}} }, 538) } -emit_setne_r8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR8) { append(instructions, inst_setne_r8(dst)) } -emit_setne_m8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem8) { append(instructions, inst_setne_m8(dst)) } +emit_setne_r8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR8) { append_elem(instructions, inst_setne_r8(dst)) } +emit_setne_m8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem8) { append_elem(instructions, inst_setne_m8(dst)) } inst_setng_r8 :: #force_inline proc "contextless" (dst: GPR8) -> Instruction { return with_hint(Instruction{ mnemonic = .SETNG, operand_count = 1, ops = {op_gpr8(dst), {}, {}, {}} }, 539) } inst_setng_m8 :: #force_inline proc "contextless" (dst: Mem8) -> Instruction { return with_hint(Instruction{ mnemonic = .SETNG, operand_count = 1, ops = {op_mem(dst.mem, 1), {}, {}, {}} }, 539) } -emit_setng_r8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR8) { append(instructions, inst_setng_r8(dst)) } -emit_setng_m8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem8) { append(instructions, inst_setng_m8(dst)) } +emit_setng_r8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR8) { append_elem(instructions, inst_setng_r8(dst)) } +emit_setng_m8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem8) { append_elem(instructions, inst_setng_m8(dst)) } inst_setnge_r8 :: #force_inline proc "contextless" (dst: GPR8) -> Instruction { return with_hint(Instruction{ mnemonic = .SETNGE, operand_count = 1, ops = {op_gpr8(dst), {}, {}, {}} }, 540) } inst_setnge_m8 :: #force_inline proc "contextless" (dst: Mem8) -> Instruction { return with_hint(Instruction{ mnemonic = .SETNGE, operand_count = 1, ops = {op_mem(dst.mem, 1), {}, {}, {}} }, 540) } -emit_setnge_r8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR8) { append(instructions, inst_setnge_r8(dst)) } -emit_setnge_m8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem8) { append(instructions, inst_setnge_m8(dst)) } +emit_setnge_r8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR8) { append_elem(instructions, inst_setnge_r8(dst)) } +emit_setnge_m8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem8) { append_elem(instructions, inst_setnge_m8(dst)) } inst_setnl_r8 :: #force_inline proc "contextless" (dst: GPR8) -> Instruction { return with_hint(Instruction{ mnemonic = .SETNL, operand_count = 1, ops = {op_gpr8(dst), {}, {}, {}} }, 541) } inst_setnl_m8 :: #force_inline proc "contextless" (dst: Mem8) -> Instruction { return with_hint(Instruction{ mnemonic = .SETNL, operand_count = 1, ops = {op_mem(dst.mem, 1), {}, {}, {}} }, 541) } -emit_setnl_r8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR8) { append(instructions, inst_setnl_r8(dst)) } -emit_setnl_m8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem8) { append(instructions, inst_setnl_m8(dst)) } +emit_setnl_r8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR8) { append_elem(instructions, inst_setnl_r8(dst)) } +emit_setnl_m8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem8) { append_elem(instructions, inst_setnl_m8(dst)) } inst_setnle_r8 :: #force_inline proc "contextless" (dst: GPR8) -> Instruction { return with_hint(Instruction{ mnemonic = .SETNLE, operand_count = 1, ops = {op_gpr8(dst), {}, {}, {}} }, 542) } inst_setnle_m8 :: #force_inline proc "contextless" (dst: Mem8) -> Instruction { return with_hint(Instruction{ mnemonic = .SETNLE, operand_count = 1, ops = {op_mem(dst.mem, 1), {}, {}, {}} }, 542) } -emit_setnle_r8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR8) { append(instructions, inst_setnle_r8(dst)) } -emit_setnle_m8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem8) { append(instructions, inst_setnle_m8(dst)) } +emit_setnle_r8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR8) { append_elem(instructions, inst_setnle_r8(dst)) } +emit_setnle_m8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem8) { append_elem(instructions, inst_setnle_m8(dst)) } inst_setno_r8 :: #force_inline proc "contextless" (dst: GPR8) -> Instruction { return with_hint(Instruction{ mnemonic = .SETNO, operand_count = 1, ops = {op_gpr8(dst), {}, {}, {}} }, 543) } inst_setno_m8 :: #force_inline proc "contextless" (dst: Mem8) -> Instruction { return with_hint(Instruction{ mnemonic = .SETNO, operand_count = 1, ops = {op_mem(dst.mem, 1), {}, {}, {}} }, 543) } -emit_setno_r8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR8) { append(instructions, inst_setno_r8(dst)) } -emit_setno_m8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem8) { append(instructions, inst_setno_m8(dst)) } +emit_setno_r8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR8) { append_elem(instructions, inst_setno_r8(dst)) } +emit_setno_m8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem8) { append_elem(instructions, inst_setno_m8(dst)) } inst_setnp_r8 :: #force_inline proc "contextless" (dst: GPR8) -> Instruction { return with_hint(Instruction{ mnemonic = .SETNP, operand_count = 1, ops = {op_gpr8(dst), {}, {}, {}} }, 544) } inst_setnp_m8 :: #force_inline proc "contextless" (dst: Mem8) -> Instruction { return with_hint(Instruction{ mnemonic = .SETNP, operand_count = 1, ops = {op_mem(dst.mem, 1), {}, {}, {}} }, 544) } -emit_setnp_r8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR8) { append(instructions, inst_setnp_r8(dst)) } -emit_setnp_m8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem8) { append(instructions, inst_setnp_m8(dst)) } +emit_setnp_r8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR8) { append_elem(instructions, inst_setnp_r8(dst)) } +emit_setnp_m8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem8) { append_elem(instructions, inst_setnp_m8(dst)) } inst_setns_r8 :: #force_inline proc "contextless" (dst: GPR8) -> Instruction { return with_hint(Instruction{ mnemonic = .SETNS, operand_count = 1, ops = {op_gpr8(dst), {}, {}, {}} }, 545) } inst_setns_m8 :: #force_inline proc "contextless" (dst: Mem8) -> Instruction { return with_hint(Instruction{ mnemonic = .SETNS, operand_count = 1, ops = {op_mem(dst.mem, 1), {}, {}, {}} }, 545) } -emit_setns_r8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR8) { append(instructions, inst_setns_r8(dst)) } -emit_setns_m8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem8) { append(instructions, inst_setns_m8(dst)) } +emit_setns_r8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR8) { append_elem(instructions, inst_setns_r8(dst)) } +emit_setns_m8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem8) { append_elem(instructions, inst_setns_m8(dst)) } inst_setnz_r8 :: #force_inline proc "contextless" (dst: GPR8) -> Instruction { return with_hint(Instruction{ mnemonic = .SETNZ, operand_count = 1, ops = {op_gpr8(dst), {}, {}, {}} }, 546) } inst_setnz_m8 :: #force_inline proc "contextless" (dst: Mem8) -> Instruction { return with_hint(Instruction{ mnemonic = .SETNZ, operand_count = 1, ops = {op_mem(dst.mem, 1), {}, {}, {}} }, 546) } -emit_setnz_r8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR8) { append(instructions, inst_setnz_r8(dst)) } -emit_setnz_m8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem8) { append(instructions, inst_setnz_m8(dst)) } +emit_setnz_r8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR8) { append_elem(instructions, inst_setnz_r8(dst)) } +emit_setnz_m8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem8) { append_elem(instructions, inst_setnz_m8(dst)) } inst_seto_r8 :: #force_inline proc "contextless" (dst: GPR8) -> Instruction { return with_hint(Instruction{ mnemonic = .SETO, operand_count = 1, ops = {op_gpr8(dst), {}, {}, {}} }, 547) } inst_seto_m8 :: #force_inline proc "contextless" (dst: Mem8) -> Instruction { return with_hint(Instruction{ mnemonic = .SETO, operand_count = 1, ops = {op_mem(dst.mem, 1), {}, {}, {}} }, 547) } -emit_seto_r8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR8) { append(instructions, inst_seto_r8(dst)) } -emit_seto_m8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem8) { append(instructions, inst_seto_m8(dst)) } +emit_seto_r8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR8) { append_elem(instructions, inst_seto_r8(dst)) } +emit_seto_m8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem8) { append_elem(instructions, inst_seto_m8(dst)) } inst_setp_r8 :: #force_inline proc "contextless" (dst: GPR8) -> Instruction { return with_hint(Instruction{ mnemonic = .SETP, operand_count = 1, ops = {op_gpr8(dst), {}, {}, {}} }, 548) } inst_setp_m8 :: #force_inline proc "contextless" (dst: Mem8) -> Instruction { return with_hint(Instruction{ mnemonic = .SETP, operand_count = 1, ops = {op_mem(dst.mem, 1), {}, {}, {}} }, 548) } -emit_setp_r8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR8) { append(instructions, inst_setp_r8(dst)) } -emit_setp_m8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem8) { append(instructions, inst_setp_m8(dst)) } +emit_setp_r8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR8) { append_elem(instructions, inst_setp_r8(dst)) } +emit_setp_m8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem8) { append_elem(instructions, inst_setp_m8(dst)) } inst_setpe_r8 :: #force_inline proc "contextless" (dst: GPR8) -> Instruction { return with_hint(Instruction{ mnemonic = .SETPE, operand_count = 1, ops = {op_gpr8(dst), {}, {}, {}} }, 549) } inst_setpe_m8 :: #force_inline proc "contextless" (dst: Mem8) -> Instruction { return with_hint(Instruction{ mnemonic = .SETPE, operand_count = 1, ops = {op_mem(dst.mem, 1), {}, {}, {}} }, 549) } -emit_setpe_r8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR8) { append(instructions, inst_setpe_r8(dst)) } -emit_setpe_m8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem8) { append(instructions, inst_setpe_m8(dst)) } +emit_setpe_r8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR8) { append_elem(instructions, inst_setpe_r8(dst)) } +emit_setpe_m8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem8) { append_elem(instructions, inst_setpe_m8(dst)) } inst_setpo_r8 :: #force_inline proc "contextless" (dst: GPR8) -> Instruction { return with_hint(Instruction{ mnemonic = .SETPO, operand_count = 1, ops = {op_gpr8(dst), {}, {}, {}} }, 550) } inst_setpo_m8 :: #force_inline proc "contextless" (dst: Mem8) -> Instruction { return with_hint(Instruction{ mnemonic = .SETPO, operand_count = 1, ops = {op_mem(dst.mem, 1), {}, {}, {}} }, 550) } -emit_setpo_r8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR8) { append(instructions, inst_setpo_r8(dst)) } -emit_setpo_m8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem8) { append(instructions, inst_setpo_m8(dst)) } +emit_setpo_r8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR8) { append_elem(instructions, inst_setpo_r8(dst)) } +emit_setpo_m8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem8) { append_elem(instructions, inst_setpo_m8(dst)) } inst_sets_r8 :: #force_inline proc "contextless" (dst: GPR8) -> Instruction { return with_hint(Instruction{ mnemonic = .SETS, operand_count = 1, ops = {op_gpr8(dst), {}, {}, {}} }, 551) } inst_sets_m8 :: #force_inline proc "contextless" (dst: Mem8) -> Instruction { return with_hint(Instruction{ mnemonic = .SETS, operand_count = 1, ops = {op_mem(dst.mem, 1), {}, {}, {}} }, 551) } -emit_sets_r8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR8) { append(instructions, inst_sets_r8(dst)) } -emit_sets_m8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem8) { append(instructions, inst_sets_m8(dst)) } +emit_sets_r8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR8) { append_elem(instructions, inst_sets_r8(dst)) } +emit_sets_m8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem8) { append_elem(instructions, inst_sets_m8(dst)) } inst_setz_r8 :: #force_inline proc "contextless" (dst: GPR8) -> Instruction { return with_hint(Instruction{ mnemonic = .SETZ, operand_count = 1, ops = {op_gpr8(dst), {}, {}, {}} }, 552) } inst_setz_m8 :: #force_inline proc "contextless" (dst: Mem8) -> Instruction { return with_hint(Instruction{ mnemonic = .SETZ, operand_count = 1, ops = {op_mem(dst.mem, 1), {}, {}, {}} }, 552) } -emit_setz_r8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR8) { append(instructions, inst_setz_r8(dst)) } -emit_setz_m8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem8) { append(instructions, inst_setz_m8(dst)) } +emit_setz_r8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR8) { append_elem(instructions, inst_setz_r8(dst)) } +emit_setz_m8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem8) { append_elem(instructions, inst_setz_m8(dst)) } inst_cmova_r16_r16 :: #force_inline proc "contextless" (dst: GPR16, src: GPR16) -> Instruction { return with_hint(Instruction{ mnemonic = .CMOVA, operand_count = 2, ops = {op_gpr16(dst), op_gpr16(src), {}, {}} }, 553) } inst_cmova_r16_m16 :: #force_inline proc "contextless" (dst: GPR16, src: Mem16) -> Instruction { return with_hint(Instruction{ mnemonic = .CMOVA, operand_count = 2, ops = {op_gpr16(dst), op_mem(src.mem, 2), {}, {}} }, 553) } inst_cmova_r32_r32 :: #force_inline proc "contextless" (dst: GPR32, src: GPR32) -> Instruction { return with_hint(Instruction{ mnemonic = .CMOVA, operand_count = 2, ops = {op_gpr32(dst), op_gpr32(src), {}, {}} }, 554) } inst_cmova_r32_m32 :: #force_inline proc "contextless" (dst: GPR32, src: Mem32) -> Instruction { return with_hint(Instruction{ mnemonic = .CMOVA, operand_count = 2, ops = {op_gpr32(dst), op_mem(src.mem, 4), {}, {}} }, 554) } inst_cmova_r64_r64 :: #force_inline proc "contextless" (dst: GPR64, src: GPR64) -> Instruction { return with_hint(Instruction{ mnemonic = .CMOVA, operand_count = 2, ops = {op_gpr64(dst), op_gpr64(src), {}, {}} }, 555) } inst_cmova_r64_m64 :: #force_inline proc "contextless" (dst: GPR64, src: Mem64) -> Instruction { return with_hint(Instruction{ mnemonic = .CMOVA, operand_count = 2, ops = {op_gpr64(dst), op_mem(src.mem, 8), {}, {}} }, 555) } -emit_cmova_r16_r16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR16, src: GPR16) { append(instructions, inst_cmova_r16_r16(dst, src)) } -emit_cmova_r16_m16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR16, src: Mem16) { append(instructions, inst_cmova_r16_m16(dst, src)) } -emit_cmova_r32_r32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: GPR32) { append(instructions, inst_cmova_r32_r32(dst, src)) } -emit_cmova_r32_m32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: Mem32) { append(instructions, inst_cmova_r32_m32(dst, src)) } -emit_cmova_r64_r64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: GPR64) { append(instructions, inst_cmova_r64_r64(dst, src)) } -emit_cmova_r64_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: Mem64) { append(instructions, inst_cmova_r64_m64(dst, src)) } +emit_cmova_r16_r16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR16, src: GPR16) { append_elem(instructions, inst_cmova_r16_r16(dst, src)) } +emit_cmova_r16_m16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR16, src: Mem16) { append_elem(instructions, inst_cmova_r16_m16(dst, src)) } +emit_cmova_r32_r32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: GPR32) { append_elem(instructions, inst_cmova_r32_r32(dst, src)) } +emit_cmova_r32_m32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: Mem32) { append_elem(instructions, inst_cmova_r32_m32(dst, src)) } +emit_cmova_r64_r64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: GPR64) { append_elem(instructions, inst_cmova_r64_r64(dst, src)) } +emit_cmova_r64_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: Mem64) { append_elem(instructions, inst_cmova_r64_m64(dst, src)) } inst_cmovae_r16_r16 :: #force_inline proc "contextless" (dst: GPR16, src: GPR16) -> Instruction { return with_hint(Instruction{ mnemonic = .CMOVAE, operand_count = 2, ops = {op_gpr16(dst), op_gpr16(src), {}, {}} }, 556) } inst_cmovae_r16_m16 :: #force_inline proc "contextless" (dst: GPR16, src: Mem16) -> Instruction { return with_hint(Instruction{ mnemonic = .CMOVAE, operand_count = 2, ops = {op_gpr16(dst), op_mem(src.mem, 2), {}, {}} }, 556) } inst_cmovae_r32_r32 :: #force_inline proc "contextless" (dst: GPR32, src: GPR32) -> Instruction { return with_hint(Instruction{ mnemonic = .CMOVAE, operand_count = 2, ops = {op_gpr32(dst), op_gpr32(src), {}, {}} }, 557) } inst_cmovae_r32_m32 :: #force_inline proc "contextless" (dst: GPR32, src: Mem32) -> Instruction { return with_hint(Instruction{ mnemonic = .CMOVAE, operand_count = 2, ops = {op_gpr32(dst), op_mem(src.mem, 4), {}, {}} }, 557) } inst_cmovae_r64_r64 :: #force_inline proc "contextless" (dst: GPR64, src: GPR64) -> Instruction { return with_hint(Instruction{ mnemonic = .CMOVAE, operand_count = 2, ops = {op_gpr64(dst), op_gpr64(src), {}, {}} }, 558) } inst_cmovae_r64_m64 :: #force_inline proc "contextless" (dst: GPR64, src: Mem64) -> Instruction { return with_hint(Instruction{ mnemonic = .CMOVAE, operand_count = 2, ops = {op_gpr64(dst), op_mem(src.mem, 8), {}, {}} }, 558) } -emit_cmovae_r16_r16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR16, src: GPR16) { append(instructions, inst_cmovae_r16_r16(dst, src)) } -emit_cmovae_r16_m16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR16, src: Mem16) { append(instructions, inst_cmovae_r16_m16(dst, src)) } -emit_cmovae_r32_r32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: GPR32) { append(instructions, inst_cmovae_r32_r32(dst, src)) } -emit_cmovae_r32_m32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: Mem32) { append(instructions, inst_cmovae_r32_m32(dst, src)) } -emit_cmovae_r64_r64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: GPR64) { append(instructions, inst_cmovae_r64_r64(dst, src)) } -emit_cmovae_r64_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: Mem64) { append(instructions, inst_cmovae_r64_m64(dst, src)) } +emit_cmovae_r16_r16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR16, src: GPR16) { append_elem(instructions, inst_cmovae_r16_r16(dst, src)) } +emit_cmovae_r16_m16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR16, src: Mem16) { append_elem(instructions, inst_cmovae_r16_m16(dst, src)) } +emit_cmovae_r32_r32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: GPR32) { append_elem(instructions, inst_cmovae_r32_r32(dst, src)) } +emit_cmovae_r32_m32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: Mem32) { append_elem(instructions, inst_cmovae_r32_m32(dst, src)) } +emit_cmovae_r64_r64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: GPR64) { append_elem(instructions, inst_cmovae_r64_r64(dst, src)) } +emit_cmovae_r64_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: Mem64) { append_elem(instructions, inst_cmovae_r64_m64(dst, src)) } inst_cmovb_r16_r16 :: #force_inline proc "contextless" (dst: GPR16, src: GPR16) -> Instruction { return with_hint(Instruction{ mnemonic = .CMOVB, operand_count = 2, ops = {op_gpr16(dst), op_gpr16(src), {}, {}} }, 559) } inst_cmovb_r16_m16 :: #force_inline proc "contextless" (dst: GPR16, src: Mem16) -> Instruction { return with_hint(Instruction{ mnemonic = .CMOVB, operand_count = 2, ops = {op_gpr16(dst), op_mem(src.mem, 2), {}, {}} }, 559) } inst_cmovb_r32_r32 :: #force_inline proc "contextless" (dst: GPR32, src: GPR32) -> Instruction { return with_hint(Instruction{ mnemonic = .CMOVB, operand_count = 2, ops = {op_gpr32(dst), op_gpr32(src), {}, {}} }, 560) } inst_cmovb_r32_m32 :: #force_inline proc "contextless" (dst: GPR32, src: Mem32) -> Instruction { return with_hint(Instruction{ mnemonic = .CMOVB, operand_count = 2, ops = {op_gpr32(dst), op_mem(src.mem, 4), {}, {}} }, 560) } inst_cmovb_r64_r64 :: #force_inline proc "contextless" (dst: GPR64, src: GPR64) -> Instruction { return with_hint(Instruction{ mnemonic = .CMOVB, operand_count = 2, ops = {op_gpr64(dst), op_gpr64(src), {}, {}} }, 561) } inst_cmovb_r64_m64 :: #force_inline proc "contextless" (dst: GPR64, src: Mem64) -> Instruction { return with_hint(Instruction{ mnemonic = .CMOVB, operand_count = 2, ops = {op_gpr64(dst), op_mem(src.mem, 8), {}, {}} }, 561) } -emit_cmovb_r16_r16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR16, src: GPR16) { append(instructions, inst_cmovb_r16_r16(dst, src)) } -emit_cmovb_r16_m16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR16, src: Mem16) { append(instructions, inst_cmovb_r16_m16(dst, src)) } -emit_cmovb_r32_r32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: GPR32) { append(instructions, inst_cmovb_r32_r32(dst, src)) } -emit_cmovb_r32_m32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: Mem32) { append(instructions, inst_cmovb_r32_m32(dst, src)) } -emit_cmovb_r64_r64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: GPR64) { append(instructions, inst_cmovb_r64_r64(dst, src)) } -emit_cmovb_r64_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: Mem64) { append(instructions, inst_cmovb_r64_m64(dst, src)) } +emit_cmovb_r16_r16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR16, src: GPR16) { append_elem(instructions, inst_cmovb_r16_r16(dst, src)) } +emit_cmovb_r16_m16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR16, src: Mem16) { append_elem(instructions, inst_cmovb_r16_m16(dst, src)) } +emit_cmovb_r32_r32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: GPR32) { append_elem(instructions, inst_cmovb_r32_r32(dst, src)) } +emit_cmovb_r32_m32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: Mem32) { append_elem(instructions, inst_cmovb_r32_m32(dst, src)) } +emit_cmovb_r64_r64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: GPR64) { append_elem(instructions, inst_cmovb_r64_r64(dst, src)) } +emit_cmovb_r64_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: Mem64) { append_elem(instructions, inst_cmovb_r64_m64(dst, src)) } inst_cmovbe_r16_r16 :: #force_inline proc "contextless" (dst: GPR16, src: GPR16) -> Instruction { return with_hint(Instruction{ mnemonic = .CMOVBE, operand_count = 2, ops = {op_gpr16(dst), op_gpr16(src), {}, {}} }, 562) } inst_cmovbe_r16_m16 :: #force_inline proc "contextless" (dst: GPR16, src: Mem16) -> Instruction { return with_hint(Instruction{ mnemonic = .CMOVBE, operand_count = 2, ops = {op_gpr16(dst), op_mem(src.mem, 2), {}, {}} }, 562) } inst_cmovbe_r32_r32 :: #force_inline proc "contextless" (dst: GPR32, src: GPR32) -> Instruction { return with_hint(Instruction{ mnemonic = .CMOVBE, operand_count = 2, ops = {op_gpr32(dst), op_gpr32(src), {}, {}} }, 563) } inst_cmovbe_r32_m32 :: #force_inline proc "contextless" (dst: GPR32, src: Mem32) -> Instruction { return with_hint(Instruction{ mnemonic = .CMOVBE, operand_count = 2, ops = {op_gpr32(dst), op_mem(src.mem, 4), {}, {}} }, 563) } inst_cmovbe_r64_r64 :: #force_inline proc "contextless" (dst: GPR64, src: GPR64) -> Instruction { return with_hint(Instruction{ mnemonic = .CMOVBE, operand_count = 2, ops = {op_gpr64(dst), op_gpr64(src), {}, {}} }, 564) } inst_cmovbe_r64_m64 :: #force_inline proc "contextless" (dst: GPR64, src: Mem64) -> Instruction { return with_hint(Instruction{ mnemonic = .CMOVBE, operand_count = 2, ops = {op_gpr64(dst), op_mem(src.mem, 8), {}, {}} }, 564) } -emit_cmovbe_r16_r16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR16, src: GPR16) { append(instructions, inst_cmovbe_r16_r16(dst, src)) } -emit_cmovbe_r16_m16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR16, src: Mem16) { append(instructions, inst_cmovbe_r16_m16(dst, src)) } -emit_cmovbe_r32_r32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: GPR32) { append(instructions, inst_cmovbe_r32_r32(dst, src)) } -emit_cmovbe_r32_m32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: Mem32) { append(instructions, inst_cmovbe_r32_m32(dst, src)) } -emit_cmovbe_r64_r64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: GPR64) { append(instructions, inst_cmovbe_r64_r64(dst, src)) } -emit_cmovbe_r64_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: Mem64) { append(instructions, inst_cmovbe_r64_m64(dst, src)) } +emit_cmovbe_r16_r16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR16, src: GPR16) { append_elem(instructions, inst_cmovbe_r16_r16(dst, src)) } +emit_cmovbe_r16_m16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR16, src: Mem16) { append_elem(instructions, inst_cmovbe_r16_m16(dst, src)) } +emit_cmovbe_r32_r32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: GPR32) { append_elem(instructions, inst_cmovbe_r32_r32(dst, src)) } +emit_cmovbe_r32_m32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: Mem32) { append_elem(instructions, inst_cmovbe_r32_m32(dst, src)) } +emit_cmovbe_r64_r64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: GPR64) { append_elem(instructions, inst_cmovbe_r64_r64(dst, src)) } +emit_cmovbe_r64_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: Mem64) { append_elem(instructions, inst_cmovbe_r64_m64(dst, src)) } inst_cmovc_r16_r16 :: #force_inline proc "contextless" (dst: GPR16, src: GPR16) -> Instruction { return with_hint(Instruction{ mnemonic = .CMOVC, operand_count = 2, ops = {op_gpr16(dst), op_gpr16(src), {}, {}} }, 565) } inst_cmovc_r16_m16 :: #force_inline proc "contextless" (dst: GPR16, src: Mem16) -> Instruction { return with_hint(Instruction{ mnemonic = .CMOVC, operand_count = 2, ops = {op_gpr16(dst), op_mem(src.mem, 2), {}, {}} }, 565) } inst_cmovc_r32_r32 :: #force_inline proc "contextless" (dst: GPR32, src: GPR32) -> Instruction { return with_hint(Instruction{ mnemonic = .CMOVC, operand_count = 2, ops = {op_gpr32(dst), op_gpr32(src), {}, {}} }, 566) } inst_cmovc_r32_m32 :: #force_inline proc "contextless" (dst: GPR32, src: Mem32) -> Instruction { return with_hint(Instruction{ mnemonic = .CMOVC, operand_count = 2, ops = {op_gpr32(dst), op_mem(src.mem, 4), {}, {}} }, 566) } inst_cmovc_r64_r64 :: #force_inline proc "contextless" (dst: GPR64, src: GPR64) -> Instruction { return with_hint(Instruction{ mnemonic = .CMOVC, operand_count = 2, ops = {op_gpr64(dst), op_gpr64(src), {}, {}} }, 567) } inst_cmovc_r64_m64 :: #force_inline proc "contextless" (dst: GPR64, src: Mem64) -> Instruction { return with_hint(Instruction{ mnemonic = .CMOVC, operand_count = 2, ops = {op_gpr64(dst), op_mem(src.mem, 8), {}, {}} }, 567) } -emit_cmovc_r16_r16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR16, src: GPR16) { append(instructions, inst_cmovc_r16_r16(dst, src)) } -emit_cmovc_r16_m16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR16, src: Mem16) { append(instructions, inst_cmovc_r16_m16(dst, src)) } -emit_cmovc_r32_r32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: GPR32) { append(instructions, inst_cmovc_r32_r32(dst, src)) } -emit_cmovc_r32_m32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: Mem32) { append(instructions, inst_cmovc_r32_m32(dst, src)) } -emit_cmovc_r64_r64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: GPR64) { append(instructions, inst_cmovc_r64_r64(dst, src)) } -emit_cmovc_r64_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: Mem64) { append(instructions, inst_cmovc_r64_m64(dst, src)) } +emit_cmovc_r16_r16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR16, src: GPR16) { append_elem(instructions, inst_cmovc_r16_r16(dst, src)) } +emit_cmovc_r16_m16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR16, src: Mem16) { append_elem(instructions, inst_cmovc_r16_m16(dst, src)) } +emit_cmovc_r32_r32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: GPR32) { append_elem(instructions, inst_cmovc_r32_r32(dst, src)) } +emit_cmovc_r32_m32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: Mem32) { append_elem(instructions, inst_cmovc_r32_m32(dst, src)) } +emit_cmovc_r64_r64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: GPR64) { append_elem(instructions, inst_cmovc_r64_r64(dst, src)) } +emit_cmovc_r64_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: Mem64) { append_elem(instructions, inst_cmovc_r64_m64(dst, src)) } inst_cmove_r16_r16 :: #force_inline proc "contextless" (dst: GPR16, src: GPR16) -> Instruction { return with_hint(Instruction{ mnemonic = .CMOVE, operand_count = 2, ops = {op_gpr16(dst), op_gpr16(src), {}, {}} }, 568) } inst_cmove_r16_m16 :: #force_inline proc "contextless" (dst: GPR16, src: Mem16) -> Instruction { return with_hint(Instruction{ mnemonic = .CMOVE, operand_count = 2, ops = {op_gpr16(dst), op_mem(src.mem, 2), {}, {}} }, 568) } inst_cmove_r32_r32 :: #force_inline proc "contextless" (dst: GPR32, src: GPR32) -> Instruction { return with_hint(Instruction{ mnemonic = .CMOVE, operand_count = 2, ops = {op_gpr32(dst), op_gpr32(src), {}, {}} }, 569) } inst_cmove_r32_m32 :: #force_inline proc "contextless" (dst: GPR32, src: Mem32) -> Instruction { return with_hint(Instruction{ mnemonic = .CMOVE, operand_count = 2, ops = {op_gpr32(dst), op_mem(src.mem, 4), {}, {}} }, 569) } inst_cmove_r64_r64 :: #force_inline proc "contextless" (dst: GPR64, src: GPR64) -> Instruction { return with_hint(Instruction{ mnemonic = .CMOVE, operand_count = 2, ops = {op_gpr64(dst), op_gpr64(src), {}, {}} }, 570) } inst_cmove_r64_m64 :: #force_inline proc "contextless" (dst: GPR64, src: Mem64) -> Instruction { return with_hint(Instruction{ mnemonic = .CMOVE, operand_count = 2, ops = {op_gpr64(dst), op_mem(src.mem, 8), {}, {}} }, 570) } -emit_cmove_r16_r16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR16, src: GPR16) { append(instructions, inst_cmove_r16_r16(dst, src)) } -emit_cmove_r16_m16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR16, src: Mem16) { append(instructions, inst_cmove_r16_m16(dst, src)) } -emit_cmove_r32_r32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: GPR32) { append(instructions, inst_cmove_r32_r32(dst, src)) } -emit_cmove_r32_m32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: Mem32) { append(instructions, inst_cmove_r32_m32(dst, src)) } -emit_cmove_r64_r64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: GPR64) { append(instructions, inst_cmove_r64_r64(dst, src)) } -emit_cmove_r64_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: Mem64) { append(instructions, inst_cmove_r64_m64(dst, src)) } +emit_cmove_r16_r16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR16, src: GPR16) { append_elem(instructions, inst_cmove_r16_r16(dst, src)) } +emit_cmove_r16_m16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR16, src: Mem16) { append_elem(instructions, inst_cmove_r16_m16(dst, src)) } +emit_cmove_r32_r32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: GPR32) { append_elem(instructions, inst_cmove_r32_r32(dst, src)) } +emit_cmove_r32_m32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: Mem32) { append_elem(instructions, inst_cmove_r32_m32(dst, src)) } +emit_cmove_r64_r64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: GPR64) { append_elem(instructions, inst_cmove_r64_r64(dst, src)) } +emit_cmove_r64_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: Mem64) { append_elem(instructions, inst_cmove_r64_m64(dst, src)) } inst_cmovg_r16_r16 :: #force_inline proc "contextless" (dst: GPR16, src: GPR16) -> Instruction { return with_hint(Instruction{ mnemonic = .CMOVG, operand_count = 2, ops = {op_gpr16(dst), op_gpr16(src), {}, {}} }, 571) } inst_cmovg_r16_m16 :: #force_inline proc "contextless" (dst: GPR16, src: Mem16) -> Instruction { return with_hint(Instruction{ mnemonic = .CMOVG, operand_count = 2, ops = {op_gpr16(dst), op_mem(src.mem, 2), {}, {}} }, 571) } inst_cmovg_r32_r32 :: #force_inline proc "contextless" (dst: GPR32, src: GPR32) -> Instruction { return with_hint(Instruction{ mnemonic = .CMOVG, operand_count = 2, ops = {op_gpr32(dst), op_gpr32(src), {}, {}} }, 572) } inst_cmovg_r32_m32 :: #force_inline proc "contextless" (dst: GPR32, src: Mem32) -> Instruction { return with_hint(Instruction{ mnemonic = .CMOVG, operand_count = 2, ops = {op_gpr32(dst), op_mem(src.mem, 4), {}, {}} }, 572) } inst_cmovg_r64_r64 :: #force_inline proc "contextless" (dst: GPR64, src: GPR64) -> Instruction { return with_hint(Instruction{ mnemonic = .CMOVG, operand_count = 2, ops = {op_gpr64(dst), op_gpr64(src), {}, {}} }, 573) } inst_cmovg_r64_m64 :: #force_inline proc "contextless" (dst: GPR64, src: Mem64) -> Instruction { return with_hint(Instruction{ mnemonic = .CMOVG, operand_count = 2, ops = {op_gpr64(dst), op_mem(src.mem, 8), {}, {}} }, 573) } -emit_cmovg_r16_r16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR16, src: GPR16) { append(instructions, inst_cmovg_r16_r16(dst, src)) } -emit_cmovg_r16_m16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR16, src: Mem16) { append(instructions, inst_cmovg_r16_m16(dst, src)) } -emit_cmovg_r32_r32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: GPR32) { append(instructions, inst_cmovg_r32_r32(dst, src)) } -emit_cmovg_r32_m32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: Mem32) { append(instructions, inst_cmovg_r32_m32(dst, src)) } -emit_cmovg_r64_r64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: GPR64) { append(instructions, inst_cmovg_r64_r64(dst, src)) } -emit_cmovg_r64_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: Mem64) { append(instructions, inst_cmovg_r64_m64(dst, src)) } +emit_cmovg_r16_r16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR16, src: GPR16) { append_elem(instructions, inst_cmovg_r16_r16(dst, src)) } +emit_cmovg_r16_m16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR16, src: Mem16) { append_elem(instructions, inst_cmovg_r16_m16(dst, src)) } +emit_cmovg_r32_r32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: GPR32) { append_elem(instructions, inst_cmovg_r32_r32(dst, src)) } +emit_cmovg_r32_m32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: Mem32) { append_elem(instructions, inst_cmovg_r32_m32(dst, src)) } +emit_cmovg_r64_r64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: GPR64) { append_elem(instructions, inst_cmovg_r64_r64(dst, src)) } +emit_cmovg_r64_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: Mem64) { append_elem(instructions, inst_cmovg_r64_m64(dst, src)) } inst_cmovge_r16_r16 :: #force_inline proc "contextless" (dst: GPR16, src: GPR16) -> Instruction { return with_hint(Instruction{ mnemonic = .CMOVGE, operand_count = 2, ops = {op_gpr16(dst), op_gpr16(src), {}, {}} }, 574) } inst_cmovge_r16_m16 :: #force_inline proc "contextless" (dst: GPR16, src: Mem16) -> Instruction { return with_hint(Instruction{ mnemonic = .CMOVGE, operand_count = 2, ops = {op_gpr16(dst), op_mem(src.mem, 2), {}, {}} }, 574) } inst_cmovge_r32_r32 :: #force_inline proc "contextless" (dst: GPR32, src: GPR32) -> Instruction { return with_hint(Instruction{ mnemonic = .CMOVGE, operand_count = 2, ops = {op_gpr32(dst), op_gpr32(src), {}, {}} }, 575) } inst_cmovge_r32_m32 :: #force_inline proc "contextless" (dst: GPR32, src: Mem32) -> Instruction { return with_hint(Instruction{ mnemonic = .CMOVGE, operand_count = 2, ops = {op_gpr32(dst), op_mem(src.mem, 4), {}, {}} }, 575) } inst_cmovge_r64_r64 :: #force_inline proc "contextless" (dst: GPR64, src: GPR64) -> Instruction { return with_hint(Instruction{ mnemonic = .CMOVGE, operand_count = 2, ops = {op_gpr64(dst), op_gpr64(src), {}, {}} }, 576) } inst_cmovge_r64_m64 :: #force_inline proc "contextless" (dst: GPR64, src: Mem64) -> Instruction { return with_hint(Instruction{ mnemonic = .CMOVGE, operand_count = 2, ops = {op_gpr64(dst), op_mem(src.mem, 8), {}, {}} }, 576) } -emit_cmovge_r16_r16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR16, src: GPR16) { append(instructions, inst_cmovge_r16_r16(dst, src)) } -emit_cmovge_r16_m16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR16, src: Mem16) { append(instructions, inst_cmovge_r16_m16(dst, src)) } -emit_cmovge_r32_r32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: GPR32) { append(instructions, inst_cmovge_r32_r32(dst, src)) } -emit_cmovge_r32_m32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: Mem32) { append(instructions, inst_cmovge_r32_m32(dst, src)) } -emit_cmovge_r64_r64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: GPR64) { append(instructions, inst_cmovge_r64_r64(dst, src)) } -emit_cmovge_r64_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: Mem64) { append(instructions, inst_cmovge_r64_m64(dst, src)) } +emit_cmovge_r16_r16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR16, src: GPR16) { append_elem(instructions, inst_cmovge_r16_r16(dst, src)) } +emit_cmovge_r16_m16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR16, src: Mem16) { append_elem(instructions, inst_cmovge_r16_m16(dst, src)) } +emit_cmovge_r32_r32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: GPR32) { append_elem(instructions, inst_cmovge_r32_r32(dst, src)) } +emit_cmovge_r32_m32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: Mem32) { append_elem(instructions, inst_cmovge_r32_m32(dst, src)) } +emit_cmovge_r64_r64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: GPR64) { append_elem(instructions, inst_cmovge_r64_r64(dst, src)) } +emit_cmovge_r64_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: Mem64) { append_elem(instructions, inst_cmovge_r64_m64(dst, src)) } inst_cmovl_r16_r16 :: #force_inline proc "contextless" (dst: GPR16, src: GPR16) -> Instruction { return with_hint(Instruction{ mnemonic = .CMOVL, operand_count = 2, ops = {op_gpr16(dst), op_gpr16(src), {}, {}} }, 577) } inst_cmovl_r16_m16 :: #force_inline proc "contextless" (dst: GPR16, src: Mem16) -> Instruction { return with_hint(Instruction{ mnemonic = .CMOVL, operand_count = 2, ops = {op_gpr16(dst), op_mem(src.mem, 2), {}, {}} }, 577) } inst_cmovl_r32_r32 :: #force_inline proc "contextless" (dst: GPR32, src: GPR32) -> Instruction { return with_hint(Instruction{ mnemonic = .CMOVL, operand_count = 2, ops = {op_gpr32(dst), op_gpr32(src), {}, {}} }, 578) } inst_cmovl_r32_m32 :: #force_inline proc "contextless" (dst: GPR32, src: Mem32) -> Instruction { return with_hint(Instruction{ mnemonic = .CMOVL, operand_count = 2, ops = {op_gpr32(dst), op_mem(src.mem, 4), {}, {}} }, 578) } inst_cmovl_r64_r64 :: #force_inline proc "contextless" (dst: GPR64, src: GPR64) -> Instruction { return with_hint(Instruction{ mnemonic = .CMOVL, operand_count = 2, ops = {op_gpr64(dst), op_gpr64(src), {}, {}} }, 579) } inst_cmovl_r64_m64 :: #force_inline proc "contextless" (dst: GPR64, src: Mem64) -> Instruction { return with_hint(Instruction{ mnemonic = .CMOVL, operand_count = 2, ops = {op_gpr64(dst), op_mem(src.mem, 8), {}, {}} }, 579) } -emit_cmovl_r16_r16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR16, src: GPR16) { append(instructions, inst_cmovl_r16_r16(dst, src)) } -emit_cmovl_r16_m16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR16, src: Mem16) { append(instructions, inst_cmovl_r16_m16(dst, src)) } -emit_cmovl_r32_r32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: GPR32) { append(instructions, inst_cmovl_r32_r32(dst, src)) } -emit_cmovl_r32_m32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: Mem32) { append(instructions, inst_cmovl_r32_m32(dst, src)) } -emit_cmovl_r64_r64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: GPR64) { append(instructions, inst_cmovl_r64_r64(dst, src)) } -emit_cmovl_r64_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: Mem64) { append(instructions, inst_cmovl_r64_m64(dst, src)) } +emit_cmovl_r16_r16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR16, src: GPR16) { append_elem(instructions, inst_cmovl_r16_r16(dst, src)) } +emit_cmovl_r16_m16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR16, src: Mem16) { append_elem(instructions, inst_cmovl_r16_m16(dst, src)) } +emit_cmovl_r32_r32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: GPR32) { append_elem(instructions, inst_cmovl_r32_r32(dst, src)) } +emit_cmovl_r32_m32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: Mem32) { append_elem(instructions, inst_cmovl_r32_m32(dst, src)) } +emit_cmovl_r64_r64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: GPR64) { append_elem(instructions, inst_cmovl_r64_r64(dst, src)) } +emit_cmovl_r64_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: Mem64) { append_elem(instructions, inst_cmovl_r64_m64(dst, src)) } inst_cmovle_r16_r16 :: #force_inline proc "contextless" (dst: GPR16, src: GPR16) -> Instruction { return with_hint(Instruction{ mnemonic = .CMOVLE, operand_count = 2, ops = {op_gpr16(dst), op_gpr16(src), {}, {}} }, 580) } inst_cmovle_r16_m16 :: #force_inline proc "contextless" (dst: GPR16, src: Mem16) -> Instruction { return with_hint(Instruction{ mnemonic = .CMOVLE, operand_count = 2, ops = {op_gpr16(dst), op_mem(src.mem, 2), {}, {}} }, 580) } inst_cmovle_r32_r32 :: #force_inline proc "contextless" (dst: GPR32, src: GPR32) -> Instruction { return with_hint(Instruction{ mnemonic = .CMOVLE, operand_count = 2, ops = {op_gpr32(dst), op_gpr32(src), {}, {}} }, 581) } inst_cmovle_r32_m32 :: #force_inline proc "contextless" (dst: GPR32, src: Mem32) -> Instruction { return with_hint(Instruction{ mnemonic = .CMOVLE, operand_count = 2, ops = {op_gpr32(dst), op_mem(src.mem, 4), {}, {}} }, 581) } inst_cmovle_r64_r64 :: #force_inline proc "contextless" (dst: GPR64, src: GPR64) -> Instruction { return with_hint(Instruction{ mnemonic = .CMOVLE, operand_count = 2, ops = {op_gpr64(dst), op_gpr64(src), {}, {}} }, 582) } inst_cmovle_r64_m64 :: #force_inline proc "contextless" (dst: GPR64, src: Mem64) -> Instruction { return with_hint(Instruction{ mnemonic = .CMOVLE, operand_count = 2, ops = {op_gpr64(dst), op_mem(src.mem, 8), {}, {}} }, 582) } -emit_cmovle_r16_r16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR16, src: GPR16) { append(instructions, inst_cmovle_r16_r16(dst, src)) } -emit_cmovle_r16_m16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR16, src: Mem16) { append(instructions, inst_cmovle_r16_m16(dst, src)) } -emit_cmovle_r32_r32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: GPR32) { append(instructions, inst_cmovle_r32_r32(dst, src)) } -emit_cmovle_r32_m32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: Mem32) { append(instructions, inst_cmovle_r32_m32(dst, src)) } -emit_cmovle_r64_r64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: GPR64) { append(instructions, inst_cmovle_r64_r64(dst, src)) } -emit_cmovle_r64_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: Mem64) { append(instructions, inst_cmovle_r64_m64(dst, src)) } +emit_cmovle_r16_r16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR16, src: GPR16) { append_elem(instructions, inst_cmovle_r16_r16(dst, src)) } +emit_cmovle_r16_m16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR16, src: Mem16) { append_elem(instructions, inst_cmovle_r16_m16(dst, src)) } +emit_cmovle_r32_r32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: GPR32) { append_elem(instructions, inst_cmovle_r32_r32(dst, src)) } +emit_cmovle_r32_m32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: Mem32) { append_elem(instructions, inst_cmovle_r32_m32(dst, src)) } +emit_cmovle_r64_r64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: GPR64) { append_elem(instructions, inst_cmovle_r64_r64(dst, src)) } +emit_cmovle_r64_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: Mem64) { append_elem(instructions, inst_cmovle_r64_m64(dst, src)) } inst_cmovna_r16_r16 :: #force_inline proc "contextless" (dst: GPR16, src: GPR16) -> Instruction { return with_hint(Instruction{ mnemonic = .CMOVNA, operand_count = 2, ops = {op_gpr16(dst), op_gpr16(src), {}, {}} }, 583) } inst_cmovna_r16_m16 :: #force_inline proc "contextless" (dst: GPR16, src: Mem16) -> Instruction { return with_hint(Instruction{ mnemonic = .CMOVNA, operand_count = 2, ops = {op_gpr16(dst), op_mem(src.mem, 2), {}, {}} }, 583) } inst_cmovna_r32_r32 :: #force_inline proc "contextless" (dst: GPR32, src: GPR32) -> Instruction { return with_hint(Instruction{ mnemonic = .CMOVNA, operand_count = 2, ops = {op_gpr32(dst), op_gpr32(src), {}, {}} }, 584) } inst_cmovna_r32_m32 :: #force_inline proc "contextless" (dst: GPR32, src: Mem32) -> Instruction { return with_hint(Instruction{ mnemonic = .CMOVNA, operand_count = 2, ops = {op_gpr32(dst), op_mem(src.mem, 4), {}, {}} }, 584) } inst_cmovna_r64_r64 :: #force_inline proc "contextless" (dst: GPR64, src: GPR64) -> Instruction { return with_hint(Instruction{ mnemonic = .CMOVNA, operand_count = 2, ops = {op_gpr64(dst), op_gpr64(src), {}, {}} }, 585) } inst_cmovna_r64_m64 :: #force_inline proc "contextless" (dst: GPR64, src: Mem64) -> Instruction { return with_hint(Instruction{ mnemonic = .CMOVNA, operand_count = 2, ops = {op_gpr64(dst), op_mem(src.mem, 8), {}, {}} }, 585) } -emit_cmovna_r16_r16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR16, src: GPR16) { append(instructions, inst_cmovna_r16_r16(dst, src)) } -emit_cmovna_r16_m16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR16, src: Mem16) { append(instructions, inst_cmovna_r16_m16(dst, src)) } -emit_cmovna_r32_r32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: GPR32) { append(instructions, inst_cmovna_r32_r32(dst, src)) } -emit_cmovna_r32_m32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: Mem32) { append(instructions, inst_cmovna_r32_m32(dst, src)) } -emit_cmovna_r64_r64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: GPR64) { append(instructions, inst_cmovna_r64_r64(dst, src)) } -emit_cmovna_r64_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: Mem64) { append(instructions, inst_cmovna_r64_m64(dst, src)) } +emit_cmovna_r16_r16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR16, src: GPR16) { append_elem(instructions, inst_cmovna_r16_r16(dst, src)) } +emit_cmovna_r16_m16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR16, src: Mem16) { append_elem(instructions, inst_cmovna_r16_m16(dst, src)) } +emit_cmovna_r32_r32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: GPR32) { append_elem(instructions, inst_cmovna_r32_r32(dst, src)) } +emit_cmovna_r32_m32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: Mem32) { append_elem(instructions, inst_cmovna_r32_m32(dst, src)) } +emit_cmovna_r64_r64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: GPR64) { append_elem(instructions, inst_cmovna_r64_r64(dst, src)) } +emit_cmovna_r64_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: Mem64) { append_elem(instructions, inst_cmovna_r64_m64(dst, src)) } inst_cmovnae_r16_r16 :: #force_inline proc "contextless" (dst: GPR16, src: GPR16) -> Instruction { return with_hint(Instruction{ mnemonic = .CMOVNAE, operand_count = 2, ops = {op_gpr16(dst), op_gpr16(src), {}, {}} }, 586) } inst_cmovnae_r16_m16 :: #force_inline proc "contextless" (dst: GPR16, src: Mem16) -> Instruction { return with_hint(Instruction{ mnemonic = .CMOVNAE, operand_count = 2, ops = {op_gpr16(dst), op_mem(src.mem, 2), {}, {}} }, 586) } inst_cmovnae_r32_r32 :: #force_inline proc "contextless" (dst: GPR32, src: GPR32) -> Instruction { return with_hint(Instruction{ mnemonic = .CMOVNAE, operand_count = 2, ops = {op_gpr32(dst), op_gpr32(src), {}, {}} }, 587) } inst_cmovnae_r32_m32 :: #force_inline proc "contextless" (dst: GPR32, src: Mem32) -> Instruction { return with_hint(Instruction{ mnemonic = .CMOVNAE, operand_count = 2, ops = {op_gpr32(dst), op_mem(src.mem, 4), {}, {}} }, 587) } inst_cmovnae_r64_r64 :: #force_inline proc "contextless" (dst: GPR64, src: GPR64) -> Instruction { return with_hint(Instruction{ mnemonic = .CMOVNAE, operand_count = 2, ops = {op_gpr64(dst), op_gpr64(src), {}, {}} }, 588) } inst_cmovnae_r64_m64 :: #force_inline proc "contextless" (dst: GPR64, src: Mem64) -> Instruction { return with_hint(Instruction{ mnemonic = .CMOVNAE, operand_count = 2, ops = {op_gpr64(dst), op_mem(src.mem, 8), {}, {}} }, 588) } -emit_cmovnae_r16_r16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR16, src: GPR16) { append(instructions, inst_cmovnae_r16_r16(dst, src)) } -emit_cmovnae_r16_m16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR16, src: Mem16) { append(instructions, inst_cmovnae_r16_m16(dst, src)) } -emit_cmovnae_r32_r32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: GPR32) { append(instructions, inst_cmovnae_r32_r32(dst, src)) } -emit_cmovnae_r32_m32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: Mem32) { append(instructions, inst_cmovnae_r32_m32(dst, src)) } -emit_cmovnae_r64_r64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: GPR64) { append(instructions, inst_cmovnae_r64_r64(dst, src)) } -emit_cmovnae_r64_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: Mem64) { append(instructions, inst_cmovnae_r64_m64(dst, src)) } +emit_cmovnae_r16_r16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR16, src: GPR16) { append_elem(instructions, inst_cmovnae_r16_r16(dst, src)) } +emit_cmovnae_r16_m16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR16, src: Mem16) { append_elem(instructions, inst_cmovnae_r16_m16(dst, src)) } +emit_cmovnae_r32_r32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: GPR32) { append_elem(instructions, inst_cmovnae_r32_r32(dst, src)) } +emit_cmovnae_r32_m32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: Mem32) { append_elem(instructions, inst_cmovnae_r32_m32(dst, src)) } +emit_cmovnae_r64_r64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: GPR64) { append_elem(instructions, inst_cmovnae_r64_r64(dst, src)) } +emit_cmovnae_r64_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: Mem64) { append_elem(instructions, inst_cmovnae_r64_m64(dst, src)) } inst_cmovnb_r16_r16 :: #force_inline proc "contextless" (dst: GPR16, src: GPR16) -> Instruction { return with_hint(Instruction{ mnemonic = .CMOVNB, operand_count = 2, ops = {op_gpr16(dst), op_gpr16(src), {}, {}} }, 589) } inst_cmovnb_r16_m16 :: #force_inline proc "contextless" (dst: GPR16, src: Mem16) -> Instruction { return with_hint(Instruction{ mnemonic = .CMOVNB, operand_count = 2, ops = {op_gpr16(dst), op_mem(src.mem, 2), {}, {}} }, 589) } inst_cmovnb_r32_r32 :: #force_inline proc "contextless" (dst: GPR32, src: GPR32) -> Instruction { return with_hint(Instruction{ mnemonic = .CMOVNB, operand_count = 2, ops = {op_gpr32(dst), op_gpr32(src), {}, {}} }, 590) } inst_cmovnb_r32_m32 :: #force_inline proc "contextless" (dst: GPR32, src: Mem32) -> Instruction { return with_hint(Instruction{ mnemonic = .CMOVNB, operand_count = 2, ops = {op_gpr32(dst), op_mem(src.mem, 4), {}, {}} }, 590) } inst_cmovnb_r64_r64 :: #force_inline proc "contextless" (dst: GPR64, src: GPR64) -> Instruction { return with_hint(Instruction{ mnemonic = .CMOVNB, operand_count = 2, ops = {op_gpr64(dst), op_gpr64(src), {}, {}} }, 591) } inst_cmovnb_r64_m64 :: #force_inline proc "contextless" (dst: GPR64, src: Mem64) -> Instruction { return with_hint(Instruction{ mnemonic = .CMOVNB, operand_count = 2, ops = {op_gpr64(dst), op_mem(src.mem, 8), {}, {}} }, 591) } -emit_cmovnb_r16_r16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR16, src: GPR16) { append(instructions, inst_cmovnb_r16_r16(dst, src)) } -emit_cmovnb_r16_m16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR16, src: Mem16) { append(instructions, inst_cmovnb_r16_m16(dst, src)) } -emit_cmovnb_r32_r32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: GPR32) { append(instructions, inst_cmovnb_r32_r32(dst, src)) } -emit_cmovnb_r32_m32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: Mem32) { append(instructions, inst_cmovnb_r32_m32(dst, src)) } -emit_cmovnb_r64_r64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: GPR64) { append(instructions, inst_cmovnb_r64_r64(dst, src)) } -emit_cmovnb_r64_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: Mem64) { append(instructions, inst_cmovnb_r64_m64(dst, src)) } +emit_cmovnb_r16_r16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR16, src: GPR16) { append_elem(instructions, inst_cmovnb_r16_r16(dst, src)) } +emit_cmovnb_r16_m16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR16, src: Mem16) { append_elem(instructions, inst_cmovnb_r16_m16(dst, src)) } +emit_cmovnb_r32_r32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: GPR32) { append_elem(instructions, inst_cmovnb_r32_r32(dst, src)) } +emit_cmovnb_r32_m32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: Mem32) { append_elem(instructions, inst_cmovnb_r32_m32(dst, src)) } +emit_cmovnb_r64_r64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: GPR64) { append_elem(instructions, inst_cmovnb_r64_r64(dst, src)) } +emit_cmovnb_r64_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: Mem64) { append_elem(instructions, inst_cmovnb_r64_m64(dst, src)) } inst_cmovnbe_r16_r16 :: #force_inline proc "contextless" (dst: GPR16, src: GPR16) -> Instruction { return with_hint(Instruction{ mnemonic = .CMOVNBE, operand_count = 2, ops = {op_gpr16(dst), op_gpr16(src), {}, {}} }, 592) } inst_cmovnbe_r16_m16 :: #force_inline proc "contextless" (dst: GPR16, src: Mem16) -> Instruction { return with_hint(Instruction{ mnemonic = .CMOVNBE, operand_count = 2, ops = {op_gpr16(dst), op_mem(src.mem, 2), {}, {}} }, 592) } inst_cmovnbe_r32_r32 :: #force_inline proc "contextless" (dst: GPR32, src: GPR32) -> Instruction { return with_hint(Instruction{ mnemonic = .CMOVNBE, operand_count = 2, ops = {op_gpr32(dst), op_gpr32(src), {}, {}} }, 593) } inst_cmovnbe_r32_m32 :: #force_inline proc "contextless" (dst: GPR32, src: Mem32) -> Instruction { return with_hint(Instruction{ mnemonic = .CMOVNBE, operand_count = 2, ops = {op_gpr32(dst), op_mem(src.mem, 4), {}, {}} }, 593) } inst_cmovnbe_r64_r64 :: #force_inline proc "contextless" (dst: GPR64, src: GPR64) -> Instruction { return with_hint(Instruction{ mnemonic = .CMOVNBE, operand_count = 2, ops = {op_gpr64(dst), op_gpr64(src), {}, {}} }, 594) } inst_cmovnbe_r64_m64 :: #force_inline proc "contextless" (dst: GPR64, src: Mem64) -> Instruction { return with_hint(Instruction{ mnemonic = .CMOVNBE, operand_count = 2, ops = {op_gpr64(dst), op_mem(src.mem, 8), {}, {}} }, 594) } -emit_cmovnbe_r16_r16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR16, src: GPR16) { append(instructions, inst_cmovnbe_r16_r16(dst, src)) } -emit_cmovnbe_r16_m16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR16, src: Mem16) { append(instructions, inst_cmovnbe_r16_m16(dst, src)) } -emit_cmovnbe_r32_r32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: GPR32) { append(instructions, inst_cmovnbe_r32_r32(dst, src)) } -emit_cmovnbe_r32_m32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: Mem32) { append(instructions, inst_cmovnbe_r32_m32(dst, src)) } -emit_cmovnbe_r64_r64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: GPR64) { append(instructions, inst_cmovnbe_r64_r64(dst, src)) } -emit_cmovnbe_r64_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: Mem64) { append(instructions, inst_cmovnbe_r64_m64(dst, src)) } +emit_cmovnbe_r16_r16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR16, src: GPR16) { append_elem(instructions, inst_cmovnbe_r16_r16(dst, src)) } +emit_cmovnbe_r16_m16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR16, src: Mem16) { append_elem(instructions, inst_cmovnbe_r16_m16(dst, src)) } +emit_cmovnbe_r32_r32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: GPR32) { append_elem(instructions, inst_cmovnbe_r32_r32(dst, src)) } +emit_cmovnbe_r32_m32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: Mem32) { append_elem(instructions, inst_cmovnbe_r32_m32(dst, src)) } +emit_cmovnbe_r64_r64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: GPR64) { append_elem(instructions, inst_cmovnbe_r64_r64(dst, src)) } +emit_cmovnbe_r64_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: Mem64) { append_elem(instructions, inst_cmovnbe_r64_m64(dst, src)) } inst_cmovnc_r16_r16 :: #force_inline proc "contextless" (dst: GPR16, src: GPR16) -> Instruction { return with_hint(Instruction{ mnemonic = .CMOVNC, operand_count = 2, ops = {op_gpr16(dst), op_gpr16(src), {}, {}} }, 595) } inst_cmovnc_r16_m16 :: #force_inline proc "contextless" (dst: GPR16, src: Mem16) -> Instruction { return with_hint(Instruction{ mnemonic = .CMOVNC, operand_count = 2, ops = {op_gpr16(dst), op_mem(src.mem, 2), {}, {}} }, 595) } inst_cmovnc_r32_r32 :: #force_inline proc "contextless" (dst: GPR32, src: GPR32) -> Instruction { return with_hint(Instruction{ mnemonic = .CMOVNC, operand_count = 2, ops = {op_gpr32(dst), op_gpr32(src), {}, {}} }, 596) } inst_cmovnc_r32_m32 :: #force_inline proc "contextless" (dst: GPR32, src: Mem32) -> Instruction { return with_hint(Instruction{ mnemonic = .CMOVNC, operand_count = 2, ops = {op_gpr32(dst), op_mem(src.mem, 4), {}, {}} }, 596) } inst_cmovnc_r64_r64 :: #force_inline proc "contextless" (dst: GPR64, src: GPR64) -> Instruction { return with_hint(Instruction{ mnemonic = .CMOVNC, operand_count = 2, ops = {op_gpr64(dst), op_gpr64(src), {}, {}} }, 597) } inst_cmovnc_r64_m64 :: #force_inline proc "contextless" (dst: GPR64, src: Mem64) -> Instruction { return with_hint(Instruction{ mnemonic = .CMOVNC, operand_count = 2, ops = {op_gpr64(dst), op_mem(src.mem, 8), {}, {}} }, 597) } -emit_cmovnc_r16_r16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR16, src: GPR16) { append(instructions, inst_cmovnc_r16_r16(dst, src)) } -emit_cmovnc_r16_m16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR16, src: Mem16) { append(instructions, inst_cmovnc_r16_m16(dst, src)) } -emit_cmovnc_r32_r32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: GPR32) { append(instructions, inst_cmovnc_r32_r32(dst, src)) } -emit_cmovnc_r32_m32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: Mem32) { append(instructions, inst_cmovnc_r32_m32(dst, src)) } -emit_cmovnc_r64_r64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: GPR64) { append(instructions, inst_cmovnc_r64_r64(dst, src)) } -emit_cmovnc_r64_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: Mem64) { append(instructions, inst_cmovnc_r64_m64(dst, src)) } +emit_cmovnc_r16_r16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR16, src: GPR16) { append_elem(instructions, inst_cmovnc_r16_r16(dst, src)) } +emit_cmovnc_r16_m16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR16, src: Mem16) { append_elem(instructions, inst_cmovnc_r16_m16(dst, src)) } +emit_cmovnc_r32_r32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: GPR32) { append_elem(instructions, inst_cmovnc_r32_r32(dst, src)) } +emit_cmovnc_r32_m32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: Mem32) { append_elem(instructions, inst_cmovnc_r32_m32(dst, src)) } +emit_cmovnc_r64_r64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: GPR64) { append_elem(instructions, inst_cmovnc_r64_r64(dst, src)) } +emit_cmovnc_r64_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: Mem64) { append_elem(instructions, inst_cmovnc_r64_m64(dst, src)) } inst_cmovne_r16_r16 :: #force_inline proc "contextless" (dst: GPR16, src: GPR16) -> Instruction { return with_hint(Instruction{ mnemonic = .CMOVNE, operand_count = 2, ops = {op_gpr16(dst), op_gpr16(src), {}, {}} }, 598) } inst_cmovne_r16_m16 :: #force_inline proc "contextless" (dst: GPR16, src: Mem16) -> Instruction { return with_hint(Instruction{ mnemonic = .CMOVNE, operand_count = 2, ops = {op_gpr16(dst), op_mem(src.mem, 2), {}, {}} }, 598) } inst_cmovne_r32_r32 :: #force_inline proc "contextless" (dst: GPR32, src: GPR32) -> Instruction { return with_hint(Instruction{ mnemonic = .CMOVNE, operand_count = 2, ops = {op_gpr32(dst), op_gpr32(src), {}, {}} }, 599) } inst_cmovne_r32_m32 :: #force_inline proc "contextless" (dst: GPR32, src: Mem32) -> Instruction { return with_hint(Instruction{ mnemonic = .CMOVNE, operand_count = 2, ops = {op_gpr32(dst), op_mem(src.mem, 4), {}, {}} }, 599) } inst_cmovne_r64_r64 :: #force_inline proc "contextless" (dst: GPR64, src: GPR64) -> Instruction { return with_hint(Instruction{ mnemonic = .CMOVNE, operand_count = 2, ops = {op_gpr64(dst), op_gpr64(src), {}, {}} }, 600) } inst_cmovne_r64_m64 :: #force_inline proc "contextless" (dst: GPR64, src: Mem64) -> Instruction { return with_hint(Instruction{ mnemonic = .CMOVNE, operand_count = 2, ops = {op_gpr64(dst), op_mem(src.mem, 8), {}, {}} }, 600) } -emit_cmovne_r16_r16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR16, src: GPR16) { append(instructions, inst_cmovne_r16_r16(dst, src)) } -emit_cmovne_r16_m16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR16, src: Mem16) { append(instructions, inst_cmovne_r16_m16(dst, src)) } -emit_cmovne_r32_r32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: GPR32) { append(instructions, inst_cmovne_r32_r32(dst, src)) } -emit_cmovne_r32_m32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: Mem32) { append(instructions, inst_cmovne_r32_m32(dst, src)) } -emit_cmovne_r64_r64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: GPR64) { append(instructions, inst_cmovne_r64_r64(dst, src)) } -emit_cmovne_r64_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: Mem64) { append(instructions, inst_cmovne_r64_m64(dst, src)) } +emit_cmovne_r16_r16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR16, src: GPR16) { append_elem(instructions, inst_cmovne_r16_r16(dst, src)) } +emit_cmovne_r16_m16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR16, src: Mem16) { append_elem(instructions, inst_cmovne_r16_m16(dst, src)) } +emit_cmovne_r32_r32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: GPR32) { append_elem(instructions, inst_cmovne_r32_r32(dst, src)) } +emit_cmovne_r32_m32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: Mem32) { append_elem(instructions, inst_cmovne_r32_m32(dst, src)) } +emit_cmovne_r64_r64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: GPR64) { append_elem(instructions, inst_cmovne_r64_r64(dst, src)) } +emit_cmovne_r64_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: Mem64) { append_elem(instructions, inst_cmovne_r64_m64(dst, src)) } inst_cmovng_r16_r16 :: #force_inline proc "contextless" (dst: GPR16, src: GPR16) -> Instruction { return with_hint(Instruction{ mnemonic = .CMOVNG, operand_count = 2, ops = {op_gpr16(dst), op_gpr16(src), {}, {}} }, 601) } inst_cmovng_r16_m16 :: #force_inline proc "contextless" (dst: GPR16, src: Mem16) -> Instruction { return with_hint(Instruction{ mnemonic = .CMOVNG, operand_count = 2, ops = {op_gpr16(dst), op_mem(src.mem, 2), {}, {}} }, 601) } inst_cmovng_r32_r32 :: #force_inline proc "contextless" (dst: GPR32, src: GPR32) -> Instruction { return with_hint(Instruction{ mnemonic = .CMOVNG, operand_count = 2, ops = {op_gpr32(dst), op_gpr32(src), {}, {}} }, 602) } inst_cmovng_r32_m32 :: #force_inline proc "contextless" (dst: GPR32, src: Mem32) -> Instruction { return with_hint(Instruction{ mnemonic = .CMOVNG, operand_count = 2, ops = {op_gpr32(dst), op_mem(src.mem, 4), {}, {}} }, 602) } inst_cmovng_r64_r64 :: #force_inline proc "contextless" (dst: GPR64, src: GPR64) -> Instruction { return with_hint(Instruction{ mnemonic = .CMOVNG, operand_count = 2, ops = {op_gpr64(dst), op_gpr64(src), {}, {}} }, 603) } inst_cmovng_r64_m64 :: #force_inline proc "contextless" (dst: GPR64, src: Mem64) -> Instruction { return with_hint(Instruction{ mnemonic = .CMOVNG, operand_count = 2, ops = {op_gpr64(dst), op_mem(src.mem, 8), {}, {}} }, 603) } -emit_cmovng_r16_r16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR16, src: GPR16) { append(instructions, inst_cmovng_r16_r16(dst, src)) } -emit_cmovng_r16_m16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR16, src: Mem16) { append(instructions, inst_cmovng_r16_m16(dst, src)) } -emit_cmovng_r32_r32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: GPR32) { append(instructions, inst_cmovng_r32_r32(dst, src)) } -emit_cmovng_r32_m32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: Mem32) { append(instructions, inst_cmovng_r32_m32(dst, src)) } -emit_cmovng_r64_r64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: GPR64) { append(instructions, inst_cmovng_r64_r64(dst, src)) } -emit_cmovng_r64_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: Mem64) { append(instructions, inst_cmovng_r64_m64(dst, src)) } +emit_cmovng_r16_r16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR16, src: GPR16) { append_elem(instructions, inst_cmovng_r16_r16(dst, src)) } +emit_cmovng_r16_m16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR16, src: Mem16) { append_elem(instructions, inst_cmovng_r16_m16(dst, src)) } +emit_cmovng_r32_r32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: GPR32) { append_elem(instructions, inst_cmovng_r32_r32(dst, src)) } +emit_cmovng_r32_m32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: Mem32) { append_elem(instructions, inst_cmovng_r32_m32(dst, src)) } +emit_cmovng_r64_r64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: GPR64) { append_elem(instructions, inst_cmovng_r64_r64(dst, src)) } +emit_cmovng_r64_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: Mem64) { append_elem(instructions, inst_cmovng_r64_m64(dst, src)) } inst_cmovnge_r16_r16 :: #force_inline proc "contextless" (dst: GPR16, src: GPR16) -> Instruction { return with_hint(Instruction{ mnemonic = .CMOVNGE, operand_count = 2, ops = {op_gpr16(dst), op_gpr16(src), {}, {}} }, 604) } inst_cmovnge_r16_m16 :: #force_inline proc "contextless" (dst: GPR16, src: Mem16) -> Instruction { return with_hint(Instruction{ mnemonic = .CMOVNGE, operand_count = 2, ops = {op_gpr16(dst), op_mem(src.mem, 2), {}, {}} }, 604) } inst_cmovnge_r32_r32 :: #force_inline proc "contextless" (dst: GPR32, src: GPR32) -> Instruction { return with_hint(Instruction{ mnemonic = .CMOVNGE, operand_count = 2, ops = {op_gpr32(dst), op_gpr32(src), {}, {}} }, 605) } inst_cmovnge_r32_m32 :: #force_inline proc "contextless" (dst: GPR32, src: Mem32) -> Instruction { return with_hint(Instruction{ mnemonic = .CMOVNGE, operand_count = 2, ops = {op_gpr32(dst), op_mem(src.mem, 4), {}, {}} }, 605) } inst_cmovnge_r64_r64 :: #force_inline proc "contextless" (dst: GPR64, src: GPR64) -> Instruction { return with_hint(Instruction{ mnemonic = .CMOVNGE, operand_count = 2, ops = {op_gpr64(dst), op_gpr64(src), {}, {}} }, 606) } inst_cmovnge_r64_m64 :: #force_inline proc "contextless" (dst: GPR64, src: Mem64) -> Instruction { return with_hint(Instruction{ mnemonic = .CMOVNGE, operand_count = 2, ops = {op_gpr64(dst), op_mem(src.mem, 8), {}, {}} }, 606) } -emit_cmovnge_r16_r16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR16, src: GPR16) { append(instructions, inst_cmovnge_r16_r16(dst, src)) } -emit_cmovnge_r16_m16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR16, src: Mem16) { append(instructions, inst_cmovnge_r16_m16(dst, src)) } -emit_cmovnge_r32_r32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: GPR32) { append(instructions, inst_cmovnge_r32_r32(dst, src)) } -emit_cmovnge_r32_m32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: Mem32) { append(instructions, inst_cmovnge_r32_m32(dst, src)) } -emit_cmovnge_r64_r64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: GPR64) { append(instructions, inst_cmovnge_r64_r64(dst, src)) } -emit_cmovnge_r64_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: Mem64) { append(instructions, inst_cmovnge_r64_m64(dst, src)) } +emit_cmovnge_r16_r16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR16, src: GPR16) { append_elem(instructions, inst_cmovnge_r16_r16(dst, src)) } +emit_cmovnge_r16_m16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR16, src: Mem16) { append_elem(instructions, inst_cmovnge_r16_m16(dst, src)) } +emit_cmovnge_r32_r32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: GPR32) { append_elem(instructions, inst_cmovnge_r32_r32(dst, src)) } +emit_cmovnge_r32_m32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: Mem32) { append_elem(instructions, inst_cmovnge_r32_m32(dst, src)) } +emit_cmovnge_r64_r64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: GPR64) { append_elem(instructions, inst_cmovnge_r64_r64(dst, src)) } +emit_cmovnge_r64_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: Mem64) { append_elem(instructions, inst_cmovnge_r64_m64(dst, src)) } inst_cmovnl_r16_r16 :: #force_inline proc "contextless" (dst: GPR16, src: GPR16) -> Instruction { return with_hint(Instruction{ mnemonic = .CMOVNL, operand_count = 2, ops = {op_gpr16(dst), op_gpr16(src), {}, {}} }, 607) } inst_cmovnl_r16_m16 :: #force_inline proc "contextless" (dst: GPR16, src: Mem16) -> Instruction { return with_hint(Instruction{ mnemonic = .CMOVNL, operand_count = 2, ops = {op_gpr16(dst), op_mem(src.mem, 2), {}, {}} }, 607) } inst_cmovnl_r32_r32 :: #force_inline proc "contextless" (dst: GPR32, src: GPR32) -> Instruction { return with_hint(Instruction{ mnemonic = .CMOVNL, operand_count = 2, ops = {op_gpr32(dst), op_gpr32(src), {}, {}} }, 608) } inst_cmovnl_r32_m32 :: #force_inline proc "contextless" (dst: GPR32, src: Mem32) -> Instruction { return with_hint(Instruction{ mnemonic = .CMOVNL, operand_count = 2, ops = {op_gpr32(dst), op_mem(src.mem, 4), {}, {}} }, 608) } inst_cmovnl_r64_r64 :: #force_inline proc "contextless" (dst: GPR64, src: GPR64) -> Instruction { return with_hint(Instruction{ mnemonic = .CMOVNL, operand_count = 2, ops = {op_gpr64(dst), op_gpr64(src), {}, {}} }, 609) } inst_cmovnl_r64_m64 :: #force_inline proc "contextless" (dst: GPR64, src: Mem64) -> Instruction { return with_hint(Instruction{ mnemonic = .CMOVNL, operand_count = 2, ops = {op_gpr64(dst), op_mem(src.mem, 8), {}, {}} }, 609) } -emit_cmovnl_r16_r16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR16, src: GPR16) { append(instructions, inst_cmovnl_r16_r16(dst, src)) } -emit_cmovnl_r16_m16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR16, src: Mem16) { append(instructions, inst_cmovnl_r16_m16(dst, src)) } -emit_cmovnl_r32_r32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: GPR32) { append(instructions, inst_cmovnl_r32_r32(dst, src)) } -emit_cmovnl_r32_m32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: Mem32) { append(instructions, inst_cmovnl_r32_m32(dst, src)) } -emit_cmovnl_r64_r64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: GPR64) { append(instructions, inst_cmovnl_r64_r64(dst, src)) } -emit_cmovnl_r64_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: Mem64) { append(instructions, inst_cmovnl_r64_m64(dst, src)) } +emit_cmovnl_r16_r16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR16, src: GPR16) { append_elem(instructions, inst_cmovnl_r16_r16(dst, src)) } +emit_cmovnl_r16_m16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR16, src: Mem16) { append_elem(instructions, inst_cmovnl_r16_m16(dst, src)) } +emit_cmovnl_r32_r32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: GPR32) { append_elem(instructions, inst_cmovnl_r32_r32(dst, src)) } +emit_cmovnl_r32_m32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: Mem32) { append_elem(instructions, inst_cmovnl_r32_m32(dst, src)) } +emit_cmovnl_r64_r64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: GPR64) { append_elem(instructions, inst_cmovnl_r64_r64(dst, src)) } +emit_cmovnl_r64_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: Mem64) { append_elem(instructions, inst_cmovnl_r64_m64(dst, src)) } inst_cmovnle_r16_r16 :: #force_inline proc "contextless" (dst: GPR16, src: GPR16) -> Instruction { return with_hint(Instruction{ mnemonic = .CMOVNLE, operand_count = 2, ops = {op_gpr16(dst), op_gpr16(src), {}, {}} }, 610) } inst_cmovnle_r16_m16 :: #force_inline proc "contextless" (dst: GPR16, src: Mem16) -> Instruction { return with_hint(Instruction{ mnemonic = .CMOVNLE, operand_count = 2, ops = {op_gpr16(dst), op_mem(src.mem, 2), {}, {}} }, 610) } inst_cmovnle_r32_r32 :: #force_inline proc "contextless" (dst: GPR32, src: GPR32) -> Instruction { return with_hint(Instruction{ mnemonic = .CMOVNLE, operand_count = 2, ops = {op_gpr32(dst), op_gpr32(src), {}, {}} }, 611) } inst_cmovnle_r32_m32 :: #force_inline proc "contextless" (dst: GPR32, src: Mem32) -> Instruction { return with_hint(Instruction{ mnemonic = .CMOVNLE, operand_count = 2, ops = {op_gpr32(dst), op_mem(src.mem, 4), {}, {}} }, 611) } inst_cmovnle_r64_r64 :: #force_inline proc "contextless" (dst: GPR64, src: GPR64) -> Instruction { return with_hint(Instruction{ mnemonic = .CMOVNLE, operand_count = 2, ops = {op_gpr64(dst), op_gpr64(src), {}, {}} }, 612) } inst_cmovnle_r64_m64 :: #force_inline proc "contextless" (dst: GPR64, src: Mem64) -> Instruction { return with_hint(Instruction{ mnemonic = .CMOVNLE, operand_count = 2, ops = {op_gpr64(dst), op_mem(src.mem, 8), {}, {}} }, 612) } -emit_cmovnle_r16_r16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR16, src: GPR16) { append(instructions, inst_cmovnle_r16_r16(dst, src)) } -emit_cmovnle_r16_m16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR16, src: Mem16) { append(instructions, inst_cmovnle_r16_m16(dst, src)) } -emit_cmovnle_r32_r32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: GPR32) { append(instructions, inst_cmovnle_r32_r32(dst, src)) } -emit_cmovnle_r32_m32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: Mem32) { append(instructions, inst_cmovnle_r32_m32(dst, src)) } -emit_cmovnle_r64_r64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: GPR64) { append(instructions, inst_cmovnle_r64_r64(dst, src)) } -emit_cmovnle_r64_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: Mem64) { append(instructions, inst_cmovnle_r64_m64(dst, src)) } +emit_cmovnle_r16_r16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR16, src: GPR16) { append_elem(instructions, inst_cmovnle_r16_r16(dst, src)) } +emit_cmovnle_r16_m16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR16, src: Mem16) { append_elem(instructions, inst_cmovnle_r16_m16(dst, src)) } +emit_cmovnle_r32_r32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: GPR32) { append_elem(instructions, inst_cmovnle_r32_r32(dst, src)) } +emit_cmovnle_r32_m32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: Mem32) { append_elem(instructions, inst_cmovnle_r32_m32(dst, src)) } +emit_cmovnle_r64_r64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: GPR64) { append_elem(instructions, inst_cmovnle_r64_r64(dst, src)) } +emit_cmovnle_r64_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: Mem64) { append_elem(instructions, inst_cmovnle_r64_m64(dst, src)) } inst_cmovno_r16_r16 :: #force_inline proc "contextless" (dst: GPR16, src: GPR16) -> Instruction { return with_hint(Instruction{ mnemonic = .CMOVNO, operand_count = 2, ops = {op_gpr16(dst), op_gpr16(src), {}, {}} }, 613) } inst_cmovno_r16_m16 :: #force_inline proc "contextless" (dst: GPR16, src: Mem16) -> Instruction { return with_hint(Instruction{ mnemonic = .CMOVNO, operand_count = 2, ops = {op_gpr16(dst), op_mem(src.mem, 2), {}, {}} }, 613) } inst_cmovno_r32_r32 :: #force_inline proc "contextless" (dst: GPR32, src: GPR32) -> Instruction { return with_hint(Instruction{ mnemonic = .CMOVNO, operand_count = 2, ops = {op_gpr32(dst), op_gpr32(src), {}, {}} }, 614) } inst_cmovno_r32_m32 :: #force_inline proc "contextless" (dst: GPR32, src: Mem32) -> Instruction { return with_hint(Instruction{ mnemonic = .CMOVNO, operand_count = 2, ops = {op_gpr32(dst), op_mem(src.mem, 4), {}, {}} }, 614) } inst_cmovno_r64_r64 :: #force_inline proc "contextless" (dst: GPR64, src: GPR64) -> Instruction { return with_hint(Instruction{ mnemonic = .CMOVNO, operand_count = 2, ops = {op_gpr64(dst), op_gpr64(src), {}, {}} }, 615) } inst_cmovno_r64_m64 :: #force_inline proc "contextless" (dst: GPR64, src: Mem64) -> Instruction { return with_hint(Instruction{ mnemonic = .CMOVNO, operand_count = 2, ops = {op_gpr64(dst), op_mem(src.mem, 8), {}, {}} }, 615) } -emit_cmovno_r16_r16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR16, src: GPR16) { append(instructions, inst_cmovno_r16_r16(dst, src)) } -emit_cmovno_r16_m16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR16, src: Mem16) { append(instructions, inst_cmovno_r16_m16(dst, src)) } -emit_cmovno_r32_r32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: GPR32) { append(instructions, inst_cmovno_r32_r32(dst, src)) } -emit_cmovno_r32_m32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: Mem32) { append(instructions, inst_cmovno_r32_m32(dst, src)) } -emit_cmovno_r64_r64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: GPR64) { append(instructions, inst_cmovno_r64_r64(dst, src)) } -emit_cmovno_r64_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: Mem64) { append(instructions, inst_cmovno_r64_m64(dst, src)) } +emit_cmovno_r16_r16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR16, src: GPR16) { append_elem(instructions, inst_cmovno_r16_r16(dst, src)) } +emit_cmovno_r16_m16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR16, src: Mem16) { append_elem(instructions, inst_cmovno_r16_m16(dst, src)) } +emit_cmovno_r32_r32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: GPR32) { append_elem(instructions, inst_cmovno_r32_r32(dst, src)) } +emit_cmovno_r32_m32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: Mem32) { append_elem(instructions, inst_cmovno_r32_m32(dst, src)) } +emit_cmovno_r64_r64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: GPR64) { append_elem(instructions, inst_cmovno_r64_r64(dst, src)) } +emit_cmovno_r64_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: Mem64) { append_elem(instructions, inst_cmovno_r64_m64(dst, src)) } inst_cmovnp_r16_r16 :: #force_inline proc "contextless" (dst: GPR16, src: GPR16) -> Instruction { return with_hint(Instruction{ mnemonic = .CMOVNP, operand_count = 2, ops = {op_gpr16(dst), op_gpr16(src), {}, {}} }, 616) } inst_cmovnp_r16_m16 :: #force_inline proc "contextless" (dst: GPR16, src: Mem16) -> Instruction { return with_hint(Instruction{ mnemonic = .CMOVNP, operand_count = 2, ops = {op_gpr16(dst), op_mem(src.mem, 2), {}, {}} }, 616) } inst_cmovnp_r32_r32 :: #force_inline proc "contextless" (dst: GPR32, src: GPR32) -> Instruction { return with_hint(Instruction{ mnemonic = .CMOVNP, operand_count = 2, ops = {op_gpr32(dst), op_gpr32(src), {}, {}} }, 617) } inst_cmovnp_r32_m32 :: #force_inline proc "contextless" (dst: GPR32, src: Mem32) -> Instruction { return with_hint(Instruction{ mnemonic = .CMOVNP, operand_count = 2, ops = {op_gpr32(dst), op_mem(src.mem, 4), {}, {}} }, 617) } inst_cmovnp_r64_r64 :: #force_inline proc "contextless" (dst: GPR64, src: GPR64) -> Instruction { return with_hint(Instruction{ mnemonic = .CMOVNP, operand_count = 2, ops = {op_gpr64(dst), op_gpr64(src), {}, {}} }, 618) } inst_cmovnp_r64_m64 :: #force_inline proc "contextless" (dst: GPR64, src: Mem64) -> Instruction { return with_hint(Instruction{ mnemonic = .CMOVNP, operand_count = 2, ops = {op_gpr64(dst), op_mem(src.mem, 8), {}, {}} }, 618) } -emit_cmovnp_r16_r16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR16, src: GPR16) { append(instructions, inst_cmovnp_r16_r16(dst, src)) } -emit_cmovnp_r16_m16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR16, src: Mem16) { append(instructions, inst_cmovnp_r16_m16(dst, src)) } -emit_cmovnp_r32_r32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: GPR32) { append(instructions, inst_cmovnp_r32_r32(dst, src)) } -emit_cmovnp_r32_m32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: Mem32) { append(instructions, inst_cmovnp_r32_m32(dst, src)) } -emit_cmovnp_r64_r64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: GPR64) { append(instructions, inst_cmovnp_r64_r64(dst, src)) } -emit_cmovnp_r64_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: Mem64) { append(instructions, inst_cmovnp_r64_m64(dst, src)) } +emit_cmovnp_r16_r16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR16, src: GPR16) { append_elem(instructions, inst_cmovnp_r16_r16(dst, src)) } +emit_cmovnp_r16_m16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR16, src: Mem16) { append_elem(instructions, inst_cmovnp_r16_m16(dst, src)) } +emit_cmovnp_r32_r32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: GPR32) { append_elem(instructions, inst_cmovnp_r32_r32(dst, src)) } +emit_cmovnp_r32_m32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: Mem32) { append_elem(instructions, inst_cmovnp_r32_m32(dst, src)) } +emit_cmovnp_r64_r64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: GPR64) { append_elem(instructions, inst_cmovnp_r64_r64(dst, src)) } +emit_cmovnp_r64_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: Mem64) { append_elem(instructions, inst_cmovnp_r64_m64(dst, src)) } inst_cmovns_r16_r16 :: #force_inline proc "contextless" (dst: GPR16, src: GPR16) -> Instruction { return with_hint(Instruction{ mnemonic = .CMOVNS, operand_count = 2, ops = {op_gpr16(dst), op_gpr16(src), {}, {}} }, 619) } inst_cmovns_r16_m16 :: #force_inline proc "contextless" (dst: GPR16, src: Mem16) -> Instruction { return with_hint(Instruction{ mnemonic = .CMOVNS, operand_count = 2, ops = {op_gpr16(dst), op_mem(src.mem, 2), {}, {}} }, 619) } inst_cmovns_r32_r32 :: #force_inline proc "contextless" (dst: GPR32, src: GPR32) -> Instruction { return with_hint(Instruction{ mnemonic = .CMOVNS, operand_count = 2, ops = {op_gpr32(dst), op_gpr32(src), {}, {}} }, 620) } inst_cmovns_r32_m32 :: #force_inline proc "contextless" (dst: GPR32, src: Mem32) -> Instruction { return with_hint(Instruction{ mnemonic = .CMOVNS, operand_count = 2, ops = {op_gpr32(dst), op_mem(src.mem, 4), {}, {}} }, 620) } inst_cmovns_r64_r64 :: #force_inline proc "contextless" (dst: GPR64, src: GPR64) -> Instruction { return with_hint(Instruction{ mnemonic = .CMOVNS, operand_count = 2, ops = {op_gpr64(dst), op_gpr64(src), {}, {}} }, 621) } inst_cmovns_r64_m64 :: #force_inline proc "contextless" (dst: GPR64, src: Mem64) -> Instruction { return with_hint(Instruction{ mnemonic = .CMOVNS, operand_count = 2, ops = {op_gpr64(dst), op_mem(src.mem, 8), {}, {}} }, 621) } -emit_cmovns_r16_r16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR16, src: GPR16) { append(instructions, inst_cmovns_r16_r16(dst, src)) } -emit_cmovns_r16_m16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR16, src: Mem16) { append(instructions, inst_cmovns_r16_m16(dst, src)) } -emit_cmovns_r32_r32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: GPR32) { append(instructions, inst_cmovns_r32_r32(dst, src)) } -emit_cmovns_r32_m32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: Mem32) { append(instructions, inst_cmovns_r32_m32(dst, src)) } -emit_cmovns_r64_r64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: GPR64) { append(instructions, inst_cmovns_r64_r64(dst, src)) } -emit_cmovns_r64_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: Mem64) { append(instructions, inst_cmovns_r64_m64(dst, src)) } +emit_cmovns_r16_r16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR16, src: GPR16) { append_elem(instructions, inst_cmovns_r16_r16(dst, src)) } +emit_cmovns_r16_m16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR16, src: Mem16) { append_elem(instructions, inst_cmovns_r16_m16(dst, src)) } +emit_cmovns_r32_r32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: GPR32) { append_elem(instructions, inst_cmovns_r32_r32(dst, src)) } +emit_cmovns_r32_m32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: Mem32) { append_elem(instructions, inst_cmovns_r32_m32(dst, src)) } +emit_cmovns_r64_r64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: GPR64) { append_elem(instructions, inst_cmovns_r64_r64(dst, src)) } +emit_cmovns_r64_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: Mem64) { append_elem(instructions, inst_cmovns_r64_m64(dst, src)) } inst_cmovnz_r16_r16 :: #force_inline proc "contextless" (dst: GPR16, src: GPR16) -> Instruction { return with_hint(Instruction{ mnemonic = .CMOVNZ, operand_count = 2, ops = {op_gpr16(dst), op_gpr16(src), {}, {}} }, 622) } inst_cmovnz_r16_m16 :: #force_inline proc "contextless" (dst: GPR16, src: Mem16) -> Instruction { return with_hint(Instruction{ mnemonic = .CMOVNZ, operand_count = 2, ops = {op_gpr16(dst), op_mem(src.mem, 2), {}, {}} }, 622) } inst_cmovnz_r32_r32 :: #force_inline proc "contextless" (dst: GPR32, src: GPR32) -> Instruction { return with_hint(Instruction{ mnemonic = .CMOVNZ, operand_count = 2, ops = {op_gpr32(dst), op_gpr32(src), {}, {}} }, 623) } inst_cmovnz_r32_m32 :: #force_inline proc "contextless" (dst: GPR32, src: Mem32) -> Instruction { return with_hint(Instruction{ mnemonic = .CMOVNZ, operand_count = 2, ops = {op_gpr32(dst), op_mem(src.mem, 4), {}, {}} }, 623) } inst_cmovnz_r64_r64 :: #force_inline proc "contextless" (dst: GPR64, src: GPR64) -> Instruction { return with_hint(Instruction{ mnemonic = .CMOVNZ, operand_count = 2, ops = {op_gpr64(dst), op_gpr64(src), {}, {}} }, 624) } inst_cmovnz_r64_m64 :: #force_inline proc "contextless" (dst: GPR64, src: Mem64) -> Instruction { return with_hint(Instruction{ mnemonic = .CMOVNZ, operand_count = 2, ops = {op_gpr64(dst), op_mem(src.mem, 8), {}, {}} }, 624) } -emit_cmovnz_r16_r16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR16, src: GPR16) { append(instructions, inst_cmovnz_r16_r16(dst, src)) } -emit_cmovnz_r16_m16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR16, src: Mem16) { append(instructions, inst_cmovnz_r16_m16(dst, src)) } -emit_cmovnz_r32_r32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: GPR32) { append(instructions, inst_cmovnz_r32_r32(dst, src)) } -emit_cmovnz_r32_m32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: Mem32) { append(instructions, inst_cmovnz_r32_m32(dst, src)) } -emit_cmovnz_r64_r64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: GPR64) { append(instructions, inst_cmovnz_r64_r64(dst, src)) } -emit_cmovnz_r64_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: Mem64) { append(instructions, inst_cmovnz_r64_m64(dst, src)) } +emit_cmovnz_r16_r16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR16, src: GPR16) { append_elem(instructions, inst_cmovnz_r16_r16(dst, src)) } +emit_cmovnz_r16_m16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR16, src: Mem16) { append_elem(instructions, inst_cmovnz_r16_m16(dst, src)) } +emit_cmovnz_r32_r32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: GPR32) { append_elem(instructions, inst_cmovnz_r32_r32(dst, src)) } +emit_cmovnz_r32_m32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: Mem32) { append_elem(instructions, inst_cmovnz_r32_m32(dst, src)) } +emit_cmovnz_r64_r64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: GPR64) { append_elem(instructions, inst_cmovnz_r64_r64(dst, src)) } +emit_cmovnz_r64_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: Mem64) { append_elem(instructions, inst_cmovnz_r64_m64(dst, src)) } inst_cmovo_r16_r16 :: #force_inline proc "contextless" (dst: GPR16, src: GPR16) -> Instruction { return with_hint(Instruction{ mnemonic = .CMOVO, operand_count = 2, ops = {op_gpr16(dst), op_gpr16(src), {}, {}} }, 625) } inst_cmovo_r16_m16 :: #force_inline proc "contextless" (dst: GPR16, src: Mem16) -> Instruction { return with_hint(Instruction{ mnemonic = .CMOVO, operand_count = 2, ops = {op_gpr16(dst), op_mem(src.mem, 2), {}, {}} }, 625) } inst_cmovo_r32_r32 :: #force_inline proc "contextless" (dst: GPR32, src: GPR32) -> Instruction { return with_hint(Instruction{ mnemonic = .CMOVO, operand_count = 2, ops = {op_gpr32(dst), op_gpr32(src), {}, {}} }, 626) } inst_cmovo_r32_m32 :: #force_inline proc "contextless" (dst: GPR32, src: Mem32) -> Instruction { return with_hint(Instruction{ mnemonic = .CMOVO, operand_count = 2, ops = {op_gpr32(dst), op_mem(src.mem, 4), {}, {}} }, 626) } inst_cmovo_r64_r64 :: #force_inline proc "contextless" (dst: GPR64, src: GPR64) -> Instruction { return with_hint(Instruction{ mnemonic = .CMOVO, operand_count = 2, ops = {op_gpr64(dst), op_gpr64(src), {}, {}} }, 627) } inst_cmovo_r64_m64 :: #force_inline proc "contextless" (dst: GPR64, src: Mem64) -> Instruction { return with_hint(Instruction{ mnemonic = .CMOVO, operand_count = 2, ops = {op_gpr64(dst), op_mem(src.mem, 8), {}, {}} }, 627) } -emit_cmovo_r16_r16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR16, src: GPR16) { append(instructions, inst_cmovo_r16_r16(dst, src)) } -emit_cmovo_r16_m16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR16, src: Mem16) { append(instructions, inst_cmovo_r16_m16(dst, src)) } -emit_cmovo_r32_r32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: GPR32) { append(instructions, inst_cmovo_r32_r32(dst, src)) } -emit_cmovo_r32_m32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: Mem32) { append(instructions, inst_cmovo_r32_m32(dst, src)) } -emit_cmovo_r64_r64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: GPR64) { append(instructions, inst_cmovo_r64_r64(dst, src)) } -emit_cmovo_r64_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: Mem64) { append(instructions, inst_cmovo_r64_m64(dst, src)) } +emit_cmovo_r16_r16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR16, src: GPR16) { append_elem(instructions, inst_cmovo_r16_r16(dst, src)) } +emit_cmovo_r16_m16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR16, src: Mem16) { append_elem(instructions, inst_cmovo_r16_m16(dst, src)) } +emit_cmovo_r32_r32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: GPR32) { append_elem(instructions, inst_cmovo_r32_r32(dst, src)) } +emit_cmovo_r32_m32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: Mem32) { append_elem(instructions, inst_cmovo_r32_m32(dst, src)) } +emit_cmovo_r64_r64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: GPR64) { append_elem(instructions, inst_cmovo_r64_r64(dst, src)) } +emit_cmovo_r64_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: Mem64) { append_elem(instructions, inst_cmovo_r64_m64(dst, src)) } inst_cmovp_r16_r16 :: #force_inline proc "contextless" (dst: GPR16, src: GPR16) -> Instruction { return with_hint(Instruction{ mnemonic = .CMOVP, operand_count = 2, ops = {op_gpr16(dst), op_gpr16(src), {}, {}} }, 628) } inst_cmovp_r16_m16 :: #force_inline proc "contextless" (dst: GPR16, src: Mem16) -> Instruction { return with_hint(Instruction{ mnemonic = .CMOVP, operand_count = 2, ops = {op_gpr16(dst), op_mem(src.mem, 2), {}, {}} }, 628) } inst_cmovp_r32_r32 :: #force_inline proc "contextless" (dst: GPR32, src: GPR32) -> Instruction { return with_hint(Instruction{ mnemonic = .CMOVP, operand_count = 2, ops = {op_gpr32(dst), op_gpr32(src), {}, {}} }, 629) } inst_cmovp_r32_m32 :: #force_inline proc "contextless" (dst: GPR32, src: Mem32) -> Instruction { return with_hint(Instruction{ mnemonic = .CMOVP, operand_count = 2, ops = {op_gpr32(dst), op_mem(src.mem, 4), {}, {}} }, 629) } inst_cmovp_r64_r64 :: #force_inline proc "contextless" (dst: GPR64, src: GPR64) -> Instruction { return with_hint(Instruction{ mnemonic = .CMOVP, operand_count = 2, ops = {op_gpr64(dst), op_gpr64(src), {}, {}} }, 630) } inst_cmovp_r64_m64 :: #force_inline proc "contextless" (dst: GPR64, src: Mem64) -> Instruction { return with_hint(Instruction{ mnemonic = .CMOVP, operand_count = 2, ops = {op_gpr64(dst), op_mem(src.mem, 8), {}, {}} }, 630) } -emit_cmovp_r16_r16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR16, src: GPR16) { append(instructions, inst_cmovp_r16_r16(dst, src)) } -emit_cmovp_r16_m16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR16, src: Mem16) { append(instructions, inst_cmovp_r16_m16(dst, src)) } -emit_cmovp_r32_r32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: GPR32) { append(instructions, inst_cmovp_r32_r32(dst, src)) } -emit_cmovp_r32_m32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: Mem32) { append(instructions, inst_cmovp_r32_m32(dst, src)) } -emit_cmovp_r64_r64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: GPR64) { append(instructions, inst_cmovp_r64_r64(dst, src)) } -emit_cmovp_r64_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: Mem64) { append(instructions, inst_cmovp_r64_m64(dst, src)) } +emit_cmovp_r16_r16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR16, src: GPR16) { append_elem(instructions, inst_cmovp_r16_r16(dst, src)) } +emit_cmovp_r16_m16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR16, src: Mem16) { append_elem(instructions, inst_cmovp_r16_m16(dst, src)) } +emit_cmovp_r32_r32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: GPR32) { append_elem(instructions, inst_cmovp_r32_r32(dst, src)) } +emit_cmovp_r32_m32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: Mem32) { append_elem(instructions, inst_cmovp_r32_m32(dst, src)) } +emit_cmovp_r64_r64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: GPR64) { append_elem(instructions, inst_cmovp_r64_r64(dst, src)) } +emit_cmovp_r64_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: Mem64) { append_elem(instructions, inst_cmovp_r64_m64(dst, src)) } inst_cmovpe_r16_r16 :: #force_inline proc "contextless" (dst: GPR16, src: GPR16) -> Instruction { return with_hint(Instruction{ mnemonic = .CMOVPE, operand_count = 2, ops = {op_gpr16(dst), op_gpr16(src), {}, {}} }, 631) } inst_cmovpe_r16_m16 :: #force_inline proc "contextless" (dst: GPR16, src: Mem16) -> Instruction { return with_hint(Instruction{ mnemonic = .CMOVPE, operand_count = 2, ops = {op_gpr16(dst), op_mem(src.mem, 2), {}, {}} }, 631) } inst_cmovpe_r32_r32 :: #force_inline proc "contextless" (dst: GPR32, src: GPR32) -> Instruction { return with_hint(Instruction{ mnemonic = .CMOVPE, operand_count = 2, ops = {op_gpr32(dst), op_gpr32(src), {}, {}} }, 632) } inst_cmovpe_r32_m32 :: #force_inline proc "contextless" (dst: GPR32, src: Mem32) -> Instruction { return with_hint(Instruction{ mnemonic = .CMOVPE, operand_count = 2, ops = {op_gpr32(dst), op_mem(src.mem, 4), {}, {}} }, 632) } inst_cmovpe_r64_r64 :: #force_inline proc "contextless" (dst: GPR64, src: GPR64) -> Instruction { return with_hint(Instruction{ mnemonic = .CMOVPE, operand_count = 2, ops = {op_gpr64(dst), op_gpr64(src), {}, {}} }, 633) } inst_cmovpe_r64_m64 :: #force_inline proc "contextless" (dst: GPR64, src: Mem64) -> Instruction { return with_hint(Instruction{ mnemonic = .CMOVPE, operand_count = 2, ops = {op_gpr64(dst), op_mem(src.mem, 8), {}, {}} }, 633) } -emit_cmovpe_r16_r16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR16, src: GPR16) { append(instructions, inst_cmovpe_r16_r16(dst, src)) } -emit_cmovpe_r16_m16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR16, src: Mem16) { append(instructions, inst_cmovpe_r16_m16(dst, src)) } -emit_cmovpe_r32_r32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: GPR32) { append(instructions, inst_cmovpe_r32_r32(dst, src)) } -emit_cmovpe_r32_m32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: Mem32) { append(instructions, inst_cmovpe_r32_m32(dst, src)) } -emit_cmovpe_r64_r64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: GPR64) { append(instructions, inst_cmovpe_r64_r64(dst, src)) } -emit_cmovpe_r64_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: Mem64) { append(instructions, inst_cmovpe_r64_m64(dst, src)) } +emit_cmovpe_r16_r16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR16, src: GPR16) { append_elem(instructions, inst_cmovpe_r16_r16(dst, src)) } +emit_cmovpe_r16_m16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR16, src: Mem16) { append_elem(instructions, inst_cmovpe_r16_m16(dst, src)) } +emit_cmovpe_r32_r32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: GPR32) { append_elem(instructions, inst_cmovpe_r32_r32(dst, src)) } +emit_cmovpe_r32_m32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: Mem32) { append_elem(instructions, inst_cmovpe_r32_m32(dst, src)) } +emit_cmovpe_r64_r64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: GPR64) { append_elem(instructions, inst_cmovpe_r64_r64(dst, src)) } +emit_cmovpe_r64_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: Mem64) { append_elem(instructions, inst_cmovpe_r64_m64(dst, src)) } inst_cmovpo_r16_r16 :: #force_inline proc "contextless" (dst: GPR16, src: GPR16) -> Instruction { return with_hint(Instruction{ mnemonic = .CMOVPO, operand_count = 2, ops = {op_gpr16(dst), op_gpr16(src), {}, {}} }, 634) } inst_cmovpo_r16_m16 :: #force_inline proc "contextless" (dst: GPR16, src: Mem16) -> Instruction { return with_hint(Instruction{ mnemonic = .CMOVPO, operand_count = 2, ops = {op_gpr16(dst), op_mem(src.mem, 2), {}, {}} }, 634) } inst_cmovpo_r32_r32 :: #force_inline proc "contextless" (dst: GPR32, src: GPR32) -> Instruction { return with_hint(Instruction{ mnemonic = .CMOVPO, operand_count = 2, ops = {op_gpr32(dst), op_gpr32(src), {}, {}} }, 635) } inst_cmovpo_r32_m32 :: #force_inline proc "contextless" (dst: GPR32, src: Mem32) -> Instruction { return with_hint(Instruction{ mnemonic = .CMOVPO, operand_count = 2, ops = {op_gpr32(dst), op_mem(src.mem, 4), {}, {}} }, 635) } inst_cmovpo_r64_r64 :: #force_inline proc "contextless" (dst: GPR64, src: GPR64) -> Instruction { return with_hint(Instruction{ mnemonic = .CMOVPO, operand_count = 2, ops = {op_gpr64(dst), op_gpr64(src), {}, {}} }, 636) } inst_cmovpo_r64_m64 :: #force_inline proc "contextless" (dst: GPR64, src: Mem64) -> Instruction { return with_hint(Instruction{ mnemonic = .CMOVPO, operand_count = 2, ops = {op_gpr64(dst), op_mem(src.mem, 8), {}, {}} }, 636) } -emit_cmovpo_r16_r16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR16, src: GPR16) { append(instructions, inst_cmovpo_r16_r16(dst, src)) } -emit_cmovpo_r16_m16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR16, src: Mem16) { append(instructions, inst_cmovpo_r16_m16(dst, src)) } -emit_cmovpo_r32_r32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: GPR32) { append(instructions, inst_cmovpo_r32_r32(dst, src)) } -emit_cmovpo_r32_m32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: Mem32) { append(instructions, inst_cmovpo_r32_m32(dst, src)) } -emit_cmovpo_r64_r64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: GPR64) { append(instructions, inst_cmovpo_r64_r64(dst, src)) } -emit_cmovpo_r64_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: Mem64) { append(instructions, inst_cmovpo_r64_m64(dst, src)) } +emit_cmovpo_r16_r16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR16, src: GPR16) { append_elem(instructions, inst_cmovpo_r16_r16(dst, src)) } +emit_cmovpo_r16_m16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR16, src: Mem16) { append_elem(instructions, inst_cmovpo_r16_m16(dst, src)) } +emit_cmovpo_r32_r32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: GPR32) { append_elem(instructions, inst_cmovpo_r32_r32(dst, src)) } +emit_cmovpo_r32_m32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: Mem32) { append_elem(instructions, inst_cmovpo_r32_m32(dst, src)) } +emit_cmovpo_r64_r64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: GPR64) { append_elem(instructions, inst_cmovpo_r64_r64(dst, src)) } +emit_cmovpo_r64_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: Mem64) { append_elem(instructions, inst_cmovpo_r64_m64(dst, src)) } inst_cmovs_r16_r16 :: #force_inline proc "contextless" (dst: GPR16, src: GPR16) -> Instruction { return with_hint(Instruction{ mnemonic = .CMOVS, operand_count = 2, ops = {op_gpr16(dst), op_gpr16(src), {}, {}} }, 637) } inst_cmovs_r16_m16 :: #force_inline proc "contextless" (dst: GPR16, src: Mem16) -> Instruction { return with_hint(Instruction{ mnemonic = .CMOVS, operand_count = 2, ops = {op_gpr16(dst), op_mem(src.mem, 2), {}, {}} }, 637) } inst_cmovs_r32_r32 :: #force_inline proc "contextless" (dst: GPR32, src: GPR32) -> Instruction { return with_hint(Instruction{ mnemonic = .CMOVS, operand_count = 2, ops = {op_gpr32(dst), op_gpr32(src), {}, {}} }, 638) } inst_cmovs_r32_m32 :: #force_inline proc "contextless" (dst: GPR32, src: Mem32) -> Instruction { return with_hint(Instruction{ mnemonic = .CMOVS, operand_count = 2, ops = {op_gpr32(dst), op_mem(src.mem, 4), {}, {}} }, 638) } inst_cmovs_r64_r64 :: #force_inline proc "contextless" (dst: GPR64, src: GPR64) -> Instruction { return with_hint(Instruction{ mnemonic = .CMOVS, operand_count = 2, ops = {op_gpr64(dst), op_gpr64(src), {}, {}} }, 639) } inst_cmovs_r64_m64 :: #force_inline proc "contextless" (dst: GPR64, src: Mem64) -> Instruction { return with_hint(Instruction{ mnemonic = .CMOVS, operand_count = 2, ops = {op_gpr64(dst), op_mem(src.mem, 8), {}, {}} }, 639) } -emit_cmovs_r16_r16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR16, src: GPR16) { append(instructions, inst_cmovs_r16_r16(dst, src)) } -emit_cmovs_r16_m16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR16, src: Mem16) { append(instructions, inst_cmovs_r16_m16(dst, src)) } -emit_cmovs_r32_r32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: GPR32) { append(instructions, inst_cmovs_r32_r32(dst, src)) } -emit_cmovs_r32_m32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: Mem32) { append(instructions, inst_cmovs_r32_m32(dst, src)) } -emit_cmovs_r64_r64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: GPR64) { append(instructions, inst_cmovs_r64_r64(dst, src)) } -emit_cmovs_r64_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: Mem64) { append(instructions, inst_cmovs_r64_m64(dst, src)) } +emit_cmovs_r16_r16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR16, src: GPR16) { append_elem(instructions, inst_cmovs_r16_r16(dst, src)) } +emit_cmovs_r16_m16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR16, src: Mem16) { append_elem(instructions, inst_cmovs_r16_m16(dst, src)) } +emit_cmovs_r32_r32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: GPR32) { append_elem(instructions, inst_cmovs_r32_r32(dst, src)) } +emit_cmovs_r32_m32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: Mem32) { append_elem(instructions, inst_cmovs_r32_m32(dst, src)) } +emit_cmovs_r64_r64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: GPR64) { append_elem(instructions, inst_cmovs_r64_r64(dst, src)) } +emit_cmovs_r64_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: Mem64) { append_elem(instructions, inst_cmovs_r64_m64(dst, src)) } inst_cmovz_r16_r16 :: #force_inline proc "contextless" (dst: GPR16, src: GPR16) -> Instruction { return with_hint(Instruction{ mnemonic = .CMOVZ, operand_count = 2, ops = {op_gpr16(dst), op_gpr16(src), {}, {}} }, 640) } inst_cmovz_r16_m16 :: #force_inline proc "contextless" (dst: GPR16, src: Mem16) -> Instruction { return with_hint(Instruction{ mnemonic = .CMOVZ, operand_count = 2, ops = {op_gpr16(dst), op_mem(src.mem, 2), {}, {}} }, 640) } inst_cmovz_r32_r32 :: #force_inline proc "contextless" (dst: GPR32, src: GPR32) -> Instruction { return with_hint(Instruction{ mnemonic = .CMOVZ, operand_count = 2, ops = {op_gpr32(dst), op_gpr32(src), {}, {}} }, 641) } inst_cmovz_r32_m32 :: #force_inline proc "contextless" (dst: GPR32, src: Mem32) -> Instruction { return with_hint(Instruction{ mnemonic = .CMOVZ, operand_count = 2, ops = {op_gpr32(dst), op_mem(src.mem, 4), {}, {}} }, 641) } inst_cmovz_r64_r64 :: #force_inline proc "contextless" (dst: GPR64, src: GPR64) -> Instruction { return with_hint(Instruction{ mnemonic = .CMOVZ, operand_count = 2, ops = {op_gpr64(dst), op_gpr64(src), {}, {}} }, 642) } inst_cmovz_r64_m64 :: #force_inline proc "contextless" (dst: GPR64, src: Mem64) -> Instruction { return with_hint(Instruction{ mnemonic = .CMOVZ, operand_count = 2, ops = {op_gpr64(dst), op_mem(src.mem, 8), {}, {}} }, 642) } -emit_cmovz_r16_r16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR16, src: GPR16) { append(instructions, inst_cmovz_r16_r16(dst, src)) } -emit_cmovz_r16_m16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR16, src: Mem16) { append(instructions, inst_cmovz_r16_m16(dst, src)) } -emit_cmovz_r32_r32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: GPR32) { append(instructions, inst_cmovz_r32_r32(dst, src)) } -emit_cmovz_r32_m32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: Mem32) { append(instructions, inst_cmovz_r32_m32(dst, src)) } -emit_cmovz_r64_r64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: GPR64) { append(instructions, inst_cmovz_r64_r64(dst, src)) } -emit_cmovz_r64_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: Mem64) { append(instructions, inst_cmovz_r64_m64(dst, src)) } +emit_cmovz_r16_r16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR16, src: GPR16) { append_elem(instructions, inst_cmovz_r16_r16(dst, src)) } +emit_cmovz_r16_m16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR16, src: Mem16) { append_elem(instructions, inst_cmovz_r16_m16(dst, src)) } +emit_cmovz_r32_r32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: GPR32) { append_elem(instructions, inst_cmovz_r32_r32(dst, src)) } +emit_cmovz_r32_m32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: Mem32) { append_elem(instructions, inst_cmovz_r32_m32(dst, src)) } +emit_cmovz_r64_r64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: GPR64) { append_elem(instructions, inst_cmovz_r64_r64(dst, src)) } +emit_cmovz_r64_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: Mem64) { append_elem(instructions, inst_cmovz_r64_m64(dst, src)) } inst_movs_none :: #force_inline proc "contextless" () -> Instruction { return with_hint(Instruction{ mnemonic = .MOVS, operand_count = 0, ops = {{}, {}, {}, {}} }, 643) } -emit_movs_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_movs_none()) } +emit_movs_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_movs_none()) } inst_movsb_none :: #force_inline proc "contextless" () -> Instruction { return with_hint(Instruction{ mnemonic = .MOVSB, operand_count = 0, ops = {{}, {}, {}, {}} }, 644) } -emit_movsb_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_movsb_none()) } +emit_movsb_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_movsb_none()) } inst_movsw_none :: #force_inline proc "contextless" () -> Instruction { return with_hint(Instruction{ mnemonic = .MOVSW, operand_count = 0, ops = {{}, {}, {}, {}} }, 645) } -emit_movsw_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_movsw_none()) } +emit_movsw_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_movsw_none()) } inst_movsd_none :: #force_inline proc "contextless" () -> Instruction { return with_hint(Instruction{ mnemonic = .MOVSD, operand_count = 0, ops = {{}, {}, {}, {}} }, 646) } inst_movsd_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .MOVSD, operand_count = 2, ops = {op_xmm(dst), op_xmm(src), {}, {}} }, 647) } inst_movsd_xmm_m64 :: #force_inline proc "contextless" (dst: XMM, src: Mem64) -> Instruction { return with_hint(Instruction{ mnemonic = .MOVSD, operand_count = 2, ops = {op_xmm(dst), op_mem(src.mem, 8), {}, {}} }, 647) } inst_movsd_m64_xmm :: #force_inline proc "contextless" (dst: Mem64, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .MOVSD, operand_count = 2, ops = {op_mem(dst.mem, 8), op_xmm(src), {}, {}} }, 648) } -emit_movsd_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_movsd_none()) } -emit_movsd_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append(instructions, inst_movsd_xmm_xmm(dst, src)) } -emit_movsd_xmm_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem64) { append(instructions, inst_movsd_xmm_m64(dst, src)) } -emit_movsd_m64_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem64, src: XMM) { append(instructions, inst_movsd_m64_xmm(dst, src)) } +emit_movsd_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_movsd_none()) } +emit_movsd_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append_elem(instructions, inst_movsd_xmm_xmm(dst, src)) } +emit_movsd_xmm_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem64) { append_elem(instructions, inst_movsd_xmm_m64(dst, src)) } +emit_movsd_m64_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem64, src: XMM) { append_elem(instructions, inst_movsd_m64_xmm(dst, src)) } inst_movsq_none :: #force_inline proc "contextless" () -> Instruction { return with_hint(Instruction{ mnemonic = .MOVSQ, operand_count = 0, ops = {{}, {}, {}, {}} }, 649) } -emit_movsq_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_movsq_none()) } +emit_movsq_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_movsq_none()) } inst_cmps_none :: #force_inline proc "contextless" () -> Instruction { return with_hint(Instruction{ mnemonic = .CMPS, operand_count = 0, ops = {{}, {}, {}, {}} }, 650) } -emit_cmps_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_cmps_none()) } +emit_cmps_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_cmps_none()) } inst_cmpsb_none :: #force_inline proc "contextless" () -> Instruction { return with_hint(Instruction{ mnemonic = .CMPSB, operand_count = 0, ops = {{}, {}, {}, {}} }, 651) } -emit_cmpsb_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_cmpsb_none()) } +emit_cmpsb_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_cmpsb_none()) } inst_cmpsw_none :: #force_inline proc "contextless" () -> Instruction { return with_hint(Instruction{ mnemonic = .CMPSW, operand_count = 0, ops = {{}, {}, {}, {}} }, 652) } -emit_cmpsw_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_cmpsw_none()) } +emit_cmpsw_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_cmpsw_none()) } inst_cmpsd_none :: #force_inline proc "contextless" () -> Instruction { return with_hint(Instruction{ mnemonic = .CMPSD, operand_count = 0, ops = {{}, {}, {}, {}} }, 653) } inst_cmpsd_xmm_xmm_imm8 :: #force_inline proc "contextless" (dst: XMM, src: XMM, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .CMPSD, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_imm8(imm), {}} }, 654) } inst_cmpsd_xmm_m64_imm8 :: #force_inline proc "contextless" (dst: XMM, src: Mem64, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .CMPSD, operand_count = 3, ops = {op_xmm(dst), op_mem(src.mem, 8), op_imm8(imm), {}} }, 654) } -emit_cmpsd_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_cmpsd_none()) } -emit_cmpsd_xmm_xmm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, imm: i8) { append(instructions, inst_cmpsd_xmm_xmm_imm8(dst, src, imm)) } -emit_cmpsd_xmm_m64_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem64, imm: i8) { append(instructions, inst_cmpsd_xmm_m64_imm8(dst, src, imm)) } +emit_cmpsd_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_cmpsd_none()) } +emit_cmpsd_xmm_xmm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, imm: i8) { append_elem(instructions, inst_cmpsd_xmm_xmm_imm8(dst, src, imm)) } +emit_cmpsd_xmm_m64_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem64, imm: i8) { append_elem(instructions, inst_cmpsd_xmm_m64_imm8(dst, src, imm)) } inst_cmpsq_none :: #force_inline proc "contextless" () -> Instruction { return with_hint(Instruction{ mnemonic = .CMPSQ, operand_count = 0, ops = {{}, {}, {}, {}} }, 655) } -emit_cmpsq_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_cmpsq_none()) } +emit_cmpsq_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_cmpsq_none()) } inst_scas_none :: #force_inline proc "contextless" () -> Instruction { return with_hint(Instruction{ mnemonic = .SCAS, operand_count = 0, ops = {{}, {}, {}, {}} }, 656) } -emit_scas_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_scas_none()) } +emit_scas_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_scas_none()) } inst_scasb_none :: #force_inline proc "contextless" () -> Instruction { return with_hint(Instruction{ mnemonic = .SCASB, operand_count = 0, ops = {{}, {}, {}, {}} }, 657) } -emit_scasb_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_scasb_none()) } +emit_scasb_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_scasb_none()) } inst_scasw_none :: #force_inline proc "contextless" () -> Instruction { return with_hint(Instruction{ mnemonic = .SCASW, operand_count = 0, ops = {{}, {}, {}, {}} }, 658) } -emit_scasw_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_scasw_none()) } +emit_scasw_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_scasw_none()) } inst_scasd_none :: #force_inline proc "contextless" () -> Instruction { return with_hint(Instruction{ mnemonic = .SCASD, operand_count = 0, ops = {{}, {}, {}, {}} }, 659) } -emit_scasd_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_scasd_none()) } +emit_scasd_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_scasd_none()) } inst_scasq_none :: #force_inline proc "contextless" () -> Instruction { return with_hint(Instruction{ mnemonic = .SCASQ, operand_count = 0, ops = {{}, {}, {}, {}} }, 660) } -emit_scasq_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_scasq_none()) } +emit_scasq_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_scasq_none()) } inst_lods_none :: #force_inline proc "contextless" () -> Instruction { return with_hint(Instruction{ mnemonic = .LODS, operand_count = 0, ops = {{}, {}, {}, {}} }, 661) } -emit_lods_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_lods_none()) } +emit_lods_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_lods_none()) } inst_lodsb_none :: #force_inline proc "contextless" () -> Instruction { return with_hint(Instruction{ mnemonic = .LODSB, operand_count = 0, ops = {{}, {}, {}, {}} }, 662) } -emit_lodsb_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_lodsb_none()) } +emit_lodsb_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_lodsb_none()) } inst_lodsw_none :: #force_inline proc "contextless" () -> Instruction { return with_hint(Instruction{ mnemonic = .LODSW, operand_count = 0, ops = {{}, {}, {}, {}} }, 663) } -emit_lodsw_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_lodsw_none()) } +emit_lodsw_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_lodsw_none()) } inst_lodsd_none :: #force_inline proc "contextless" () -> Instruction { return with_hint(Instruction{ mnemonic = .LODSD, operand_count = 0, ops = {{}, {}, {}, {}} }, 664) } -emit_lodsd_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_lodsd_none()) } +emit_lodsd_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_lodsd_none()) } inst_lodsq_none :: #force_inline proc "contextless" () -> Instruction { return with_hint(Instruction{ mnemonic = .LODSQ, operand_count = 0, ops = {{}, {}, {}, {}} }, 665) } -emit_lodsq_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_lodsq_none()) } +emit_lodsq_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_lodsq_none()) } inst_stos_none :: #force_inline proc "contextless" () -> Instruction { return with_hint(Instruction{ mnemonic = .STOS, operand_count = 0, ops = {{}, {}, {}, {}} }, 666) } -emit_stos_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_stos_none()) } +emit_stos_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_stos_none()) } inst_stosb_none :: #force_inline proc "contextless" () -> Instruction { return with_hint(Instruction{ mnemonic = .STOSB, operand_count = 0, ops = {{}, {}, {}, {}} }, 667) } -emit_stosb_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_stosb_none()) } +emit_stosb_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_stosb_none()) } inst_stosw_none :: #force_inline proc "contextless" () -> Instruction { return with_hint(Instruction{ mnemonic = .STOSW, operand_count = 0, ops = {{}, {}, {}, {}} }, 668) } -emit_stosw_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_stosw_none()) } +emit_stosw_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_stosw_none()) } inst_stosd_none :: #force_inline proc "contextless" () -> Instruction { return with_hint(Instruction{ mnemonic = .STOSD, operand_count = 0, ops = {{}, {}, {}, {}} }, 669) } -emit_stosd_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_stosd_none()) } +emit_stosd_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_stosd_none()) } inst_stosq_none :: #force_inline proc "contextless" () -> Instruction { return with_hint(Instruction{ mnemonic = .STOSQ, operand_count = 0, ops = {{}, {}, {}, {}} }, 670) } -emit_stosq_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_stosq_none()) } +emit_stosq_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_stosq_none()) } inst_clc_none :: #force_inline proc "contextless" () -> Instruction { return with_hint(Instruction{ mnemonic = .CLC, operand_count = 0, ops = {{}, {}, {}, {}} }, 671) } -emit_clc_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_clc_none()) } +emit_clc_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_clc_none()) } inst_stc_none :: #force_inline proc "contextless" () -> Instruction { return with_hint(Instruction{ mnemonic = .STC, operand_count = 0, ops = {{}, {}, {}, {}} }, 672) } -emit_stc_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_stc_none()) } +emit_stc_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_stc_none()) } inst_cmc_none :: #force_inline proc "contextless" () -> Instruction { return with_hint(Instruction{ mnemonic = .CMC, operand_count = 0, ops = {{}, {}, {}, {}} }, 673) } -emit_cmc_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_cmc_none()) } +emit_cmc_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_cmc_none()) } inst_cld_none :: #force_inline proc "contextless" () -> Instruction { return with_hint(Instruction{ mnemonic = .CLD, operand_count = 0, ops = {{}, {}, {}, {}} }, 674) } -emit_cld_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_cld_none()) } +emit_cld_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_cld_none()) } inst_std_none :: #force_inline proc "contextless" () -> Instruction { return with_hint(Instruction{ mnemonic = .STD, operand_count = 0, ops = {{}, {}, {}, {}} }, 675) } -emit_std_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_std_none()) } +emit_std_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_std_none()) } inst_cli_none :: #force_inline proc "contextless" () -> Instruction { return with_hint(Instruction{ mnemonic = .CLI, operand_count = 0, ops = {{}, {}, {}, {}} }, 676) } -emit_cli_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_cli_none()) } +emit_cli_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_cli_none()) } inst_sti_none :: #force_inline proc "contextless" () -> Instruction { return with_hint(Instruction{ mnemonic = .STI, operand_count = 0, ops = {{}, {}, {}, {}} }, 677) } -emit_sti_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_sti_none()) } +emit_sti_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_sti_none()) } inst_lahf_none :: #force_inline proc "contextless" () -> Instruction { return with_hint(Instruction{ mnemonic = .LAHF, operand_count = 0, ops = {{}, {}, {}, {}} }, 678) } -emit_lahf_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_lahf_none()) } +emit_lahf_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_lahf_none()) } inst_sahf_none :: #force_inline proc "contextless" () -> Instruction { return with_hint(Instruction{ mnemonic = .SAHF, operand_count = 0, ops = {{}, {}, {}, {}} }, 679) } -emit_sahf_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_sahf_none()) } +emit_sahf_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_sahf_none()) } inst_pushf_none :: #force_inline proc "contextless" () -> Instruction { return with_hint(Instruction{ mnemonic = .PUSHF, operand_count = 0, ops = {{}, {}, {}, {}} }, 680) } -emit_pushf_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_pushf_none()) } +emit_pushf_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_pushf_none()) } inst_pushfd_none :: #force_inline proc "contextless" () -> Instruction { return with_hint(Instruction{ mnemonic = .PUSHFD, operand_count = 0, ops = {{}, {}, {}, {}} }, 681) } -emit_pushfd_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_pushfd_none()) } +emit_pushfd_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_pushfd_none()) } inst_pushfq_none :: #force_inline proc "contextless" () -> Instruction { return with_hint(Instruction{ mnemonic = .PUSHFQ, operand_count = 0, ops = {{}, {}, {}, {}} }, 682) } -emit_pushfq_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_pushfq_none()) } +emit_pushfq_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_pushfq_none()) } inst_popf_none :: #force_inline proc "contextless" () -> Instruction { return with_hint(Instruction{ mnemonic = .POPF, operand_count = 0, ops = {{}, {}, {}, {}} }, 683) } -emit_popf_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_popf_none()) } +emit_popf_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_popf_none()) } inst_popfd_none :: #force_inline proc "contextless" () -> Instruction { return with_hint(Instruction{ mnemonic = .POPFD, operand_count = 0, ops = {{}, {}, {}, {}} }, 684) } -emit_popfd_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_popfd_none()) } +emit_popfd_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_popfd_none()) } inst_popfq_none :: #force_inline proc "contextless" () -> Instruction { return with_hint(Instruction{ mnemonic = .POPFQ, operand_count = 0, ops = {{}, {}, {}, {}} }, 685) } -emit_popfq_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_popfq_none()) } +emit_popfq_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_popfq_none()) } inst_nop_none :: #force_inline proc "contextless" () -> Instruction { return with_hint(Instruction{ mnemonic = .NOP, operand_count = 0, ops = {{}, {}, {}, {}} }, 686) } inst_nop_r16 :: #force_inline proc "contextless" (dst: GPR16) -> Instruction { return with_hint(Instruction{ mnemonic = .NOP, operand_count = 1, ops = {op_gpr16(dst), {}, {}, {}} }, 687) } inst_nop_m16 :: #force_inline proc "contextless" (dst: Mem16) -> Instruction { return with_hint(Instruction{ mnemonic = .NOP, operand_count = 1, ops = {op_mem(dst.mem, 2), {}, {}, {}} }, 687) } @@ -2004,215 +2004,215 @@ inst_nop_r32 :: #force_inline proc "contextless" (dst: GP inst_nop_m32 :: #force_inline proc "contextless" (dst: Mem32) -> Instruction { return with_hint(Instruction{ mnemonic = .NOP, operand_count = 1, ops = {op_mem(dst.mem, 4), {}, {}, {}} }, 688) } inst_nop_r64 :: #force_inline proc "contextless" (dst: GPR64) -> Instruction { return with_hint(Instruction{ mnemonic = .NOP, operand_count = 1, ops = {op_gpr64(dst), {}, {}, {}} }, 689) } inst_nop_m64 :: #force_inline proc "contextless" (dst: Mem64) -> Instruction { return with_hint(Instruction{ mnemonic = .NOP, operand_count = 1, ops = {op_mem(dst.mem, 8), {}, {}, {}} }, 689) } -emit_nop_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_nop_none()) } -emit_nop_r16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR16) { append(instructions, inst_nop_r16(dst)) } -emit_nop_m16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem16) { append(instructions, inst_nop_m16(dst)) } -emit_nop_r32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32) { append(instructions, inst_nop_r32(dst)) } -emit_nop_m32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem32) { append(instructions, inst_nop_m32(dst)) } -emit_nop_r64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64) { append(instructions, inst_nop_r64(dst)) } -emit_nop_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem64) { append(instructions, inst_nop_m64(dst)) } +emit_nop_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_nop_none()) } +emit_nop_r16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR16) { append_elem(instructions, inst_nop_r16(dst)) } +emit_nop_m16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem16) { append_elem(instructions, inst_nop_m16(dst)) } +emit_nop_r32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32) { append_elem(instructions, inst_nop_r32(dst)) } +emit_nop_m32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem32) { append_elem(instructions, inst_nop_m32(dst)) } +emit_nop_r64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64) { append_elem(instructions, inst_nop_r64(dst)) } +emit_nop_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem64) { append_elem(instructions, inst_nop_m64(dst)) } inst_hlt_none :: #force_inline proc "contextless" () -> Instruction { return with_hint(Instruction{ mnemonic = .HLT, operand_count = 0, ops = {{}, {}, {}, {}} }, 690) } -emit_hlt_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_hlt_none()) } +emit_hlt_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_hlt_none()) } inst_wait_none :: #force_inline proc "contextless" () -> Instruction { return with_hint(Instruction{ mnemonic = .WAIT, operand_count = 0, ops = {{}, {}, {}, {}} }, 691) } -emit_wait_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_wait_none()) } +emit_wait_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_wait_none()) } inst_lock_none :: #force_inline proc "contextless" () -> Instruction { return with_hint(Instruction{ mnemonic = .LOCK, operand_count = 0, ops = {{}, {}, {}, {}} }, 692) } -emit_lock_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_lock_none()) } +emit_lock_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_lock_none()) } inst_ud0_r32_r32 :: #force_inline proc "contextless" (dst: GPR32, src: GPR32) -> Instruction { return with_hint(Instruction{ mnemonic = .UD0, operand_count = 2, ops = {op_gpr32(dst), op_gpr32(src), {}, {}} }, 693) } inst_ud0_r32_m32 :: #force_inline proc "contextless" (dst: GPR32, src: Mem32) -> Instruction { return with_hint(Instruction{ mnemonic = .UD0, operand_count = 2, ops = {op_gpr32(dst), op_mem(src.mem, 4), {}, {}} }, 693) } -emit_ud0_r32_r32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: GPR32) { append(instructions, inst_ud0_r32_r32(dst, src)) } -emit_ud0_r32_m32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: Mem32) { append(instructions, inst_ud0_r32_m32(dst, src)) } +emit_ud0_r32_r32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: GPR32) { append_elem(instructions, inst_ud0_r32_r32(dst, src)) } +emit_ud0_r32_m32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: Mem32) { append_elem(instructions, inst_ud0_r32_m32(dst, src)) } inst_ud1_r32_r32 :: #force_inline proc "contextless" (dst: GPR32, src: GPR32) -> Instruction { return with_hint(Instruction{ mnemonic = .UD1, operand_count = 2, ops = {op_gpr32(dst), op_gpr32(src), {}, {}} }, 694) } inst_ud1_r32_m32 :: #force_inline proc "contextless" (dst: GPR32, src: Mem32) -> Instruction { return with_hint(Instruction{ mnemonic = .UD1, operand_count = 2, ops = {op_gpr32(dst), op_mem(src.mem, 4), {}, {}} }, 694) } -emit_ud1_r32_r32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: GPR32) { append(instructions, inst_ud1_r32_r32(dst, src)) } -emit_ud1_r32_m32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: Mem32) { append(instructions, inst_ud1_r32_m32(dst, src)) } +emit_ud1_r32_r32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: GPR32) { append_elem(instructions, inst_ud1_r32_r32(dst, src)) } +emit_ud1_r32_m32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: Mem32) { append_elem(instructions, inst_ud1_r32_m32(dst, src)) } inst_ud2_none :: #force_inline proc "contextless" () -> Instruction { return with_hint(Instruction{ mnemonic = .UD2, operand_count = 0, ops = {{}, {}, {}, {}} }, 695) } -emit_ud2_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_ud2_none()) } +emit_ud2_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_ud2_none()) } inst_cpuid_none :: #force_inline proc "contextless" () -> Instruction { return with_hint(Instruction{ mnemonic = .CPUID, operand_count = 0, ops = {{}, {}, {}, {}} }, 696) } -emit_cpuid_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_cpuid_none()) } +emit_cpuid_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_cpuid_none()) } inst_rdtsc_none :: #force_inline proc "contextless" () -> Instruction { return with_hint(Instruction{ mnemonic = .RDTSC, operand_count = 0, ops = {{}, {}, {}, {}} }, 697) } -emit_rdtsc_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_rdtsc_none()) } +emit_rdtsc_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_rdtsc_none()) } inst_rdtscp_none :: #force_inline proc "contextless" () -> Instruction { return with_hint(Instruction{ mnemonic = .RDTSCP, operand_count = 0, ops = {{}, {}, {}, {}} }, 698) } -emit_rdtscp_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_rdtscp_none()) } +emit_rdtscp_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_rdtscp_none()) } inst_rdpmc_none :: #force_inline proc "contextless" () -> Instruction { return with_hint(Instruction{ mnemonic = .RDPMC, operand_count = 0, ops = {{}, {}, {}, {}} }, 699) } -emit_rdpmc_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_rdpmc_none()) } +emit_rdpmc_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_rdpmc_none()) } inst_xgetbv_none :: #force_inline proc "contextless" () -> Instruction { return with_hint(Instruction{ mnemonic = .XGETBV, operand_count = 0, ops = {{}, {}, {}, {}} }, 700) } -emit_xgetbv_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_xgetbv_none()) } +emit_xgetbv_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_xgetbv_none()) } inst_xsetbv_none :: #force_inline proc "contextless" () -> Instruction { return with_hint(Instruction{ mnemonic = .XSETBV, operand_count = 0, ops = {{}, {}, {}, {}} }, 701) } -emit_xsetbv_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_xsetbv_none()) } +emit_xsetbv_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_xsetbv_none()) } inst_cbw_none :: #force_inline proc "contextless" () -> Instruction { return with_hint(Instruction{ mnemonic = .CBW, operand_count = 0, ops = {{}, {}, {}, {}} }, 702) } -emit_cbw_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_cbw_none()) } +emit_cbw_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_cbw_none()) } inst_cwde_none :: #force_inline proc "contextless" () -> Instruction { return with_hint(Instruction{ mnemonic = .CWDE, operand_count = 0, ops = {{}, {}, {}, {}} }, 703) } -emit_cwde_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_cwde_none()) } +emit_cwde_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_cwde_none()) } inst_cdqe_none :: #force_inline proc "contextless" () -> Instruction { return with_hint(Instruction{ mnemonic = .CDQE, operand_count = 0, ops = {{}, {}, {}, {}} }, 704) } -emit_cdqe_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_cdqe_none()) } +emit_cdqe_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_cdqe_none()) } inst_cwd_none :: #force_inline proc "contextless" () -> Instruction { return with_hint(Instruction{ mnemonic = .CWD, operand_count = 0, ops = {{}, {}, {}, {}} }, 705) } -emit_cwd_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_cwd_none()) } +emit_cwd_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_cwd_none()) } inst_cdq_none :: #force_inline proc "contextless" () -> Instruction { return with_hint(Instruction{ mnemonic = .CDQ, operand_count = 0, ops = {{}, {}, {}, {}} }, 706) } -emit_cdq_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_cdq_none()) } +emit_cdq_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_cdq_none()) } inst_cqo_none :: #force_inline proc "contextless" () -> Instruction { return with_hint(Instruction{ mnemonic = .CQO, operand_count = 0, ops = {{}, {}, {}, {}} }, 707) } -emit_cqo_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_cqo_none()) } +emit_cqo_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_cqo_none()) } inst_andn_r32_r32_r32 :: #force_inline proc "contextless" (dst: GPR32, src: GPR32, src2: GPR32) -> Instruction { return with_hint(Instruction{ mnemonic = .ANDN, operand_count = 3, ops = {op_gpr32(dst), op_gpr32(src), op_gpr32(src2), {}} }, 708) } inst_andn_r32_r32_m32 :: #force_inline proc "contextless" (dst: GPR32, src: GPR32, src2: Mem32) -> Instruction { return with_hint(Instruction{ mnemonic = .ANDN, operand_count = 3, ops = {op_gpr32(dst), op_gpr32(src), op_mem(src2.mem, 4), {}} }, 708) } inst_andn_r64_r64_r64 :: #force_inline proc "contextless" (dst: GPR64, src: GPR64, src2: GPR64) -> Instruction { return with_hint(Instruction{ mnemonic = .ANDN, operand_count = 3, ops = {op_gpr64(dst), op_gpr64(src), op_gpr64(src2), {}} }, 709) } inst_andn_r64_r64_m64 :: #force_inline proc "contextless" (dst: GPR64, src: GPR64, src2: Mem64) -> Instruction { return with_hint(Instruction{ mnemonic = .ANDN, operand_count = 3, ops = {op_gpr64(dst), op_gpr64(src), op_mem(src2.mem, 8), {}} }, 709) } -emit_andn_r32_r32_r32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: GPR32, src2: GPR32) { append(instructions, inst_andn_r32_r32_r32(dst, src, src2)) } -emit_andn_r32_r32_m32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: GPR32, src2: Mem32) { append(instructions, inst_andn_r32_r32_m32(dst, src, src2)) } -emit_andn_r64_r64_r64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: GPR64, src2: GPR64) { append(instructions, inst_andn_r64_r64_r64(dst, src, src2)) } -emit_andn_r64_r64_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: GPR64, src2: Mem64) { append(instructions, inst_andn_r64_r64_m64(dst, src, src2)) } +emit_andn_r32_r32_r32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: GPR32, src2: GPR32) { append_elem(instructions, inst_andn_r32_r32_r32(dst, src, src2)) } +emit_andn_r32_r32_m32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: GPR32, src2: Mem32) { append_elem(instructions, inst_andn_r32_r32_m32(dst, src, src2)) } +emit_andn_r64_r64_r64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: GPR64, src2: GPR64) { append_elem(instructions, inst_andn_r64_r64_r64(dst, src, src2)) } +emit_andn_r64_r64_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: GPR64, src2: Mem64) { append_elem(instructions, inst_andn_r64_r64_m64(dst, src, src2)) } inst_bextr_r32_r32_r32 :: #force_inline proc "contextless" (dst: GPR32, src: GPR32, src2: GPR32) -> Instruction { return with_hint(Instruction{ mnemonic = .BEXTR, operand_count = 3, ops = {op_gpr32(dst), op_gpr32(src), op_gpr32(src2), {}} }, 710) } inst_bextr_r32_m32_r32 :: #force_inline proc "contextless" (dst: GPR32, src: Mem32, src2: GPR32) -> Instruction { return with_hint(Instruction{ mnemonic = .BEXTR, operand_count = 3, ops = {op_gpr32(dst), op_mem(src.mem, 4), op_gpr32(src2), {}} }, 710) } inst_bextr_r64_r64_r64 :: #force_inline proc "contextless" (dst: GPR64, src: GPR64, src2: GPR64) -> Instruction { return with_hint(Instruction{ mnemonic = .BEXTR, operand_count = 3, ops = {op_gpr64(dst), op_gpr64(src), op_gpr64(src2), {}} }, 711) } inst_bextr_r64_m64_r64 :: #force_inline proc "contextless" (dst: GPR64, src: Mem64, src2: GPR64) -> Instruction { return with_hint(Instruction{ mnemonic = .BEXTR, operand_count = 3, ops = {op_gpr64(dst), op_mem(src.mem, 8), op_gpr64(src2), {}} }, 711) } -emit_bextr_r32_r32_r32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: GPR32, src2: GPR32) { append(instructions, inst_bextr_r32_r32_r32(dst, src, src2)) } -emit_bextr_r32_m32_r32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: Mem32, src2: GPR32) { append(instructions, inst_bextr_r32_m32_r32(dst, src, src2)) } -emit_bextr_r64_r64_r64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: GPR64, src2: GPR64) { append(instructions, inst_bextr_r64_r64_r64(dst, src, src2)) } -emit_bextr_r64_m64_r64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: Mem64, src2: GPR64) { append(instructions, inst_bextr_r64_m64_r64(dst, src, src2)) } +emit_bextr_r32_r32_r32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: GPR32, src2: GPR32) { append_elem(instructions, inst_bextr_r32_r32_r32(dst, src, src2)) } +emit_bextr_r32_m32_r32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: Mem32, src2: GPR32) { append_elem(instructions, inst_bextr_r32_m32_r32(dst, src, src2)) } +emit_bextr_r64_r64_r64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: GPR64, src2: GPR64) { append_elem(instructions, inst_bextr_r64_r64_r64(dst, src, src2)) } +emit_bextr_r64_m64_r64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: Mem64, src2: GPR64) { append_elem(instructions, inst_bextr_r64_m64_r64(dst, src, src2)) } inst_blsi_r32_r32 :: #force_inline proc "contextless" (dst: GPR32, src: GPR32) -> Instruction { return with_hint(Instruction{ mnemonic = .BLSI, operand_count = 2, ops = {op_gpr32(dst), op_gpr32(src), {}, {}} }, 712) } inst_blsi_r32_m32 :: #force_inline proc "contextless" (dst: GPR32, src: Mem32) -> Instruction { return with_hint(Instruction{ mnemonic = .BLSI, operand_count = 2, ops = {op_gpr32(dst), op_mem(src.mem, 4), {}, {}} }, 712) } inst_blsi_r64_r64 :: #force_inline proc "contextless" (dst: GPR64, src: GPR64) -> Instruction { return with_hint(Instruction{ mnemonic = .BLSI, operand_count = 2, ops = {op_gpr64(dst), op_gpr64(src), {}, {}} }, 713) } inst_blsi_r64_m64 :: #force_inline proc "contextless" (dst: GPR64, src: Mem64) -> Instruction { return with_hint(Instruction{ mnemonic = .BLSI, operand_count = 2, ops = {op_gpr64(dst), op_mem(src.mem, 8), {}, {}} }, 713) } -emit_blsi_r32_r32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: GPR32) { append(instructions, inst_blsi_r32_r32(dst, src)) } -emit_blsi_r32_m32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: Mem32) { append(instructions, inst_blsi_r32_m32(dst, src)) } -emit_blsi_r64_r64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: GPR64) { append(instructions, inst_blsi_r64_r64(dst, src)) } -emit_blsi_r64_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: Mem64) { append(instructions, inst_blsi_r64_m64(dst, src)) } +emit_blsi_r32_r32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: GPR32) { append_elem(instructions, inst_blsi_r32_r32(dst, src)) } +emit_blsi_r32_m32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: Mem32) { append_elem(instructions, inst_blsi_r32_m32(dst, src)) } +emit_blsi_r64_r64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: GPR64) { append_elem(instructions, inst_blsi_r64_r64(dst, src)) } +emit_blsi_r64_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: Mem64) { append_elem(instructions, inst_blsi_r64_m64(dst, src)) } inst_blsmsk_r32_r32 :: #force_inline proc "contextless" (dst: GPR32, src: GPR32) -> Instruction { return with_hint(Instruction{ mnemonic = .BLSMSK, operand_count = 2, ops = {op_gpr32(dst), op_gpr32(src), {}, {}} }, 714) } inst_blsmsk_r32_m32 :: #force_inline proc "contextless" (dst: GPR32, src: Mem32) -> Instruction { return with_hint(Instruction{ mnemonic = .BLSMSK, operand_count = 2, ops = {op_gpr32(dst), op_mem(src.mem, 4), {}, {}} }, 714) } inst_blsmsk_r64_r64 :: #force_inline proc "contextless" (dst: GPR64, src: GPR64) -> Instruction { return with_hint(Instruction{ mnemonic = .BLSMSK, operand_count = 2, ops = {op_gpr64(dst), op_gpr64(src), {}, {}} }, 715) } inst_blsmsk_r64_m64 :: #force_inline proc "contextless" (dst: GPR64, src: Mem64) -> Instruction { return with_hint(Instruction{ mnemonic = .BLSMSK, operand_count = 2, ops = {op_gpr64(dst), op_mem(src.mem, 8), {}, {}} }, 715) } -emit_blsmsk_r32_r32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: GPR32) { append(instructions, inst_blsmsk_r32_r32(dst, src)) } -emit_blsmsk_r32_m32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: Mem32) { append(instructions, inst_blsmsk_r32_m32(dst, src)) } -emit_blsmsk_r64_r64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: GPR64) { append(instructions, inst_blsmsk_r64_r64(dst, src)) } -emit_blsmsk_r64_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: Mem64) { append(instructions, inst_blsmsk_r64_m64(dst, src)) } +emit_blsmsk_r32_r32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: GPR32) { append_elem(instructions, inst_blsmsk_r32_r32(dst, src)) } +emit_blsmsk_r32_m32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: Mem32) { append_elem(instructions, inst_blsmsk_r32_m32(dst, src)) } +emit_blsmsk_r64_r64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: GPR64) { append_elem(instructions, inst_blsmsk_r64_r64(dst, src)) } +emit_blsmsk_r64_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: Mem64) { append_elem(instructions, inst_blsmsk_r64_m64(dst, src)) } inst_blsr_r32_r32 :: #force_inline proc "contextless" (dst: GPR32, src: GPR32) -> Instruction { return with_hint(Instruction{ mnemonic = .BLSR, operand_count = 2, ops = {op_gpr32(dst), op_gpr32(src), {}, {}} }, 716) } inst_blsr_r32_m32 :: #force_inline proc "contextless" (dst: GPR32, src: Mem32) -> Instruction { return with_hint(Instruction{ mnemonic = .BLSR, operand_count = 2, ops = {op_gpr32(dst), op_mem(src.mem, 4), {}, {}} }, 716) } inst_blsr_r64_r64 :: #force_inline proc "contextless" (dst: GPR64, src: GPR64) -> Instruction { return with_hint(Instruction{ mnemonic = .BLSR, operand_count = 2, ops = {op_gpr64(dst), op_gpr64(src), {}, {}} }, 717) } inst_blsr_r64_m64 :: #force_inline proc "contextless" (dst: GPR64, src: Mem64) -> Instruction { return with_hint(Instruction{ mnemonic = .BLSR, operand_count = 2, ops = {op_gpr64(dst), op_mem(src.mem, 8), {}, {}} }, 717) } -emit_blsr_r32_r32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: GPR32) { append(instructions, inst_blsr_r32_r32(dst, src)) } -emit_blsr_r32_m32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: Mem32) { append(instructions, inst_blsr_r32_m32(dst, src)) } -emit_blsr_r64_r64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: GPR64) { append(instructions, inst_blsr_r64_r64(dst, src)) } -emit_blsr_r64_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: Mem64) { append(instructions, inst_blsr_r64_m64(dst, src)) } +emit_blsr_r32_r32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: GPR32) { append_elem(instructions, inst_blsr_r32_r32(dst, src)) } +emit_blsr_r32_m32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: Mem32) { append_elem(instructions, inst_blsr_r32_m32(dst, src)) } +emit_blsr_r64_r64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: GPR64) { append_elem(instructions, inst_blsr_r64_r64(dst, src)) } +emit_blsr_r64_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: Mem64) { append_elem(instructions, inst_blsr_r64_m64(dst, src)) } inst_bzhi_r32_r32_r32 :: #force_inline proc "contextless" (dst: GPR32, src: GPR32, src2: GPR32) -> Instruction { return with_hint(Instruction{ mnemonic = .BZHI, operand_count = 3, ops = {op_gpr32(dst), op_gpr32(src), op_gpr32(src2), {}} }, 718) } inst_bzhi_r32_m32_r32 :: #force_inline proc "contextless" (dst: GPR32, src: Mem32, src2: GPR32) -> Instruction { return with_hint(Instruction{ mnemonic = .BZHI, operand_count = 3, ops = {op_gpr32(dst), op_mem(src.mem, 4), op_gpr32(src2), {}} }, 718) } inst_bzhi_r64_r64_r64 :: #force_inline proc "contextless" (dst: GPR64, src: GPR64, src2: GPR64) -> Instruction { return with_hint(Instruction{ mnemonic = .BZHI, operand_count = 3, ops = {op_gpr64(dst), op_gpr64(src), op_gpr64(src2), {}} }, 719) } inst_bzhi_r64_m64_r64 :: #force_inline proc "contextless" (dst: GPR64, src: Mem64, src2: GPR64) -> Instruction { return with_hint(Instruction{ mnemonic = .BZHI, operand_count = 3, ops = {op_gpr64(dst), op_mem(src.mem, 8), op_gpr64(src2), {}} }, 719) } -emit_bzhi_r32_r32_r32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: GPR32, src2: GPR32) { append(instructions, inst_bzhi_r32_r32_r32(dst, src, src2)) } -emit_bzhi_r32_m32_r32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: Mem32, src2: GPR32) { append(instructions, inst_bzhi_r32_m32_r32(dst, src, src2)) } -emit_bzhi_r64_r64_r64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: GPR64, src2: GPR64) { append(instructions, inst_bzhi_r64_r64_r64(dst, src, src2)) } -emit_bzhi_r64_m64_r64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: Mem64, src2: GPR64) { append(instructions, inst_bzhi_r64_m64_r64(dst, src, src2)) } +emit_bzhi_r32_r32_r32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: GPR32, src2: GPR32) { append_elem(instructions, inst_bzhi_r32_r32_r32(dst, src, src2)) } +emit_bzhi_r32_m32_r32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: Mem32, src2: GPR32) { append_elem(instructions, inst_bzhi_r32_m32_r32(dst, src, src2)) } +emit_bzhi_r64_r64_r64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: GPR64, src2: GPR64) { append_elem(instructions, inst_bzhi_r64_r64_r64(dst, src, src2)) } +emit_bzhi_r64_m64_r64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: Mem64, src2: GPR64) { append_elem(instructions, inst_bzhi_r64_m64_r64(dst, src, src2)) } inst_pdep_r32_r32_r32 :: #force_inline proc "contextless" (dst: GPR32, src: GPR32, src2: GPR32) -> Instruction { return with_hint(Instruction{ mnemonic = .PDEP, operand_count = 3, ops = {op_gpr32(dst), op_gpr32(src), op_gpr32(src2), {}} }, 720) } inst_pdep_r32_r32_m32 :: #force_inline proc "contextless" (dst: GPR32, src: GPR32, src2: Mem32) -> Instruction { return with_hint(Instruction{ mnemonic = .PDEP, operand_count = 3, ops = {op_gpr32(dst), op_gpr32(src), op_mem(src2.mem, 4), {}} }, 720) } inst_pdep_r64_r64_r64 :: #force_inline proc "contextless" (dst: GPR64, src: GPR64, src2: GPR64) -> Instruction { return with_hint(Instruction{ mnemonic = .PDEP, operand_count = 3, ops = {op_gpr64(dst), op_gpr64(src), op_gpr64(src2), {}} }, 721) } inst_pdep_r64_r64_m64 :: #force_inline proc "contextless" (dst: GPR64, src: GPR64, src2: Mem64) -> Instruction { return with_hint(Instruction{ mnemonic = .PDEP, operand_count = 3, ops = {op_gpr64(dst), op_gpr64(src), op_mem(src2.mem, 8), {}} }, 721) } -emit_pdep_r32_r32_r32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: GPR32, src2: GPR32) { append(instructions, inst_pdep_r32_r32_r32(dst, src, src2)) } -emit_pdep_r32_r32_m32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: GPR32, src2: Mem32) { append(instructions, inst_pdep_r32_r32_m32(dst, src, src2)) } -emit_pdep_r64_r64_r64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: GPR64, src2: GPR64) { append(instructions, inst_pdep_r64_r64_r64(dst, src, src2)) } -emit_pdep_r64_r64_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: GPR64, src2: Mem64) { append(instructions, inst_pdep_r64_r64_m64(dst, src, src2)) } +emit_pdep_r32_r32_r32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: GPR32, src2: GPR32) { append_elem(instructions, inst_pdep_r32_r32_r32(dst, src, src2)) } +emit_pdep_r32_r32_m32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: GPR32, src2: Mem32) { append_elem(instructions, inst_pdep_r32_r32_m32(dst, src, src2)) } +emit_pdep_r64_r64_r64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: GPR64, src2: GPR64) { append_elem(instructions, inst_pdep_r64_r64_r64(dst, src, src2)) } +emit_pdep_r64_r64_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: GPR64, src2: Mem64) { append_elem(instructions, inst_pdep_r64_r64_m64(dst, src, src2)) } inst_pext_r32_r32_r32 :: #force_inline proc "contextless" (dst: GPR32, src: GPR32, src2: GPR32) -> Instruction { return with_hint(Instruction{ mnemonic = .PEXT, operand_count = 3, ops = {op_gpr32(dst), op_gpr32(src), op_gpr32(src2), {}} }, 722) } inst_pext_r32_r32_m32 :: #force_inline proc "contextless" (dst: GPR32, src: GPR32, src2: Mem32) -> Instruction { return with_hint(Instruction{ mnemonic = .PEXT, operand_count = 3, ops = {op_gpr32(dst), op_gpr32(src), op_mem(src2.mem, 4), {}} }, 722) } inst_pext_r64_r64_r64 :: #force_inline proc "contextless" (dst: GPR64, src: GPR64, src2: GPR64) -> Instruction { return with_hint(Instruction{ mnemonic = .PEXT, operand_count = 3, ops = {op_gpr64(dst), op_gpr64(src), op_gpr64(src2), {}} }, 723) } inst_pext_r64_r64_m64 :: #force_inline proc "contextless" (dst: GPR64, src: GPR64, src2: Mem64) -> Instruction { return with_hint(Instruction{ mnemonic = .PEXT, operand_count = 3, ops = {op_gpr64(dst), op_gpr64(src), op_mem(src2.mem, 8), {}} }, 723) } -emit_pext_r32_r32_r32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: GPR32, src2: GPR32) { append(instructions, inst_pext_r32_r32_r32(dst, src, src2)) } -emit_pext_r32_r32_m32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: GPR32, src2: Mem32) { append(instructions, inst_pext_r32_r32_m32(dst, src, src2)) } -emit_pext_r64_r64_r64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: GPR64, src2: GPR64) { append(instructions, inst_pext_r64_r64_r64(dst, src, src2)) } -emit_pext_r64_r64_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: GPR64, src2: Mem64) { append(instructions, inst_pext_r64_r64_m64(dst, src, src2)) } +emit_pext_r32_r32_r32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: GPR32, src2: GPR32) { append_elem(instructions, inst_pext_r32_r32_r32(dst, src, src2)) } +emit_pext_r32_r32_m32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: GPR32, src2: Mem32) { append_elem(instructions, inst_pext_r32_r32_m32(dst, src, src2)) } +emit_pext_r64_r64_r64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: GPR64, src2: GPR64) { append_elem(instructions, inst_pext_r64_r64_r64(dst, src, src2)) } +emit_pext_r64_r64_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: GPR64, src2: Mem64) { append_elem(instructions, inst_pext_r64_r64_m64(dst, src, src2)) } inst_rorx_r32_r32_imm8 :: #force_inline proc "contextless" (dst: GPR32, src: GPR32, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .RORX, operand_count = 3, ops = {op_gpr32(dst), op_gpr32(src), op_imm8(imm), {}} }, 724) } inst_rorx_r32_m32_imm8 :: #force_inline proc "contextless" (dst: GPR32, src: Mem32, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .RORX, operand_count = 3, ops = {op_gpr32(dst), op_mem(src.mem, 4), op_imm8(imm), {}} }, 724) } inst_rorx_r64_r64_imm8 :: #force_inline proc "contextless" (dst: GPR64, src: GPR64, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .RORX, operand_count = 3, ops = {op_gpr64(dst), op_gpr64(src), op_imm8(imm), {}} }, 725) } inst_rorx_r64_m64_imm8 :: #force_inline proc "contextless" (dst: GPR64, src: Mem64, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .RORX, operand_count = 3, ops = {op_gpr64(dst), op_mem(src.mem, 8), op_imm8(imm), {}} }, 725) } -emit_rorx_r32_r32_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: GPR32, imm: i8) { append(instructions, inst_rorx_r32_r32_imm8(dst, src, imm)) } -emit_rorx_r32_m32_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: Mem32, imm: i8) { append(instructions, inst_rorx_r32_m32_imm8(dst, src, imm)) } -emit_rorx_r64_r64_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: GPR64, imm: i8) { append(instructions, inst_rorx_r64_r64_imm8(dst, src, imm)) } -emit_rorx_r64_m64_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: Mem64, imm: i8) { append(instructions, inst_rorx_r64_m64_imm8(dst, src, imm)) } +emit_rorx_r32_r32_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: GPR32, imm: i8) { append_elem(instructions, inst_rorx_r32_r32_imm8(dst, src, imm)) } +emit_rorx_r32_m32_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: Mem32, imm: i8) { append_elem(instructions, inst_rorx_r32_m32_imm8(dst, src, imm)) } +emit_rorx_r64_r64_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: GPR64, imm: i8) { append_elem(instructions, inst_rorx_r64_r64_imm8(dst, src, imm)) } +emit_rorx_r64_m64_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: Mem64, imm: i8) { append_elem(instructions, inst_rorx_r64_m64_imm8(dst, src, imm)) } inst_sarx_r32_r32_r32 :: #force_inline proc "contextless" (dst: GPR32, src: GPR32, src2: GPR32) -> Instruction { return with_hint(Instruction{ mnemonic = .SARX, operand_count = 3, ops = {op_gpr32(dst), op_gpr32(src), op_gpr32(src2), {}} }, 726) } inst_sarx_r32_m32_r32 :: #force_inline proc "contextless" (dst: GPR32, src: Mem32, src2: GPR32) -> Instruction { return with_hint(Instruction{ mnemonic = .SARX, operand_count = 3, ops = {op_gpr32(dst), op_mem(src.mem, 4), op_gpr32(src2), {}} }, 726) } inst_sarx_r64_r64_r64 :: #force_inline proc "contextless" (dst: GPR64, src: GPR64, src2: GPR64) -> Instruction { return with_hint(Instruction{ mnemonic = .SARX, operand_count = 3, ops = {op_gpr64(dst), op_gpr64(src), op_gpr64(src2), {}} }, 727) } inst_sarx_r64_m64_r64 :: #force_inline proc "contextless" (dst: GPR64, src: Mem64, src2: GPR64) -> Instruction { return with_hint(Instruction{ mnemonic = .SARX, operand_count = 3, ops = {op_gpr64(dst), op_mem(src.mem, 8), op_gpr64(src2), {}} }, 727) } -emit_sarx_r32_r32_r32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: GPR32, src2: GPR32) { append(instructions, inst_sarx_r32_r32_r32(dst, src, src2)) } -emit_sarx_r32_m32_r32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: Mem32, src2: GPR32) { append(instructions, inst_sarx_r32_m32_r32(dst, src, src2)) } -emit_sarx_r64_r64_r64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: GPR64, src2: GPR64) { append(instructions, inst_sarx_r64_r64_r64(dst, src, src2)) } -emit_sarx_r64_m64_r64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: Mem64, src2: GPR64) { append(instructions, inst_sarx_r64_m64_r64(dst, src, src2)) } +emit_sarx_r32_r32_r32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: GPR32, src2: GPR32) { append_elem(instructions, inst_sarx_r32_r32_r32(dst, src, src2)) } +emit_sarx_r32_m32_r32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: Mem32, src2: GPR32) { append_elem(instructions, inst_sarx_r32_m32_r32(dst, src, src2)) } +emit_sarx_r64_r64_r64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: GPR64, src2: GPR64) { append_elem(instructions, inst_sarx_r64_r64_r64(dst, src, src2)) } +emit_sarx_r64_m64_r64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: Mem64, src2: GPR64) { append_elem(instructions, inst_sarx_r64_m64_r64(dst, src, src2)) } inst_shlx_r32_r32_r32 :: #force_inline proc "contextless" (dst: GPR32, src: GPR32, src2: GPR32) -> Instruction { return with_hint(Instruction{ mnemonic = .SHLX, operand_count = 3, ops = {op_gpr32(dst), op_gpr32(src), op_gpr32(src2), {}} }, 728) } inst_shlx_r32_m32_r32 :: #force_inline proc "contextless" (dst: GPR32, src: Mem32, src2: GPR32) -> Instruction { return with_hint(Instruction{ mnemonic = .SHLX, operand_count = 3, ops = {op_gpr32(dst), op_mem(src.mem, 4), op_gpr32(src2), {}} }, 728) } inst_shlx_r64_r64_r64 :: #force_inline proc "contextless" (dst: GPR64, src: GPR64, src2: GPR64) -> Instruction { return with_hint(Instruction{ mnemonic = .SHLX, operand_count = 3, ops = {op_gpr64(dst), op_gpr64(src), op_gpr64(src2), {}} }, 729) } inst_shlx_r64_m64_r64 :: #force_inline proc "contextless" (dst: GPR64, src: Mem64, src2: GPR64) -> Instruction { return with_hint(Instruction{ mnemonic = .SHLX, operand_count = 3, ops = {op_gpr64(dst), op_mem(src.mem, 8), op_gpr64(src2), {}} }, 729) } -emit_shlx_r32_r32_r32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: GPR32, src2: GPR32) { append(instructions, inst_shlx_r32_r32_r32(dst, src, src2)) } -emit_shlx_r32_m32_r32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: Mem32, src2: GPR32) { append(instructions, inst_shlx_r32_m32_r32(dst, src, src2)) } -emit_shlx_r64_r64_r64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: GPR64, src2: GPR64) { append(instructions, inst_shlx_r64_r64_r64(dst, src, src2)) } -emit_shlx_r64_m64_r64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: Mem64, src2: GPR64) { append(instructions, inst_shlx_r64_m64_r64(dst, src, src2)) } +emit_shlx_r32_r32_r32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: GPR32, src2: GPR32) { append_elem(instructions, inst_shlx_r32_r32_r32(dst, src, src2)) } +emit_shlx_r32_m32_r32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: Mem32, src2: GPR32) { append_elem(instructions, inst_shlx_r32_m32_r32(dst, src, src2)) } +emit_shlx_r64_r64_r64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: GPR64, src2: GPR64) { append_elem(instructions, inst_shlx_r64_r64_r64(dst, src, src2)) } +emit_shlx_r64_m64_r64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: Mem64, src2: GPR64) { append_elem(instructions, inst_shlx_r64_m64_r64(dst, src, src2)) } inst_shrx_r32_r32_r32 :: #force_inline proc "contextless" (dst: GPR32, src: GPR32, src2: GPR32) -> Instruction { return with_hint(Instruction{ mnemonic = .SHRX, operand_count = 3, ops = {op_gpr32(dst), op_gpr32(src), op_gpr32(src2), {}} }, 730) } inst_shrx_r32_m32_r32 :: #force_inline proc "contextless" (dst: GPR32, src: Mem32, src2: GPR32) -> Instruction { return with_hint(Instruction{ mnemonic = .SHRX, operand_count = 3, ops = {op_gpr32(dst), op_mem(src.mem, 4), op_gpr32(src2), {}} }, 730) } inst_shrx_r64_r64_r64 :: #force_inline proc "contextless" (dst: GPR64, src: GPR64, src2: GPR64) -> Instruction { return with_hint(Instruction{ mnemonic = .SHRX, operand_count = 3, ops = {op_gpr64(dst), op_gpr64(src), op_gpr64(src2), {}} }, 731) } inst_shrx_r64_m64_r64 :: #force_inline proc "contextless" (dst: GPR64, src: Mem64, src2: GPR64) -> Instruction { return with_hint(Instruction{ mnemonic = .SHRX, operand_count = 3, ops = {op_gpr64(dst), op_mem(src.mem, 8), op_gpr64(src2), {}} }, 731) } -emit_shrx_r32_r32_r32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: GPR32, src2: GPR32) { append(instructions, inst_shrx_r32_r32_r32(dst, src, src2)) } -emit_shrx_r32_m32_r32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: Mem32, src2: GPR32) { append(instructions, inst_shrx_r32_m32_r32(dst, src, src2)) } -emit_shrx_r64_r64_r64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: GPR64, src2: GPR64) { append(instructions, inst_shrx_r64_r64_r64(dst, src, src2)) } -emit_shrx_r64_m64_r64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: Mem64, src2: GPR64) { append(instructions, inst_shrx_r64_m64_r64(dst, src, src2)) } +emit_shrx_r32_r32_r32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: GPR32, src2: GPR32) { append_elem(instructions, inst_shrx_r32_r32_r32(dst, src, src2)) } +emit_shrx_r32_m32_r32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: Mem32, src2: GPR32) { append_elem(instructions, inst_shrx_r32_m32_r32(dst, src, src2)) } +emit_shrx_r64_r64_r64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: GPR64, src2: GPR64) { append_elem(instructions, inst_shrx_r64_r64_r64(dst, src, src2)) } +emit_shrx_r64_m64_r64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: Mem64, src2: GPR64) { append_elem(instructions, inst_shrx_r64_m64_r64(dst, src, src2)) } inst_mulx_r32_r32_r32 :: #force_inline proc "contextless" (dst: GPR32, src: GPR32, src2: GPR32) -> Instruction { return with_hint(Instruction{ mnemonic = .MULX, operand_count = 3, ops = {op_gpr32(dst), op_gpr32(src), op_gpr32(src2), {}} }, 732) } inst_mulx_r32_r32_m32 :: #force_inline proc "contextless" (dst: GPR32, src: GPR32, src2: Mem32) -> Instruction { return with_hint(Instruction{ mnemonic = .MULX, operand_count = 3, ops = {op_gpr32(dst), op_gpr32(src), op_mem(src2.mem, 4), {}} }, 732) } inst_mulx_r64_r64_r64 :: #force_inline proc "contextless" (dst: GPR64, src: GPR64, src2: GPR64) -> Instruction { return with_hint(Instruction{ mnemonic = .MULX, operand_count = 3, ops = {op_gpr64(dst), op_gpr64(src), op_gpr64(src2), {}} }, 733) } inst_mulx_r64_r64_m64 :: #force_inline proc "contextless" (dst: GPR64, src: GPR64, src2: Mem64) -> Instruction { return with_hint(Instruction{ mnemonic = .MULX, operand_count = 3, ops = {op_gpr64(dst), op_gpr64(src), op_mem(src2.mem, 8), {}} }, 733) } -emit_mulx_r32_r32_r32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: GPR32, src2: GPR32) { append(instructions, inst_mulx_r32_r32_r32(dst, src, src2)) } -emit_mulx_r32_r32_m32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: GPR32, src2: Mem32) { append(instructions, inst_mulx_r32_r32_m32(dst, src, src2)) } -emit_mulx_r64_r64_r64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: GPR64, src2: GPR64) { append(instructions, inst_mulx_r64_r64_r64(dst, src, src2)) } -emit_mulx_r64_r64_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: GPR64, src2: Mem64) { append(instructions, inst_mulx_r64_r64_m64(dst, src, src2)) } +emit_mulx_r32_r32_r32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: GPR32, src2: GPR32) { append_elem(instructions, inst_mulx_r32_r32_r32(dst, src, src2)) } +emit_mulx_r32_r32_m32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: GPR32, src2: Mem32) { append_elem(instructions, inst_mulx_r32_r32_m32(dst, src, src2)) } +emit_mulx_r64_r64_r64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: GPR64, src2: GPR64) { append_elem(instructions, inst_mulx_r64_r64_r64(dst, src, src2)) } +emit_mulx_r64_r64_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: GPR64, src2: Mem64) { append_elem(instructions, inst_mulx_r64_r64_m64(dst, src, src2)) } inst_adcx_r32_r32 :: #force_inline proc "contextless" (dst: GPR32, src: GPR32) -> Instruction { return with_hint(Instruction{ mnemonic = .ADCX, operand_count = 2, ops = {op_gpr32(dst), op_gpr32(src), {}, {}} }, 734) } inst_adcx_r32_m32 :: #force_inline proc "contextless" (dst: GPR32, src: Mem32) -> Instruction { return with_hint(Instruction{ mnemonic = .ADCX, operand_count = 2, ops = {op_gpr32(dst), op_mem(src.mem, 4), {}, {}} }, 734) } inst_adcx_r64_r64 :: #force_inline proc "contextless" (dst: GPR64, src: GPR64) -> Instruction { return with_hint(Instruction{ mnemonic = .ADCX, operand_count = 2, ops = {op_gpr64(dst), op_gpr64(src), {}, {}} }, 735) } inst_adcx_r64_m64 :: #force_inline proc "contextless" (dst: GPR64, src: Mem64) -> Instruction { return with_hint(Instruction{ mnemonic = .ADCX, operand_count = 2, ops = {op_gpr64(dst), op_mem(src.mem, 8), {}, {}} }, 735) } -emit_adcx_r32_r32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: GPR32) { append(instructions, inst_adcx_r32_r32(dst, src)) } -emit_adcx_r32_m32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: Mem32) { append(instructions, inst_adcx_r32_m32(dst, src)) } -emit_adcx_r64_r64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: GPR64) { append(instructions, inst_adcx_r64_r64(dst, src)) } -emit_adcx_r64_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: Mem64) { append(instructions, inst_adcx_r64_m64(dst, src)) } +emit_adcx_r32_r32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: GPR32) { append_elem(instructions, inst_adcx_r32_r32(dst, src)) } +emit_adcx_r32_m32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: Mem32) { append_elem(instructions, inst_adcx_r32_m32(dst, src)) } +emit_adcx_r64_r64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: GPR64) { append_elem(instructions, inst_adcx_r64_r64(dst, src)) } +emit_adcx_r64_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: Mem64) { append_elem(instructions, inst_adcx_r64_m64(dst, src)) } inst_adox_r32_r32 :: #force_inline proc "contextless" (dst: GPR32, src: GPR32) -> Instruction { return with_hint(Instruction{ mnemonic = .ADOX, operand_count = 2, ops = {op_gpr32(dst), op_gpr32(src), {}, {}} }, 736) } inst_adox_r32_m32 :: #force_inline proc "contextless" (dst: GPR32, src: Mem32) -> Instruction { return with_hint(Instruction{ mnemonic = .ADOX, operand_count = 2, ops = {op_gpr32(dst), op_mem(src.mem, 4), {}, {}} }, 736) } inst_adox_r64_r64 :: #force_inline proc "contextless" (dst: GPR64, src: GPR64) -> Instruction { return with_hint(Instruction{ mnemonic = .ADOX, operand_count = 2, ops = {op_gpr64(dst), op_gpr64(src), {}, {}} }, 737) } inst_adox_r64_m64 :: #force_inline proc "contextless" (dst: GPR64, src: Mem64) -> Instruction { return with_hint(Instruction{ mnemonic = .ADOX, operand_count = 2, ops = {op_gpr64(dst), op_mem(src.mem, 8), {}, {}} }, 737) } -emit_adox_r32_r32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: GPR32) { append(instructions, inst_adox_r32_r32(dst, src)) } -emit_adox_r32_m32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: Mem32) { append(instructions, inst_adox_r32_m32(dst, src)) } -emit_adox_r64_r64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: GPR64) { append(instructions, inst_adox_r64_r64(dst, src)) } -emit_adox_r64_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: Mem64) { append(instructions, inst_adox_r64_m64(dst, src)) } +emit_adox_r32_r32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: GPR32) { append_elem(instructions, inst_adox_r32_r32(dst, src)) } +emit_adox_r32_m32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: Mem32) { append_elem(instructions, inst_adox_r32_m32(dst, src)) } +emit_adox_r64_r64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: GPR64) { append_elem(instructions, inst_adox_r64_r64(dst, src)) } +emit_adox_r64_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: Mem64) { append_elem(instructions, inst_adox_r64_m64(dst, src)) } inst_movaps_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .MOVAPS, operand_count = 2, ops = {op_xmm(dst), op_xmm(src), {}, {}} }, 738) } inst_movaps_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .MOVAPS, operand_count = 2, ops = {op_xmm(dst), op_mem(src.mem, 16), {}, {}} }, 738) } inst_movaps_m128_xmm :: #force_inline proc "contextless" (dst: Mem128, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .MOVAPS, operand_count = 2, ops = {op_mem(dst.mem, 16), op_xmm(src), {}, {}} }, 739) } -emit_movaps_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append(instructions, inst_movaps_xmm_xmm(dst, src)) } -emit_movaps_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append(instructions, inst_movaps_xmm_m128(dst, src)) } -emit_movaps_m128_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem128, src: XMM) { append(instructions, inst_movaps_m128_xmm(dst, src)) } +emit_movaps_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append_elem(instructions, inst_movaps_xmm_xmm(dst, src)) } +emit_movaps_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append_elem(instructions, inst_movaps_xmm_m128(dst, src)) } +emit_movaps_m128_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem128, src: XMM) { append_elem(instructions, inst_movaps_m128_xmm(dst, src)) } inst_movups_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .MOVUPS, operand_count = 2, ops = {op_xmm(dst), op_xmm(src), {}, {}} }, 740) } inst_movups_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .MOVUPS, operand_count = 2, ops = {op_xmm(dst), op_mem(src.mem, 16), {}, {}} }, 740) } inst_movups_m128_xmm :: #force_inline proc "contextless" (dst: Mem128, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .MOVUPS, operand_count = 2, ops = {op_mem(dst.mem, 16), op_xmm(src), {}, {}} }, 741) } -emit_movups_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append(instructions, inst_movups_xmm_xmm(dst, src)) } -emit_movups_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append(instructions, inst_movups_xmm_m128(dst, src)) } -emit_movups_m128_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem128, src: XMM) { append(instructions, inst_movups_m128_xmm(dst, src)) } +emit_movups_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append_elem(instructions, inst_movups_xmm_xmm(dst, src)) } +emit_movups_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append_elem(instructions, inst_movups_xmm_m128(dst, src)) } +emit_movups_m128_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem128, src: XMM) { append_elem(instructions, inst_movups_m128_xmm(dst, src)) } inst_movapd_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .MOVAPD, operand_count = 2, ops = {op_xmm(dst), op_xmm(src), {}, {}} }, 742) } inst_movapd_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .MOVAPD, operand_count = 2, ops = {op_xmm(dst), op_mem(src.mem, 16), {}, {}} }, 742) } inst_movapd_m128_xmm :: #force_inline proc "contextless" (dst: Mem128, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .MOVAPD, operand_count = 2, ops = {op_mem(dst.mem, 16), op_xmm(src), {}, {}} }, 743) } -emit_movapd_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append(instructions, inst_movapd_xmm_xmm(dst, src)) } -emit_movapd_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append(instructions, inst_movapd_xmm_m128(dst, src)) } -emit_movapd_m128_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem128, src: XMM) { append(instructions, inst_movapd_m128_xmm(dst, src)) } +emit_movapd_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append_elem(instructions, inst_movapd_xmm_xmm(dst, src)) } +emit_movapd_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append_elem(instructions, inst_movapd_xmm_m128(dst, src)) } +emit_movapd_m128_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem128, src: XMM) { append_elem(instructions, inst_movapd_m128_xmm(dst, src)) } inst_movupd_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .MOVUPD, operand_count = 2, ops = {op_xmm(dst), op_xmm(src), {}, {}} }, 744) } inst_movupd_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .MOVUPD, operand_count = 2, ops = {op_xmm(dst), op_mem(src.mem, 16), {}, {}} }, 744) } inst_movupd_m128_xmm :: #force_inline proc "contextless" (dst: Mem128, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .MOVUPD, operand_count = 2, ops = {op_mem(dst.mem, 16), op_xmm(src), {}, {}} }, 745) } -emit_movupd_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append(instructions, inst_movupd_xmm_xmm(dst, src)) } -emit_movupd_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append(instructions, inst_movupd_xmm_m128(dst, src)) } -emit_movupd_m128_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem128, src: XMM) { append(instructions, inst_movupd_m128_xmm(dst, src)) } +emit_movupd_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append_elem(instructions, inst_movupd_xmm_xmm(dst, src)) } +emit_movupd_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append_elem(instructions, inst_movupd_xmm_m128(dst, src)) } +emit_movupd_m128_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem128, src: XMM) { append_elem(instructions, inst_movupd_m128_xmm(dst, src)) } inst_movss_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .MOVSS, operand_count = 2, ops = {op_xmm(dst), op_xmm(src), {}, {}} }, 746) } inst_movss_xmm_m32 :: #force_inline proc "contextless" (dst: XMM, src: Mem32) -> Instruction { return with_hint(Instruction{ mnemonic = .MOVSS, operand_count = 2, ops = {op_xmm(dst), op_mem(src.mem, 4), {}, {}} }, 746) } inst_movss_m32_xmm :: #force_inline proc "contextless" (dst: Mem32, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .MOVSS, operand_count = 2, ops = {op_mem(dst.mem, 4), op_xmm(src), {}, {}} }, 747) } -emit_movss_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append(instructions, inst_movss_xmm_xmm(dst, src)) } -emit_movss_xmm_m32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem32) { append(instructions, inst_movss_xmm_m32(dst, src)) } -emit_movss_m32_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem32, src: XMM) { append(instructions, inst_movss_m32_xmm(dst, src)) } +emit_movss_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append_elem(instructions, inst_movss_xmm_xmm(dst, src)) } +emit_movss_xmm_m32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem32) { append_elem(instructions, inst_movss_xmm_m32(dst, src)) } +emit_movss_m32_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem32, src: XMM) { append_elem(instructions, inst_movss_m32_xmm(dst, src)) } inst_movdqa_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .MOVDQA, operand_count = 2, ops = {op_xmm(dst), op_xmm(src), {}, {}} }, 748) } inst_movdqa_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .MOVDQA, operand_count = 2, ops = {op_xmm(dst), op_mem(src.mem, 16), {}, {}} }, 748) } inst_movdqa_m128_xmm :: #force_inline proc "contextless" (dst: Mem128, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .MOVDQA, operand_count = 2, ops = {op_mem(dst.mem, 16), op_xmm(src), {}, {}} }, 749) } -emit_movdqa_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append(instructions, inst_movdqa_xmm_xmm(dst, src)) } -emit_movdqa_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append(instructions, inst_movdqa_xmm_m128(dst, src)) } -emit_movdqa_m128_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem128, src: XMM) { append(instructions, inst_movdqa_m128_xmm(dst, src)) } +emit_movdqa_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append_elem(instructions, inst_movdqa_xmm_xmm(dst, src)) } +emit_movdqa_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append_elem(instructions, inst_movdqa_xmm_m128(dst, src)) } +emit_movdqa_m128_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem128, src: XMM) { append_elem(instructions, inst_movdqa_m128_xmm(dst, src)) } inst_movdqu_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .MOVDQU, operand_count = 2, ops = {op_xmm(dst), op_xmm(src), {}, {}} }, 750) } inst_movdqu_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .MOVDQU, operand_count = 2, ops = {op_xmm(dst), op_mem(src.mem, 16), {}, {}} }, 750) } inst_movdqu_m128_xmm :: #force_inline proc "contextless" (dst: Mem128, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .MOVDQU, operand_count = 2, ops = {op_mem(dst.mem, 16), op_xmm(src), {}, {}} }, 751) } -emit_movdqu_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append(instructions, inst_movdqu_xmm_xmm(dst, src)) } -emit_movdqu_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append(instructions, inst_movdqu_xmm_m128(dst, src)) } -emit_movdqu_m128_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem128, src: XMM) { append(instructions, inst_movdqu_m128_xmm(dst, src)) } +emit_movdqu_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append_elem(instructions, inst_movdqu_xmm_xmm(dst, src)) } +emit_movdqu_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append_elem(instructions, inst_movdqu_xmm_m128(dst, src)) } +emit_movdqu_m128_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem128, src: XMM) { append_elem(instructions, inst_movdqu_m128_xmm(dst, src)) } inst_movq_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .MOVQ, operand_count = 2, ops = {op_xmm(dst), op_xmm(src), {}, {}} }, 752) } inst_movq_xmm_m64 :: #force_inline proc "contextless" (dst: XMM, src: Mem64) -> Instruction { return with_hint(Instruction{ mnemonic = .MOVQ, operand_count = 2, ops = {op_xmm(dst), op_mem(src.mem, 8), {}, {}} }, 752) } inst_movq_m64_xmm :: #force_inline proc "contextless" (dst: Mem64, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .MOVQ, operand_count = 2, ops = {op_mem(dst.mem, 8), op_xmm(src), {}, {}} }, 753) } @@ -2221,14 +2221,14 @@ inst_movq_mm_m64 :: #force_inline proc "contextless" (dst: MM inst_movq_m64_mm :: #force_inline proc "contextless" (dst: Mem64, src: MM) -> Instruction { return with_hint(Instruction{ mnemonic = .MOVQ, operand_count = 2, ops = {op_mem(dst.mem, 8), op_mm(src), {}, {}} }, 755) } inst_movq_r64_xmm :: #force_inline proc "contextless" (dst: GPR64, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .MOVQ, operand_count = 2, ops = {op_gpr64(dst), op_xmm(src), {}, {}} }, 756) } inst_movq_xmm_r64 :: #force_inline proc "contextless" (dst: XMM, src: GPR64) -> Instruction { return with_hint(Instruction{ mnemonic = .MOVQ, operand_count = 2, ops = {op_xmm(dst), op_gpr64(src), {}, {}} }, 757) } -emit_movq_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append(instructions, inst_movq_xmm_xmm(dst, src)) } -emit_movq_xmm_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem64) { append(instructions, inst_movq_xmm_m64(dst, src)) } -emit_movq_m64_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem64, src: XMM) { append(instructions, inst_movq_m64_xmm(dst, src)) } -emit_movq_mm_mm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: MM, src: MM) { append(instructions, inst_movq_mm_mm(dst, src)) } -emit_movq_mm_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: MM, src: Mem64) { append(instructions, inst_movq_mm_m64(dst, src)) } -emit_movq_m64_mm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem64, src: MM) { append(instructions, inst_movq_m64_mm(dst, src)) } -emit_movq_r64_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: XMM) { append(instructions, inst_movq_r64_xmm(dst, src)) } -emit_movq_xmm_r64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: GPR64) { append(instructions, inst_movq_xmm_r64(dst, src)) } +emit_movq_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append_elem(instructions, inst_movq_xmm_xmm(dst, src)) } +emit_movq_xmm_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem64) { append_elem(instructions, inst_movq_xmm_m64(dst, src)) } +emit_movq_m64_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem64, src: XMM) { append_elem(instructions, inst_movq_m64_xmm(dst, src)) } +emit_movq_mm_mm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: MM, src: MM) { append_elem(instructions, inst_movq_mm_mm(dst, src)) } +emit_movq_mm_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: MM, src: Mem64) { append_elem(instructions, inst_movq_mm_m64(dst, src)) } +emit_movq_m64_mm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem64, src: MM) { append_elem(instructions, inst_movq_m64_mm(dst, src)) } +emit_movq_r64_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: XMM) { append_elem(instructions, inst_movq_r64_xmm(dst, src)) } +emit_movq_xmm_r64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: GPR64) { append_elem(instructions, inst_movq_xmm_r64(dst, src)) } inst_movd_xmm_r32 :: #force_inline proc "contextless" (dst: XMM, src: GPR32) -> Instruction { return with_hint(Instruction{ mnemonic = .MOVD, operand_count = 2, ops = {op_xmm(dst), op_gpr32(src), {}, {}} }, 758) } inst_movd_xmm_m32 :: #force_inline proc "contextless" (dst: XMM, src: Mem32) -> Instruction { return with_hint(Instruction{ mnemonic = .MOVD, operand_count = 2, ops = {op_xmm(dst), op_mem(src.mem, 4), {}, {}} }, 758) } inst_movd_r32_xmm :: #force_inline proc "contextless" (dst: GPR32, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .MOVD, operand_count = 2, ops = {op_gpr32(dst), op_xmm(src), {}, {}} }, 759) } @@ -2237,924 +2237,924 @@ inst_movd_mm_r32 :: #force_inline proc "contextless" (dst: MM inst_movd_mm_m32 :: #force_inline proc "contextless" (dst: MM, src: Mem32) -> Instruction { return with_hint(Instruction{ mnemonic = .MOVD, operand_count = 2, ops = {op_mm(dst), op_mem(src.mem, 4), {}, {}} }, 760) } inst_movd_r32_mm :: #force_inline proc "contextless" (dst: GPR32, src: MM) -> Instruction { return with_hint(Instruction{ mnemonic = .MOVD, operand_count = 2, ops = {op_gpr32(dst), op_mm(src), {}, {}} }, 761) } inst_movd_m32_mm :: #force_inline proc "contextless" (dst: Mem32, src: MM) -> Instruction { return with_hint(Instruction{ mnemonic = .MOVD, operand_count = 2, ops = {op_mem(dst.mem, 4), op_mm(src), {}, {}} }, 761) } -emit_movd_xmm_r32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: GPR32) { append(instructions, inst_movd_xmm_r32(dst, src)) } -emit_movd_xmm_m32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem32) { append(instructions, inst_movd_xmm_m32(dst, src)) } -emit_movd_r32_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: XMM) { append(instructions, inst_movd_r32_xmm(dst, src)) } -emit_movd_m32_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem32, src: XMM) { append(instructions, inst_movd_m32_xmm(dst, src)) } -emit_movd_mm_r32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: MM, src: GPR32) { append(instructions, inst_movd_mm_r32(dst, src)) } -emit_movd_mm_m32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: MM, src: Mem32) { append(instructions, inst_movd_mm_m32(dst, src)) } -emit_movd_r32_mm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: MM) { append(instructions, inst_movd_r32_mm(dst, src)) } -emit_movd_m32_mm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem32, src: MM) { append(instructions, inst_movd_m32_mm(dst, src)) } +emit_movd_xmm_r32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: GPR32) { append_elem(instructions, inst_movd_xmm_r32(dst, src)) } +emit_movd_xmm_m32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem32) { append_elem(instructions, inst_movd_xmm_m32(dst, src)) } +emit_movd_r32_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: XMM) { append_elem(instructions, inst_movd_r32_xmm(dst, src)) } +emit_movd_m32_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem32, src: XMM) { append_elem(instructions, inst_movd_m32_xmm(dst, src)) } +emit_movd_mm_r32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: MM, src: GPR32) { append_elem(instructions, inst_movd_mm_r32(dst, src)) } +emit_movd_mm_m32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: MM, src: Mem32) { append_elem(instructions, inst_movd_mm_m32(dst, src)) } +emit_movd_r32_mm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: MM) { append_elem(instructions, inst_movd_r32_mm(dst, src)) } +emit_movd_m32_mm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem32, src: MM) { append_elem(instructions, inst_movd_m32_mm(dst, src)) } inst_movlps_xmm_m64 :: #force_inline proc "contextless" (dst: XMM, src: Mem64) -> Instruction { return with_hint(Instruction{ mnemonic = .MOVLPS, operand_count = 2, ops = {op_xmm(dst), op_mem(src.mem, 8), {}, {}} }, 762) } inst_movlps_m64_xmm :: #force_inline proc "contextless" (dst: Mem64, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .MOVLPS, operand_count = 2, ops = {op_mem(dst.mem, 8), op_xmm(src), {}, {}} }, 763) } -emit_movlps_xmm_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem64) { append(instructions, inst_movlps_xmm_m64(dst, src)) } -emit_movlps_m64_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem64, src: XMM) { append(instructions, inst_movlps_m64_xmm(dst, src)) } +emit_movlps_xmm_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem64) { append_elem(instructions, inst_movlps_xmm_m64(dst, src)) } +emit_movlps_m64_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem64, src: XMM) { append_elem(instructions, inst_movlps_m64_xmm(dst, src)) } inst_movhps_xmm_m64 :: #force_inline proc "contextless" (dst: XMM, src: Mem64) -> Instruction { return with_hint(Instruction{ mnemonic = .MOVHPS, operand_count = 2, ops = {op_xmm(dst), op_mem(src.mem, 8), {}, {}} }, 764) } inst_movhps_m64_xmm :: #force_inline proc "contextless" (dst: Mem64, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .MOVHPS, operand_count = 2, ops = {op_mem(dst.mem, 8), op_xmm(src), {}, {}} }, 765) } -emit_movhps_xmm_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem64) { append(instructions, inst_movhps_xmm_m64(dst, src)) } -emit_movhps_m64_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem64, src: XMM) { append(instructions, inst_movhps_m64_xmm(dst, src)) } +emit_movhps_xmm_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem64) { append_elem(instructions, inst_movhps_xmm_m64(dst, src)) } +emit_movhps_m64_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem64, src: XMM) { append_elem(instructions, inst_movhps_m64_xmm(dst, src)) } inst_movlpd_xmm_m64 :: #force_inline proc "contextless" (dst: XMM, src: Mem64) -> Instruction { return with_hint(Instruction{ mnemonic = .MOVLPD, operand_count = 2, ops = {op_xmm(dst), op_mem(src.mem, 8), {}, {}} }, 766) } inst_movlpd_m64_xmm :: #force_inline proc "contextless" (dst: Mem64, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .MOVLPD, operand_count = 2, ops = {op_mem(dst.mem, 8), op_xmm(src), {}, {}} }, 767) } -emit_movlpd_xmm_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem64) { append(instructions, inst_movlpd_xmm_m64(dst, src)) } -emit_movlpd_m64_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem64, src: XMM) { append(instructions, inst_movlpd_m64_xmm(dst, src)) } +emit_movlpd_xmm_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem64) { append_elem(instructions, inst_movlpd_xmm_m64(dst, src)) } +emit_movlpd_m64_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem64, src: XMM) { append_elem(instructions, inst_movlpd_m64_xmm(dst, src)) } inst_movhpd_xmm_m64 :: #force_inline proc "contextless" (dst: XMM, src: Mem64) -> Instruction { return with_hint(Instruction{ mnemonic = .MOVHPD, operand_count = 2, ops = {op_xmm(dst), op_mem(src.mem, 8), {}, {}} }, 768) } inst_movhpd_m64_xmm :: #force_inline proc "contextless" (dst: Mem64, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .MOVHPD, operand_count = 2, ops = {op_mem(dst.mem, 8), op_xmm(src), {}, {}} }, 769) } -emit_movhpd_xmm_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem64) { append(instructions, inst_movhpd_xmm_m64(dst, src)) } -emit_movhpd_m64_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem64, src: XMM) { append(instructions, inst_movhpd_m64_xmm(dst, src)) } +emit_movhpd_xmm_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem64) { append_elem(instructions, inst_movhpd_xmm_m64(dst, src)) } +emit_movhpd_m64_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem64, src: XMM) { append_elem(instructions, inst_movhpd_m64_xmm(dst, src)) } inst_movlhps_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .MOVLHPS, operand_count = 2, ops = {op_xmm(dst), op_xmm(src), {}, {}} }, 770) } -emit_movlhps_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append(instructions, inst_movlhps_xmm_xmm(dst, src)) } +emit_movlhps_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append_elem(instructions, inst_movlhps_xmm_xmm(dst, src)) } inst_movhlps_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .MOVHLPS, operand_count = 2, ops = {op_xmm(dst), op_xmm(src), {}, {}} }, 771) } -emit_movhlps_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append(instructions, inst_movhlps_xmm_xmm(dst, src)) } +emit_movhlps_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append_elem(instructions, inst_movhlps_xmm_xmm(dst, src)) } inst_movmskps_r32_xmm :: #force_inline proc "contextless" (dst: GPR32, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .MOVMSKPS, operand_count = 2, ops = {op_gpr32(dst), op_xmm(src), {}, {}} }, 772) } inst_movmskps_r64_xmm :: #force_inline proc "contextless" (dst: GPR64, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .MOVMSKPS, operand_count = 2, ops = {op_gpr64(dst), op_xmm(src), {}, {}} }, 773) } -emit_movmskps_r32_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: XMM) { append(instructions, inst_movmskps_r32_xmm(dst, src)) } -emit_movmskps_r64_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: XMM) { append(instructions, inst_movmskps_r64_xmm(dst, src)) } +emit_movmskps_r32_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: XMM) { append_elem(instructions, inst_movmskps_r32_xmm(dst, src)) } +emit_movmskps_r64_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: XMM) { append_elem(instructions, inst_movmskps_r64_xmm(dst, src)) } inst_movmskpd_r32_xmm :: #force_inline proc "contextless" (dst: GPR32, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .MOVMSKPD, operand_count = 2, ops = {op_gpr32(dst), op_xmm(src), {}, {}} }, 774) } inst_movmskpd_r64_xmm :: #force_inline proc "contextless" (dst: GPR64, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .MOVMSKPD, operand_count = 2, ops = {op_gpr64(dst), op_xmm(src), {}, {}} }, 775) } -emit_movmskpd_r32_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: XMM) { append(instructions, inst_movmskpd_r32_xmm(dst, src)) } -emit_movmskpd_r64_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: XMM) { append(instructions, inst_movmskpd_r64_xmm(dst, src)) } +emit_movmskpd_r32_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: XMM) { append_elem(instructions, inst_movmskpd_r32_xmm(dst, src)) } +emit_movmskpd_r64_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: XMM) { append_elem(instructions, inst_movmskpd_r64_xmm(dst, src)) } inst_movntps_m128_xmm :: #force_inline proc "contextless" (dst: Mem128, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .MOVNTPS, operand_count = 2, ops = {op_mem(dst.mem, 16), op_xmm(src), {}, {}} }, 776) } -emit_movntps_m128_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem128, src: XMM) { append(instructions, inst_movntps_m128_xmm(dst, src)) } +emit_movntps_m128_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem128, src: XMM) { append_elem(instructions, inst_movntps_m128_xmm(dst, src)) } inst_movntpd_m128_xmm :: #force_inline proc "contextless" (dst: Mem128, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .MOVNTPD, operand_count = 2, ops = {op_mem(dst.mem, 16), op_xmm(src), {}, {}} }, 777) } -emit_movntpd_m128_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem128, src: XMM) { append(instructions, inst_movntpd_m128_xmm(dst, src)) } +emit_movntpd_m128_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem128, src: XMM) { append_elem(instructions, inst_movntpd_m128_xmm(dst, src)) } inst_movntdq_m128_xmm :: #force_inline proc "contextless" (dst: Mem128, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .MOVNTDQ, operand_count = 2, ops = {op_mem(dst.mem, 16), op_xmm(src), {}, {}} }, 778) } -emit_movntdq_m128_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem128, src: XMM) { append(instructions, inst_movntdq_m128_xmm(dst, src)) } +emit_movntdq_m128_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem128, src: XMM) { append_elem(instructions, inst_movntdq_m128_xmm(dst, src)) } inst_movntdqa_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .MOVNTDQA, operand_count = 2, ops = {op_xmm(dst), op_mem(src.mem, 16), {}, {}} }, 779) } -emit_movntdqa_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append(instructions, inst_movntdqa_xmm_m128(dst, src)) } +emit_movntdqa_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append_elem(instructions, inst_movntdqa_xmm_m128(dst, src)) } inst_addps_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .ADDPS, operand_count = 2, ops = {op_xmm(dst), op_xmm(src), {}, {}} }, 780) } inst_addps_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .ADDPS, operand_count = 2, ops = {op_xmm(dst), op_mem(src.mem, 16), {}, {}} }, 780) } -emit_addps_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append(instructions, inst_addps_xmm_xmm(dst, src)) } -emit_addps_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append(instructions, inst_addps_xmm_m128(dst, src)) } +emit_addps_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append_elem(instructions, inst_addps_xmm_xmm(dst, src)) } +emit_addps_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append_elem(instructions, inst_addps_xmm_m128(dst, src)) } inst_addpd_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .ADDPD, operand_count = 2, ops = {op_xmm(dst), op_xmm(src), {}, {}} }, 781) } inst_addpd_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .ADDPD, operand_count = 2, ops = {op_xmm(dst), op_mem(src.mem, 16), {}, {}} }, 781) } -emit_addpd_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append(instructions, inst_addpd_xmm_xmm(dst, src)) } -emit_addpd_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append(instructions, inst_addpd_xmm_m128(dst, src)) } +emit_addpd_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append_elem(instructions, inst_addpd_xmm_xmm(dst, src)) } +emit_addpd_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append_elem(instructions, inst_addpd_xmm_m128(dst, src)) } inst_addss_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .ADDSS, operand_count = 2, ops = {op_xmm(dst), op_xmm(src), {}, {}} }, 782) } inst_addss_xmm_m32 :: #force_inline proc "contextless" (dst: XMM, src: Mem32) -> Instruction { return with_hint(Instruction{ mnemonic = .ADDSS, operand_count = 2, ops = {op_xmm(dst), op_mem(src.mem, 4), {}, {}} }, 782) } -emit_addss_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append(instructions, inst_addss_xmm_xmm(dst, src)) } -emit_addss_xmm_m32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem32) { append(instructions, inst_addss_xmm_m32(dst, src)) } +emit_addss_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append_elem(instructions, inst_addss_xmm_xmm(dst, src)) } +emit_addss_xmm_m32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem32) { append_elem(instructions, inst_addss_xmm_m32(dst, src)) } inst_addsd_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .ADDSD, operand_count = 2, ops = {op_xmm(dst), op_xmm(src), {}, {}} }, 783) } inst_addsd_xmm_m64 :: #force_inline proc "contextless" (dst: XMM, src: Mem64) -> Instruction { return with_hint(Instruction{ mnemonic = .ADDSD, operand_count = 2, ops = {op_xmm(dst), op_mem(src.mem, 8), {}, {}} }, 783) } -emit_addsd_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append(instructions, inst_addsd_xmm_xmm(dst, src)) } -emit_addsd_xmm_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem64) { append(instructions, inst_addsd_xmm_m64(dst, src)) } +emit_addsd_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append_elem(instructions, inst_addsd_xmm_xmm(dst, src)) } +emit_addsd_xmm_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem64) { append_elem(instructions, inst_addsd_xmm_m64(dst, src)) } inst_subps_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .SUBPS, operand_count = 2, ops = {op_xmm(dst), op_xmm(src), {}, {}} }, 784) } inst_subps_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .SUBPS, operand_count = 2, ops = {op_xmm(dst), op_mem(src.mem, 16), {}, {}} }, 784) } -emit_subps_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append(instructions, inst_subps_xmm_xmm(dst, src)) } -emit_subps_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append(instructions, inst_subps_xmm_m128(dst, src)) } +emit_subps_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append_elem(instructions, inst_subps_xmm_xmm(dst, src)) } +emit_subps_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append_elem(instructions, inst_subps_xmm_m128(dst, src)) } inst_subpd_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .SUBPD, operand_count = 2, ops = {op_xmm(dst), op_xmm(src), {}, {}} }, 785) } inst_subpd_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .SUBPD, operand_count = 2, ops = {op_xmm(dst), op_mem(src.mem, 16), {}, {}} }, 785) } -emit_subpd_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append(instructions, inst_subpd_xmm_xmm(dst, src)) } -emit_subpd_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append(instructions, inst_subpd_xmm_m128(dst, src)) } +emit_subpd_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append_elem(instructions, inst_subpd_xmm_xmm(dst, src)) } +emit_subpd_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append_elem(instructions, inst_subpd_xmm_m128(dst, src)) } inst_subss_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .SUBSS, operand_count = 2, ops = {op_xmm(dst), op_xmm(src), {}, {}} }, 786) } inst_subss_xmm_m32 :: #force_inline proc "contextless" (dst: XMM, src: Mem32) -> Instruction { return with_hint(Instruction{ mnemonic = .SUBSS, operand_count = 2, ops = {op_xmm(dst), op_mem(src.mem, 4), {}, {}} }, 786) } -emit_subss_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append(instructions, inst_subss_xmm_xmm(dst, src)) } -emit_subss_xmm_m32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem32) { append(instructions, inst_subss_xmm_m32(dst, src)) } +emit_subss_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append_elem(instructions, inst_subss_xmm_xmm(dst, src)) } +emit_subss_xmm_m32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem32) { append_elem(instructions, inst_subss_xmm_m32(dst, src)) } inst_subsd_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .SUBSD, operand_count = 2, ops = {op_xmm(dst), op_xmm(src), {}, {}} }, 787) } inst_subsd_xmm_m64 :: #force_inline proc "contextless" (dst: XMM, src: Mem64) -> Instruction { return with_hint(Instruction{ mnemonic = .SUBSD, operand_count = 2, ops = {op_xmm(dst), op_mem(src.mem, 8), {}, {}} }, 787) } -emit_subsd_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append(instructions, inst_subsd_xmm_xmm(dst, src)) } -emit_subsd_xmm_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem64) { append(instructions, inst_subsd_xmm_m64(dst, src)) } +emit_subsd_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append_elem(instructions, inst_subsd_xmm_xmm(dst, src)) } +emit_subsd_xmm_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem64) { append_elem(instructions, inst_subsd_xmm_m64(dst, src)) } inst_mulps_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .MULPS, operand_count = 2, ops = {op_xmm(dst), op_xmm(src), {}, {}} }, 788) } inst_mulps_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .MULPS, operand_count = 2, ops = {op_xmm(dst), op_mem(src.mem, 16), {}, {}} }, 788) } -emit_mulps_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append(instructions, inst_mulps_xmm_xmm(dst, src)) } -emit_mulps_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append(instructions, inst_mulps_xmm_m128(dst, src)) } +emit_mulps_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append_elem(instructions, inst_mulps_xmm_xmm(dst, src)) } +emit_mulps_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append_elem(instructions, inst_mulps_xmm_m128(dst, src)) } inst_mulpd_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .MULPD, operand_count = 2, ops = {op_xmm(dst), op_xmm(src), {}, {}} }, 789) } inst_mulpd_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .MULPD, operand_count = 2, ops = {op_xmm(dst), op_mem(src.mem, 16), {}, {}} }, 789) } -emit_mulpd_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append(instructions, inst_mulpd_xmm_xmm(dst, src)) } -emit_mulpd_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append(instructions, inst_mulpd_xmm_m128(dst, src)) } +emit_mulpd_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append_elem(instructions, inst_mulpd_xmm_xmm(dst, src)) } +emit_mulpd_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append_elem(instructions, inst_mulpd_xmm_m128(dst, src)) } inst_mulss_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .MULSS, operand_count = 2, ops = {op_xmm(dst), op_xmm(src), {}, {}} }, 790) } inst_mulss_xmm_m32 :: #force_inline proc "contextless" (dst: XMM, src: Mem32) -> Instruction { return with_hint(Instruction{ mnemonic = .MULSS, operand_count = 2, ops = {op_xmm(dst), op_mem(src.mem, 4), {}, {}} }, 790) } -emit_mulss_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append(instructions, inst_mulss_xmm_xmm(dst, src)) } -emit_mulss_xmm_m32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem32) { append(instructions, inst_mulss_xmm_m32(dst, src)) } +emit_mulss_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append_elem(instructions, inst_mulss_xmm_xmm(dst, src)) } +emit_mulss_xmm_m32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem32) { append_elem(instructions, inst_mulss_xmm_m32(dst, src)) } inst_mulsd_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .MULSD, operand_count = 2, ops = {op_xmm(dst), op_xmm(src), {}, {}} }, 791) } inst_mulsd_xmm_m64 :: #force_inline proc "contextless" (dst: XMM, src: Mem64) -> Instruction { return with_hint(Instruction{ mnemonic = .MULSD, operand_count = 2, ops = {op_xmm(dst), op_mem(src.mem, 8), {}, {}} }, 791) } -emit_mulsd_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append(instructions, inst_mulsd_xmm_xmm(dst, src)) } -emit_mulsd_xmm_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem64) { append(instructions, inst_mulsd_xmm_m64(dst, src)) } +emit_mulsd_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append_elem(instructions, inst_mulsd_xmm_xmm(dst, src)) } +emit_mulsd_xmm_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem64) { append_elem(instructions, inst_mulsd_xmm_m64(dst, src)) } inst_divps_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .DIVPS, operand_count = 2, ops = {op_xmm(dst), op_xmm(src), {}, {}} }, 792) } inst_divps_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .DIVPS, operand_count = 2, ops = {op_xmm(dst), op_mem(src.mem, 16), {}, {}} }, 792) } -emit_divps_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append(instructions, inst_divps_xmm_xmm(dst, src)) } -emit_divps_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append(instructions, inst_divps_xmm_m128(dst, src)) } +emit_divps_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append_elem(instructions, inst_divps_xmm_xmm(dst, src)) } +emit_divps_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append_elem(instructions, inst_divps_xmm_m128(dst, src)) } inst_divpd_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .DIVPD, operand_count = 2, ops = {op_xmm(dst), op_xmm(src), {}, {}} }, 793) } inst_divpd_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .DIVPD, operand_count = 2, ops = {op_xmm(dst), op_mem(src.mem, 16), {}, {}} }, 793) } -emit_divpd_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append(instructions, inst_divpd_xmm_xmm(dst, src)) } -emit_divpd_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append(instructions, inst_divpd_xmm_m128(dst, src)) } +emit_divpd_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append_elem(instructions, inst_divpd_xmm_xmm(dst, src)) } +emit_divpd_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append_elem(instructions, inst_divpd_xmm_m128(dst, src)) } inst_divss_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .DIVSS, operand_count = 2, ops = {op_xmm(dst), op_xmm(src), {}, {}} }, 794) } inst_divss_xmm_m32 :: #force_inline proc "contextless" (dst: XMM, src: Mem32) -> Instruction { return with_hint(Instruction{ mnemonic = .DIVSS, operand_count = 2, ops = {op_xmm(dst), op_mem(src.mem, 4), {}, {}} }, 794) } -emit_divss_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append(instructions, inst_divss_xmm_xmm(dst, src)) } -emit_divss_xmm_m32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem32) { append(instructions, inst_divss_xmm_m32(dst, src)) } +emit_divss_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append_elem(instructions, inst_divss_xmm_xmm(dst, src)) } +emit_divss_xmm_m32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem32) { append_elem(instructions, inst_divss_xmm_m32(dst, src)) } inst_divsd_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .DIVSD, operand_count = 2, ops = {op_xmm(dst), op_xmm(src), {}, {}} }, 795) } inst_divsd_xmm_m64 :: #force_inline proc "contextless" (dst: XMM, src: Mem64) -> Instruction { return with_hint(Instruction{ mnemonic = .DIVSD, operand_count = 2, ops = {op_xmm(dst), op_mem(src.mem, 8), {}, {}} }, 795) } -emit_divsd_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append(instructions, inst_divsd_xmm_xmm(dst, src)) } -emit_divsd_xmm_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem64) { append(instructions, inst_divsd_xmm_m64(dst, src)) } +emit_divsd_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append_elem(instructions, inst_divsd_xmm_xmm(dst, src)) } +emit_divsd_xmm_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem64) { append_elem(instructions, inst_divsd_xmm_m64(dst, src)) } inst_sqrtps_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .SQRTPS, operand_count = 2, ops = {op_xmm(dst), op_xmm(src), {}, {}} }, 796) } inst_sqrtps_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .SQRTPS, operand_count = 2, ops = {op_xmm(dst), op_mem(src.mem, 16), {}, {}} }, 796) } -emit_sqrtps_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append(instructions, inst_sqrtps_xmm_xmm(dst, src)) } -emit_sqrtps_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append(instructions, inst_sqrtps_xmm_m128(dst, src)) } +emit_sqrtps_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append_elem(instructions, inst_sqrtps_xmm_xmm(dst, src)) } +emit_sqrtps_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append_elem(instructions, inst_sqrtps_xmm_m128(dst, src)) } inst_sqrtpd_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .SQRTPD, operand_count = 2, ops = {op_xmm(dst), op_xmm(src), {}, {}} }, 797) } inst_sqrtpd_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .SQRTPD, operand_count = 2, ops = {op_xmm(dst), op_mem(src.mem, 16), {}, {}} }, 797) } -emit_sqrtpd_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append(instructions, inst_sqrtpd_xmm_xmm(dst, src)) } -emit_sqrtpd_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append(instructions, inst_sqrtpd_xmm_m128(dst, src)) } +emit_sqrtpd_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append_elem(instructions, inst_sqrtpd_xmm_xmm(dst, src)) } +emit_sqrtpd_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append_elem(instructions, inst_sqrtpd_xmm_m128(dst, src)) } inst_sqrtss_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .SQRTSS, operand_count = 2, ops = {op_xmm(dst), op_xmm(src), {}, {}} }, 798) } inst_sqrtss_xmm_m32 :: #force_inline proc "contextless" (dst: XMM, src: Mem32) -> Instruction { return with_hint(Instruction{ mnemonic = .SQRTSS, operand_count = 2, ops = {op_xmm(dst), op_mem(src.mem, 4), {}, {}} }, 798) } -emit_sqrtss_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append(instructions, inst_sqrtss_xmm_xmm(dst, src)) } -emit_sqrtss_xmm_m32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem32) { append(instructions, inst_sqrtss_xmm_m32(dst, src)) } +emit_sqrtss_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append_elem(instructions, inst_sqrtss_xmm_xmm(dst, src)) } +emit_sqrtss_xmm_m32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem32) { append_elem(instructions, inst_sqrtss_xmm_m32(dst, src)) } inst_sqrtsd_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .SQRTSD, operand_count = 2, ops = {op_xmm(dst), op_xmm(src), {}, {}} }, 799) } inst_sqrtsd_xmm_m64 :: #force_inline proc "contextless" (dst: XMM, src: Mem64) -> Instruction { return with_hint(Instruction{ mnemonic = .SQRTSD, operand_count = 2, ops = {op_xmm(dst), op_mem(src.mem, 8), {}, {}} }, 799) } -emit_sqrtsd_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append(instructions, inst_sqrtsd_xmm_xmm(dst, src)) } -emit_sqrtsd_xmm_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem64) { append(instructions, inst_sqrtsd_xmm_m64(dst, src)) } +emit_sqrtsd_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append_elem(instructions, inst_sqrtsd_xmm_xmm(dst, src)) } +emit_sqrtsd_xmm_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem64) { append_elem(instructions, inst_sqrtsd_xmm_m64(dst, src)) } inst_rcpps_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .RCPPS, operand_count = 2, ops = {op_xmm(dst), op_xmm(src), {}, {}} }, 800) } inst_rcpps_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .RCPPS, operand_count = 2, ops = {op_xmm(dst), op_mem(src.mem, 16), {}, {}} }, 800) } -emit_rcpps_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append(instructions, inst_rcpps_xmm_xmm(dst, src)) } -emit_rcpps_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append(instructions, inst_rcpps_xmm_m128(dst, src)) } +emit_rcpps_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append_elem(instructions, inst_rcpps_xmm_xmm(dst, src)) } +emit_rcpps_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append_elem(instructions, inst_rcpps_xmm_m128(dst, src)) } inst_rcpss_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .RCPSS, operand_count = 2, ops = {op_xmm(dst), op_xmm(src), {}, {}} }, 801) } inst_rcpss_xmm_m32 :: #force_inline proc "contextless" (dst: XMM, src: Mem32) -> Instruction { return with_hint(Instruction{ mnemonic = .RCPSS, operand_count = 2, ops = {op_xmm(dst), op_mem(src.mem, 4), {}, {}} }, 801) } -emit_rcpss_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append(instructions, inst_rcpss_xmm_xmm(dst, src)) } -emit_rcpss_xmm_m32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem32) { append(instructions, inst_rcpss_xmm_m32(dst, src)) } +emit_rcpss_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append_elem(instructions, inst_rcpss_xmm_xmm(dst, src)) } +emit_rcpss_xmm_m32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem32) { append_elem(instructions, inst_rcpss_xmm_m32(dst, src)) } inst_rsqrtps_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .RSQRTPS, operand_count = 2, ops = {op_xmm(dst), op_xmm(src), {}, {}} }, 802) } inst_rsqrtps_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .RSQRTPS, operand_count = 2, ops = {op_xmm(dst), op_mem(src.mem, 16), {}, {}} }, 802) } -emit_rsqrtps_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append(instructions, inst_rsqrtps_xmm_xmm(dst, src)) } -emit_rsqrtps_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append(instructions, inst_rsqrtps_xmm_m128(dst, src)) } +emit_rsqrtps_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append_elem(instructions, inst_rsqrtps_xmm_xmm(dst, src)) } +emit_rsqrtps_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append_elem(instructions, inst_rsqrtps_xmm_m128(dst, src)) } inst_rsqrtss_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .RSQRTSS, operand_count = 2, ops = {op_xmm(dst), op_xmm(src), {}, {}} }, 803) } inst_rsqrtss_xmm_m32 :: #force_inline proc "contextless" (dst: XMM, src: Mem32) -> Instruction { return with_hint(Instruction{ mnemonic = .RSQRTSS, operand_count = 2, ops = {op_xmm(dst), op_mem(src.mem, 4), {}, {}} }, 803) } -emit_rsqrtss_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append(instructions, inst_rsqrtss_xmm_xmm(dst, src)) } -emit_rsqrtss_xmm_m32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem32) { append(instructions, inst_rsqrtss_xmm_m32(dst, src)) } +emit_rsqrtss_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append_elem(instructions, inst_rsqrtss_xmm_xmm(dst, src)) } +emit_rsqrtss_xmm_m32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem32) { append_elem(instructions, inst_rsqrtss_xmm_m32(dst, src)) } inst_maxps_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .MAXPS, operand_count = 2, ops = {op_xmm(dst), op_xmm(src), {}, {}} }, 804) } inst_maxps_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .MAXPS, operand_count = 2, ops = {op_xmm(dst), op_mem(src.mem, 16), {}, {}} }, 804) } -emit_maxps_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append(instructions, inst_maxps_xmm_xmm(dst, src)) } -emit_maxps_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append(instructions, inst_maxps_xmm_m128(dst, src)) } +emit_maxps_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append_elem(instructions, inst_maxps_xmm_xmm(dst, src)) } +emit_maxps_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append_elem(instructions, inst_maxps_xmm_m128(dst, src)) } inst_maxpd_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .MAXPD, operand_count = 2, ops = {op_xmm(dst), op_xmm(src), {}, {}} }, 805) } inst_maxpd_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .MAXPD, operand_count = 2, ops = {op_xmm(dst), op_mem(src.mem, 16), {}, {}} }, 805) } -emit_maxpd_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append(instructions, inst_maxpd_xmm_xmm(dst, src)) } -emit_maxpd_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append(instructions, inst_maxpd_xmm_m128(dst, src)) } +emit_maxpd_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append_elem(instructions, inst_maxpd_xmm_xmm(dst, src)) } +emit_maxpd_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append_elem(instructions, inst_maxpd_xmm_m128(dst, src)) } inst_maxss_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .MAXSS, operand_count = 2, ops = {op_xmm(dst), op_xmm(src), {}, {}} }, 806) } inst_maxss_xmm_m32 :: #force_inline proc "contextless" (dst: XMM, src: Mem32) -> Instruction { return with_hint(Instruction{ mnemonic = .MAXSS, operand_count = 2, ops = {op_xmm(dst), op_mem(src.mem, 4), {}, {}} }, 806) } -emit_maxss_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append(instructions, inst_maxss_xmm_xmm(dst, src)) } -emit_maxss_xmm_m32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem32) { append(instructions, inst_maxss_xmm_m32(dst, src)) } +emit_maxss_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append_elem(instructions, inst_maxss_xmm_xmm(dst, src)) } +emit_maxss_xmm_m32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem32) { append_elem(instructions, inst_maxss_xmm_m32(dst, src)) } inst_maxsd_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .MAXSD, operand_count = 2, ops = {op_xmm(dst), op_xmm(src), {}, {}} }, 807) } inst_maxsd_xmm_m64 :: #force_inline proc "contextless" (dst: XMM, src: Mem64) -> Instruction { return with_hint(Instruction{ mnemonic = .MAXSD, operand_count = 2, ops = {op_xmm(dst), op_mem(src.mem, 8), {}, {}} }, 807) } -emit_maxsd_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append(instructions, inst_maxsd_xmm_xmm(dst, src)) } -emit_maxsd_xmm_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem64) { append(instructions, inst_maxsd_xmm_m64(dst, src)) } +emit_maxsd_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append_elem(instructions, inst_maxsd_xmm_xmm(dst, src)) } +emit_maxsd_xmm_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem64) { append_elem(instructions, inst_maxsd_xmm_m64(dst, src)) } inst_minps_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .MINPS, operand_count = 2, ops = {op_xmm(dst), op_xmm(src), {}, {}} }, 808) } inst_minps_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .MINPS, operand_count = 2, ops = {op_xmm(dst), op_mem(src.mem, 16), {}, {}} }, 808) } -emit_minps_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append(instructions, inst_minps_xmm_xmm(dst, src)) } -emit_minps_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append(instructions, inst_minps_xmm_m128(dst, src)) } +emit_minps_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append_elem(instructions, inst_minps_xmm_xmm(dst, src)) } +emit_minps_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append_elem(instructions, inst_minps_xmm_m128(dst, src)) } inst_minpd_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .MINPD, operand_count = 2, ops = {op_xmm(dst), op_xmm(src), {}, {}} }, 809) } inst_minpd_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .MINPD, operand_count = 2, ops = {op_xmm(dst), op_mem(src.mem, 16), {}, {}} }, 809) } -emit_minpd_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append(instructions, inst_minpd_xmm_xmm(dst, src)) } -emit_minpd_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append(instructions, inst_minpd_xmm_m128(dst, src)) } +emit_minpd_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append_elem(instructions, inst_minpd_xmm_xmm(dst, src)) } +emit_minpd_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append_elem(instructions, inst_minpd_xmm_m128(dst, src)) } inst_minss_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .MINSS, operand_count = 2, ops = {op_xmm(dst), op_xmm(src), {}, {}} }, 810) } inst_minss_xmm_m32 :: #force_inline proc "contextless" (dst: XMM, src: Mem32) -> Instruction { return with_hint(Instruction{ mnemonic = .MINSS, operand_count = 2, ops = {op_xmm(dst), op_mem(src.mem, 4), {}, {}} }, 810) } -emit_minss_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append(instructions, inst_minss_xmm_xmm(dst, src)) } -emit_minss_xmm_m32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem32) { append(instructions, inst_minss_xmm_m32(dst, src)) } +emit_minss_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append_elem(instructions, inst_minss_xmm_xmm(dst, src)) } +emit_minss_xmm_m32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem32) { append_elem(instructions, inst_minss_xmm_m32(dst, src)) } inst_minsd_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .MINSD, operand_count = 2, ops = {op_xmm(dst), op_xmm(src), {}, {}} }, 811) } inst_minsd_xmm_m64 :: #force_inline proc "contextless" (dst: XMM, src: Mem64) -> Instruction { return with_hint(Instruction{ mnemonic = .MINSD, operand_count = 2, ops = {op_xmm(dst), op_mem(src.mem, 8), {}, {}} }, 811) } -emit_minsd_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append(instructions, inst_minsd_xmm_xmm(dst, src)) } -emit_minsd_xmm_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem64) { append(instructions, inst_minsd_xmm_m64(dst, src)) } +emit_minsd_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append_elem(instructions, inst_minsd_xmm_xmm(dst, src)) } +emit_minsd_xmm_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem64) { append_elem(instructions, inst_minsd_xmm_m64(dst, src)) } inst_andps_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .ANDPS, operand_count = 2, ops = {op_xmm(dst), op_xmm(src), {}, {}} }, 812) } inst_andps_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .ANDPS, operand_count = 2, ops = {op_xmm(dst), op_mem(src.mem, 16), {}, {}} }, 812) } -emit_andps_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append(instructions, inst_andps_xmm_xmm(dst, src)) } -emit_andps_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append(instructions, inst_andps_xmm_m128(dst, src)) } +emit_andps_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append_elem(instructions, inst_andps_xmm_xmm(dst, src)) } +emit_andps_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append_elem(instructions, inst_andps_xmm_m128(dst, src)) } inst_andpd_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .ANDPD, operand_count = 2, ops = {op_xmm(dst), op_xmm(src), {}, {}} }, 813) } inst_andpd_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .ANDPD, operand_count = 2, ops = {op_xmm(dst), op_mem(src.mem, 16), {}, {}} }, 813) } -emit_andpd_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append(instructions, inst_andpd_xmm_xmm(dst, src)) } -emit_andpd_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append(instructions, inst_andpd_xmm_m128(dst, src)) } +emit_andpd_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append_elem(instructions, inst_andpd_xmm_xmm(dst, src)) } +emit_andpd_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append_elem(instructions, inst_andpd_xmm_m128(dst, src)) } inst_andnps_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .ANDNPS, operand_count = 2, ops = {op_xmm(dst), op_xmm(src), {}, {}} }, 814) } inst_andnps_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .ANDNPS, operand_count = 2, ops = {op_xmm(dst), op_mem(src.mem, 16), {}, {}} }, 814) } -emit_andnps_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append(instructions, inst_andnps_xmm_xmm(dst, src)) } -emit_andnps_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append(instructions, inst_andnps_xmm_m128(dst, src)) } +emit_andnps_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append_elem(instructions, inst_andnps_xmm_xmm(dst, src)) } +emit_andnps_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append_elem(instructions, inst_andnps_xmm_m128(dst, src)) } inst_andnpd_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .ANDNPD, operand_count = 2, ops = {op_xmm(dst), op_xmm(src), {}, {}} }, 815) } inst_andnpd_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .ANDNPD, operand_count = 2, ops = {op_xmm(dst), op_mem(src.mem, 16), {}, {}} }, 815) } -emit_andnpd_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append(instructions, inst_andnpd_xmm_xmm(dst, src)) } -emit_andnpd_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append(instructions, inst_andnpd_xmm_m128(dst, src)) } +emit_andnpd_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append_elem(instructions, inst_andnpd_xmm_xmm(dst, src)) } +emit_andnpd_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append_elem(instructions, inst_andnpd_xmm_m128(dst, src)) } inst_orps_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .ORPS, operand_count = 2, ops = {op_xmm(dst), op_xmm(src), {}, {}} }, 816) } inst_orps_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .ORPS, operand_count = 2, ops = {op_xmm(dst), op_mem(src.mem, 16), {}, {}} }, 816) } -emit_orps_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append(instructions, inst_orps_xmm_xmm(dst, src)) } -emit_orps_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append(instructions, inst_orps_xmm_m128(dst, src)) } +emit_orps_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append_elem(instructions, inst_orps_xmm_xmm(dst, src)) } +emit_orps_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append_elem(instructions, inst_orps_xmm_m128(dst, src)) } inst_orpd_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .ORPD, operand_count = 2, ops = {op_xmm(dst), op_xmm(src), {}, {}} }, 817) } inst_orpd_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .ORPD, operand_count = 2, ops = {op_xmm(dst), op_mem(src.mem, 16), {}, {}} }, 817) } -emit_orpd_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append(instructions, inst_orpd_xmm_xmm(dst, src)) } -emit_orpd_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append(instructions, inst_orpd_xmm_m128(dst, src)) } +emit_orpd_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append_elem(instructions, inst_orpd_xmm_xmm(dst, src)) } +emit_orpd_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append_elem(instructions, inst_orpd_xmm_m128(dst, src)) } inst_xorps_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .XORPS, operand_count = 2, ops = {op_xmm(dst), op_xmm(src), {}, {}} }, 818) } inst_xorps_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .XORPS, operand_count = 2, ops = {op_xmm(dst), op_mem(src.mem, 16), {}, {}} }, 818) } -emit_xorps_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append(instructions, inst_xorps_xmm_xmm(dst, src)) } -emit_xorps_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append(instructions, inst_xorps_xmm_m128(dst, src)) } +emit_xorps_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append_elem(instructions, inst_xorps_xmm_xmm(dst, src)) } +emit_xorps_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append_elem(instructions, inst_xorps_xmm_m128(dst, src)) } inst_xorpd_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .XORPD, operand_count = 2, ops = {op_xmm(dst), op_xmm(src), {}, {}} }, 819) } inst_xorpd_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .XORPD, operand_count = 2, ops = {op_xmm(dst), op_mem(src.mem, 16), {}, {}} }, 819) } -emit_xorpd_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append(instructions, inst_xorpd_xmm_xmm(dst, src)) } -emit_xorpd_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append(instructions, inst_xorpd_xmm_m128(dst, src)) } +emit_xorpd_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append_elem(instructions, inst_xorpd_xmm_xmm(dst, src)) } +emit_xorpd_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append_elem(instructions, inst_xorpd_xmm_m128(dst, src)) } inst_cmpps_xmm_xmm_imm8 :: #force_inline proc "contextless" (dst: XMM, src: XMM, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .CMPPS, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_imm8(imm), {}} }, 820) } inst_cmpps_xmm_m128_imm8 :: #force_inline proc "contextless" (dst: XMM, src: Mem128, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .CMPPS, operand_count = 3, ops = {op_xmm(dst), op_mem(src.mem, 16), op_imm8(imm), {}} }, 820) } -emit_cmpps_xmm_xmm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, imm: i8) { append(instructions, inst_cmpps_xmm_xmm_imm8(dst, src, imm)) } -emit_cmpps_xmm_m128_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128, imm: i8) { append(instructions, inst_cmpps_xmm_m128_imm8(dst, src, imm)) } +emit_cmpps_xmm_xmm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, imm: i8) { append_elem(instructions, inst_cmpps_xmm_xmm_imm8(dst, src, imm)) } +emit_cmpps_xmm_m128_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128, imm: i8) { append_elem(instructions, inst_cmpps_xmm_m128_imm8(dst, src, imm)) } inst_cmppd_xmm_xmm_imm8 :: #force_inline proc "contextless" (dst: XMM, src: XMM, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .CMPPD, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_imm8(imm), {}} }, 821) } inst_cmppd_xmm_m128_imm8 :: #force_inline proc "contextless" (dst: XMM, src: Mem128, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .CMPPD, operand_count = 3, ops = {op_xmm(dst), op_mem(src.mem, 16), op_imm8(imm), {}} }, 821) } -emit_cmppd_xmm_xmm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, imm: i8) { append(instructions, inst_cmppd_xmm_xmm_imm8(dst, src, imm)) } -emit_cmppd_xmm_m128_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128, imm: i8) { append(instructions, inst_cmppd_xmm_m128_imm8(dst, src, imm)) } +emit_cmppd_xmm_xmm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, imm: i8) { append_elem(instructions, inst_cmppd_xmm_xmm_imm8(dst, src, imm)) } +emit_cmppd_xmm_m128_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128, imm: i8) { append_elem(instructions, inst_cmppd_xmm_m128_imm8(dst, src, imm)) } inst_cmpss_xmm_xmm_imm8 :: #force_inline proc "contextless" (dst: XMM, src: XMM, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .CMPSS, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_imm8(imm), {}} }, 822) } inst_cmpss_xmm_m32_imm8 :: #force_inline proc "contextless" (dst: XMM, src: Mem32, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .CMPSS, operand_count = 3, ops = {op_xmm(dst), op_mem(src.mem, 4), op_imm8(imm), {}} }, 822) } -emit_cmpss_xmm_xmm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, imm: i8) { append(instructions, inst_cmpss_xmm_xmm_imm8(dst, src, imm)) } -emit_cmpss_xmm_m32_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem32, imm: i8) { append(instructions, inst_cmpss_xmm_m32_imm8(dst, src, imm)) } +emit_cmpss_xmm_xmm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, imm: i8) { append_elem(instructions, inst_cmpss_xmm_xmm_imm8(dst, src, imm)) } +emit_cmpss_xmm_m32_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem32, imm: i8) { append_elem(instructions, inst_cmpss_xmm_m32_imm8(dst, src, imm)) } inst_comiss_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .COMISS, operand_count = 2, ops = {op_xmm(dst), op_xmm(src), {}, {}} }, 823) } inst_comiss_xmm_m32 :: #force_inline proc "contextless" (dst: XMM, src: Mem32) -> Instruction { return with_hint(Instruction{ mnemonic = .COMISS, operand_count = 2, ops = {op_xmm(dst), op_mem(src.mem, 4), {}, {}} }, 823) } -emit_comiss_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append(instructions, inst_comiss_xmm_xmm(dst, src)) } -emit_comiss_xmm_m32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem32) { append(instructions, inst_comiss_xmm_m32(dst, src)) } +emit_comiss_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append_elem(instructions, inst_comiss_xmm_xmm(dst, src)) } +emit_comiss_xmm_m32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem32) { append_elem(instructions, inst_comiss_xmm_m32(dst, src)) } inst_comisd_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .COMISD, operand_count = 2, ops = {op_xmm(dst), op_xmm(src), {}, {}} }, 824) } inst_comisd_xmm_m64 :: #force_inline proc "contextless" (dst: XMM, src: Mem64) -> Instruction { return with_hint(Instruction{ mnemonic = .COMISD, operand_count = 2, ops = {op_xmm(dst), op_mem(src.mem, 8), {}, {}} }, 824) } -emit_comisd_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append(instructions, inst_comisd_xmm_xmm(dst, src)) } -emit_comisd_xmm_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem64) { append(instructions, inst_comisd_xmm_m64(dst, src)) } +emit_comisd_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append_elem(instructions, inst_comisd_xmm_xmm(dst, src)) } +emit_comisd_xmm_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem64) { append_elem(instructions, inst_comisd_xmm_m64(dst, src)) } inst_ucomiss_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .UCOMISS, operand_count = 2, ops = {op_xmm(dst), op_xmm(src), {}, {}} }, 825) } inst_ucomiss_xmm_m32 :: #force_inline proc "contextless" (dst: XMM, src: Mem32) -> Instruction { return with_hint(Instruction{ mnemonic = .UCOMISS, operand_count = 2, ops = {op_xmm(dst), op_mem(src.mem, 4), {}, {}} }, 825) } -emit_ucomiss_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append(instructions, inst_ucomiss_xmm_xmm(dst, src)) } -emit_ucomiss_xmm_m32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem32) { append(instructions, inst_ucomiss_xmm_m32(dst, src)) } +emit_ucomiss_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append_elem(instructions, inst_ucomiss_xmm_xmm(dst, src)) } +emit_ucomiss_xmm_m32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem32) { append_elem(instructions, inst_ucomiss_xmm_m32(dst, src)) } inst_ucomisd_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .UCOMISD, operand_count = 2, ops = {op_xmm(dst), op_xmm(src), {}, {}} }, 826) } inst_ucomisd_xmm_m64 :: #force_inline proc "contextless" (dst: XMM, src: Mem64) -> Instruction { return with_hint(Instruction{ mnemonic = .UCOMISD, operand_count = 2, ops = {op_xmm(dst), op_mem(src.mem, 8), {}, {}} }, 826) } -emit_ucomisd_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append(instructions, inst_ucomisd_xmm_xmm(dst, src)) } -emit_ucomisd_xmm_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem64) { append(instructions, inst_ucomisd_xmm_m64(dst, src)) } +emit_ucomisd_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append_elem(instructions, inst_ucomisd_xmm_xmm(dst, src)) } +emit_ucomisd_xmm_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem64) { append_elem(instructions, inst_ucomisd_xmm_m64(dst, src)) } inst_shufps_xmm_xmm_imm8 :: #force_inline proc "contextless" (dst: XMM, src: XMM, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .SHUFPS, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_imm8(imm), {}} }, 827) } inst_shufps_xmm_m128_imm8 :: #force_inline proc "contextless" (dst: XMM, src: Mem128, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .SHUFPS, operand_count = 3, ops = {op_xmm(dst), op_mem(src.mem, 16), op_imm8(imm), {}} }, 827) } -emit_shufps_xmm_xmm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, imm: i8) { append(instructions, inst_shufps_xmm_xmm_imm8(dst, src, imm)) } -emit_shufps_xmm_m128_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128, imm: i8) { append(instructions, inst_shufps_xmm_m128_imm8(dst, src, imm)) } +emit_shufps_xmm_xmm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, imm: i8) { append_elem(instructions, inst_shufps_xmm_xmm_imm8(dst, src, imm)) } +emit_shufps_xmm_m128_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128, imm: i8) { append_elem(instructions, inst_shufps_xmm_m128_imm8(dst, src, imm)) } inst_shufpd_xmm_xmm_imm8 :: #force_inline proc "contextless" (dst: XMM, src: XMM, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .SHUFPD, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_imm8(imm), {}} }, 828) } inst_shufpd_xmm_m128_imm8 :: #force_inline proc "contextless" (dst: XMM, src: Mem128, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .SHUFPD, operand_count = 3, ops = {op_xmm(dst), op_mem(src.mem, 16), op_imm8(imm), {}} }, 828) } -emit_shufpd_xmm_xmm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, imm: i8) { append(instructions, inst_shufpd_xmm_xmm_imm8(dst, src, imm)) } -emit_shufpd_xmm_m128_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128, imm: i8) { append(instructions, inst_shufpd_xmm_m128_imm8(dst, src, imm)) } +emit_shufpd_xmm_xmm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, imm: i8) { append_elem(instructions, inst_shufpd_xmm_xmm_imm8(dst, src, imm)) } +emit_shufpd_xmm_m128_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128, imm: i8) { append_elem(instructions, inst_shufpd_xmm_m128_imm8(dst, src, imm)) } inst_unpcklps_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .UNPCKLPS, operand_count = 2, ops = {op_xmm(dst), op_xmm(src), {}, {}} }, 829) } inst_unpcklps_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .UNPCKLPS, operand_count = 2, ops = {op_xmm(dst), op_mem(src.mem, 16), {}, {}} }, 829) } -emit_unpcklps_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append(instructions, inst_unpcklps_xmm_xmm(dst, src)) } -emit_unpcklps_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append(instructions, inst_unpcklps_xmm_m128(dst, src)) } +emit_unpcklps_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append_elem(instructions, inst_unpcklps_xmm_xmm(dst, src)) } +emit_unpcklps_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append_elem(instructions, inst_unpcklps_xmm_m128(dst, src)) } inst_unpckhps_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .UNPCKHPS, operand_count = 2, ops = {op_xmm(dst), op_xmm(src), {}, {}} }, 830) } inst_unpckhps_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .UNPCKHPS, operand_count = 2, ops = {op_xmm(dst), op_mem(src.mem, 16), {}, {}} }, 830) } -emit_unpckhps_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append(instructions, inst_unpckhps_xmm_xmm(dst, src)) } -emit_unpckhps_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append(instructions, inst_unpckhps_xmm_m128(dst, src)) } +emit_unpckhps_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append_elem(instructions, inst_unpckhps_xmm_xmm(dst, src)) } +emit_unpckhps_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append_elem(instructions, inst_unpckhps_xmm_m128(dst, src)) } inst_unpcklpd_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .UNPCKLPD, operand_count = 2, ops = {op_xmm(dst), op_xmm(src), {}, {}} }, 831) } inst_unpcklpd_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .UNPCKLPD, operand_count = 2, ops = {op_xmm(dst), op_mem(src.mem, 16), {}, {}} }, 831) } -emit_unpcklpd_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append(instructions, inst_unpcklpd_xmm_xmm(dst, src)) } -emit_unpcklpd_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append(instructions, inst_unpcklpd_xmm_m128(dst, src)) } +emit_unpcklpd_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append_elem(instructions, inst_unpcklpd_xmm_xmm(dst, src)) } +emit_unpcklpd_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append_elem(instructions, inst_unpcklpd_xmm_m128(dst, src)) } inst_unpckhpd_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .UNPCKHPD, operand_count = 2, ops = {op_xmm(dst), op_xmm(src), {}, {}} }, 832) } inst_unpckhpd_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .UNPCKHPD, operand_count = 2, ops = {op_xmm(dst), op_mem(src.mem, 16), {}, {}} }, 832) } -emit_unpckhpd_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append(instructions, inst_unpckhpd_xmm_xmm(dst, src)) } -emit_unpckhpd_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append(instructions, inst_unpckhpd_xmm_m128(dst, src)) } +emit_unpckhpd_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append_elem(instructions, inst_unpckhpd_xmm_xmm(dst, src)) } +emit_unpckhpd_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append_elem(instructions, inst_unpckhpd_xmm_m128(dst, src)) } inst_cvtps2pd_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .CVTPS2PD, operand_count = 2, ops = {op_xmm(dst), op_xmm(src), {}, {}} }, 833) } inst_cvtps2pd_xmm_m64 :: #force_inline proc "contextless" (dst: XMM, src: Mem64) -> Instruction { return with_hint(Instruction{ mnemonic = .CVTPS2PD, operand_count = 2, ops = {op_xmm(dst), op_mem(src.mem, 8), {}, {}} }, 833) } -emit_cvtps2pd_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append(instructions, inst_cvtps2pd_xmm_xmm(dst, src)) } -emit_cvtps2pd_xmm_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem64) { append(instructions, inst_cvtps2pd_xmm_m64(dst, src)) } +emit_cvtps2pd_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append_elem(instructions, inst_cvtps2pd_xmm_xmm(dst, src)) } +emit_cvtps2pd_xmm_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem64) { append_elem(instructions, inst_cvtps2pd_xmm_m64(dst, src)) } inst_cvtpd2ps_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .CVTPD2PS, operand_count = 2, ops = {op_xmm(dst), op_xmm(src), {}, {}} }, 834) } inst_cvtpd2ps_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .CVTPD2PS, operand_count = 2, ops = {op_xmm(dst), op_mem(src.mem, 16), {}, {}} }, 834) } -emit_cvtpd2ps_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append(instructions, inst_cvtpd2ps_xmm_xmm(dst, src)) } -emit_cvtpd2ps_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append(instructions, inst_cvtpd2ps_xmm_m128(dst, src)) } +emit_cvtpd2ps_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append_elem(instructions, inst_cvtpd2ps_xmm_xmm(dst, src)) } +emit_cvtpd2ps_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append_elem(instructions, inst_cvtpd2ps_xmm_m128(dst, src)) } inst_cvtss2sd_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .CVTSS2SD, operand_count = 2, ops = {op_xmm(dst), op_xmm(src), {}, {}} }, 835) } inst_cvtss2sd_xmm_m32 :: #force_inline proc "contextless" (dst: XMM, src: Mem32) -> Instruction { return with_hint(Instruction{ mnemonic = .CVTSS2SD, operand_count = 2, ops = {op_xmm(dst), op_mem(src.mem, 4), {}, {}} }, 835) } -emit_cvtss2sd_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append(instructions, inst_cvtss2sd_xmm_xmm(dst, src)) } -emit_cvtss2sd_xmm_m32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem32) { append(instructions, inst_cvtss2sd_xmm_m32(dst, src)) } +emit_cvtss2sd_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append_elem(instructions, inst_cvtss2sd_xmm_xmm(dst, src)) } +emit_cvtss2sd_xmm_m32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem32) { append_elem(instructions, inst_cvtss2sd_xmm_m32(dst, src)) } inst_cvtsd2ss_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .CVTSD2SS, operand_count = 2, ops = {op_xmm(dst), op_xmm(src), {}, {}} }, 836) } inst_cvtsd2ss_xmm_m64 :: #force_inline proc "contextless" (dst: XMM, src: Mem64) -> Instruction { return with_hint(Instruction{ mnemonic = .CVTSD2SS, operand_count = 2, ops = {op_xmm(dst), op_mem(src.mem, 8), {}, {}} }, 836) } -emit_cvtsd2ss_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append(instructions, inst_cvtsd2ss_xmm_xmm(dst, src)) } -emit_cvtsd2ss_xmm_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem64) { append(instructions, inst_cvtsd2ss_xmm_m64(dst, src)) } +emit_cvtsd2ss_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append_elem(instructions, inst_cvtsd2ss_xmm_xmm(dst, src)) } +emit_cvtsd2ss_xmm_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem64) { append_elem(instructions, inst_cvtsd2ss_xmm_m64(dst, src)) } inst_cvtps2dq_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .CVTPS2DQ, operand_count = 2, ops = {op_xmm(dst), op_xmm(src), {}, {}} }, 837) } inst_cvtps2dq_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .CVTPS2DQ, operand_count = 2, ops = {op_xmm(dst), op_mem(src.mem, 16), {}, {}} }, 837) } -emit_cvtps2dq_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append(instructions, inst_cvtps2dq_xmm_xmm(dst, src)) } -emit_cvtps2dq_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append(instructions, inst_cvtps2dq_xmm_m128(dst, src)) } +emit_cvtps2dq_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append_elem(instructions, inst_cvtps2dq_xmm_xmm(dst, src)) } +emit_cvtps2dq_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append_elem(instructions, inst_cvtps2dq_xmm_m128(dst, src)) } inst_cvtpd2dq_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .CVTPD2DQ, operand_count = 2, ops = {op_xmm(dst), op_xmm(src), {}, {}} }, 838) } inst_cvtpd2dq_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .CVTPD2DQ, operand_count = 2, ops = {op_xmm(dst), op_mem(src.mem, 16), {}, {}} }, 838) } -emit_cvtpd2dq_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append(instructions, inst_cvtpd2dq_xmm_xmm(dst, src)) } -emit_cvtpd2dq_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append(instructions, inst_cvtpd2dq_xmm_m128(dst, src)) } +emit_cvtpd2dq_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append_elem(instructions, inst_cvtpd2dq_xmm_xmm(dst, src)) } +emit_cvtpd2dq_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append_elem(instructions, inst_cvtpd2dq_xmm_m128(dst, src)) } inst_cvtdq2ps_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .CVTDQ2PS, operand_count = 2, ops = {op_xmm(dst), op_xmm(src), {}, {}} }, 839) } inst_cvtdq2ps_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .CVTDQ2PS, operand_count = 2, ops = {op_xmm(dst), op_mem(src.mem, 16), {}, {}} }, 839) } -emit_cvtdq2ps_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append(instructions, inst_cvtdq2ps_xmm_xmm(dst, src)) } -emit_cvtdq2ps_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append(instructions, inst_cvtdq2ps_xmm_m128(dst, src)) } +emit_cvtdq2ps_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append_elem(instructions, inst_cvtdq2ps_xmm_xmm(dst, src)) } +emit_cvtdq2ps_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append_elem(instructions, inst_cvtdq2ps_xmm_m128(dst, src)) } inst_cvtdq2pd_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .CVTDQ2PD, operand_count = 2, ops = {op_xmm(dst), op_xmm(src), {}, {}} }, 840) } inst_cvtdq2pd_xmm_m64 :: #force_inline proc "contextless" (dst: XMM, src: Mem64) -> Instruction { return with_hint(Instruction{ mnemonic = .CVTDQ2PD, operand_count = 2, ops = {op_xmm(dst), op_mem(src.mem, 8), {}, {}} }, 840) } -emit_cvtdq2pd_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append(instructions, inst_cvtdq2pd_xmm_xmm(dst, src)) } -emit_cvtdq2pd_xmm_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem64) { append(instructions, inst_cvtdq2pd_xmm_m64(dst, src)) } +emit_cvtdq2pd_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append_elem(instructions, inst_cvtdq2pd_xmm_xmm(dst, src)) } +emit_cvtdq2pd_xmm_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem64) { append_elem(instructions, inst_cvtdq2pd_xmm_m64(dst, src)) } inst_cvtss2si_r32_xmm :: #force_inline proc "contextless" (dst: GPR32, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .CVTSS2SI, operand_count = 2, ops = {op_gpr32(dst), op_xmm(src), {}, {}} }, 841) } inst_cvtss2si_r32_m32 :: #force_inline proc "contextless" (dst: GPR32, src: Mem32) -> Instruction { return with_hint(Instruction{ mnemonic = .CVTSS2SI, operand_count = 2, ops = {op_gpr32(dst), op_mem(src.mem, 4), {}, {}} }, 841) } inst_cvtss2si_r64_xmm :: #force_inline proc "contextless" (dst: GPR64, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .CVTSS2SI, operand_count = 2, ops = {op_gpr64(dst), op_xmm(src), {}, {}} }, 842) } inst_cvtss2si_r64_m32 :: #force_inline proc "contextless" (dst: GPR64, src: Mem32) -> Instruction { return with_hint(Instruction{ mnemonic = .CVTSS2SI, operand_count = 2, ops = {op_gpr64(dst), op_mem(src.mem, 4), {}, {}} }, 842) } -emit_cvtss2si_r32_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: XMM) { append(instructions, inst_cvtss2si_r32_xmm(dst, src)) } -emit_cvtss2si_r32_m32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: Mem32) { append(instructions, inst_cvtss2si_r32_m32(dst, src)) } -emit_cvtss2si_r64_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: XMM) { append(instructions, inst_cvtss2si_r64_xmm(dst, src)) } -emit_cvtss2si_r64_m32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: Mem32) { append(instructions, inst_cvtss2si_r64_m32(dst, src)) } +emit_cvtss2si_r32_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: XMM) { append_elem(instructions, inst_cvtss2si_r32_xmm(dst, src)) } +emit_cvtss2si_r32_m32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: Mem32) { append_elem(instructions, inst_cvtss2si_r32_m32(dst, src)) } +emit_cvtss2si_r64_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: XMM) { append_elem(instructions, inst_cvtss2si_r64_xmm(dst, src)) } +emit_cvtss2si_r64_m32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: Mem32) { append_elem(instructions, inst_cvtss2si_r64_m32(dst, src)) } inst_cvtsd2si_r32_xmm :: #force_inline proc "contextless" (dst: GPR32, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .CVTSD2SI, operand_count = 2, ops = {op_gpr32(dst), op_xmm(src), {}, {}} }, 843) } inst_cvtsd2si_r32_m64 :: #force_inline proc "contextless" (dst: GPR32, src: Mem64) -> Instruction { return with_hint(Instruction{ mnemonic = .CVTSD2SI, operand_count = 2, ops = {op_gpr32(dst), op_mem(src.mem, 8), {}, {}} }, 843) } inst_cvtsd2si_r64_xmm :: #force_inline proc "contextless" (dst: GPR64, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .CVTSD2SI, operand_count = 2, ops = {op_gpr64(dst), op_xmm(src), {}, {}} }, 844) } inst_cvtsd2si_r64_m64 :: #force_inline proc "contextless" (dst: GPR64, src: Mem64) -> Instruction { return with_hint(Instruction{ mnemonic = .CVTSD2SI, operand_count = 2, ops = {op_gpr64(dst), op_mem(src.mem, 8), {}, {}} }, 844) } -emit_cvtsd2si_r32_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: XMM) { append(instructions, inst_cvtsd2si_r32_xmm(dst, src)) } -emit_cvtsd2si_r32_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: Mem64) { append(instructions, inst_cvtsd2si_r32_m64(dst, src)) } -emit_cvtsd2si_r64_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: XMM) { append(instructions, inst_cvtsd2si_r64_xmm(dst, src)) } -emit_cvtsd2si_r64_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: Mem64) { append(instructions, inst_cvtsd2si_r64_m64(dst, src)) } +emit_cvtsd2si_r32_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: XMM) { append_elem(instructions, inst_cvtsd2si_r32_xmm(dst, src)) } +emit_cvtsd2si_r32_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: Mem64) { append_elem(instructions, inst_cvtsd2si_r32_m64(dst, src)) } +emit_cvtsd2si_r64_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: XMM) { append_elem(instructions, inst_cvtsd2si_r64_xmm(dst, src)) } +emit_cvtsd2si_r64_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: Mem64) { append_elem(instructions, inst_cvtsd2si_r64_m64(dst, src)) } inst_cvtsi2ss_xmm_r32 :: #force_inline proc "contextless" (dst: XMM, src: GPR32) -> Instruction { return with_hint(Instruction{ mnemonic = .CVTSI2SS, operand_count = 2, ops = {op_xmm(dst), op_gpr32(src), {}, {}} }, 845) } inst_cvtsi2ss_xmm_m32 :: #force_inline proc "contextless" (dst: XMM, src: Mem32) -> Instruction { return with_hint(Instruction{ mnemonic = .CVTSI2SS, operand_count = 2, ops = {op_xmm(dst), op_mem(src.mem, 4), {}, {}} }, 845) } inst_cvtsi2ss_xmm_r64 :: #force_inline proc "contextless" (dst: XMM, src: GPR64) -> Instruction { return with_hint(Instruction{ mnemonic = .CVTSI2SS, operand_count = 2, ops = {op_xmm(dst), op_gpr64(src), {}, {}} }, 846) } inst_cvtsi2ss_xmm_m64 :: #force_inline proc "contextless" (dst: XMM, src: Mem64) -> Instruction { return with_hint(Instruction{ mnemonic = .CVTSI2SS, operand_count = 2, ops = {op_xmm(dst), op_mem(src.mem, 8), {}, {}} }, 846) } -emit_cvtsi2ss_xmm_r32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: GPR32) { append(instructions, inst_cvtsi2ss_xmm_r32(dst, src)) } -emit_cvtsi2ss_xmm_m32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem32) { append(instructions, inst_cvtsi2ss_xmm_m32(dst, src)) } -emit_cvtsi2ss_xmm_r64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: GPR64) { append(instructions, inst_cvtsi2ss_xmm_r64(dst, src)) } -emit_cvtsi2ss_xmm_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem64) { append(instructions, inst_cvtsi2ss_xmm_m64(dst, src)) } +emit_cvtsi2ss_xmm_r32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: GPR32) { append_elem(instructions, inst_cvtsi2ss_xmm_r32(dst, src)) } +emit_cvtsi2ss_xmm_m32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem32) { append_elem(instructions, inst_cvtsi2ss_xmm_m32(dst, src)) } +emit_cvtsi2ss_xmm_r64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: GPR64) { append_elem(instructions, inst_cvtsi2ss_xmm_r64(dst, src)) } +emit_cvtsi2ss_xmm_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem64) { append_elem(instructions, inst_cvtsi2ss_xmm_m64(dst, src)) } inst_cvtsi2sd_xmm_r32 :: #force_inline proc "contextless" (dst: XMM, src: GPR32) -> Instruction { return with_hint(Instruction{ mnemonic = .CVTSI2SD, operand_count = 2, ops = {op_xmm(dst), op_gpr32(src), {}, {}} }, 847) } inst_cvtsi2sd_xmm_m32 :: #force_inline proc "contextless" (dst: XMM, src: Mem32) -> Instruction { return with_hint(Instruction{ mnemonic = .CVTSI2SD, operand_count = 2, ops = {op_xmm(dst), op_mem(src.mem, 4), {}, {}} }, 847) } inst_cvtsi2sd_xmm_r64 :: #force_inline proc "contextless" (dst: XMM, src: GPR64) -> Instruction { return with_hint(Instruction{ mnemonic = .CVTSI2SD, operand_count = 2, ops = {op_xmm(dst), op_gpr64(src), {}, {}} }, 848) } inst_cvtsi2sd_xmm_m64 :: #force_inline proc "contextless" (dst: XMM, src: Mem64) -> Instruction { return with_hint(Instruction{ mnemonic = .CVTSI2SD, operand_count = 2, ops = {op_xmm(dst), op_mem(src.mem, 8), {}, {}} }, 848) } -emit_cvtsi2sd_xmm_r32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: GPR32) { append(instructions, inst_cvtsi2sd_xmm_r32(dst, src)) } -emit_cvtsi2sd_xmm_m32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem32) { append(instructions, inst_cvtsi2sd_xmm_m32(dst, src)) } -emit_cvtsi2sd_xmm_r64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: GPR64) { append(instructions, inst_cvtsi2sd_xmm_r64(dst, src)) } -emit_cvtsi2sd_xmm_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem64) { append(instructions, inst_cvtsi2sd_xmm_m64(dst, src)) } +emit_cvtsi2sd_xmm_r32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: GPR32) { append_elem(instructions, inst_cvtsi2sd_xmm_r32(dst, src)) } +emit_cvtsi2sd_xmm_m32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem32) { append_elem(instructions, inst_cvtsi2sd_xmm_m32(dst, src)) } +emit_cvtsi2sd_xmm_r64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: GPR64) { append_elem(instructions, inst_cvtsi2sd_xmm_r64(dst, src)) } +emit_cvtsi2sd_xmm_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem64) { append_elem(instructions, inst_cvtsi2sd_xmm_m64(dst, src)) } inst_cvttps2dq_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .CVTTPS2DQ, operand_count = 2, ops = {op_xmm(dst), op_xmm(src), {}, {}} }, 849) } inst_cvttps2dq_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .CVTTPS2DQ, operand_count = 2, ops = {op_xmm(dst), op_mem(src.mem, 16), {}, {}} }, 849) } -emit_cvttps2dq_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append(instructions, inst_cvttps2dq_xmm_xmm(dst, src)) } -emit_cvttps2dq_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append(instructions, inst_cvttps2dq_xmm_m128(dst, src)) } +emit_cvttps2dq_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append_elem(instructions, inst_cvttps2dq_xmm_xmm(dst, src)) } +emit_cvttps2dq_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append_elem(instructions, inst_cvttps2dq_xmm_m128(dst, src)) } inst_cvttpd2dq_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .CVTTPD2DQ, operand_count = 2, ops = {op_xmm(dst), op_xmm(src), {}, {}} }, 850) } inst_cvttpd2dq_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .CVTTPD2DQ, operand_count = 2, ops = {op_xmm(dst), op_mem(src.mem, 16), {}, {}} }, 850) } -emit_cvttpd2dq_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append(instructions, inst_cvttpd2dq_xmm_xmm(dst, src)) } -emit_cvttpd2dq_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append(instructions, inst_cvttpd2dq_xmm_m128(dst, src)) } +emit_cvttpd2dq_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append_elem(instructions, inst_cvttpd2dq_xmm_xmm(dst, src)) } +emit_cvttpd2dq_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append_elem(instructions, inst_cvttpd2dq_xmm_m128(dst, src)) } inst_cvttss2si_r32_xmm :: #force_inline proc "contextless" (dst: GPR32, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .CVTTSS2SI, operand_count = 2, ops = {op_gpr32(dst), op_xmm(src), {}, {}} }, 851) } inst_cvttss2si_r32_m32 :: #force_inline proc "contextless" (dst: GPR32, src: Mem32) -> Instruction { return with_hint(Instruction{ mnemonic = .CVTTSS2SI, operand_count = 2, ops = {op_gpr32(dst), op_mem(src.mem, 4), {}, {}} }, 851) } inst_cvttss2si_r64_xmm :: #force_inline proc "contextless" (dst: GPR64, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .CVTTSS2SI, operand_count = 2, ops = {op_gpr64(dst), op_xmm(src), {}, {}} }, 852) } inst_cvttss2si_r64_m32 :: #force_inline proc "contextless" (dst: GPR64, src: Mem32) -> Instruction { return with_hint(Instruction{ mnemonic = .CVTTSS2SI, operand_count = 2, ops = {op_gpr64(dst), op_mem(src.mem, 4), {}, {}} }, 852) } -emit_cvttss2si_r32_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: XMM) { append(instructions, inst_cvttss2si_r32_xmm(dst, src)) } -emit_cvttss2si_r32_m32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: Mem32) { append(instructions, inst_cvttss2si_r32_m32(dst, src)) } -emit_cvttss2si_r64_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: XMM) { append(instructions, inst_cvttss2si_r64_xmm(dst, src)) } -emit_cvttss2si_r64_m32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: Mem32) { append(instructions, inst_cvttss2si_r64_m32(dst, src)) } +emit_cvttss2si_r32_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: XMM) { append_elem(instructions, inst_cvttss2si_r32_xmm(dst, src)) } +emit_cvttss2si_r32_m32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: Mem32) { append_elem(instructions, inst_cvttss2si_r32_m32(dst, src)) } +emit_cvttss2si_r64_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: XMM) { append_elem(instructions, inst_cvttss2si_r64_xmm(dst, src)) } +emit_cvttss2si_r64_m32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: Mem32) { append_elem(instructions, inst_cvttss2si_r64_m32(dst, src)) } inst_cvttsd2si_r32_xmm :: #force_inline proc "contextless" (dst: GPR32, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .CVTTSD2SI, operand_count = 2, ops = {op_gpr32(dst), op_xmm(src), {}, {}} }, 853) } inst_cvttsd2si_r32_m64 :: #force_inline proc "contextless" (dst: GPR32, src: Mem64) -> Instruction { return with_hint(Instruction{ mnemonic = .CVTTSD2SI, operand_count = 2, ops = {op_gpr32(dst), op_mem(src.mem, 8), {}, {}} }, 853) } inst_cvttsd2si_r64_xmm :: #force_inline proc "contextless" (dst: GPR64, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .CVTTSD2SI, operand_count = 2, ops = {op_gpr64(dst), op_xmm(src), {}, {}} }, 854) } inst_cvttsd2si_r64_m64 :: #force_inline proc "contextless" (dst: GPR64, src: Mem64) -> Instruction { return with_hint(Instruction{ mnemonic = .CVTTSD2SI, operand_count = 2, ops = {op_gpr64(dst), op_mem(src.mem, 8), {}, {}} }, 854) } -emit_cvttsd2si_r32_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: XMM) { append(instructions, inst_cvttsd2si_r32_xmm(dst, src)) } -emit_cvttsd2si_r32_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: Mem64) { append(instructions, inst_cvttsd2si_r32_m64(dst, src)) } -emit_cvttsd2si_r64_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: XMM) { append(instructions, inst_cvttsd2si_r64_xmm(dst, src)) } -emit_cvttsd2si_r64_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: Mem64) { append(instructions, inst_cvttsd2si_r64_m64(dst, src)) } +emit_cvttsd2si_r32_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: XMM) { append_elem(instructions, inst_cvttsd2si_r32_xmm(dst, src)) } +emit_cvttsd2si_r32_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: Mem64) { append_elem(instructions, inst_cvttsd2si_r32_m64(dst, src)) } +emit_cvttsd2si_r64_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: XMM) { append_elem(instructions, inst_cvttsd2si_r64_xmm(dst, src)) } +emit_cvttsd2si_r64_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: Mem64) { append_elem(instructions, inst_cvttsd2si_r64_m64(dst, src)) } inst_paddb_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .PADDB, operand_count = 2, ops = {op_xmm(dst), op_xmm(src), {}, {}} }, 855) } inst_paddb_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .PADDB, operand_count = 2, ops = {op_xmm(dst), op_mem(src.mem, 16), {}, {}} }, 855) } -emit_paddb_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append(instructions, inst_paddb_xmm_xmm(dst, src)) } -emit_paddb_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append(instructions, inst_paddb_xmm_m128(dst, src)) } +emit_paddb_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append_elem(instructions, inst_paddb_xmm_xmm(dst, src)) } +emit_paddb_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append_elem(instructions, inst_paddb_xmm_m128(dst, src)) } inst_paddw_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .PADDW, operand_count = 2, ops = {op_xmm(dst), op_xmm(src), {}, {}} }, 856) } inst_paddw_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .PADDW, operand_count = 2, ops = {op_xmm(dst), op_mem(src.mem, 16), {}, {}} }, 856) } -emit_paddw_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append(instructions, inst_paddw_xmm_xmm(dst, src)) } -emit_paddw_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append(instructions, inst_paddw_xmm_m128(dst, src)) } +emit_paddw_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append_elem(instructions, inst_paddw_xmm_xmm(dst, src)) } +emit_paddw_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append_elem(instructions, inst_paddw_xmm_m128(dst, src)) } inst_paddd_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .PADDD, operand_count = 2, ops = {op_xmm(dst), op_xmm(src), {}, {}} }, 857) } inst_paddd_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .PADDD, operand_count = 2, ops = {op_xmm(dst), op_mem(src.mem, 16), {}, {}} }, 857) } -emit_paddd_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append(instructions, inst_paddd_xmm_xmm(dst, src)) } -emit_paddd_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append(instructions, inst_paddd_xmm_m128(dst, src)) } +emit_paddd_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append_elem(instructions, inst_paddd_xmm_xmm(dst, src)) } +emit_paddd_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append_elem(instructions, inst_paddd_xmm_m128(dst, src)) } inst_paddq_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .PADDQ, operand_count = 2, ops = {op_xmm(dst), op_xmm(src), {}, {}} }, 858) } inst_paddq_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .PADDQ, operand_count = 2, ops = {op_xmm(dst), op_mem(src.mem, 16), {}, {}} }, 858) } -emit_paddq_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append(instructions, inst_paddq_xmm_xmm(dst, src)) } -emit_paddq_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append(instructions, inst_paddq_xmm_m128(dst, src)) } +emit_paddq_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append_elem(instructions, inst_paddq_xmm_xmm(dst, src)) } +emit_paddq_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append_elem(instructions, inst_paddq_xmm_m128(dst, src)) } inst_psubb_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .PSUBB, operand_count = 2, ops = {op_xmm(dst), op_xmm(src), {}, {}} }, 859) } inst_psubb_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .PSUBB, operand_count = 2, ops = {op_xmm(dst), op_mem(src.mem, 16), {}, {}} }, 859) } -emit_psubb_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append(instructions, inst_psubb_xmm_xmm(dst, src)) } -emit_psubb_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append(instructions, inst_psubb_xmm_m128(dst, src)) } +emit_psubb_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append_elem(instructions, inst_psubb_xmm_xmm(dst, src)) } +emit_psubb_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append_elem(instructions, inst_psubb_xmm_m128(dst, src)) } inst_psubw_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .PSUBW, operand_count = 2, ops = {op_xmm(dst), op_xmm(src), {}, {}} }, 860) } inst_psubw_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .PSUBW, operand_count = 2, ops = {op_xmm(dst), op_mem(src.mem, 16), {}, {}} }, 860) } -emit_psubw_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append(instructions, inst_psubw_xmm_xmm(dst, src)) } -emit_psubw_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append(instructions, inst_psubw_xmm_m128(dst, src)) } +emit_psubw_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append_elem(instructions, inst_psubw_xmm_xmm(dst, src)) } +emit_psubw_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append_elem(instructions, inst_psubw_xmm_m128(dst, src)) } inst_psubd_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .PSUBD, operand_count = 2, ops = {op_xmm(dst), op_xmm(src), {}, {}} }, 861) } inst_psubd_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .PSUBD, operand_count = 2, ops = {op_xmm(dst), op_mem(src.mem, 16), {}, {}} }, 861) } -emit_psubd_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append(instructions, inst_psubd_xmm_xmm(dst, src)) } -emit_psubd_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append(instructions, inst_psubd_xmm_m128(dst, src)) } +emit_psubd_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append_elem(instructions, inst_psubd_xmm_xmm(dst, src)) } +emit_psubd_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append_elem(instructions, inst_psubd_xmm_m128(dst, src)) } inst_psubq_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .PSUBQ, operand_count = 2, ops = {op_xmm(dst), op_xmm(src), {}, {}} }, 862) } inst_psubq_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .PSUBQ, operand_count = 2, ops = {op_xmm(dst), op_mem(src.mem, 16), {}, {}} }, 862) } -emit_psubq_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append(instructions, inst_psubq_xmm_xmm(dst, src)) } -emit_psubq_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append(instructions, inst_psubq_xmm_m128(dst, src)) } +emit_psubq_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append_elem(instructions, inst_psubq_xmm_xmm(dst, src)) } +emit_psubq_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append_elem(instructions, inst_psubq_xmm_m128(dst, src)) } inst_paddsb_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .PADDSB, operand_count = 2, ops = {op_xmm(dst), op_xmm(src), {}, {}} }, 863) } inst_paddsb_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .PADDSB, operand_count = 2, ops = {op_xmm(dst), op_mem(src.mem, 16), {}, {}} }, 863) } -emit_paddsb_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append(instructions, inst_paddsb_xmm_xmm(dst, src)) } -emit_paddsb_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append(instructions, inst_paddsb_xmm_m128(dst, src)) } +emit_paddsb_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append_elem(instructions, inst_paddsb_xmm_xmm(dst, src)) } +emit_paddsb_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append_elem(instructions, inst_paddsb_xmm_m128(dst, src)) } inst_paddsw_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .PADDSW, operand_count = 2, ops = {op_xmm(dst), op_xmm(src), {}, {}} }, 864) } inst_paddsw_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .PADDSW, operand_count = 2, ops = {op_xmm(dst), op_mem(src.mem, 16), {}, {}} }, 864) } -emit_paddsw_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append(instructions, inst_paddsw_xmm_xmm(dst, src)) } -emit_paddsw_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append(instructions, inst_paddsw_xmm_m128(dst, src)) } +emit_paddsw_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append_elem(instructions, inst_paddsw_xmm_xmm(dst, src)) } +emit_paddsw_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append_elem(instructions, inst_paddsw_xmm_m128(dst, src)) } inst_paddusb_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .PADDUSB, operand_count = 2, ops = {op_xmm(dst), op_xmm(src), {}, {}} }, 865) } inst_paddusb_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .PADDUSB, operand_count = 2, ops = {op_xmm(dst), op_mem(src.mem, 16), {}, {}} }, 865) } -emit_paddusb_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append(instructions, inst_paddusb_xmm_xmm(dst, src)) } -emit_paddusb_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append(instructions, inst_paddusb_xmm_m128(dst, src)) } +emit_paddusb_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append_elem(instructions, inst_paddusb_xmm_xmm(dst, src)) } +emit_paddusb_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append_elem(instructions, inst_paddusb_xmm_m128(dst, src)) } inst_paddusw_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .PADDUSW, operand_count = 2, ops = {op_xmm(dst), op_xmm(src), {}, {}} }, 866) } inst_paddusw_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .PADDUSW, operand_count = 2, ops = {op_xmm(dst), op_mem(src.mem, 16), {}, {}} }, 866) } -emit_paddusw_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append(instructions, inst_paddusw_xmm_xmm(dst, src)) } -emit_paddusw_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append(instructions, inst_paddusw_xmm_m128(dst, src)) } +emit_paddusw_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append_elem(instructions, inst_paddusw_xmm_xmm(dst, src)) } +emit_paddusw_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append_elem(instructions, inst_paddusw_xmm_m128(dst, src)) } inst_psubsb_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .PSUBSB, operand_count = 2, ops = {op_xmm(dst), op_xmm(src), {}, {}} }, 867) } inst_psubsb_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .PSUBSB, operand_count = 2, ops = {op_xmm(dst), op_mem(src.mem, 16), {}, {}} }, 867) } -emit_psubsb_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append(instructions, inst_psubsb_xmm_xmm(dst, src)) } -emit_psubsb_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append(instructions, inst_psubsb_xmm_m128(dst, src)) } +emit_psubsb_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append_elem(instructions, inst_psubsb_xmm_xmm(dst, src)) } +emit_psubsb_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append_elem(instructions, inst_psubsb_xmm_m128(dst, src)) } inst_psubsw_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .PSUBSW, operand_count = 2, ops = {op_xmm(dst), op_xmm(src), {}, {}} }, 868) } inst_psubsw_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .PSUBSW, operand_count = 2, ops = {op_xmm(dst), op_mem(src.mem, 16), {}, {}} }, 868) } -emit_psubsw_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append(instructions, inst_psubsw_xmm_xmm(dst, src)) } -emit_psubsw_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append(instructions, inst_psubsw_xmm_m128(dst, src)) } +emit_psubsw_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append_elem(instructions, inst_psubsw_xmm_xmm(dst, src)) } +emit_psubsw_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append_elem(instructions, inst_psubsw_xmm_m128(dst, src)) } inst_psubusb_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .PSUBUSB, operand_count = 2, ops = {op_xmm(dst), op_xmm(src), {}, {}} }, 869) } inst_psubusb_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .PSUBUSB, operand_count = 2, ops = {op_xmm(dst), op_mem(src.mem, 16), {}, {}} }, 869) } -emit_psubusb_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append(instructions, inst_psubusb_xmm_xmm(dst, src)) } -emit_psubusb_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append(instructions, inst_psubusb_xmm_m128(dst, src)) } +emit_psubusb_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append_elem(instructions, inst_psubusb_xmm_xmm(dst, src)) } +emit_psubusb_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append_elem(instructions, inst_psubusb_xmm_m128(dst, src)) } inst_psubusw_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .PSUBUSW, operand_count = 2, ops = {op_xmm(dst), op_xmm(src), {}, {}} }, 870) } inst_psubusw_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .PSUBUSW, operand_count = 2, ops = {op_xmm(dst), op_mem(src.mem, 16), {}, {}} }, 870) } -emit_psubusw_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append(instructions, inst_psubusw_xmm_xmm(dst, src)) } -emit_psubusw_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append(instructions, inst_psubusw_xmm_m128(dst, src)) } +emit_psubusw_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append_elem(instructions, inst_psubusw_xmm_xmm(dst, src)) } +emit_psubusw_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append_elem(instructions, inst_psubusw_xmm_m128(dst, src)) } inst_pmullw_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .PMULLW, operand_count = 2, ops = {op_xmm(dst), op_xmm(src), {}, {}} }, 871) } inst_pmullw_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .PMULLW, operand_count = 2, ops = {op_xmm(dst), op_mem(src.mem, 16), {}, {}} }, 871) } -emit_pmullw_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append(instructions, inst_pmullw_xmm_xmm(dst, src)) } -emit_pmullw_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append(instructions, inst_pmullw_xmm_m128(dst, src)) } +emit_pmullw_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append_elem(instructions, inst_pmullw_xmm_xmm(dst, src)) } +emit_pmullw_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append_elem(instructions, inst_pmullw_xmm_m128(dst, src)) } inst_pmulhw_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .PMULHW, operand_count = 2, ops = {op_xmm(dst), op_xmm(src), {}, {}} }, 872) } inst_pmulhw_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .PMULHW, operand_count = 2, ops = {op_xmm(dst), op_mem(src.mem, 16), {}, {}} }, 872) } -emit_pmulhw_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append(instructions, inst_pmulhw_xmm_xmm(dst, src)) } -emit_pmulhw_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append(instructions, inst_pmulhw_xmm_m128(dst, src)) } +emit_pmulhw_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append_elem(instructions, inst_pmulhw_xmm_xmm(dst, src)) } +emit_pmulhw_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append_elem(instructions, inst_pmulhw_xmm_m128(dst, src)) } inst_pmulhuw_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .PMULHUW, operand_count = 2, ops = {op_xmm(dst), op_xmm(src), {}, {}} }, 873) } inst_pmulhuw_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .PMULHUW, operand_count = 2, ops = {op_xmm(dst), op_mem(src.mem, 16), {}, {}} }, 873) } -emit_pmulhuw_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append(instructions, inst_pmulhuw_xmm_xmm(dst, src)) } -emit_pmulhuw_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append(instructions, inst_pmulhuw_xmm_m128(dst, src)) } +emit_pmulhuw_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append_elem(instructions, inst_pmulhuw_xmm_xmm(dst, src)) } +emit_pmulhuw_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append_elem(instructions, inst_pmulhuw_xmm_m128(dst, src)) } inst_pmuludq_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .PMULUDQ, operand_count = 2, ops = {op_xmm(dst), op_xmm(src), {}, {}} }, 874) } inst_pmuludq_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .PMULUDQ, operand_count = 2, ops = {op_xmm(dst), op_mem(src.mem, 16), {}, {}} }, 874) } -emit_pmuludq_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append(instructions, inst_pmuludq_xmm_xmm(dst, src)) } -emit_pmuludq_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append(instructions, inst_pmuludq_xmm_m128(dst, src)) } +emit_pmuludq_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append_elem(instructions, inst_pmuludq_xmm_xmm(dst, src)) } +emit_pmuludq_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append_elem(instructions, inst_pmuludq_xmm_m128(dst, src)) } inst_pmaddwd_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .PMADDWD, operand_count = 2, ops = {op_xmm(dst), op_xmm(src), {}, {}} }, 875) } inst_pmaddwd_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .PMADDWD, operand_count = 2, ops = {op_xmm(dst), op_mem(src.mem, 16), {}, {}} }, 875) } -emit_pmaddwd_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append(instructions, inst_pmaddwd_xmm_xmm(dst, src)) } -emit_pmaddwd_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append(instructions, inst_pmaddwd_xmm_m128(dst, src)) } +emit_pmaddwd_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append_elem(instructions, inst_pmaddwd_xmm_xmm(dst, src)) } +emit_pmaddwd_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append_elem(instructions, inst_pmaddwd_xmm_m128(dst, src)) } inst_pand_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .PAND, operand_count = 2, ops = {op_xmm(dst), op_xmm(src), {}, {}} }, 876) } inst_pand_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .PAND, operand_count = 2, ops = {op_xmm(dst), op_mem(src.mem, 16), {}, {}} }, 876) } -emit_pand_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append(instructions, inst_pand_xmm_xmm(dst, src)) } -emit_pand_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append(instructions, inst_pand_xmm_m128(dst, src)) } +emit_pand_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append_elem(instructions, inst_pand_xmm_xmm(dst, src)) } +emit_pand_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append_elem(instructions, inst_pand_xmm_m128(dst, src)) } inst_pandn_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .PANDN, operand_count = 2, ops = {op_xmm(dst), op_xmm(src), {}, {}} }, 877) } inst_pandn_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .PANDN, operand_count = 2, ops = {op_xmm(dst), op_mem(src.mem, 16), {}, {}} }, 877) } -emit_pandn_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append(instructions, inst_pandn_xmm_xmm(dst, src)) } -emit_pandn_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append(instructions, inst_pandn_xmm_m128(dst, src)) } +emit_pandn_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append_elem(instructions, inst_pandn_xmm_xmm(dst, src)) } +emit_pandn_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append_elem(instructions, inst_pandn_xmm_m128(dst, src)) } inst_por_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .POR, operand_count = 2, ops = {op_xmm(dst), op_xmm(src), {}, {}} }, 878) } inst_por_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .POR, operand_count = 2, ops = {op_xmm(dst), op_mem(src.mem, 16), {}, {}} }, 878) } -emit_por_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append(instructions, inst_por_xmm_xmm(dst, src)) } -emit_por_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append(instructions, inst_por_xmm_m128(dst, src)) } +emit_por_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append_elem(instructions, inst_por_xmm_xmm(dst, src)) } +emit_por_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append_elem(instructions, inst_por_xmm_m128(dst, src)) } inst_pxor_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .PXOR, operand_count = 2, ops = {op_xmm(dst), op_xmm(src), {}, {}} }, 879) } inst_pxor_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .PXOR, operand_count = 2, ops = {op_xmm(dst), op_mem(src.mem, 16), {}, {}} }, 879) } -emit_pxor_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append(instructions, inst_pxor_xmm_xmm(dst, src)) } -emit_pxor_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append(instructions, inst_pxor_xmm_m128(dst, src)) } +emit_pxor_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append_elem(instructions, inst_pxor_xmm_xmm(dst, src)) } +emit_pxor_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append_elem(instructions, inst_pxor_xmm_m128(dst, src)) } inst_psllw_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .PSLLW, operand_count = 2, ops = {op_xmm(dst), op_xmm(src), {}, {}} }, 880) } inst_psllw_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .PSLLW, operand_count = 2, ops = {op_xmm(dst), op_mem(src.mem, 16), {}, {}} }, 880) } inst_psllw_xmm_imm8 :: #force_inline proc "contextless" (dst: XMM, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .PSLLW, operand_count = 2, ops = {op_xmm(dst), op_imm8(imm), {}, {}} }, 881) } -emit_psllw_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append(instructions, inst_psllw_xmm_xmm(dst, src)) } -emit_psllw_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append(instructions, inst_psllw_xmm_m128(dst, src)) } -emit_psllw_xmm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, imm: i8) { append(instructions, inst_psllw_xmm_imm8(dst, imm)) } +emit_psllw_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append_elem(instructions, inst_psllw_xmm_xmm(dst, src)) } +emit_psllw_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append_elem(instructions, inst_psllw_xmm_m128(dst, src)) } +emit_psllw_xmm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, imm: i8) { append_elem(instructions, inst_psllw_xmm_imm8(dst, imm)) } inst_pslld_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .PSLLD, operand_count = 2, ops = {op_xmm(dst), op_xmm(src), {}, {}} }, 882) } inst_pslld_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .PSLLD, operand_count = 2, ops = {op_xmm(dst), op_mem(src.mem, 16), {}, {}} }, 882) } inst_pslld_xmm_imm8 :: #force_inline proc "contextless" (dst: XMM, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .PSLLD, operand_count = 2, ops = {op_xmm(dst), op_imm8(imm), {}, {}} }, 883) } -emit_pslld_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append(instructions, inst_pslld_xmm_xmm(dst, src)) } -emit_pslld_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append(instructions, inst_pslld_xmm_m128(dst, src)) } -emit_pslld_xmm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, imm: i8) { append(instructions, inst_pslld_xmm_imm8(dst, imm)) } +emit_pslld_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append_elem(instructions, inst_pslld_xmm_xmm(dst, src)) } +emit_pslld_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append_elem(instructions, inst_pslld_xmm_m128(dst, src)) } +emit_pslld_xmm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, imm: i8) { append_elem(instructions, inst_pslld_xmm_imm8(dst, imm)) } inst_psllq_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .PSLLQ, operand_count = 2, ops = {op_xmm(dst), op_xmm(src), {}, {}} }, 884) } inst_psllq_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .PSLLQ, operand_count = 2, ops = {op_xmm(dst), op_mem(src.mem, 16), {}, {}} }, 884) } inst_psllq_xmm_imm8 :: #force_inline proc "contextless" (dst: XMM, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .PSLLQ, operand_count = 2, ops = {op_xmm(dst), op_imm8(imm), {}, {}} }, 885) } -emit_psllq_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append(instructions, inst_psllq_xmm_xmm(dst, src)) } -emit_psllq_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append(instructions, inst_psllq_xmm_m128(dst, src)) } -emit_psllq_xmm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, imm: i8) { append(instructions, inst_psllq_xmm_imm8(dst, imm)) } +emit_psllq_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append_elem(instructions, inst_psllq_xmm_xmm(dst, src)) } +emit_psllq_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append_elem(instructions, inst_psllq_xmm_m128(dst, src)) } +emit_psllq_xmm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, imm: i8) { append_elem(instructions, inst_psllq_xmm_imm8(dst, imm)) } inst_psrlw_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .PSRLW, operand_count = 2, ops = {op_xmm(dst), op_xmm(src), {}, {}} }, 886) } inst_psrlw_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .PSRLW, operand_count = 2, ops = {op_xmm(dst), op_mem(src.mem, 16), {}, {}} }, 886) } inst_psrlw_xmm_imm8 :: #force_inline proc "contextless" (dst: XMM, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .PSRLW, operand_count = 2, ops = {op_xmm(dst), op_imm8(imm), {}, {}} }, 887) } -emit_psrlw_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append(instructions, inst_psrlw_xmm_xmm(dst, src)) } -emit_psrlw_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append(instructions, inst_psrlw_xmm_m128(dst, src)) } -emit_psrlw_xmm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, imm: i8) { append(instructions, inst_psrlw_xmm_imm8(dst, imm)) } +emit_psrlw_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append_elem(instructions, inst_psrlw_xmm_xmm(dst, src)) } +emit_psrlw_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append_elem(instructions, inst_psrlw_xmm_m128(dst, src)) } +emit_psrlw_xmm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, imm: i8) { append_elem(instructions, inst_psrlw_xmm_imm8(dst, imm)) } inst_psrld_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .PSRLD, operand_count = 2, ops = {op_xmm(dst), op_xmm(src), {}, {}} }, 888) } inst_psrld_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .PSRLD, operand_count = 2, ops = {op_xmm(dst), op_mem(src.mem, 16), {}, {}} }, 888) } inst_psrld_xmm_imm8 :: #force_inline proc "contextless" (dst: XMM, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .PSRLD, operand_count = 2, ops = {op_xmm(dst), op_imm8(imm), {}, {}} }, 889) } -emit_psrld_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append(instructions, inst_psrld_xmm_xmm(dst, src)) } -emit_psrld_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append(instructions, inst_psrld_xmm_m128(dst, src)) } -emit_psrld_xmm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, imm: i8) { append(instructions, inst_psrld_xmm_imm8(dst, imm)) } +emit_psrld_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append_elem(instructions, inst_psrld_xmm_xmm(dst, src)) } +emit_psrld_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append_elem(instructions, inst_psrld_xmm_m128(dst, src)) } +emit_psrld_xmm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, imm: i8) { append_elem(instructions, inst_psrld_xmm_imm8(dst, imm)) } inst_psrlq_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .PSRLQ, operand_count = 2, ops = {op_xmm(dst), op_xmm(src), {}, {}} }, 890) } inst_psrlq_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .PSRLQ, operand_count = 2, ops = {op_xmm(dst), op_mem(src.mem, 16), {}, {}} }, 890) } inst_psrlq_xmm_imm8 :: #force_inline proc "contextless" (dst: XMM, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .PSRLQ, operand_count = 2, ops = {op_xmm(dst), op_imm8(imm), {}, {}} }, 891) } -emit_psrlq_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append(instructions, inst_psrlq_xmm_xmm(dst, src)) } -emit_psrlq_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append(instructions, inst_psrlq_xmm_m128(dst, src)) } -emit_psrlq_xmm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, imm: i8) { append(instructions, inst_psrlq_xmm_imm8(dst, imm)) } +emit_psrlq_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append_elem(instructions, inst_psrlq_xmm_xmm(dst, src)) } +emit_psrlq_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append_elem(instructions, inst_psrlq_xmm_m128(dst, src)) } +emit_psrlq_xmm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, imm: i8) { append_elem(instructions, inst_psrlq_xmm_imm8(dst, imm)) } inst_psraw_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .PSRAW, operand_count = 2, ops = {op_xmm(dst), op_xmm(src), {}, {}} }, 892) } inst_psraw_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .PSRAW, operand_count = 2, ops = {op_xmm(dst), op_mem(src.mem, 16), {}, {}} }, 892) } inst_psraw_xmm_imm8 :: #force_inline proc "contextless" (dst: XMM, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .PSRAW, operand_count = 2, ops = {op_xmm(dst), op_imm8(imm), {}, {}} }, 893) } -emit_psraw_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append(instructions, inst_psraw_xmm_xmm(dst, src)) } -emit_psraw_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append(instructions, inst_psraw_xmm_m128(dst, src)) } -emit_psraw_xmm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, imm: i8) { append(instructions, inst_psraw_xmm_imm8(dst, imm)) } +emit_psraw_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append_elem(instructions, inst_psraw_xmm_xmm(dst, src)) } +emit_psraw_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append_elem(instructions, inst_psraw_xmm_m128(dst, src)) } +emit_psraw_xmm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, imm: i8) { append_elem(instructions, inst_psraw_xmm_imm8(dst, imm)) } inst_psrad_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .PSRAD, operand_count = 2, ops = {op_xmm(dst), op_xmm(src), {}, {}} }, 894) } inst_psrad_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .PSRAD, operand_count = 2, ops = {op_xmm(dst), op_mem(src.mem, 16), {}, {}} }, 894) } inst_psrad_xmm_imm8 :: #force_inline proc "contextless" (dst: XMM, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .PSRAD, operand_count = 2, ops = {op_xmm(dst), op_imm8(imm), {}, {}} }, 895) } -emit_psrad_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append(instructions, inst_psrad_xmm_xmm(dst, src)) } -emit_psrad_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append(instructions, inst_psrad_xmm_m128(dst, src)) } -emit_psrad_xmm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, imm: i8) { append(instructions, inst_psrad_xmm_imm8(dst, imm)) } +emit_psrad_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append_elem(instructions, inst_psrad_xmm_xmm(dst, src)) } +emit_psrad_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append_elem(instructions, inst_psrad_xmm_m128(dst, src)) } +emit_psrad_xmm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, imm: i8) { append_elem(instructions, inst_psrad_xmm_imm8(dst, imm)) } inst_pcmpeqb_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .PCMPEQB, operand_count = 2, ops = {op_xmm(dst), op_xmm(src), {}, {}} }, 896) } inst_pcmpeqb_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .PCMPEQB, operand_count = 2, ops = {op_xmm(dst), op_mem(src.mem, 16), {}, {}} }, 896) } -emit_pcmpeqb_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append(instructions, inst_pcmpeqb_xmm_xmm(dst, src)) } -emit_pcmpeqb_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append(instructions, inst_pcmpeqb_xmm_m128(dst, src)) } +emit_pcmpeqb_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append_elem(instructions, inst_pcmpeqb_xmm_xmm(dst, src)) } +emit_pcmpeqb_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append_elem(instructions, inst_pcmpeqb_xmm_m128(dst, src)) } inst_pcmpeqw_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .PCMPEQW, operand_count = 2, ops = {op_xmm(dst), op_xmm(src), {}, {}} }, 897) } inst_pcmpeqw_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .PCMPEQW, operand_count = 2, ops = {op_xmm(dst), op_mem(src.mem, 16), {}, {}} }, 897) } -emit_pcmpeqw_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append(instructions, inst_pcmpeqw_xmm_xmm(dst, src)) } -emit_pcmpeqw_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append(instructions, inst_pcmpeqw_xmm_m128(dst, src)) } +emit_pcmpeqw_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append_elem(instructions, inst_pcmpeqw_xmm_xmm(dst, src)) } +emit_pcmpeqw_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append_elem(instructions, inst_pcmpeqw_xmm_m128(dst, src)) } inst_pcmpeqd_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .PCMPEQD, operand_count = 2, ops = {op_xmm(dst), op_xmm(src), {}, {}} }, 898) } inst_pcmpeqd_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .PCMPEQD, operand_count = 2, ops = {op_xmm(dst), op_mem(src.mem, 16), {}, {}} }, 898) } -emit_pcmpeqd_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append(instructions, inst_pcmpeqd_xmm_xmm(dst, src)) } -emit_pcmpeqd_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append(instructions, inst_pcmpeqd_xmm_m128(dst, src)) } +emit_pcmpeqd_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append_elem(instructions, inst_pcmpeqd_xmm_xmm(dst, src)) } +emit_pcmpeqd_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append_elem(instructions, inst_pcmpeqd_xmm_m128(dst, src)) } inst_pcmpgtb_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .PCMPGTB, operand_count = 2, ops = {op_xmm(dst), op_xmm(src), {}, {}} }, 899) } inst_pcmpgtb_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .PCMPGTB, operand_count = 2, ops = {op_xmm(dst), op_mem(src.mem, 16), {}, {}} }, 899) } -emit_pcmpgtb_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append(instructions, inst_pcmpgtb_xmm_xmm(dst, src)) } -emit_pcmpgtb_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append(instructions, inst_pcmpgtb_xmm_m128(dst, src)) } +emit_pcmpgtb_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append_elem(instructions, inst_pcmpgtb_xmm_xmm(dst, src)) } +emit_pcmpgtb_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append_elem(instructions, inst_pcmpgtb_xmm_m128(dst, src)) } inst_pcmpgtw_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .PCMPGTW, operand_count = 2, ops = {op_xmm(dst), op_xmm(src), {}, {}} }, 900) } inst_pcmpgtw_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .PCMPGTW, operand_count = 2, ops = {op_xmm(dst), op_mem(src.mem, 16), {}, {}} }, 900) } -emit_pcmpgtw_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append(instructions, inst_pcmpgtw_xmm_xmm(dst, src)) } -emit_pcmpgtw_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append(instructions, inst_pcmpgtw_xmm_m128(dst, src)) } +emit_pcmpgtw_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append_elem(instructions, inst_pcmpgtw_xmm_xmm(dst, src)) } +emit_pcmpgtw_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append_elem(instructions, inst_pcmpgtw_xmm_m128(dst, src)) } inst_pcmpgtd_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .PCMPGTD, operand_count = 2, ops = {op_xmm(dst), op_xmm(src), {}, {}} }, 901) } inst_pcmpgtd_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .PCMPGTD, operand_count = 2, ops = {op_xmm(dst), op_mem(src.mem, 16), {}, {}} }, 901) } -emit_pcmpgtd_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append(instructions, inst_pcmpgtd_xmm_xmm(dst, src)) } -emit_pcmpgtd_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append(instructions, inst_pcmpgtd_xmm_m128(dst, src)) } +emit_pcmpgtd_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append_elem(instructions, inst_pcmpgtd_xmm_xmm(dst, src)) } +emit_pcmpgtd_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append_elem(instructions, inst_pcmpgtd_xmm_m128(dst, src)) } inst_packsswb_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .PACKSSWB, operand_count = 2, ops = {op_xmm(dst), op_xmm(src), {}, {}} }, 902) } inst_packsswb_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .PACKSSWB, operand_count = 2, ops = {op_xmm(dst), op_mem(src.mem, 16), {}, {}} }, 902) } -emit_packsswb_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append(instructions, inst_packsswb_xmm_xmm(dst, src)) } -emit_packsswb_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append(instructions, inst_packsswb_xmm_m128(dst, src)) } +emit_packsswb_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append_elem(instructions, inst_packsswb_xmm_xmm(dst, src)) } +emit_packsswb_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append_elem(instructions, inst_packsswb_xmm_m128(dst, src)) } inst_packssdw_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .PACKSSDW, operand_count = 2, ops = {op_xmm(dst), op_xmm(src), {}, {}} }, 903) } inst_packssdw_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .PACKSSDW, operand_count = 2, ops = {op_xmm(dst), op_mem(src.mem, 16), {}, {}} }, 903) } -emit_packssdw_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append(instructions, inst_packssdw_xmm_xmm(dst, src)) } -emit_packssdw_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append(instructions, inst_packssdw_xmm_m128(dst, src)) } +emit_packssdw_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append_elem(instructions, inst_packssdw_xmm_xmm(dst, src)) } +emit_packssdw_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append_elem(instructions, inst_packssdw_xmm_m128(dst, src)) } inst_packuswb_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .PACKUSWB, operand_count = 2, ops = {op_xmm(dst), op_xmm(src), {}, {}} }, 904) } inst_packuswb_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .PACKUSWB, operand_count = 2, ops = {op_xmm(dst), op_mem(src.mem, 16), {}, {}} }, 904) } -emit_packuswb_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append(instructions, inst_packuswb_xmm_xmm(dst, src)) } -emit_packuswb_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append(instructions, inst_packuswb_xmm_m128(dst, src)) } +emit_packuswb_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append_elem(instructions, inst_packuswb_xmm_xmm(dst, src)) } +emit_packuswb_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append_elem(instructions, inst_packuswb_xmm_m128(dst, src)) } inst_punpcklbw_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .PUNPCKLBW, operand_count = 2, ops = {op_xmm(dst), op_xmm(src), {}, {}} }, 905) } inst_punpcklbw_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .PUNPCKLBW, operand_count = 2, ops = {op_xmm(dst), op_mem(src.mem, 16), {}, {}} }, 905) } -emit_punpcklbw_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append(instructions, inst_punpcklbw_xmm_xmm(dst, src)) } -emit_punpcklbw_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append(instructions, inst_punpcklbw_xmm_m128(dst, src)) } +emit_punpcklbw_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append_elem(instructions, inst_punpcklbw_xmm_xmm(dst, src)) } +emit_punpcklbw_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append_elem(instructions, inst_punpcklbw_xmm_m128(dst, src)) } inst_punpcklwd_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .PUNPCKLWD, operand_count = 2, ops = {op_xmm(dst), op_xmm(src), {}, {}} }, 906) } inst_punpcklwd_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .PUNPCKLWD, operand_count = 2, ops = {op_xmm(dst), op_mem(src.mem, 16), {}, {}} }, 906) } -emit_punpcklwd_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append(instructions, inst_punpcklwd_xmm_xmm(dst, src)) } -emit_punpcklwd_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append(instructions, inst_punpcklwd_xmm_m128(dst, src)) } +emit_punpcklwd_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append_elem(instructions, inst_punpcklwd_xmm_xmm(dst, src)) } +emit_punpcklwd_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append_elem(instructions, inst_punpcklwd_xmm_m128(dst, src)) } inst_punpckldq_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .PUNPCKLDQ, operand_count = 2, ops = {op_xmm(dst), op_xmm(src), {}, {}} }, 907) } inst_punpckldq_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .PUNPCKLDQ, operand_count = 2, ops = {op_xmm(dst), op_mem(src.mem, 16), {}, {}} }, 907) } -emit_punpckldq_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append(instructions, inst_punpckldq_xmm_xmm(dst, src)) } -emit_punpckldq_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append(instructions, inst_punpckldq_xmm_m128(dst, src)) } +emit_punpckldq_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append_elem(instructions, inst_punpckldq_xmm_xmm(dst, src)) } +emit_punpckldq_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append_elem(instructions, inst_punpckldq_xmm_m128(dst, src)) } inst_punpcklqdq_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .PUNPCKLQDQ, operand_count = 2, ops = {op_xmm(dst), op_xmm(src), {}, {}} }, 908) } inst_punpcklqdq_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .PUNPCKLQDQ, operand_count = 2, ops = {op_xmm(dst), op_mem(src.mem, 16), {}, {}} }, 908) } -emit_punpcklqdq_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append(instructions, inst_punpcklqdq_xmm_xmm(dst, src)) } -emit_punpcklqdq_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append(instructions, inst_punpcklqdq_xmm_m128(dst, src)) } +emit_punpcklqdq_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append_elem(instructions, inst_punpcklqdq_xmm_xmm(dst, src)) } +emit_punpcklqdq_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append_elem(instructions, inst_punpcklqdq_xmm_m128(dst, src)) } inst_punpckhbw_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .PUNPCKHBW, operand_count = 2, ops = {op_xmm(dst), op_xmm(src), {}, {}} }, 909) } inst_punpckhbw_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .PUNPCKHBW, operand_count = 2, ops = {op_xmm(dst), op_mem(src.mem, 16), {}, {}} }, 909) } -emit_punpckhbw_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append(instructions, inst_punpckhbw_xmm_xmm(dst, src)) } -emit_punpckhbw_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append(instructions, inst_punpckhbw_xmm_m128(dst, src)) } +emit_punpckhbw_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append_elem(instructions, inst_punpckhbw_xmm_xmm(dst, src)) } +emit_punpckhbw_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append_elem(instructions, inst_punpckhbw_xmm_m128(dst, src)) } inst_punpckhwd_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .PUNPCKHWD, operand_count = 2, ops = {op_xmm(dst), op_xmm(src), {}, {}} }, 910) } inst_punpckhwd_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .PUNPCKHWD, operand_count = 2, ops = {op_xmm(dst), op_mem(src.mem, 16), {}, {}} }, 910) } -emit_punpckhwd_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append(instructions, inst_punpckhwd_xmm_xmm(dst, src)) } -emit_punpckhwd_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append(instructions, inst_punpckhwd_xmm_m128(dst, src)) } +emit_punpckhwd_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append_elem(instructions, inst_punpckhwd_xmm_xmm(dst, src)) } +emit_punpckhwd_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append_elem(instructions, inst_punpckhwd_xmm_m128(dst, src)) } inst_punpckhdq_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .PUNPCKHDQ, operand_count = 2, ops = {op_xmm(dst), op_xmm(src), {}, {}} }, 911) } inst_punpckhdq_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .PUNPCKHDQ, operand_count = 2, ops = {op_xmm(dst), op_mem(src.mem, 16), {}, {}} }, 911) } -emit_punpckhdq_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append(instructions, inst_punpckhdq_xmm_xmm(dst, src)) } -emit_punpckhdq_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append(instructions, inst_punpckhdq_xmm_m128(dst, src)) } +emit_punpckhdq_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append_elem(instructions, inst_punpckhdq_xmm_xmm(dst, src)) } +emit_punpckhdq_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append_elem(instructions, inst_punpckhdq_xmm_m128(dst, src)) } inst_punpckhqdq_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .PUNPCKHQDQ, operand_count = 2, ops = {op_xmm(dst), op_xmm(src), {}, {}} }, 912) } inst_punpckhqdq_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .PUNPCKHQDQ, operand_count = 2, ops = {op_xmm(dst), op_mem(src.mem, 16), {}, {}} }, 912) } -emit_punpckhqdq_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append(instructions, inst_punpckhqdq_xmm_xmm(dst, src)) } -emit_punpckhqdq_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append(instructions, inst_punpckhqdq_xmm_m128(dst, src)) } +emit_punpckhqdq_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append_elem(instructions, inst_punpckhqdq_xmm_xmm(dst, src)) } +emit_punpckhqdq_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append_elem(instructions, inst_punpckhqdq_xmm_m128(dst, src)) } inst_pshufd_xmm_xmm_imm8 :: #force_inline proc "contextless" (dst: XMM, src: XMM, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .PSHUFD, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_imm8(imm), {}} }, 913) } inst_pshufd_xmm_m128_imm8 :: #force_inline proc "contextless" (dst: XMM, src: Mem128, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .PSHUFD, operand_count = 3, ops = {op_xmm(dst), op_mem(src.mem, 16), op_imm8(imm), {}} }, 913) } -emit_pshufd_xmm_xmm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, imm: i8) { append(instructions, inst_pshufd_xmm_xmm_imm8(dst, src, imm)) } -emit_pshufd_xmm_m128_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128, imm: i8) { append(instructions, inst_pshufd_xmm_m128_imm8(dst, src, imm)) } +emit_pshufd_xmm_xmm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, imm: i8) { append_elem(instructions, inst_pshufd_xmm_xmm_imm8(dst, src, imm)) } +emit_pshufd_xmm_m128_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128, imm: i8) { append_elem(instructions, inst_pshufd_xmm_m128_imm8(dst, src, imm)) } inst_pshufhw_xmm_xmm_imm8 :: #force_inline proc "contextless" (dst: XMM, src: XMM, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .PSHUFHW, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_imm8(imm), {}} }, 914) } inst_pshufhw_xmm_m128_imm8 :: #force_inline proc "contextless" (dst: XMM, src: Mem128, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .PSHUFHW, operand_count = 3, ops = {op_xmm(dst), op_mem(src.mem, 16), op_imm8(imm), {}} }, 914) } -emit_pshufhw_xmm_xmm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, imm: i8) { append(instructions, inst_pshufhw_xmm_xmm_imm8(dst, src, imm)) } -emit_pshufhw_xmm_m128_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128, imm: i8) { append(instructions, inst_pshufhw_xmm_m128_imm8(dst, src, imm)) } +emit_pshufhw_xmm_xmm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, imm: i8) { append_elem(instructions, inst_pshufhw_xmm_xmm_imm8(dst, src, imm)) } +emit_pshufhw_xmm_m128_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128, imm: i8) { append_elem(instructions, inst_pshufhw_xmm_m128_imm8(dst, src, imm)) } inst_pshuflw_xmm_xmm_imm8 :: #force_inline proc "contextless" (dst: XMM, src: XMM, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .PSHUFLW, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_imm8(imm), {}} }, 915) } inst_pshuflw_xmm_m128_imm8 :: #force_inline proc "contextless" (dst: XMM, src: Mem128, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .PSHUFLW, operand_count = 3, ops = {op_xmm(dst), op_mem(src.mem, 16), op_imm8(imm), {}} }, 915) } -emit_pshuflw_xmm_xmm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, imm: i8) { append(instructions, inst_pshuflw_xmm_xmm_imm8(dst, src, imm)) } -emit_pshuflw_xmm_m128_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128, imm: i8) { append(instructions, inst_pshuflw_xmm_m128_imm8(dst, src, imm)) } +emit_pshuflw_xmm_xmm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, imm: i8) { append_elem(instructions, inst_pshuflw_xmm_xmm_imm8(dst, src, imm)) } +emit_pshuflw_xmm_m128_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128, imm: i8) { append_elem(instructions, inst_pshuflw_xmm_m128_imm8(dst, src, imm)) } inst_pshufw_mm_mm_imm8 :: #force_inline proc "contextless" (dst: MM, src: MM, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .PSHUFW, operand_count = 3, ops = {op_mm(dst), op_mm(src), op_imm8(imm), {}} }, 916) } inst_pshufw_mm_m64_imm8 :: #force_inline proc "contextless" (dst: MM, src: Mem64, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .PSHUFW, operand_count = 3, ops = {op_mm(dst), op_mem(src.mem, 8), op_imm8(imm), {}} }, 916) } -emit_pshufw_mm_mm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: MM, src: MM, imm: i8) { append(instructions, inst_pshufw_mm_mm_imm8(dst, src, imm)) } -emit_pshufw_mm_m64_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: MM, src: Mem64, imm: i8) { append(instructions, inst_pshufw_mm_m64_imm8(dst, src, imm)) } +emit_pshufw_mm_mm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: MM, src: MM, imm: i8) { append_elem(instructions, inst_pshufw_mm_mm_imm8(dst, src, imm)) } +emit_pshufw_mm_m64_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: MM, src: Mem64, imm: i8) { append_elem(instructions, inst_pshufw_mm_m64_imm8(dst, src, imm)) } inst_pextrw_r32_xmm_imm8 :: #force_inline proc "contextless" (dst: GPR32, src: XMM, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .PEXTRW, operand_count = 3, ops = {op_gpr32(dst), op_xmm(src), op_imm8(imm), {}} }, 917) } inst_pextrw_r64_xmm_imm8 :: #force_inline proc "contextless" (dst: GPR64, src: XMM, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .PEXTRW, operand_count = 3, ops = {op_gpr64(dst), op_xmm(src), op_imm8(imm), {}} }, 918) } -emit_pextrw_r32_xmm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: XMM, imm: i8) { append(instructions, inst_pextrw_r32_xmm_imm8(dst, src, imm)) } -emit_pextrw_r64_xmm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: XMM, imm: i8) { append(instructions, inst_pextrw_r64_xmm_imm8(dst, src, imm)) } +emit_pextrw_r32_xmm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: XMM, imm: i8) { append_elem(instructions, inst_pextrw_r32_xmm_imm8(dst, src, imm)) } +emit_pextrw_r64_xmm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: XMM, imm: i8) { append_elem(instructions, inst_pextrw_r64_xmm_imm8(dst, src, imm)) } inst_pinsrw_xmm_r32_imm8 :: #force_inline proc "contextless" (dst: XMM, src: GPR32, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .PINSRW, operand_count = 3, ops = {op_xmm(dst), op_gpr32(src), op_imm8(imm), {}} }, 919) } inst_pinsrw_xmm_m16_imm8 :: #force_inline proc "contextless" (dst: XMM, src: Mem16, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .PINSRW, operand_count = 3, ops = {op_xmm(dst), op_mem(src.mem, 2), op_imm8(imm), {}} }, 920) } -emit_pinsrw_xmm_r32_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: GPR32, imm: i8) { append(instructions, inst_pinsrw_xmm_r32_imm8(dst, src, imm)) } -emit_pinsrw_xmm_m16_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem16, imm: i8) { append(instructions, inst_pinsrw_xmm_m16_imm8(dst, src, imm)) } +emit_pinsrw_xmm_r32_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: GPR32, imm: i8) { append_elem(instructions, inst_pinsrw_xmm_r32_imm8(dst, src, imm)) } +emit_pinsrw_xmm_m16_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem16, imm: i8) { append_elem(instructions, inst_pinsrw_xmm_m16_imm8(dst, src, imm)) } inst_pmovmskb_r32_xmm :: #force_inline proc "contextless" (dst: GPR32, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .PMOVMSKB, operand_count = 2, ops = {op_gpr32(dst), op_xmm(src), {}, {}} }, 921) } inst_pmovmskb_r64_xmm :: #force_inline proc "contextless" (dst: GPR64, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .PMOVMSKB, operand_count = 2, ops = {op_gpr64(dst), op_xmm(src), {}, {}} }, 922) } -emit_pmovmskb_r32_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: XMM) { append(instructions, inst_pmovmskb_r32_xmm(dst, src)) } -emit_pmovmskb_r64_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: XMM) { append(instructions, inst_pmovmskb_r64_xmm(dst, src)) } +emit_pmovmskb_r32_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: XMM) { append_elem(instructions, inst_pmovmskb_r32_xmm(dst, src)) } +emit_pmovmskb_r64_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: XMM) { append_elem(instructions, inst_pmovmskb_r64_xmm(dst, src)) } inst_pavgb_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .PAVGB, operand_count = 2, ops = {op_xmm(dst), op_xmm(src), {}, {}} }, 923) } inst_pavgb_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .PAVGB, operand_count = 2, ops = {op_xmm(dst), op_mem(src.mem, 16), {}, {}} }, 923) } -emit_pavgb_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append(instructions, inst_pavgb_xmm_xmm(dst, src)) } -emit_pavgb_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append(instructions, inst_pavgb_xmm_m128(dst, src)) } +emit_pavgb_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append_elem(instructions, inst_pavgb_xmm_xmm(dst, src)) } +emit_pavgb_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append_elem(instructions, inst_pavgb_xmm_m128(dst, src)) } inst_pavgw_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .PAVGW, operand_count = 2, ops = {op_xmm(dst), op_xmm(src), {}, {}} }, 924) } inst_pavgw_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .PAVGW, operand_count = 2, ops = {op_xmm(dst), op_mem(src.mem, 16), {}, {}} }, 924) } -emit_pavgw_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append(instructions, inst_pavgw_xmm_xmm(dst, src)) } -emit_pavgw_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append(instructions, inst_pavgw_xmm_m128(dst, src)) } +emit_pavgw_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append_elem(instructions, inst_pavgw_xmm_xmm(dst, src)) } +emit_pavgw_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append_elem(instructions, inst_pavgw_xmm_m128(dst, src)) } inst_pmaxub_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .PMAXUB, operand_count = 2, ops = {op_xmm(dst), op_xmm(src), {}, {}} }, 925) } inst_pmaxub_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .PMAXUB, operand_count = 2, ops = {op_xmm(dst), op_mem(src.mem, 16), {}, {}} }, 925) } -emit_pmaxub_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append(instructions, inst_pmaxub_xmm_xmm(dst, src)) } -emit_pmaxub_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append(instructions, inst_pmaxub_xmm_m128(dst, src)) } +emit_pmaxub_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append_elem(instructions, inst_pmaxub_xmm_xmm(dst, src)) } +emit_pmaxub_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append_elem(instructions, inst_pmaxub_xmm_m128(dst, src)) } inst_pmaxsw_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .PMAXSW, operand_count = 2, ops = {op_xmm(dst), op_xmm(src), {}, {}} }, 926) } inst_pmaxsw_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .PMAXSW, operand_count = 2, ops = {op_xmm(dst), op_mem(src.mem, 16), {}, {}} }, 926) } -emit_pmaxsw_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append(instructions, inst_pmaxsw_xmm_xmm(dst, src)) } -emit_pmaxsw_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append(instructions, inst_pmaxsw_xmm_m128(dst, src)) } +emit_pmaxsw_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append_elem(instructions, inst_pmaxsw_xmm_xmm(dst, src)) } +emit_pmaxsw_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append_elem(instructions, inst_pmaxsw_xmm_m128(dst, src)) } inst_pminub_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .PMINUB, operand_count = 2, ops = {op_xmm(dst), op_xmm(src), {}, {}} }, 927) } inst_pminub_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .PMINUB, operand_count = 2, ops = {op_xmm(dst), op_mem(src.mem, 16), {}, {}} }, 927) } -emit_pminub_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append(instructions, inst_pminub_xmm_xmm(dst, src)) } -emit_pminub_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append(instructions, inst_pminub_xmm_m128(dst, src)) } +emit_pminub_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append_elem(instructions, inst_pminub_xmm_xmm(dst, src)) } +emit_pminub_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append_elem(instructions, inst_pminub_xmm_m128(dst, src)) } inst_pminsw_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .PMINSW, operand_count = 2, ops = {op_xmm(dst), op_xmm(src), {}, {}} }, 928) } inst_pminsw_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .PMINSW, operand_count = 2, ops = {op_xmm(dst), op_mem(src.mem, 16), {}, {}} }, 928) } -emit_pminsw_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append(instructions, inst_pminsw_xmm_xmm(dst, src)) } -emit_pminsw_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append(instructions, inst_pminsw_xmm_m128(dst, src)) } +emit_pminsw_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append_elem(instructions, inst_pminsw_xmm_xmm(dst, src)) } +emit_pminsw_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append_elem(instructions, inst_pminsw_xmm_m128(dst, src)) } inst_psadbw_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .PSADBW, operand_count = 2, ops = {op_xmm(dst), op_xmm(src), {}, {}} }, 929) } inst_psadbw_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .PSADBW, operand_count = 2, ops = {op_xmm(dst), op_mem(src.mem, 16), {}, {}} }, 929) } -emit_psadbw_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append(instructions, inst_psadbw_xmm_xmm(dst, src)) } -emit_psadbw_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append(instructions, inst_psadbw_xmm_m128(dst, src)) } +emit_psadbw_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append_elem(instructions, inst_psadbw_xmm_xmm(dst, src)) } +emit_psadbw_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append_elem(instructions, inst_psadbw_xmm_m128(dst, src)) } inst_maskmovdqu_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .MASKMOVDQU, operand_count = 2, ops = {op_xmm(dst), op_xmm(src), {}, {}} }, 930) } -emit_maskmovdqu_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append(instructions, inst_maskmovdqu_xmm_xmm(dst, src)) } +emit_maskmovdqu_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append_elem(instructions, inst_maskmovdqu_xmm_xmm(dst, src)) } inst_lfence_none :: #force_inline proc "contextless" () -> Instruction { return with_hint(Instruction{ mnemonic = .LFENCE, operand_count = 0, ops = {{}, {}, {}, {}} }, 931) } -emit_lfence_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_lfence_none()) } +emit_lfence_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_lfence_none()) } inst_sfence_none :: #force_inline proc "contextless" () -> Instruction { return with_hint(Instruction{ mnemonic = .SFENCE, operand_count = 0, ops = {{}, {}, {}, {}} }, 932) } -emit_sfence_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_sfence_none()) } +emit_sfence_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_sfence_none()) } inst_mfence_none :: #force_inline proc "contextless" () -> Instruction { return with_hint(Instruction{ mnemonic = .MFENCE, operand_count = 0, ops = {{}, {}, {}, {}} }, 933) } -emit_mfence_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_mfence_none()) } +emit_mfence_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_mfence_none()) } inst_pause_none :: #force_inline proc "contextless" () -> Instruction { return with_hint(Instruction{ mnemonic = .PAUSE, operand_count = 0, ops = {{}, {}, {}, {}} }, 934) } -emit_pause_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_pause_none()) } +emit_pause_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_pause_none()) } inst_clflush_m8 :: #force_inline proc "contextless" (dst: Mem8) -> Instruction { return with_hint(Instruction{ mnemonic = .CLFLUSH, operand_count = 1, ops = {op_mem(dst.mem, 1), {}, {}, {}} }, 935) } -emit_clflush_m8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem8) { append(instructions, inst_clflush_m8(dst)) } +emit_clflush_m8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem8) { append_elem(instructions, inst_clflush_m8(dst)) } inst_addsubps_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .ADDSUBPS, operand_count = 2, ops = {op_xmm(dst), op_xmm(src), {}, {}} }, 936) } inst_addsubps_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .ADDSUBPS, operand_count = 2, ops = {op_xmm(dst), op_mem(src.mem, 16), {}, {}} }, 936) } -emit_addsubps_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append(instructions, inst_addsubps_xmm_xmm(dst, src)) } -emit_addsubps_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append(instructions, inst_addsubps_xmm_m128(dst, src)) } +emit_addsubps_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append_elem(instructions, inst_addsubps_xmm_xmm(dst, src)) } +emit_addsubps_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append_elem(instructions, inst_addsubps_xmm_m128(dst, src)) } inst_addsubpd_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .ADDSUBPD, operand_count = 2, ops = {op_xmm(dst), op_xmm(src), {}, {}} }, 937) } inst_addsubpd_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .ADDSUBPD, operand_count = 2, ops = {op_xmm(dst), op_mem(src.mem, 16), {}, {}} }, 937) } -emit_addsubpd_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append(instructions, inst_addsubpd_xmm_xmm(dst, src)) } -emit_addsubpd_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append(instructions, inst_addsubpd_xmm_m128(dst, src)) } +emit_addsubpd_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append_elem(instructions, inst_addsubpd_xmm_xmm(dst, src)) } +emit_addsubpd_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append_elem(instructions, inst_addsubpd_xmm_m128(dst, src)) } inst_haddps_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .HADDPS, operand_count = 2, ops = {op_xmm(dst), op_xmm(src), {}, {}} }, 938) } inst_haddps_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .HADDPS, operand_count = 2, ops = {op_xmm(dst), op_mem(src.mem, 16), {}, {}} }, 938) } -emit_haddps_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append(instructions, inst_haddps_xmm_xmm(dst, src)) } -emit_haddps_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append(instructions, inst_haddps_xmm_m128(dst, src)) } +emit_haddps_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append_elem(instructions, inst_haddps_xmm_xmm(dst, src)) } +emit_haddps_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append_elem(instructions, inst_haddps_xmm_m128(dst, src)) } inst_haddpd_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .HADDPD, operand_count = 2, ops = {op_xmm(dst), op_xmm(src), {}, {}} }, 939) } inst_haddpd_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .HADDPD, operand_count = 2, ops = {op_xmm(dst), op_mem(src.mem, 16), {}, {}} }, 939) } -emit_haddpd_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append(instructions, inst_haddpd_xmm_xmm(dst, src)) } -emit_haddpd_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append(instructions, inst_haddpd_xmm_m128(dst, src)) } +emit_haddpd_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append_elem(instructions, inst_haddpd_xmm_xmm(dst, src)) } +emit_haddpd_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append_elem(instructions, inst_haddpd_xmm_m128(dst, src)) } inst_hsubps_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .HSUBPS, operand_count = 2, ops = {op_xmm(dst), op_xmm(src), {}, {}} }, 940) } inst_hsubps_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .HSUBPS, operand_count = 2, ops = {op_xmm(dst), op_mem(src.mem, 16), {}, {}} }, 940) } -emit_hsubps_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append(instructions, inst_hsubps_xmm_xmm(dst, src)) } -emit_hsubps_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append(instructions, inst_hsubps_xmm_m128(dst, src)) } +emit_hsubps_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append_elem(instructions, inst_hsubps_xmm_xmm(dst, src)) } +emit_hsubps_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append_elem(instructions, inst_hsubps_xmm_m128(dst, src)) } inst_hsubpd_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .HSUBPD, operand_count = 2, ops = {op_xmm(dst), op_xmm(src), {}, {}} }, 941) } inst_hsubpd_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .HSUBPD, operand_count = 2, ops = {op_xmm(dst), op_mem(src.mem, 16), {}, {}} }, 941) } -emit_hsubpd_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append(instructions, inst_hsubpd_xmm_xmm(dst, src)) } -emit_hsubpd_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append(instructions, inst_hsubpd_xmm_m128(dst, src)) } +emit_hsubpd_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append_elem(instructions, inst_hsubpd_xmm_xmm(dst, src)) } +emit_hsubpd_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append_elem(instructions, inst_hsubpd_xmm_m128(dst, src)) } inst_movddup_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .MOVDDUP, operand_count = 2, ops = {op_xmm(dst), op_xmm(src), {}, {}} }, 942) } inst_movddup_xmm_m64 :: #force_inline proc "contextless" (dst: XMM, src: Mem64) -> Instruction { return with_hint(Instruction{ mnemonic = .MOVDDUP, operand_count = 2, ops = {op_xmm(dst), op_mem(src.mem, 8), {}, {}} }, 942) } -emit_movddup_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append(instructions, inst_movddup_xmm_xmm(dst, src)) } -emit_movddup_xmm_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem64) { append(instructions, inst_movddup_xmm_m64(dst, src)) } +emit_movddup_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append_elem(instructions, inst_movddup_xmm_xmm(dst, src)) } +emit_movddup_xmm_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem64) { append_elem(instructions, inst_movddup_xmm_m64(dst, src)) } inst_movsldup_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .MOVSLDUP, operand_count = 2, ops = {op_xmm(dst), op_xmm(src), {}, {}} }, 943) } inst_movsldup_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .MOVSLDUP, operand_count = 2, ops = {op_xmm(dst), op_mem(src.mem, 16), {}, {}} }, 943) } -emit_movsldup_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append(instructions, inst_movsldup_xmm_xmm(dst, src)) } -emit_movsldup_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append(instructions, inst_movsldup_xmm_m128(dst, src)) } +emit_movsldup_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append_elem(instructions, inst_movsldup_xmm_xmm(dst, src)) } +emit_movsldup_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append_elem(instructions, inst_movsldup_xmm_m128(dst, src)) } inst_movshdup_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .MOVSHDUP, operand_count = 2, ops = {op_xmm(dst), op_xmm(src), {}, {}} }, 944) } inst_movshdup_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .MOVSHDUP, operand_count = 2, ops = {op_xmm(dst), op_mem(src.mem, 16), {}, {}} }, 944) } -emit_movshdup_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append(instructions, inst_movshdup_xmm_xmm(dst, src)) } -emit_movshdup_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append(instructions, inst_movshdup_xmm_m128(dst, src)) } +emit_movshdup_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append_elem(instructions, inst_movshdup_xmm_xmm(dst, src)) } +emit_movshdup_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append_elem(instructions, inst_movshdup_xmm_m128(dst, src)) } inst_lddqu_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .LDDQU, operand_count = 2, ops = {op_xmm(dst), op_mem(src.mem, 16), {}, {}} }, 945) } -emit_lddqu_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append(instructions, inst_lddqu_xmm_m128(dst, src)) } +emit_lddqu_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append_elem(instructions, inst_lddqu_xmm_m128(dst, src)) } inst_pshufb_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .PSHUFB, operand_count = 2, ops = {op_xmm(dst), op_xmm(src), {}, {}} }, 946) } inst_pshufb_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .PSHUFB, operand_count = 2, ops = {op_xmm(dst), op_mem(src.mem, 16), {}, {}} }, 946) } -emit_pshufb_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append(instructions, inst_pshufb_xmm_xmm(dst, src)) } -emit_pshufb_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append(instructions, inst_pshufb_xmm_m128(dst, src)) } +emit_pshufb_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append_elem(instructions, inst_pshufb_xmm_xmm(dst, src)) } +emit_pshufb_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append_elem(instructions, inst_pshufb_xmm_m128(dst, src)) } inst_phaddw_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .PHADDW, operand_count = 2, ops = {op_xmm(dst), op_xmm(src), {}, {}} }, 947) } inst_phaddw_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .PHADDW, operand_count = 2, ops = {op_xmm(dst), op_mem(src.mem, 16), {}, {}} }, 947) } -emit_phaddw_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append(instructions, inst_phaddw_xmm_xmm(dst, src)) } -emit_phaddw_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append(instructions, inst_phaddw_xmm_m128(dst, src)) } +emit_phaddw_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append_elem(instructions, inst_phaddw_xmm_xmm(dst, src)) } +emit_phaddw_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append_elem(instructions, inst_phaddw_xmm_m128(dst, src)) } inst_phaddd_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .PHADDD, operand_count = 2, ops = {op_xmm(dst), op_xmm(src), {}, {}} }, 948) } inst_phaddd_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .PHADDD, operand_count = 2, ops = {op_xmm(dst), op_mem(src.mem, 16), {}, {}} }, 948) } -emit_phaddd_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append(instructions, inst_phaddd_xmm_xmm(dst, src)) } -emit_phaddd_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append(instructions, inst_phaddd_xmm_m128(dst, src)) } +emit_phaddd_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append_elem(instructions, inst_phaddd_xmm_xmm(dst, src)) } +emit_phaddd_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append_elem(instructions, inst_phaddd_xmm_m128(dst, src)) } inst_phaddsw_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .PHADDSW, operand_count = 2, ops = {op_xmm(dst), op_xmm(src), {}, {}} }, 949) } inst_phaddsw_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .PHADDSW, operand_count = 2, ops = {op_xmm(dst), op_mem(src.mem, 16), {}, {}} }, 949) } -emit_phaddsw_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append(instructions, inst_phaddsw_xmm_xmm(dst, src)) } -emit_phaddsw_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append(instructions, inst_phaddsw_xmm_m128(dst, src)) } +emit_phaddsw_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append_elem(instructions, inst_phaddsw_xmm_xmm(dst, src)) } +emit_phaddsw_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append_elem(instructions, inst_phaddsw_xmm_m128(dst, src)) } inst_phsubw_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .PHSUBW, operand_count = 2, ops = {op_xmm(dst), op_xmm(src), {}, {}} }, 950) } inst_phsubw_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .PHSUBW, operand_count = 2, ops = {op_xmm(dst), op_mem(src.mem, 16), {}, {}} }, 950) } -emit_phsubw_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append(instructions, inst_phsubw_xmm_xmm(dst, src)) } -emit_phsubw_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append(instructions, inst_phsubw_xmm_m128(dst, src)) } +emit_phsubw_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append_elem(instructions, inst_phsubw_xmm_xmm(dst, src)) } +emit_phsubw_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append_elem(instructions, inst_phsubw_xmm_m128(dst, src)) } inst_phsubd_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .PHSUBD, operand_count = 2, ops = {op_xmm(dst), op_xmm(src), {}, {}} }, 951) } inst_phsubd_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .PHSUBD, operand_count = 2, ops = {op_xmm(dst), op_mem(src.mem, 16), {}, {}} }, 951) } -emit_phsubd_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append(instructions, inst_phsubd_xmm_xmm(dst, src)) } -emit_phsubd_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append(instructions, inst_phsubd_xmm_m128(dst, src)) } +emit_phsubd_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append_elem(instructions, inst_phsubd_xmm_xmm(dst, src)) } +emit_phsubd_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append_elem(instructions, inst_phsubd_xmm_m128(dst, src)) } inst_phsubsw_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .PHSUBSW, operand_count = 2, ops = {op_xmm(dst), op_xmm(src), {}, {}} }, 952) } inst_phsubsw_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .PHSUBSW, operand_count = 2, ops = {op_xmm(dst), op_mem(src.mem, 16), {}, {}} }, 952) } -emit_phsubsw_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append(instructions, inst_phsubsw_xmm_xmm(dst, src)) } -emit_phsubsw_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append(instructions, inst_phsubsw_xmm_m128(dst, src)) } +emit_phsubsw_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append_elem(instructions, inst_phsubsw_xmm_xmm(dst, src)) } +emit_phsubsw_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append_elem(instructions, inst_phsubsw_xmm_m128(dst, src)) } inst_pmaddubsw_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .PMADDUBSW, operand_count = 2, ops = {op_xmm(dst), op_xmm(src), {}, {}} }, 953) } inst_pmaddubsw_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .PMADDUBSW, operand_count = 2, ops = {op_xmm(dst), op_mem(src.mem, 16), {}, {}} }, 953) } -emit_pmaddubsw_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append(instructions, inst_pmaddubsw_xmm_xmm(dst, src)) } -emit_pmaddubsw_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append(instructions, inst_pmaddubsw_xmm_m128(dst, src)) } +emit_pmaddubsw_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append_elem(instructions, inst_pmaddubsw_xmm_xmm(dst, src)) } +emit_pmaddubsw_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append_elem(instructions, inst_pmaddubsw_xmm_m128(dst, src)) } inst_pmulhrsw_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .PMULHRSW, operand_count = 2, ops = {op_xmm(dst), op_xmm(src), {}, {}} }, 954) } inst_pmulhrsw_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .PMULHRSW, operand_count = 2, ops = {op_xmm(dst), op_mem(src.mem, 16), {}, {}} }, 954) } -emit_pmulhrsw_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append(instructions, inst_pmulhrsw_xmm_xmm(dst, src)) } -emit_pmulhrsw_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append(instructions, inst_pmulhrsw_xmm_m128(dst, src)) } +emit_pmulhrsw_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append_elem(instructions, inst_pmulhrsw_xmm_xmm(dst, src)) } +emit_pmulhrsw_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append_elem(instructions, inst_pmulhrsw_xmm_m128(dst, src)) } inst_psignb_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .PSIGNB, operand_count = 2, ops = {op_xmm(dst), op_xmm(src), {}, {}} }, 955) } inst_psignb_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .PSIGNB, operand_count = 2, ops = {op_xmm(dst), op_mem(src.mem, 16), {}, {}} }, 955) } -emit_psignb_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append(instructions, inst_psignb_xmm_xmm(dst, src)) } -emit_psignb_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append(instructions, inst_psignb_xmm_m128(dst, src)) } +emit_psignb_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append_elem(instructions, inst_psignb_xmm_xmm(dst, src)) } +emit_psignb_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append_elem(instructions, inst_psignb_xmm_m128(dst, src)) } inst_psignw_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .PSIGNW, operand_count = 2, ops = {op_xmm(dst), op_xmm(src), {}, {}} }, 956) } inst_psignw_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .PSIGNW, operand_count = 2, ops = {op_xmm(dst), op_mem(src.mem, 16), {}, {}} }, 956) } -emit_psignw_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append(instructions, inst_psignw_xmm_xmm(dst, src)) } -emit_psignw_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append(instructions, inst_psignw_xmm_m128(dst, src)) } +emit_psignw_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append_elem(instructions, inst_psignw_xmm_xmm(dst, src)) } +emit_psignw_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append_elem(instructions, inst_psignw_xmm_m128(dst, src)) } inst_psignd_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .PSIGND, operand_count = 2, ops = {op_xmm(dst), op_xmm(src), {}, {}} }, 957) } inst_psignd_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .PSIGND, operand_count = 2, ops = {op_xmm(dst), op_mem(src.mem, 16), {}, {}} }, 957) } -emit_psignd_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append(instructions, inst_psignd_xmm_xmm(dst, src)) } -emit_psignd_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append(instructions, inst_psignd_xmm_m128(dst, src)) } +emit_psignd_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append_elem(instructions, inst_psignd_xmm_xmm(dst, src)) } +emit_psignd_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append_elem(instructions, inst_psignd_xmm_m128(dst, src)) } inst_pabsb_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .PABSB, operand_count = 2, ops = {op_xmm(dst), op_xmm(src), {}, {}} }, 958) } inst_pabsb_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .PABSB, operand_count = 2, ops = {op_xmm(dst), op_mem(src.mem, 16), {}, {}} }, 958) } -emit_pabsb_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append(instructions, inst_pabsb_xmm_xmm(dst, src)) } -emit_pabsb_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append(instructions, inst_pabsb_xmm_m128(dst, src)) } +emit_pabsb_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append_elem(instructions, inst_pabsb_xmm_xmm(dst, src)) } +emit_pabsb_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append_elem(instructions, inst_pabsb_xmm_m128(dst, src)) } inst_pabsw_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .PABSW, operand_count = 2, ops = {op_xmm(dst), op_xmm(src), {}, {}} }, 959) } inst_pabsw_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .PABSW, operand_count = 2, ops = {op_xmm(dst), op_mem(src.mem, 16), {}, {}} }, 959) } -emit_pabsw_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append(instructions, inst_pabsw_xmm_xmm(dst, src)) } -emit_pabsw_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append(instructions, inst_pabsw_xmm_m128(dst, src)) } +emit_pabsw_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append_elem(instructions, inst_pabsw_xmm_xmm(dst, src)) } +emit_pabsw_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append_elem(instructions, inst_pabsw_xmm_m128(dst, src)) } inst_pabsd_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .PABSD, operand_count = 2, ops = {op_xmm(dst), op_xmm(src), {}, {}} }, 960) } inst_pabsd_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .PABSD, operand_count = 2, ops = {op_xmm(dst), op_mem(src.mem, 16), {}, {}} }, 960) } -emit_pabsd_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append(instructions, inst_pabsd_xmm_xmm(dst, src)) } -emit_pabsd_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append(instructions, inst_pabsd_xmm_m128(dst, src)) } +emit_pabsd_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append_elem(instructions, inst_pabsd_xmm_xmm(dst, src)) } +emit_pabsd_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append_elem(instructions, inst_pabsd_xmm_m128(dst, src)) } inst_palignr_xmm_xmm_imm8 :: #force_inline proc "contextless" (dst: XMM, src: XMM, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .PALIGNR, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_imm8(imm), {}} }, 961) } inst_palignr_xmm_m128_imm8 :: #force_inline proc "contextless" (dst: XMM, src: Mem128, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .PALIGNR, operand_count = 3, ops = {op_xmm(dst), op_mem(src.mem, 16), op_imm8(imm), {}} }, 961) } -emit_palignr_xmm_xmm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, imm: i8) { append(instructions, inst_palignr_xmm_xmm_imm8(dst, src, imm)) } -emit_palignr_xmm_m128_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128, imm: i8) { append(instructions, inst_palignr_xmm_m128_imm8(dst, src, imm)) } +emit_palignr_xmm_xmm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, imm: i8) { append_elem(instructions, inst_palignr_xmm_xmm_imm8(dst, src, imm)) } +emit_palignr_xmm_m128_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128, imm: i8) { append_elem(instructions, inst_palignr_xmm_m128_imm8(dst, src, imm)) } inst_blendps_xmm_xmm_imm8 :: #force_inline proc "contextless" (dst: XMM, src: XMM, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .BLENDPS, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_imm8(imm), {}} }, 962) } inst_blendps_xmm_m128_imm8 :: #force_inline proc "contextless" (dst: XMM, src: Mem128, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .BLENDPS, operand_count = 3, ops = {op_xmm(dst), op_mem(src.mem, 16), op_imm8(imm), {}} }, 962) } -emit_blendps_xmm_xmm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, imm: i8) { append(instructions, inst_blendps_xmm_xmm_imm8(dst, src, imm)) } -emit_blendps_xmm_m128_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128, imm: i8) { append(instructions, inst_blendps_xmm_m128_imm8(dst, src, imm)) } +emit_blendps_xmm_xmm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, imm: i8) { append_elem(instructions, inst_blendps_xmm_xmm_imm8(dst, src, imm)) } +emit_blendps_xmm_m128_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128, imm: i8) { append_elem(instructions, inst_blendps_xmm_m128_imm8(dst, src, imm)) } inst_blendpd_xmm_xmm_imm8 :: #force_inline proc "contextless" (dst: XMM, src: XMM, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .BLENDPD, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_imm8(imm), {}} }, 963) } inst_blendpd_xmm_m128_imm8 :: #force_inline proc "contextless" (dst: XMM, src: Mem128, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .BLENDPD, operand_count = 3, ops = {op_xmm(dst), op_mem(src.mem, 16), op_imm8(imm), {}} }, 963) } -emit_blendpd_xmm_xmm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, imm: i8) { append(instructions, inst_blendpd_xmm_xmm_imm8(dst, src, imm)) } -emit_blendpd_xmm_m128_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128, imm: i8) { append(instructions, inst_blendpd_xmm_m128_imm8(dst, src, imm)) } +emit_blendpd_xmm_xmm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, imm: i8) { append_elem(instructions, inst_blendpd_xmm_xmm_imm8(dst, src, imm)) } +emit_blendpd_xmm_m128_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128, imm: i8) { append_elem(instructions, inst_blendpd_xmm_m128_imm8(dst, src, imm)) } inst_blendvps_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .BLENDVPS, operand_count = 2, ops = {op_xmm(dst), op_xmm(src), {}, {}} }, 964) } inst_blendvps_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .BLENDVPS, operand_count = 2, ops = {op_xmm(dst), op_mem(src.mem, 16), {}, {}} }, 964) } -emit_blendvps_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append(instructions, inst_blendvps_xmm_xmm(dst, src)) } -emit_blendvps_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append(instructions, inst_blendvps_xmm_m128(dst, src)) } +emit_blendvps_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append_elem(instructions, inst_blendvps_xmm_xmm(dst, src)) } +emit_blendvps_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append_elem(instructions, inst_blendvps_xmm_m128(dst, src)) } inst_blendvpd_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .BLENDVPD, operand_count = 2, ops = {op_xmm(dst), op_xmm(src), {}, {}} }, 965) } inst_blendvpd_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .BLENDVPD, operand_count = 2, ops = {op_xmm(dst), op_mem(src.mem, 16), {}, {}} }, 965) } -emit_blendvpd_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append(instructions, inst_blendvpd_xmm_xmm(dst, src)) } -emit_blendvpd_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append(instructions, inst_blendvpd_xmm_m128(dst, src)) } +emit_blendvpd_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append_elem(instructions, inst_blendvpd_xmm_xmm(dst, src)) } +emit_blendvpd_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append_elem(instructions, inst_blendvpd_xmm_m128(dst, src)) } inst_pblendw_xmm_xmm_imm8 :: #force_inline proc "contextless" (dst: XMM, src: XMM, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .PBLENDW, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_imm8(imm), {}} }, 966) } inst_pblendw_xmm_m128_imm8 :: #force_inline proc "contextless" (dst: XMM, src: Mem128, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .PBLENDW, operand_count = 3, ops = {op_xmm(dst), op_mem(src.mem, 16), op_imm8(imm), {}} }, 966) } -emit_pblendw_xmm_xmm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, imm: i8) { append(instructions, inst_pblendw_xmm_xmm_imm8(dst, src, imm)) } -emit_pblendw_xmm_m128_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128, imm: i8) { append(instructions, inst_pblendw_xmm_m128_imm8(dst, src, imm)) } +emit_pblendw_xmm_xmm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, imm: i8) { append_elem(instructions, inst_pblendw_xmm_xmm_imm8(dst, src, imm)) } +emit_pblendw_xmm_m128_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128, imm: i8) { append_elem(instructions, inst_pblendw_xmm_m128_imm8(dst, src, imm)) } inst_pblendvb_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .PBLENDVB, operand_count = 2, ops = {op_xmm(dst), op_xmm(src), {}, {}} }, 967) } inst_pblendvb_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .PBLENDVB, operand_count = 2, ops = {op_xmm(dst), op_mem(src.mem, 16), {}, {}} }, 967) } -emit_pblendvb_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append(instructions, inst_pblendvb_xmm_xmm(dst, src)) } -emit_pblendvb_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append(instructions, inst_pblendvb_xmm_m128(dst, src)) } +emit_pblendvb_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append_elem(instructions, inst_pblendvb_xmm_xmm(dst, src)) } +emit_pblendvb_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append_elem(instructions, inst_pblendvb_xmm_m128(dst, src)) } inst_dpps_xmm_xmm_imm8 :: #force_inline proc "contextless" (dst: XMM, src: XMM, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .DPPS, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_imm8(imm), {}} }, 968) } inst_dpps_xmm_m128_imm8 :: #force_inline proc "contextless" (dst: XMM, src: Mem128, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .DPPS, operand_count = 3, ops = {op_xmm(dst), op_mem(src.mem, 16), op_imm8(imm), {}} }, 968) } -emit_dpps_xmm_xmm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, imm: i8) { append(instructions, inst_dpps_xmm_xmm_imm8(dst, src, imm)) } -emit_dpps_xmm_m128_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128, imm: i8) { append(instructions, inst_dpps_xmm_m128_imm8(dst, src, imm)) } +emit_dpps_xmm_xmm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, imm: i8) { append_elem(instructions, inst_dpps_xmm_xmm_imm8(dst, src, imm)) } +emit_dpps_xmm_m128_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128, imm: i8) { append_elem(instructions, inst_dpps_xmm_m128_imm8(dst, src, imm)) } inst_dppd_xmm_xmm_imm8 :: #force_inline proc "contextless" (dst: XMM, src: XMM, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .DPPD, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_imm8(imm), {}} }, 969) } inst_dppd_xmm_m128_imm8 :: #force_inline proc "contextless" (dst: XMM, src: Mem128, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .DPPD, operand_count = 3, ops = {op_xmm(dst), op_mem(src.mem, 16), op_imm8(imm), {}} }, 969) } -emit_dppd_xmm_xmm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, imm: i8) { append(instructions, inst_dppd_xmm_xmm_imm8(dst, src, imm)) } -emit_dppd_xmm_m128_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128, imm: i8) { append(instructions, inst_dppd_xmm_m128_imm8(dst, src, imm)) } +emit_dppd_xmm_xmm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, imm: i8) { append_elem(instructions, inst_dppd_xmm_xmm_imm8(dst, src, imm)) } +emit_dppd_xmm_m128_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128, imm: i8) { append_elem(instructions, inst_dppd_xmm_m128_imm8(dst, src, imm)) } inst_extractps_r32_xmm_imm8 :: #force_inline proc "contextless" (dst: GPR32, src: XMM, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .EXTRACTPS, operand_count = 3, ops = {op_gpr32(dst), op_xmm(src), op_imm8(imm), {}} }, 970) } inst_extractps_m32_xmm_imm8 :: #force_inline proc "contextless" (dst: Mem32, src: XMM, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .EXTRACTPS, operand_count = 3, ops = {op_mem(dst.mem, 4), op_xmm(src), op_imm8(imm), {}} }, 970) } -emit_extractps_r32_xmm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: XMM, imm: i8) { append(instructions, inst_extractps_r32_xmm_imm8(dst, src, imm)) } -emit_extractps_m32_xmm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem32, src: XMM, imm: i8) { append(instructions, inst_extractps_m32_xmm_imm8(dst, src, imm)) } +emit_extractps_r32_xmm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: XMM, imm: i8) { append_elem(instructions, inst_extractps_r32_xmm_imm8(dst, src, imm)) } +emit_extractps_m32_xmm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem32, src: XMM, imm: i8) { append_elem(instructions, inst_extractps_m32_xmm_imm8(dst, src, imm)) } inst_insertps_xmm_xmm_imm8 :: #force_inline proc "contextless" (dst: XMM, src: XMM, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .INSERTPS, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_imm8(imm), {}} }, 971) } inst_insertps_xmm_m32_imm8 :: #force_inline proc "contextless" (dst: XMM, src: Mem32, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .INSERTPS, operand_count = 3, ops = {op_xmm(dst), op_mem(src.mem, 4), op_imm8(imm), {}} }, 971) } -emit_insertps_xmm_xmm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, imm: i8) { append(instructions, inst_insertps_xmm_xmm_imm8(dst, src, imm)) } -emit_insertps_xmm_m32_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem32, imm: i8) { append(instructions, inst_insertps_xmm_m32_imm8(dst, src, imm)) } +emit_insertps_xmm_xmm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, imm: i8) { append_elem(instructions, inst_insertps_xmm_xmm_imm8(dst, src, imm)) } +emit_insertps_xmm_m32_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem32, imm: i8) { append_elem(instructions, inst_insertps_xmm_m32_imm8(dst, src, imm)) } inst_mpsadbw_xmm_xmm_imm8 :: #force_inline proc "contextless" (dst: XMM, src: XMM, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .MPSADBW, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_imm8(imm), {}} }, 972) } inst_mpsadbw_xmm_m128_imm8 :: #force_inline proc "contextless" (dst: XMM, src: Mem128, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .MPSADBW, operand_count = 3, ops = {op_xmm(dst), op_mem(src.mem, 16), op_imm8(imm), {}} }, 972) } -emit_mpsadbw_xmm_xmm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, imm: i8) { append(instructions, inst_mpsadbw_xmm_xmm_imm8(dst, src, imm)) } -emit_mpsadbw_xmm_m128_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128, imm: i8) { append(instructions, inst_mpsadbw_xmm_m128_imm8(dst, src, imm)) } +emit_mpsadbw_xmm_xmm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, imm: i8) { append_elem(instructions, inst_mpsadbw_xmm_xmm_imm8(dst, src, imm)) } +emit_mpsadbw_xmm_m128_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128, imm: i8) { append_elem(instructions, inst_mpsadbw_xmm_m128_imm8(dst, src, imm)) } inst_packusdw_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .PACKUSDW, operand_count = 2, ops = {op_xmm(dst), op_xmm(src), {}, {}} }, 973) } inst_packusdw_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .PACKUSDW, operand_count = 2, ops = {op_xmm(dst), op_mem(src.mem, 16), {}, {}} }, 973) } -emit_packusdw_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append(instructions, inst_packusdw_xmm_xmm(dst, src)) } -emit_packusdw_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append(instructions, inst_packusdw_xmm_m128(dst, src)) } +emit_packusdw_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append_elem(instructions, inst_packusdw_xmm_xmm(dst, src)) } +emit_packusdw_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append_elem(instructions, inst_packusdw_xmm_m128(dst, src)) } inst_pextrb_r8_xmm_imm8 :: #force_inline proc "contextless" (dst: GPR8, src: XMM, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .PEXTRB, operand_count = 3, ops = {op_gpr8(dst), op_xmm(src), op_imm8(imm), {}} }, 974) } inst_pextrb_m8_xmm_imm8 :: #force_inline proc "contextless" (dst: Mem8, src: XMM, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .PEXTRB, operand_count = 3, ops = {op_mem(dst.mem, 1), op_xmm(src), op_imm8(imm), {}} }, 974) } -emit_pextrb_r8_xmm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR8, src: XMM, imm: i8) { append(instructions, inst_pextrb_r8_xmm_imm8(dst, src, imm)) } -emit_pextrb_m8_xmm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem8, src: XMM, imm: i8) { append(instructions, inst_pextrb_m8_xmm_imm8(dst, src, imm)) } +emit_pextrb_r8_xmm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR8, src: XMM, imm: i8) { append_elem(instructions, inst_pextrb_r8_xmm_imm8(dst, src, imm)) } +emit_pextrb_m8_xmm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem8, src: XMM, imm: i8) { append_elem(instructions, inst_pextrb_m8_xmm_imm8(dst, src, imm)) } inst_pextrd_r32_xmm_imm8 :: #force_inline proc "contextless" (dst: GPR32, src: XMM, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .PEXTRD, operand_count = 3, ops = {op_gpr32(dst), op_xmm(src), op_imm8(imm), {}} }, 975) } inst_pextrd_m32_xmm_imm8 :: #force_inline proc "contextless" (dst: Mem32, src: XMM, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .PEXTRD, operand_count = 3, ops = {op_mem(dst.mem, 4), op_xmm(src), op_imm8(imm), {}} }, 975) } -emit_pextrd_r32_xmm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: XMM, imm: i8) { append(instructions, inst_pextrd_r32_xmm_imm8(dst, src, imm)) } -emit_pextrd_m32_xmm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem32, src: XMM, imm: i8) { append(instructions, inst_pextrd_m32_xmm_imm8(dst, src, imm)) } +emit_pextrd_r32_xmm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: XMM, imm: i8) { append_elem(instructions, inst_pextrd_r32_xmm_imm8(dst, src, imm)) } +emit_pextrd_m32_xmm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem32, src: XMM, imm: i8) { append_elem(instructions, inst_pextrd_m32_xmm_imm8(dst, src, imm)) } inst_pextrq_r64_xmm_imm8 :: #force_inline proc "contextless" (dst: GPR64, src: XMM, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .PEXTRQ, operand_count = 3, ops = {op_gpr64(dst), op_xmm(src), op_imm8(imm), {}} }, 976) } inst_pextrq_m64_xmm_imm8 :: #force_inline proc "contextless" (dst: Mem64, src: XMM, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .PEXTRQ, operand_count = 3, ops = {op_mem(dst.mem, 8), op_xmm(src), op_imm8(imm), {}} }, 976) } -emit_pextrq_r64_xmm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: XMM, imm: i8) { append(instructions, inst_pextrq_r64_xmm_imm8(dst, src, imm)) } -emit_pextrq_m64_xmm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem64, src: XMM, imm: i8) { append(instructions, inst_pextrq_m64_xmm_imm8(dst, src, imm)) } +emit_pextrq_r64_xmm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: XMM, imm: i8) { append_elem(instructions, inst_pextrq_r64_xmm_imm8(dst, src, imm)) } +emit_pextrq_m64_xmm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem64, src: XMM, imm: i8) { append_elem(instructions, inst_pextrq_m64_xmm_imm8(dst, src, imm)) } inst_phminposuw_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .PHMINPOSUW, operand_count = 2, ops = {op_xmm(dst), op_xmm(src), {}, {}} }, 977) } inst_phminposuw_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .PHMINPOSUW, operand_count = 2, ops = {op_xmm(dst), op_mem(src.mem, 16), {}, {}} }, 977) } -emit_phminposuw_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append(instructions, inst_phminposuw_xmm_xmm(dst, src)) } -emit_phminposuw_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append(instructions, inst_phminposuw_xmm_m128(dst, src)) } +emit_phminposuw_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append_elem(instructions, inst_phminposuw_xmm_xmm(dst, src)) } +emit_phminposuw_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append_elem(instructions, inst_phminposuw_xmm_m128(dst, src)) } inst_pinsrb_xmm_r8_imm8 :: #force_inline proc "contextless" (dst: XMM, src: GPR8, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .PINSRB, operand_count = 3, ops = {op_xmm(dst), op_gpr8(src), op_imm8(imm), {}} }, 978) } inst_pinsrb_xmm_m8_imm8 :: #force_inline proc "contextless" (dst: XMM, src: Mem8, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .PINSRB, operand_count = 3, ops = {op_xmm(dst), op_mem(src.mem, 1), op_imm8(imm), {}} }, 978) } -emit_pinsrb_xmm_r8_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: GPR8, imm: i8) { append(instructions, inst_pinsrb_xmm_r8_imm8(dst, src, imm)) } -emit_pinsrb_xmm_m8_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem8, imm: i8) { append(instructions, inst_pinsrb_xmm_m8_imm8(dst, src, imm)) } +emit_pinsrb_xmm_r8_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: GPR8, imm: i8) { append_elem(instructions, inst_pinsrb_xmm_r8_imm8(dst, src, imm)) } +emit_pinsrb_xmm_m8_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem8, imm: i8) { append_elem(instructions, inst_pinsrb_xmm_m8_imm8(dst, src, imm)) } inst_pinsrd_xmm_r32_imm8 :: #force_inline proc "contextless" (dst: XMM, src: GPR32, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .PINSRD, operand_count = 3, ops = {op_xmm(dst), op_gpr32(src), op_imm8(imm), {}} }, 979) } inst_pinsrd_xmm_m32_imm8 :: #force_inline proc "contextless" (dst: XMM, src: Mem32, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .PINSRD, operand_count = 3, ops = {op_xmm(dst), op_mem(src.mem, 4), op_imm8(imm), {}} }, 979) } -emit_pinsrd_xmm_r32_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: GPR32, imm: i8) { append(instructions, inst_pinsrd_xmm_r32_imm8(dst, src, imm)) } -emit_pinsrd_xmm_m32_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem32, imm: i8) { append(instructions, inst_pinsrd_xmm_m32_imm8(dst, src, imm)) } +emit_pinsrd_xmm_r32_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: GPR32, imm: i8) { append_elem(instructions, inst_pinsrd_xmm_r32_imm8(dst, src, imm)) } +emit_pinsrd_xmm_m32_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem32, imm: i8) { append_elem(instructions, inst_pinsrd_xmm_m32_imm8(dst, src, imm)) } inst_pinsrq_xmm_r64_imm8 :: #force_inline proc "contextless" (dst: XMM, src: GPR64, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .PINSRQ, operand_count = 3, ops = {op_xmm(dst), op_gpr64(src), op_imm8(imm), {}} }, 980) } inst_pinsrq_xmm_m64_imm8 :: #force_inline proc "contextless" (dst: XMM, src: Mem64, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .PINSRQ, operand_count = 3, ops = {op_xmm(dst), op_mem(src.mem, 8), op_imm8(imm), {}} }, 980) } -emit_pinsrq_xmm_r64_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: GPR64, imm: i8) { append(instructions, inst_pinsrq_xmm_r64_imm8(dst, src, imm)) } -emit_pinsrq_xmm_m64_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem64, imm: i8) { append(instructions, inst_pinsrq_xmm_m64_imm8(dst, src, imm)) } +emit_pinsrq_xmm_r64_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: GPR64, imm: i8) { append_elem(instructions, inst_pinsrq_xmm_r64_imm8(dst, src, imm)) } +emit_pinsrq_xmm_m64_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem64, imm: i8) { append_elem(instructions, inst_pinsrq_xmm_m64_imm8(dst, src, imm)) } inst_pmaxsb_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .PMAXSB, operand_count = 2, ops = {op_xmm(dst), op_xmm(src), {}, {}} }, 981) } inst_pmaxsb_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .PMAXSB, operand_count = 2, ops = {op_xmm(dst), op_mem(src.mem, 16), {}, {}} }, 981) } -emit_pmaxsb_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append(instructions, inst_pmaxsb_xmm_xmm(dst, src)) } -emit_pmaxsb_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append(instructions, inst_pmaxsb_xmm_m128(dst, src)) } +emit_pmaxsb_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append_elem(instructions, inst_pmaxsb_xmm_xmm(dst, src)) } +emit_pmaxsb_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append_elem(instructions, inst_pmaxsb_xmm_m128(dst, src)) } inst_pmaxsd_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .PMAXSD, operand_count = 2, ops = {op_xmm(dst), op_xmm(src), {}, {}} }, 982) } inst_pmaxsd_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .PMAXSD, operand_count = 2, ops = {op_xmm(dst), op_mem(src.mem, 16), {}, {}} }, 982) } -emit_pmaxsd_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append(instructions, inst_pmaxsd_xmm_xmm(dst, src)) } -emit_pmaxsd_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append(instructions, inst_pmaxsd_xmm_m128(dst, src)) } +emit_pmaxsd_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append_elem(instructions, inst_pmaxsd_xmm_xmm(dst, src)) } +emit_pmaxsd_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append_elem(instructions, inst_pmaxsd_xmm_m128(dst, src)) } inst_pmaxuw_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .PMAXUW, operand_count = 2, ops = {op_xmm(dst), op_xmm(src), {}, {}} }, 983) } inst_pmaxuw_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .PMAXUW, operand_count = 2, ops = {op_xmm(dst), op_mem(src.mem, 16), {}, {}} }, 983) } -emit_pmaxuw_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append(instructions, inst_pmaxuw_xmm_xmm(dst, src)) } -emit_pmaxuw_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append(instructions, inst_pmaxuw_xmm_m128(dst, src)) } +emit_pmaxuw_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append_elem(instructions, inst_pmaxuw_xmm_xmm(dst, src)) } +emit_pmaxuw_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append_elem(instructions, inst_pmaxuw_xmm_m128(dst, src)) } inst_pmaxud_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .PMAXUD, operand_count = 2, ops = {op_xmm(dst), op_xmm(src), {}, {}} }, 984) } inst_pmaxud_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .PMAXUD, operand_count = 2, ops = {op_xmm(dst), op_mem(src.mem, 16), {}, {}} }, 984) } -emit_pmaxud_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append(instructions, inst_pmaxud_xmm_xmm(dst, src)) } -emit_pmaxud_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append(instructions, inst_pmaxud_xmm_m128(dst, src)) } +emit_pmaxud_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append_elem(instructions, inst_pmaxud_xmm_xmm(dst, src)) } +emit_pmaxud_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append_elem(instructions, inst_pmaxud_xmm_m128(dst, src)) } inst_pminsb_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .PMINSB, operand_count = 2, ops = {op_xmm(dst), op_xmm(src), {}, {}} }, 985) } inst_pminsb_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .PMINSB, operand_count = 2, ops = {op_xmm(dst), op_mem(src.mem, 16), {}, {}} }, 985) } -emit_pminsb_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append(instructions, inst_pminsb_xmm_xmm(dst, src)) } -emit_pminsb_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append(instructions, inst_pminsb_xmm_m128(dst, src)) } +emit_pminsb_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append_elem(instructions, inst_pminsb_xmm_xmm(dst, src)) } +emit_pminsb_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append_elem(instructions, inst_pminsb_xmm_m128(dst, src)) } inst_pminsd_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .PMINSD, operand_count = 2, ops = {op_xmm(dst), op_xmm(src), {}, {}} }, 986) } inst_pminsd_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .PMINSD, operand_count = 2, ops = {op_xmm(dst), op_mem(src.mem, 16), {}, {}} }, 986) } -emit_pminsd_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append(instructions, inst_pminsd_xmm_xmm(dst, src)) } -emit_pminsd_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append(instructions, inst_pminsd_xmm_m128(dst, src)) } +emit_pminsd_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append_elem(instructions, inst_pminsd_xmm_xmm(dst, src)) } +emit_pminsd_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append_elem(instructions, inst_pminsd_xmm_m128(dst, src)) } inst_pminuw_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .PMINUW, operand_count = 2, ops = {op_xmm(dst), op_xmm(src), {}, {}} }, 987) } inst_pminuw_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .PMINUW, operand_count = 2, ops = {op_xmm(dst), op_mem(src.mem, 16), {}, {}} }, 987) } -emit_pminuw_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append(instructions, inst_pminuw_xmm_xmm(dst, src)) } -emit_pminuw_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append(instructions, inst_pminuw_xmm_m128(dst, src)) } +emit_pminuw_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append_elem(instructions, inst_pminuw_xmm_xmm(dst, src)) } +emit_pminuw_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append_elem(instructions, inst_pminuw_xmm_m128(dst, src)) } inst_pminud_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .PMINUD, operand_count = 2, ops = {op_xmm(dst), op_xmm(src), {}, {}} }, 988) } inst_pminud_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .PMINUD, operand_count = 2, ops = {op_xmm(dst), op_mem(src.mem, 16), {}, {}} }, 988) } -emit_pminud_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append(instructions, inst_pminud_xmm_xmm(dst, src)) } -emit_pminud_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append(instructions, inst_pminud_xmm_m128(dst, src)) } +emit_pminud_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append_elem(instructions, inst_pminud_xmm_xmm(dst, src)) } +emit_pminud_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append_elem(instructions, inst_pminud_xmm_m128(dst, src)) } inst_pmovsxbw_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .PMOVSXBW, operand_count = 2, ops = {op_xmm(dst), op_xmm(src), {}, {}} }, 989) } inst_pmovsxbw_xmm_m64 :: #force_inline proc "contextless" (dst: XMM, src: Mem64) -> Instruction { return with_hint(Instruction{ mnemonic = .PMOVSXBW, operand_count = 2, ops = {op_xmm(dst), op_mem(src.mem, 8), {}, {}} }, 989) } -emit_pmovsxbw_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append(instructions, inst_pmovsxbw_xmm_xmm(dst, src)) } -emit_pmovsxbw_xmm_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem64) { append(instructions, inst_pmovsxbw_xmm_m64(dst, src)) } +emit_pmovsxbw_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append_elem(instructions, inst_pmovsxbw_xmm_xmm(dst, src)) } +emit_pmovsxbw_xmm_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem64) { append_elem(instructions, inst_pmovsxbw_xmm_m64(dst, src)) } inst_pmovsxbd_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .PMOVSXBD, operand_count = 2, ops = {op_xmm(dst), op_xmm(src), {}, {}} }, 990) } inst_pmovsxbd_xmm_m32 :: #force_inline proc "contextless" (dst: XMM, src: Mem32) -> Instruction { return with_hint(Instruction{ mnemonic = .PMOVSXBD, operand_count = 2, ops = {op_xmm(dst), op_mem(src.mem, 4), {}, {}} }, 990) } -emit_pmovsxbd_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append(instructions, inst_pmovsxbd_xmm_xmm(dst, src)) } -emit_pmovsxbd_xmm_m32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem32) { append(instructions, inst_pmovsxbd_xmm_m32(dst, src)) } +emit_pmovsxbd_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append_elem(instructions, inst_pmovsxbd_xmm_xmm(dst, src)) } +emit_pmovsxbd_xmm_m32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem32) { append_elem(instructions, inst_pmovsxbd_xmm_m32(dst, src)) } inst_pmovsxbq_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .PMOVSXBQ, operand_count = 2, ops = {op_xmm(dst), op_xmm(src), {}, {}} }, 991) } inst_pmovsxbq_xmm_m32 :: #force_inline proc "contextless" (dst: XMM, src: Mem32) -> Instruction { return with_hint(Instruction{ mnemonic = .PMOVSXBQ, operand_count = 2, ops = {op_xmm(dst), op_mem(src.mem, 4), {}, {}} }, 991) } -emit_pmovsxbq_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append(instructions, inst_pmovsxbq_xmm_xmm(dst, src)) } -emit_pmovsxbq_xmm_m32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem32) { append(instructions, inst_pmovsxbq_xmm_m32(dst, src)) } +emit_pmovsxbq_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append_elem(instructions, inst_pmovsxbq_xmm_xmm(dst, src)) } +emit_pmovsxbq_xmm_m32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem32) { append_elem(instructions, inst_pmovsxbq_xmm_m32(dst, src)) } inst_pmovsxwd_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .PMOVSXWD, operand_count = 2, ops = {op_xmm(dst), op_xmm(src), {}, {}} }, 992) } inst_pmovsxwd_xmm_m64 :: #force_inline proc "contextless" (dst: XMM, src: Mem64) -> Instruction { return with_hint(Instruction{ mnemonic = .PMOVSXWD, operand_count = 2, ops = {op_xmm(dst), op_mem(src.mem, 8), {}, {}} }, 992) } -emit_pmovsxwd_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append(instructions, inst_pmovsxwd_xmm_xmm(dst, src)) } -emit_pmovsxwd_xmm_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem64) { append(instructions, inst_pmovsxwd_xmm_m64(dst, src)) } +emit_pmovsxwd_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append_elem(instructions, inst_pmovsxwd_xmm_xmm(dst, src)) } +emit_pmovsxwd_xmm_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem64) { append_elem(instructions, inst_pmovsxwd_xmm_m64(dst, src)) } inst_pmovsxwq_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .PMOVSXWQ, operand_count = 2, ops = {op_xmm(dst), op_xmm(src), {}, {}} }, 993) } inst_pmovsxwq_xmm_m32 :: #force_inline proc "contextless" (dst: XMM, src: Mem32) -> Instruction { return with_hint(Instruction{ mnemonic = .PMOVSXWQ, operand_count = 2, ops = {op_xmm(dst), op_mem(src.mem, 4), {}, {}} }, 993) } -emit_pmovsxwq_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append(instructions, inst_pmovsxwq_xmm_xmm(dst, src)) } -emit_pmovsxwq_xmm_m32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem32) { append(instructions, inst_pmovsxwq_xmm_m32(dst, src)) } +emit_pmovsxwq_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append_elem(instructions, inst_pmovsxwq_xmm_xmm(dst, src)) } +emit_pmovsxwq_xmm_m32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem32) { append_elem(instructions, inst_pmovsxwq_xmm_m32(dst, src)) } inst_pmovsxdq_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .PMOVSXDQ, operand_count = 2, ops = {op_xmm(dst), op_xmm(src), {}, {}} }, 994) } inst_pmovsxdq_xmm_m64 :: #force_inline proc "contextless" (dst: XMM, src: Mem64) -> Instruction { return with_hint(Instruction{ mnemonic = .PMOVSXDQ, operand_count = 2, ops = {op_xmm(dst), op_mem(src.mem, 8), {}, {}} }, 994) } -emit_pmovsxdq_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append(instructions, inst_pmovsxdq_xmm_xmm(dst, src)) } -emit_pmovsxdq_xmm_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem64) { append(instructions, inst_pmovsxdq_xmm_m64(dst, src)) } +emit_pmovsxdq_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append_elem(instructions, inst_pmovsxdq_xmm_xmm(dst, src)) } +emit_pmovsxdq_xmm_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem64) { append_elem(instructions, inst_pmovsxdq_xmm_m64(dst, src)) } inst_pmovzxbw_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .PMOVZXBW, operand_count = 2, ops = {op_xmm(dst), op_xmm(src), {}, {}} }, 995) } inst_pmovzxbw_xmm_m64 :: #force_inline proc "contextless" (dst: XMM, src: Mem64) -> Instruction { return with_hint(Instruction{ mnemonic = .PMOVZXBW, operand_count = 2, ops = {op_xmm(dst), op_mem(src.mem, 8), {}, {}} }, 995) } -emit_pmovzxbw_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append(instructions, inst_pmovzxbw_xmm_xmm(dst, src)) } -emit_pmovzxbw_xmm_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem64) { append(instructions, inst_pmovzxbw_xmm_m64(dst, src)) } +emit_pmovzxbw_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append_elem(instructions, inst_pmovzxbw_xmm_xmm(dst, src)) } +emit_pmovzxbw_xmm_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem64) { append_elem(instructions, inst_pmovzxbw_xmm_m64(dst, src)) } inst_pmovzxbd_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .PMOVZXBD, operand_count = 2, ops = {op_xmm(dst), op_xmm(src), {}, {}} }, 996) } inst_pmovzxbd_xmm_m32 :: #force_inline proc "contextless" (dst: XMM, src: Mem32) -> Instruction { return with_hint(Instruction{ mnemonic = .PMOVZXBD, operand_count = 2, ops = {op_xmm(dst), op_mem(src.mem, 4), {}, {}} }, 996) } -emit_pmovzxbd_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append(instructions, inst_pmovzxbd_xmm_xmm(dst, src)) } -emit_pmovzxbd_xmm_m32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem32) { append(instructions, inst_pmovzxbd_xmm_m32(dst, src)) } +emit_pmovzxbd_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append_elem(instructions, inst_pmovzxbd_xmm_xmm(dst, src)) } +emit_pmovzxbd_xmm_m32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem32) { append_elem(instructions, inst_pmovzxbd_xmm_m32(dst, src)) } inst_pmovzxbq_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .PMOVZXBQ, operand_count = 2, ops = {op_xmm(dst), op_xmm(src), {}, {}} }, 997) } inst_pmovzxbq_xmm_m32 :: #force_inline proc "contextless" (dst: XMM, src: Mem32) -> Instruction { return with_hint(Instruction{ mnemonic = .PMOVZXBQ, operand_count = 2, ops = {op_xmm(dst), op_mem(src.mem, 4), {}, {}} }, 997) } -emit_pmovzxbq_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append(instructions, inst_pmovzxbq_xmm_xmm(dst, src)) } -emit_pmovzxbq_xmm_m32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem32) { append(instructions, inst_pmovzxbq_xmm_m32(dst, src)) } +emit_pmovzxbq_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append_elem(instructions, inst_pmovzxbq_xmm_xmm(dst, src)) } +emit_pmovzxbq_xmm_m32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem32) { append_elem(instructions, inst_pmovzxbq_xmm_m32(dst, src)) } inst_pmovzxwd_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .PMOVZXWD, operand_count = 2, ops = {op_xmm(dst), op_xmm(src), {}, {}} }, 998) } inst_pmovzxwd_xmm_m64 :: #force_inline proc "contextless" (dst: XMM, src: Mem64) -> Instruction { return with_hint(Instruction{ mnemonic = .PMOVZXWD, operand_count = 2, ops = {op_xmm(dst), op_mem(src.mem, 8), {}, {}} }, 998) } -emit_pmovzxwd_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append(instructions, inst_pmovzxwd_xmm_xmm(dst, src)) } -emit_pmovzxwd_xmm_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem64) { append(instructions, inst_pmovzxwd_xmm_m64(dst, src)) } +emit_pmovzxwd_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append_elem(instructions, inst_pmovzxwd_xmm_xmm(dst, src)) } +emit_pmovzxwd_xmm_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem64) { append_elem(instructions, inst_pmovzxwd_xmm_m64(dst, src)) } inst_pmovzxwq_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .PMOVZXWQ, operand_count = 2, ops = {op_xmm(dst), op_xmm(src), {}, {}} }, 999) } inst_pmovzxwq_xmm_m32 :: #force_inline proc "contextless" (dst: XMM, src: Mem32) -> Instruction { return with_hint(Instruction{ mnemonic = .PMOVZXWQ, operand_count = 2, ops = {op_xmm(dst), op_mem(src.mem, 4), {}, {}} }, 999) } -emit_pmovzxwq_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append(instructions, inst_pmovzxwq_xmm_xmm(dst, src)) } -emit_pmovzxwq_xmm_m32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem32) { append(instructions, inst_pmovzxwq_xmm_m32(dst, src)) } +emit_pmovzxwq_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append_elem(instructions, inst_pmovzxwq_xmm_xmm(dst, src)) } +emit_pmovzxwq_xmm_m32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem32) { append_elem(instructions, inst_pmovzxwq_xmm_m32(dst, src)) } inst_pmovzxdq_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .PMOVZXDQ, operand_count = 2, ops = {op_xmm(dst), op_xmm(src), {}, {}} }, 1000) } inst_pmovzxdq_xmm_m64 :: #force_inline proc "contextless" (dst: XMM, src: Mem64) -> Instruction { return with_hint(Instruction{ mnemonic = .PMOVZXDQ, operand_count = 2, ops = {op_xmm(dst), op_mem(src.mem, 8), {}, {}} }, 1000) } -emit_pmovzxdq_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append(instructions, inst_pmovzxdq_xmm_xmm(dst, src)) } -emit_pmovzxdq_xmm_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem64) { append(instructions, inst_pmovzxdq_xmm_m64(dst, src)) } +emit_pmovzxdq_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append_elem(instructions, inst_pmovzxdq_xmm_xmm(dst, src)) } +emit_pmovzxdq_xmm_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem64) { append_elem(instructions, inst_pmovzxdq_xmm_m64(dst, src)) } inst_pmuldq_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .PMULDQ, operand_count = 2, ops = {op_xmm(dst), op_xmm(src), {}, {}} }, 1001) } inst_pmuldq_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .PMULDQ, operand_count = 2, ops = {op_xmm(dst), op_mem(src.mem, 16), {}, {}} }, 1001) } -emit_pmuldq_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append(instructions, inst_pmuldq_xmm_xmm(dst, src)) } -emit_pmuldq_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append(instructions, inst_pmuldq_xmm_m128(dst, src)) } +emit_pmuldq_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append_elem(instructions, inst_pmuldq_xmm_xmm(dst, src)) } +emit_pmuldq_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append_elem(instructions, inst_pmuldq_xmm_m128(dst, src)) } inst_pmulld_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .PMULLD, operand_count = 2, ops = {op_xmm(dst), op_xmm(src), {}, {}} }, 1002) } inst_pmulld_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .PMULLD, operand_count = 2, ops = {op_xmm(dst), op_mem(src.mem, 16), {}, {}} }, 1002) } -emit_pmulld_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append(instructions, inst_pmulld_xmm_xmm(dst, src)) } -emit_pmulld_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append(instructions, inst_pmulld_xmm_m128(dst, src)) } +emit_pmulld_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append_elem(instructions, inst_pmulld_xmm_xmm(dst, src)) } +emit_pmulld_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append_elem(instructions, inst_pmulld_xmm_m128(dst, src)) } inst_ptest_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .PTEST, operand_count = 2, ops = {op_xmm(dst), op_xmm(src), {}, {}} }, 1003) } inst_ptest_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .PTEST, operand_count = 2, ops = {op_xmm(dst), op_mem(src.mem, 16), {}, {}} }, 1003) } -emit_ptest_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append(instructions, inst_ptest_xmm_xmm(dst, src)) } -emit_ptest_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append(instructions, inst_ptest_xmm_m128(dst, src)) } +emit_ptest_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append_elem(instructions, inst_ptest_xmm_xmm(dst, src)) } +emit_ptest_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append_elem(instructions, inst_ptest_xmm_m128(dst, src)) } inst_roundps_xmm_xmm_imm8 :: #force_inline proc "contextless" (dst: XMM, src: XMM, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .ROUNDPS, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_imm8(imm), {}} }, 1004) } inst_roundps_xmm_m128_imm8 :: #force_inline proc "contextless" (dst: XMM, src: Mem128, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .ROUNDPS, operand_count = 3, ops = {op_xmm(dst), op_mem(src.mem, 16), op_imm8(imm), {}} }, 1004) } -emit_roundps_xmm_xmm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, imm: i8) { append(instructions, inst_roundps_xmm_xmm_imm8(dst, src, imm)) } -emit_roundps_xmm_m128_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128, imm: i8) { append(instructions, inst_roundps_xmm_m128_imm8(dst, src, imm)) } +emit_roundps_xmm_xmm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, imm: i8) { append_elem(instructions, inst_roundps_xmm_xmm_imm8(dst, src, imm)) } +emit_roundps_xmm_m128_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128, imm: i8) { append_elem(instructions, inst_roundps_xmm_m128_imm8(dst, src, imm)) } inst_roundpd_xmm_xmm_imm8 :: #force_inline proc "contextless" (dst: XMM, src: XMM, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .ROUNDPD, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_imm8(imm), {}} }, 1005) } inst_roundpd_xmm_m128_imm8 :: #force_inline proc "contextless" (dst: XMM, src: Mem128, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .ROUNDPD, operand_count = 3, ops = {op_xmm(dst), op_mem(src.mem, 16), op_imm8(imm), {}} }, 1005) } -emit_roundpd_xmm_xmm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, imm: i8) { append(instructions, inst_roundpd_xmm_xmm_imm8(dst, src, imm)) } -emit_roundpd_xmm_m128_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128, imm: i8) { append(instructions, inst_roundpd_xmm_m128_imm8(dst, src, imm)) } +emit_roundpd_xmm_xmm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, imm: i8) { append_elem(instructions, inst_roundpd_xmm_xmm_imm8(dst, src, imm)) } +emit_roundpd_xmm_m128_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128, imm: i8) { append_elem(instructions, inst_roundpd_xmm_m128_imm8(dst, src, imm)) } inst_roundss_xmm_xmm_imm8 :: #force_inline proc "contextless" (dst: XMM, src: XMM, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .ROUNDSS, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_imm8(imm), {}} }, 1006) } inst_roundss_xmm_m32_imm8 :: #force_inline proc "contextless" (dst: XMM, src: Mem32, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .ROUNDSS, operand_count = 3, ops = {op_xmm(dst), op_mem(src.mem, 4), op_imm8(imm), {}} }, 1006) } -emit_roundss_xmm_xmm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, imm: i8) { append(instructions, inst_roundss_xmm_xmm_imm8(dst, src, imm)) } -emit_roundss_xmm_m32_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem32, imm: i8) { append(instructions, inst_roundss_xmm_m32_imm8(dst, src, imm)) } +emit_roundss_xmm_xmm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, imm: i8) { append_elem(instructions, inst_roundss_xmm_xmm_imm8(dst, src, imm)) } +emit_roundss_xmm_m32_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem32, imm: i8) { append_elem(instructions, inst_roundss_xmm_m32_imm8(dst, src, imm)) } inst_roundsd_xmm_xmm_imm8 :: #force_inline proc "contextless" (dst: XMM, src: XMM, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .ROUNDSD, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_imm8(imm), {}} }, 1007) } inst_roundsd_xmm_m64_imm8 :: #force_inline proc "contextless" (dst: XMM, src: Mem64, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .ROUNDSD, operand_count = 3, ops = {op_xmm(dst), op_mem(src.mem, 8), op_imm8(imm), {}} }, 1007) } -emit_roundsd_xmm_xmm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, imm: i8) { append(instructions, inst_roundsd_xmm_xmm_imm8(dst, src, imm)) } -emit_roundsd_xmm_m64_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem64, imm: i8) { append(instructions, inst_roundsd_xmm_m64_imm8(dst, src, imm)) } +emit_roundsd_xmm_xmm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, imm: i8) { append_elem(instructions, inst_roundsd_xmm_xmm_imm8(dst, src, imm)) } +emit_roundsd_xmm_m64_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem64, imm: i8) { append_elem(instructions, inst_roundsd_xmm_m64_imm8(dst, src, imm)) } inst_pcmpeqq_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .PCMPEQQ, operand_count = 2, ops = {op_xmm(dst), op_xmm(src), {}, {}} }, 1008) } inst_pcmpeqq_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .PCMPEQQ, operand_count = 2, ops = {op_xmm(dst), op_mem(src.mem, 16), {}, {}} }, 1008) } -emit_pcmpeqq_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append(instructions, inst_pcmpeqq_xmm_xmm(dst, src)) } -emit_pcmpeqq_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append(instructions, inst_pcmpeqq_xmm_m128(dst, src)) } +emit_pcmpeqq_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append_elem(instructions, inst_pcmpeqq_xmm_xmm(dst, src)) } +emit_pcmpeqq_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append_elem(instructions, inst_pcmpeqq_xmm_m128(dst, src)) } inst_crc32_r32_r8 :: #force_inline proc "contextless" (dst: GPR32, src: GPR8) -> Instruction { return with_hint(Instruction{ mnemonic = .CRC32, operand_count = 2, ops = {op_gpr32(dst), op_gpr8(src), {}, {}} }, 1009) } inst_crc32_r32_m8 :: #force_inline proc "contextless" (dst: GPR32, src: Mem8) -> Instruction { return with_hint(Instruction{ mnemonic = .CRC32, operand_count = 2, ops = {op_gpr32(dst), op_mem(src.mem, 1), {}, {}} }, 1009) } inst_crc32_r32_r16 :: #force_inline proc "contextless" (dst: GPR32, src: GPR16) -> Instruction { return with_hint(Instruction{ mnemonic = .CRC32, operand_count = 2, ops = {op_gpr32(dst), op_gpr16(src), {}, {}} }, 1010) } @@ -3165,2322 +3165,2322 @@ inst_crc32_r64_r8 :: #force_inline proc "contextless" (dst: GP inst_crc32_r64_m8 :: #force_inline proc "contextless" (dst: GPR64, src: Mem8) -> Instruction { return with_hint(Instruction{ mnemonic = .CRC32, operand_count = 2, ops = {op_gpr64(dst), op_mem(src.mem, 1), {}, {}} }, 1012) } inst_crc32_r64_r64 :: #force_inline proc "contextless" (dst: GPR64, src: GPR64) -> Instruction { return with_hint(Instruction{ mnemonic = .CRC32, operand_count = 2, ops = {op_gpr64(dst), op_gpr64(src), {}, {}} }, 1013) } inst_crc32_r64_m64 :: #force_inline proc "contextless" (dst: GPR64, src: Mem64) -> Instruction { return with_hint(Instruction{ mnemonic = .CRC32, operand_count = 2, ops = {op_gpr64(dst), op_mem(src.mem, 8), {}, {}} }, 1013) } -emit_crc32_r32_r8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: GPR8) { append(instructions, inst_crc32_r32_r8(dst, src)) } -emit_crc32_r32_m8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: Mem8) { append(instructions, inst_crc32_r32_m8(dst, src)) } -emit_crc32_r32_r16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: GPR16) { append(instructions, inst_crc32_r32_r16(dst, src)) } -emit_crc32_r32_m16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: Mem16) { append(instructions, inst_crc32_r32_m16(dst, src)) } -emit_crc32_r32_r32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: GPR32) { append(instructions, inst_crc32_r32_r32(dst, src)) } -emit_crc32_r32_m32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: Mem32) { append(instructions, inst_crc32_r32_m32(dst, src)) } -emit_crc32_r64_r8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: GPR8) { append(instructions, inst_crc32_r64_r8(dst, src)) } -emit_crc32_r64_m8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: Mem8) { append(instructions, inst_crc32_r64_m8(dst, src)) } -emit_crc32_r64_r64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: GPR64) { append(instructions, inst_crc32_r64_r64(dst, src)) } -emit_crc32_r64_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: Mem64) { append(instructions, inst_crc32_r64_m64(dst, src)) } +emit_crc32_r32_r8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: GPR8) { append_elem(instructions, inst_crc32_r32_r8(dst, src)) } +emit_crc32_r32_m8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: Mem8) { append_elem(instructions, inst_crc32_r32_m8(dst, src)) } +emit_crc32_r32_r16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: GPR16) { append_elem(instructions, inst_crc32_r32_r16(dst, src)) } +emit_crc32_r32_m16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: Mem16) { append_elem(instructions, inst_crc32_r32_m16(dst, src)) } +emit_crc32_r32_r32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: GPR32) { append_elem(instructions, inst_crc32_r32_r32(dst, src)) } +emit_crc32_r32_m32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: Mem32) { append_elem(instructions, inst_crc32_r32_m32(dst, src)) } +emit_crc32_r64_r8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: GPR8) { append_elem(instructions, inst_crc32_r64_r8(dst, src)) } +emit_crc32_r64_m8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: Mem8) { append_elem(instructions, inst_crc32_r64_m8(dst, src)) } +emit_crc32_r64_r64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: GPR64) { append_elem(instructions, inst_crc32_r64_r64(dst, src)) } +emit_crc32_r64_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: Mem64) { append_elem(instructions, inst_crc32_r64_m64(dst, src)) } inst_pcmpestri_xmm_xmm_imm8 :: #force_inline proc "contextless" (dst: XMM, src: XMM, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .PCMPESTRI, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_imm8(imm), {}} }, 1014) } inst_pcmpestri_xmm_m128_imm8 :: #force_inline proc "contextless" (dst: XMM, src: Mem128, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .PCMPESTRI, operand_count = 3, ops = {op_xmm(dst), op_mem(src.mem, 16), op_imm8(imm), {}} }, 1014) } -emit_pcmpestri_xmm_xmm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, imm: i8) { append(instructions, inst_pcmpestri_xmm_xmm_imm8(dst, src, imm)) } -emit_pcmpestri_xmm_m128_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128, imm: i8) { append(instructions, inst_pcmpestri_xmm_m128_imm8(dst, src, imm)) } +emit_pcmpestri_xmm_xmm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, imm: i8) { append_elem(instructions, inst_pcmpestri_xmm_xmm_imm8(dst, src, imm)) } +emit_pcmpestri_xmm_m128_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128, imm: i8) { append_elem(instructions, inst_pcmpestri_xmm_m128_imm8(dst, src, imm)) } inst_pcmpestrm_xmm_xmm_imm8 :: #force_inline proc "contextless" (dst: XMM, src: XMM, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .PCMPESTRM, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_imm8(imm), {}} }, 1015) } inst_pcmpestrm_xmm_m128_imm8 :: #force_inline proc "contextless" (dst: XMM, src: Mem128, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .PCMPESTRM, operand_count = 3, ops = {op_xmm(dst), op_mem(src.mem, 16), op_imm8(imm), {}} }, 1015) } -emit_pcmpestrm_xmm_xmm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, imm: i8) { append(instructions, inst_pcmpestrm_xmm_xmm_imm8(dst, src, imm)) } -emit_pcmpestrm_xmm_m128_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128, imm: i8) { append(instructions, inst_pcmpestrm_xmm_m128_imm8(dst, src, imm)) } +emit_pcmpestrm_xmm_xmm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, imm: i8) { append_elem(instructions, inst_pcmpestrm_xmm_xmm_imm8(dst, src, imm)) } +emit_pcmpestrm_xmm_m128_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128, imm: i8) { append_elem(instructions, inst_pcmpestrm_xmm_m128_imm8(dst, src, imm)) } inst_pcmpistri_xmm_xmm_imm8 :: #force_inline proc "contextless" (dst: XMM, src: XMM, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .PCMPISTRI, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_imm8(imm), {}} }, 1016) } inst_pcmpistri_xmm_m128_imm8 :: #force_inline proc "contextless" (dst: XMM, src: Mem128, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .PCMPISTRI, operand_count = 3, ops = {op_xmm(dst), op_mem(src.mem, 16), op_imm8(imm), {}} }, 1016) } -emit_pcmpistri_xmm_xmm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, imm: i8) { append(instructions, inst_pcmpistri_xmm_xmm_imm8(dst, src, imm)) } -emit_pcmpistri_xmm_m128_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128, imm: i8) { append(instructions, inst_pcmpistri_xmm_m128_imm8(dst, src, imm)) } +emit_pcmpistri_xmm_xmm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, imm: i8) { append_elem(instructions, inst_pcmpistri_xmm_xmm_imm8(dst, src, imm)) } +emit_pcmpistri_xmm_m128_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128, imm: i8) { append_elem(instructions, inst_pcmpistri_xmm_m128_imm8(dst, src, imm)) } inst_pcmpistrm_xmm_xmm_imm8 :: #force_inline proc "contextless" (dst: XMM, src: XMM, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .PCMPISTRM, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_imm8(imm), {}} }, 1017) } inst_pcmpistrm_xmm_m128_imm8 :: #force_inline proc "contextless" (dst: XMM, src: Mem128, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .PCMPISTRM, operand_count = 3, ops = {op_xmm(dst), op_mem(src.mem, 16), op_imm8(imm), {}} }, 1017) } -emit_pcmpistrm_xmm_xmm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, imm: i8) { append(instructions, inst_pcmpistrm_xmm_xmm_imm8(dst, src, imm)) } -emit_pcmpistrm_xmm_m128_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128, imm: i8) { append(instructions, inst_pcmpistrm_xmm_m128_imm8(dst, src, imm)) } +emit_pcmpistrm_xmm_xmm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, imm: i8) { append_elem(instructions, inst_pcmpistrm_xmm_xmm_imm8(dst, src, imm)) } +emit_pcmpistrm_xmm_m128_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128, imm: i8) { append_elem(instructions, inst_pcmpistrm_xmm_m128_imm8(dst, src, imm)) } inst_pcmpgtq_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .PCMPGTQ, operand_count = 2, ops = {op_xmm(dst), op_xmm(src), {}, {}} }, 1018) } inst_pcmpgtq_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .PCMPGTQ, operand_count = 2, ops = {op_xmm(dst), op_mem(src.mem, 16), {}, {}} }, 1018) } -emit_pcmpgtq_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append(instructions, inst_pcmpgtq_xmm_xmm(dst, src)) } -emit_pcmpgtq_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append(instructions, inst_pcmpgtq_xmm_m128(dst, src)) } +emit_pcmpgtq_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append_elem(instructions, inst_pcmpgtq_xmm_xmm(dst, src)) } +emit_pcmpgtq_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append_elem(instructions, inst_pcmpgtq_xmm_m128(dst, src)) } inst_pclmulqdq_xmm_xmm_imm8 :: #force_inline proc "contextless" (dst: XMM, src: XMM, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .PCLMULQDQ, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_imm8(imm), {}} }, 1019) } inst_pclmulqdq_xmm_m128_imm8 :: #force_inline proc "contextless" (dst: XMM, src: Mem128, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .PCLMULQDQ, operand_count = 3, ops = {op_xmm(dst), op_mem(src.mem, 16), op_imm8(imm), {}} }, 1019) } -emit_pclmulqdq_xmm_xmm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, imm: i8) { append(instructions, inst_pclmulqdq_xmm_xmm_imm8(dst, src, imm)) } -emit_pclmulqdq_xmm_m128_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128, imm: i8) { append(instructions, inst_pclmulqdq_xmm_m128_imm8(dst, src, imm)) } +emit_pclmulqdq_xmm_xmm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, imm: i8) { append_elem(instructions, inst_pclmulqdq_xmm_xmm_imm8(dst, src, imm)) } +emit_pclmulqdq_xmm_m128_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128, imm: i8) { append_elem(instructions, inst_pclmulqdq_xmm_m128_imm8(dst, src, imm)) } inst_aesdec_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .AESDEC, operand_count = 2, ops = {op_xmm(dst), op_xmm(src), {}, {}} }, 1020) } inst_aesdec_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .AESDEC, operand_count = 2, ops = {op_xmm(dst), op_mem(src.mem, 16), {}, {}} }, 1020) } -emit_aesdec_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append(instructions, inst_aesdec_xmm_xmm(dst, src)) } -emit_aesdec_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append(instructions, inst_aesdec_xmm_m128(dst, src)) } +emit_aesdec_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append_elem(instructions, inst_aesdec_xmm_xmm(dst, src)) } +emit_aesdec_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append_elem(instructions, inst_aesdec_xmm_m128(dst, src)) } inst_aesdeclast_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .AESDECLAST, operand_count = 2, ops = {op_xmm(dst), op_xmm(src), {}, {}} }, 1021) } inst_aesdeclast_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .AESDECLAST, operand_count = 2, ops = {op_xmm(dst), op_mem(src.mem, 16), {}, {}} }, 1021) } -emit_aesdeclast_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append(instructions, inst_aesdeclast_xmm_xmm(dst, src)) } -emit_aesdeclast_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append(instructions, inst_aesdeclast_xmm_m128(dst, src)) } +emit_aesdeclast_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append_elem(instructions, inst_aesdeclast_xmm_xmm(dst, src)) } +emit_aesdeclast_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append_elem(instructions, inst_aesdeclast_xmm_m128(dst, src)) } inst_aesenc_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .AESENC, operand_count = 2, ops = {op_xmm(dst), op_xmm(src), {}, {}} }, 1022) } inst_aesenc_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .AESENC, operand_count = 2, ops = {op_xmm(dst), op_mem(src.mem, 16), {}, {}} }, 1022) } -emit_aesenc_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append(instructions, inst_aesenc_xmm_xmm(dst, src)) } -emit_aesenc_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append(instructions, inst_aesenc_xmm_m128(dst, src)) } +emit_aesenc_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append_elem(instructions, inst_aesenc_xmm_xmm(dst, src)) } +emit_aesenc_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append_elem(instructions, inst_aesenc_xmm_m128(dst, src)) } inst_aesenclast_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .AESENCLAST, operand_count = 2, ops = {op_xmm(dst), op_xmm(src), {}, {}} }, 1023) } inst_aesenclast_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .AESENCLAST, operand_count = 2, ops = {op_xmm(dst), op_mem(src.mem, 16), {}, {}} }, 1023) } -emit_aesenclast_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append(instructions, inst_aesenclast_xmm_xmm(dst, src)) } -emit_aesenclast_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append(instructions, inst_aesenclast_xmm_m128(dst, src)) } +emit_aesenclast_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append_elem(instructions, inst_aesenclast_xmm_xmm(dst, src)) } +emit_aesenclast_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append_elem(instructions, inst_aesenclast_xmm_m128(dst, src)) } inst_aesimc_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .AESIMC, operand_count = 2, ops = {op_xmm(dst), op_xmm(src), {}, {}} }, 1024) } inst_aesimc_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .AESIMC, operand_count = 2, ops = {op_xmm(dst), op_mem(src.mem, 16), {}, {}} }, 1024) } -emit_aesimc_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append(instructions, inst_aesimc_xmm_xmm(dst, src)) } -emit_aesimc_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append(instructions, inst_aesimc_xmm_m128(dst, src)) } +emit_aesimc_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append_elem(instructions, inst_aesimc_xmm_xmm(dst, src)) } +emit_aesimc_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append_elem(instructions, inst_aesimc_xmm_m128(dst, src)) } inst_aeskeygenassist_xmm_xmm_imm8 :: #force_inline proc "contextless" (dst: XMM, src: XMM, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .AESKEYGENASSIST, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_imm8(imm), {}} }, 1025) } inst_aeskeygenassist_xmm_m128_imm8 :: #force_inline proc "contextless" (dst: XMM, src: Mem128, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .AESKEYGENASSIST, operand_count = 3, ops = {op_xmm(dst), op_mem(src.mem, 16), op_imm8(imm), {}} }, 1025) } -emit_aeskeygenassist_xmm_xmm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, imm: i8) { append(instructions, inst_aeskeygenassist_xmm_xmm_imm8(dst, src, imm)) } -emit_aeskeygenassist_xmm_m128_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128, imm: i8) { append(instructions, inst_aeskeygenassist_xmm_m128_imm8(dst, src, imm)) } +emit_aeskeygenassist_xmm_xmm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, imm: i8) { append_elem(instructions, inst_aeskeygenassist_xmm_xmm_imm8(dst, src, imm)) } +emit_aeskeygenassist_xmm_m128_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128, imm: i8) { append_elem(instructions, inst_aeskeygenassist_xmm_m128_imm8(dst, src, imm)) } inst_sha1msg1_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .SHA1MSG1, operand_count = 2, ops = {op_xmm(dst), op_xmm(src), {}, {}} }, 1026) } inst_sha1msg1_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .SHA1MSG1, operand_count = 2, ops = {op_xmm(dst), op_mem(src.mem, 16), {}, {}} }, 1026) } -emit_sha1msg1_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append(instructions, inst_sha1msg1_xmm_xmm(dst, src)) } -emit_sha1msg1_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append(instructions, inst_sha1msg1_xmm_m128(dst, src)) } +emit_sha1msg1_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append_elem(instructions, inst_sha1msg1_xmm_xmm(dst, src)) } +emit_sha1msg1_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append_elem(instructions, inst_sha1msg1_xmm_m128(dst, src)) } inst_sha1msg2_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .SHA1MSG2, operand_count = 2, ops = {op_xmm(dst), op_xmm(src), {}, {}} }, 1027) } inst_sha1msg2_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .SHA1MSG2, operand_count = 2, ops = {op_xmm(dst), op_mem(src.mem, 16), {}, {}} }, 1027) } -emit_sha1msg2_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append(instructions, inst_sha1msg2_xmm_xmm(dst, src)) } -emit_sha1msg2_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append(instructions, inst_sha1msg2_xmm_m128(dst, src)) } +emit_sha1msg2_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append_elem(instructions, inst_sha1msg2_xmm_xmm(dst, src)) } +emit_sha1msg2_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append_elem(instructions, inst_sha1msg2_xmm_m128(dst, src)) } inst_sha1nexte_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .SHA1NEXTE, operand_count = 2, ops = {op_xmm(dst), op_xmm(src), {}, {}} }, 1028) } inst_sha1nexte_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .SHA1NEXTE, operand_count = 2, ops = {op_xmm(dst), op_mem(src.mem, 16), {}, {}} }, 1028) } -emit_sha1nexte_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append(instructions, inst_sha1nexte_xmm_xmm(dst, src)) } -emit_sha1nexte_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append(instructions, inst_sha1nexte_xmm_m128(dst, src)) } +emit_sha1nexte_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append_elem(instructions, inst_sha1nexte_xmm_xmm(dst, src)) } +emit_sha1nexte_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append_elem(instructions, inst_sha1nexte_xmm_m128(dst, src)) } inst_sha1rnds4_xmm_xmm_imm8 :: #force_inline proc "contextless" (dst: XMM, src: XMM, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .SHA1RNDS4, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_imm8(imm), {}} }, 1029) } inst_sha1rnds4_xmm_m128_imm8 :: #force_inline proc "contextless" (dst: XMM, src: Mem128, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .SHA1RNDS4, operand_count = 3, ops = {op_xmm(dst), op_mem(src.mem, 16), op_imm8(imm), {}} }, 1029) } -emit_sha1rnds4_xmm_xmm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, imm: i8) { append(instructions, inst_sha1rnds4_xmm_xmm_imm8(dst, src, imm)) } -emit_sha1rnds4_xmm_m128_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128, imm: i8) { append(instructions, inst_sha1rnds4_xmm_m128_imm8(dst, src, imm)) } +emit_sha1rnds4_xmm_xmm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, imm: i8) { append_elem(instructions, inst_sha1rnds4_xmm_xmm_imm8(dst, src, imm)) } +emit_sha1rnds4_xmm_m128_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128, imm: i8) { append_elem(instructions, inst_sha1rnds4_xmm_m128_imm8(dst, src, imm)) } inst_sha256msg1_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .SHA256MSG1, operand_count = 2, ops = {op_xmm(dst), op_xmm(src), {}, {}} }, 1030) } inst_sha256msg1_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .SHA256MSG1, operand_count = 2, ops = {op_xmm(dst), op_mem(src.mem, 16), {}, {}} }, 1030) } -emit_sha256msg1_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append(instructions, inst_sha256msg1_xmm_xmm(dst, src)) } -emit_sha256msg1_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append(instructions, inst_sha256msg1_xmm_m128(dst, src)) } +emit_sha256msg1_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append_elem(instructions, inst_sha256msg1_xmm_xmm(dst, src)) } +emit_sha256msg1_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append_elem(instructions, inst_sha256msg1_xmm_m128(dst, src)) } inst_sha256msg2_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .SHA256MSG2, operand_count = 2, ops = {op_xmm(dst), op_xmm(src), {}, {}} }, 1031) } inst_sha256msg2_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .SHA256MSG2, operand_count = 2, ops = {op_xmm(dst), op_mem(src.mem, 16), {}, {}} }, 1031) } -emit_sha256msg2_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append(instructions, inst_sha256msg2_xmm_xmm(dst, src)) } -emit_sha256msg2_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append(instructions, inst_sha256msg2_xmm_m128(dst, src)) } +emit_sha256msg2_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append_elem(instructions, inst_sha256msg2_xmm_xmm(dst, src)) } +emit_sha256msg2_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append_elem(instructions, inst_sha256msg2_xmm_m128(dst, src)) } inst_sha256rnds2_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .SHA256RNDS2, operand_count = 2, ops = {op_xmm(dst), op_xmm(src), {}, {}} }, 1032) } inst_sha256rnds2_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .SHA256RNDS2, operand_count = 2, ops = {op_xmm(dst), op_mem(src.mem, 16), {}, {}} }, 1032) } -emit_sha256rnds2_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append(instructions, inst_sha256rnds2_xmm_xmm(dst, src)) } -emit_sha256rnds2_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append(instructions, inst_sha256rnds2_xmm_m128(dst, src)) } +emit_sha256rnds2_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append_elem(instructions, inst_sha256rnds2_xmm_xmm(dst, src)) } +emit_sha256rnds2_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append_elem(instructions, inst_sha256rnds2_xmm_m128(dst, src)) } inst_vaddps_xmm_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VADDPS, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_xmm(src2), {}} }, 1033) } inst_vaddps_xmm_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .VADDPS, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_mem(src2.mem, 16), {}} }, 1033) } inst_vaddps_ymm_ymm_ymm :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: YMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VADDPS, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_ymm(src2), {}} }, 1034) } inst_vaddps_ymm_ymm_m256 :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: Mem256) -> Instruction { return with_hint(Instruction{ mnemonic = .VADDPS, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_mem(src2.mem, 32), {}} }, 1034) } -emit_vaddps_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append(instructions, inst_vaddps_xmm_xmm_xmm(dst, src, src2)) } -emit_vaddps_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append(instructions, inst_vaddps_xmm_xmm_m128(dst, src, src2)) } -emit_vaddps_ymm_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM) { append(instructions, inst_vaddps_ymm_ymm_ymm(dst, src, src2)) } -emit_vaddps_ymm_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256) { append(instructions, inst_vaddps_ymm_ymm_m256(dst, src, src2)) } +emit_vaddps_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append_elem(instructions, inst_vaddps_xmm_xmm_xmm(dst, src, src2)) } +emit_vaddps_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append_elem(instructions, inst_vaddps_xmm_xmm_m128(dst, src, src2)) } +emit_vaddps_ymm_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM) { append_elem(instructions, inst_vaddps_ymm_ymm_ymm(dst, src, src2)) } +emit_vaddps_ymm_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256) { append_elem(instructions, inst_vaddps_ymm_ymm_m256(dst, src, src2)) } inst_vaddpd_xmm_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VADDPD, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_xmm(src2), {}} }, 1035) } inst_vaddpd_xmm_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .VADDPD, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_mem(src2.mem, 16), {}} }, 1035) } inst_vaddpd_ymm_ymm_ymm :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: YMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VADDPD, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_ymm(src2), {}} }, 1036) } inst_vaddpd_ymm_ymm_m256 :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: Mem256) -> Instruction { return with_hint(Instruction{ mnemonic = .VADDPD, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_mem(src2.mem, 32), {}} }, 1036) } -emit_vaddpd_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append(instructions, inst_vaddpd_xmm_xmm_xmm(dst, src, src2)) } -emit_vaddpd_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append(instructions, inst_vaddpd_xmm_xmm_m128(dst, src, src2)) } -emit_vaddpd_ymm_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM) { append(instructions, inst_vaddpd_ymm_ymm_ymm(dst, src, src2)) } -emit_vaddpd_ymm_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256) { append(instructions, inst_vaddpd_ymm_ymm_m256(dst, src, src2)) } +emit_vaddpd_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append_elem(instructions, inst_vaddpd_xmm_xmm_xmm(dst, src, src2)) } +emit_vaddpd_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append_elem(instructions, inst_vaddpd_xmm_xmm_m128(dst, src, src2)) } +emit_vaddpd_ymm_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM) { append_elem(instructions, inst_vaddpd_ymm_ymm_ymm(dst, src, src2)) } +emit_vaddpd_ymm_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256) { append_elem(instructions, inst_vaddpd_ymm_ymm_m256(dst, src, src2)) } inst_vaddss_xmm_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VADDSS, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_xmm(src2), {}} }, 1037) } inst_vaddss_xmm_xmm_m32 :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: Mem32) -> Instruction { return with_hint(Instruction{ mnemonic = .VADDSS, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_mem(src2.mem, 4), {}} }, 1037) } -emit_vaddss_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append(instructions, inst_vaddss_xmm_xmm_xmm(dst, src, src2)) } -emit_vaddss_xmm_xmm_m32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem32) { append(instructions, inst_vaddss_xmm_xmm_m32(dst, src, src2)) } +emit_vaddss_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append_elem(instructions, inst_vaddss_xmm_xmm_xmm(dst, src, src2)) } +emit_vaddss_xmm_xmm_m32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem32) { append_elem(instructions, inst_vaddss_xmm_xmm_m32(dst, src, src2)) } inst_vaddsd_xmm_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VADDSD, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_xmm(src2), {}} }, 1038) } inst_vaddsd_xmm_xmm_m64 :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: Mem64) -> Instruction { return with_hint(Instruction{ mnemonic = .VADDSD, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_mem(src2.mem, 8), {}} }, 1038) } -emit_vaddsd_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append(instructions, inst_vaddsd_xmm_xmm_xmm(dst, src, src2)) } -emit_vaddsd_xmm_xmm_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem64) { append(instructions, inst_vaddsd_xmm_xmm_m64(dst, src, src2)) } +emit_vaddsd_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append_elem(instructions, inst_vaddsd_xmm_xmm_xmm(dst, src, src2)) } +emit_vaddsd_xmm_xmm_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem64) { append_elem(instructions, inst_vaddsd_xmm_xmm_m64(dst, src, src2)) } inst_vsubps_xmm_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VSUBPS, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_xmm(src2), {}} }, 1039) } inst_vsubps_xmm_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .VSUBPS, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_mem(src2.mem, 16), {}} }, 1039) } inst_vsubps_ymm_ymm_ymm :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: YMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VSUBPS, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_ymm(src2), {}} }, 1040) } inst_vsubps_ymm_ymm_m256 :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: Mem256) -> Instruction { return with_hint(Instruction{ mnemonic = .VSUBPS, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_mem(src2.mem, 32), {}} }, 1040) } -emit_vsubps_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append(instructions, inst_vsubps_xmm_xmm_xmm(dst, src, src2)) } -emit_vsubps_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append(instructions, inst_vsubps_xmm_xmm_m128(dst, src, src2)) } -emit_vsubps_ymm_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM) { append(instructions, inst_vsubps_ymm_ymm_ymm(dst, src, src2)) } -emit_vsubps_ymm_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256) { append(instructions, inst_vsubps_ymm_ymm_m256(dst, src, src2)) } +emit_vsubps_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append_elem(instructions, inst_vsubps_xmm_xmm_xmm(dst, src, src2)) } +emit_vsubps_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append_elem(instructions, inst_vsubps_xmm_xmm_m128(dst, src, src2)) } +emit_vsubps_ymm_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM) { append_elem(instructions, inst_vsubps_ymm_ymm_ymm(dst, src, src2)) } +emit_vsubps_ymm_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256) { append_elem(instructions, inst_vsubps_ymm_ymm_m256(dst, src, src2)) } inst_vsubpd_xmm_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VSUBPD, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_xmm(src2), {}} }, 1041) } inst_vsubpd_xmm_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .VSUBPD, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_mem(src2.mem, 16), {}} }, 1041) } inst_vsubpd_ymm_ymm_ymm :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: YMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VSUBPD, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_ymm(src2), {}} }, 1042) } inst_vsubpd_ymm_ymm_m256 :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: Mem256) -> Instruction { return with_hint(Instruction{ mnemonic = .VSUBPD, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_mem(src2.mem, 32), {}} }, 1042) } -emit_vsubpd_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append(instructions, inst_vsubpd_xmm_xmm_xmm(dst, src, src2)) } -emit_vsubpd_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append(instructions, inst_vsubpd_xmm_xmm_m128(dst, src, src2)) } -emit_vsubpd_ymm_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM) { append(instructions, inst_vsubpd_ymm_ymm_ymm(dst, src, src2)) } -emit_vsubpd_ymm_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256) { append(instructions, inst_vsubpd_ymm_ymm_m256(dst, src, src2)) } +emit_vsubpd_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append_elem(instructions, inst_vsubpd_xmm_xmm_xmm(dst, src, src2)) } +emit_vsubpd_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append_elem(instructions, inst_vsubpd_xmm_xmm_m128(dst, src, src2)) } +emit_vsubpd_ymm_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM) { append_elem(instructions, inst_vsubpd_ymm_ymm_ymm(dst, src, src2)) } +emit_vsubpd_ymm_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256) { append_elem(instructions, inst_vsubpd_ymm_ymm_m256(dst, src, src2)) } inst_vsubss_xmm_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VSUBSS, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_xmm(src2), {}} }, 1043) } inst_vsubss_xmm_xmm_m32 :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: Mem32) -> Instruction { return with_hint(Instruction{ mnemonic = .VSUBSS, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_mem(src2.mem, 4), {}} }, 1043) } -emit_vsubss_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append(instructions, inst_vsubss_xmm_xmm_xmm(dst, src, src2)) } -emit_vsubss_xmm_xmm_m32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem32) { append(instructions, inst_vsubss_xmm_xmm_m32(dst, src, src2)) } +emit_vsubss_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append_elem(instructions, inst_vsubss_xmm_xmm_xmm(dst, src, src2)) } +emit_vsubss_xmm_xmm_m32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem32) { append_elem(instructions, inst_vsubss_xmm_xmm_m32(dst, src, src2)) } inst_vsubsd_xmm_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VSUBSD, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_xmm(src2), {}} }, 1044) } inst_vsubsd_xmm_xmm_m64 :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: Mem64) -> Instruction { return with_hint(Instruction{ mnemonic = .VSUBSD, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_mem(src2.mem, 8), {}} }, 1044) } -emit_vsubsd_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append(instructions, inst_vsubsd_xmm_xmm_xmm(dst, src, src2)) } -emit_vsubsd_xmm_xmm_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem64) { append(instructions, inst_vsubsd_xmm_xmm_m64(dst, src, src2)) } +emit_vsubsd_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append_elem(instructions, inst_vsubsd_xmm_xmm_xmm(dst, src, src2)) } +emit_vsubsd_xmm_xmm_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem64) { append_elem(instructions, inst_vsubsd_xmm_xmm_m64(dst, src, src2)) } inst_vmulps_xmm_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VMULPS, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_xmm(src2), {}} }, 1045) } inst_vmulps_xmm_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .VMULPS, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_mem(src2.mem, 16), {}} }, 1045) } inst_vmulps_ymm_ymm_ymm :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: YMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VMULPS, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_ymm(src2), {}} }, 1046) } inst_vmulps_ymm_ymm_m256 :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: Mem256) -> Instruction { return with_hint(Instruction{ mnemonic = .VMULPS, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_mem(src2.mem, 32), {}} }, 1046) } -emit_vmulps_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append(instructions, inst_vmulps_xmm_xmm_xmm(dst, src, src2)) } -emit_vmulps_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append(instructions, inst_vmulps_xmm_xmm_m128(dst, src, src2)) } -emit_vmulps_ymm_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM) { append(instructions, inst_vmulps_ymm_ymm_ymm(dst, src, src2)) } -emit_vmulps_ymm_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256) { append(instructions, inst_vmulps_ymm_ymm_m256(dst, src, src2)) } +emit_vmulps_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append_elem(instructions, inst_vmulps_xmm_xmm_xmm(dst, src, src2)) } +emit_vmulps_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append_elem(instructions, inst_vmulps_xmm_xmm_m128(dst, src, src2)) } +emit_vmulps_ymm_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM) { append_elem(instructions, inst_vmulps_ymm_ymm_ymm(dst, src, src2)) } +emit_vmulps_ymm_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256) { append_elem(instructions, inst_vmulps_ymm_ymm_m256(dst, src, src2)) } inst_vmulpd_xmm_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VMULPD, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_xmm(src2), {}} }, 1047) } inst_vmulpd_xmm_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .VMULPD, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_mem(src2.mem, 16), {}} }, 1047) } inst_vmulpd_ymm_ymm_ymm :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: YMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VMULPD, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_ymm(src2), {}} }, 1048) } inst_vmulpd_ymm_ymm_m256 :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: Mem256) -> Instruction { return with_hint(Instruction{ mnemonic = .VMULPD, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_mem(src2.mem, 32), {}} }, 1048) } -emit_vmulpd_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append(instructions, inst_vmulpd_xmm_xmm_xmm(dst, src, src2)) } -emit_vmulpd_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append(instructions, inst_vmulpd_xmm_xmm_m128(dst, src, src2)) } -emit_vmulpd_ymm_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM) { append(instructions, inst_vmulpd_ymm_ymm_ymm(dst, src, src2)) } -emit_vmulpd_ymm_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256) { append(instructions, inst_vmulpd_ymm_ymm_m256(dst, src, src2)) } +emit_vmulpd_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append_elem(instructions, inst_vmulpd_xmm_xmm_xmm(dst, src, src2)) } +emit_vmulpd_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append_elem(instructions, inst_vmulpd_xmm_xmm_m128(dst, src, src2)) } +emit_vmulpd_ymm_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM) { append_elem(instructions, inst_vmulpd_ymm_ymm_ymm(dst, src, src2)) } +emit_vmulpd_ymm_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256) { append_elem(instructions, inst_vmulpd_ymm_ymm_m256(dst, src, src2)) } inst_vmulss_xmm_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VMULSS, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_xmm(src2), {}} }, 1049) } inst_vmulss_xmm_xmm_m32 :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: Mem32) -> Instruction { return with_hint(Instruction{ mnemonic = .VMULSS, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_mem(src2.mem, 4), {}} }, 1049) } -emit_vmulss_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append(instructions, inst_vmulss_xmm_xmm_xmm(dst, src, src2)) } -emit_vmulss_xmm_xmm_m32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem32) { append(instructions, inst_vmulss_xmm_xmm_m32(dst, src, src2)) } +emit_vmulss_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append_elem(instructions, inst_vmulss_xmm_xmm_xmm(dst, src, src2)) } +emit_vmulss_xmm_xmm_m32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem32) { append_elem(instructions, inst_vmulss_xmm_xmm_m32(dst, src, src2)) } inst_vmulsd_xmm_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VMULSD, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_xmm(src2), {}} }, 1050) } inst_vmulsd_xmm_xmm_m64 :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: Mem64) -> Instruction { return with_hint(Instruction{ mnemonic = .VMULSD, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_mem(src2.mem, 8), {}} }, 1050) } -emit_vmulsd_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append(instructions, inst_vmulsd_xmm_xmm_xmm(dst, src, src2)) } -emit_vmulsd_xmm_xmm_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem64) { append(instructions, inst_vmulsd_xmm_xmm_m64(dst, src, src2)) } +emit_vmulsd_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append_elem(instructions, inst_vmulsd_xmm_xmm_xmm(dst, src, src2)) } +emit_vmulsd_xmm_xmm_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem64) { append_elem(instructions, inst_vmulsd_xmm_xmm_m64(dst, src, src2)) } inst_vdivps_xmm_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VDIVPS, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_xmm(src2), {}} }, 1051) } inst_vdivps_xmm_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .VDIVPS, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_mem(src2.mem, 16), {}} }, 1051) } inst_vdivps_ymm_ymm_ymm :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: YMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VDIVPS, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_ymm(src2), {}} }, 1052) } inst_vdivps_ymm_ymm_m256 :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: Mem256) -> Instruction { return with_hint(Instruction{ mnemonic = .VDIVPS, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_mem(src2.mem, 32), {}} }, 1052) } -emit_vdivps_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append(instructions, inst_vdivps_xmm_xmm_xmm(dst, src, src2)) } -emit_vdivps_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append(instructions, inst_vdivps_xmm_xmm_m128(dst, src, src2)) } -emit_vdivps_ymm_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM) { append(instructions, inst_vdivps_ymm_ymm_ymm(dst, src, src2)) } -emit_vdivps_ymm_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256) { append(instructions, inst_vdivps_ymm_ymm_m256(dst, src, src2)) } +emit_vdivps_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append_elem(instructions, inst_vdivps_xmm_xmm_xmm(dst, src, src2)) } +emit_vdivps_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append_elem(instructions, inst_vdivps_xmm_xmm_m128(dst, src, src2)) } +emit_vdivps_ymm_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM) { append_elem(instructions, inst_vdivps_ymm_ymm_ymm(dst, src, src2)) } +emit_vdivps_ymm_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256) { append_elem(instructions, inst_vdivps_ymm_ymm_m256(dst, src, src2)) } inst_vdivpd_xmm_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VDIVPD, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_xmm(src2), {}} }, 1053) } inst_vdivpd_xmm_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .VDIVPD, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_mem(src2.mem, 16), {}} }, 1053) } inst_vdivpd_ymm_ymm_ymm :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: YMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VDIVPD, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_ymm(src2), {}} }, 1054) } inst_vdivpd_ymm_ymm_m256 :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: Mem256) -> Instruction { return with_hint(Instruction{ mnemonic = .VDIVPD, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_mem(src2.mem, 32), {}} }, 1054) } -emit_vdivpd_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append(instructions, inst_vdivpd_xmm_xmm_xmm(dst, src, src2)) } -emit_vdivpd_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append(instructions, inst_vdivpd_xmm_xmm_m128(dst, src, src2)) } -emit_vdivpd_ymm_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM) { append(instructions, inst_vdivpd_ymm_ymm_ymm(dst, src, src2)) } -emit_vdivpd_ymm_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256) { append(instructions, inst_vdivpd_ymm_ymm_m256(dst, src, src2)) } +emit_vdivpd_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append_elem(instructions, inst_vdivpd_xmm_xmm_xmm(dst, src, src2)) } +emit_vdivpd_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append_elem(instructions, inst_vdivpd_xmm_xmm_m128(dst, src, src2)) } +emit_vdivpd_ymm_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM) { append_elem(instructions, inst_vdivpd_ymm_ymm_ymm(dst, src, src2)) } +emit_vdivpd_ymm_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256) { append_elem(instructions, inst_vdivpd_ymm_ymm_m256(dst, src, src2)) } inst_vdivss_xmm_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VDIVSS, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_xmm(src2), {}} }, 1055) } inst_vdivss_xmm_xmm_m32 :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: Mem32) -> Instruction { return with_hint(Instruction{ mnemonic = .VDIVSS, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_mem(src2.mem, 4), {}} }, 1055) } -emit_vdivss_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append(instructions, inst_vdivss_xmm_xmm_xmm(dst, src, src2)) } -emit_vdivss_xmm_xmm_m32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem32) { append(instructions, inst_vdivss_xmm_xmm_m32(dst, src, src2)) } +emit_vdivss_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append_elem(instructions, inst_vdivss_xmm_xmm_xmm(dst, src, src2)) } +emit_vdivss_xmm_xmm_m32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem32) { append_elem(instructions, inst_vdivss_xmm_xmm_m32(dst, src, src2)) } inst_vdivsd_xmm_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VDIVSD, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_xmm(src2), {}} }, 1056) } inst_vdivsd_xmm_xmm_m64 :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: Mem64) -> Instruction { return with_hint(Instruction{ mnemonic = .VDIVSD, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_mem(src2.mem, 8), {}} }, 1056) } -emit_vdivsd_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append(instructions, inst_vdivsd_xmm_xmm_xmm(dst, src, src2)) } -emit_vdivsd_xmm_xmm_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem64) { append(instructions, inst_vdivsd_xmm_xmm_m64(dst, src, src2)) } +emit_vdivsd_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append_elem(instructions, inst_vdivsd_xmm_xmm_xmm(dst, src, src2)) } +emit_vdivsd_xmm_xmm_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem64) { append_elem(instructions, inst_vdivsd_xmm_xmm_m64(dst, src, src2)) } inst_vsqrtps_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VSQRTPS, operand_count = 2, ops = {op_xmm(dst), op_xmm(src), {}, {}} }, 1057) } inst_vsqrtps_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .VSQRTPS, operand_count = 2, ops = {op_xmm(dst), op_mem(src.mem, 16), {}, {}} }, 1057) } inst_vsqrtps_ymm_ymm :: #force_inline proc "contextless" (dst: YMM, src: YMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VSQRTPS, operand_count = 2, ops = {op_ymm(dst), op_ymm(src), {}, {}} }, 1058) } inst_vsqrtps_ymm_m256 :: #force_inline proc "contextless" (dst: YMM, src: Mem256) -> Instruction { return with_hint(Instruction{ mnemonic = .VSQRTPS, operand_count = 2, ops = {op_ymm(dst), op_mem(src.mem, 32), {}, {}} }, 1058) } -emit_vsqrtps_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append(instructions, inst_vsqrtps_xmm_xmm(dst, src)) } -emit_vsqrtps_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append(instructions, inst_vsqrtps_xmm_m128(dst, src)) } -emit_vsqrtps_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM) { append(instructions, inst_vsqrtps_ymm_ymm(dst, src)) } -emit_vsqrtps_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: Mem256) { append(instructions, inst_vsqrtps_ymm_m256(dst, src)) } +emit_vsqrtps_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append_elem(instructions, inst_vsqrtps_xmm_xmm(dst, src)) } +emit_vsqrtps_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append_elem(instructions, inst_vsqrtps_xmm_m128(dst, src)) } +emit_vsqrtps_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM) { append_elem(instructions, inst_vsqrtps_ymm_ymm(dst, src)) } +emit_vsqrtps_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: Mem256) { append_elem(instructions, inst_vsqrtps_ymm_m256(dst, src)) } inst_vsqrtpd_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VSQRTPD, operand_count = 2, ops = {op_xmm(dst), op_xmm(src), {}, {}} }, 1059) } inst_vsqrtpd_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .VSQRTPD, operand_count = 2, ops = {op_xmm(dst), op_mem(src.mem, 16), {}, {}} }, 1059) } inst_vsqrtpd_ymm_ymm :: #force_inline proc "contextless" (dst: YMM, src: YMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VSQRTPD, operand_count = 2, ops = {op_ymm(dst), op_ymm(src), {}, {}} }, 1060) } inst_vsqrtpd_ymm_m256 :: #force_inline proc "contextless" (dst: YMM, src: Mem256) -> Instruction { return with_hint(Instruction{ mnemonic = .VSQRTPD, operand_count = 2, ops = {op_ymm(dst), op_mem(src.mem, 32), {}, {}} }, 1060) } -emit_vsqrtpd_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append(instructions, inst_vsqrtpd_xmm_xmm(dst, src)) } -emit_vsqrtpd_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append(instructions, inst_vsqrtpd_xmm_m128(dst, src)) } -emit_vsqrtpd_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM) { append(instructions, inst_vsqrtpd_ymm_ymm(dst, src)) } -emit_vsqrtpd_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: Mem256) { append(instructions, inst_vsqrtpd_ymm_m256(dst, src)) } +emit_vsqrtpd_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append_elem(instructions, inst_vsqrtpd_xmm_xmm(dst, src)) } +emit_vsqrtpd_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append_elem(instructions, inst_vsqrtpd_xmm_m128(dst, src)) } +emit_vsqrtpd_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM) { append_elem(instructions, inst_vsqrtpd_ymm_ymm(dst, src)) } +emit_vsqrtpd_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: Mem256) { append_elem(instructions, inst_vsqrtpd_ymm_m256(dst, src)) } inst_vsqrtss_xmm_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VSQRTSS, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_xmm(src2), {}} }, 1061) } inst_vsqrtss_xmm_xmm_m32 :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: Mem32) -> Instruction { return with_hint(Instruction{ mnemonic = .VSQRTSS, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_mem(src2.mem, 4), {}} }, 1061) } -emit_vsqrtss_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append(instructions, inst_vsqrtss_xmm_xmm_xmm(dst, src, src2)) } -emit_vsqrtss_xmm_xmm_m32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem32) { append(instructions, inst_vsqrtss_xmm_xmm_m32(dst, src, src2)) } +emit_vsqrtss_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append_elem(instructions, inst_vsqrtss_xmm_xmm_xmm(dst, src, src2)) } +emit_vsqrtss_xmm_xmm_m32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem32) { append_elem(instructions, inst_vsqrtss_xmm_xmm_m32(dst, src, src2)) } inst_vsqrtsd_xmm_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VSQRTSD, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_xmm(src2), {}} }, 1062) } inst_vsqrtsd_xmm_xmm_m64 :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: Mem64) -> Instruction { return with_hint(Instruction{ mnemonic = .VSQRTSD, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_mem(src2.mem, 8), {}} }, 1062) } -emit_vsqrtsd_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append(instructions, inst_vsqrtsd_xmm_xmm_xmm(dst, src, src2)) } -emit_vsqrtsd_xmm_xmm_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem64) { append(instructions, inst_vsqrtsd_xmm_xmm_m64(dst, src, src2)) } +emit_vsqrtsd_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append_elem(instructions, inst_vsqrtsd_xmm_xmm_xmm(dst, src, src2)) } +emit_vsqrtsd_xmm_xmm_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem64) { append_elem(instructions, inst_vsqrtsd_xmm_xmm_m64(dst, src, src2)) } inst_vrcpps_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VRCPPS, operand_count = 2, ops = {op_xmm(dst), op_xmm(src), {}, {}} }, 1063) } inst_vrcpps_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .VRCPPS, operand_count = 2, ops = {op_xmm(dst), op_mem(src.mem, 16), {}, {}} }, 1063) } inst_vrcpps_ymm_ymm :: #force_inline proc "contextless" (dst: YMM, src: YMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VRCPPS, operand_count = 2, ops = {op_ymm(dst), op_ymm(src), {}, {}} }, 1064) } inst_vrcpps_ymm_m256 :: #force_inline proc "contextless" (dst: YMM, src: Mem256) -> Instruction { return with_hint(Instruction{ mnemonic = .VRCPPS, operand_count = 2, ops = {op_ymm(dst), op_mem(src.mem, 32), {}, {}} }, 1064) } -emit_vrcpps_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append(instructions, inst_vrcpps_xmm_xmm(dst, src)) } -emit_vrcpps_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append(instructions, inst_vrcpps_xmm_m128(dst, src)) } -emit_vrcpps_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM) { append(instructions, inst_vrcpps_ymm_ymm(dst, src)) } -emit_vrcpps_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: Mem256) { append(instructions, inst_vrcpps_ymm_m256(dst, src)) } +emit_vrcpps_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append_elem(instructions, inst_vrcpps_xmm_xmm(dst, src)) } +emit_vrcpps_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append_elem(instructions, inst_vrcpps_xmm_m128(dst, src)) } +emit_vrcpps_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM) { append_elem(instructions, inst_vrcpps_ymm_ymm(dst, src)) } +emit_vrcpps_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: Mem256) { append_elem(instructions, inst_vrcpps_ymm_m256(dst, src)) } inst_vrcpss_xmm_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VRCPSS, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_xmm(src2), {}} }, 1065) } inst_vrcpss_xmm_xmm_m32 :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: Mem32) -> Instruction { return with_hint(Instruction{ mnemonic = .VRCPSS, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_mem(src2.mem, 4), {}} }, 1065) } -emit_vrcpss_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append(instructions, inst_vrcpss_xmm_xmm_xmm(dst, src, src2)) } -emit_vrcpss_xmm_xmm_m32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem32) { append(instructions, inst_vrcpss_xmm_xmm_m32(dst, src, src2)) } +emit_vrcpss_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append_elem(instructions, inst_vrcpss_xmm_xmm_xmm(dst, src, src2)) } +emit_vrcpss_xmm_xmm_m32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem32) { append_elem(instructions, inst_vrcpss_xmm_xmm_m32(dst, src, src2)) } inst_vrsqrtps_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VRSQRTPS, operand_count = 2, ops = {op_xmm(dst), op_xmm(src), {}, {}} }, 1066) } inst_vrsqrtps_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .VRSQRTPS, operand_count = 2, ops = {op_xmm(dst), op_mem(src.mem, 16), {}, {}} }, 1066) } inst_vrsqrtps_ymm_ymm :: #force_inline proc "contextless" (dst: YMM, src: YMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VRSQRTPS, operand_count = 2, ops = {op_ymm(dst), op_ymm(src), {}, {}} }, 1067) } inst_vrsqrtps_ymm_m256 :: #force_inline proc "contextless" (dst: YMM, src: Mem256) -> Instruction { return with_hint(Instruction{ mnemonic = .VRSQRTPS, operand_count = 2, ops = {op_ymm(dst), op_mem(src.mem, 32), {}, {}} }, 1067) } -emit_vrsqrtps_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append(instructions, inst_vrsqrtps_xmm_xmm(dst, src)) } -emit_vrsqrtps_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append(instructions, inst_vrsqrtps_xmm_m128(dst, src)) } -emit_vrsqrtps_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM) { append(instructions, inst_vrsqrtps_ymm_ymm(dst, src)) } -emit_vrsqrtps_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: Mem256) { append(instructions, inst_vrsqrtps_ymm_m256(dst, src)) } +emit_vrsqrtps_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append_elem(instructions, inst_vrsqrtps_xmm_xmm(dst, src)) } +emit_vrsqrtps_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append_elem(instructions, inst_vrsqrtps_xmm_m128(dst, src)) } +emit_vrsqrtps_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM) { append_elem(instructions, inst_vrsqrtps_ymm_ymm(dst, src)) } +emit_vrsqrtps_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: Mem256) { append_elem(instructions, inst_vrsqrtps_ymm_m256(dst, src)) } inst_vrsqrtss_xmm_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VRSQRTSS, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_xmm(src2), {}} }, 1068) } inst_vrsqrtss_xmm_xmm_m32 :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: Mem32) -> Instruction { return with_hint(Instruction{ mnemonic = .VRSQRTSS, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_mem(src2.mem, 4), {}} }, 1068) } -emit_vrsqrtss_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append(instructions, inst_vrsqrtss_xmm_xmm_xmm(dst, src, src2)) } -emit_vrsqrtss_xmm_xmm_m32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem32) { append(instructions, inst_vrsqrtss_xmm_xmm_m32(dst, src, src2)) } +emit_vrsqrtss_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append_elem(instructions, inst_vrsqrtss_xmm_xmm_xmm(dst, src, src2)) } +emit_vrsqrtss_xmm_xmm_m32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem32) { append_elem(instructions, inst_vrsqrtss_xmm_xmm_m32(dst, src, src2)) } inst_vmaxps_xmm_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VMAXPS, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_xmm(src2), {}} }, 1069) } inst_vmaxps_xmm_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .VMAXPS, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_mem(src2.mem, 16), {}} }, 1069) } inst_vmaxps_ymm_ymm_ymm :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: YMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VMAXPS, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_ymm(src2), {}} }, 1070) } inst_vmaxps_ymm_ymm_m256 :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: Mem256) -> Instruction { return with_hint(Instruction{ mnemonic = .VMAXPS, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_mem(src2.mem, 32), {}} }, 1070) } -emit_vmaxps_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append(instructions, inst_vmaxps_xmm_xmm_xmm(dst, src, src2)) } -emit_vmaxps_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append(instructions, inst_vmaxps_xmm_xmm_m128(dst, src, src2)) } -emit_vmaxps_ymm_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM) { append(instructions, inst_vmaxps_ymm_ymm_ymm(dst, src, src2)) } -emit_vmaxps_ymm_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256) { append(instructions, inst_vmaxps_ymm_ymm_m256(dst, src, src2)) } +emit_vmaxps_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append_elem(instructions, inst_vmaxps_xmm_xmm_xmm(dst, src, src2)) } +emit_vmaxps_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append_elem(instructions, inst_vmaxps_xmm_xmm_m128(dst, src, src2)) } +emit_vmaxps_ymm_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM) { append_elem(instructions, inst_vmaxps_ymm_ymm_ymm(dst, src, src2)) } +emit_vmaxps_ymm_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256) { append_elem(instructions, inst_vmaxps_ymm_ymm_m256(dst, src, src2)) } inst_vmaxpd_xmm_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VMAXPD, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_xmm(src2), {}} }, 1071) } inst_vmaxpd_xmm_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .VMAXPD, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_mem(src2.mem, 16), {}} }, 1071) } inst_vmaxpd_ymm_ymm_ymm :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: YMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VMAXPD, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_ymm(src2), {}} }, 1072) } inst_vmaxpd_ymm_ymm_m256 :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: Mem256) -> Instruction { return with_hint(Instruction{ mnemonic = .VMAXPD, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_mem(src2.mem, 32), {}} }, 1072) } -emit_vmaxpd_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append(instructions, inst_vmaxpd_xmm_xmm_xmm(dst, src, src2)) } -emit_vmaxpd_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append(instructions, inst_vmaxpd_xmm_xmm_m128(dst, src, src2)) } -emit_vmaxpd_ymm_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM) { append(instructions, inst_vmaxpd_ymm_ymm_ymm(dst, src, src2)) } -emit_vmaxpd_ymm_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256) { append(instructions, inst_vmaxpd_ymm_ymm_m256(dst, src, src2)) } +emit_vmaxpd_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append_elem(instructions, inst_vmaxpd_xmm_xmm_xmm(dst, src, src2)) } +emit_vmaxpd_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append_elem(instructions, inst_vmaxpd_xmm_xmm_m128(dst, src, src2)) } +emit_vmaxpd_ymm_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM) { append_elem(instructions, inst_vmaxpd_ymm_ymm_ymm(dst, src, src2)) } +emit_vmaxpd_ymm_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256) { append_elem(instructions, inst_vmaxpd_ymm_ymm_m256(dst, src, src2)) } inst_vmaxss_xmm_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VMAXSS, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_xmm(src2), {}} }, 1073) } inst_vmaxss_xmm_xmm_m32 :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: Mem32) -> Instruction { return with_hint(Instruction{ mnemonic = .VMAXSS, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_mem(src2.mem, 4), {}} }, 1073) } -emit_vmaxss_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append(instructions, inst_vmaxss_xmm_xmm_xmm(dst, src, src2)) } -emit_vmaxss_xmm_xmm_m32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem32) { append(instructions, inst_vmaxss_xmm_xmm_m32(dst, src, src2)) } +emit_vmaxss_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append_elem(instructions, inst_vmaxss_xmm_xmm_xmm(dst, src, src2)) } +emit_vmaxss_xmm_xmm_m32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem32) { append_elem(instructions, inst_vmaxss_xmm_xmm_m32(dst, src, src2)) } inst_vmaxsd_xmm_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VMAXSD, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_xmm(src2), {}} }, 1074) } inst_vmaxsd_xmm_xmm_m64 :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: Mem64) -> Instruction { return with_hint(Instruction{ mnemonic = .VMAXSD, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_mem(src2.mem, 8), {}} }, 1074) } -emit_vmaxsd_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append(instructions, inst_vmaxsd_xmm_xmm_xmm(dst, src, src2)) } -emit_vmaxsd_xmm_xmm_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem64) { append(instructions, inst_vmaxsd_xmm_xmm_m64(dst, src, src2)) } +emit_vmaxsd_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append_elem(instructions, inst_vmaxsd_xmm_xmm_xmm(dst, src, src2)) } +emit_vmaxsd_xmm_xmm_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem64) { append_elem(instructions, inst_vmaxsd_xmm_xmm_m64(dst, src, src2)) } inst_vminps_xmm_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VMINPS, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_xmm(src2), {}} }, 1075) } inst_vminps_xmm_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .VMINPS, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_mem(src2.mem, 16), {}} }, 1075) } inst_vminps_ymm_ymm_ymm :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: YMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VMINPS, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_ymm(src2), {}} }, 1076) } inst_vminps_ymm_ymm_m256 :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: Mem256) -> Instruction { return with_hint(Instruction{ mnemonic = .VMINPS, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_mem(src2.mem, 32), {}} }, 1076) } -emit_vminps_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append(instructions, inst_vminps_xmm_xmm_xmm(dst, src, src2)) } -emit_vminps_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append(instructions, inst_vminps_xmm_xmm_m128(dst, src, src2)) } -emit_vminps_ymm_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM) { append(instructions, inst_vminps_ymm_ymm_ymm(dst, src, src2)) } -emit_vminps_ymm_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256) { append(instructions, inst_vminps_ymm_ymm_m256(dst, src, src2)) } +emit_vminps_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append_elem(instructions, inst_vminps_xmm_xmm_xmm(dst, src, src2)) } +emit_vminps_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append_elem(instructions, inst_vminps_xmm_xmm_m128(dst, src, src2)) } +emit_vminps_ymm_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM) { append_elem(instructions, inst_vminps_ymm_ymm_ymm(dst, src, src2)) } +emit_vminps_ymm_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256) { append_elem(instructions, inst_vminps_ymm_ymm_m256(dst, src, src2)) } inst_vminpd_xmm_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VMINPD, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_xmm(src2), {}} }, 1077) } inst_vminpd_xmm_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .VMINPD, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_mem(src2.mem, 16), {}} }, 1077) } inst_vminpd_ymm_ymm_ymm :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: YMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VMINPD, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_ymm(src2), {}} }, 1078) } inst_vminpd_ymm_ymm_m256 :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: Mem256) -> Instruction { return with_hint(Instruction{ mnemonic = .VMINPD, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_mem(src2.mem, 32), {}} }, 1078) } -emit_vminpd_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append(instructions, inst_vminpd_xmm_xmm_xmm(dst, src, src2)) } -emit_vminpd_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append(instructions, inst_vminpd_xmm_xmm_m128(dst, src, src2)) } -emit_vminpd_ymm_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM) { append(instructions, inst_vminpd_ymm_ymm_ymm(dst, src, src2)) } -emit_vminpd_ymm_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256) { append(instructions, inst_vminpd_ymm_ymm_m256(dst, src, src2)) } +emit_vminpd_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append_elem(instructions, inst_vminpd_xmm_xmm_xmm(dst, src, src2)) } +emit_vminpd_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append_elem(instructions, inst_vminpd_xmm_xmm_m128(dst, src, src2)) } +emit_vminpd_ymm_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM) { append_elem(instructions, inst_vminpd_ymm_ymm_ymm(dst, src, src2)) } +emit_vminpd_ymm_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256) { append_elem(instructions, inst_vminpd_ymm_ymm_m256(dst, src, src2)) } inst_vminss_xmm_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VMINSS, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_xmm(src2), {}} }, 1079) } inst_vminss_xmm_xmm_m32 :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: Mem32) -> Instruction { return with_hint(Instruction{ mnemonic = .VMINSS, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_mem(src2.mem, 4), {}} }, 1079) } -emit_vminss_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append(instructions, inst_vminss_xmm_xmm_xmm(dst, src, src2)) } -emit_vminss_xmm_xmm_m32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem32) { append(instructions, inst_vminss_xmm_xmm_m32(dst, src, src2)) } +emit_vminss_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append_elem(instructions, inst_vminss_xmm_xmm_xmm(dst, src, src2)) } +emit_vminss_xmm_xmm_m32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem32) { append_elem(instructions, inst_vminss_xmm_xmm_m32(dst, src, src2)) } inst_vminsd_xmm_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VMINSD, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_xmm(src2), {}} }, 1080) } inst_vminsd_xmm_xmm_m64 :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: Mem64) -> Instruction { return with_hint(Instruction{ mnemonic = .VMINSD, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_mem(src2.mem, 8), {}} }, 1080) } -emit_vminsd_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append(instructions, inst_vminsd_xmm_xmm_xmm(dst, src, src2)) } -emit_vminsd_xmm_xmm_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem64) { append(instructions, inst_vminsd_xmm_xmm_m64(dst, src, src2)) } +emit_vminsd_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append_elem(instructions, inst_vminsd_xmm_xmm_xmm(dst, src, src2)) } +emit_vminsd_xmm_xmm_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem64) { append_elem(instructions, inst_vminsd_xmm_xmm_m64(dst, src, src2)) } inst_vandps_xmm_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VANDPS, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_xmm(src2), {}} }, 1081) } inst_vandps_xmm_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .VANDPS, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_mem(src2.mem, 16), {}} }, 1081) } inst_vandps_ymm_ymm_ymm :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: YMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VANDPS, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_ymm(src2), {}} }, 1082) } inst_vandps_ymm_ymm_m256 :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: Mem256) -> Instruction { return with_hint(Instruction{ mnemonic = .VANDPS, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_mem(src2.mem, 32), {}} }, 1082) } -emit_vandps_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append(instructions, inst_vandps_xmm_xmm_xmm(dst, src, src2)) } -emit_vandps_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append(instructions, inst_vandps_xmm_xmm_m128(dst, src, src2)) } -emit_vandps_ymm_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM) { append(instructions, inst_vandps_ymm_ymm_ymm(dst, src, src2)) } -emit_vandps_ymm_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256) { append(instructions, inst_vandps_ymm_ymm_m256(dst, src, src2)) } +emit_vandps_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append_elem(instructions, inst_vandps_xmm_xmm_xmm(dst, src, src2)) } +emit_vandps_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append_elem(instructions, inst_vandps_xmm_xmm_m128(dst, src, src2)) } +emit_vandps_ymm_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM) { append_elem(instructions, inst_vandps_ymm_ymm_ymm(dst, src, src2)) } +emit_vandps_ymm_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256) { append_elem(instructions, inst_vandps_ymm_ymm_m256(dst, src, src2)) } inst_vandpd_xmm_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VANDPD, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_xmm(src2), {}} }, 1083) } inst_vandpd_xmm_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .VANDPD, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_mem(src2.mem, 16), {}} }, 1083) } inst_vandpd_ymm_ymm_ymm :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: YMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VANDPD, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_ymm(src2), {}} }, 1084) } inst_vandpd_ymm_ymm_m256 :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: Mem256) -> Instruction { return with_hint(Instruction{ mnemonic = .VANDPD, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_mem(src2.mem, 32), {}} }, 1084) } -emit_vandpd_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append(instructions, inst_vandpd_xmm_xmm_xmm(dst, src, src2)) } -emit_vandpd_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append(instructions, inst_vandpd_xmm_xmm_m128(dst, src, src2)) } -emit_vandpd_ymm_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM) { append(instructions, inst_vandpd_ymm_ymm_ymm(dst, src, src2)) } -emit_vandpd_ymm_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256) { append(instructions, inst_vandpd_ymm_ymm_m256(dst, src, src2)) } +emit_vandpd_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append_elem(instructions, inst_vandpd_xmm_xmm_xmm(dst, src, src2)) } +emit_vandpd_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append_elem(instructions, inst_vandpd_xmm_xmm_m128(dst, src, src2)) } +emit_vandpd_ymm_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM) { append_elem(instructions, inst_vandpd_ymm_ymm_ymm(dst, src, src2)) } +emit_vandpd_ymm_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256) { append_elem(instructions, inst_vandpd_ymm_ymm_m256(dst, src, src2)) } inst_vandnps_xmm_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VANDNPS, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_xmm(src2), {}} }, 1085) } inst_vandnps_xmm_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .VANDNPS, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_mem(src2.mem, 16), {}} }, 1085) } inst_vandnps_ymm_ymm_ymm :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: YMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VANDNPS, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_ymm(src2), {}} }, 1086) } inst_vandnps_ymm_ymm_m256 :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: Mem256) -> Instruction { return with_hint(Instruction{ mnemonic = .VANDNPS, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_mem(src2.mem, 32), {}} }, 1086) } -emit_vandnps_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append(instructions, inst_vandnps_xmm_xmm_xmm(dst, src, src2)) } -emit_vandnps_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append(instructions, inst_vandnps_xmm_xmm_m128(dst, src, src2)) } -emit_vandnps_ymm_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM) { append(instructions, inst_vandnps_ymm_ymm_ymm(dst, src, src2)) } -emit_vandnps_ymm_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256) { append(instructions, inst_vandnps_ymm_ymm_m256(dst, src, src2)) } +emit_vandnps_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append_elem(instructions, inst_vandnps_xmm_xmm_xmm(dst, src, src2)) } +emit_vandnps_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append_elem(instructions, inst_vandnps_xmm_xmm_m128(dst, src, src2)) } +emit_vandnps_ymm_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM) { append_elem(instructions, inst_vandnps_ymm_ymm_ymm(dst, src, src2)) } +emit_vandnps_ymm_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256) { append_elem(instructions, inst_vandnps_ymm_ymm_m256(dst, src, src2)) } inst_vandnpd_xmm_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VANDNPD, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_xmm(src2), {}} }, 1087) } inst_vandnpd_xmm_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .VANDNPD, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_mem(src2.mem, 16), {}} }, 1087) } inst_vandnpd_ymm_ymm_ymm :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: YMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VANDNPD, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_ymm(src2), {}} }, 1088) } inst_vandnpd_ymm_ymm_m256 :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: Mem256) -> Instruction { return with_hint(Instruction{ mnemonic = .VANDNPD, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_mem(src2.mem, 32), {}} }, 1088) } -emit_vandnpd_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append(instructions, inst_vandnpd_xmm_xmm_xmm(dst, src, src2)) } -emit_vandnpd_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append(instructions, inst_vandnpd_xmm_xmm_m128(dst, src, src2)) } -emit_vandnpd_ymm_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM) { append(instructions, inst_vandnpd_ymm_ymm_ymm(dst, src, src2)) } -emit_vandnpd_ymm_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256) { append(instructions, inst_vandnpd_ymm_ymm_m256(dst, src, src2)) } +emit_vandnpd_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append_elem(instructions, inst_vandnpd_xmm_xmm_xmm(dst, src, src2)) } +emit_vandnpd_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append_elem(instructions, inst_vandnpd_xmm_xmm_m128(dst, src, src2)) } +emit_vandnpd_ymm_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM) { append_elem(instructions, inst_vandnpd_ymm_ymm_ymm(dst, src, src2)) } +emit_vandnpd_ymm_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256) { append_elem(instructions, inst_vandnpd_ymm_ymm_m256(dst, src, src2)) } inst_vorps_xmm_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VORPS, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_xmm(src2), {}} }, 1089) } inst_vorps_xmm_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .VORPS, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_mem(src2.mem, 16), {}} }, 1089) } inst_vorps_ymm_ymm_ymm :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: YMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VORPS, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_ymm(src2), {}} }, 1090) } inst_vorps_ymm_ymm_m256 :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: Mem256) -> Instruction { return with_hint(Instruction{ mnemonic = .VORPS, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_mem(src2.mem, 32), {}} }, 1090) } -emit_vorps_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append(instructions, inst_vorps_xmm_xmm_xmm(dst, src, src2)) } -emit_vorps_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append(instructions, inst_vorps_xmm_xmm_m128(dst, src, src2)) } -emit_vorps_ymm_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM) { append(instructions, inst_vorps_ymm_ymm_ymm(dst, src, src2)) } -emit_vorps_ymm_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256) { append(instructions, inst_vorps_ymm_ymm_m256(dst, src, src2)) } +emit_vorps_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append_elem(instructions, inst_vorps_xmm_xmm_xmm(dst, src, src2)) } +emit_vorps_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append_elem(instructions, inst_vorps_xmm_xmm_m128(dst, src, src2)) } +emit_vorps_ymm_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM) { append_elem(instructions, inst_vorps_ymm_ymm_ymm(dst, src, src2)) } +emit_vorps_ymm_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256) { append_elem(instructions, inst_vorps_ymm_ymm_m256(dst, src, src2)) } inst_vorpd_xmm_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VORPD, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_xmm(src2), {}} }, 1091) } inst_vorpd_xmm_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .VORPD, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_mem(src2.mem, 16), {}} }, 1091) } inst_vorpd_ymm_ymm_ymm :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: YMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VORPD, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_ymm(src2), {}} }, 1092) } inst_vorpd_ymm_ymm_m256 :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: Mem256) -> Instruction { return with_hint(Instruction{ mnemonic = .VORPD, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_mem(src2.mem, 32), {}} }, 1092) } -emit_vorpd_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append(instructions, inst_vorpd_xmm_xmm_xmm(dst, src, src2)) } -emit_vorpd_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append(instructions, inst_vorpd_xmm_xmm_m128(dst, src, src2)) } -emit_vorpd_ymm_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM) { append(instructions, inst_vorpd_ymm_ymm_ymm(dst, src, src2)) } -emit_vorpd_ymm_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256) { append(instructions, inst_vorpd_ymm_ymm_m256(dst, src, src2)) } +emit_vorpd_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append_elem(instructions, inst_vorpd_xmm_xmm_xmm(dst, src, src2)) } +emit_vorpd_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append_elem(instructions, inst_vorpd_xmm_xmm_m128(dst, src, src2)) } +emit_vorpd_ymm_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM) { append_elem(instructions, inst_vorpd_ymm_ymm_ymm(dst, src, src2)) } +emit_vorpd_ymm_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256) { append_elem(instructions, inst_vorpd_ymm_ymm_m256(dst, src, src2)) } inst_vxorps_xmm_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VXORPS, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_xmm(src2), {}} }, 1093) } inst_vxorps_xmm_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .VXORPS, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_mem(src2.mem, 16), {}} }, 1093) } inst_vxorps_ymm_ymm_ymm :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: YMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VXORPS, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_ymm(src2), {}} }, 1094) } inst_vxorps_ymm_ymm_m256 :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: Mem256) -> Instruction { return with_hint(Instruction{ mnemonic = .VXORPS, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_mem(src2.mem, 32), {}} }, 1094) } -emit_vxorps_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append(instructions, inst_vxorps_xmm_xmm_xmm(dst, src, src2)) } -emit_vxorps_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append(instructions, inst_vxorps_xmm_xmm_m128(dst, src, src2)) } -emit_vxorps_ymm_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM) { append(instructions, inst_vxorps_ymm_ymm_ymm(dst, src, src2)) } -emit_vxorps_ymm_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256) { append(instructions, inst_vxorps_ymm_ymm_m256(dst, src, src2)) } +emit_vxorps_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append_elem(instructions, inst_vxorps_xmm_xmm_xmm(dst, src, src2)) } +emit_vxorps_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append_elem(instructions, inst_vxorps_xmm_xmm_m128(dst, src, src2)) } +emit_vxorps_ymm_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM) { append_elem(instructions, inst_vxorps_ymm_ymm_ymm(dst, src, src2)) } +emit_vxorps_ymm_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256) { append_elem(instructions, inst_vxorps_ymm_ymm_m256(dst, src, src2)) } inst_vxorpd_xmm_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VXORPD, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_xmm(src2), {}} }, 1095) } inst_vxorpd_xmm_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .VXORPD, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_mem(src2.mem, 16), {}} }, 1095) } inst_vxorpd_ymm_ymm_ymm :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: YMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VXORPD, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_ymm(src2), {}} }, 1096) } inst_vxorpd_ymm_ymm_m256 :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: Mem256) -> Instruction { return with_hint(Instruction{ mnemonic = .VXORPD, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_mem(src2.mem, 32), {}} }, 1096) } -emit_vxorpd_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append(instructions, inst_vxorpd_xmm_xmm_xmm(dst, src, src2)) } -emit_vxorpd_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append(instructions, inst_vxorpd_xmm_xmm_m128(dst, src, src2)) } -emit_vxorpd_ymm_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM) { append(instructions, inst_vxorpd_ymm_ymm_ymm(dst, src, src2)) } -emit_vxorpd_ymm_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256) { append(instructions, inst_vxorpd_ymm_ymm_m256(dst, src, src2)) } +emit_vxorpd_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append_elem(instructions, inst_vxorpd_xmm_xmm_xmm(dst, src, src2)) } +emit_vxorpd_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append_elem(instructions, inst_vxorpd_xmm_xmm_m128(dst, src, src2)) } +emit_vxorpd_ymm_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM) { append_elem(instructions, inst_vxorpd_ymm_ymm_ymm(dst, src, src2)) } +emit_vxorpd_ymm_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256) { append_elem(instructions, inst_vxorpd_ymm_ymm_m256(dst, src, src2)) } inst_vcmpps_xmm_xmm_xmm_imm8 :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: XMM, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .VCMPPS, operand_count = 4, ops = {op_xmm(dst), op_xmm(src), op_xmm(src2), op_imm8(imm)} }, 1097) } inst_vcmpps_xmm_xmm_m128_imm8 :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: Mem128, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .VCMPPS, operand_count = 4, ops = {op_xmm(dst), op_xmm(src), op_mem(src2.mem, 16), op_imm8(imm)} }, 1097) } inst_vcmpps_ymm_ymm_ymm_imm8 :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: YMM, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .VCMPPS, operand_count = 4, ops = {op_ymm(dst), op_ymm(src), op_ymm(src2), op_imm8(imm)} }, 1098) } inst_vcmpps_ymm_ymm_m256_imm8 :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: Mem256, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .VCMPPS, operand_count = 4, ops = {op_ymm(dst), op_ymm(src), op_mem(src2.mem, 32), op_imm8(imm)} }, 1098) } -emit_vcmpps_xmm_xmm_xmm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM, imm: i8) { append(instructions, inst_vcmpps_xmm_xmm_xmm_imm8(dst, src, src2, imm)) } -emit_vcmpps_xmm_xmm_m128_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128, imm: i8) { append(instructions, inst_vcmpps_xmm_xmm_m128_imm8(dst, src, src2, imm)) } -emit_vcmpps_ymm_ymm_ymm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM, imm: i8) { append(instructions, inst_vcmpps_ymm_ymm_ymm_imm8(dst, src, src2, imm)) } -emit_vcmpps_ymm_ymm_m256_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256, imm: i8) { append(instructions, inst_vcmpps_ymm_ymm_m256_imm8(dst, src, src2, imm)) } +emit_vcmpps_xmm_xmm_xmm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM, imm: i8) { append_elem(instructions, inst_vcmpps_xmm_xmm_xmm_imm8(dst, src, src2, imm)) } +emit_vcmpps_xmm_xmm_m128_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128, imm: i8) { append_elem(instructions, inst_vcmpps_xmm_xmm_m128_imm8(dst, src, src2, imm)) } +emit_vcmpps_ymm_ymm_ymm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM, imm: i8) { append_elem(instructions, inst_vcmpps_ymm_ymm_ymm_imm8(dst, src, src2, imm)) } +emit_vcmpps_ymm_ymm_m256_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256, imm: i8) { append_elem(instructions, inst_vcmpps_ymm_ymm_m256_imm8(dst, src, src2, imm)) } inst_vcmppd_xmm_xmm_xmm_imm8 :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: XMM, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .VCMPPD, operand_count = 4, ops = {op_xmm(dst), op_xmm(src), op_xmm(src2), op_imm8(imm)} }, 1099) } inst_vcmppd_xmm_xmm_m128_imm8 :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: Mem128, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .VCMPPD, operand_count = 4, ops = {op_xmm(dst), op_xmm(src), op_mem(src2.mem, 16), op_imm8(imm)} }, 1099) } inst_vcmppd_ymm_ymm_ymm_imm8 :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: YMM, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .VCMPPD, operand_count = 4, ops = {op_ymm(dst), op_ymm(src), op_ymm(src2), op_imm8(imm)} }, 1100) } inst_vcmppd_ymm_ymm_m256_imm8 :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: Mem256, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .VCMPPD, operand_count = 4, ops = {op_ymm(dst), op_ymm(src), op_mem(src2.mem, 32), op_imm8(imm)} }, 1100) } -emit_vcmppd_xmm_xmm_xmm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM, imm: i8) { append(instructions, inst_vcmppd_xmm_xmm_xmm_imm8(dst, src, src2, imm)) } -emit_vcmppd_xmm_xmm_m128_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128, imm: i8) { append(instructions, inst_vcmppd_xmm_xmm_m128_imm8(dst, src, src2, imm)) } -emit_vcmppd_ymm_ymm_ymm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM, imm: i8) { append(instructions, inst_vcmppd_ymm_ymm_ymm_imm8(dst, src, src2, imm)) } -emit_vcmppd_ymm_ymm_m256_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256, imm: i8) { append(instructions, inst_vcmppd_ymm_ymm_m256_imm8(dst, src, src2, imm)) } +emit_vcmppd_xmm_xmm_xmm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM, imm: i8) { append_elem(instructions, inst_vcmppd_xmm_xmm_xmm_imm8(dst, src, src2, imm)) } +emit_vcmppd_xmm_xmm_m128_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128, imm: i8) { append_elem(instructions, inst_vcmppd_xmm_xmm_m128_imm8(dst, src, src2, imm)) } +emit_vcmppd_ymm_ymm_ymm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM, imm: i8) { append_elem(instructions, inst_vcmppd_ymm_ymm_ymm_imm8(dst, src, src2, imm)) } +emit_vcmppd_ymm_ymm_m256_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256, imm: i8) { append_elem(instructions, inst_vcmppd_ymm_ymm_m256_imm8(dst, src, src2, imm)) } inst_vcmpss_xmm_xmm_xmm_imm8 :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: XMM, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .VCMPSS, operand_count = 4, ops = {op_xmm(dst), op_xmm(src), op_xmm(src2), op_imm8(imm)} }, 1101) } inst_vcmpss_xmm_xmm_m32_imm8 :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: Mem32, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .VCMPSS, operand_count = 4, ops = {op_xmm(dst), op_xmm(src), op_mem(src2.mem, 4), op_imm8(imm)} }, 1101) } -emit_vcmpss_xmm_xmm_xmm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM, imm: i8) { append(instructions, inst_vcmpss_xmm_xmm_xmm_imm8(dst, src, src2, imm)) } -emit_vcmpss_xmm_xmm_m32_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem32, imm: i8) { append(instructions, inst_vcmpss_xmm_xmm_m32_imm8(dst, src, src2, imm)) } +emit_vcmpss_xmm_xmm_xmm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM, imm: i8) { append_elem(instructions, inst_vcmpss_xmm_xmm_xmm_imm8(dst, src, src2, imm)) } +emit_vcmpss_xmm_xmm_m32_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem32, imm: i8) { append_elem(instructions, inst_vcmpss_xmm_xmm_m32_imm8(dst, src, src2, imm)) } inst_vcmpsd_xmm_xmm_xmm_imm8 :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: XMM, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .VCMPSD, operand_count = 4, ops = {op_xmm(dst), op_xmm(src), op_xmm(src2), op_imm8(imm)} }, 1102) } inst_vcmpsd_xmm_xmm_m64_imm8 :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: Mem64, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .VCMPSD, operand_count = 4, ops = {op_xmm(dst), op_xmm(src), op_mem(src2.mem, 8), op_imm8(imm)} }, 1102) } -emit_vcmpsd_xmm_xmm_xmm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM, imm: i8) { append(instructions, inst_vcmpsd_xmm_xmm_xmm_imm8(dst, src, src2, imm)) } -emit_vcmpsd_xmm_xmm_m64_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem64, imm: i8) { append(instructions, inst_vcmpsd_xmm_xmm_m64_imm8(dst, src, src2, imm)) } +emit_vcmpsd_xmm_xmm_xmm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM, imm: i8) { append_elem(instructions, inst_vcmpsd_xmm_xmm_xmm_imm8(dst, src, src2, imm)) } +emit_vcmpsd_xmm_xmm_m64_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem64, imm: i8) { append_elem(instructions, inst_vcmpsd_xmm_xmm_m64_imm8(dst, src, src2, imm)) } inst_vcomiss_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VCOMISS, operand_count = 2, ops = {op_xmm(dst), op_xmm(src), {}, {}} }, 1103) } inst_vcomiss_xmm_m32 :: #force_inline proc "contextless" (dst: XMM, src: Mem32) -> Instruction { return with_hint(Instruction{ mnemonic = .VCOMISS, operand_count = 2, ops = {op_xmm(dst), op_mem(src.mem, 4), {}, {}} }, 1103) } -emit_vcomiss_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append(instructions, inst_vcomiss_xmm_xmm(dst, src)) } -emit_vcomiss_xmm_m32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem32) { append(instructions, inst_vcomiss_xmm_m32(dst, src)) } +emit_vcomiss_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append_elem(instructions, inst_vcomiss_xmm_xmm(dst, src)) } +emit_vcomiss_xmm_m32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem32) { append_elem(instructions, inst_vcomiss_xmm_m32(dst, src)) } inst_vcomisd_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VCOMISD, operand_count = 2, ops = {op_xmm(dst), op_xmm(src), {}, {}} }, 1104) } inst_vcomisd_xmm_m64 :: #force_inline proc "contextless" (dst: XMM, src: Mem64) -> Instruction { return with_hint(Instruction{ mnemonic = .VCOMISD, operand_count = 2, ops = {op_xmm(dst), op_mem(src.mem, 8), {}, {}} }, 1104) } -emit_vcomisd_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append(instructions, inst_vcomisd_xmm_xmm(dst, src)) } -emit_vcomisd_xmm_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem64) { append(instructions, inst_vcomisd_xmm_m64(dst, src)) } +emit_vcomisd_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append_elem(instructions, inst_vcomisd_xmm_xmm(dst, src)) } +emit_vcomisd_xmm_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem64) { append_elem(instructions, inst_vcomisd_xmm_m64(dst, src)) } inst_vucomiss_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VUCOMISS, operand_count = 2, ops = {op_xmm(dst), op_xmm(src), {}, {}} }, 1105) } inst_vucomiss_xmm_m32 :: #force_inline proc "contextless" (dst: XMM, src: Mem32) -> Instruction { return with_hint(Instruction{ mnemonic = .VUCOMISS, operand_count = 2, ops = {op_xmm(dst), op_mem(src.mem, 4), {}, {}} }, 1105) } -emit_vucomiss_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append(instructions, inst_vucomiss_xmm_xmm(dst, src)) } -emit_vucomiss_xmm_m32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem32) { append(instructions, inst_vucomiss_xmm_m32(dst, src)) } +emit_vucomiss_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append_elem(instructions, inst_vucomiss_xmm_xmm(dst, src)) } +emit_vucomiss_xmm_m32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem32) { append_elem(instructions, inst_vucomiss_xmm_m32(dst, src)) } inst_vucomisd_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VUCOMISD, operand_count = 2, ops = {op_xmm(dst), op_xmm(src), {}, {}} }, 1106) } inst_vucomisd_xmm_m64 :: #force_inline proc "contextless" (dst: XMM, src: Mem64) -> Instruction { return with_hint(Instruction{ mnemonic = .VUCOMISD, operand_count = 2, ops = {op_xmm(dst), op_mem(src.mem, 8), {}, {}} }, 1106) } -emit_vucomisd_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append(instructions, inst_vucomisd_xmm_xmm(dst, src)) } -emit_vucomisd_xmm_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem64) { append(instructions, inst_vucomisd_xmm_m64(dst, src)) } +emit_vucomisd_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append_elem(instructions, inst_vucomisd_xmm_xmm(dst, src)) } +emit_vucomisd_xmm_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem64) { append_elem(instructions, inst_vucomisd_xmm_m64(dst, src)) } inst_vshufps_xmm_xmm_xmm_imm8 :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: XMM, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .VSHUFPS, operand_count = 4, ops = {op_xmm(dst), op_xmm(src), op_xmm(src2), op_imm8(imm)} }, 1107) } inst_vshufps_xmm_xmm_m128_imm8 :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: Mem128, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .VSHUFPS, operand_count = 4, ops = {op_xmm(dst), op_xmm(src), op_mem(src2.mem, 16), op_imm8(imm)} }, 1107) } inst_vshufps_ymm_ymm_ymm_imm8 :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: YMM, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .VSHUFPS, operand_count = 4, ops = {op_ymm(dst), op_ymm(src), op_ymm(src2), op_imm8(imm)} }, 1108) } inst_vshufps_ymm_ymm_m256_imm8 :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: Mem256, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .VSHUFPS, operand_count = 4, ops = {op_ymm(dst), op_ymm(src), op_mem(src2.mem, 32), op_imm8(imm)} }, 1108) } -emit_vshufps_xmm_xmm_xmm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM, imm: i8) { append(instructions, inst_vshufps_xmm_xmm_xmm_imm8(dst, src, src2, imm)) } -emit_vshufps_xmm_xmm_m128_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128, imm: i8) { append(instructions, inst_vshufps_xmm_xmm_m128_imm8(dst, src, src2, imm)) } -emit_vshufps_ymm_ymm_ymm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM, imm: i8) { append(instructions, inst_vshufps_ymm_ymm_ymm_imm8(dst, src, src2, imm)) } -emit_vshufps_ymm_ymm_m256_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256, imm: i8) { append(instructions, inst_vshufps_ymm_ymm_m256_imm8(dst, src, src2, imm)) } +emit_vshufps_xmm_xmm_xmm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM, imm: i8) { append_elem(instructions, inst_vshufps_xmm_xmm_xmm_imm8(dst, src, src2, imm)) } +emit_vshufps_xmm_xmm_m128_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128, imm: i8) { append_elem(instructions, inst_vshufps_xmm_xmm_m128_imm8(dst, src, src2, imm)) } +emit_vshufps_ymm_ymm_ymm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM, imm: i8) { append_elem(instructions, inst_vshufps_ymm_ymm_ymm_imm8(dst, src, src2, imm)) } +emit_vshufps_ymm_ymm_m256_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256, imm: i8) { append_elem(instructions, inst_vshufps_ymm_ymm_m256_imm8(dst, src, src2, imm)) } inst_vshufpd_xmm_xmm_xmm_imm8 :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: XMM, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .VSHUFPD, operand_count = 4, ops = {op_xmm(dst), op_xmm(src), op_xmm(src2), op_imm8(imm)} }, 1109) } inst_vshufpd_xmm_xmm_m128_imm8 :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: Mem128, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .VSHUFPD, operand_count = 4, ops = {op_xmm(dst), op_xmm(src), op_mem(src2.mem, 16), op_imm8(imm)} }, 1109) } inst_vshufpd_ymm_ymm_ymm_imm8 :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: YMM, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .VSHUFPD, operand_count = 4, ops = {op_ymm(dst), op_ymm(src), op_ymm(src2), op_imm8(imm)} }, 1110) } inst_vshufpd_ymm_ymm_m256_imm8 :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: Mem256, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .VSHUFPD, operand_count = 4, ops = {op_ymm(dst), op_ymm(src), op_mem(src2.mem, 32), op_imm8(imm)} }, 1110) } -emit_vshufpd_xmm_xmm_xmm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM, imm: i8) { append(instructions, inst_vshufpd_xmm_xmm_xmm_imm8(dst, src, src2, imm)) } -emit_vshufpd_xmm_xmm_m128_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128, imm: i8) { append(instructions, inst_vshufpd_xmm_xmm_m128_imm8(dst, src, src2, imm)) } -emit_vshufpd_ymm_ymm_ymm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM, imm: i8) { append(instructions, inst_vshufpd_ymm_ymm_ymm_imm8(dst, src, src2, imm)) } -emit_vshufpd_ymm_ymm_m256_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256, imm: i8) { append(instructions, inst_vshufpd_ymm_ymm_m256_imm8(dst, src, src2, imm)) } +emit_vshufpd_xmm_xmm_xmm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM, imm: i8) { append_elem(instructions, inst_vshufpd_xmm_xmm_xmm_imm8(dst, src, src2, imm)) } +emit_vshufpd_xmm_xmm_m128_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128, imm: i8) { append_elem(instructions, inst_vshufpd_xmm_xmm_m128_imm8(dst, src, src2, imm)) } +emit_vshufpd_ymm_ymm_ymm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM, imm: i8) { append_elem(instructions, inst_vshufpd_ymm_ymm_ymm_imm8(dst, src, src2, imm)) } +emit_vshufpd_ymm_ymm_m256_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256, imm: i8) { append_elem(instructions, inst_vshufpd_ymm_ymm_m256_imm8(dst, src, src2, imm)) } inst_vunpcklps_xmm_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VUNPCKLPS, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_xmm(src2), {}} }, 1111) } inst_vunpcklps_xmm_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .VUNPCKLPS, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_mem(src2.mem, 16), {}} }, 1111) } inst_vunpcklps_ymm_ymm_ymm :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: YMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VUNPCKLPS, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_ymm(src2), {}} }, 1112) } inst_vunpcklps_ymm_ymm_m256 :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: Mem256) -> Instruction { return with_hint(Instruction{ mnemonic = .VUNPCKLPS, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_mem(src2.mem, 32), {}} }, 1112) } -emit_vunpcklps_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append(instructions, inst_vunpcklps_xmm_xmm_xmm(dst, src, src2)) } -emit_vunpcklps_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append(instructions, inst_vunpcklps_xmm_xmm_m128(dst, src, src2)) } -emit_vunpcklps_ymm_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM) { append(instructions, inst_vunpcklps_ymm_ymm_ymm(dst, src, src2)) } -emit_vunpcklps_ymm_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256) { append(instructions, inst_vunpcklps_ymm_ymm_m256(dst, src, src2)) } +emit_vunpcklps_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append_elem(instructions, inst_vunpcklps_xmm_xmm_xmm(dst, src, src2)) } +emit_vunpcklps_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append_elem(instructions, inst_vunpcklps_xmm_xmm_m128(dst, src, src2)) } +emit_vunpcklps_ymm_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM) { append_elem(instructions, inst_vunpcklps_ymm_ymm_ymm(dst, src, src2)) } +emit_vunpcklps_ymm_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256) { append_elem(instructions, inst_vunpcklps_ymm_ymm_m256(dst, src, src2)) } inst_vunpckhps_xmm_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VUNPCKHPS, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_xmm(src2), {}} }, 1113) } inst_vunpckhps_xmm_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .VUNPCKHPS, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_mem(src2.mem, 16), {}} }, 1113) } inst_vunpckhps_ymm_ymm_ymm :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: YMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VUNPCKHPS, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_ymm(src2), {}} }, 1114) } inst_vunpckhps_ymm_ymm_m256 :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: Mem256) -> Instruction { return with_hint(Instruction{ mnemonic = .VUNPCKHPS, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_mem(src2.mem, 32), {}} }, 1114) } -emit_vunpckhps_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append(instructions, inst_vunpckhps_xmm_xmm_xmm(dst, src, src2)) } -emit_vunpckhps_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append(instructions, inst_vunpckhps_xmm_xmm_m128(dst, src, src2)) } -emit_vunpckhps_ymm_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM) { append(instructions, inst_vunpckhps_ymm_ymm_ymm(dst, src, src2)) } -emit_vunpckhps_ymm_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256) { append(instructions, inst_vunpckhps_ymm_ymm_m256(dst, src, src2)) } +emit_vunpckhps_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append_elem(instructions, inst_vunpckhps_xmm_xmm_xmm(dst, src, src2)) } +emit_vunpckhps_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append_elem(instructions, inst_vunpckhps_xmm_xmm_m128(dst, src, src2)) } +emit_vunpckhps_ymm_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM) { append_elem(instructions, inst_vunpckhps_ymm_ymm_ymm(dst, src, src2)) } +emit_vunpckhps_ymm_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256) { append_elem(instructions, inst_vunpckhps_ymm_ymm_m256(dst, src, src2)) } inst_vunpcklpd_xmm_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VUNPCKLPD, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_xmm(src2), {}} }, 1115) } inst_vunpcklpd_xmm_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .VUNPCKLPD, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_mem(src2.mem, 16), {}} }, 1115) } inst_vunpcklpd_ymm_ymm_ymm :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: YMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VUNPCKLPD, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_ymm(src2), {}} }, 1116) } inst_vunpcklpd_ymm_ymm_m256 :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: Mem256) -> Instruction { return with_hint(Instruction{ mnemonic = .VUNPCKLPD, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_mem(src2.mem, 32), {}} }, 1116) } -emit_vunpcklpd_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append(instructions, inst_vunpcklpd_xmm_xmm_xmm(dst, src, src2)) } -emit_vunpcklpd_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append(instructions, inst_vunpcklpd_xmm_xmm_m128(dst, src, src2)) } -emit_vunpcklpd_ymm_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM) { append(instructions, inst_vunpcklpd_ymm_ymm_ymm(dst, src, src2)) } -emit_vunpcklpd_ymm_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256) { append(instructions, inst_vunpcklpd_ymm_ymm_m256(dst, src, src2)) } +emit_vunpcklpd_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append_elem(instructions, inst_vunpcklpd_xmm_xmm_xmm(dst, src, src2)) } +emit_vunpcklpd_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append_elem(instructions, inst_vunpcklpd_xmm_xmm_m128(dst, src, src2)) } +emit_vunpcklpd_ymm_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM) { append_elem(instructions, inst_vunpcklpd_ymm_ymm_ymm(dst, src, src2)) } +emit_vunpcklpd_ymm_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256) { append_elem(instructions, inst_vunpcklpd_ymm_ymm_m256(dst, src, src2)) } inst_vunpckhpd_xmm_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VUNPCKHPD, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_xmm(src2), {}} }, 1117) } inst_vunpckhpd_xmm_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .VUNPCKHPD, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_mem(src2.mem, 16), {}} }, 1117) } inst_vunpckhpd_ymm_ymm_ymm :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: YMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VUNPCKHPD, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_ymm(src2), {}} }, 1118) } inst_vunpckhpd_ymm_ymm_m256 :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: Mem256) -> Instruction { return with_hint(Instruction{ mnemonic = .VUNPCKHPD, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_mem(src2.mem, 32), {}} }, 1118) } -emit_vunpckhpd_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append(instructions, inst_vunpckhpd_xmm_xmm_xmm(dst, src, src2)) } -emit_vunpckhpd_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append(instructions, inst_vunpckhpd_xmm_xmm_m128(dst, src, src2)) } -emit_vunpckhpd_ymm_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM) { append(instructions, inst_vunpckhpd_ymm_ymm_ymm(dst, src, src2)) } -emit_vunpckhpd_ymm_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256) { append(instructions, inst_vunpckhpd_ymm_ymm_m256(dst, src, src2)) } +emit_vunpckhpd_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append_elem(instructions, inst_vunpckhpd_xmm_xmm_xmm(dst, src, src2)) } +emit_vunpckhpd_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append_elem(instructions, inst_vunpckhpd_xmm_xmm_m128(dst, src, src2)) } +emit_vunpckhpd_ymm_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM) { append_elem(instructions, inst_vunpckhpd_ymm_ymm_ymm(dst, src, src2)) } +emit_vunpckhpd_ymm_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256) { append_elem(instructions, inst_vunpckhpd_ymm_ymm_m256(dst, src, src2)) } inst_vblendps_xmm_xmm_xmm_imm8 :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: XMM, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .VBLENDPS, operand_count = 4, ops = {op_xmm(dst), op_xmm(src), op_xmm(src2), op_imm8(imm)} }, 1119) } inst_vblendps_xmm_xmm_m128_imm8 :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: Mem128, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .VBLENDPS, operand_count = 4, ops = {op_xmm(dst), op_xmm(src), op_mem(src2.mem, 16), op_imm8(imm)} }, 1119) } inst_vblendps_ymm_ymm_ymm_imm8 :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: YMM, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .VBLENDPS, operand_count = 4, ops = {op_ymm(dst), op_ymm(src), op_ymm(src2), op_imm8(imm)} }, 1120) } inst_vblendps_ymm_ymm_m256_imm8 :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: Mem256, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .VBLENDPS, operand_count = 4, ops = {op_ymm(dst), op_ymm(src), op_mem(src2.mem, 32), op_imm8(imm)} }, 1120) } -emit_vblendps_xmm_xmm_xmm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM, imm: i8) { append(instructions, inst_vblendps_xmm_xmm_xmm_imm8(dst, src, src2, imm)) } -emit_vblendps_xmm_xmm_m128_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128, imm: i8) { append(instructions, inst_vblendps_xmm_xmm_m128_imm8(dst, src, src2, imm)) } -emit_vblendps_ymm_ymm_ymm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM, imm: i8) { append(instructions, inst_vblendps_ymm_ymm_ymm_imm8(dst, src, src2, imm)) } -emit_vblendps_ymm_ymm_m256_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256, imm: i8) { append(instructions, inst_vblendps_ymm_ymm_m256_imm8(dst, src, src2, imm)) } +emit_vblendps_xmm_xmm_xmm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM, imm: i8) { append_elem(instructions, inst_vblendps_xmm_xmm_xmm_imm8(dst, src, src2, imm)) } +emit_vblendps_xmm_xmm_m128_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128, imm: i8) { append_elem(instructions, inst_vblendps_xmm_xmm_m128_imm8(dst, src, src2, imm)) } +emit_vblendps_ymm_ymm_ymm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM, imm: i8) { append_elem(instructions, inst_vblendps_ymm_ymm_ymm_imm8(dst, src, src2, imm)) } +emit_vblendps_ymm_ymm_m256_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256, imm: i8) { append_elem(instructions, inst_vblendps_ymm_ymm_m256_imm8(dst, src, src2, imm)) } inst_vblendpd_xmm_xmm_xmm_imm8 :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: XMM, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .VBLENDPD, operand_count = 4, ops = {op_xmm(dst), op_xmm(src), op_xmm(src2), op_imm8(imm)} }, 1121) } inst_vblendpd_xmm_xmm_m128_imm8 :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: Mem128, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .VBLENDPD, operand_count = 4, ops = {op_xmm(dst), op_xmm(src), op_mem(src2.mem, 16), op_imm8(imm)} }, 1121) } inst_vblendpd_ymm_ymm_ymm_imm8 :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: YMM, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .VBLENDPD, operand_count = 4, ops = {op_ymm(dst), op_ymm(src), op_ymm(src2), op_imm8(imm)} }, 1122) } inst_vblendpd_ymm_ymm_m256_imm8 :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: Mem256, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .VBLENDPD, operand_count = 4, ops = {op_ymm(dst), op_ymm(src), op_mem(src2.mem, 32), op_imm8(imm)} }, 1122) } -emit_vblendpd_xmm_xmm_xmm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM, imm: i8) { append(instructions, inst_vblendpd_xmm_xmm_xmm_imm8(dst, src, src2, imm)) } -emit_vblendpd_xmm_xmm_m128_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128, imm: i8) { append(instructions, inst_vblendpd_xmm_xmm_m128_imm8(dst, src, src2, imm)) } -emit_vblendpd_ymm_ymm_ymm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM, imm: i8) { append(instructions, inst_vblendpd_ymm_ymm_ymm_imm8(dst, src, src2, imm)) } -emit_vblendpd_ymm_ymm_m256_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256, imm: i8) { append(instructions, inst_vblendpd_ymm_ymm_m256_imm8(dst, src, src2, imm)) } +emit_vblendpd_xmm_xmm_xmm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM, imm: i8) { append_elem(instructions, inst_vblendpd_xmm_xmm_xmm_imm8(dst, src, src2, imm)) } +emit_vblendpd_xmm_xmm_m128_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128, imm: i8) { append_elem(instructions, inst_vblendpd_xmm_xmm_m128_imm8(dst, src, src2, imm)) } +emit_vblendpd_ymm_ymm_ymm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM, imm: i8) { append_elem(instructions, inst_vblendpd_ymm_ymm_ymm_imm8(dst, src, src2, imm)) } +emit_vblendpd_ymm_ymm_m256_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256, imm: i8) { append_elem(instructions, inst_vblendpd_ymm_ymm_m256_imm8(dst, src, src2, imm)) } inst_vblendvps_xmm_xmm_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: XMM, src3: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VBLENDVPS, operand_count = 4, ops = {op_xmm(dst), op_xmm(src), op_xmm(src2), op_xmm(src3)} }, 1123) } inst_vblendvps_xmm_xmm_m128_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: Mem128, src3: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VBLENDVPS, operand_count = 4, ops = {op_xmm(dst), op_xmm(src), op_mem(src2.mem, 16), op_xmm(src3)} }, 1123) } inst_vblendvps_ymm_ymm_ymm_ymm :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: YMM, src3: YMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VBLENDVPS, operand_count = 4, ops = {op_ymm(dst), op_ymm(src), op_ymm(src2), op_ymm(src3)} }, 1124) } inst_vblendvps_ymm_ymm_m256_ymm :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: Mem256, src3: YMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VBLENDVPS, operand_count = 4, ops = {op_ymm(dst), op_ymm(src), op_mem(src2.mem, 32), op_ymm(src3)} }, 1124) } -emit_vblendvps_xmm_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM, src3: XMM) { append(instructions, inst_vblendvps_xmm_xmm_xmm_xmm(dst, src, src2, src3)) } -emit_vblendvps_xmm_xmm_m128_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128, src3: XMM) { append(instructions, inst_vblendvps_xmm_xmm_m128_xmm(dst, src, src2, src3)) } -emit_vblendvps_ymm_ymm_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM, src3: YMM) { append(instructions, inst_vblendvps_ymm_ymm_ymm_ymm(dst, src, src2, src3)) } -emit_vblendvps_ymm_ymm_m256_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256, src3: YMM) { append(instructions, inst_vblendvps_ymm_ymm_m256_ymm(dst, src, src2, src3)) } +emit_vblendvps_xmm_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM, src3: XMM) { append_elem(instructions, inst_vblendvps_xmm_xmm_xmm_xmm(dst, src, src2, src3)) } +emit_vblendvps_xmm_xmm_m128_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128, src3: XMM) { append_elem(instructions, inst_vblendvps_xmm_xmm_m128_xmm(dst, src, src2, src3)) } +emit_vblendvps_ymm_ymm_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM, src3: YMM) { append_elem(instructions, inst_vblendvps_ymm_ymm_ymm_ymm(dst, src, src2, src3)) } +emit_vblendvps_ymm_ymm_m256_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256, src3: YMM) { append_elem(instructions, inst_vblendvps_ymm_ymm_m256_ymm(dst, src, src2, src3)) } inst_vblendvpd_xmm_xmm_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: XMM, src3: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VBLENDVPD, operand_count = 4, ops = {op_xmm(dst), op_xmm(src), op_xmm(src2), op_xmm(src3)} }, 1125) } inst_vblendvpd_xmm_xmm_m128_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: Mem128, src3: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VBLENDVPD, operand_count = 4, ops = {op_xmm(dst), op_xmm(src), op_mem(src2.mem, 16), op_xmm(src3)} }, 1125) } inst_vblendvpd_ymm_ymm_ymm_ymm :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: YMM, src3: YMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VBLENDVPD, operand_count = 4, ops = {op_ymm(dst), op_ymm(src), op_ymm(src2), op_ymm(src3)} }, 1126) } inst_vblendvpd_ymm_ymm_m256_ymm :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: Mem256, src3: YMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VBLENDVPD, operand_count = 4, ops = {op_ymm(dst), op_ymm(src), op_mem(src2.mem, 32), op_ymm(src3)} }, 1126) } -emit_vblendvpd_xmm_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM, src3: XMM) { append(instructions, inst_vblendvpd_xmm_xmm_xmm_xmm(dst, src, src2, src3)) } -emit_vblendvpd_xmm_xmm_m128_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128, src3: XMM) { append(instructions, inst_vblendvpd_xmm_xmm_m128_xmm(dst, src, src2, src3)) } -emit_vblendvpd_ymm_ymm_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM, src3: YMM) { append(instructions, inst_vblendvpd_ymm_ymm_ymm_ymm(dst, src, src2, src3)) } -emit_vblendvpd_ymm_ymm_m256_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256, src3: YMM) { append(instructions, inst_vblendvpd_ymm_ymm_m256_ymm(dst, src, src2, src3)) } +emit_vblendvpd_xmm_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM, src3: XMM) { append_elem(instructions, inst_vblendvpd_xmm_xmm_xmm_xmm(dst, src, src2, src3)) } +emit_vblendvpd_xmm_xmm_m128_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128, src3: XMM) { append_elem(instructions, inst_vblendvpd_xmm_xmm_m128_xmm(dst, src, src2, src3)) } +emit_vblendvpd_ymm_ymm_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM, src3: YMM) { append_elem(instructions, inst_vblendvpd_ymm_ymm_ymm_ymm(dst, src, src2, src3)) } +emit_vblendvpd_ymm_ymm_m256_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256, src3: YMM) { append_elem(instructions, inst_vblendvpd_ymm_ymm_m256_ymm(dst, src, src2, src3)) } inst_vdpps_xmm_xmm_xmm_imm8 :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: XMM, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .VDPPS, operand_count = 4, ops = {op_xmm(dst), op_xmm(src), op_xmm(src2), op_imm8(imm)} }, 1127) } inst_vdpps_xmm_xmm_m128_imm8 :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: Mem128, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .VDPPS, operand_count = 4, ops = {op_xmm(dst), op_xmm(src), op_mem(src2.mem, 16), op_imm8(imm)} }, 1127) } inst_vdpps_ymm_ymm_ymm_imm8 :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: YMM, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .VDPPS, operand_count = 4, ops = {op_ymm(dst), op_ymm(src), op_ymm(src2), op_imm8(imm)} }, 1128) } inst_vdpps_ymm_ymm_m256_imm8 :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: Mem256, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .VDPPS, operand_count = 4, ops = {op_ymm(dst), op_ymm(src), op_mem(src2.mem, 32), op_imm8(imm)} }, 1128) } -emit_vdpps_xmm_xmm_xmm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM, imm: i8) { append(instructions, inst_vdpps_xmm_xmm_xmm_imm8(dst, src, src2, imm)) } -emit_vdpps_xmm_xmm_m128_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128, imm: i8) { append(instructions, inst_vdpps_xmm_xmm_m128_imm8(dst, src, src2, imm)) } -emit_vdpps_ymm_ymm_ymm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM, imm: i8) { append(instructions, inst_vdpps_ymm_ymm_ymm_imm8(dst, src, src2, imm)) } -emit_vdpps_ymm_ymm_m256_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256, imm: i8) { append(instructions, inst_vdpps_ymm_ymm_m256_imm8(dst, src, src2, imm)) } +emit_vdpps_xmm_xmm_xmm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM, imm: i8) { append_elem(instructions, inst_vdpps_xmm_xmm_xmm_imm8(dst, src, src2, imm)) } +emit_vdpps_xmm_xmm_m128_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128, imm: i8) { append_elem(instructions, inst_vdpps_xmm_xmm_m128_imm8(dst, src, src2, imm)) } +emit_vdpps_ymm_ymm_ymm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM, imm: i8) { append_elem(instructions, inst_vdpps_ymm_ymm_ymm_imm8(dst, src, src2, imm)) } +emit_vdpps_ymm_ymm_m256_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256, imm: i8) { append_elem(instructions, inst_vdpps_ymm_ymm_m256_imm8(dst, src, src2, imm)) } inst_vdppd_xmm_xmm_xmm_imm8 :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: XMM, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .VDPPD, operand_count = 4, ops = {op_xmm(dst), op_xmm(src), op_xmm(src2), op_imm8(imm)} }, 1129) } inst_vdppd_xmm_xmm_m128_imm8 :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: Mem128, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .VDPPD, operand_count = 4, ops = {op_xmm(dst), op_xmm(src), op_mem(src2.mem, 16), op_imm8(imm)} }, 1129) } -emit_vdppd_xmm_xmm_xmm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM, imm: i8) { append(instructions, inst_vdppd_xmm_xmm_xmm_imm8(dst, src, src2, imm)) } -emit_vdppd_xmm_xmm_m128_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128, imm: i8) { append(instructions, inst_vdppd_xmm_xmm_m128_imm8(dst, src, src2, imm)) } +emit_vdppd_xmm_xmm_xmm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM, imm: i8) { append_elem(instructions, inst_vdppd_xmm_xmm_xmm_imm8(dst, src, src2, imm)) } +emit_vdppd_xmm_xmm_m128_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128, imm: i8) { append_elem(instructions, inst_vdppd_xmm_xmm_m128_imm8(dst, src, src2, imm)) } inst_vroundps_xmm_xmm_imm8 :: #force_inline proc "contextless" (dst: XMM, src: XMM, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .VROUNDPS, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_imm8(imm), {}} }, 1130) } inst_vroundps_xmm_m128_imm8 :: #force_inline proc "contextless" (dst: XMM, src: Mem128, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .VROUNDPS, operand_count = 3, ops = {op_xmm(dst), op_mem(src.mem, 16), op_imm8(imm), {}} }, 1130) } inst_vroundps_ymm_ymm_imm8 :: #force_inline proc "contextless" (dst: YMM, src: YMM, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .VROUNDPS, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_imm8(imm), {}} }, 1131) } inst_vroundps_ymm_m256_imm8 :: #force_inline proc "contextless" (dst: YMM, src: Mem256, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .VROUNDPS, operand_count = 3, ops = {op_ymm(dst), op_mem(src.mem, 32), op_imm8(imm), {}} }, 1131) } -emit_vroundps_xmm_xmm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, imm: i8) { append(instructions, inst_vroundps_xmm_xmm_imm8(dst, src, imm)) } -emit_vroundps_xmm_m128_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128, imm: i8) { append(instructions, inst_vroundps_xmm_m128_imm8(dst, src, imm)) } -emit_vroundps_ymm_ymm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, imm: i8) { append(instructions, inst_vroundps_ymm_ymm_imm8(dst, src, imm)) } -emit_vroundps_ymm_m256_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: Mem256, imm: i8) { append(instructions, inst_vroundps_ymm_m256_imm8(dst, src, imm)) } +emit_vroundps_xmm_xmm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, imm: i8) { append_elem(instructions, inst_vroundps_xmm_xmm_imm8(dst, src, imm)) } +emit_vroundps_xmm_m128_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128, imm: i8) { append_elem(instructions, inst_vroundps_xmm_m128_imm8(dst, src, imm)) } +emit_vroundps_ymm_ymm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, imm: i8) { append_elem(instructions, inst_vroundps_ymm_ymm_imm8(dst, src, imm)) } +emit_vroundps_ymm_m256_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: Mem256, imm: i8) { append_elem(instructions, inst_vroundps_ymm_m256_imm8(dst, src, imm)) } inst_vroundpd_xmm_xmm_imm8 :: #force_inline proc "contextless" (dst: XMM, src: XMM, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .VROUNDPD, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_imm8(imm), {}} }, 1132) } inst_vroundpd_xmm_m128_imm8 :: #force_inline proc "contextless" (dst: XMM, src: Mem128, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .VROUNDPD, operand_count = 3, ops = {op_xmm(dst), op_mem(src.mem, 16), op_imm8(imm), {}} }, 1132) } inst_vroundpd_ymm_ymm_imm8 :: #force_inline proc "contextless" (dst: YMM, src: YMM, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .VROUNDPD, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_imm8(imm), {}} }, 1133) } inst_vroundpd_ymm_m256_imm8 :: #force_inline proc "contextless" (dst: YMM, src: Mem256, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .VROUNDPD, operand_count = 3, ops = {op_ymm(dst), op_mem(src.mem, 32), op_imm8(imm), {}} }, 1133) } -emit_vroundpd_xmm_xmm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, imm: i8) { append(instructions, inst_vroundpd_xmm_xmm_imm8(dst, src, imm)) } -emit_vroundpd_xmm_m128_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128, imm: i8) { append(instructions, inst_vroundpd_xmm_m128_imm8(dst, src, imm)) } -emit_vroundpd_ymm_ymm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, imm: i8) { append(instructions, inst_vroundpd_ymm_ymm_imm8(dst, src, imm)) } -emit_vroundpd_ymm_m256_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: Mem256, imm: i8) { append(instructions, inst_vroundpd_ymm_m256_imm8(dst, src, imm)) } +emit_vroundpd_xmm_xmm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, imm: i8) { append_elem(instructions, inst_vroundpd_xmm_xmm_imm8(dst, src, imm)) } +emit_vroundpd_xmm_m128_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128, imm: i8) { append_elem(instructions, inst_vroundpd_xmm_m128_imm8(dst, src, imm)) } +emit_vroundpd_ymm_ymm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, imm: i8) { append_elem(instructions, inst_vroundpd_ymm_ymm_imm8(dst, src, imm)) } +emit_vroundpd_ymm_m256_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: Mem256, imm: i8) { append_elem(instructions, inst_vroundpd_ymm_m256_imm8(dst, src, imm)) } inst_vroundss_xmm_xmm_xmm_imm8 :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: XMM, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .VROUNDSS, operand_count = 4, ops = {op_xmm(dst), op_xmm(src), op_xmm(src2), op_imm8(imm)} }, 1134) } inst_vroundss_xmm_xmm_m32_imm8 :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: Mem32, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .VROUNDSS, operand_count = 4, ops = {op_xmm(dst), op_xmm(src), op_mem(src2.mem, 4), op_imm8(imm)} }, 1134) } -emit_vroundss_xmm_xmm_xmm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM, imm: i8) { append(instructions, inst_vroundss_xmm_xmm_xmm_imm8(dst, src, src2, imm)) } -emit_vroundss_xmm_xmm_m32_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem32, imm: i8) { append(instructions, inst_vroundss_xmm_xmm_m32_imm8(dst, src, src2, imm)) } +emit_vroundss_xmm_xmm_xmm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM, imm: i8) { append_elem(instructions, inst_vroundss_xmm_xmm_xmm_imm8(dst, src, src2, imm)) } +emit_vroundss_xmm_xmm_m32_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem32, imm: i8) { append_elem(instructions, inst_vroundss_xmm_xmm_m32_imm8(dst, src, src2, imm)) } inst_vroundsd_xmm_xmm_xmm_imm8 :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: XMM, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .VROUNDSD, operand_count = 4, ops = {op_xmm(dst), op_xmm(src), op_xmm(src2), op_imm8(imm)} }, 1135) } inst_vroundsd_xmm_xmm_m64_imm8 :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: Mem64, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .VROUNDSD, operand_count = 4, ops = {op_xmm(dst), op_xmm(src), op_mem(src2.mem, 8), op_imm8(imm)} }, 1135) } -emit_vroundsd_xmm_xmm_xmm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM, imm: i8) { append(instructions, inst_vroundsd_xmm_xmm_xmm_imm8(dst, src, src2, imm)) } -emit_vroundsd_xmm_xmm_m64_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem64, imm: i8) { append(instructions, inst_vroundsd_xmm_xmm_m64_imm8(dst, src, src2, imm)) } +emit_vroundsd_xmm_xmm_xmm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM, imm: i8) { append_elem(instructions, inst_vroundsd_xmm_xmm_xmm_imm8(dst, src, src2, imm)) } +emit_vroundsd_xmm_xmm_m64_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem64, imm: i8) { append_elem(instructions, inst_vroundsd_xmm_xmm_m64_imm8(dst, src, src2, imm)) } inst_vextractps_r32_xmm_imm8 :: #force_inline proc "contextless" (dst: GPR32, src: XMM, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .VEXTRACTPS, operand_count = 3, ops = {op_gpr32(dst), op_xmm(src), op_imm8(imm), {}} }, 1136) } inst_vextractps_m32_xmm_imm8 :: #force_inline proc "contextless" (dst: Mem32, src: XMM, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .VEXTRACTPS, operand_count = 3, ops = {op_mem(dst.mem, 4), op_xmm(src), op_imm8(imm), {}} }, 1136) } -emit_vextractps_r32_xmm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: XMM, imm: i8) { append(instructions, inst_vextractps_r32_xmm_imm8(dst, src, imm)) } -emit_vextractps_m32_xmm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem32, src: XMM, imm: i8) { append(instructions, inst_vextractps_m32_xmm_imm8(dst, src, imm)) } +emit_vextractps_r32_xmm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: XMM, imm: i8) { append_elem(instructions, inst_vextractps_r32_xmm_imm8(dst, src, imm)) } +emit_vextractps_m32_xmm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem32, src: XMM, imm: i8) { append_elem(instructions, inst_vextractps_m32_xmm_imm8(dst, src, imm)) } inst_vinsertps_xmm_xmm_xmm_imm8 :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: XMM, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .VINSERTPS, operand_count = 4, ops = {op_xmm(dst), op_xmm(src), op_xmm(src2), op_imm8(imm)} }, 1137) } inst_vinsertps_xmm_xmm_m32_imm8 :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: Mem32, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .VINSERTPS, operand_count = 4, ops = {op_xmm(dst), op_xmm(src), op_mem(src2.mem, 4), op_imm8(imm)} }, 1137) } -emit_vinsertps_xmm_xmm_xmm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM, imm: i8) { append(instructions, inst_vinsertps_xmm_xmm_xmm_imm8(dst, src, src2, imm)) } -emit_vinsertps_xmm_xmm_m32_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem32, imm: i8) { append(instructions, inst_vinsertps_xmm_xmm_m32_imm8(dst, src, src2, imm)) } +emit_vinsertps_xmm_xmm_xmm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM, imm: i8) { append_elem(instructions, inst_vinsertps_xmm_xmm_xmm_imm8(dst, src, src2, imm)) } +emit_vinsertps_xmm_xmm_m32_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem32, imm: i8) { append_elem(instructions, inst_vinsertps_xmm_xmm_m32_imm8(dst, src, src2, imm)) } inst_vmovaps_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VMOVAPS, operand_count = 2, ops = {op_xmm(dst), op_xmm(src), {}, {}} }, 1138) } inst_vmovaps_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .VMOVAPS, operand_count = 2, ops = {op_xmm(dst), op_mem(src.mem, 16), {}, {}} }, 1138) } inst_vmovaps_m128_xmm :: #force_inline proc "contextless" (dst: Mem128, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VMOVAPS, operand_count = 2, ops = {op_mem(dst.mem, 16), op_xmm(src), {}, {}} }, 1139) } inst_vmovaps_ymm_ymm :: #force_inline proc "contextless" (dst: YMM, src: YMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VMOVAPS, operand_count = 2, ops = {op_ymm(dst), op_ymm(src), {}, {}} }, 1140) } inst_vmovaps_ymm_m256 :: #force_inline proc "contextless" (dst: YMM, src: Mem256) -> Instruction { return with_hint(Instruction{ mnemonic = .VMOVAPS, operand_count = 2, ops = {op_ymm(dst), op_mem(src.mem, 32), {}, {}} }, 1140) } inst_vmovaps_m256_ymm :: #force_inline proc "contextless" (dst: Mem256, src: YMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VMOVAPS, operand_count = 2, ops = {op_mem(dst.mem, 32), op_ymm(src), {}, {}} }, 1141) } -emit_vmovaps_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append(instructions, inst_vmovaps_xmm_xmm(dst, src)) } -emit_vmovaps_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append(instructions, inst_vmovaps_xmm_m128(dst, src)) } -emit_vmovaps_m128_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem128, src: XMM) { append(instructions, inst_vmovaps_m128_xmm(dst, src)) } -emit_vmovaps_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM) { append(instructions, inst_vmovaps_ymm_ymm(dst, src)) } -emit_vmovaps_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: Mem256) { append(instructions, inst_vmovaps_ymm_m256(dst, src)) } -emit_vmovaps_m256_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem256, src: YMM) { append(instructions, inst_vmovaps_m256_ymm(dst, src)) } +emit_vmovaps_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append_elem(instructions, inst_vmovaps_xmm_xmm(dst, src)) } +emit_vmovaps_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append_elem(instructions, inst_vmovaps_xmm_m128(dst, src)) } +emit_vmovaps_m128_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem128, src: XMM) { append_elem(instructions, inst_vmovaps_m128_xmm(dst, src)) } +emit_vmovaps_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM) { append_elem(instructions, inst_vmovaps_ymm_ymm(dst, src)) } +emit_vmovaps_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: Mem256) { append_elem(instructions, inst_vmovaps_ymm_m256(dst, src)) } +emit_vmovaps_m256_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem256, src: YMM) { append_elem(instructions, inst_vmovaps_m256_ymm(dst, src)) } inst_vmovups_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VMOVUPS, operand_count = 2, ops = {op_xmm(dst), op_xmm(src), {}, {}} }, 1142) } inst_vmovups_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .VMOVUPS, operand_count = 2, ops = {op_xmm(dst), op_mem(src.mem, 16), {}, {}} }, 1142) } inst_vmovups_m128_xmm :: #force_inline proc "contextless" (dst: Mem128, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VMOVUPS, operand_count = 2, ops = {op_mem(dst.mem, 16), op_xmm(src), {}, {}} }, 1143) } inst_vmovups_ymm_ymm :: #force_inline proc "contextless" (dst: YMM, src: YMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VMOVUPS, operand_count = 2, ops = {op_ymm(dst), op_ymm(src), {}, {}} }, 1144) } inst_vmovups_ymm_m256 :: #force_inline proc "contextless" (dst: YMM, src: Mem256) -> Instruction { return with_hint(Instruction{ mnemonic = .VMOVUPS, operand_count = 2, ops = {op_ymm(dst), op_mem(src.mem, 32), {}, {}} }, 1144) } inst_vmovups_m256_ymm :: #force_inline proc "contextless" (dst: Mem256, src: YMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VMOVUPS, operand_count = 2, ops = {op_mem(dst.mem, 32), op_ymm(src), {}, {}} }, 1145) } -emit_vmovups_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append(instructions, inst_vmovups_xmm_xmm(dst, src)) } -emit_vmovups_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append(instructions, inst_vmovups_xmm_m128(dst, src)) } -emit_vmovups_m128_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem128, src: XMM) { append(instructions, inst_vmovups_m128_xmm(dst, src)) } -emit_vmovups_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM) { append(instructions, inst_vmovups_ymm_ymm(dst, src)) } -emit_vmovups_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: Mem256) { append(instructions, inst_vmovups_ymm_m256(dst, src)) } -emit_vmovups_m256_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem256, src: YMM) { append(instructions, inst_vmovups_m256_ymm(dst, src)) } +emit_vmovups_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append_elem(instructions, inst_vmovups_xmm_xmm(dst, src)) } +emit_vmovups_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append_elem(instructions, inst_vmovups_xmm_m128(dst, src)) } +emit_vmovups_m128_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem128, src: XMM) { append_elem(instructions, inst_vmovups_m128_xmm(dst, src)) } +emit_vmovups_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM) { append_elem(instructions, inst_vmovups_ymm_ymm(dst, src)) } +emit_vmovups_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: Mem256) { append_elem(instructions, inst_vmovups_ymm_m256(dst, src)) } +emit_vmovups_m256_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem256, src: YMM) { append_elem(instructions, inst_vmovups_m256_ymm(dst, src)) } inst_vmovapd_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VMOVAPD, operand_count = 2, ops = {op_xmm(dst), op_xmm(src), {}, {}} }, 1146) } inst_vmovapd_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .VMOVAPD, operand_count = 2, ops = {op_xmm(dst), op_mem(src.mem, 16), {}, {}} }, 1146) } inst_vmovapd_m128_xmm :: #force_inline proc "contextless" (dst: Mem128, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VMOVAPD, operand_count = 2, ops = {op_mem(dst.mem, 16), op_xmm(src), {}, {}} }, 1147) } inst_vmovapd_ymm_ymm :: #force_inline proc "contextless" (dst: YMM, src: YMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VMOVAPD, operand_count = 2, ops = {op_ymm(dst), op_ymm(src), {}, {}} }, 1148) } inst_vmovapd_ymm_m256 :: #force_inline proc "contextless" (dst: YMM, src: Mem256) -> Instruction { return with_hint(Instruction{ mnemonic = .VMOVAPD, operand_count = 2, ops = {op_ymm(dst), op_mem(src.mem, 32), {}, {}} }, 1148) } inst_vmovapd_m256_ymm :: #force_inline proc "contextless" (dst: Mem256, src: YMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VMOVAPD, operand_count = 2, ops = {op_mem(dst.mem, 32), op_ymm(src), {}, {}} }, 1149) } -emit_vmovapd_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append(instructions, inst_vmovapd_xmm_xmm(dst, src)) } -emit_vmovapd_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append(instructions, inst_vmovapd_xmm_m128(dst, src)) } -emit_vmovapd_m128_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem128, src: XMM) { append(instructions, inst_vmovapd_m128_xmm(dst, src)) } -emit_vmovapd_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM) { append(instructions, inst_vmovapd_ymm_ymm(dst, src)) } -emit_vmovapd_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: Mem256) { append(instructions, inst_vmovapd_ymm_m256(dst, src)) } -emit_vmovapd_m256_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem256, src: YMM) { append(instructions, inst_vmovapd_m256_ymm(dst, src)) } +emit_vmovapd_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append_elem(instructions, inst_vmovapd_xmm_xmm(dst, src)) } +emit_vmovapd_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append_elem(instructions, inst_vmovapd_xmm_m128(dst, src)) } +emit_vmovapd_m128_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem128, src: XMM) { append_elem(instructions, inst_vmovapd_m128_xmm(dst, src)) } +emit_vmovapd_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM) { append_elem(instructions, inst_vmovapd_ymm_ymm(dst, src)) } +emit_vmovapd_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: Mem256) { append_elem(instructions, inst_vmovapd_ymm_m256(dst, src)) } +emit_vmovapd_m256_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem256, src: YMM) { append_elem(instructions, inst_vmovapd_m256_ymm(dst, src)) } inst_vmovupd_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VMOVUPD, operand_count = 2, ops = {op_xmm(dst), op_xmm(src), {}, {}} }, 1150) } inst_vmovupd_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .VMOVUPD, operand_count = 2, ops = {op_xmm(dst), op_mem(src.mem, 16), {}, {}} }, 1150) } inst_vmovupd_m128_xmm :: #force_inline proc "contextless" (dst: Mem128, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VMOVUPD, operand_count = 2, ops = {op_mem(dst.mem, 16), op_xmm(src), {}, {}} }, 1151) } inst_vmovupd_ymm_ymm :: #force_inline proc "contextless" (dst: YMM, src: YMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VMOVUPD, operand_count = 2, ops = {op_ymm(dst), op_ymm(src), {}, {}} }, 1152) } inst_vmovupd_ymm_m256 :: #force_inline proc "contextless" (dst: YMM, src: Mem256) -> Instruction { return with_hint(Instruction{ mnemonic = .VMOVUPD, operand_count = 2, ops = {op_ymm(dst), op_mem(src.mem, 32), {}, {}} }, 1152) } inst_vmovupd_m256_ymm :: #force_inline proc "contextless" (dst: Mem256, src: YMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VMOVUPD, operand_count = 2, ops = {op_mem(dst.mem, 32), op_ymm(src), {}, {}} }, 1153) } -emit_vmovupd_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append(instructions, inst_vmovupd_xmm_xmm(dst, src)) } -emit_vmovupd_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append(instructions, inst_vmovupd_xmm_m128(dst, src)) } -emit_vmovupd_m128_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem128, src: XMM) { append(instructions, inst_vmovupd_m128_xmm(dst, src)) } -emit_vmovupd_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM) { append(instructions, inst_vmovupd_ymm_ymm(dst, src)) } -emit_vmovupd_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: Mem256) { append(instructions, inst_vmovupd_ymm_m256(dst, src)) } -emit_vmovupd_m256_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem256, src: YMM) { append(instructions, inst_vmovupd_m256_ymm(dst, src)) } +emit_vmovupd_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append_elem(instructions, inst_vmovupd_xmm_xmm(dst, src)) } +emit_vmovupd_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append_elem(instructions, inst_vmovupd_xmm_m128(dst, src)) } +emit_vmovupd_m128_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem128, src: XMM) { append_elem(instructions, inst_vmovupd_m128_xmm(dst, src)) } +emit_vmovupd_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM) { append_elem(instructions, inst_vmovupd_ymm_ymm(dst, src)) } +emit_vmovupd_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: Mem256) { append_elem(instructions, inst_vmovupd_ymm_m256(dst, src)) } +emit_vmovupd_m256_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem256, src: YMM) { append_elem(instructions, inst_vmovupd_m256_ymm(dst, src)) } inst_vmovss_xmm_m32 :: #force_inline proc "contextless" (dst: XMM, src: Mem32) -> Instruction { return with_hint(Instruction{ mnemonic = .VMOVSS, operand_count = 2, ops = {op_xmm(dst), op_mem(src.mem, 4), {}, {}} }, 1154) } inst_vmovss_m32_xmm :: #force_inline proc "contextless" (dst: Mem32, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VMOVSS, operand_count = 2, ops = {op_mem(dst.mem, 4), op_xmm(src), {}, {}} }, 1155) } inst_vmovss_xmm_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VMOVSS, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_xmm(src2), {}} }, 1156) } -emit_vmovss_xmm_m32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem32) { append(instructions, inst_vmovss_xmm_m32(dst, src)) } -emit_vmovss_m32_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem32, src: XMM) { append(instructions, inst_vmovss_m32_xmm(dst, src)) } -emit_vmovss_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append(instructions, inst_vmovss_xmm_xmm_xmm(dst, src, src2)) } +emit_vmovss_xmm_m32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem32) { append_elem(instructions, inst_vmovss_xmm_m32(dst, src)) } +emit_vmovss_m32_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem32, src: XMM) { append_elem(instructions, inst_vmovss_m32_xmm(dst, src)) } +emit_vmovss_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append_elem(instructions, inst_vmovss_xmm_xmm_xmm(dst, src, src2)) } inst_vmovsd_xmm_m64 :: #force_inline proc "contextless" (dst: XMM, src: Mem64) -> Instruction { return with_hint(Instruction{ mnemonic = .VMOVSD, operand_count = 2, ops = {op_xmm(dst), op_mem(src.mem, 8), {}, {}} }, 1157) } inst_vmovsd_m64_xmm :: #force_inline proc "contextless" (dst: Mem64, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VMOVSD, operand_count = 2, ops = {op_mem(dst.mem, 8), op_xmm(src), {}, {}} }, 1158) } inst_vmovsd_xmm_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VMOVSD, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_xmm(src2), {}} }, 1159) } -emit_vmovsd_xmm_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem64) { append(instructions, inst_vmovsd_xmm_m64(dst, src)) } -emit_vmovsd_m64_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem64, src: XMM) { append(instructions, inst_vmovsd_m64_xmm(dst, src)) } -emit_vmovsd_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append(instructions, inst_vmovsd_xmm_xmm_xmm(dst, src, src2)) } +emit_vmovsd_xmm_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem64) { append_elem(instructions, inst_vmovsd_xmm_m64(dst, src)) } +emit_vmovsd_m64_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem64, src: XMM) { append_elem(instructions, inst_vmovsd_m64_xmm(dst, src)) } +emit_vmovsd_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append_elem(instructions, inst_vmovsd_xmm_xmm_xmm(dst, src, src2)) } inst_vmovdqa_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VMOVDQA, operand_count = 2, ops = {op_xmm(dst), op_xmm(src), {}, {}} }, 1160) } inst_vmovdqa_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .VMOVDQA, operand_count = 2, ops = {op_xmm(dst), op_mem(src.mem, 16), {}, {}} }, 1160) } inst_vmovdqa_m128_xmm :: #force_inline proc "contextless" (dst: Mem128, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VMOVDQA, operand_count = 2, ops = {op_mem(dst.mem, 16), op_xmm(src), {}, {}} }, 1161) } inst_vmovdqa_ymm_ymm :: #force_inline proc "contextless" (dst: YMM, src: YMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VMOVDQA, operand_count = 2, ops = {op_ymm(dst), op_ymm(src), {}, {}} }, 1162) } inst_vmovdqa_ymm_m256 :: #force_inline proc "contextless" (dst: YMM, src: Mem256) -> Instruction { return with_hint(Instruction{ mnemonic = .VMOVDQA, operand_count = 2, ops = {op_ymm(dst), op_mem(src.mem, 32), {}, {}} }, 1162) } inst_vmovdqa_m256_ymm :: #force_inline proc "contextless" (dst: Mem256, src: YMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VMOVDQA, operand_count = 2, ops = {op_mem(dst.mem, 32), op_ymm(src), {}, {}} }, 1163) } -emit_vmovdqa_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append(instructions, inst_vmovdqa_xmm_xmm(dst, src)) } -emit_vmovdqa_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append(instructions, inst_vmovdqa_xmm_m128(dst, src)) } -emit_vmovdqa_m128_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem128, src: XMM) { append(instructions, inst_vmovdqa_m128_xmm(dst, src)) } -emit_vmovdqa_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM) { append(instructions, inst_vmovdqa_ymm_ymm(dst, src)) } -emit_vmovdqa_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: Mem256) { append(instructions, inst_vmovdqa_ymm_m256(dst, src)) } -emit_vmovdqa_m256_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem256, src: YMM) { append(instructions, inst_vmovdqa_m256_ymm(dst, src)) } +emit_vmovdqa_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append_elem(instructions, inst_vmovdqa_xmm_xmm(dst, src)) } +emit_vmovdqa_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append_elem(instructions, inst_vmovdqa_xmm_m128(dst, src)) } +emit_vmovdqa_m128_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem128, src: XMM) { append_elem(instructions, inst_vmovdqa_m128_xmm(dst, src)) } +emit_vmovdqa_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM) { append_elem(instructions, inst_vmovdqa_ymm_ymm(dst, src)) } +emit_vmovdqa_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: Mem256) { append_elem(instructions, inst_vmovdqa_ymm_m256(dst, src)) } +emit_vmovdqa_m256_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem256, src: YMM) { append_elem(instructions, inst_vmovdqa_m256_ymm(dst, src)) } inst_vmovdqu_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VMOVDQU, operand_count = 2, ops = {op_xmm(dst), op_xmm(src), {}, {}} }, 1164) } inst_vmovdqu_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .VMOVDQU, operand_count = 2, ops = {op_xmm(dst), op_mem(src.mem, 16), {}, {}} }, 1164) } inst_vmovdqu_m128_xmm :: #force_inline proc "contextless" (dst: Mem128, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VMOVDQU, operand_count = 2, ops = {op_mem(dst.mem, 16), op_xmm(src), {}, {}} }, 1165) } inst_vmovdqu_ymm_ymm :: #force_inline proc "contextless" (dst: YMM, src: YMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VMOVDQU, operand_count = 2, ops = {op_ymm(dst), op_ymm(src), {}, {}} }, 1166) } inst_vmovdqu_ymm_m256 :: #force_inline proc "contextless" (dst: YMM, src: Mem256) -> Instruction { return with_hint(Instruction{ mnemonic = .VMOVDQU, operand_count = 2, ops = {op_ymm(dst), op_mem(src.mem, 32), {}, {}} }, 1166) } inst_vmovdqu_m256_ymm :: #force_inline proc "contextless" (dst: Mem256, src: YMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VMOVDQU, operand_count = 2, ops = {op_mem(dst.mem, 32), op_ymm(src), {}, {}} }, 1167) } -emit_vmovdqu_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append(instructions, inst_vmovdqu_xmm_xmm(dst, src)) } -emit_vmovdqu_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append(instructions, inst_vmovdqu_xmm_m128(dst, src)) } -emit_vmovdqu_m128_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem128, src: XMM) { append(instructions, inst_vmovdqu_m128_xmm(dst, src)) } -emit_vmovdqu_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM) { append(instructions, inst_vmovdqu_ymm_ymm(dst, src)) } -emit_vmovdqu_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: Mem256) { append(instructions, inst_vmovdqu_ymm_m256(dst, src)) } -emit_vmovdqu_m256_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem256, src: YMM) { append(instructions, inst_vmovdqu_m256_ymm(dst, src)) } +emit_vmovdqu_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append_elem(instructions, inst_vmovdqu_xmm_xmm(dst, src)) } +emit_vmovdqu_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append_elem(instructions, inst_vmovdqu_xmm_m128(dst, src)) } +emit_vmovdqu_m128_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem128, src: XMM) { append_elem(instructions, inst_vmovdqu_m128_xmm(dst, src)) } +emit_vmovdqu_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM) { append_elem(instructions, inst_vmovdqu_ymm_ymm(dst, src)) } +emit_vmovdqu_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: Mem256) { append_elem(instructions, inst_vmovdqu_ymm_m256(dst, src)) } +emit_vmovdqu_m256_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem256, src: YMM) { append_elem(instructions, inst_vmovdqu_m256_ymm(dst, src)) } inst_vmovq_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VMOVQ, operand_count = 2, ops = {op_xmm(dst), op_xmm(src), {}, {}} }, 1168) } inst_vmovq_xmm_m64 :: #force_inline proc "contextless" (dst: XMM, src: Mem64) -> Instruction { return with_hint(Instruction{ mnemonic = .VMOVQ, operand_count = 2, ops = {op_xmm(dst), op_mem(src.mem, 8), {}, {}} }, 1168) } inst_vmovq_m64_xmm :: #force_inline proc "contextless" (dst: Mem64, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VMOVQ, operand_count = 2, ops = {op_mem(dst.mem, 8), op_xmm(src), {}, {}} }, 1169) } inst_vmovq_xmm_r64 :: #force_inline proc "contextless" (dst: XMM, src: GPR64) -> Instruction { return with_hint(Instruction{ mnemonic = .VMOVQ, operand_count = 2, ops = {op_xmm(dst), op_gpr64(src), {}, {}} }, 1170) } inst_vmovq_r64_xmm :: #force_inline proc "contextless" (dst: GPR64, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VMOVQ, operand_count = 2, ops = {op_gpr64(dst), op_xmm(src), {}, {}} }, 1171) } -emit_vmovq_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append(instructions, inst_vmovq_xmm_xmm(dst, src)) } -emit_vmovq_xmm_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem64) { append(instructions, inst_vmovq_xmm_m64(dst, src)) } -emit_vmovq_m64_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem64, src: XMM) { append(instructions, inst_vmovq_m64_xmm(dst, src)) } -emit_vmovq_xmm_r64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: GPR64) { append(instructions, inst_vmovq_xmm_r64(dst, src)) } -emit_vmovq_r64_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: XMM) { append(instructions, inst_vmovq_r64_xmm(dst, src)) } +emit_vmovq_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append_elem(instructions, inst_vmovq_xmm_xmm(dst, src)) } +emit_vmovq_xmm_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem64) { append_elem(instructions, inst_vmovq_xmm_m64(dst, src)) } +emit_vmovq_m64_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem64, src: XMM) { append_elem(instructions, inst_vmovq_m64_xmm(dst, src)) } +emit_vmovq_xmm_r64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: GPR64) { append_elem(instructions, inst_vmovq_xmm_r64(dst, src)) } +emit_vmovq_r64_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: XMM) { append_elem(instructions, inst_vmovq_r64_xmm(dst, src)) } inst_vmovd_xmm_r32 :: #force_inline proc "contextless" (dst: XMM, src: GPR32) -> Instruction { return with_hint(Instruction{ mnemonic = .VMOVD, operand_count = 2, ops = {op_xmm(dst), op_gpr32(src), {}, {}} }, 1172) } inst_vmovd_xmm_m32 :: #force_inline proc "contextless" (dst: XMM, src: Mem32) -> Instruction { return with_hint(Instruction{ mnemonic = .VMOVD, operand_count = 2, ops = {op_xmm(dst), op_mem(src.mem, 4), {}, {}} }, 1172) } inst_vmovd_r32_xmm :: #force_inline proc "contextless" (dst: GPR32, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VMOVD, operand_count = 2, ops = {op_gpr32(dst), op_xmm(src), {}, {}} }, 1173) } inst_vmovd_m32_xmm :: #force_inline proc "contextless" (dst: Mem32, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VMOVD, operand_count = 2, ops = {op_mem(dst.mem, 4), op_xmm(src), {}, {}} }, 1173) } -emit_vmovd_xmm_r32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: GPR32) { append(instructions, inst_vmovd_xmm_r32(dst, src)) } -emit_vmovd_xmm_m32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem32) { append(instructions, inst_vmovd_xmm_m32(dst, src)) } -emit_vmovd_r32_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: XMM) { append(instructions, inst_vmovd_r32_xmm(dst, src)) } -emit_vmovd_m32_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem32, src: XMM) { append(instructions, inst_vmovd_m32_xmm(dst, src)) } +emit_vmovd_xmm_r32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: GPR32) { append_elem(instructions, inst_vmovd_xmm_r32(dst, src)) } +emit_vmovd_xmm_m32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem32) { append_elem(instructions, inst_vmovd_xmm_m32(dst, src)) } +emit_vmovd_r32_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: XMM) { append_elem(instructions, inst_vmovd_r32_xmm(dst, src)) } +emit_vmovd_m32_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem32, src: XMM) { append_elem(instructions, inst_vmovd_m32_xmm(dst, src)) } inst_vmovlps_xmm_xmm_m64 :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: Mem64) -> Instruction { return with_hint(Instruction{ mnemonic = .VMOVLPS, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_mem(src2.mem, 8), {}} }, 1174) } inst_vmovlps_m64_xmm :: #force_inline proc "contextless" (dst: Mem64, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VMOVLPS, operand_count = 2, ops = {op_mem(dst.mem, 8), op_xmm(src), {}, {}} }, 1175) } -emit_vmovlps_xmm_xmm_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem64) { append(instructions, inst_vmovlps_xmm_xmm_m64(dst, src, src2)) } -emit_vmovlps_m64_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem64, src: XMM) { append(instructions, inst_vmovlps_m64_xmm(dst, src)) } +emit_vmovlps_xmm_xmm_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem64) { append_elem(instructions, inst_vmovlps_xmm_xmm_m64(dst, src, src2)) } +emit_vmovlps_m64_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem64, src: XMM) { append_elem(instructions, inst_vmovlps_m64_xmm(dst, src)) } inst_vmovhps_xmm_xmm_m64 :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: Mem64) -> Instruction { return with_hint(Instruction{ mnemonic = .VMOVHPS, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_mem(src2.mem, 8), {}} }, 1176) } inst_vmovhps_m64_xmm :: #force_inline proc "contextless" (dst: Mem64, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VMOVHPS, operand_count = 2, ops = {op_mem(dst.mem, 8), op_xmm(src), {}, {}} }, 1177) } -emit_vmovhps_xmm_xmm_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem64) { append(instructions, inst_vmovhps_xmm_xmm_m64(dst, src, src2)) } -emit_vmovhps_m64_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem64, src: XMM) { append(instructions, inst_vmovhps_m64_xmm(dst, src)) } +emit_vmovhps_xmm_xmm_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem64) { append_elem(instructions, inst_vmovhps_xmm_xmm_m64(dst, src, src2)) } +emit_vmovhps_m64_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem64, src: XMM) { append_elem(instructions, inst_vmovhps_m64_xmm(dst, src)) } inst_vmovlpd_xmm_xmm_m64 :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: Mem64) -> Instruction { return with_hint(Instruction{ mnemonic = .VMOVLPD, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_mem(src2.mem, 8), {}} }, 1178) } inst_vmovlpd_m64_xmm :: #force_inline proc "contextless" (dst: Mem64, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VMOVLPD, operand_count = 2, ops = {op_mem(dst.mem, 8), op_xmm(src), {}, {}} }, 1179) } -emit_vmovlpd_xmm_xmm_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem64) { append(instructions, inst_vmovlpd_xmm_xmm_m64(dst, src, src2)) } -emit_vmovlpd_m64_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem64, src: XMM) { append(instructions, inst_vmovlpd_m64_xmm(dst, src)) } +emit_vmovlpd_xmm_xmm_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem64) { append_elem(instructions, inst_vmovlpd_xmm_xmm_m64(dst, src, src2)) } +emit_vmovlpd_m64_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem64, src: XMM) { append_elem(instructions, inst_vmovlpd_m64_xmm(dst, src)) } inst_vmovhpd_xmm_xmm_m64 :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: Mem64) -> Instruction { return with_hint(Instruction{ mnemonic = .VMOVHPD, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_mem(src2.mem, 8), {}} }, 1180) } inst_vmovhpd_m64_xmm :: #force_inline proc "contextless" (dst: Mem64, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VMOVHPD, operand_count = 2, ops = {op_mem(dst.mem, 8), op_xmm(src), {}, {}} }, 1181) } -emit_vmovhpd_xmm_xmm_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem64) { append(instructions, inst_vmovhpd_xmm_xmm_m64(dst, src, src2)) } -emit_vmovhpd_m64_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem64, src: XMM) { append(instructions, inst_vmovhpd_m64_xmm(dst, src)) } +emit_vmovhpd_xmm_xmm_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem64) { append_elem(instructions, inst_vmovhpd_xmm_xmm_m64(dst, src, src2)) } +emit_vmovhpd_m64_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem64, src: XMM) { append_elem(instructions, inst_vmovhpd_m64_xmm(dst, src)) } inst_vmovlhps_xmm_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VMOVLHPS, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_xmm(src2), {}} }, 1182) } -emit_vmovlhps_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append(instructions, inst_vmovlhps_xmm_xmm_xmm(dst, src, src2)) } +emit_vmovlhps_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append_elem(instructions, inst_vmovlhps_xmm_xmm_xmm(dst, src, src2)) } inst_vmovhlps_xmm_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VMOVHLPS, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_xmm(src2), {}} }, 1183) } -emit_vmovhlps_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append(instructions, inst_vmovhlps_xmm_xmm_xmm(dst, src, src2)) } +emit_vmovhlps_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append_elem(instructions, inst_vmovhlps_xmm_xmm_xmm(dst, src, src2)) } inst_vmovmskps_r32_xmm :: #force_inline proc "contextless" (dst: GPR32, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VMOVMSKPS, operand_count = 2, ops = {op_gpr32(dst), op_xmm(src), {}, {}} }, 1184) } inst_vmovmskps_r32_ymm :: #force_inline proc "contextless" (dst: GPR32, src: YMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VMOVMSKPS, operand_count = 2, ops = {op_gpr32(dst), op_ymm(src), {}, {}} }, 1185) } -emit_vmovmskps_r32_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: XMM) { append(instructions, inst_vmovmskps_r32_xmm(dst, src)) } -emit_vmovmskps_r32_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: YMM) { append(instructions, inst_vmovmskps_r32_ymm(dst, src)) } +emit_vmovmskps_r32_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: XMM) { append_elem(instructions, inst_vmovmskps_r32_xmm(dst, src)) } +emit_vmovmskps_r32_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: YMM) { append_elem(instructions, inst_vmovmskps_r32_ymm(dst, src)) } inst_vmovmskpd_r32_xmm :: #force_inline proc "contextless" (dst: GPR32, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VMOVMSKPD, operand_count = 2, ops = {op_gpr32(dst), op_xmm(src), {}, {}} }, 1186) } inst_vmovmskpd_r32_ymm :: #force_inline proc "contextless" (dst: GPR32, src: YMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VMOVMSKPD, operand_count = 2, ops = {op_gpr32(dst), op_ymm(src), {}, {}} }, 1187) } -emit_vmovmskpd_r32_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: XMM) { append(instructions, inst_vmovmskpd_r32_xmm(dst, src)) } -emit_vmovmskpd_r32_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: YMM) { append(instructions, inst_vmovmskpd_r32_ymm(dst, src)) } +emit_vmovmskpd_r32_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: XMM) { append_elem(instructions, inst_vmovmskpd_r32_xmm(dst, src)) } +emit_vmovmskpd_r32_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: YMM) { append_elem(instructions, inst_vmovmskpd_r32_ymm(dst, src)) } inst_vmovntps_m128_xmm :: #force_inline proc "contextless" (dst: Mem128, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VMOVNTPS, operand_count = 2, ops = {op_mem(dst.mem, 16), op_xmm(src), {}, {}} }, 1188) } inst_vmovntps_m256_ymm :: #force_inline proc "contextless" (dst: Mem256, src: YMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VMOVNTPS, operand_count = 2, ops = {op_mem(dst.mem, 32), op_ymm(src), {}, {}} }, 1189) } -emit_vmovntps_m128_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem128, src: XMM) { append(instructions, inst_vmovntps_m128_xmm(dst, src)) } -emit_vmovntps_m256_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem256, src: YMM) { append(instructions, inst_vmovntps_m256_ymm(dst, src)) } +emit_vmovntps_m128_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem128, src: XMM) { append_elem(instructions, inst_vmovntps_m128_xmm(dst, src)) } +emit_vmovntps_m256_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem256, src: YMM) { append_elem(instructions, inst_vmovntps_m256_ymm(dst, src)) } inst_vmovntpd_m128_xmm :: #force_inline proc "contextless" (dst: Mem128, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VMOVNTPD, operand_count = 2, ops = {op_mem(dst.mem, 16), op_xmm(src), {}, {}} }, 1190) } inst_vmovntpd_m256_ymm :: #force_inline proc "contextless" (dst: Mem256, src: YMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VMOVNTPD, operand_count = 2, ops = {op_mem(dst.mem, 32), op_ymm(src), {}, {}} }, 1191) } -emit_vmovntpd_m128_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem128, src: XMM) { append(instructions, inst_vmovntpd_m128_xmm(dst, src)) } -emit_vmovntpd_m256_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem256, src: YMM) { append(instructions, inst_vmovntpd_m256_ymm(dst, src)) } +emit_vmovntpd_m128_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem128, src: XMM) { append_elem(instructions, inst_vmovntpd_m128_xmm(dst, src)) } +emit_vmovntpd_m256_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem256, src: YMM) { append_elem(instructions, inst_vmovntpd_m256_ymm(dst, src)) } inst_vmovntdq_m128_xmm :: #force_inline proc "contextless" (dst: Mem128, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VMOVNTDQ, operand_count = 2, ops = {op_mem(dst.mem, 16), op_xmm(src), {}, {}} }, 1192) } inst_vmovntdq_m256_ymm :: #force_inline proc "contextless" (dst: Mem256, src: YMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VMOVNTDQ, operand_count = 2, ops = {op_mem(dst.mem, 32), op_ymm(src), {}, {}} }, 1193) } inst_vmovntdq_m512_zmm :: #force_inline proc "contextless" (dst: Mem512, src: ZMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VMOVNTDQ, operand_count = 2, ops = {op_mem(dst.mem, 64), op_zmm(src), {}, {}} }, 1194) } -emit_vmovntdq_m128_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem128, src: XMM) { append(instructions, inst_vmovntdq_m128_xmm(dst, src)) } -emit_vmovntdq_m256_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem256, src: YMM) { append(instructions, inst_vmovntdq_m256_ymm(dst, src)) } -emit_vmovntdq_m512_zmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem512, src: ZMM) { append(instructions, inst_vmovntdq_m512_zmm(dst, src)) } +emit_vmovntdq_m128_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem128, src: XMM) { append_elem(instructions, inst_vmovntdq_m128_xmm(dst, src)) } +emit_vmovntdq_m256_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem256, src: YMM) { append_elem(instructions, inst_vmovntdq_m256_ymm(dst, src)) } +emit_vmovntdq_m512_zmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem512, src: ZMM) { append_elem(instructions, inst_vmovntdq_m512_zmm(dst, src)) } inst_vmovntdqa_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .VMOVNTDQA, operand_count = 2, ops = {op_xmm(dst), op_mem(src.mem, 16), {}, {}} }, 1195) } inst_vmovntdqa_ymm_m256 :: #force_inline proc "contextless" (dst: YMM, src: Mem256) -> Instruction { return with_hint(Instruction{ mnemonic = .VMOVNTDQA, operand_count = 2, ops = {op_ymm(dst), op_mem(src.mem, 32), {}, {}} }, 1196) } inst_vmovntdqa_zmm_m512 :: #force_inline proc "contextless" (dst: ZMM, src: Mem512) -> Instruction { return with_hint(Instruction{ mnemonic = .VMOVNTDQA, operand_count = 2, ops = {op_zmm(dst), op_mem(src.mem, 64), {}, {}} }, 1197) } -emit_vmovntdqa_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append(instructions, inst_vmovntdqa_xmm_m128(dst, src)) } -emit_vmovntdqa_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: Mem256) { append(instructions, inst_vmovntdqa_ymm_m256(dst, src)) } -emit_vmovntdqa_zmm_m512 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ZMM, src: Mem512) { append(instructions, inst_vmovntdqa_zmm_m512(dst, src)) } +emit_vmovntdqa_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append_elem(instructions, inst_vmovntdqa_xmm_m128(dst, src)) } +emit_vmovntdqa_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: Mem256) { append_elem(instructions, inst_vmovntdqa_ymm_m256(dst, src)) } +emit_vmovntdqa_zmm_m512 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ZMM, src: Mem512) { append_elem(instructions, inst_vmovntdqa_zmm_m512(dst, src)) } inst_vaddsubps_xmm_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VADDSUBPS, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_xmm(src2), {}} }, 1198) } inst_vaddsubps_xmm_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .VADDSUBPS, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_mem(src2.mem, 16), {}} }, 1198) } inst_vaddsubps_ymm_ymm_ymm :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: YMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VADDSUBPS, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_ymm(src2), {}} }, 1199) } inst_vaddsubps_ymm_ymm_m256 :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: Mem256) -> Instruction { return with_hint(Instruction{ mnemonic = .VADDSUBPS, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_mem(src2.mem, 32), {}} }, 1199) } -emit_vaddsubps_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append(instructions, inst_vaddsubps_xmm_xmm_xmm(dst, src, src2)) } -emit_vaddsubps_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append(instructions, inst_vaddsubps_xmm_xmm_m128(dst, src, src2)) } -emit_vaddsubps_ymm_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM) { append(instructions, inst_vaddsubps_ymm_ymm_ymm(dst, src, src2)) } -emit_vaddsubps_ymm_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256) { append(instructions, inst_vaddsubps_ymm_ymm_m256(dst, src, src2)) } +emit_vaddsubps_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append_elem(instructions, inst_vaddsubps_xmm_xmm_xmm(dst, src, src2)) } +emit_vaddsubps_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append_elem(instructions, inst_vaddsubps_xmm_xmm_m128(dst, src, src2)) } +emit_vaddsubps_ymm_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM) { append_elem(instructions, inst_vaddsubps_ymm_ymm_ymm(dst, src, src2)) } +emit_vaddsubps_ymm_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256) { append_elem(instructions, inst_vaddsubps_ymm_ymm_m256(dst, src, src2)) } inst_vaddsubpd_xmm_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VADDSUBPD, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_xmm(src2), {}} }, 1200) } inst_vaddsubpd_xmm_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .VADDSUBPD, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_mem(src2.mem, 16), {}} }, 1200) } inst_vaddsubpd_ymm_ymm_ymm :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: YMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VADDSUBPD, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_ymm(src2), {}} }, 1201) } inst_vaddsubpd_ymm_ymm_m256 :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: Mem256) -> Instruction { return with_hint(Instruction{ mnemonic = .VADDSUBPD, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_mem(src2.mem, 32), {}} }, 1201) } -emit_vaddsubpd_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append(instructions, inst_vaddsubpd_xmm_xmm_xmm(dst, src, src2)) } -emit_vaddsubpd_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append(instructions, inst_vaddsubpd_xmm_xmm_m128(dst, src, src2)) } -emit_vaddsubpd_ymm_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM) { append(instructions, inst_vaddsubpd_ymm_ymm_ymm(dst, src, src2)) } -emit_vaddsubpd_ymm_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256) { append(instructions, inst_vaddsubpd_ymm_ymm_m256(dst, src, src2)) } +emit_vaddsubpd_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append_elem(instructions, inst_vaddsubpd_xmm_xmm_xmm(dst, src, src2)) } +emit_vaddsubpd_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append_elem(instructions, inst_vaddsubpd_xmm_xmm_m128(dst, src, src2)) } +emit_vaddsubpd_ymm_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM) { append_elem(instructions, inst_vaddsubpd_ymm_ymm_ymm(dst, src, src2)) } +emit_vaddsubpd_ymm_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256) { append_elem(instructions, inst_vaddsubpd_ymm_ymm_m256(dst, src, src2)) } inst_vhaddps_xmm_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VHADDPS, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_xmm(src2), {}} }, 1202) } inst_vhaddps_xmm_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .VHADDPS, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_mem(src2.mem, 16), {}} }, 1202) } inst_vhaddps_ymm_ymm_ymm :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: YMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VHADDPS, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_ymm(src2), {}} }, 1203) } inst_vhaddps_ymm_ymm_m256 :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: Mem256) -> Instruction { return with_hint(Instruction{ mnemonic = .VHADDPS, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_mem(src2.mem, 32), {}} }, 1203) } -emit_vhaddps_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append(instructions, inst_vhaddps_xmm_xmm_xmm(dst, src, src2)) } -emit_vhaddps_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append(instructions, inst_vhaddps_xmm_xmm_m128(dst, src, src2)) } -emit_vhaddps_ymm_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM) { append(instructions, inst_vhaddps_ymm_ymm_ymm(dst, src, src2)) } -emit_vhaddps_ymm_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256) { append(instructions, inst_vhaddps_ymm_ymm_m256(dst, src, src2)) } +emit_vhaddps_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append_elem(instructions, inst_vhaddps_xmm_xmm_xmm(dst, src, src2)) } +emit_vhaddps_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append_elem(instructions, inst_vhaddps_xmm_xmm_m128(dst, src, src2)) } +emit_vhaddps_ymm_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM) { append_elem(instructions, inst_vhaddps_ymm_ymm_ymm(dst, src, src2)) } +emit_vhaddps_ymm_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256) { append_elem(instructions, inst_vhaddps_ymm_ymm_m256(dst, src, src2)) } inst_vhaddpd_xmm_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VHADDPD, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_xmm(src2), {}} }, 1204) } inst_vhaddpd_xmm_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .VHADDPD, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_mem(src2.mem, 16), {}} }, 1204) } inst_vhaddpd_ymm_ymm_ymm :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: YMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VHADDPD, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_ymm(src2), {}} }, 1205) } inst_vhaddpd_ymm_ymm_m256 :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: Mem256) -> Instruction { return with_hint(Instruction{ mnemonic = .VHADDPD, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_mem(src2.mem, 32), {}} }, 1205) } -emit_vhaddpd_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append(instructions, inst_vhaddpd_xmm_xmm_xmm(dst, src, src2)) } -emit_vhaddpd_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append(instructions, inst_vhaddpd_xmm_xmm_m128(dst, src, src2)) } -emit_vhaddpd_ymm_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM) { append(instructions, inst_vhaddpd_ymm_ymm_ymm(dst, src, src2)) } -emit_vhaddpd_ymm_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256) { append(instructions, inst_vhaddpd_ymm_ymm_m256(dst, src, src2)) } +emit_vhaddpd_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append_elem(instructions, inst_vhaddpd_xmm_xmm_xmm(dst, src, src2)) } +emit_vhaddpd_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append_elem(instructions, inst_vhaddpd_xmm_xmm_m128(dst, src, src2)) } +emit_vhaddpd_ymm_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM) { append_elem(instructions, inst_vhaddpd_ymm_ymm_ymm(dst, src, src2)) } +emit_vhaddpd_ymm_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256) { append_elem(instructions, inst_vhaddpd_ymm_ymm_m256(dst, src, src2)) } inst_vhsubps_xmm_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VHSUBPS, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_xmm(src2), {}} }, 1206) } inst_vhsubps_xmm_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .VHSUBPS, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_mem(src2.mem, 16), {}} }, 1206) } inst_vhsubps_ymm_ymm_ymm :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: YMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VHSUBPS, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_ymm(src2), {}} }, 1207) } inst_vhsubps_ymm_ymm_m256 :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: Mem256) -> Instruction { return with_hint(Instruction{ mnemonic = .VHSUBPS, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_mem(src2.mem, 32), {}} }, 1207) } -emit_vhsubps_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append(instructions, inst_vhsubps_xmm_xmm_xmm(dst, src, src2)) } -emit_vhsubps_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append(instructions, inst_vhsubps_xmm_xmm_m128(dst, src, src2)) } -emit_vhsubps_ymm_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM) { append(instructions, inst_vhsubps_ymm_ymm_ymm(dst, src, src2)) } -emit_vhsubps_ymm_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256) { append(instructions, inst_vhsubps_ymm_ymm_m256(dst, src, src2)) } +emit_vhsubps_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append_elem(instructions, inst_vhsubps_xmm_xmm_xmm(dst, src, src2)) } +emit_vhsubps_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append_elem(instructions, inst_vhsubps_xmm_xmm_m128(dst, src, src2)) } +emit_vhsubps_ymm_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM) { append_elem(instructions, inst_vhsubps_ymm_ymm_ymm(dst, src, src2)) } +emit_vhsubps_ymm_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256) { append_elem(instructions, inst_vhsubps_ymm_ymm_m256(dst, src, src2)) } inst_vhsubpd_xmm_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VHSUBPD, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_xmm(src2), {}} }, 1208) } inst_vhsubpd_xmm_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .VHSUBPD, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_mem(src2.mem, 16), {}} }, 1208) } inst_vhsubpd_ymm_ymm_ymm :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: YMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VHSUBPD, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_ymm(src2), {}} }, 1209) } inst_vhsubpd_ymm_ymm_m256 :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: Mem256) -> Instruction { return with_hint(Instruction{ mnemonic = .VHSUBPD, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_mem(src2.mem, 32), {}} }, 1209) } -emit_vhsubpd_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append(instructions, inst_vhsubpd_xmm_xmm_xmm(dst, src, src2)) } -emit_vhsubpd_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append(instructions, inst_vhsubpd_xmm_xmm_m128(dst, src, src2)) } -emit_vhsubpd_ymm_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM) { append(instructions, inst_vhsubpd_ymm_ymm_ymm(dst, src, src2)) } -emit_vhsubpd_ymm_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256) { append(instructions, inst_vhsubpd_ymm_ymm_m256(dst, src, src2)) } +emit_vhsubpd_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append_elem(instructions, inst_vhsubpd_xmm_xmm_xmm(dst, src, src2)) } +emit_vhsubpd_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append_elem(instructions, inst_vhsubpd_xmm_xmm_m128(dst, src, src2)) } +emit_vhsubpd_ymm_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM) { append_elem(instructions, inst_vhsubpd_ymm_ymm_ymm(dst, src, src2)) } +emit_vhsubpd_ymm_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256) { append_elem(instructions, inst_vhsubpd_ymm_ymm_m256(dst, src, src2)) } inst_vlddqu_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .VLDDQU, operand_count = 2, ops = {op_xmm(dst), op_mem(src.mem, 16), {}, {}} }, 1210) } inst_vlddqu_ymm_m256 :: #force_inline proc "contextless" (dst: YMM, src: Mem256) -> Instruction { return with_hint(Instruction{ mnemonic = .VLDDQU, operand_count = 2, ops = {op_ymm(dst), op_mem(src.mem, 32), {}, {}} }, 1211) } -emit_vlddqu_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append(instructions, inst_vlddqu_xmm_m128(dst, src)) } -emit_vlddqu_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: Mem256) { append(instructions, inst_vlddqu_ymm_m256(dst, src)) } +emit_vlddqu_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append_elem(instructions, inst_vlddqu_xmm_m128(dst, src)) } +emit_vlddqu_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: Mem256) { append_elem(instructions, inst_vlddqu_ymm_m256(dst, src)) } inst_vmovddup_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VMOVDDUP, operand_count = 2, ops = {op_xmm(dst), op_xmm(src), {}, {}} }, 1212) } inst_vmovddup_xmm_m64 :: #force_inline proc "contextless" (dst: XMM, src: Mem64) -> Instruction { return with_hint(Instruction{ mnemonic = .VMOVDDUP, operand_count = 2, ops = {op_xmm(dst), op_mem(src.mem, 8), {}, {}} }, 1212) } inst_vmovddup_ymm_ymm :: #force_inline proc "contextless" (dst: YMM, src: YMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VMOVDDUP, operand_count = 2, ops = {op_ymm(dst), op_ymm(src), {}, {}} }, 1213) } inst_vmovddup_ymm_m256 :: #force_inline proc "contextless" (dst: YMM, src: Mem256) -> Instruction { return with_hint(Instruction{ mnemonic = .VMOVDDUP, operand_count = 2, ops = {op_ymm(dst), op_mem(src.mem, 32), {}, {}} }, 1213) } -emit_vmovddup_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append(instructions, inst_vmovddup_xmm_xmm(dst, src)) } -emit_vmovddup_xmm_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem64) { append(instructions, inst_vmovddup_xmm_m64(dst, src)) } -emit_vmovddup_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM) { append(instructions, inst_vmovddup_ymm_ymm(dst, src)) } -emit_vmovddup_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: Mem256) { append(instructions, inst_vmovddup_ymm_m256(dst, src)) } +emit_vmovddup_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append_elem(instructions, inst_vmovddup_xmm_xmm(dst, src)) } +emit_vmovddup_xmm_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem64) { append_elem(instructions, inst_vmovddup_xmm_m64(dst, src)) } +emit_vmovddup_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM) { append_elem(instructions, inst_vmovddup_ymm_ymm(dst, src)) } +emit_vmovddup_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: Mem256) { append_elem(instructions, inst_vmovddup_ymm_m256(dst, src)) } inst_vmovsldup_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VMOVSLDUP, operand_count = 2, ops = {op_xmm(dst), op_xmm(src), {}, {}} }, 1214) } inst_vmovsldup_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .VMOVSLDUP, operand_count = 2, ops = {op_xmm(dst), op_mem(src.mem, 16), {}, {}} }, 1214) } inst_vmovsldup_ymm_ymm :: #force_inline proc "contextless" (dst: YMM, src: YMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VMOVSLDUP, operand_count = 2, ops = {op_ymm(dst), op_ymm(src), {}, {}} }, 1215) } inst_vmovsldup_ymm_m256 :: #force_inline proc "contextless" (dst: YMM, src: Mem256) -> Instruction { return with_hint(Instruction{ mnemonic = .VMOVSLDUP, operand_count = 2, ops = {op_ymm(dst), op_mem(src.mem, 32), {}, {}} }, 1215) } -emit_vmovsldup_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append(instructions, inst_vmovsldup_xmm_xmm(dst, src)) } -emit_vmovsldup_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append(instructions, inst_vmovsldup_xmm_m128(dst, src)) } -emit_vmovsldup_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM) { append(instructions, inst_vmovsldup_ymm_ymm(dst, src)) } -emit_vmovsldup_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: Mem256) { append(instructions, inst_vmovsldup_ymm_m256(dst, src)) } +emit_vmovsldup_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append_elem(instructions, inst_vmovsldup_xmm_xmm(dst, src)) } +emit_vmovsldup_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append_elem(instructions, inst_vmovsldup_xmm_m128(dst, src)) } +emit_vmovsldup_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM) { append_elem(instructions, inst_vmovsldup_ymm_ymm(dst, src)) } +emit_vmovsldup_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: Mem256) { append_elem(instructions, inst_vmovsldup_ymm_m256(dst, src)) } inst_vmovshdup_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VMOVSHDUP, operand_count = 2, ops = {op_xmm(dst), op_xmm(src), {}, {}} }, 1216) } inst_vmovshdup_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .VMOVSHDUP, operand_count = 2, ops = {op_xmm(dst), op_mem(src.mem, 16), {}, {}} }, 1216) } inst_vmovshdup_ymm_ymm :: #force_inline proc "contextless" (dst: YMM, src: YMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VMOVSHDUP, operand_count = 2, ops = {op_ymm(dst), op_ymm(src), {}, {}} }, 1217) } inst_vmovshdup_ymm_m256 :: #force_inline proc "contextless" (dst: YMM, src: Mem256) -> Instruction { return with_hint(Instruction{ mnemonic = .VMOVSHDUP, operand_count = 2, ops = {op_ymm(dst), op_mem(src.mem, 32), {}, {}} }, 1217) } -emit_vmovshdup_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append(instructions, inst_vmovshdup_xmm_xmm(dst, src)) } -emit_vmovshdup_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append(instructions, inst_vmovshdup_xmm_m128(dst, src)) } -emit_vmovshdup_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM) { append(instructions, inst_vmovshdup_ymm_ymm(dst, src)) } -emit_vmovshdup_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: Mem256) { append(instructions, inst_vmovshdup_ymm_m256(dst, src)) } +emit_vmovshdup_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append_elem(instructions, inst_vmovshdup_xmm_xmm(dst, src)) } +emit_vmovshdup_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append_elem(instructions, inst_vmovshdup_xmm_m128(dst, src)) } +emit_vmovshdup_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM) { append_elem(instructions, inst_vmovshdup_ymm_ymm(dst, src)) } +emit_vmovshdup_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: Mem256) { append_elem(instructions, inst_vmovshdup_ymm_m256(dst, src)) } inst_vpcmpestri_xmm_xmm_imm8 :: #force_inline proc "contextless" (dst: XMM, src: XMM, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .VPCMPESTRI, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_imm8(imm), {}} }, 1218) } inst_vpcmpestri_xmm_m128_imm8 :: #force_inline proc "contextless" (dst: XMM, src: Mem128, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .VPCMPESTRI, operand_count = 3, ops = {op_xmm(dst), op_mem(src.mem, 16), op_imm8(imm), {}} }, 1218) } -emit_vpcmpestri_xmm_xmm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, imm: i8) { append(instructions, inst_vpcmpestri_xmm_xmm_imm8(dst, src, imm)) } -emit_vpcmpestri_xmm_m128_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128, imm: i8) { append(instructions, inst_vpcmpestri_xmm_m128_imm8(dst, src, imm)) } +emit_vpcmpestri_xmm_xmm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, imm: i8) { append_elem(instructions, inst_vpcmpestri_xmm_xmm_imm8(dst, src, imm)) } +emit_vpcmpestri_xmm_m128_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128, imm: i8) { append_elem(instructions, inst_vpcmpestri_xmm_m128_imm8(dst, src, imm)) } inst_vpcmpestrm_xmm_xmm_imm8 :: #force_inline proc "contextless" (dst: XMM, src: XMM, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .VPCMPESTRM, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_imm8(imm), {}} }, 1219) } inst_vpcmpestrm_xmm_m128_imm8 :: #force_inline proc "contextless" (dst: XMM, src: Mem128, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .VPCMPESTRM, operand_count = 3, ops = {op_xmm(dst), op_mem(src.mem, 16), op_imm8(imm), {}} }, 1219) } -emit_vpcmpestrm_xmm_xmm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, imm: i8) { append(instructions, inst_vpcmpestrm_xmm_xmm_imm8(dst, src, imm)) } -emit_vpcmpestrm_xmm_m128_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128, imm: i8) { append(instructions, inst_vpcmpestrm_xmm_m128_imm8(dst, src, imm)) } +emit_vpcmpestrm_xmm_xmm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, imm: i8) { append_elem(instructions, inst_vpcmpestrm_xmm_xmm_imm8(dst, src, imm)) } +emit_vpcmpestrm_xmm_m128_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128, imm: i8) { append_elem(instructions, inst_vpcmpestrm_xmm_m128_imm8(dst, src, imm)) } inst_vpcmpistri_xmm_xmm_imm8 :: #force_inline proc "contextless" (dst: XMM, src: XMM, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .VPCMPISTRI, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_imm8(imm), {}} }, 1220) } inst_vpcmpistri_xmm_m128_imm8 :: #force_inline proc "contextless" (dst: XMM, src: Mem128, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .VPCMPISTRI, operand_count = 3, ops = {op_xmm(dst), op_mem(src.mem, 16), op_imm8(imm), {}} }, 1220) } -emit_vpcmpistri_xmm_xmm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, imm: i8) { append(instructions, inst_vpcmpistri_xmm_xmm_imm8(dst, src, imm)) } -emit_vpcmpistri_xmm_m128_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128, imm: i8) { append(instructions, inst_vpcmpistri_xmm_m128_imm8(dst, src, imm)) } +emit_vpcmpistri_xmm_xmm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, imm: i8) { append_elem(instructions, inst_vpcmpistri_xmm_xmm_imm8(dst, src, imm)) } +emit_vpcmpistri_xmm_m128_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128, imm: i8) { append_elem(instructions, inst_vpcmpistri_xmm_m128_imm8(dst, src, imm)) } inst_vpcmpistrm_xmm_xmm_imm8 :: #force_inline proc "contextless" (dst: XMM, src: XMM, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .VPCMPISTRM, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_imm8(imm), {}} }, 1221) } inst_vpcmpistrm_xmm_m128_imm8 :: #force_inline proc "contextless" (dst: XMM, src: Mem128, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .VPCMPISTRM, operand_count = 3, ops = {op_xmm(dst), op_mem(src.mem, 16), op_imm8(imm), {}} }, 1221) } -emit_vpcmpistrm_xmm_xmm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, imm: i8) { append(instructions, inst_vpcmpistrm_xmm_xmm_imm8(dst, src, imm)) } -emit_vpcmpistrm_xmm_m128_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128, imm: i8) { append(instructions, inst_vpcmpistrm_xmm_m128_imm8(dst, src, imm)) } +emit_vpcmpistrm_xmm_xmm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, imm: i8) { append_elem(instructions, inst_vpcmpistrm_xmm_xmm_imm8(dst, src, imm)) } +emit_vpcmpistrm_xmm_m128_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128, imm: i8) { append_elem(instructions, inst_vpcmpistrm_xmm_m128_imm8(dst, src, imm)) } inst_vpbroadcastb_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPBROADCASTB, operand_count = 2, ops = {op_xmm(dst), op_xmm(src), {}, {}} }, 1222) } inst_vpbroadcastb_ymm_xmm :: #force_inline proc "contextless" (dst: YMM, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPBROADCASTB, operand_count = 2, ops = {op_ymm(dst), op_xmm(src), {}, {}} }, 1223) } inst_vpbroadcastb_xmm_m8 :: #force_inline proc "contextless" (dst: XMM, src: Mem8) -> Instruction { return with_hint(Instruction{ mnemonic = .VPBROADCASTB, operand_count = 2, ops = {op_xmm(dst), op_mem(src.mem, 1), {}, {}} }, 1224) } inst_vpbroadcastb_ymm_m8 :: #force_inline proc "contextless" (dst: YMM, src: Mem8) -> Instruction { return with_hint(Instruction{ mnemonic = .VPBROADCASTB, operand_count = 2, ops = {op_ymm(dst), op_mem(src.mem, 1), {}, {}} }, 1225) } -emit_vpbroadcastb_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append(instructions, inst_vpbroadcastb_xmm_xmm(dst, src)) } -emit_vpbroadcastb_ymm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: XMM) { append(instructions, inst_vpbroadcastb_ymm_xmm(dst, src)) } -emit_vpbroadcastb_xmm_m8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem8) { append(instructions, inst_vpbroadcastb_xmm_m8(dst, src)) } -emit_vpbroadcastb_ymm_m8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: Mem8) { append(instructions, inst_vpbroadcastb_ymm_m8(dst, src)) } +emit_vpbroadcastb_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append_elem(instructions, inst_vpbroadcastb_xmm_xmm(dst, src)) } +emit_vpbroadcastb_ymm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: XMM) { append_elem(instructions, inst_vpbroadcastb_ymm_xmm(dst, src)) } +emit_vpbroadcastb_xmm_m8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem8) { append_elem(instructions, inst_vpbroadcastb_xmm_m8(dst, src)) } +emit_vpbroadcastb_ymm_m8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: Mem8) { append_elem(instructions, inst_vpbroadcastb_ymm_m8(dst, src)) } inst_vpbroadcastw_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPBROADCASTW, operand_count = 2, ops = {op_xmm(dst), op_xmm(src), {}, {}} }, 1226) } inst_vpbroadcastw_ymm_xmm :: #force_inline proc "contextless" (dst: YMM, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPBROADCASTW, operand_count = 2, ops = {op_ymm(dst), op_xmm(src), {}, {}} }, 1227) } inst_vpbroadcastw_xmm_m16 :: #force_inline proc "contextless" (dst: XMM, src: Mem16) -> Instruction { return with_hint(Instruction{ mnemonic = .VPBROADCASTW, operand_count = 2, ops = {op_xmm(dst), op_mem(src.mem, 2), {}, {}} }, 1228) } inst_vpbroadcastw_ymm_m16 :: #force_inline proc "contextless" (dst: YMM, src: Mem16) -> Instruction { return with_hint(Instruction{ mnemonic = .VPBROADCASTW, operand_count = 2, ops = {op_ymm(dst), op_mem(src.mem, 2), {}, {}} }, 1229) } -emit_vpbroadcastw_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append(instructions, inst_vpbroadcastw_xmm_xmm(dst, src)) } -emit_vpbroadcastw_ymm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: XMM) { append(instructions, inst_vpbroadcastw_ymm_xmm(dst, src)) } -emit_vpbroadcastw_xmm_m16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem16) { append(instructions, inst_vpbroadcastw_xmm_m16(dst, src)) } -emit_vpbroadcastw_ymm_m16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: Mem16) { append(instructions, inst_vpbroadcastw_ymm_m16(dst, src)) } +emit_vpbroadcastw_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append_elem(instructions, inst_vpbroadcastw_xmm_xmm(dst, src)) } +emit_vpbroadcastw_ymm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: XMM) { append_elem(instructions, inst_vpbroadcastw_ymm_xmm(dst, src)) } +emit_vpbroadcastw_xmm_m16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem16) { append_elem(instructions, inst_vpbroadcastw_xmm_m16(dst, src)) } +emit_vpbroadcastw_ymm_m16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: Mem16) { append_elem(instructions, inst_vpbroadcastw_ymm_m16(dst, src)) } inst_vpbroadcastd_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPBROADCASTD, operand_count = 2, ops = {op_xmm(dst), op_xmm(src), {}, {}} }, 1230) } inst_vpbroadcastd_ymm_xmm :: #force_inline proc "contextless" (dst: YMM, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPBROADCASTD, operand_count = 2, ops = {op_ymm(dst), op_xmm(src), {}, {}} }, 1231) } inst_vpbroadcastd_xmm_m32 :: #force_inline proc "contextless" (dst: XMM, src: Mem32) -> Instruction { return with_hint(Instruction{ mnemonic = .VPBROADCASTD, operand_count = 2, ops = {op_xmm(dst), op_mem(src.mem, 4), {}, {}} }, 1232) } inst_vpbroadcastd_ymm_m32 :: #force_inline proc "contextless" (dst: YMM, src: Mem32) -> Instruction { return with_hint(Instruction{ mnemonic = .VPBROADCASTD, operand_count = 2, ops = {op_ymm(dst), op_mem(src.mem, 4), {}, {}} }, 1233) } -emit_vpbroadcastd_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append(instructions, inst_vpbroadcastd_xmm_xmm(dst, src)) } -emit_vpbroadcastd_ymm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: XMM) { append(instructions, inst_vpbroadcastd_ymm_xmm(dst, src)) } -emit_vpbroadcastd_xmm_m32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem32) { append(instructions, inst_vpbroadcastd_xmm_m32(dst, src)) } -emit_vpbroadcastd_ymm_m32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: Mem32) { append(instructions, inst_vpbroadcastd_ymm_m32(dst, src)) } +emit_vpbroadcastd_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append_elem(instructions, inst_vpbroadcastd_xmm_xmm(dst, src)) } +emit_vpbroadcastd_ymm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: XMM) { append_elem(instructions, inst_vpbroadcastd_ymm_xmm(dst, src)) } +emit_vpbroadcastd_xmm_m32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem32) { append_elem(instructions, inst_vpbroadcastd_xmm_m32(dst, src)) } +emit_vpbroadcastd_ymm_m32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: Mem32) { append_elem(instructions, inst_vpbroadcastd_ymm_m32(dst, src)) } inst_vpbroadcastq_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPBROADCASTQ, operand_count = 2, ops = {op_xmm(dst), op_xmm(src), {}, {}} }, 1234) } inst_vpbroadcastq_ymm_xmm :: #force_inline proc "contextless" (dst: YMM, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPBROADCASTQ, operand_count = 2, ops = {op_ymm(dst), op_xmm(src), {}, {}} }, 1235) } inst_vpbroadcastq_xmm_m64 :: #force_inline proc "contextless" (dst: XMM, src: Mem64) -> Instruction { return with_hint(Instruction{ mnemonic = .VPBROADCASTQ, operand_count = 2, ops = {op_xmm(dst), op_mem(src.mem, 8), {}, {}} }, 1236) } inst_vpbroadcastq_ymm_m64 :: #force_inline proc "contextless" (dst: YMM, src: Mem64) -> Instruction { return with_hint(Instruction{ mnemonic = .VPBROADCASTQ, operand_count = 2, ops = {op_ymm(dst), op_mem(src.mem, 8), {}, {}} }, 1237) } -emit_vpbroadcastq_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append(instructions, inst_vpbroadcastq_xmm_xmm(dst, src)) } -emit_vpbroadcastq_ymm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: XMM) { append(instructions, inst_vpbroadcastq_ymm_xmm(dst, src)) } -emit_vpbroadcastq_xmm_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem64) { append(instructions, inst_vpbroadcastq_xmm_m64(dst, src)) } -emit_vpbroadcastq_ymm_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: Mem64) { append(instructions, inst_vpbroadcastq_ymm_m64(dst, src)) } +emit_vpbroadcastq_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append_elem(instructions, inst_vpbroadcastq_xmm_xmm(dst, src)) } +emit_vpbroadcastq_ymm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: XMM) { append_elem(instructions, inst_vpbroadcastq_ymm_xmm(dst, src)) } +emit_vpbroadcastq_xmm_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem64) { append_elem(instructions, inst_vpbroadcastq_xmm_m64(dst, src)) } +emit_vpbroadcastq_ymm_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: Mem64) { append_elem(instructions, inst_vpbroadcastq_ymm_m64(dst, src)) } inst_vcvtps2pd_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VCVTPS2PD, operand_count = 2, ops = {op_xmm(dst), op_xmm(src), {}, {}} }, 1238) } inst_vcvtps2pd_xmm_m64 :: #force_inline proc "contextless" (dst: XMM, src: Mem64) -> Instruction { return with_hint(Instruction{ mnemonic = .VCVTPS2PD, operand_count = 2, ops = {op_xmm(dst), op_mem(src.mem, 8), {}, {}} }, 1238) } inst_vcvtps2pd_ymm_xmm :: #force_inline proc "contextless" (dst: YMM, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VCVTPS2PD, operand_count = 2, ops = {op_ymm(dst), op_xmm(src), {}, {}} }, 1239) } inst_vcvtps2pd_ymm_m128 :: #force_inline proc "contextless" (dst: YMM, src: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .VCVTPS2PD, operand_count = 2, ops = {op_ymm(dst), op_mem(src.mem, 16), {}, {}} }, 1239) } -emit_vcvtps2pd_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append(instructions, inst_vcvtps2pd_xmm_xmm(dst, src)) } -emit_vcvtps2pd_xmm_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem64) { append(instructions, inst_vcvtps2pd_xmm_m64(dst, src)) } -emit_vcvtps2pd_ymm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: XMM) { append(instructions, inst_vcvtps2pd_ymm_xmm(dst, src)) } -emit_vcvtps2pd_ymm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: Mem128) { append(instructions, inst_vcvtps2pd_ymm_m128(dst, src)) } +emit_vcvtps2pd_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append_elem(instructions, inst_vcvtps2pd_xmm_xmm(dst, src)) } +emit_vcvtps2pd_xmm_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem64) { append_elem(instructions, inst_vcvtps2pd_xmm_m64(dst, src)) } +emit_vcvtps2pd_ymm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: XMM) { append_elem(instructions, inst_vcvtps2pd_ymm_xmm(dst, src)) } +emit_vcvtps2pd_ymm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: Mem128) { append_elem(instructions, inst_vcvtps2pd_ymm_m128(dst, src)) } inst_vcvtpd2ps_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VCVTPD2PS, operand_count = 2, ops = {op_xmm(dst), op_xmm(src), {}, {}} }, 1240) } inst_vcvtpd2ps_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .VCVTPD2PS, operand_count = 2, ops = {op_xmm(dst), op_mem(src.mem, 16), {}, {}} }, 1240) } inst_vcvtpd2ps_xmm_ymm :: #force_inline proc "contextless" (dst: XMM, src: YMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VCVTPD2PS, operand_count = 2, ops = {op_xmm(dst), op_ymm(src), {}, {}} }, 1241) } inst_vcvtpd2ps_xmm_m256 :: #force_inline proc "contextless" (dst: XMM, src: Mem256) -> Instruction { return with_hint(Instruction{ mnemonic = .VCVTPD2PS, operand_count = 2, ops = {op_xmm(dst), op_mem(src.mem, 32), {}, {}} }, 1241) } -emit_vcvtpd2ps_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append(instructions, inst_vcvtpd2ps_xmm_xmm(dst, src)) } -emit_vcvtpd2ps_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append(instructions, inst_vcvtpd2ps_xmm_m128(dst, src)) } -emit_vcvtpd2ps_xmm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: YMM) { append(instructions, inst_vcvtpd2ps_xmm_ymm(dst, src)) } -emit_vcvtpd2ps_xmm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem256) { append(instructions, inst_vcvtpd2ps_xmm_m256(dst, src)) } +emit_vcvtpd2ps_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append_elem(instructions, inst_vcvtpd2ps_xmm_xmm(dst, src)) } +emit_vcvtpd2ps_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append_elem(instructions, inst_vcvtpd2ps_xmm_m128(dst, src)) } +emit_vcvtpd2ps_xmm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: YMM) { append_elem(instructions, inst_vcvtpd2ps_xmm_ymm(dst, src)) } +emit_vcvtpd2ps_xmm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem256) { append_elem(instructions, inst_vcvtpd2ps_xmm_m256(dst, src)) } inst_vcvtss2sd_xmm_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VCVTSS2SD, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_xmm(src2), {}} }, 1242) } inst_vcvtss2sd_xmm_xmm_m32 :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: Mem32) -> Instruction { return with_hint(Instruction{ mnemonic = .VCVTSS2SD, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_mem(src2.mem, 4), {}} }, 1242) } -emit_vcvtss2sd_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append(instructions, inst_vcvtss2sd_xmm_xmm_xmm(dst, src, src2)) } -emit_vcvtss2sd_xmm_xmm_m32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem32) { append(instructions, inst_vcvtss2sd_xmm_xmm_m32(dst, src, src2)) } +emit_vcvtss2sd_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append_elem(instructions, inst_vcvtss2sd_xmm_xmm_xmm(dst, src, src2)) } +emit_vcvtss2sd_xmm_xmm_m32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem32) { append_elem(instructions, inst_vcvtss2sd_xmm_xmm_m32(dst, src, src2)) } inst_vcvtsd2ss_xmm_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VCVTSD2SS, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_xmm(src2), {}} }, 1243) } inst_vcvtsd2ss_xmm_xmm_m64 :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: Mem64) -> Instruction { return with_hint(Instruction{ mnemonic = .VCVTSD2SS, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_mem(src2.mem, 8), {}} }, 1243) } -emit_vcvtsd2ss_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append(instructions, inst_vcvtsd2ss_xmm_xmm_xmm(dst, src, src2)) } -emit_vcvtsd2ss_xmm_xmm_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem64) { append(instructions, inst_vcvtsd2ss_xmm_xmm_m64(dst, src, src2)) } +emit_vcvtsd2ss_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append_elem(instructions, inst_vcvtsd2ss_xmm_xmm_xmm(dst, src, src2)) } +emit_vcvtsd2ss_xmm_xmm_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem64) { append_elem(instructions, inst_vcvtsd2ss_xmm_xmm_m64(dst, src, src2)) } inst_vcvtps2dq_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VCVTPS2DQ, operand_count = 2, ops = {op_xmm(dst), op_xmm(src), {}, {}} }, 1244) } inst_vcvtps2dq_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .VCVTPS2DQ, operand_count = 2, ops = {op_xmm(dst), op_mem(src.mem, 16), {}, {}} }, 1244) } inst_vcvtps2dq_ymm_ymm :: #force_inline proc "contextless" (dst: YMM, src: YMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VCVTPS2DQ, operand_count = 2, ops = {op_ymm(dst), op_ymm(src), {}, {}} }, 1245) } inst_vcvtps2dq_ymm_m256 :: #force_inline proc "contextless" (dst: YMM, src: Mem256) -> Instruction { return with_hint(Instruction{ mnemonic = .VCVTPS2DQ, operand_count = 2, ops = {op_ymm(dst), op_mem(src.mem, 32), {}, {}} }, 1245) } -emit_vcvtps2dq_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append(instructions, inst_vcvtps2dq_xmm_xmm(dst, src)) } -emit_vcvtps2dq_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append(instructions, inst_vcvtps2dq_xmm_m128(dst, src)) } -emit_vcvtps2dq_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM) { append(instructions, inst_vcvtps2dq_ymm_ymm(dst, src)) } -emit_vcvtps2dq_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: Mem256) { append(instructions, inst_vcvtps2dq_ymm_m256(dst, src)) } +emit_vcvtps2dq_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append_elem(instructions, inst_vcvtps2dq_xmm_xmm(dst, src)) } +emit_vcvtps2dq_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append_elem(instructions, inst_vcvtps2dq_xmm_m128(dst, src)) } +emit_vcvtps2dq_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM) { append_elem(instructions, inst_vcvtps2dq_ymm_ymm(dst, src)) } +emit_vcvtps2dq_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: Mem256) { append_elem(instructions, inst_vcvtps2dq_ymm_m256(dst, src)) } inst_vcvtpd2dq_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VCVTPD2DQ, operand_count = 2, ops = {op_xmm(dst), op_xmm(src), {}, {}} }, 1246) } inst_vcvtpd2dq_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .VCVTPD2DQ, operand_count = 2, ops = {op_xmm(dst), op_mem(src.mem, 16), {}, {}} }, 1246) } inst_vcvtpd2dq_xmm_ymm :: #force_inline proc "contextless" (dst: XMM, src: YMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VCVTPD2DQ, operand_count = 2, ops = {op_xmm(dst), op_ymm(src), {}, {}} }, 1247) } inst_vcvtpd2dq_xmm_m256 :: #force_inline proc "contextless" (dst: XMM, src: Mem256) -> Instruction { return with_hint(Instruction{ mnemonic = .VCVTPD2DQ, operand_count = 2, ops = {op_xmm(dst), op_mem(src.mem, 32), {}, {}} }, 1247) } -emit_vcvtpd2dq_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append(instructions, inst_vcvtpd2dq_xmm_xmm(dst, src)) } -emit_vcvtpd2dq_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append(instructions, inst_vcvtpd2dq_xmm_m128(dst, src)) } -emit_vcvtpd2dq_xmm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: YMM) { append(instructions, inst_vcvtpd2dq_xmm_ymm(dst, src)) } -emit_vcvtpd2dq_xmm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem256) { append(instructions, inst_vcvtpd2dq_xmm_m256(dst, src)) } +emit_vcvtpd2dq_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append_elem(instructions, inst_vcvtpd2dq_xmm_xmm(dst, src)) } +emit_vcvtpd2dq_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append_elem(instructions, inst_vcvtpd2dq_xmm_m128(dst, src)) } +emit_vcvtpd2dq_xmm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: YMM) { append_elem(instructions, inst_vcvtpd2dq_xmm_ymm(dst, src)) } +emit_vcvtpd2dq_xmm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem256) { append_elem(instructions, inst_vcvtpd2dq_xmm_m256(dst, src)) } inst_vcvtdq2ps_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VCVTDQ2PS, operand_count = 2, ops = {op_xmm(dst), op_xmm(src), {}, {}} }, 1248) } inst_vcvtdq2ps_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .VCVTDQ2PS, operand_count = 2, ops = {op_xmm(dst), op_mem(src.mem, 16), {}, {}} }, 1248) } inst_vcvtdq2ps_ymm_ymm :: #force_inline proc "contextless" (dst: YMM, src: YMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VCVTDQ2PS, operand_count = 2, ops = {op_ymm(dst), op_ymm(src), {}, {}} }, 1249) } inst_vcvtdq2ps_ymm_m256 :: #force_inline proc "contextless" (dst: YMM, src: Mem256) -> Instruction { return with_hint(Instruction{ mnemonic = .VCVTDQ2PS, operand_count = 2, ops = {op_ymm(dst), op_mem(src.mem, 32), {}, {}} }, 1249) } -emit_vcvtdq2ps_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append(instructions, inst_vcvtdq2ps_xmm_xmm(dst, src)) } -emit_vcvtdq2ps_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append(instructions, inst_vcvtdq2ps_xmm_m128(dst, src)) } -emit_vcvtdq2ps_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM) { append(instructions, inst_vcvtdq2ps_ymm_ymm(dst, src)) } -emit_vcvtdq2ps_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: Mem256) { append(instructions, inst_vcvtdq2ps_ymm_m256(dst, src)) } +emit_vcvtdq2ps_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append_elem(instructions, inst_vcvtdq2ps_xmm_xmm(dst, src)) } +emit_vcvtdq2ps_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append_elem(instructions, inst_vcvtdq2ps_xmm_m128(dst, src)) } +emit_vcvtdq2ps_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM) { append_elem(instructions, inst_vcvtdq2ps_ymm_ymm(dst, src)) } +emit_vcvtdq2ps_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: Mem256) { append_elem(instructions, inst_vcvtdq2ps_ymm_m256(dst, src)) } inst_vcvtdq2pd_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VCVTDQ2PD, operand_count = 2, ops = {op_xmm(dst), op_xmm(src), {}, {}} }, 1250) } inst_vcvtdq2pd_xmm_m64 :: #force_inline proc "contextless" (dst: XMM, src: Mem64) -> Instruction { return with_hint(Instruction{ mnemonic = .VCVTDQ2PD, operand_count = 2, ops = {op_xmm(dst), op_mem(src.mem, 8), {}, {}} }, 1250) } inst_vcvtdq2pd_ymm_xmm :: #force_inline proc "contextless" (dst: YMM, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VCVTDQ2PD, operand_count = 2, ops = {op_ymm(dst), op_xmm(src), {}, {}} }, 1251) } inst_vcvtdq2pd_ymm_m128 :: #force_inline proc "contextless" (dst: YMM, src: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .VCVTDQ2PD, operand_count = 2, ops = {op_ymm(dst), op_mem(src.mem, 16), {}, {}} }, 1251) } -emit_vcvtdq2pd_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append(instructions, inst_vcvtdq2pd_xmm_xmm(dst, src)) } -emit_vcvtdq2pd_xmm_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem64) { append(instructions, inst_vcvtdq2pd_xmm_m64(dst, src)) } -emit_vcvtdq2pd_ymm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: XMM) { append(instructions, inst_vcvtdq2pd_ymm_xmm(dst, src)) } -emit_vcvtdq2pd_ymm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: Mem128) { append(instructions, inst_vcvtdq2pd_ymm_m128(dst, src)) } +emit_vcvtdq2pd_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append_elem(instructions, inst_vcvtdq2pd_xmm_xmm(dst, src)) } +emit_vcvtdq2pd_xmm_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem64) { append_elem(instructions, inst_vcvtdq2pd_xmm_m64(dst, src)) } +emit_vcvtdq2pd_ymm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: XMM) { append_elem(instructions, inst_vcvtdq2pd_ymm_xmm(dst, src)) } +emit_vcvtdq2pd_ymm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: Mem128) { append_elem(instructions, inst_vcvtdq2pd_ymm_m128(dst, src)) } inst_vcvtss2si_r32_xmm :: #force_inline proc "contextless" (dst: GPR32, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VCVTSS2SI, operand_count = 2, ops = {op_gpr32(dst), op_xmm(src), {}, {}} }, 1252) } inst_vcvtss2si_r32_m32 :: #force_inline proc "contextless" (dst: GPR32, src: Mem32) -> Instruction { return with_hint(Instruction{ mnemonic = .VCVTSS2SI, operand_count = 2, ops = {op_gpr32(dst), op_mem(src.mem, 4), {}, {}} }, 1252) } inst_vcvtss2si_r64_xmm :: #force_inline proc "contextless" (dst: GPR64, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VCVTSS2SI, operand_count = 2, ops = {op_gpr64(dst), op_xmm(src), {}, {}} }, 1253) } inst_vcvtss2si_r64_m32 :: #force_inline proc "contextless" (dst: GPR64, src: Mem32) -> Instruction { return with_hint(Instruction{ mnemonic = .VCVTSS2SI, operand_count = 2, ops = {op_gpr64(dst), op_mem(src.mem, 4), {}, {}} }, 1253) } -emit_vcvtss2si_r32_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: XMM) { append(instructions, inst_vcvtss2si_r32_xmm(dst, src)) } -emit_vcvtss2si_r32_m32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: Mem32) { append(instructions, inst_vcvtss2si_r32_m32(dst, src)) } -emit_vcvtss2si_r64_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: XMM) { append(instructions, inst_vcvtss2si_r64_xmm(dst, src)) } -emit_vcvtss2si_r64_m32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: Mem32) { append(instructions, inst_vcvtss2si_r64_m32(dst, src)) } +emit_vcvtss2si_r32_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: XMM) { append_elem(instructions, inst_vcvtss2si_r32_xmm(dst, src)) } +emit_vcvtss2si_r32_m32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: Mem32) { append_elem(instructions, inst_vcvtss2si_r32_m32(dst, src)) } +emit_vcvtss2si_r64_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: XMM) { append_elem(instructions, inst_vcvtss2si_r64_xmm(dst, src)) } +emit_vcvtss2si_r64_m32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: Mem32) { append_elem(instructions, inst_vcvtss2si_r64_m32(dst, src)) } inst_vcvtsd2si_r32_xmm :: #force_inline proc "contextless" (dst: GPR32, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VCVTSD2SI, operand_count = 2, ops = {op_gpr32(dst), op_xmm(src), {}, {}} }, 1254) } inst_vcvtsd2si_r32_m64 :: #force_inline proc "contextless" (dst: GPR32, src: Mem64) -> Instruction { return with_hint(Instruction{ mnemonic = .VCVTSD2SI, operand_count = 2, ops = {op_gpr32(dst), op_mem(src.mem, 8), {}, {}} }, 1254) } inst_vcvtsd2si_r64_xmm :: #force_inline proc "contextless" (dst: GPR64, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VCVTSD2SI, operand_count = 2, ops = {op_gpr64(dst), op_xmm(src), {}, {}} }, 1255) } inst_vcvtsd2si_r64_m64 :: #force_inline proc "contextless" (dst: GPR64, src: Mem64) -> Instruction { return with_hint(Instruction{ mnemonic = .VCVTSD2SI, operand_count = 2, ops = {op_gpr64(dst), op_mem(src.mem, 8), {}, {}} }, 1255) } -emit_vcvtsd2si_r32_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: XMM) { append(instructions, inst_vcvtsd2si_r32_xmm(dst, src)) } -emit_vcvtsd2si_r32_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: Mem64) { append(instructions, inst_vcvtsd2si_r32_m64(dst, src)) } -emit_vcvtsd2si_r64_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: XMM) { append(instructions, inst_vcvtsd2si_r64_xmm(dst, src)) } -emit_vcvtsd2si_r64_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: Mem64) { append(instructions, inst_vcvtsd2si_r64_m64(dst, src)) } +emit_vcvtsd2si_r32_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: XMM) { append_elem(instructions, inst_vcvtsd2si_r32_xmm(dst, src)) } +emit_vcvtsd2si_r32_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: Mem64) { append_elem(instructions, inst_vcvtsd2si_r32_m64(dst, src)) } +emit_vcvtsd2si_r64_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: XMM) { append_elem(instructions, inst_vcvtsd2si_r64_xmm(dst, src)) } +emit_vcvtsd2si_r64_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: Mem64) { append_elem(instructions, inst_vcvtsd2si_r64_m64(dst, src)) } inst_vcvtsi2ss_xmm_xmm_r32 :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: GPR32) -> Instruction { return with_hint(Instruction{ mnemonic = .VCVTSI2SS, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_gpr32(src2), {}} }, 1256) } inst_vcvtsi2ss_xmm_xmm_m32 :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: Mem32) -> Instruction { return with_hint(Instruction{ mnemonic = .VCVTSI2SS, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_mem(src2.mem, 4), {}} }, 1256) } inst_vcvtsi2ss_xmm_xmm_r64 :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: GPR64) -> Instruction { return with_hint(Instruction{ mnemonic = .VCVTSI2SS, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_gpr64(src2), {}} }, 1257) } inst_vcvtsi2ss_xmm_xmm_m64 :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: Mem64) -> Instruction { return with_hint(Instruction{ mnemonic = .VCVTSI2SS, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_mem(src2.mem, 8), {}} }, 1257) } -emit_vcvtsi2ss_xmm_xmm_r32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: GPR32) { append(instructions, inst_vcvtsi2ss_xmm_xmm_r32(dst, src, src2)) } -emit_vcvtsi2ss_xmm_xmm_m32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem32) { append(instructions, inst_vcvtsi2ss_xmm_xmm_m32(dst, src, src2)) } -emit_vcvtsi2ss_xmm_xmm_r64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: GPR64) { append(instructions, inst_vcvtsi2ss_xmm_xmm_r64(dst, src, src2)) } -emit_vcvtsi2ss_xmm_xmm_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem64) { append(instructions, inst_vcvtsi2ss_xmm_xmm_m64(dst, src, src2)) } +emit_vcvtsi2ss_xmm_xmm_r32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: GPR32) { append_elem(instructions, inst_vcvtsi2ss_xmm_xmm_r32(dst, src, src2)) } +emit_vcvtsi2ss_xmm_xmm_m32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem32) { append_elem(instructions, inst_vcvtsi2ss_xmm_xmm_m32(dst, src, src2)) } +emit_vcvtsi2ss_xmm_xmm_r64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: GPR64) { append_elem(instructions, inst_vcvtsi2ss_xmm_xmm_r64(dst, src, src2)) } +emit_vcvtsi2ss_xmm_xmm_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem64) { append_elem(instructions, inst_vcvtsi2ss_xmm_xmm_m64(dst, src, src2)) } inst_vcvtsi2sd_xmm_xmm_r32 :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: GPR32) -> Instruction { return with_hint(Instruction{ mnemonic = .VCVTSI2SD, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_gpr32(src2), {}} }, 1258) } inst_vcvtsi2sd_xmm_xmm_m32 :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: Mem32) -> Instruction { return with_hint(Instruction{ mnemonic = .VCVTSI2SD, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_mem(src2.mem, 4), {}} }, 1258) } inst_vcvtsi2sd_xmm_xmm_r64 :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: GPR64) -> Instruction { return with_hint(Instruction{ mnemonic = .VCVTSI2SD, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_gpr64(src2), {}} }, 1259) } inst_vcvtsi2sd_xmm_xmm_m64 :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: Mem64) -> Instruction { return with_hint(Instruction{ mnemonic = .VCVTSI2SD, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_mem(src2.mem, 8), {}} }, 1259) } -emit_vcvtsi2sd_xmm_xmm_r32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: GPR32) { append(instructions, inst_vcvtsi2sd_xmm_xmm_r32(dst, src, src2)) } -emit_vcvtsi2sd_xmm_xmm_m32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem32) { append(instructions, inst_vcvtsi2sd_xmm_xmm_m32(dst, src, src2)) } -emit_vcvtsi2sd_xmm_xmm_r64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: GPR64) { append(instructions, inst_vcvtsi2sd_xmm_xmm_r64(dst, src, src2)) } -emit_vcvtsi2sd_xmm_xmm_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem64) { append(instructions, inst_vcvtsi2sd_xmm_xmm_m64(dst, src, src2)) } +emit_vcvtsi2sd_xmm_xmm_r32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: GPR32) { append_elem(instructions, inst_vcvtsi2sd_xmm_xmm_r32(dst, src, src2)) } +emit_vcvtsi2sd_xmm_xmm_m32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem32) { append_elem(instructions, inst_vcvtsi2sd_xmm_xmm_m32(dst, src, src2)) } +emit_vcvtsi2sd_xmm_xmm_r64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: GPR64) { append_elem(instructions, inst_vcvtsi2sd_xmm_xmm_r64(dst, src, src2)) } +emit_vcvtsi2sd_xmm_xmm_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem64) { append_elem(instructions, inst_vcvtsi2sd_xmm_xmm_m64(dst, src, src2)) } inst_vcvttps2dq_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VCVTTPS2DQ, operand_count = 2, ops = {op_xmm(dst), op_xmm(src), {}, {}} }, 1260) } inst_vcvttps2dq_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .VCVTTPS2DQ, operand_count = 2, ops = {op_xmm(dst), op_mem(src.mem, 16), {}, {}} }, 1260) } inst_vcvttps2dq_ymm_ymm :: #force_inline proc "contextless" (dst: YMM, src: YMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VCVTTPS2DQ, operand_count = 2, ops = {op_ymm(dst), op_ymm(src), {}, {}} }, 1261) } inst_vcvttps2dq_ymm_m256 :: #force_inline proc "contextless" (dst: YMM, src: Mem256) -> Instruction { return with_hint(Instruction{ mnemonic = .VCVTTPS2DQ, operand_count = 2, ops = {op_ymm(dst), op_mem(src.mem, 32), {}, {}} }, 1261) } -emit_vcvttps2dq_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append(instructions, inst_vcvttps2dq_xmm_xmm(dst, src)) } -emit_vcvttps2dq_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append(instructions, inst_vcvttps2dq_xmm_m128(dst, src)) } -emit_vcvttps2dq_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM) { append(instructions, inst_vcvttps2dq_ymm_ymm(dst, src)) } -emit_vcvttps2dq_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: Mem256) { append(instructions, inst_vcvttps2dq_ymm_m256(dst, src)) } +emit_vcvttps2dq_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append_elem(instructions, inst_vcvttps2dq_xmm_xmm(dst, src)) } +emit_vcvttps2dq_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append_elem(instructions, inst_vcvttps2dq_xmm_m128(dst, src)) } +emit_vcvttps2dq_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM) { append_elem(instructions, inst_vcvttps2dq_ymm_ymm(dst, src)) } +emit_vcvttps2dq_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: Mem256) { append_elem(instructions, inst_vcvttps2dq_ymm_m256(dst, src)) } inst_vcvttpd2dq_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VCVTTPD2DQ, operand_count = 2, ops = {op_xmm(dst), op_xmm(src), {}, {}} }, 1262) } inst_vcvttpd2dq_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .VCVTTPD2DQ, operand_count = 2, ops = {op_xmm(dst), op_mem(src.mem, 16), {}, {}} }, 1262) } inst_vcvttpd2dq_xmm_ymm :: #force_inline proc "contextless" (dst: XMM, src: YMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VCVTTPD2DQ, operand_count = 2, ops = {op_xmm(dst), op_ymm(src), {}, {}} }, 1263) } inst_vcvttpd2dq_xmm_m256 :: #force_inline proc "contextless" (dst: XMM, src: Mem256) -> Instruction { return with_hint(Instruction{ mnemonic = .VCVTTPD2DQ, operand_count = 2, ops = {op_xmm(dst), op_mem(src.mem, 32), {}, {}} }, 1263) } -emit_vcvttpd2dq_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append(instructions, inst_vcvttpd2dq_xmm_xmm(dst, src)) } -emit_vcvttpd2dq_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append(instructions, inst_vcvttpd2dq_xmm_m128(dst, src)) } -emit_vcvttpd2dq_xmm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: YMM) { append(instructions, inst_vcvttpd2dq_xmm_ymm(dst, src)) } -emit_vcvttpd2dq_xmm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem256) { append(instructions, inst_vcvttpd2dq_xmm_m256(dst, src)) } +emit_vcvttpd2dq_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append_elem(instructions, inst_vcvttpd2dq_xmm_xmm(dst, src)) } +emit_vcvttpd2dq_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append_elem(instructions, inst_vcvttpd2dq_xmm_m128(dst, src)) } +emit_vcvttpd2dq_xmm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: YMM) { append_elem(instructions, inst_vcvttpd2dq_xmm_ymm(dst, src)) } +emit_vcvttpd2dq_xmm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem256) { append_elem(instructions, inst_vcvttpd2dq_xmm_m256(dst, src)) } inst_vcvttss2si_r32_xmm :: #force_inline proc "contextless" (dst: GPR32, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VCVTTSS2SI, operand_count = 2, ops = {op_gpr32(dst), op_xmm(src), {}, {}} }, 1264) } inst_vcvttss2si_r32_m32 :: #force_inline proc "contextless" (dst: GPR32, src: Mem32) -> Instruction { return with_hint(Instruction{ mnemonic = .VCVTTSS2SI, operand_count = 2, ops = {op_gpr32(dst), op_mem(src.mem, 4), {}, {}} }, 1264) } inst_vcvttss2si_r64_xmm :: #force_inline proc "contextless" (dst: GPR64, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VCVTTSS2SI, operand_count = 2, ops = {op_gpr64(dst), op_xmm(src), {}, {}} }, 1265) } inst_vcvttss2si_r64_m32 :: #force_inline proc "contextless" (dst: GPR64, src: Mem32) -> Instruction { return with_hint(Instruction{ mnemonic = .VCVTTSS2SI, operand_count = 2, ops = {op_gpr64(dst), op_mem(src.mem, 4), {}, {}} }, 1265) } -emit_vcvttss2si_r32_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: XMM) { append(instructions, inst_vcvttss2si_r32_xmm(dst, src)) } -emit_vcvttss2si_r32_m32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: Mem32) { append(instructions, inst_vcvttss2si_r32_m32(dst, src)) } -emit_vcvttss2si_r64_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: XMM) { append(instructions, inst_vcvttss2si_r64_xmm(dst, src)) } -emit_vcvttss2si_r64_m32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: Mem32) { append(instructions, inst_vcvttss2si_r64_m32(dst, src)) } +emit_vcvttss2si_r32_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: XMM) { append_elem(instructions, inst_vcvttss2si_r32_xmm(dst, src)) } +emit_vcvttss2si_r32_m32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: Mem32) { append_elem(instructions, inst_vcvttss2si_r32_m32(dst, src)) } +emit_vcvttss2si_r64_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: XMM) { append_elem(instructions, inst_vcvttss2si_r64_xmm(dst, src)) } +emit_vcvttss2si_r64_m32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: Mem32) { append_elem(instructions, inst_vcvttss2si_r64_m32(dst, src)) } inst_vcvttsd2si_r32_xmm :: #force_inline proc "contextless" (dst: GPR32, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VCVTTSD2SI, operand_count = 2, ops = {op_gpr32(dst), op_xmm(src), {}, {}} }, 1266) } inst_vcvttsd2si_r32_m64 :: #force_inline proc "contextless" (dst: GPR32, src: Mem64) -> Instruction { return with_hint(Instruction{ mnemonic = .VCVTTSD2SI, operand_count = 2, ops = {op_gpr32(dst), op_mem(src.mem, 8), {}, {}} }, 1266) } inst_vcvttsd2si_r64_xmm :: #force_inline proc "contextless" (dst: GPR64, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VCVTTSD2SI, operand_count = 2, ops = {op_gpr64(dst), op_xmm(src), {}, {}} }, 1267) } inst_vcvttsd2si_r64_m64 :: #force_inline proc "contextless" (dst: GPR64, src: Mem64) -> Instruction { return with_hint(Instruction{ mnemonic = .VCVTTSD2SI, operand_count = 2, ops = {op_gpr64(dst), op_mem(src.mem, 8), {}, {}} }, 1267) } -emit_vcvttsd2si_r32_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: XMM) { append(instructions, inst_vcvttsd2si_r32_xmm(dst, src)) } -emit_vcvttsd2si_r32_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: Mem64) { append(instructions, inst_vcvttsd2si_r32_m64(dst, src)) } -emit_vcvttsd2si_r64_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: XMM) { append(instructions, inst_vcvttsd2si_r64_xmm(dst, src)) } -emit_vcvttsd2si_r64_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: Mem64) { append(instructions, inst_vcvttsd2si_r64_m64(dst, src)) } +emit_vcvttsd2si_r32_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: XMM) { append_elem(instructions, inst_vcvttsd2si_r32_xmm(dst, src)) } +emit_vcvttsd2si_r32_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: Mem64) { append_elem(instructions, inst_vcvttsd2si_r32_m64(dst, src)) } +emit_vcvttsd2si_r64_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: XMM) { append_elem(instructions, inst_vcvttsd2si_r64_xmm(dst, src)) } +emit_vcvttsd2si_r64_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: Mem64) { append_elem(instructions, inst_vcvttsd2si_r64_m64(dst, src)) } inst_vpaddb_xmm_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPADDB, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_xmm(src2), {}} }, 1268) } inst_vpaddb_xmm_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .VPADDB, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_mem(src2.mem, 16), {}} }, 1268) } inst_vpaddb_ymm_ymm_ymm :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: YMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPADDB, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_ymm(src2), {}} }, 1269) } inst_vpaddb_ymm_ymm_m256 :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: Mem256) -> Instruction { return with_hint(Instruction{ mnemonic = .VPADDB, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_mem(src2.mem, 32), {}} }, 1269) } -emit_vpaddb_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append(instructions, inst_vpaddb_xmm_xmm_xmm(dst, src, src2)) } -emit_vpaddb_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append(instructions, inst_vpaddb_xmm_xmm_m128(dst, src, src2)) } -emit_vpaddb_ymm_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM) { append(instructions, inst_vpaddb_ymm_ymm_ymm(dst, src, src2)) } -emit_vpaddb_ymm_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256) { append(instructions, inst_vpaddb_ymm_ymm_m256(dst, src, src2)) } +emit_vpaddb_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append_elem(instructions, inst_vpaddb_xmm_xmm_xmm(dst, src, src2)) } +emit_vpaddb_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append_elem(instructions, inst_vpaddb_xmm_xmm_m128(dst, src, src2)) } +emit_vpaddb_ymm_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM) { append_elem(instructions, inst_vpaddb_ymm_ymm_ymm(dst, src, src2)) } +emit_vpaddb_ymm_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256) { append_elem(instructions, inst_vpaddb_ymm_ymm_m256(dst, src, src2)) } inst_vpaddw_xmm_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPADDW, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_xmm(src2), {}} }, 1270) } inst_vpaddw_xmm_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .VPADDW, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_mem(src2.mem, 16), {}} }, 1270) } inst_vpaddw_ymm_ymm_ymm :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: YMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPADDW, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_ymm(src2), {}} }, 1271) } inst_vpaddw_ymm_ymm_m256 :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: Mem256) -> Instruction { return with_hint(Instruction{ mnemonic = .VPADDW, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_mem(src2.mem, 32), {}} }, 1271) } -emit_vpaddw_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append(instructions, inst_vpaddw_xmm_xmm_xmm(dst, src, src2)) } -emit_vpaddw_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append(instructions, inst_vpaddw_xmm_xmm_m128(dst, src, src2)) } -emit_vpaddw_ymm_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM) { append(instructions, inst_vpaddw_ymm_ymm_ymm(dst, src, src2)) } -emit_vpaddw_ymm_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256) { append(instructions, inst_vpaddw_ymm_ymm_m256(dst, src, src2)) } +emit_vpaddw_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append_elem(instructions, inst_vpaddw_xmm_xmm_xmm(dst, src, src2)) } +emit_vpaddw_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append_elem(instructions, inst_vpaddw_xmm_xmm_m128(dst, src, src2)) } +emit_vpaddw_ymm_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM) { append_elem(instructions, inst_vpaddw_ymm_ymm_ymm(dst, src, src2)) } +emit_vpaddw_ymm_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256) { append_elem(instructions, inst_vpaddw_ymm_ymm_m256(dst, src, src2)) } inst_vpaddd_xmm_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPADDD, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_xmm(src2), {}} }, 1272) } inst_vpaddd_xmm_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .VPADDD, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_mem(src2.mem, 16), {}} }, 1272) } inst_vpaddd_ymm_ymm_ymm :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: YMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPADDD, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_ymm(src2), {}} }, 1273) } inst_vpaddd_ymm_ymm_m256 :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: Mem256) -> Instruction { return with_hint(Instruction{ mnemonic = .VPADDD, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_mem(src2.mem, 32), {}} }, 1273) } -emit_vpaddd_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append(instructions, inst_vpaddd_xmm_xmm_xmm(dst, src, src2)) } -emit_vpaddd_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append(instructions, inst_vpaddd_xmm_xmm_m128(dst, src, src2)) } -emit_vpaddd_ymm_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM) { append(instructions, inst_vpaddd_ymm_ymm_ymm(dst, src, src2)) } -emit_vpaddd_ymm_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256) { append(instructions, inst_vpaddd_ymm_ymm_m256(dst, src, src2)) } +emit_vpaddd_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append_elem(instructions, inst_vpaddd_xmm_xmm_xmm(dst, src, src2)) } +emit_vpaddd_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append_elem(instructions, inst_vpaddd_xmm_xmm_m128(dst, src, src2)) } +emit_vpaddd_ymm_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM) { append_elem(instructions, inst_vpaddd_ymm_ymm_ymm(dst, src, src2)) } +emit_vpaddd_ymm_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256) { append_elem(instructions, inst_vpaddd_ymm_ymm_m256(dst, src, src2)) } inst_vpaddq_xmm_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPADDQ, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_xmm(src2), {}} }, 1274) } inst_vpaddq_xmm_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .VPADDQ, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_mem(src2.mem, 16), {}} }, 1274) } inst_vpaddq_ymm_ymm_ymm :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: YMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPADDQ, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_ymm(src2), {}} }, 1275) } inst_vpaddq_ymm_ymm_m256 :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: Mem256) -> Instruction { return with_hint(Instruction{ mnemonic = .VPADDQ, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_mem(src2.mem, 32), {}} }, 1275) } -emit_vpaddq_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append(instructions, inst_vpaddq_xmm_xmm_xmm(dst, src, src2)) } -emit_vpaddq_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append(instructions, inst_vpaddq_xmm_xmm_m128(dst, src, src2)) } -emit_vpaddq_ymm_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM) { append(instructions, inst_vpaddq_ymm_ymm_ymm(dst, src, src2)) } -emit_vpaddq_ymm_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256) { append(instructions, inst_vpaddq_ymm_ymm_m256(dst, src, src2)) } +emit_vpaddq_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append_elem(instructions, inst_vpaddq_xmm_xmm_xmm(dst, src, src2)) } +emit_vpaddq_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append_elem(instructions, inst_vpaddq_xmm_xmm_m128(dst, src, src2)) } +emit_vpaddq_ymm_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM) { append_elem(instructions, inst_vpaddq_ymm_ymm_ymm(dst, src, src2)) } +emit_vpaddq_ymm_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256) { append_elem(instructions, inst_vpaddq_ymm_ymm_m256(dst, src, src2)) } inst_vpsubb_xmm_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPSUBB, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_xmm(src2), {}} }, 1276) } inst_vpsubb_xmm_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .VPSUBB, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_mem(src2.mem, 16), {}} }, 1276) } inst_vpsubb_ymm_ymm_ymm :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: YMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPSUBB, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_ymm(src2), {}} }, 1277) } inst_vpsubb_ymm_ymm_m256 :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: Mem256) -> Instruction { return with_hint(Instruction{ mnemonic = .VPSUBB, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_mem(src2.mem, 32), {}} }, 1277) } -emit_vpsubb_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append(instructions, inst_vpsubb_xmm_xmm_xmm(dst, src, src2)) } -emit_vpsubb_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append(instructions, inst_vpsubb_xmm_xmm_m128(dst, src, src2)) } -emit_vpsubb_ymm_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM) { append(instructions, inst_vpsubb_ymm_ymm_ymm(dst, src, src2)) } -emit_vpsubb_ymm_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256) { append(instructions, inst_vpsubb_ymm_ymm_m256(dst, src, src2)) } +emit_vpsubb_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append_elem(instructions, inst_vpsubb_xmm_xmm_xmm(dst, src, src2)) } +emit_vpsubb_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append_elem(instructions, inst_vpsubb_xmm_xmm_m128(dst, src, src2)) } +emit_vpsubb_ymm_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM) { append_elem(instructions, inst_vpsubb_ymm_ymm_ymm(dst, src, src2)) } +emit_vpsubb_ymm_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256) { append_elem(instructions, inst_vpsubb_ymm_ymm_m256(dst, src, src2)) } inst_vpsubw_xmm_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPSUBW, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_xmm(src2), {}} }, 1278) } inst_vpsubw_xmm_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .VPSUBW, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_mem(src2.mem, 16), {}} }, 1278) } inst_vpsubw_ymm_ymm_ymm :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: YMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPSUBW, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_ymm(src2), {}} }, 1279) } inst_vpsubw_ymm_ymm_m256 :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: Mem256) -> Instruction { return with_hint(Instruction{ mnemonic = .VPSUBW, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_mem(src2.mem, 32), {}} }, 1279) } -emit_vpsubw_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append(instructions, inst_vpsubw_xmm_xmm_xmm(dst, src, src2)) } -emit_vpsubw_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append(instructions, inst_vpsubw_xmm_xmm_m128(dst, src, src2)) } -emit_vpsubw_ymm_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM) { append(instructions, inst_vpsubw_ymm_ymm_ymm(dst, src, src2)) } -emit_vpsubw_ymm_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256) { append(instructions, inst_vpsubw_ymm_ymm_m256(dst, src, src2)) } +emit_vpsubw_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append_elem(instructions, inst_vpsubw_xmm_xmm_xmm(dst, src, src2)) } +emit_vpsubw_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append_elem(instructions, inst_vpsubw_xmm_xmm_m128(dst, src, src2)) } +emit_vpsubw_ymm_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM) { append_elem(instructions, inst_vpsubw_ymm_ymm_ymm(dst, src, src2)) } +emit_vpsubw_ymm_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256) { append_elem(instructions, inst_vpsubw_ymm_ymm_m256(dst, src, src2)) } inst_vpsubd_xmm_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPSUBD, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_xmm(src2), {}} }, 1280) } inst_vpsubd_xmm_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .VPSUBD, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_mem(src2.mem, 16), {}} }, 1280) } inst_vpsubd_ymm_ymm_ymm :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: YMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPSUBD, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_ymm(src2), {}} }, 1281) } inst_vpsubd_ymm_ymm_m256 :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: Mem256) -> Instruction { return with_hint(Instruction{ mnemonic = .VPSUBD, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_mem(src2.mem, 32), {}} }, 1281) } -emit_vpsubd_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append(instructions, inst_vpsubd_xmm_xmm_xmm(dst, src, src2)) } -emit_vpsubd_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append(instructions, inst_vpsubd_xmm_xmm_m128(dst, src, src2)) } -emit_vpsubd_ymm_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM) { append(instructions, inst_vpsubd_ymm_ymm_ymm(dst, src, src2)) } -emit_vpsubd_ymm_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256) { append(instructions, inst_vpsubd_ymm_ymm_m256(dst, src, src2)) } +emit_vpsubd_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append_elem(instructions, inst_vpsubd_xmm_xmm_xmm(dst, src, src2)) } +emit_vpsubd_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append_elem(instructions, inst_vpsubd_xmm_xmm_m128(dst, src, src2)) } +emit_vpsubd_ymm_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM) { append_elem(instructions, inst_vpsubd_ymm_ymm_ymm(dst, src, src2)) } +emit_vpsubd_ymm_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256) { append_elem(instructions, inst_vpsubd_ymm_ymm_m256(dst, src, src2)) } inst_vpsubq_xmm_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPSUBQ, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_xmm(src2), {}} }, 1282) } inst_vpsubq_xmm_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .VPSUBQ, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_mem(src2.mem, 16), {}} }, 1282) } inst_vpsubq_ymm_ymm_ymm :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: YMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPSUBQ, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_ymm(src2), {}} }, 1283) } inst_vpsubq_ymm_ymm_m256 :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: Mem256) -> Instruction { return with_hint(Instruction{ mnemonic = .VPSUBQ, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_mem(src2.mem, 32), {}} }, 1283) } -emit_vpsubq_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append(instructions, inst_vpsubq_xmm_xmm_xmm(dst, src, src2)) } -emit_vpsubq_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append(instructions, inst_vpsubq_xmm_xmm_m128(dst, src, src2)) } -emit_vpsubq_ymm_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM) { append(instructions, inst_vpsubq_ymm_ymm_ymm(dst, src, src2)) } -emit_vpsubq_ymm_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256) { append(instructions, inst_vpsubq_ymm_ymm_m256(dst, src, src2)) } +emit_vpsubq_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append_elem(instructions, inst_vpsubq_xmm_xmm_xmm(dst, src, src2)) } +emit_vpsubq_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append_elem(instructions, inst_vpsubq_xmm_xmm_m128(dst, src, src2)) } +emit_vpsubq_ymm_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM) { append_elem(instructions, inst_vpsubq_ymm_ymm_ymm(dst, src, src2)) } +emit_vpsubq_ymm_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256) { append_elem(instructions, inst_vpsubq_ymm_ymm_m256(dst, src, src2)) } inst_vpmullw_xmm_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPMULLW, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_xmm(src2), {}} }, 1284) } inst_vpmullw_xmm_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .VPMULLW, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_mem(src2.mem, 16), {}} }, 1284) } inst_vpmullw_ymm_ymm_ymm :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: YMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPMULLW, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_ymm(src2), {}} }, 1285) } inst_vpmullw_ymm_ymm_m256 :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: Mem256) -> Instruction { return with_hint(Instruction{ mnemonic = .VPMULLW, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_mem(src2.mem, 32), {}} }, 1285) } -emit_vpmullw_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append(instructions, inst_vpmullw_xmm_xmm_xmm(dst, src, src2)) } -emit_vpmullw_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append(instructions, inst_vpmullw_xmm_xmm_m128(dst, src, src2)) } -emit_vpmullw_ymm_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM) { append(instructions, inst_vpmullw_ymm_ymm_ymm(dst, src, src2)) } -emit_vpmullw_ymm_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256) { append(instructions, inst_vpmullw_ymm_ymm_m256(dst, src, src2)) } +emit_vpmullw_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append_elem(instructions, inst_vpmullw_xmm_xmm_xmm(dst, src, src2)) } +emit_vpmullw_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append_elem(instructions, inst_vpmullw_xmm_xmm_m128(dst, src, src2)) } +emit_vpmullw_ymm_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM) { append_elem(instructions, inst_vpmullw_ymm_ymm_ymm(dst, src, src2)) } +emit_vpmullw_ymm_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256) { append_elem(instructions, inst_vpmullw_ymm_ymm_m256(dst, src, src2)) } inst_vpmulhw_xmm_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPMULHW, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_xmm(src2), {}} }, 1286) } inst_vpmulhw_xmm_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .VPMULHW, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_mem(src2.mem, 16), {}} }, 1286) } inst_vpmulhw_ymm_ymm_ymm :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: YMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPMULHW, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_ymm(src2), {}} }, 1287) } inst_vpmulhw_ymm_ymm_m256 :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: Mem256) -> Instruction { return with_hint(Instruction{ mnemonic = .VPMULHW, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_mem(src2.mem, 32), {}} }, 1287) } -emit_vpmulhw_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append(instructions, inst_vpmulhw_xmm_xmm_xmm(dst, src, src2)) } -emit_vpmulhw_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append(instructions, inst_vpmulhw_xmm_xmm_m128(dst, src, src2)) } -emit_vpmulhw_ymm_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM) { append(instructions, inst_vpmulhw_ymm_ymm_ymm(dst, src, src2)) } -emit_vpmulhw_ymm_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256) { append(instructions, inst_vpmulhw_ymm_ymm_m256(dst, src, src2)) } +emit_vpmulhw_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append_elem(instructions, inst_vpmulhw_xmm_xmm_xmm(dst, src, src2)) } +emit_vpmulhw_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append_elem(instructions, inst_vpmulhw_xmm_xmm_m128(dst, src, src2)) } +emit_vpmulhw_ymm_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM) { append_elem(instructions, inst_vpmulhw_ymm_ymm_ymm(dst, src, src2)) } +emit_vpmulhw_ymm_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256) { append_elem(instructions, inst_vpmulhw_ymm_ymm_m256(dst, src, src2)) } inst_vpmulhuw_xmm_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPMULHUW, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_xmm(src2), {}} }, 1288) } inst_vpmulhuw_xmm_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .VPMULHUW, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_mem(src2.mem, 16), {}} }, 1288) } inst_vpmulhuw_ymm_ymm_ymm :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: YMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPMULHUW, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_ymm(src2), {}} }, 1289) } inst_vpmulhuw_ymm_ymm_m256 :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: Mem256) -> Instruction { return with_hint(Instruction{ mnemonic = .VPMULHUW, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_mem(src2.mem, 32), {}} }, 1289) } -emit_vpmulhuw_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append(instructions, inst_vpmulhuw_xmm_xmm_xmm(dst, src, src2)) } -emit_vpmulhuw_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append(instructions, inst_vpmulhuw_xmm_xmm_m128(dst, src, src2)) } -emit_vpmulhuw_ymm_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM) { append(instructions, inst_vpmulhuw_ymm_ymm_ymm(dst, src, src2)) } -emit_vpmulhuw_ymm_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256) { append(instructions, inst_vpmulhuw_ymm_ymm_m256(dst, src, src2)) } +emit_vpmulhuw_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append_elem(instructions, inst_vpmulhuw_xmm_xmm_xmm(dst, src, src2)) } +emit_vpmulhuw_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append_elem(instructions, inst_vpmulhuw_xmm_xmm_m128(dst, src, src2)) } +emit_vpmulhuw_ymm_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM) { append_elem(instructions, inst_vpmulhuw_ymm_ymm_ymm(dst, src, src2)) } +emit_vpmulhuw_ymm_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256) { append_elem(instructions, inst_vpmulhuw_ymm_ymm_m256(dst, src, src2)) } inst_vpmuludq_xmm_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPMULUDQ, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_xmm(src2), {}} }, 1290) } inst_vpmuludq_xmm_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .VPMULUDQ, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_mem(src2.mem, 16), {}} }, 1290) } inst_vpmuludq_ymm_ymm_ymm :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: YMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPMULUDQ, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_ymm(src2), {}} }, 1291) } inst_vpmuludq_ymm_ymm_m256 :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: Mem256) -> Instruction { return with_hint(Instruction{ mnemonic = .VPMULUDQ, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_mem(src2.mem, 32), {}} }, 1291) } -emit_vpmuludq_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append(instructions, inst_vpmuludq_xmm_xmm_xmm(dst, src, src2)) } -emit_vpmuludq_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append(instructions, inst_vpmuludq_xmm_xmm_m128(dst, src, src2)) } -emit_vpmuludq_ymm_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM) { append(instructions, inst_vpmuludq_ymm_ymm_ymm(dst, src, src2)) } -emit_vpmuludq_ymm_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256) { append(instructions, inst_vpmuludq_ymm_ymm_m256(dst, src, src2)) } +emit_vpmuludq_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append_elem(instructions, inst_vpmuludq_xmm_xmm_xmm(dst, src, src2)) } +emit_vpmuludq_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append_elem(instructions, inst_vpmuludq_xmm_xmm_m128(dst, src, src2)) } +emit_vpmuludq_ymm_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM) { append_elem(instructions, inst_vpmuludq_ymm_ymm_ymm(dst, src, src2)) } +emit_vpmuludq_ymm_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256) { append_elem(instructions, inst_vpmuludq_ymm_ymm_m256(dst, src, src2)) } inst_vpmaddwd_xmm_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPMADDWD, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_xmm(src2), {}} }, 1292) } inst_vpmaddwd_xmm_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .VPMADDWD, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_mem(src2.mem, 16), {}} }, 1292) } inst_vpmaddwd_ymm_ymm_ymm :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: YMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPMADDWD, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_ymm(src2), {}} }, 1293) } inst_vpmaddwd_ymm_ymm_m256 :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: Mem256) -> Instruction { return with_hint(Instruction{ mnemonic = .VPMADDWD, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_mem(src2.mem, 32), {}} }, 1293) } -emit_vpmaddwd_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append(instructions, inst_vpmaddwd_xmm_xmm_xmm(dst, src, src2)) } -emit_vpmaddwd_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append(instructions, inst_vpmaddwd_xmm_xmm_m128(dst, src, src2)) } -emit_vpmaddwd_ymm_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM) { append(instructions, inst_vpmaddwd_ymm_ymm_ymm(dst, src, src2)) } -emit_vpmaddwd_ymm_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256) { append(instructions, inst_vpmaddwd_ymm_ymm_m256(dst, src, src2)) } +emit_vpmaddwd_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append_elem(instructions, inst_vpmaddwd_xmm_xmm_xmm(dst, src, src2)) } +emit_vpmaddwd_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append_elem(instructions, inst_vpmaddwd_xmm_xmm_m128(dst, src, src2)) } +emit_vpmaddwd_ymm_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM) { append_elem(instructions, inst_vpmaddwd_ymm_ymm_ymm(dst, src, src2)) } +emit_vpmaddwd_ymm_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256) { append_elem(instructions, inst_vpmaddwd_ymm_ymm_m256(dst, src, src2)) } inst_vpand_xmm_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPAND, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_xmm(src2), {}} }, 1294) } inst_vpand_xmm_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .VPAND, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_mem(src2.mem, 16), {}} }, 1294) } inst_vpand_ymm_ymm_ymm :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: YMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPAND, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_ymm(src2), {}} }, 1295) } inst_vpand_ymm_ymm_m256 :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: Mem256) -> Instruction { return with_hint(Instruction{ mnemonic = .VPAND, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_mem(src2.mem, 32), {}} }, 1295) } -emit_vpand_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append(instructions, inst_vpand_xmm_xmm_xmm(dst, src, src2)) } -emit_vpand_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append(instructions, inst_vpand_xmm_xmm_m128(dst, src, src2)) } -emit_vpand_ymm_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM) { append(instructions, inst_vpand_ymm_ymm_ymm(dst, src, src2)) } -emit_vpand_ymm_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256) { append(instructions, inst_vpand_ymm_ymm_m256(dst, src, src2)) } +emit_vpand_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append_elem(instructions, inst_vpand_xmm_xmm_xmm(dst, src, src2)) } +emit_vpand_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append_elem(instructions, inst_vpand_xmm_xmm_m128(dst, src, src2)) } +emit_vpand_ymm_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM) { append_elem(instructions, inst_vpand_ymm_ymm_ymm(dst, src, src2)) } +emit_vpand_ymm_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256) { append_elem(instructions, inst_vpand_ymm_ymm_m256(dst, src, src2)) } inst_vpandn_xmm_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPANDN, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_xmm(src2), {}} }, 1296) } inst_vpandn_xmm_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .VPANDN, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_mem(src2.mem, 16), {}} }, 1296) } inst_vpandn_ymm_ymm_ymm :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: YMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPANDN, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_ymm(src2), {}} }, 1297) } inst_vpandn_ymm_ymm_m256 :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: Mem256) -> Instruction { return with_hint(Instruction{ mnemonic = .VPANDN, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_mem(src2.mem, 32), {}} }, 1297) } -emit_vpandn_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append(instructions, inst_vpandn_xmm_xmm_xmm(dst, src, src2)) } -emit_vpandn_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append(instructions, inst_vpandn_xmm_xmm_m128(dst, src, src2)) } -emit_vpandn_ymm_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM) { append(instructions, inst_vpandn_ymm_ymm_ymm(dst, src, src2)) } -emit_vpandn_ymm_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256) { append(instructions, inst_vpandn_ymm_ymm_m256(dst, src, src2)) } +emit_vpandn_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append_elem(instructions, inst_vpandn_xmm_xmm_xmm(dst, src, src2)) } +emit_vpandn_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append_elem(instructions, inst_vpandn_xmm_xmm_m128(dst, src, src2)) } +emit_vpandn_ymm_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM) { append_elem(instructions, inst_vpandn_ymm_ymm_ymm(dst, src, src2)) } +emit_vpandn_ymm_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256) { append_elem(instructions, inst_vpandn_ymm_ymm_m256(dst, src, src2)) } inst_vpor_xmm_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPOR, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_xmm(src2), {}} }, 1298) } inst_vpor_xmm_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .VPOR, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_mem(src2.mem, 16), {}} }, 1298) } inst_vpor_ymm_ymm_ymm :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: YMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPOR, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_ymm(src2), {}} }, 1299) } inst_vpor_ymm_ymm_m256 :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: Mem256) -> Instruction { return with_hint(Instruction{ mnemonic = .VPOR, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_mem(src2.mem, 32), {}} }, 1299) } -emit_vpor_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append(instructions, inst_vpor_xmm_xmm_xmm(dst, src, src2)) } -emit_vpor_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append(instructions, inst_vpor_xmm_xmm_m128(dst, src, src2)) } -emit_vpor_ymm_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM) { append(instructions, inst_vpor_ymm_ymm_ymm(dst, src, src2)) } -emit_vpor_ymm_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256) { append(instructions, inst_vpor_ymm_ymm_m256(dst, src, src2)) } +emit_vpor_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append_elem(instructions, inst_vpor_xmm_xmm_xmm(dst, src, src2)) } +emit_vpor_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append_elem(instructions, inst_vpor_xmm_xmm_m128(dst, src, src2)) } +emit_vpor_ymm_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM) { append_elem(instructions, inst_vpor_ymm_ymm_ymm(dst, src, src2)) } +emit_vpor_ymm_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256) { append_elem(instructions, inst_vpor_ymm_ymm_m256(dst, src, src2)) } inst_vpxor_xmm_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPXOR, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_xmm(src2), {}} }, 1300) } inst_vpxor_xmm_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .VPXOR, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_mem(src2.mem, 16), {}} }, 1300) } inst_vpxor_ymm_ymm_ymm :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: YMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPXOR, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_ymm(src2), {}} }, 1301) } inst_vpxor_ymm_ymm_m256 :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: Mem256) -> Instruction { return with_hint(Instruction{ mnemonic = .VPXOR, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_mem(src2.mem, 32), {}} }, 1301) } -emit_vpxor_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append(instructions, inst_vpxor_xmm_xmm_xmm(dst, src, src2)) } -emit_vpxor_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append(instructions, inst_vpxor_xmm_xmm_m128(dst, src, src2)) } -emit_vpxor_ymm_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM) { append(instructions, inst_vpxor_ymm_ymm_ymm(dst, src, src2)) } -emit_vpxor_ymm_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256) { append(instructions, inst_vpxor_ymm_ymm_m256(dst, src, src2)) } +emit_vpxor_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append_elem(instructions, inst_vpxor_xmm_xmm_xmm(dst, src, src2)) } +emit_vpxor_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append_elem(instructions, inst_vpxor_xmm_xmm_m128(dst, src, src2)) } +emit_vpxor_ymm_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM) { append_elem(instructions, inst_vpxor_ymm_ymm_ymm(dst, src, src2)) } +emit_vpxor_ymm_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256) { append_elem(instructions, inst_vpxor_ymm_ymm_m256(dst, src, src2)) } inst_vpsllw_xmm_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPSLLW, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_xmm(src2), {}} }, 1302) } inst_vpsllw_xmm_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .VPSLLW, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_mem(src2.mem, 16), {}} }, 1302) } inst_vpsllw_xmm_xmm_imm8 :: #force_inline proc "contextless" (dst: XMM, src: XMM, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .VPSLLW, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_imm8(imm), {}} }, 1303) } inst_vpsllw_ymm_ymm_xmm :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPSLLW, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_xmm(src2), {}} }, 1304) } inst_vpsllw_ymm_ymm_m128 :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .VPSLLW, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_mem(src2.mem, 16), {}} }, 1304) } inst_vpsllw_ymm_ymm_imm8 :: #force_inline proc "contextless" (dst: YMM, src: YMM, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .VPSLLW, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_imm8(imm), {}} }, 1305) } -emit_vpsllw_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append(instructions, inst_vpsllw_xmm_xmm_xmm(dst, src, src2)) } -emit_vpsllw_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append(instructions, inst_vpsllw_xmm_xmm_m128(dst, src, src2)) } -emit_vpsllw_xmm_xmm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, imm: i8) { append(instructions, inst_vpsllw_xmm_xmm_imm8(dst, src, imm)) } -emit_vpsllw_ymm_ymm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: XMM) { append(instructions, inst_vpsllw_ymm_ymm_xmm(dst, src, src2)) } -emit_vpsllw_ymm_ymm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem128) { append(instructions, inst_vpsllw_ymm_ymm_m128(dst, src, src2)) } -emit_vpsllw_ymm_ymm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, imm: i8) { append(instructions, inst_vpsllw_ymm_ymm_imm8(dst, src, imm)) } +emit_vpsllw_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append_elem(instructions, inst_vpsllw_xmm_xmm_xmm(dst, src, src2)) } +emit_vpsllw_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append_elem(instructions, inst_vpsllw_xmm_xmm_m128(dst, src, src2)) } +emit_vpsllw_xmm_xmm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, imm: i8) { append_elem(instructions, inst_vpsllw_xmm_xmm_imm8(dst, src, imm)) } +emit_vpsllw_ymm_ymm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: XMM) { append_elem(instructions, inst_vpsllw_ymm_ymm_xmm(dst, src, src2)) } +emit_vpsllw_ymm_ymm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem128) { append_elem(instructions, inst_vpsllw_ymm_ymm_m128(dst, src, src2)) } +emit_vpsllw_ymm_ymm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, imm: i8) { append_elem(instructions, inst_vpsllw_ymm_ymm_imm8(dst, src, imm)) } inst_vpslld_xmm_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPSLLD, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_xmm(src2), {}} }, 1306) } inst_vpslld_xmm_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .VPSLLD, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_mem(src2.mem, 16), {}} }, 1306) } inst_vpslld_xmm_xmm_imm8 :: #force_inline proc "contextless" (dst: XMM, src: XMM, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .VPSLLD, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_imm8(imm), {}} }, 1307) } inst_vpslld_ymm_ymm_xmm :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPSLLD, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_xmm(src2), {}} }, 1308) } inst_vpslld_ymm_ymm_m128 :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .VPSLLD, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_mem(src2.mem, 16), {}} }, 1308) } inst_vpslld_ymm_ymm_imm8 :: #force_inline proc "contextless" (dst: YMM, src: YMM, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .VPSLLD, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_imm8(imm), {}} }, 1309) } -emit_vpslld_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append(instructions, inst_vpslld_xmm_xmm_xmm(dst, src, src2)) } -emit_vpslld_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append(instructions, inst_vpslld_xmm_xmm_m128(dst, src, src2)) } -emit_vpslld_xmm_xmm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, imm: i8) { append(instructions, inst_vpslld_xmm_xmm_imm8(dst, src, imm)) } -emit_vpslld_ymm_ymm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: XMM) { append(instructions, inst_vpslld_ymm_ymm_xmm(dst, src, src2)) } -emit_vpslld_ymm_ymm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem128) { append(instructions, inst_vpslld_ymm_ymm_m128(dst, src, src2)) } -emit_vpslld_ymm_ymm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, imm: i8) { append(instructions, inst_vpslld_ymm_ymm_imm8(dst, src, imm)) } +emit_vpslld_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append_elem(instructions, inst_vpslld_xmm_xmm_xmm(dst, src, src2)) } +emit_vpslld_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append_elem(instructions, inst_vpslld_xmm_xmm_m128(dst, src, src2)) } +emit_vpslld_xmm_xmm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, imm: i8) { append_elem(instructions, inst_vpslld_xmm_xmm_imm8(dst, src, imm)) } +emit_vpslld_ymm_ymm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: XMM) { append_elem(instructions, inst_vpslld_ymm_ymm_xmm(dst, src, src2)) } +emit_vpslld_ymm_ymm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem128) { append_elem(instructions, inst_vpslld_ymm_ymm_m128(dst, src, src2)) } +emit_vpslld_ymm_ymm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, imm: i8) { append_elem(instructions, inst_vpslld_ymm_ymm_imm8(dst, src, imm)) } inst_vpsllq_xmm_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPSLLQ, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_xmm(src2), {}} }, 1310) } inst_vpsllq_xmm_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .VPSLLQ, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_mem(src2.mem, 16), {}} }, 1310) } inst_vpsllq_xmm_xmm_imm8 :: #force_inline proc "contextless" (dst: XMM, src: XMM, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .VPSLLQ, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_imm8(imm), {}} }, 1311) } inst_vpsllq_ymm_ymm_xmm :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPSLLQ, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_xmm(src2), {}} }, 1312) } inst_vpsllq_ymm_ymm_m128 :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .VPSLLQ, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_mem(src2.mem, 16), {}} }, 1312) } inst_vpsllq_ymm_ymm_imm8 :: #force_inline proc "contextless" (dst: YMM, src: YMM, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .VPSLLQ, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_imm8(imm), {}} }, 1313) } -emit_vpsllq_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append(instructions, inst_vpsllq_xmm_xmm_xmm(dst, src, src2)) } -emit_vpsllq_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append(instructions, inst_vpsllq_xmm_xmm_m128(dst, src, src2)) } -emit_vpsllq_xmm_xmm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, imm: i8) { append(instructions, inst_vpsllq_xmm_xmm_imm8(dst, src, imm)) } -emit_vpsllq_ymm_ymm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: XMM) { append(instructions, inst_vpsllq_ymm_ymm_xmm(dst, src, src2)) } -emit_vpsllq_ymm_ymm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem128) { append(instructions, inst_vpsllq_ymm_ymm_m128(dst, src, src2)) } -emit_vpsllq_ymm_ymm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, imm: i8) { append(instructions, inst_vpsllq_ymm_ymm_imm8(dst, src, imm)) } +emit_vpsllq_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append_elem(instructions, inst_vpsllq_xmm_xmm_xmm(dst, src, src2)) } +emit_vpsllq_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append_elem(instructions, inst_vpsllq_xmm_xmm_m128(dst, src, src2)) } +emit_vpsllq_xmm_xmm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, imm: i8) { append_elem(instructions, inst_vpsllq_xmm_xmm_imm8(dst, src, imm)) } +emit_vpsllq_ymm_ymm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: XMM) { append_elem(instructions, inst_vpsllq_ymm_ymm_xmm(dst, src, src2)) } +emit_vpsllq_ymm_ymm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem128) { append_elem(instructions, inst_vpsllq_ymm_ymm_m128(dst, src, src2)) } +emit_vpsllq_ymm_ymm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, imm: i8) { append_elem(instructions, inst_vpsllq_ymm_ymm_imm8(dst, src, imm)) } inst_vpsrlw_xmm_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPSRLW, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_xmm(src2), {}} }, 1314) } inst_vpsrlw_xmm_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .VPSRLW, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_mem(src2.mem, 16), {}} }, 1314) } inst_vpsrlw_xmm_xmm_imm8 :: #force_inline proc "contextless" (dst: XMM, src: XMM, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .VPSRLW, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_imm8(imm), {}} }, 1315) } inst_vpsrlw_ymm_ymm_xmm :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPSRLW, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_xmm(src2), {}} }, 1316) } inst_vpsrlw_ymm_ymm_m128 :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .VPSRLW, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_mem(src2.mem, 16), {}} }, 1316) } inst_vpsrlw_ymm_ymm_imm8 :: #force_inline proc "contextless" (dst: YMM, src: YMM, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .VPSRLW, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_imm8(imm), {}} }, 1317) } -emit_vpsrlw_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append(instructions, inst_vpsrlw_xmm_xmm_xmm(dst, src, src2)) } -emit_vpsrlw_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append(instructions, inst_vpsrlw_xmm_xmm_m128(dst, src, src2)) } -emit_vpsrlw_xmm_xmm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, imm: i8) { append(instructions, inst_vpsrlw_xmm_xmm_imm8(dst, src, imm)) } -emit_vpsrlw_ymm_ymm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: XMM) { append(instructions, inst_vpsrlw_ymm_ymm_xmm(dst, src, src2)) } -emit_vpsrlw_ymm_ymm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem128) { append(instructions, inst_vpsrlw_ymm_ymm_m128(dst, src, src2)) } -emit_vpsrlw_ymm_ymm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, imm: i8) { append(instructions, inst_vpsrlw_ymm_ymm_imm8(dst, src, imm)) } +emit_vpsrlw_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append_elem(instructions, inst_vpsrlw_xmm_xmm_xmm(dst, src, src2)) } +emit_vpsrlw_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append_elem(instructions, inst_vpsrlw_xmm_xmm_m128(dst, src, src2)) } +emit_vpsrlw_xmm_xmm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, imm: i8) { append_elem(instructions, inst_vpsrlw_xmm_xmm_imm8(dst, src, imm)) } +emit_vpsrlw_ymm_ymm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: XMM) { append_elem(instructions, inst_vpsrlw_ymm_ymm_xmm(dst, src, src2)) } +emit_vpsrlw_ymm_ymm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem128) { append_elem(instructions, inst_vpsrlw_ymm_ymm_m128(dst, src, src2)) } +emit_vpsrlw_ymm_ymm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, imm: i8) { append_elem(instructions, inst_vpsrlw_ymm_ymm_imm8(dst, src, imm)) } inst_vpsrld_xmm_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPSRLD, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_xmm(src2), {}} }, 1318) } inst_vpsrld_xmm_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .VPSRLD, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_mem(src2.mem, 16), {}} }, 1318) } inst_vpsrld_xmm_xmm_imm8 :: #force_inline proc "contextless" (dst: XMM, src: XMM, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .VPSRLD, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_imm8(imm), {}} }, 1319) } inst_vpsrld_ymm_ymm_xmm :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPSRLD, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_xmm(src2), {}} }, 1320) } inst_vpsrld_ymm_ymm_m128 :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .VPSRLD, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_mem(src2.mem, 16), {}} }, 1320) } inst_vpsrld_ymm_ymm_imm8 :: #force_inline proc "contextless" (dst: YMM, src: YMM, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .VPSRLD, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_imm8(imm), {}} }, 1321) } -emit_vpsrld_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append(instructions, inst_vpsrld_xmm_xmm_xmm(dst, src, src2)) } -emit_vpsrld_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append(instructions, inst_vpsrld_xmm_xmm_m128(dst, src, src2)) } -emit_vpsrld_xmm_xmm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, imm: i8) { append(instructions, inst_vpsrld_xmm_xmm_imm8(dst, src, imm)) } -emit_vpsrld_ymm_ymm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: XMM) { append(instructions, inst_vpsrld_ymm_ymm_xmm(dst, src, src2)) } -emit_vpsrld_ymm_ymm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem128) { append(instructions, inst_vpsrld_ymm_ymm_m128(dst, src, src2)) } -emit_vpsrld_ymm_ymm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, imm: i8) { append(instructions, inst_vpsrld_ymm_ymm_imm8(dst, src, imm)) } +emit_vpsrld_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append_elem(instructions, inst_vpsrld_xmm_xmm_xmm(dst, src, src2)) } +emit_vpsrld_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append_elem(instructions, inst_vpsrld_xmm_xmm_m128(dst, src, src2)) } +emit_vpsrld_xmm_xmm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, imm: i8) { append_elem(instructions, inst_vpsrld_xmm_xmm_imm8(dst, src, imm)) } +emit_vpsrld_ymm_ymm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: XMM) { append_elem(instructions, inst_vpsrld_ymm_ymm_xmm(dst, src, src2)) } +emit_vpsrld_ymm_ymm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem128) { append_elem(instructions, inst_vpsrld_ymm_ymm_m128(dst, src, src2)) } +emit_vpsrld_ymm_ymm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, imm: i8) { append_elem(instructions, inst_vpsrld_ymm_ymm_imm8(dst, src, imm)) } inst_vpsrlq_xmm_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPSRLQ, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_xmm(src2), {}} }, 1322) } inst_vpsrlq_xmm_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .VPSRLQ, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_mem(src2.mem, 16), {}} }, 1322) } inst_vpsrlq_xmm_xmm_imm8 :: #force_inline proc "contextless" (dst: XMM, src: XMM, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .VPSRLQ, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_imm8(imm), {}} }, 1323) } inst_vpsrlq_ymm_ymm_xmm :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPSRLQ, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_xmm(src2), {}} }, 1324) } inst_vpsrlq_ymm_ymm_m128 :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .VPSRLQ, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_mem(src2.mem, 16), {}} }, 1324) } inst_vpsrlq_ymm_ymm_imm8 :: #force_inline proc "contextless" (dst: YMM, src: YMM, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .VPSRLQ, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_imm8(imm), {}} }, 1325) } -emit_vpsrlq_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append(instructions, inst_vpsrlq_xmm_xmm_xmm(dst, src, src2)) } -emit_vpsrlq_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append(instructions, inst_vpsrlq_xmm_xmm_m128(dst, src, src2)) } -emit_vpsrlq_xmm_xmm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, imm: i8) { append(instructions, inst_vpsrlq_xmm_xmm_imm8(dst, src, imm)) } -emit_vpsrlq_ymm_ymm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: XMM) { append(instructions, inst_vpsrlq_ymm_ymm_xmm(dst, src, src2)) } -emit_vpsrlq_ymm_ymm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem128) { append(instructions, inst_vpsrlq_ymm_ymm_m128(dst, src, src2)) } -emit_vpsrlq_ymm_ymm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, imm: i8) { append(instructions, inst_vpsrlq_ymm_ymm_imm8(dst, src, imm)) } +emit_vpsrlq_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append_elem(instructions, inst_vpsrlq_xmm_xmm_xmm(dst, src, src2)) } +emit_vpsrlq_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append_elem(instructions, inst_vpsrlq_xmm_xmm_m128(dst, src, src2)) } +emit_vpsrlq_xmm_xmm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, imm: i8) { append_elem(instructions, inst_vpsrlq_xmm_xmm_imm8(dst, src, imm)) } +emit_vpsrlq_ymm_ymm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: XMM) { append_elem(instructions, inst_vpsrlq_ymm_ymm_xmm(dst, src, src2)) } +emit_vpsrlq_ymm_ymm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem128) { append_elem(instructions, inst_vpsrlq_ymm_ymm_m128(dst, src, src2)) } +emit_vpsrlq_ymm_ymm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, imm: i8) { append_elem(instructions, inst_vpsrlq_ymm_ymm_imm8(dst, src, imm)) } inst_vpsraw_xmm_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPSRAW, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_xmm(src2), {}} }, 1326) } inst_vpsraw_xmm_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .VPSRAW, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_mem(src2.mem, 16), {}} }, 1326) } inst_vpsraw_xmm_xmm_imm8 :: #force_inline proc "contextless" (dst: XMM, src: XMM, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .VPSRAW, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_imm8(imm), {}} }, 1327) } inst_vpsraw_ymm_ymm_xmm :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPSRAW, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_xmm(src2), {}} }, 1328) } inst_vpsraw_ymm_ymm_m128 :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .VPSRAW, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_mem(src2.mem, 16), {}} }, 1328) } inst_vpsraw_ymm_ymm_imm8 :: #force_inline proc "contextless" (dst: YMM, src: YMM, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .VPSRAW, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_imm8(imm), {}} }, 1329) } -emit_vpsraw_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append(instructions, inst_vpsraw_xmm_xmm_xmm(dst, src, src2)) } -emit_vpsraw_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append(instructions, inst_vpsraw_xmm_xmm_m128(dst, src, src2)) } -emit_vpsraw_xmm_xmm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, imm: i8) { append(instructions, inst_vpsraw_xmm_xmm_imm8(dst, src, imm)) } -emit_vpsraw_ymm_ymm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: XMM) { append(instructions, inst_vpsraw_ymm_ymm_xmm(dst, src, src2)) } -emit_vpsraw_ymm_ymm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem128) { append(instructions, inst_vpsraw_ymm_ymm_m128(dst, src, src2)) } -emit_vpsraw_ymm_ymm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, imm: i8) { append(instructions, inst_vpsraw_ymm_ymm_imm8(dst, src, imm)) } +emit_vpsraw_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append_elem(instructions, inst_vpsraw_xmm_xmm_xmm(dst, src, src2)) } +emit_vpsraw_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append_elem(instructions, inst_vpsraw_xmm_xmm_m128(dst, src, src2)) } +emit_vpsraw_xmm_xmm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, imm: i8) { append_elem(instructions, inst_vpsraw_xmm_xmm_imm8(dst, src, imm)) } +emit_vpsraw_ymm_ymm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: XMM) { append_elem(instructions, inst_vpsraw_ymm_ymm_xmm(dst, src, src2)) } +emit_vpsraw_ymm_ymm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem128) { append_elem(instructions, inst_vpsraw_ymm_ymm_m128(dst, src, src2)) } +emit_vpsraw_ymm_ymm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, imm: i8) { append_elem(instructions, inst_vpsraw_ymm_ymm_imm8(dst, src, imm)) } inst_vpsrad_xmm_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPSRAD, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_xmm(src2), {}} }, 1330) } inst_vpsrad_xmm_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .VPSRAD, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_mem(src2.mem, 16), {}} }, 1330) } inst_vpsrad_xmm_xmm_imm8 :: #force_inline proc "contextless" (dst: XMM, src: XMM, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .VPSRAD, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_imm8(imm), {}} }, 1331) } inst_vpsrad_ymm_ymm_xmm :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPSRAD, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_xmm(src2), {}} }, 1332) } inst_vpsrad_ymm_ymm_m128 :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .VPSRAD, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_mem(src2.mem, 16), {}} }, 1332) } inst_vpsrad_ymm_ymm_imm8 :: #force_inline proc "contextless" (dst: YMM, src: YMM, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .VPSRAD, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_imm8(imm), {}} }, 1333) } -emit_vpsrad_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append(instructions, inst_vpsrad_xmm_xmm_xmm(dst, src, src2)) } -emit_vpsrad_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append(instructions, inst_vpsrad_xmm_xmm_m128(dst, src, src2)) } -emit_vpsrad_xmm_xmm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, imm: i8) { append(instructions, inst_vpsrad_xmm_xmm_imm8(dst, src, imm)) } -emit_vpsrad_ymm_ymm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: XMM) { append(instructions, inst_vpsrad_ymm_ymm_xmm(dst, src, src2)) } -emit_vpsrad_ymm_ymm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem128) { append(instructions, inst_vpsrad_ymm_ymm_m128(dst, src, src2)) } -emit_vpsrad_ymm_ymm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, imm: i8) { append(instructions, inst_vpsrad_ymm_ymm_imm8(dst, src, imm)) } +emit_vpsrad_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append_elem(instructions, inst_vpsrad_xmm_xmm_xmm(dst, src, src2)) } +emit_vpsrad_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append_elem(instructions, inst_vpsrad_xmm_xmm_m128(dst, src, src2)) } +emit_vpsrad_xmm_xmm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, imm: i8) { append_elem(instructions, inst_vpsrad_xmm_xmm_imm8(dst, src, imm)) } +emit_vpsrad_ymm_ymm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: XMM) { append_elem(instructions, inst_vpsrad_ymm_ymm_xmm(dst, src, src2)) } +emit_vpsrad_ymm_ymm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem128) { append_elem(instructions, inst_vpsrad_ymm_ymm_m128(dst, src, src2)) } +emit_vpsrad_ymm_ymm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, imm: i8) { append_elem(instructions, inst_vpsrad_ymm_ymm_imm8(dst, src, imm)) } inst_vpcmpeqb_xmm_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPCMPEQB, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_xmm(src2), {}} }, 1334) } inst_vpcmpeqb_xmm_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .VPCMPEQB, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_mem(src2.mem, 16), {}} }, 1334) } inst_vpcmpeqb_ymm_ymm_ymm :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: YMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPCMPEQB, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_ymm(src2), {}} }, 1335) } inst_vpcmpeqb_ymm_ymm_m256 :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: Mem256) -> Instruction { return with_hint(Instruction{ mnemonic = .VPCMPEQB, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_mem(src2.mem, 32), {}} }, 1335) } -emit_vpcmpeqb_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append(instructions, inst_vpcmpeqb_xmm_xmm_xmm(dst, src, src2)) } -emit_vpcmpeqb_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append(instructions, inst_vpcmpeqb_xmm_xmm_m128(dst, src, src2)) } -emit_vpcmpeqb_ymm_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM) { append(instructions, inst_vpcmpeqb_ymm_ymm_ymm(dst, src, src2)) } -emit_vpcmpeqb_ymm_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256) { append(instructions, inst_vpcmpeqb_ymm_ymm_m256(dst, src, src2)) } +emit_vpcmpeqb_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append_elem(instructions, inst_vpcmpeqb_xmm_xmm_xmm(dst, src, src2)) } +emit_vpcmpeqb_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append_elem(instructions, inst_vpcmpeqb_xmm_xmm_m128(dst, src, src2)) } +emit_vpcmpeqb_ymm_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM) { append_elem(instructions, inst_vpcmpeqb_ymm_ymm_ymm(dst, src, src2)) } +emit_vpcmpeqb_ymm_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256) { append_elem(instructions, inst_vpcmpeqb_ymm_ymm_m256(dst, src, src2)) } inst_vpcmpeqw_xmm_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPCMPEQW, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_xmm(src2), {}} }, 1336) } inst_vpcmpeqw_xmm_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .VPCMPEQW, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_mem(src2.mem, 16), {}} }, 1336) } inst_vpcmpeqw_ymm_ymm_ymm :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: YMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPCMPEQW, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_ymm(src2), {}} }, 1337) } inst_vpcmpeqw_ymm_ymm_m256 :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: Mem256) -> Instruction { return with_hint(Instruction{ mnemonic = .VPCMPEQW, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_mem(src2.mem, 32), {}} }, 1337) } -emit_vpcmpeqw_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append(instructions, inst_vpcmpeqw_xmm_xmm_xmm(dst, src, src2)) } -emit_vpcmpeqw_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append(instructions, inst_vpcmpeqw_xmm_xmm_m128(dst, src, src2)) } -emit_vpcmpeqw_ymm_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM) { append(instructions, inst_vpcmpeqw_ymm_ymm_ymm(dst, src, src2)) } -emit_vpcmpeqw_ymm_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256) { append(instructions, inst_vpcmpeqw_ymm_ymm_m256(dst, src, src2)) } +emit_vpcmpeqw_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append_elem(instructions, inst_vpcmpeqw_xmm_xmm_xmm(dst, src, src2)) } +emit_vpcmpeqw_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append_elem(instructions, inst_vpcmpeqw_xmm_xmm_m128(dst, src, src2)) } +emit_vpcmpeqw_ymm_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM) { append_elem(instructions, inst_vpcmpeqw_ymm_ymm_ymm(dst, src, src2)) } +emit_vpcmpeqw_ymm_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256) { append_elem(instructions, inst_vpcmpeqw_ymm_ymm_m256(dst, src, src2)) } inst_vpcmpeqd_xmm_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPCMPEQD, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_xmm(src2), {}} }, 1338) } inst_vpcmpeqd_xmm_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .VPCMPEQD, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_mem(src2.mem, 16), {}} }, 1338) } inst_vpcmpeqd_ymm_ymm_ymm :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: YMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPCMPEQD, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_ymm(src2), {}} }, 1339) } inst_vpcmpeqd_ymm_ymm_m256 :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: Mem256) -> Instruction { return with_hint(Instruction{ mnemonic = .VPCMPEQD, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_mem(src2.mem, 32), {}} }, 1339) } -emit_vpcmpeqd_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append(instructions, inst_vpcmpeqd_xmm_xmm_xmm(dst, src, src2)) } -emit_vpcmpeqd_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append(instructions, inst_vpcmpeqd_xmm_xmm_m128(dst, src, src2)) } -emit_vpcmpeqd_ymm_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM) { append(instructions, inst_vpcmpeqd_ymm_ymm_ymm(dst, src, src2)) } -emit_vpcmpeqd_ymm_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256) { append(instructions, inst_vpcmpeqd_ymm_ymm_m256(dst, src, src2)) } +emit_vpcmpeqd_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append_elem(instructions, inst_vpcmpeqd_xmm_xmm_xmm(dst, src, src2)) } +emit_vpcmpeqd_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append_elem(instructions, inst_vpcmpeqd_xmm_xmm_m128(dst, src, src2)) } +emit_vpcmpeqd_ymm_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM) { append_elem(instructions, inst_vpcmpeqd_ymm_ymm_ymm(dst, src, src2)) } +emit_vpcmpeqd_ymm_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256) { append_elem(instructions, inst_vpcmpeqd_ymm_ymm_m256(dst, src, src2)) } inst_vpcmpeqq_xmm_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPCMPEQQ, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_xmm(src2), {}} }, 1340) } inst_vpcmpeqq_xmm_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .VPCMPEQQ, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_mem(src2.mem, 16), {}} }, 1340) } inst_vpcmpeqq_ymm_ymm_ymm :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: YMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPCMPEQQ, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_ymm(src2), {}} }, 1341) } inst_vpcmpeqq_ymm_ymm_m256 :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: Mem256) -> Instruction { return with_hint(Instruction{ mnemonic = .VPCMPEQQ, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_mem(src2.mem, 32), {}} }, 1341) } -emit_vpcmpeqq_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append(instructions, inst_vpcmpeqq_xmm_xmm_xmm(dst, src, src2)) } -emit_vpcmpeqq_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append(instructions, inst_vpcmpeqq_xmm_xmm_m128(dst, src, src2)) } -emit_vpcmpeqq_ymm_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM) { append(instructions, inst_vpcmpeqq_ymm_ymm_ymm(dst, src, src2)) } -emit_vpcmpeqq_ymm_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256) { append(instructions, inst_vpcmpeqq_ymm_ymm_m256(dst, src, src2)) } +emit_vpcmpeqq_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append_elem(instructions, inst_vpcmpeqq_xmm_xmm_xmm(dst, src, src2)) } +emit_vpcmpeqq_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append_elem(instructions, inst_vpcmpeqq_xmm_xmm_m128(dst, src, src2)) } +emit_vpcmpeqq_ymm_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM) { append_elem(instructions, inst_vpcmpeqq_ymm_ymm_ymm(dst, src, src2)) } +emit_vpcmpeqq_ymm_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256) { append_elem(instructions, inst_vpcmpeqq_ymm_ymm_m256(dst, src, src2)) } inst_vpcmpgtb_xmm_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPCMPGTB, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_xmm(src2), {}} }, 1342) } inst_vpcmpgtb_xmm_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .VPCMPGTB, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_mem(src2.mem, 16), {}} }, 1342) } inst_vpcmpgtb_ymm_ymm_ymm :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: YMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPCMPGTB, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_ymm(src2), {}} }, 1343) } inst_vpcmpgtb_ymm_ymm_m256 :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: Mem256) -> Instruction { return with_hint(Instruction{ mnemonic = .VPCMPGTB, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_mem(src2.mem, 32), {}} }, 1343) } -emit_vpcmpgtb_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append(instructions, inst_vpcmpgtb_xmm_xmm_xmm(dst, src, src2)) } -emit_vpcmpgtb_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append(instructions, inst_vpcmpgtb_xmm_xmm_m128(dst, src, src2)) } -emit_vpcmpgtb_ymm_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM) { append(instructions, inst_vpcmpgtb_ymm_ymm_ymm(dst, src, src2)) } -emit_vpcmpgtb_ymm_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256) { append(instructions, inst_vpcmpgtb_ymm_ymm_m256(dst, src, src2)) } +emit_vpcmpgtb_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append_elem(instructions, inst_vpcmpgtb_xmm_xmm_xmm(dst, src, src2)) } +emit_vpcmpgtb_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append_elem(instructions, inst_vpcmpgtb_xmm_xmm_m128(dst, src, src2)) } +emit_vpcmpgtb_ymm_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM) { append_elem(instructions, inst_vpcmpgtb_ymm_ymm_ymm(dst, src, src2)) } +emit_vpcmpgtb_ymm_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256) { append_elem(instructions, inst_vpcmpgtb_ymm_ymm_m256(dst, src, src2)) } inst_vpcmpgtw_xmm_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPCMPGTW, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_xmm(src2), {}} }, 1344) } inst_vpcmpgtw_xmm_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .VPCMPGTW, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_mem(src2.mem, 16), {}} }, 1344) } inst_vpcmpgtw_ymm_ymm_ymm :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: YMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPCMPGTW, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_ymm(src2), {}} }, 1345) } inst_vpcmpgtw_ymm_ymm_m256 :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: Mem256) -> Instruction { return with_hint(Instruction{ mnemonic = .VPCMPGTW, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_mem(src2.mem, 32), {}} }, 1345) } -emit_vpcmpgtw_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append(instructions, inst_vpcmpgtw_xmm_xmm_xmm(dst, src, src2)) } -emit_vpcmpgtw_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append(instructions, inst_vpcmpgtw_xmm_xmm_m128(dst, src, src2)) } -emit_vpcmpgtw_ymm_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM) { append(instructions, inst_vpcmpgtw_ymm_ymm_ymm(dst, src, src2)) } -emit_vpcmpgtw_ymm_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256) { append(instructions, inst_vpcmpgtw_ymm_ymm_m256(dst, src, src2)) } +emit_vpcmpgtw_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append_elem(instructions, inst_vpcmpgtw_xmm_xmm_xmm(dst, src, src2)) } +emit_vpcmpgtw_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append_elem(instructions, inst_vpcmpgtw_xmm_xmm_m128(dst, src, src2)) } +emit_vpcmpgtw_ymm_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM) { append_elem(instructions, inst_vpcmpgtw_ymm_ymm_ymm(dst, src, src2)) } +emit_vpcmpgtw_ymm_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256) { append_elem(instructions, inst_vpcmpgtw_ymm_ymm_m256(dst, src, src2)) } inst_vpcmpgtd_xmm_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPCMPGTD, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_xmm(src2), {}} }, 1346) } inst_vpcmpgtd_xmm_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .VPCMPGTD, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_mem(src2.mem, 16), {}} }, 1346) } inst_vpcmpgtd_ymm_ymm_ymm :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: YMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPCMPGTD, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_ymm(src2), {}} }, 1347) } inst_vpcmpgtd_ymm_ymm_m256 :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: Mem256) -> Instruction { return with_hint(Instruction{ mnemonic = .VPCMPGTD, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_mem(src2.mem, 32), {}} }, 1347) } -emit_vpcmpgtd_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append(instructions, inst_vpcmpgtd_xmm_xmm_xmm(dst, src, src2)) } -emit_vpcmpgtd_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append(instructions, inst_vpcmpgtd_xmm_xmm_m128(dst, src, src2)) } -emit_vpcmpgtd_ymm_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM) { append(instructions, inst_vpcmpgtd_ymm_ymm_ymm(dst, src, src2)) } -emit_vpcmpgtd_ymm_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256) { append(instructions, inst_vpcmpgtd_ymm_ymm_m256(dst, src, src2)) } +emit_vpcmpgtd_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append_elem(instructions, inst_vpcmpgtd_xmm_xmm_xmm(dst, src, src2)) } +emit_vpcmpgtd_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append_elem(instructions, inst_vpcmpgtd_xmm_xmm_m128(dst, src, src2)) } +emit_vpcmpgtd_ymm_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM) { append_elem(instructions, inst_vpcmpgtd_ymm_ymm_ymm(dst, src, src2)) } +emit_vpcmpgtd_ymm_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256) { append_elem(instructions, inst_vpcmpgtd_ymm_ymm_m256(dst, src, src2)) } inst_vpcmpgtq_xmm_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPCMPGTQ, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_xmm(src2), {}} }, 1348) } inst_vpcmpgtq_xmm_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .VPCMPGTQ, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_mem(src2.mem, 16), {}} }, 1348) } inst_vpcmpgtq_ymm_ymm_ymm :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: YMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPCMPGTQ, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_ymm(src2), {}} }, 1349) } inst_vpcmpgtq_ymm_ymm_m256 :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: Mem256) -> Instruction { return with_hint(Instruction{ mnemonic = .VPCMPGTQ, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_mem(src2.mem, 32), {}} }, 1349) } -emit_vpcmpgtq_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append(instructions, inst_vpcmpgtq_xmm_xmm_xmm(dst, src, src2)) } -emit_vpcmpgtq_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append(instructions, inst_vpcmpgtq_xmm_xmm_m128(dst, src, src2)) } -emit_vpcmpgtq_ymm_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM) { append(instructions, inst_vpcmpgtq_ymm_ymm_ymm(dst, src, src2)) } -emit_vpcmpgtq_ymm_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256) { append(instructions, inst_vpcmpgtq_ymm_ymm_m256(dst, src, src2)) } +emit_vpcmpgtq_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append_elem(instructions, inst_vpcmpgtq_xmm_xmm_xmm(dst, src, src2)) } +emit_vpcmpgtq_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append_elem(instructions, inst_vpcmpgtq_xmm_xmm_m128(dst, src, src2)) } +emit_vpcmpgtq_ymm_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM) { append_elem(instructions, inst_vpcmpgtq_ymm_ymm_ymm(dst, src, src2)) } +emit_vpcmpgtq_ymm_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256) { append_elem(instructions, inst_vpcmpgtq_ymm_ymm_m256(dst, src, src2)) } inst_vpacksswb_xmm_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPACKSSWB, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_xmm(src2), {}} }, 1350) } inst_vpacksswb_xmm_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .VPACKSSWB, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_mem(src2.mem, 16), {}} }, 1350) } inst_vpacksswb_ymm_ymm_ymm :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: YMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPACKSSWB, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_ymm(src2), {}} }, 1351) } inst_vpacksswb_ymm_ymm_m256 :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: Mem256) -> Instruction { return with_hint(Instruction{ mnemonic = .VPACKSSWB, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_mem(src2.mem, 32), {}} }, 1351) } -emit_vpacksswb_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append(instructions, inst_vpacksswb_xmm_xmm_xmm(dst, src, src2)) } -emit_vpacksswb_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append(instructions, inst_vpacksswb_xmm_xmm_m128(dst, src, src2)) } -emit_vpacksswb_ymm_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM) { append(instructions, inst_vpacksswb_ymm_ymm_ymm(dst, src, src2)) } -emit_vpacksswb_ymm_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256) { append(instructions, inst_vpacksswb_ymm_ymm_m256(dst, src, src2)) } +emit_vpacksswb_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append_elem(instructions, inst_vpacksswb_xmm_xmm_xmm(dst, src, src2)) } +emit_vpacksswb_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append_elem(instructions, inst_vpacksswb_xmm_xmm_m128(dst, src, src2)) } +emit_vpacksswb_ymm_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM) { append_elem(instructions, inst_vpacksswb_ymm_ymm_ymm(dst, src, src2)) } +emit_vpacksswb_ymm_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256) { append_elem(instructions, inst_vpacksswb_ymm_ymm_m256(dst, src, src2)) } inst_vpackssdw_xmm_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPACKSSDW, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_xmm(src2), {}} }, 1352) } inst_vpackssdw_xmm_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .VPACKSSDW, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_mem(src2.mem, 16), {}} }, 1352) } inst_vpackssdw_ymm_ymm_ymm :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: YMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPACKSSDW, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_ymm(src2), {}} }, 1353) } inst_vpackssdw_ymm_ymm_m256 :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: Mem256) -> Instruction { return with_hint(Instruction{ mnemonic = .VPACKSSDW, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_mem(src2.mem, 32), {}} }, 1353) } -emit_vpackssdw_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append(instructions, inst_vpackssdw_xmm_xmm_xmm(dst, src, src2)) } -emit_vpackssdw_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append(instructions, inst_vpackssdw_xmm_xmm_m128(dst, src, src2)) } -emit_vpackssdw_ymm_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM) { append(instructions, inst_vpackssdw_ymm_ymm_ymm(dst, src, src2)) } -emit_vpackssdw_ymm_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256) { append(instructions, inst_vpackssdw_ymm_ymm_m256(dst, src, src2)) } +emit_vpackssdw_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append_elem(instructions, inst_vpackssdw_xmm_xmm_xmm(dst, src, src2)) } +emit_vpackssdw_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append_elem(instructions, inst_vpackssdw_xmm_xmm_m128(dst, src, src2)) } +emit_vpackssdw_ymm_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM) { append_elem(instructions, inst_vpackssdw_ymm_ymm_ymm(dst, src, src2)) } +emit_vpackssdw_ymm_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256) { append_elem(instructions, inst_vpackssdw_ymm_ymm_m256(dst, src, src2)) } inst_vpackuswb_xmm_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPACKUSWB, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_xmm(src2), {}} }, 1354) } inst_vpackuswb_xmm_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .VPACKUSWB, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_mem(src2.mem, 16), {}} }, 1354) } inst_vpackuswb_ymm_ymm_ymm :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: YMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPACKUSWB, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_ymm(src2), {}} }, 1355) } inst_vpackuswb_ymm_ymm_m256 :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: Mem256) -> Instruction { return with_hint(Instruction{ mnemonic = .VPACKUSWB, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_mem(src2.mem, 32), {}} }, 1355) } -emit_vpackuswb_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append(instructions, inst_vpackuswb_xmm_xmm_xmm(dst, src, src2)) } -emit_vpackuswb_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append(instructions, inst_vpackuswb_xmm_xmm_m128(dst, src, src2)) } -emit_vpackuswb_ymm_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM) { append(instructions, inst_vpackuswb_ymm_ymm_ymm(dst, src, src2)) } -emit_vpackuswb_ymm_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256) { append(instructions, inst_vpackuswb_ymm_ymm_m256(dst, src, src2)) } +emit_vpackuswb_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append_elem(instructions, inst_vpackuswb_xmm_xmm_xmm(dst, src, src2)) } +emit_vpackuswb_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append_elem(instructions, inst_vpackuswb_xmm_xmm_m128(dst, src, src2)) } +emit_vpackuswb_ymm_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM) { append_elem(instructions, inst_vpackuswb_ymm_ymm_ymm(dst, src, src2)) } +emit_vpackuswb_ymm_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256) { append_elem(instructions, inst_vpackuswb_ymm_ymm_m256(dst, src, src2)) } inst_vpackusdw_xmm_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPACKUSDW, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_xmm(src2), {}} }, 1356) } inst_vpackusdw_xmm_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .VPACKUSDW, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_mem(src2.mem, 16), {}} }, 1356) } inst_vpackusdw_ymm_ymm_ymm :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: YMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPACKUSDW, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_ymm(src2), {}} }, 1357) } inst_vpackusdw_ymm_ymm_m256 :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: Mem256) -> Instruction { return with_hint(Instruction{ mnemonic = .VPACKUSDW, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_mem(src2.mem, 32), {}} }, 1357) } -emit_vpackusdw_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append(instructions, inst_vpackusdw_xmm_xmm_xmm(dst, src, src2)) } -emit_vpackusdw_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append(instructions, inst_vpackusdw_xmm_xmm_m128(dst, src, src2)) } -emit_vpackusdw_ymm_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM) { append(instructions, inst_vpackusdw_ymm_ymm_ymm(dst, src, src2)) } -emit_vpackusdw_ymm_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256) { append(instructions, inst_vpackusdw_ymm_ymm_m256(dst, src, src2)) } +emit_vpackusdw_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append_elem(instructions, inst_vpackusdw_xmm_xmm_xmm(dst, src, src2)) } +emit_vpackusdw_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append_elem(instructions, inst_vpackusdw_xmm_xmm_m128(dst, src, src2)) } +emit_vpackusdw_ymm_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM) { append_elem(instructions, inst_vpackusdw_ymm_ymm_ymm(dst, src, src2)) } +emit_vpackusdw_ymm_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256) { append_elem(instructions, inst_vpackusdw_ymm_ymm_m256(dst, src, src2)) } inst_vpunpcklbw_xmm_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPUNPCKLBW, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_xmm(src2), {}} }, 1358) } inst_vpunpcklbw_xmm_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .VPUNPCKLBW, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_mem(src2.mem, 16), {}} }, 1358) } inst_vpunpcklbw_ymm_ymm_ymm :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: YMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPUNPCKLBW, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_ymm(src2), {}} }, 1359) } inst_vpunpcklbw_ymm_ymm_m256 :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: Mem256) -> Instruction { return with_hint(Instruction{ mnemonic = .VPUNPCKLBW, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_mem(src2.mem, 32), {}} }, 1359) } -emit_vpunpcklbw_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append(instructions, inst_vpunpcklbw_xmm_xmm_xmm(dst, src, src2)) } -emit_vpunpcklbw_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append(instructions, inst_vpunpcklbw_xmm_xmm_m128(dst, src, src2)) } -emit_vpunpcklbw_ymm_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM) { append(instructions, inst_vpunpcklbw_ymm_ymm_ymm(dst, src, src2)) } -emit_vpunpcklbw_ymm_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256) { append(instructions, inst_vpunpcklbw_ymm_ymm_m256(dst, src, src2)) } +emit_vpunpcklbw_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append_elem(instructions, inst_vpunpcklbw_xmm_xmm_xmm(dst, src, src2)) } +emit_vpunpcklbw_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append_elem(instructions, inst_vpunpcklbw_xmm_xmm_m128(dst, src, src2)) } +emit_vpunpcklbw_ymm_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM) { append_elem(instructions, inst_vpunpcklbw_ymm_ymm_ymm(dst, src, src2)) } +emit_vpunpcklbw_ymm_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256) { append_elem(instructions, inst_vpunpcklbw_ymm_ymm_m256(dst, src, src2)) } inst_vpunpcklwd_xmm_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPUNPCKLWD, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_xmm(src2), {}} }, 1360) } inst_vpunpcklwd_xmm_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .VPUNPCKLWD, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_mem(src2.mem, 16), {}} }, 1360) } inst_vpunpcklwd_ymm_ymm_ymm :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: YMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPUNPCKLWD, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_ymm(src2), {}} }, 1361) } inst_vpunpcklwd_ymm_ymm_m256 :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: Mem256) -> Instruction { return with_hint(Instruction{ mnemonic = .VPUNPCKLWD, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_mem(src2.mem, 32), {}} }, 1361) } -emit_vpunpcklwd_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append(instructions, inst_vpunpcklwd_xmm_xmm_xmm(dst, src, src2)) } -emit_vpunpcklwd_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append(instructions, inst_vpunpcklwd_xmm_xmm_m128(dst, src, src2)) } -emit_vpunpcklwd_ymm_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM) { append(instructions, inst_vpunpcklwd_ymm_ymm_ymm(dst, src, src2)) } -emit_vpunpcklwd_ymm_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256) { append(instructions, inst_vpunpcklwd_ymm_ymm_m256(dst, src, src2)) } +emit_vpunpcklwd_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append_elem(instructions, inst_vpunpcklwd_xmm_xmm_xmm(dst, src, src2)) } +emit_vpunpcklwd_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append_elem(instructions, inst_vpunpcklwd_xmm_xmm_m128(dst, src, src2)) } +emit_vpunpcklwd_ymm_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM) { append_elem(instructions, inst_vpunpcklwd_ymm_ymm_ymm(dst, src, src2)) } +emit_vpunpcklwd_ymm_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256) { append_elem(instructions, inst_vpunpcklwd_ymm_ymm_m256(dst, src, src2)) } inst_vpunpckldq_xmm_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPUNPCKLDQ, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_xmm(src2), {}} }, 1362) } inst_vpunpckldq_xmm_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .VPUNPCKLDQ, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_mem(src2.mem, 16), {}} }, 1362) } inst_vpunpckldq_ymm_ymm_ymm :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: YMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPUNPCKLDQ, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_ymm(src2), {}} }, 1363) } inst_vpunpckldq_ymm_ymm_m256 :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: Mem256) -> Instruction { return with_hint(Instruction{ mnemonic = .VPUNPCKLDQ, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_mem(src2.mem, 32), {}} }, 1363) } -emit_vpunpckldq_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append(instructions, inst_vpunpckldq_xmm_xmm_xmm(dst, src, src2)) } -emit_vpunpckldq_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append(instructions, inst_vpunpckldq_xmm_xmm_m128(dst, src, src2)) } -emit_vpunpckldq_ymm_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM) { append(instructions, inst_vpunpckldq_ymm_ymm_ymm(dst, src, src2)) } -emit_vpunpckldq_ymm_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256) { append(instructions, inst_vpunpckldq_ymm_ymm_m256(dst, src, src2)) } +emit_vpunpckldq_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append_elem(instructions, inst_vpunpckldq_xmm_xmm_xmm(dst, src, src2)) } +emit_vpunpckldq_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append_elem(instructions, inst_vpunpckldq_xmm_xmm_m128(dst, src, src2)) } +emit_vpunpckldq_ymm_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM) { append_elem(instructions, inst_vpunpckldq_ymm_ymm_ymm(dst, src, src2)) } +emit_vpunpckldq_ymm_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256) { append_elem(instructions, inst_vpunpckldq_ymm_ymm_m256(dst, src, src2)) } inst_vpunpcklqdq_xmm_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPUNPCKLQDQ, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_xmm(src2), {}} }, 1364) } inst_vpunpcklqdq_xmm_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .VPUNPCKLQDQ, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_mem(src2.mem, 16), {}} }, 1364) } inst_vpunpcklqdq_ymm_ymm_ymm :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: YMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPUNPCKLQDQ, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_ymm(src2), {}} }, 1365) } inst_vpunpcklqdq_ymm_ymm_m256 :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: Mem256) -> Instruction { return with_hint(Instruction{ mnemonic = .VPUNPCKLQDQ, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_mem(src2.mem, 32), {}} }, 1365) } -emit_vpunpcklqdq_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append(instructions, inst_vpunpcklqdq_xmm_xmm_xmm(dst, src, src2)) } -emit_vpunpcklqdq_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append(instructions, inst_vpunpcklqdq_xmm_xmm_m128(dst, src, src2)) } -emit_vpunpcklqdq_ymm_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM) { append(instructions, inst_vpunpcklqdq_ymm_ymm_ymm(dst, src, src2)) } -emit_vpunpcklqdq_ymm_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256) { append(instructions, inst_vpunpcklqdq_ymm_ymm_m256(dst, src, src2)) } +emit_vpunpcklqdq_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append_elem(instructions, inst_vpunpcklqdq_xmm_xmm_xmm(dst, src, src2)) } +emit_vpunpcklqdq_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append_elem(instructions, inst_vpunpcklqdq_xmm_xmm_m128(dst, src, src2)) } +emit_vpunpcklqdq_ymm_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM) { append_elem(instructions, inst_vpunpcklqdq_ymm_ymm_ymm(dst, src, src2)) } +emit_vpunpcklqdq_ymm_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256) { append_elem(instructions, inst_vpunpcklqdq_ymm_ymm_m256(dst, src, src2)) } inst_vpunpckhbw_xmm_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPUNPCKHBW, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_xmm(src2), {}} }, 1366) } inst_vpunpckhbw_xmm_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .VPUNPCKHBW, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_mem(src2.mem, 16), {}} }, 1366) } inst_vpunpckhbw_ymm_ymm_ymm :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: YMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPUNPCKHBW, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_ymm(src2), {}} }, 1367) } inst_vpunpckhbw_ymm_ymm_m256 :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: Mem256) -> Instruction { return with_hint(Instruction{ mnemonic = .VPUNPCKHBW, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_mem(src2.mem, 32), {}} }, 1367) } -emit_vpunpckhbw_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append(instructions, inst_vpunpckhbw_xmm_xmm_xmm(dst, src, src2)) } -emit_vpunpckhbw_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append(instructions, inst_vpunpckhbw_xmm_xmm_m128(dst, src, src2)) } -emit_vpunpckhbw_ymm_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM) { append(instructions, inst_vpunpckhbw_ymm_ymm_ymm(dst, src, src2)) } -emit_vpunpckhbw_ymm_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256) { append(instructions, inst_vpunpckhbw_ymm_ymm_m256(dst, src, src2)) } +emit_vpunpckhbw_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append_elem(instructions, inst_vpunpckhbw_xmm_xmm_xmm(dst, src, src2)) } +emit_vpunpckhbw_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append_elem(instructions, inst_vpunpckhbw_xmm_xmm_m128(dst, src, src2)) } +emit_vpunpckhbw_ymm_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM) { append_elem(instructions, inst_vpunpckhbw_ymm_ymm_ymm(dst, src, src2)) } +emit_vpunpckhbw_ymm_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256) { append_elem(instructions, inst_vpunpckhbw_ymm_ymm_m256(dst, src, src2)) } inst_vpunpckhwd_xmm_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPUNPCKHWD, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_xmm(src2), {}} }, 1368) } inst_vpunpckhwd_xmm_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .VPUNPCKHWD, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_mem(src2.mem, 16), {}} }, 1368) } inst_vpunpckhwd_ymm_ymm_ymm :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: YMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPUNPCKHWD, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_ymm(src2), {}} }, 1369) } inst_vpunpckhwd_ymm_ymm_m256 :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: Mem256) -> Instruction { return with_hint(Instruction{ mnemonic = .VPUNPCKHWD, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_mem(src2.mem, 32), {}} }, 1369) } -emit_vpunpckhwd_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append(instructions, inst_vpunpckhwd_xmm_xmm_xmm(dst, src, src2)) } -emit_vpunpckhwd_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append(instructions, inst_vpunpckhwd_xmm_xmm_m128(dst, src, src2)) } -emit_vpunpckhwd_ymm_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM) { append(instructions, inst_vpunpckhwd_ymm_ymm_ymm(dst, src, src2)) } -emit_vpunpckhwd_ymm_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256) { append(instructions, inst_vpunpckhwd_ymm_ymm_m256(dst, src, src2)) } +emit_vpunpckhwd_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append_elem(instructions, inst_vpunpckhwd_xmm_xmm_xmm(dst, src, src2)) } +emit_vpunpckhwd_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append_elem(instructions, inst_vpunpckhwd_xmm_xmm_m128(dst, src, src2)) } +emit_vpunpckhwd_ymm_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM) { append_elem(instructions, inst_vpunpckhwd_ymm_ymm_ymm(dst, src, src2)) } +emit_vpunpckhwd_ymm_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256) { append_elem(instructions, inst_vpunpckhwd_ymm_ymm_m256(dst, src, src2)) } inst_vpunpckhdq_xmm_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPUNPCKHDQ, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_xmm(src2), {}} }, 1370) } inst_vpunpckhdq_xmm_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .VPUNPCKHDQ, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_mem(src2.mem, 16), {}} }, 1370) } inst_vpunpckhdq_ymm_ymm_ymm :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: YMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPUNPCKHDQ, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_ymm(src2), {}} }, 1371) } inst_vpunpckhdq_ymm_ymm_m256 :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: Mem256) -> Instruction { return with_hint(Instruction{ mnemonic = .VPUNPCKHDQ, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_mem(src2.mem, 32), {}} }, 1371) } -emit_vpunpckhdq_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append(instructions, inst_vpunpckhdq_xmm_xmm_xmm(dst, src, src2)) } -emit_vpunpckhdq_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append(instructions, inst_vpunpckhdq_xmm_xmm_m128(dst, src, src2)) } -emit_vpunpckhdq_ymm_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM) { append(instructions, inst_vpunpckhdq_ymm_ymm_ymm(dst, src, src2)) } -emit_vpunpckhdq_ymm_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256) { append(instructions, inst_vpunpckhdq_ymm_ymm_m256(dst, src, src2)) } +emit_vpunpckhdq_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append_elem(instructions, inst_vpunpckhdq_xmm_xmm_xmm(dst, src, src2)) } +emit_vpunpckhdq_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append_elem(instructions, inst_vpunpckhdq_xmm_xmm_m128(dst, src, src2)) } +emit_vpunpckhdq_ymm_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM) { append_elem(instructions, inst_vpunpckhdq_ymm_ymm_ymm(dst, src, src2)) } +emit_vpunpckhdq_ymm_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256) { append_elem(instructions, inst_vpunpckhdq_ymm_ymm_m256(dst, src, src2)) } inst_vpunpckhqdq_xmm_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPUNPCKHQDQ, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_xmm(src2), {}} }, 1372) } inst_vpunpckhqdq_xmm_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .VPUNPCKHQDQ, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_mem(src2.mem, 16), {}} }, 1372) } inst_vpunpckhqdq_ymm_ymm_ymm :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: YMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPUNPCKHQDQ, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_ymm(src2), {}} }, 1373) } inst_vpunpckhqdq_ymm_ymm_m256 :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: Mem256) -> Instruction { return with_hint(Instruction{ mnemonic = .VPUNPCKHQDQ, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_mem(src2.mem, 32), {}} }, 1373) } -emit_vpunpckhqdq_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append(instructions, inst_vpunpckhqdq_xmm_xmm_xmm(dst, src, src2)) } -emit_vpunpckhqdq_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append(instructions, inst_vpunpckhqdq_xmm_xmm_m128(dst, src, src2)) } -emit_vpunpckhqdq_ymm_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM) { append(instructions, inst_vpunpckhqdq_ymm_ymm_ymm(dst, src, src2)) } -emit_vpunpckhqdq_ymm_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256) { append(instructions, inst_vpunpckhqdq_ymm_ymm_m256(dst, src, src2)) } +emit_vpunpckhqdq_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append_elem(instructions, inst_vpunpckhqdq_xmm_xmm_xmm(dst, src, src2)) } +emit_vpunpckhqdq_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append_elem(instructions, inst_vpunpckhqdq_xmm_xmm_m128(dst, src, src2)) } +emit_vpunpckhqdq_ymm_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM) { append_elem(instructions, inst_vpunpckhqdq_ymm_ymm_ymm(dst, src, src2)) } +emit_vpunpckhqdq_ymm_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256) { append_elem(instructions, inst_vpunpckhqdq_ymm_ymm_m256(dst, src, src2)) } inst_vpshufd_xmm_xmm_imm8 :: #force_inline proc "contextless" (dst: XMM, src: XMM, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .VPSHUFD, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_imm8(imm), {}} }, 1374) } inst_vpshufd_xmm_m128_imm8 :: #force_inline proc "contextless" (dst: XMM, src: Mem128, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .VPSHUFD, operand_count = 3, ops = {op_xmm(dst), op_mem(src.mem, 16), op_imm8(imm), {}} }, 1374) } inst_vpshufd_ymm_ymm_imm8 :: #force_inline proc "contextless" (dst: YMM, src: YMM, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .VPSHUFD, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_imm8(imm), {}} }, 1375) } inst_vpshufd_ymm_m256_imm8 :: #force_inline proc "contextless" (dst: YMM, src: Mem256, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .VPSHUFD, operand_count = 3, ops = {op_ymm(dst), op_mem(src.mem, 32), op_imm8(imm), {}} }, 1375) } -emit_vpshufd_xmm_xmm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, imm: i8) { append(instructions, inst_vpshufd_xmm_xmm_imm8(dst, src, imm)) } -emit_vpshufd_xmm_m128_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128, imm: i8) { append(instructions, inst_vpshufd_xmm_m128_imm8(dst, src, imm)) } -emit_vpshufd_ymm_ymm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, imm: i8) { append(instructions, inst_vpshufd_ymm_ymm_imm8(dst, src, imm)) } -emit_vpshufd_ymm_m256_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: Mem256, imm: i8) { append(instructions, inst_vpshufd_ymm_m256_imm8(dst, src, imm)) } +emit_vpshufd_xmm_xmm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, imm: i8) { append_elem(instructions, inst_vpshufd_xmm_xmm_imm8(dst, src, imm)) } +emit_vpshufd_xmm_m128_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128, imm: i8) { append_elem(instructions, inst_vpshufd_xmm_m128_imm8(dst, src, imm)) } +emit_vpshufd_ymm_ymm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, imm: i8) { append_elem(instructions, inst_vpshufd_ymm_ymm_imm8(dst, src, imm)) } +emit_vpshufd_ymm_m256_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: Mem256, imm: i8) { append_elem(instructions, inst_vpshufd_ymm_m256_imm8(dst, src, imm)) } inst_vpshufhw_xmm_xmm_imm8 :: #force_inline proc "contextless" (dst: XMM, src: XMM, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .VPSHUFHW, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_imm8(imm), {}} }, 1376) } inst_vpshufhw_xmm_m128_imm8 :: #force_inline proc "contextless" (dst: XMM, src: Mem128, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .VPSHUFHW, operand_count = 3, ops = {op_xmm(dst), op_mem(src.mem, 16), op_imm8(imm), {}} }, 1376) } inst_vpshufhw_ymm_ymm_imm8 :: #force_inline proc "contextless" (dst: YMM, src: YMM, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .VPSHUFHW, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_imm8(imm), {}} }, 1377) } inst_vpshufhw_ymm_m256_imm8 :: #force_inline proc "contextless" (dst: YMM, src: Mem256, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .VPSHUFHW, operand_count = 3, ops = {op_ymm(dst), op_mem(src.mem, 32), op_imm8(imm), {}} }, 1377) } -emit_vpshufhw_xmm_xmm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, imm: i8) { append(instructions, inst_vpshufhw_xmm_xmm_imm8(dst, src, imm)) } -emit_vpshufhw_xmm_m128_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128, imm: i8) { append(instructions, inst_vpshufhw_xmm_m128_imm8(dst, src, imm)) } -emit_vpshufhw_ymm_ymm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, imm: i8) { append(instructions, inst_vpshufhw_ymm_ymm_imm8(dst, src, imm)) } -emit_vpshufhw_ymm_m256_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: Mem256, imm: i8) { append(instructions, inst_vpshufhw_ymm_m256_imm8(dst, src, imm)) } +emit_vpshufhw_xmm_xmm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, imm: i8) { append_elem(instructions, inst_vpshufhw_xmm_xmm_imm8(dst, src, imm)) } +emit_vpshufhw_xmm_m128_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128, imm: i8) { append_elem(instructions, inst_vpshufhw_xmm_m128_imm8(dst, src, imm)) } +emit_vpshufhw_ymm_ymm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, imm: i8) { append_elem(instructions, inst_vpshufhw_ymm_ymm_imm8(dst, src, imm)) } +emit_vpshufhw_ymm_m256_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: Mem256, imm: i8) { append_elem(instructions, inst_vpshufhw_ymm_m256_imm8(dst, src, imm)) } inst_vpshuflw_xmm_xmm_imm8 :: #force_inline proc "contextless" (dst: XMM, src: XMM, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .VPSHUFLW, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_imm8(imm), {}} }, 1378) } inst_vpshuflw_xmm_m128_imm8 :: #force_inline proc "contextless" (dst: XMM, src: Mem128, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .VPSHUFLW, operand_count = 3, ops = {op_xmm(dst), op_mem(src.mem, 16), op_imm8(imm), {}} }, 1378) } inst_vpshuflw_ymm_ymm_imm8 :: #force_inline proc "contextless" (dst: YMM, src: YMM, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .VPSHUFLW, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_imm8(imm), {}} }, 1379) } inst_vpshuflw_ymm_m256_imm8 :: #force_inline proc "contextless" (dst: YMM, src: Mem256, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .VPSHUFLW, operand_count = 3, ops = {op_ymm(dst), op_mem(src.mem, 32), op_imm8(imm), {}} }, 1379) } -emit_vpshuflw_xmm_xmm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, imm: i8) { append(instructions, inst_vpshuflw_xmm_xmm_imm8(dst, src, imm)) } -emit_vpshuflw_xmm_m128_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128, imm: i8) { append(instructions, inst_vpshuflw_xmm_m128_imm8(dst, src, imm)) } -emit_vpshuflw_ymm_ymm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, imm: i8) { append(instructions, inst_vpshuflw_ymm_ymm_imm8(dst, src, imm)) } -emit_vpshuflw_ymm_m256_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: Mem256, imm: i8) { append(instructions, inst_vpshuflw_ymm_m256_imm8(dst, src, imm)) } +emit_vpshuflw_xmm_xmm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, imm: i8) { append_elem(instructions, inst_vpshuflw_xmm_xmm_imm8(dst, src, imm)) } +emit_vpshuflw_xmm_m128_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128, imm: i8) { append_elem(instructions, inst_vpshuflw_xmm_m128_imm8(dst, src, imm)) } +emit_vpshuflw_ymm_ymm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, imm: i8) { append_elem(instructions, inst_vpshuflw_ymm_ymm_imm8(dst, src, imm)) } +emit_vpshuflw_ymm_m256_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: Mem256, imm: i8) { append_elem(instructions, inst_vpshuflw_ymm_m256_imm8(dst, src, imm)) } inst_vpextrb_r8_xmm_imm8 :: #force_inline proc "contextless" (dst: GPR8, src: XMM, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .VPEXTRB, operand_count = 3, ops = {op_gpr8(dst), op_xmm(src), op_imm8(imm), {}} }, 1380) } inst_vpextrb_m8_xmm_imm8 :: #force_inline proc "contextless" (dst: Mem8, src: XMM, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .VPEXTRB, operand_count = 3, ops = {op_mem(dst.mem, 1), op_xmm(src), op_imm8(imm), {}} }, 1380) } -emit_vpextrb_r8_xmm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR8, src: XMM, imm: i8) { append(instructions, inst_vpextrb_r8_xmm_imm8(dst, src, imm)) } -emit_vpextrb_m8_xmm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem8, src: XMM, imm: i8) { append(instructions, inst_vpextrb_m8_xmm_imm8(dst, src, imm)) } +emit_vpextrb_r8_xmm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR8, src: XMM, imm: i8) { append_elem(instructions, inst_vpextrb_r8_xmm_imm8(dst, src, imm)) } +emit_vpextrb_m8_xmm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem8, src: XMM, imm: i8) { append_elem(instructions, inst_vpextrb_m8_xmm_imm8(dst, src, imm)) } inst_vpextrw_r32_xmm_imm8 :: #force_inline proc "contextless" (dst: GPR32, src: XMM, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .VPEXTRW, operand_count = 3, ops = {op_gpr32(dst), op_xmm(src), op_imm8(imm), {}} }, 1381) } inst_vpextrw_r16_xmm_imm8 :: #force_inline proc "contextless" (dst: GPR16, src: XMM, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .VPEXTRW, operand_count = 3, ops = {op_gpr16(dst), op_xmm(src), op_imm8(imm), {}} }, 1382) } inst_vpextrw_m16_xmm_imm8 :: #force_inline proc "contextless" (dst: Mem16, src: XMM, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .VPEXTRW, operand_count = 3, ops = {op_mem(dst.mem, 2), op_xmm(src), op_imm8(imm), {}} }, 1382) } -emit_vpextrw_r32_xmm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: XMM, imm: i8) { append(instructions, inst_vpextrw_r32_xmm_imm8(dst, src, imm)) } -emit_vpextrw_r16_xmm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR16, src: XMM, imm: i8) { append(instructions, inst_vpextrw_r16_xmm_imm8(dst, src, imm)) } -emit_vpextrw_m16_xmm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem16, src: XMM, imm: i8) { append(instructions, inst_vpextrw_m16_xmm_imm8(dst, src, imm)) } +emit_vpextrw_r32_xmm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: XMM, imm: i8) { append_elem(instructions, inst_vpextrw_r32_xmm_imm8(dst, src, imm)) } +emit_vpextrw_r16_xmm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR16, src: XMM, imm: i8) { append_elem(instructions, inst_vpextrw_r16_xmm_imm8(dst, src, imm)) } +emit_vpextrw_m16_xmm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem16, src: XMM, imm: i8) { append_elem(instructions, inst_vpextrw_m16_xmm_imm8(dst, src, imm)) } inst_vpextrd_r32_xmm_imm8 :: #force_inline proc "contextless" (dst: GPR32, src: XMM, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .VPEXTRD, operand_count = 3, ops = {op_gpr32(dst), op_xmm(src), op_imm8(imm), {}} }, 1383) } inst_vpextrd_m32_xmm_imm8 :: #force_inline proc "contextless" (dst: Mem32, src: XMM, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .VPEXTRD, operand_count = 3, ops = {op_mem(dst.mem, 4), op_xmm(src), op_imm8(imm), {}} }, 1383) } -emit_vpextrd_r32_xmm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: XMM, imm: i8) { append(instructions, inst_vpextrd_r32_xmm_imm8(dst, src, imm)) } -emit_vpextrd_m32_xmm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem32, src: XMM, imm: i8) { append(instructions, inst_vpextrd_m32_xmm_imm8(dst, src, imm)) } +emit_vpextrd_r32_xmm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: XMM, imm: i8) { append_elem(instructions, inst_vpextrd_r32_xmm_imm8(dst, src, imm)) } +emit_vpextrd_m32_xmm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem32, src: XMM, imm: i8) { append_elem(instructions, inst_vpextrd_m32_xmm_imm8(dst, src, imm)) } inst_vpextrq_r64_xmm_imm8 :: #force_inline proc "contextless" (dst: GPR64, src: XMM, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .VPEXTRQ, operand_count = 3, ops = {op_gpr64(dst), op_xmm(src), op_imm8(imm), {}} }, 1384) } inst_vpextrq_m64_xmm_imm8 :: #force_inline proc "contextless" (dst: Mem64, src: XMM, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .VPEXTRQ, operand_count = 3, ops = {op_mem(dst.mem, 8), op_xmm(src), op_imm8(imm), {}} }, 1384) } -emit_vpextrq_r64_xmm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: XMM, imm: i8) { append(instructions, inst_vpextrq_r64_xmm_imm8(dst, src, imm)) } -emit_vpextrq_m64_xmm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem64, src: XMM, imm: i8) { append(instructions, inst_vpextrq_m64_xmm_imm8(dst, src, imm)) } +emit_vpextrq_r64_xmm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: XMM, imm: i8) { append_elem(instructions, inst_vpextrq_r64_xmm_imm8(dst, src, imm)) } +emit_vpextrq_m64_xmm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem64, src: XMM, imm: i8) { append_elem(instructions, inst_vpextrq_m64_xmm_imm8(dst, src, imm)) } inst_vpinsrb_xmm_xmm_r8_imm8 :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: GPR8, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .VPINSRB, operand_count = 4, ops = {op_xmm(dst), op_xmm(src), op_gpr8(src2), op_imm8(imm)} }, 1385) } inst_vpinsrb_xmm_xmm_m8_imm8 :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: Mem8, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .VPINSRB, operand_count = 4, ops = {op_xmm(dst), op_xmm(src), op_mem(src2.mem, 1), op_imm8(imm)} }, 1385) } -emit_vpinsrb_xmm_xmm_r8_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: GPR8, imm: i8) { append(instructions, inst_vpinsrb_xmm_xmm_r8_imm8(dst, src, src2, imm)) } -emit_vpinsrb_xmm_xmm_m8_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem8, imm: i8) { append(instructions, inst_vpinsrb_xmm_xmm_m8_imm8(dst, src, src2, imm)) } +emit_vpinsrb_xmm_xmm_r8_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: GPR8, imm: i8) { append_elem(instructions, inst_vpinsrb_xmm_xmm_r8_imm8(dst, src, src2, imm)) } +emit_vpinsrb_xmm_xmm_m8_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem8, imm: i8) { append_elem(instructions, inst_vpinsrb_xmm_xmm_m8_imm8(dst, src, src2, imm)) } inst_vpinsrw_xmm_xmm_r16_imm8 :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: GPR16, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .VPINSRW, operand_count = 4, ops = {op_xmm(dst), op_xmm(src), op_gpr16(src2), op_imm8(imm)} }, 1386) } inst_vpinsrw_xmm_xmm_m16_imm8 :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: Mem16, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .VPINSRW, operand_count = 4, ops = {op_xmm(dst), op_xmm(src), op_mem(src2.mem, 2), op_imm8(imm)} }, 1386) } -emit_vpinsrw_xmm_xmm_r16_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: GPR16, imm: i8) { append(instructions, inst_vpinsrw_xmm_xmm_r16_imm8(dst, src, src2, imm)) } -emit_vpinsrw_xmm_xmm_m16_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem16, imm: i8) { append(instructions, inst_vpinsrw_xmm_xmm_m16_imm8(dst, src, src2, imm)) } +emit_vpinsrw_xmm_xmm_r16_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: GPR16, imm: i8) { append_elem(instructions, inst_vpinsrw_xmm_xmm_r16_imm8(dst, src, src2, imm)) } +emit_vpinsrw_xmm_xmm_m16_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem16, imm: i8) { append_elem(instructions, inst_vpinsrw_xmm_xmm_m16_imm8(dst, src, src2, imm)) } inst_vpinsrd_xmm_xmm_r32_imm8 :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: GPR32, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .VPINSRD, operand_count = 4, ops = {op_xmm(dst), op_xmm(src), op_gpr32(src2), op_imm8(imm)} }, 1387) } inst_vpinsrd_xmm_xmm_m32_imm8 :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: Mem32, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .VPINSRD, operand_count = 4, ops = {op_xmm(dst), op_xmm(src), op_mem(src2.mem, 4), op_imm8(imm)} }, 1387) } -emit_vpinsrd_xmm_xmm_r32_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: GPR32, imm: i8) { append(instructions, inst_vpinsrd_xmm_xmm_r32_imm8(dst, src, src2, imm)) } -emit_vpinsrd_xmm_xmm_m32_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem32, imm: i8) { append(instructions, inst_vpinsrd_xmm_xmm_m32_imm8(dst, src, src2, imm)) } +emit_vpinsrd_xmm_xmm_r32_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: GPR32, imm: i8) { append_elem(instructions, inst_vpinsrd_xmm_xmm_r32_imm8(dst, src, src2, imm)) } +emit_vpinsrd_xmm_xmm_m32_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem32, imm: i8) { append_elem(instructions, inst_vpinsrd_xmm_xmm_m32_imm8(dst, src, src2, imm)) } inst_vpinsrq_xmm_xmm_r64_imm8 :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: GPR64, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .VPINSRQ, operand_count = 4, ops = {op_xmm(dst), op_xmm(src), op_gpr64(src2), op_imm8(imm)} }, 1388) } inst_vpinsrq_xmm_xmm_m64_imm8 :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: Mem64, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .VPINSRQ, operand_count = 4, ops = {op_xmm(dst), op_xmm(src), op_mem(src2.mem, 8), op_imm8(imm)} }, 1388) } -emit_vpinsrq_xmm_xmm_r64_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: GPR64, imm: i8) { append(instructions, inst_vpinsrq_xmm_xmm_r64_imm8(dst, src, src2, imm)) } -emit_vpinsrq_xmm_xmm_m64_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem64, imm: i8) { append(instructions, inst_vpinsrq_xmm_xmm_m64_imm8(dst, src, src2, imm)) } +emit_vpinsrq_xmm_xmm_r64_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: GPR64, imm: i8) { append_elem(instructions, inst_vpinsrq_xmm_xmm_r64_imm8(dst, src, src2, imm)) } +emit_vpinsrq_xmm_xmm_m64_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem64, imm: i8) { append_elem(instructions, inst_vpinsrq_xmm_xmm_m64_imm8(dst, src, src2, imm)) } inst_vpmovmskb_r32_xmm :: #force_inline proc "contextless" (dst: GPR32, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPMOVMSKB, operand_count = 2, ops = {op_gpr32(dst), op_xmm(src), {}, {}} }, 1389) } inst_vpmovmskb_r32_ymm :: #force_inline proc "contextless" (dst: GPR32, src: YMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPMOVMSKB, operand_count = 2, ops = {op_gpr32(dst), op_ymm(src), {}, {}} }, 1390) } -emit_vpmovmskb_r32_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: XMM) { append(instructions, inst_vpmovmskb_r32_xmm(dst, src)) } -emit_vpmovmskb_r32_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: YMM) { append(instructions, inst_vpmovmskb_r32_ymm(dst, src)) } +emit_vpmovmskb_r32_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: XMM) { append_elem(instructions, inst_vpmovmskb_r32_xmm(dst, src)) } +emit_vpmovmskb_r32_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: YMM) { append_elem(instructions, inst_vpmovmskb_r32_ymm(dst, src)) } inst_vptest_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPTEST, operand_count = 2, ops = {op_xmm(dst), op_xmm(src), {}, {}} }, 1391) } inst_vptest_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .VPTEST, operand_count = 2, ops = {op_xmm(dst), op_mem(src.mem, 16), {}, {}} }, 1391) } inst_vptest_ymm_ymm :: #force_inline proc "contextless" (dst: YMM, src: YMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPTEST, operand_count = 2, ops = {op_ymm(dst), op_ymm(src), {}, {}} }, 1392) } inst_vptest_ymm_m256 :: #force_inline proc "contextless" (dst: YMM, src: Mem256) -> Instruction { return with_hint(Instruction{ mnemonic = .VPTEST, operand_count = 2, ops = {op_ymm(dst), op_mem(src.mem, 32), {}, {}} }, 1392) } -emit_vptest_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append(instructions, inst_vptest_xmm_xmm(dst, src)) } -emit_vptest_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append(instructions, inst_vptest_xmm_m128(dst, src)) } -emit_vptest_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM) { append(instructions, inst_vptest_ymm_ymm(dst, src)) } -emit_vptest_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: Mem256) { append(instructions, inst_vptest_ymm_m256(dst, src)) } +emit_vptest_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append_elem(instructions, inst_vptest_xmm_xmm(dst, src)) } +emit_vptest_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append_elem(instructions, inst_vptest_xmm_m128(dst, src)) } +emit_vptest_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM) { append_elem(instructions, inst_vptest_ymm_ymm(dst, src)) } +emit_vptest_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: Mem256) { append_elem(instructions, inst_vptest_ymm_m256(dst, src)) } inst_vpshufb_xmm_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPSHUFB, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_xmm(src2), {}} }, 1393) } inst_vpshufb_xmm_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .VPSHUFB, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_mem(src2.mem, 16), {}} }, 1393) } inst_vpshufb_ymm_ymm_ymm :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: YMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPSHUFB, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_ymm(src2), {}} }, 1394) } inst_vpshufb_ymm_ymm_m256 :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: Mem256) -> Instruction { return with_hint(Instruction{ mnemonic = .VPSHUFB, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_mem(src2.mem, 32), {}} }, 1394) } -emit_vpshufb_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append(instructions, inst_vpshufb_xmm_xmm_xmm(dst, src, src2)) } -emit_vpshufb_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append(instructions, inst_vpshufb_xmm_xmm_m128(dst, src, src2)) } -emit_vpshufb_ymm_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM) { append(instructions, inst_vpshufb_ymm_ymm_ymm(dst, src, src2)) } -emit_vpshufb_ymm_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256) { append(instructions, inst_vpshufb_ymm_ymm_m256(dst, src, src2)) } +emit_vpshufb_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append_elem(instructions, inst_vpshufb_xmm_xmm_xmm(dst, src, src2)) } +emit_vpshufb_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append_elem(instructions, inst_vpshufb_xmm_xmm_m128(dst, src, src2)) } +emit_vpshufb_ymm_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM) { append_elem(instructions, inst_vpshufb_ymm_ymm_ymm(dst, src, src2)) } +emit_vpshufb_ymm_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256) { append_elem(instructions, inst_vpshufb_ymm_ymm_m256(dst, src, src2)) } inst_vphaddw_xmm_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPHADDW, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_xmm(src2), {}} }, 1395) } inst_vphaddw_xmm_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .VPHADDW, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_mem(src2.mem, 16), {}} }, 1395) } inst_vphaddw_ymm_ymm_ymm :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: YMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPHADDW, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_ymm(src2), {}} }, 1396) } inst_vphaddw_ymm_ymm_m256 :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: Mem256) -> Instruction { return with_hint(Instruction{ mnemonic = .VPHADDW, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_mem(src2.mem, 32), {}} }, 1396) } -emit_vphaddw_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append(instructions, inst_vphaddw_xmm_xmm_xmm(dst, src, src2)) } -emit_vphaddw_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append(instructions, inst_vphaddw_xmm_xmm_m128(dst, src, src2)) } -emit_vphaddw_ymm_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM) { append(instructions, inst_vphaddw_ymm_ymm_ymm(dst, src, src2)) } -emit_vphaddw_ymm_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256) { append(instructions, inst_vphaddw_ymm_ymm_m256(dst, src, src2)) } +emit_vphaddw_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append_elem(instructions, inst_vphaddw_xmm_xmm_xmm(dst, src, src2)) } +emit_vphaddw_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append_elem(instructions, inst_vphaddw_xmm_xmm_m128(dst, src, src2)) } +emit_vphaddw_ymm_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM) { append_elem(instructions, inst_vphaddw_ymm_ymm_ymm(dst, src, src2)) } +emit_vphaddw_ymm_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256) { append_elem(instructions, inst_vphaddw_ymm_ymm_m256(dst, src, src2)) } inst_vphaddd_xmm_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPHADDD, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_xmm(src2), {}} }, 1397) } inst_vphaddd_xmm_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .VPHADDD, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_mem(src2.mem, 16), {}} }, 1397) } inst_vphaddd_ymm_ymm_ymm :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: YMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPHADDD, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_ymm(src2), {}} }, 1398) } inst_vphaddd_ymm_ymm_m256 :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: Mem256) -> Instruction { return with_hint(Instruction{ mnemonic = .VPHADDD, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_mem(src2.mem, 32), {}} }, 1398) } -emit_vphaddd_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append(instructions, inst_vphaddd_xmm_xmm_xmm(dst, src, src2)) } -emit_vphaddd_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append(instructions, inst_vphaddd_xmm_xmm_m128(dst, src, src2)) } -emit_vphaddd_ymm_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM) { append(instructions, inst_vphaddd_ymm_ymm_ymm(dst, src, src2)) } -emit_vphaddd_ymm_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256) { append(instructions, inst_vphaddd_ymm_ymm_m256(dst, src, src2)) } +emit_vphaddd_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append_elem(instructions, inst_vphaddd_xmm_xmm_xmm(dst, src, src2)) } +emit_vphaddd_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append_elem(instructions, inst_vphaddd_xmm_xmm_m128(dst, src, src2)) } +emit_vphaddd_ymm_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM) { append_elem(instructions, inst_vphaddd_ymm_ymm_ymm(dst, src, src2)) } +emit_vphaddd_ymm_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256) { append_elem(instructions, inst_vphaddd_ymm_ymm_m256(dst, src, src2)) } inst_vphaddsw_xmm_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPHADDSW, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_xmm(src2), {}} }, 1399) } inst_vphaddsw_xmm_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .VPHADDSW, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_mem(src2.mem, 16), {}} }, 1399) } inst_vphaddsw_ymm_ymm_ymm :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: YMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPHADDSW, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_ymm(src2), {}} }, 1400) } inst_vphaddsw_ymm_ymm_m256 :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: Mem256) -> Instruction { return with_hint(Instruction{ mnemonic = .VPHADDSW, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_mem(src2.mem, 32), {}} }, 1400) } -emit_vphaddsw_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append(instructions, inst_vphaddsw_xmm_xmm_xmm(dst, src, src2)) } -emit_vphaddsw_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append(instructions, inst_vphaddsw_xmm_xmm_m128(dst, src, src2)) } -emit_vphaddsw_ymm_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM) { append(instructions, inst_vphaddsw_ymm_ymm_ymm(dst, src, src2)) } -emit_vphaddsw_ymm_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256) { append(instructions, inst_vphaddsw_ymm_ymm_m256(dst, src, src2)) } +emit_vphaddsw_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append_elem(instructions, inst_vphaddsw_xmm_xmm_xmm(dst, src, src2)) } +emit_vphaddsw_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append_elem(instructions, inst_vphaddsw_xmm_xmm_m128(dst, src, src2)) } +emit_vphaddsw_ymm_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM) { append_elem(instructions, inst_vphaddsw_ymm_ymm_ymm(dst, src, src2)) } +emit_vphaddsw_ymm_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256) { append_elem(instructions, inst_vphaddsw_ymm_ymm_m256(dst, src, src2)) } inst_vphsubw_xmm_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPHSUBW, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_xmm(src2), {}} }, 1401) } inst_vphsubw_xmm_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .VPHSUBW, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_mem(src2.mem, 16), {}} }, 1401) } inst_vphsubw_ymm_ymm_ymm :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: YMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPHSUBW, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_ymm(src2), {}} }, 1402) } inst_vphsubw_ymm_ymm_m256 :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: Mem256) -> Instruction { return with_hint(Instruction{ mnemonic = .VPHSUBW, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_mem(src2.mem, 32), {}} }, 1402) } -emit_vphsubw_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append(instructions, inst_vphsubw_xmm_xmm_xmm(dst, src, src2)) } -emit_vphsubw_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append(instructions, inst_vphsubw_xmm_xmm_m128(dst, src, src2)) } -emit_vphsubw_ymm_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM) { append(instructions, inst_vphsubw_ymm_ymm_ymm(dst, src, src2)) } -emit_vphsubw_ymm_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256) { append(instructions, inst_vphsubw_ymm_ymm_m256(dst, src, src2)) } +emit_vphsubw_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append_elem(instructions, inst_vphsubw_xmm_xmm_xmm(dst, src, src2)) } +emit_vphsubw_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append_elem(instructions, inst_vphsubw_xmm_xmm_m128(dst, src, src2)) } +emit_vphsubw_ymm_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM) { append_elem(instructions, inst_vphsubw_ymm_ymm_ymm(dst, src, src2)) } +emit_vphsubw_ymm_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256) { append_elem(instructions, inst_vphsubw_ymm_ymm_m256(dst, src, src2)) } inst_vphsubd_xmm_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPHSUBD, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_xmm(src2), {}} }, 1403) } inst_vphsubd_xmm_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .VPHSUBD, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_mem(src2.mem, 16), {}} }, 1403) } inst_vphsubd_ymm_ymm_ymm :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: YMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPHSUBD, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_ymm(src2), {}} }, 1404) } inst_vphsubd_ymm_ymm_m256 :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: Mem256) -> Instruction { return with_hint(Instruction{ mnemonic = .VPHSUBD, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_mem(src2.mem, 32), {}} }, 1404) } -emit_vphsubd_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append(instructions, inst_vphsubd_xmm_xmm_xmm(dst, src, src2)) } -emit_vphsubd_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append(instructions, inst_vphsubd_xmm_xmm_m128(dst, src, src2)) } -emit_vphsubd_ymm_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM) { append(instructions, inst_vphsubd_ymm_ymm_ymm(dst, src, src2)) } -emit_vphsubd_ymm_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256) { append(instructions, inst_vphsubd_ymm_ymm_m256(dst, src, src2)) } +emit_vphsubd_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append_elem(instructions, inst_vphsubd_xmm_xmm_xmm(dst, src, src2)) } +emit_vphsubd_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append_elem(instructions, inst_vphsubd_xmm_xmm_m128(dst, src, src2)) } +emit_vphsubd_ymm_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM) { append_elem(instructions, inst_vphsubd_ymm_ymm_ymm(dst, src, src2)) } +emit_vphsubd_ymm_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256) { append_elem(instructions, inst_vphsubd_ymm_ymm_m256(dst, src, src2)) } inst_vphsubsw_xmm_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPHSUBSW, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_xmm(src2), {}} }, 1405) } inst_vphsubsw_xmm_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .VPHSUBSW, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_mem(src2.mem, 16), {}} }, 1405) } inst_vphsubsw_ymm_ymm_ymm :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: YMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPHSUBSW, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_ymm(src2), {}} }, 1406) } inst_vphsubsw_ymm_ymm_m256 :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: Mem256) -> Instruction { return with_hint(Instruction{ mnemonic = .VPHSUBSW, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_mem(src2.mem, 32), {}} }, 1406) } -emit_vphsubsw_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append(instructions, inst_vphsubsw_xmm_xmm_xmm(dst, src, src2)) } -emit_vphsubsw_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append(instructions, inst_vphsubsw_xmm_xmm_m128(dst, src, src2)) } -emit_vphsubsw_ymm_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM) { append(instructions, inst_vphsubsw_ymm_ymm_ymm(dst, src, src2)) } -emit_vphsubsw_ymm_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256) { append(instructions, inst_vphsubsw_ymm_ymm_m256(dst, src, src2)) } +emit_vphsubsw_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append_elem(instructions, inst_vphsubsw_xmm_xmm_xmm(dst, src, src2)) } +emit_vphsubsw_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append_elem(instructions, inst_vphsubsw_xmm_xmm_m128(dst, src, src2)) } +emit_vphsubsw_ymm_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM) { append_elem(instructions, inst_vphsubsw_ymm_ymm_ymm(dst, src, src2)) } +emit_vphsubsw_ymm_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256) { append_elem(instructions, inst_vphsubsw_ymm_ymm_m256(dst, src, src2)) } inst_vpmaddubsw_xmm_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPMADDUBSW, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_xmm(src2), {}} }, 1407) } inst_vpmaddubsw_xmm_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .VPMADDUBSW, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_mem(src2.mem, 16), {}} }, 1407) } inst_vpmaddubsw_ymm_ymm_ymm :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: YMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPMADDUBSW, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_ymm(src2), {}} }, 1408) } inst_vpmaddubsw_ymm_ymm_m256 :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: Mem256) -> Instruction { return with_hint(Instruction{ mnemonic = .VPMADDUBSW, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_mem(src2.mem, 32), {}} }, 1408) } -emit_vpmaddubsw_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append(instructions, inst_vpmaddubsw_xmm_xmm_xmm(dst, src, src2)) } -emit_vpmaddubsw_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append(instructions, inst_vpmaddubsw_xmm_xmm_m128(dst, src, src2)) } -emit_vpmaddubsw_ymm_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM) { append(instructions, inst_vpmaddubsw_ymm_ymm_ymm(dst, src, src2)) } -emit_vpmaddubsw_ymm_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256) { append(instructions, inst_vpmaddubsw_ymm_ymm_m256(dst, src, src2)) } +emit_vpmaddubsw_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append_elem(instructions, inst_vpmaddubsw_xmm_xmm_xmm(dst, src, src2)) } +emit_vpmaddubsw_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append_elem(instructions, inst_vpmaddubsw_xmm_xmm_m128(dst, src, src2)) } +emit_vpmaddubsw_ymm_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM) { append_elem(instructions, inst_vpmaddubsw_ymm_ymm_ymm(dst, src, src2)) } +emit_vpmaddubsw_ymm_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256) { append_elem(instructions, inst_vpmaddubsw_ymm_ymm_m256(dst, src, src2)) } inst_vpmulhrsw_xmm_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPMULHRSW, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_xmm(src2), {}} }, 1409) } inst_vpmulhrsw_xmm_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .VPMULHRSW, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_mem(src2.mem, 16), {}} }, 1409) } inst_vpmulhrsw_ymm_ymm_ymm :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: YMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPMULHRSW, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_ymm(src2), {}} }, 1410) } inst_vpmulhrsw_ymm_ymm_m256 :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: Mem256) -> Instruction { return with_hint(Instruction{ mnemonic = .VPMULHRSW, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_mem(src2.mem, 32), {}} }, 1410) } -emit_vpmulhrsw_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append(instructions, inst_vpmulhrsw_xmm_xmm_xmm(dst, src, src2)) } -emit_vpmulhrsw_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append(instructions, inst_vpmulhrsw_xmm_xmm_m128(dst, src, src2)) } -emit_vpmulhrsw_ymm_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM) { append(instructions, inst_vpmulhrsw_ymm_ymm_ymm(dst, src, src2)) } -emit_vpmulhrsw_ymm_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256) { append(instructions, inst_vpmulhrsw_ymm_ymm_m256(dst, src, src2)) } +emit_vpmulhrsw_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append_elem(instructions, inst_vpmulhrsw_xmm_xmm_xmm(dst, src, src2)) } +emit_vpmulhrsw_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append_elem(instructions, inst_vpmulhrsw_xmm_xmm_m128(dst, src, src2)) } +emit_vpmulhrsw_ymm_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM) { append_elem(instructions, inst_vpmulhrsw_ymm_ymm_ymm(dst, src, src2)) } +emit_vpmulhrsw_ymm_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256) { append_elem(instructions, inst_vpmulhrsw_ymm_ymm_m256(dst, src, src2)) } inst_vpsignb_xmm_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPSIGNB, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_xmm(src2), {}} }, 1411) } inst_vpsignb_xmm_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .VPSIGNB, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_mem(src2.mem, 16), {}} }, 1411) } inst_vpsignb_ymm_ymm_ymm :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: YMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPSIGNB, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_ymm(src2), {}} }, 1412) } inst_vpsignb_ymm_ymm_m256 :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: Mem256) -> Instruction { return with_hint(Instruction{ mnemonic = .VPSIGNB, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_mem(src2.mem, 32), {}} }, 1412) } -emit_vpsignb_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append(instructions, inst_vpsignb_xmm_xmm_xmm(dst, src, src2)) } -emit_vpsignb_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append(instructions, inst_vpsignb_xmm_xmm_m128(dst, src, src2)) } -emit_vpsignb_ymm_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM) { append(instructions, inst_vpsignb_ymm_ymm_ymm(dst, src, src2)) } -emit_vpsignb_ymm_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256) { append(instructions, inst_vpsignb_ymm_ymm_m256(dst, src, src2)) } +emit_vpsignb_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append_elem(instructions, inst_vpsignb_xmm_xmm_xmm(dst, src, src2)) } +emit_vpsignb_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append_elem(instructions, inst_vpsignb_xmm_xmm_m128(dst, src, src2)) } +emit_vpsignb_ymm_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM) { append_elem(instructions, inst_vpsignb_ymm_ymm_ymm(dst, src, src2)) } +emit_vpsignb_ymm_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256) { append_elem(instructions, inst_vpsignb_ymm_ymm_m256(dst, src, src2)) } inst_vpsignw_xmm_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPSIGNW, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_xmm(src2), {}} }, 1413) } inst_vpsignw_xmm_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .VPSIGNW, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_mem(src2.mem, 16), {}} }, 1413) } inst_vpsignw_ymm_ymm_ymm :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: YMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPSIGNW, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_ymm(src2), {}} }, 1414) } inst_vpsignw_ymm_ymm_m256 :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: Mem256) -> Instruction { return with_hint(Instruction{ mnemonic = .VPSIGNW, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_mem(src2.mem, 32), {}} }, 1414) } -emit_vpsignw_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append(instructions, inst_vpsignw_xmm_xmm_xmm(dst, src, src2)) } -emit_vpsignw_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append(instructions, inst_vpsignw_xmm_xmm_m128(dst, src, src2)) } -emit_vpsignw_ymm_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM) { append(instructions, inst_vpsignw_ymm_ymm_ymm(dst, src, src2)) } -emit_vpsignw_ymm_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256) { append(instructions, inst_vpsignw_ymm_ymm_m256(dst, src, src2)) } +emit_vpsignw_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append_elem(instructions, inst_vpsignw_xmm_xmm_xmm(dst, src, src2)) } +emit_vpsignw_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append_elem(instructions, inst_vpsignw_xmm_xmm_m128(dst, src, src2)) } +emit_vpsignw_ymm_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM) { append_elem(instructions, inst_vpsignw_ymm_ymm_ymm(dst, src, src2)) } +emit_vpsignw_ymm_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256) { append_elem(instructions, inst_vpsignw_ymm_ymm_m256(dst, src, src2)) } inst_vpsignd_xmm_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPSIGND, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_xmm(src2), {}} }, 1415) } inst_vpsignd_xmm_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .VPSIGND, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_mem(src2.mem, 16), {}} }, 1415) } inst_vpsignd_ymm_ymm_ymm :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: YMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPSIGND, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_ymm(src2), {}} }, 1416) } inst_vpsignd_ymm_ymm_m256 :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: Mem256) -> Instruction { return with_hint(Instruction{ mnemonic = .VPSIGND, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_mem(src2.mem, 32), {}} }, 1416) } -emit_vpsignd_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append(instructions, inst_vpsignd_xmm_xmm_xmm(dst, src, src2)) } -emit_vpsignd_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append(instructions, inst_vpsignd_xmm_xmm_m128(dst, src, src2)) } -emit_vpsignd_ymm_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM) { append(instructions, inst_vpsignd_ymm_ymm_ymm(dst, src, src2)) } -emit_vpsignd_ymm_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256) { append(instructions, inst_vpsignd_ymm_ymm_m256(dst, src, src2)) } +emit_vpsignd_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append_elem(instructions, inst_vpsignd_xmm_xmm_xmm(dst, src, src2)) } +emit_vpsignd_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append_elem(instructions, inst_vpsignd_xmm_xmm_m128(dst, src, src2)) } +emit_vpsignd_ymm_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM) { append_elem(instructions, inst_vpsignd_ymm_ymm_ymm(dst, src, src2)) } +emit_vpsignd_ymm_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256) { append_elem(instructions, inst_vpsignd_ymm_ymm_m256(dst, src, src2)) } inst_vpabsb_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPABSB, operand_count = 2, ops = {op_xmm(dst), op_xmm(src), {}, {}} }, 1417) } inst_vpabsb_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .VPABSB, operand_count = 2, ops = {op_xmm(dst), op_mem(src.mem, 16), {}, {}} }, 1417) } inst_vpabsb_ymm_ymm :: #force_inline proc "contextless" (dst: YMM, src: YMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPABSB, operand_count = 2, ops = {op_ymm(dst), op_ymm(src), {}, {}} }, 1418) } inst_vpabsb_ymm_m256 :: #force_inline proc "contextless" (dst: YMM, src: Mem256) -> Instruction { return with_hint(Instruction{ mnemonic = .VPABSB, operand_count = 2, ops = {op_ymm(dst), op_mem(src.mem, 32), {}, {}} }, 1418) } -emit_vpabsb_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append(instructions, inst_vpabsb_xmm_xmm(dst, src)) } -emit_vpabsb_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append(instructions, inst_vpabsb_xmm_m128(dst, src)) } -emit_vpabsb_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM) { append(instructions, inst_vpabsb_ymm_ymm(dst, src)) } -emit_vpabsb_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: Mem256) { append(instructions, inst_vpabsb_ymm_m256(dst, src)) } +emit_vpabsb_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append_elem(instructions, inst_vpabsb_xmm_xmm(dst, src)) } +emit_vpabsb_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append_elem(instructions, inst_vpabsb_xmm_m128(dst, src)) } +emit_vpabsb_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM) { append_elem(instructions, inst_vpabsb_ymm_ymm(dst, src)) } +emit_vpabsb_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: Mem256) { append_elem(instructions, inst_vpabsb_ymm_m256(dst, src)) } inst_vpabsw_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPABSW, operand_count = 2, ops = {op_xmm(dst), op_xmm(src), {}, {}} }, 1419) } inst_vpabsw_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .VPABSW, operand_count = 2, ops = {op_xmm(dst), op_mem(src.mem, 16), {}, {}} }, 1419) } inst_vpabsw_ymm_ymm :: #force_inline proc "contextless" (dst: YMM, src: YMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPABSW, operand_count = 2, ops = {op_ymm(dst), op_ymm(src), {}, {}} }, 1420) } inst_vpabsw_ymm_m256 :: #force_inline proc "contextless" (dst: YMM, src: Mem256) -> Instruction { return with_hint(Instruction{ mnemonic = .VPABSW, operand_count = 2, ops = {op_ymm(dst), op_mem(src.mem, 32), {}, {}} }, 1420) } -emit_vpabsw_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append(instructions, inst_vpabsw_xmm_xmm(dst, src)) } -emit_vpabsw_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append(instructions, inst_vpabsw_xmm_m128(dst, src)) } -emit_vpabsw_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM) { append(instructions, inst_vpabsw_ymm_ymm(dst, src)) } -emit_vpabsw_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: Mem256) { append(instructions, inst_vpabsw_ymm_m256(dst, src)) } +emit_vpabsw_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append_elem(instructions, inst_vpabsw_xmm_xmm(dst, src)) } +emit_vpabsw_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append_elem(instructions, inst_vpabsw_xmm_m128(dst, src)) } +emit_vpabsw_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM) { append_elem(instructions, inst_vpabsw_ymm_ymm(dst, src)) } +emit_vpabsw_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: Mem256) { append_elem(instructions, inst_vpabsw_ymm_m256(dst, src)) } inst_vpabsd_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPABSD, operand_count = 2, ops = {op_xmm(dst), op_xmm(src), {}, {}} }, 1421) } inst_vpabsd_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .VPABSD, operand_count = 2, ops = {op_xmm(dst), op_mem(src.mem, 16), {}, {}} }, 1421) } inst_vpabsd_ymm_ymm :: #force_inline proc "contextless" (dst: YMM, src: YMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPABSD, operand_count = 2, ops = {op_ymm(dst), op_ymm(src), {}, {}} }, 1422) } inst_vpabsd_ymm_m256 :: #force_inline proc "contextless" (dst: YMM, src: Mem256) -> Instruction { return with_hint(Instruction{ mnemonic = .VPABSD, operand_count = 2, ops = {op_ymm(dst), op_mem(src.mem, 32), {}, {}} }, 1422) } -emit_vpabsd_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append(instructions, inst_vpabsd_xmm_xmm(dst, src)) } -emit_vpabsd_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append(instructions, inst_vpabsd_xmm_m128(dst, src)) } -emit_vpabsd_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM) { append(instructions, inst_vpabsd_ymm_ymm(dst, src)) } -emit_vpabsd_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: Mem256) { append(instructions, inst_vpabsd_ymm_m256(dst, src)) } +emit_vpabsd_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append_elem(instructions, inst_vpabsd_xmm_xmm(dst, src)) } +emit_vpabsd_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append_elem(instructions, inst_vpabsd_xmm_m128(dst, src)) } +emit_vpabsd_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM) { append_elem(instructions, inst_vpabsd_ymm_ymm(dst, src)) } +emit_vpabsd_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: Mem256) { append_elem(instructions, inst_vpabsd_ymm_m256(dst, src)) } inst_vpalignr_xmm_xmm_xmm_imm8 :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: XMM, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .VPALIGNR, operand_count = 4, ops = {op_xmm(dst), op_xmm(src), op_xmm(src2), op_imm8(imm)} }, 1423) } inst_vpalignr_xmm_xmm_m128_imm8 :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: Mem128, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .VPALIGNR, operand_count = 4, ops = {op_xmm(dst), op_xmm(src), op_mem(src2.mem, 16), op_imm8(imm)} }, 1423) } inst_vpalignr_ymm_ymm_ymm_imm8 :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: YMM, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .VPALIGNR, operand_count = 4, ops = {op_ymm(dst), op_ymm(src), op_ymm(src2), op_imm8(imm)} }, 1424) } inst_vpalignr_ymm_ymm_m256_imm8 :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: Mem256, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .VPALIGNR, operand_count = 4, ops = {op_ymm(dst), op_ymm(src), op_mem(src2.mem, 32), op_imm8(imm)} }, 1424) } -emit_vpalignr_xmm_xmm_xmm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM, imm: i8) { append(instructions, inst_vpalignr_xmm_xmm_xmm_imm8(dst, src, src2, imm)) } -emit_vpalignr_xmm_xmm_m128_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128, imm: i8) { append(instructions, inst_vpalignr_xmm_xmm_m128_imm8(dst, src, src2, imm)) } -emit_vpalignr_ymm_ymm_ymm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM, imm: i8) { append(instructions, inst_vpalignr_ymm_ymm_ymm_imm8(dst, src, src2, imm)) } -emit_vpalignr_ymm_ymm_m256_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256, imm: i8) { append(instructions, inst_vpalignr_ymm_ymm_m256_imm8(dst, src, src2, imm)) } +emit_vpalignr_xmm_xmm_xmm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM, imm: i8) { append_elem(instructions, inst_vpalignr_xmm_xmm_xmm_imm8(dst, src, src2, imm)) } +emit_vpalignr_xmm_xmm_m128_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128, imm: i8) { append_elem(instructions, inst_vpalignr_xmm_xmm_m128_imm8(dst, src, src2, imm)) } +emit_vpalignr_ymm_ymm_ymm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM, imm: i8) { append_elem(instructions, inst_vpalignr_ymm_ymm_ymm_imm8(dst, src, src2, imm)) } +emit_vpalignr_ymm_ymm_m256_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256, imm: i8) { append_elem(instructions, inst_vpalignr_ymm_ymm_m256_imm8(dst, src, src2, imm)) } inst_vpblendw_xmm_xmm_xmm_imm8 :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: XMM, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .VPBLENDW, operand_count = 4, ops = {op_xmm(dst), op_xmm(src), op_xmm(src2), op_imm8(imm)} }, 1425) } inst_vpblendw_xmm_xmm_m128_imm8 :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: Mem128, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .VPBLENDW, operand_count = 4, ops = {op_xmm(dst), op_xmm(src), op_mem(src2.mem, 16), op_imm8(imm)} }, 1425) } inst_vpblendw_ymm_ymm_ymm_imm8 :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: YMM, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .VPBLENDW, operand_count = 4, ops = {op_ymm(dst), op_ymm(src), op_ymm(src2), op_imm8(imm)} }, 1426) } inst_vpblendw_ymm_ymm_m256_imm8 :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: Mem256, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .VPBLENDW, operand_count = 4, ops = {op_ymm(dst), op_ymm(src), op_mem(src2.mem, 32), op_imm8(imm)} }, 1426) } -emit_vpblendw_xmm_xmm_xmm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM, imm: i8) { append(instructions, inst_vpblendw_xmm_xmm_xmm_imm8(dst, src, src2, imm)) } -emit_vpblendw_xmm_xmm_m128_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128, imm: i8) { append(instructions, inst_vpblendw_xmm_xmm_m128_imm8(dst, src, src2, imm)) } -emit_vpblendw_ymm_ymm_ymm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM, imm: i8) { append(instructions, inst_vpblendw_ymm_ymm_ymm_imm8(dst, src, src2, imm)) } -emit_vpblendw_ymm_ymm_m256_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256, imm: i8) { append(instructions, inst_vpblendw_ymm_ymm_m256_imm8(dst, src, src2, imm)) } +emit_vpblendw_xmm_xmm_xmm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM, imm: i8) { append_elem(instructions, inst_vpblendw_xmm_xmm_xmm_imm8(dst, src, src2, imm)) } +emit_vpblendw_xmm_xmm_m128_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128, imm: i8) { append_elem(instructions, inst_vpblendw_xmm_xmm_m128_imm8(dst, src, src2, imm)) } +emit_vpblendw_ymm_ymm_ymm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM, imm: i8) { append_elem(instructions, inst_vpblendw_ymm_ymm_ymm_imm8(dst, src, src2, imm)) } +emit_vpblendw_ymm_ymm_m256_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256, imm: i8) { append_elem(instructions, inst_vpblendw_ymm_ymm_m256_imm8(dst, src, src2, imm)) } inst_vpblendvb_xmm_xmm_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: XMM, src3: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPBLENDVB, operand_count = 4, ops = {op_xmm(dst), op_xmm(src), op_xmm(src2), op_xmm(src3)} }, 1427) } inst_vpblendvb_xmm_xmm_m128_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: Mem128, src3: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPBLENDVB, operand_count = 4, ops = {op_xmm(dst), op_xmm(src), op_mem(src2.mem, 16), op_xmm(src3)} }, 1427) } inst_vpblendvb_ymm_ymm_ymm_ymm :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: YMM, src3: YMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPBLENDVB, operand_count = 4, ops = {op_ymm(dst), op_ymm(src), op_ymm(src2), op_ymm(src3)} }, 1428) } inst_vpblendvb_ymm_ymm_m256_ymm :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: Mem256, src3: YMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPBLENDVB, operand_count = 4, ops = {op_ymm(dst), op_ymm(src), op_mem(src2.mem, 32), op_ymm(src3)} }, 1428) } -emit_vpblendvb_xmm_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM, src3: XMM) { append(instructions, inst_vpblendvb_xmm_xmm_xmm_xmm(dst, src, src2, src3)) } -emit_vpblendvb_xmm_xmm_m128_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128, src3: XMM) { append(instructions, inst_vpblendvb_xmm_xmm_m128_xmm(dst, src, src2, src3)) } -emit_vpblendvb_ymm_ymm_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM, src3: YMM) { append(instructions, inst_vpblendvb_ymm_ymm_ymm_ymm(dst, src, src2, src3)) } -emit_vpblendvb_ymm_ymm_m256_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256, src3: YMM) { append(instructions, inst_vpblendvb_ymm_ymm_m256_ymm(dst, src, src2, src3)) } +emit_vpblendvb_xmm_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM, src3: XMM) { append_elem(instructions, inst_vpblendvb_xmm_xmm_xmm_xmm(dst, src, src2, src3)) } +emit_vpblendvb_xmm_xmm_m128_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128, src3: XMM) { append_elem(instructions, inst_vpblendvb_xmm_xmm_m128_xmm(dst, src, src2, src3)) } +emit_vpblendvb_ymm_ymm_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM, src3: YMM) { append_elem(instructions, inst_vpblendvb_ymm_ymm_ymm_ymm(dst, src, src2, src3)) } +emit_vpblendvb_ymm_ymm_m256_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256, src3: YMM) { append_elem(instructions, inst_vpblendvb_ymm_ymm_m256_ymm(dst, src, src2, src3)) } inst_vmpsadbw_xmm_xmm_xmm_imm8 :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: XMM, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .VMPSADBW, operand_count = 4, ops = {op_xmm(dst), op_xmm(src), op_xmm(src2), op_imm8(imm)} }, 1429) } inst_vmpsadbw_xmm_xmm_m128_imm8 :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: Mem128, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .VMPSADBW, operand_count = 4, ops = {op_xmm(dst), op_xmm(src), op_mem(src2.mem, 16), op_imm8(imm)} }, 1429) } inst_vmpsadbw_ymm_ymm_ymm_imm8 :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: YMM, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .VMPSADBW, operand_count = 4, ops = {op_ymm(dst), op_ymm(src), op_ymm(src2), op_imm8(imm)} }, 1430) } inst_vmpsadbw_ymm_ymm_m256_imm8 :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: Mem256, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .VMPSADBW, operand_count = 4, ops = {op_ymm(dst), op_ymm(src), op_mem(src2.mem, 32), op_imm8(imm)} }, 1430) } -emit_vmpsadbw_xmm_xmm_xmm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM, imm: i8) { append(instructions, inst_vmpsadbw_xmm_xmm_xmm_imm8(dst, src, src2, imm)) } -emit_vmpsadbw_xmm_xmm_m128_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128, imm: i8) { append(instructions, inst_vmpsadbw_xmm_xmm_m128_imm8(dst, src, src2, imm)) } -emit_vmpsadbw_ymm_ymm_ymm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM, imm: i8) { append(instructions, inst_vmpsadbw_ymm_ymm_ymm_imm8(dst, src, src2, imm)) } -emit_vmpsadbw_ymm_ymm_m256_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256, imm: i8) { append(instructions, inst_vmpsadbw_ymm_ymm_m256_imm8(dst, src, src2, imm)) } +emit_vmpsadbw_xmm_xmm_xmm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM, imm: i8) { append_elem(instructions, inst_vmpsadbw_xmm_xmm_xmm_imm8(dst, src, src2, imm)) } +emit_vmpsadbw_xmm_xmm_m128_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128, imm: i8) { append_elem(instructions, inst_vmpsadbw_xmm_xmm_m128_imm8(dst, src, src2, imm)) } +emit_vmpsadbw_ymm_ymm_ymm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM, imm: i8) { append_elem(instructions, inst_vmpsadbw_ymm_ymm_ymm_imm8(dst, src, src2, imm)) } +emit_vmpsadbw_ymm_ymm_m256_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256, imm: i8) { append_elem(instructions, inst_vmpsadbw_ymm_ymm_m256_imm8(dst, src, src2, imm)) } inst_vphminposuw_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPHMINPOSUW, operand_count = 2, ops = {op_xmm(dst), op_xmm(src), {}, {}} }, 1431) } inst_vphminposuw_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .VPHMINPOSUW, operand_count = 2, ops = {op_xmm(dst), op_mem(src.mem, 16), {}, {}} }, 1431) } -emit_vphminposuw_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append(instructions, inst_vphminposuw_xmm_xmm(dst, src)) } -emit_vphminposuw_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append(instructions, inst_vphminposuw_xmm_m128(dst, src)) } +emit_vphminposuw_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append_elem(instructions, inst_vphminposuw_xmm_xmm(dst, src)) } +emit_vphminposuw_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append_elem(instructions, inst_vphminposuw_xmm_m128(dst, src)) } inst_vpmaxsb_xmm_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPMAXSB, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_xmm(src2), {}} }, 1432) } inst_vpmaxsb_xmm_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .VPMAXSB, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_mem(src2.mem, 16), {}} }, 1432) } inst_vpmaxsb_ymm_ymm_ymm :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: YMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPMAXSB, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_ymm(src2), {}} }, 1433) } inst_vpmaxsb_ymm_ymm_m256 :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: Mem256) -> Instruction { return with_hint(Instruction{ mnemonic = .VPMAXSB, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_mem(src2.mem, 32), {}} }, 1433) } -emit_vpmaxsb_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append(instructions, inst_vpmaxsb_xmm_xmm_xmm(dst, src, src2)) } -emit_vpmaxsb_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append(instructions, inst_vpmaxsb_xmm_xmm_m128(dst, src, src2)) } -emit_vpmaxsb_ymm_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM) { append(instructions, inst_vpmaxsb_ymm_ymm_ymm(dst, src, src2)) } -emit_vpmaxsb_ymm_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256) { append(instructions, inst_vpmaxsb_ymm_ymm_m256(dst, src, src2)) } +emit_vpmaxsb_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append_elem(instructions, inst_vpmaxsb_xmm_xmm_xmm(dst, src, src2)) } +emit_vpmaxsb_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append_elem(instructions, inst_vpmaxsb_xmm_xmm_m128(dst, src, src2)) } +emit_vpmaxsb_ymm_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM) { append_elem(instructions, inst_vpmaxsb_ymm_ymm_ymm(dst, src, src2)) } +emit_vpmaxsb_ymm_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256) { append_elem(instructions, inst_vpmaxsb_ymm_ymm_m256(dst, src, src2)) } inst_vpmaxsd_xmm_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPMAXSD, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_xmm(src2), {}} }, 1434) } inst_vpmaxsd_xmm_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .VPMAXSD, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_mem(src2.mem, 16), {}} }, 1434) } inst_vpmaxsd_ymm_ymm_ymm :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: YMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPMAXSD, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_ymm(src2), {}} }, 1435) } inst_vpmaxsd_ymm_ymm_m256 :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: Mem256) -> Instruction { return with_hint(Instruction{ mnemonic = .VPMAXSD, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_mem(src2.mem, 32), {}} }, 1435) } -emit_vpmaxsd_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append(instructions, inst_vpmaxsd_xmm_xmm_xmm(dst, src, src2)) } -emit_vpmaxsd_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append(instructions, inst_vpmaxsd_xmm_xmm_m128(dst, src, src2)) } -emit_vpmaxsd_ymm_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM) { append(instructions, inst_vpmaxsd_ymm_ymm_ymm(dst, src, src2)) } -emit_vpmaxsd_ymm_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256) { append(instructions, inst_vpmaxsd_ymm_ymm_m256(dst, src, src2)) } +emit_vpmaxsd_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append_elem(instructions, inst_vpmaxsd_xmm_xmm_xmm(dst, src, src2)) } +emit_vpmaxsd_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append_elem(instructions, inst_vpmaxsd_xmm_xmm_m128(dst, src, src2)) } +emit_vpmaxsd_ymm_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM) { append_elem(instructions, inst_vpmaxsd_ymm_ymm_ymm(dst, src, src2)) } +emit_vpmaxsd_ymm_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256) { append_elem(instructions, inst_vpmaxsd_ymm_ymm_m256(dst, src, src2)) } inst_vpmaxuw_xmm_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPMAXUW, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_xmm(src2), {}} }, 1436) } inst_vpmaxuw_xmm_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .VPMAXUW, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_mem(src2.mem, 16), {}} }, 1436) } inst_vpmaxuw_ymm_ymm_ymm :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: YMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPMAXUW, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_ymm(src2), {}} }, 1437) } inst_vpmaxuw_ymm_ymm_m256 :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: Mem256) -> Instruction { return with_hint(Instruction{ mnemonic = .VPMAXUW, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_mem(src2.mem, 32), {}} }, 1437) } -emit_vpmaxuw_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append(instructions, inst_vpmaxuw_xmm_xmm_xmm(dst, src, src2)) } -emit_vpmaxuw_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append(instructions, inst_vpmaxuw_xmm_xmm_m128(dst, src, src2)) } -emit_vpmaxuw_ymm_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM) { append(instructions, inst_vpmaxuw_ymm_ymm_ymm(dst, src, src2)) } -emit_vpmaxuw_ymm_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256) { append(instructions, inst_vpmaxuw_ymm_ymm_m256(dst, src, src2)) } +emit_vpmaxuw_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append_elem(instructions, inst_vpmaxuw_xmm_xmm_xmm(dst, src, src2)) } +emit_vpmaxuw_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append_elem(instructions, inst_vpmaxuw_xmm_xmm_m128(dst, src, src2)) } +emit_vpmaxuw_ymm_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM) { append_elem(instructions, inst_vpmaxuw_ymm_ymm_ymm(dst, src, src2)) } +emit_vpmaxuw_ymm_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256) { append_elem(instructions, inst_vpmaxuw_ymm_ymm_m256(dst, src, src2)) } inst_vpmaxud_xmm_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPMAXUD, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_xmm(src2), {}} }, 1438) } inst_vpmaxud_xmm_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .VPMAXUD, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_mem(src2.mem, 16), {}} }, 1438) } inst_vpmaxud_ymm_ymm_ymm :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: YMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPMAXUD, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_ymm(src2), {}} }, 1439) } inst_vpmaxud_ymm_ymm_m256 :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: Mem256) -> Instruction { return with_hint(Instruction{ mnemonic = .VPMAXUD, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_mem(src2.mem, 32), {}} }, 1439) } -emit_vpmaxud_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append(instructions, inst_vpmaxud_xmm_xmm_xmm(dst, src, src2)) } -emit_vpmaxud_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append(instructions, inst_vpmaxud_xmm_xmm_m128(dst, src, src2)) } -emit_vpmaxud_ymm_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM) { append(instructions, inst_vpmaxud_ymm_ymm_ymm(dst, src, src2)) } -emit_vpmaxud_ymm_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256) { append(instructions, inst_vpmaxud_ymm_ymm_m256(dst, src, src2)) } +emit_vpmaxud_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append_elem(instructions, inst_vpmaxud_xmm_xmm_xmm(dst, src, src2)) } +emit_vpmaxud_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append_elem(instructions, inst_vpmaxud_xmm_xmm_m128(dst, src, src2)) } +emit_vpmaxud_ymm_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM) { append_elem(instructions, inst_vpmaxud_ymm_ymm_ymm(dst, src, src2)) } +emit_vpmaxud_ymm_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256) { append_elem(instructions, inst_vpmaxud_ymm_ymm_m256(dst, src, src2)) } inst_vpminsb_xmm_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPMINSB, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_xmm(src2), {}} }, 1440) } inst_vpminsb_xmm_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .VPMINSB, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_mem(src2.mem, 16), {}} }, 1440) } inst_vpminsb_ymm_ymm_ymm :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: YMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPMINSB, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_ymm(src2), {}} }, 1441) } inst_vpminsb_ymm_ymm_m256 :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: Mem256) -> Instruction { return with_hint(Instruction{ mnemonic = .VPMINSB, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_mem(src2.mem, 32), {}} }, 1441) } -emit_vpminsb_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append(instructions, inst_vpminsb_xmm_xmm_xmm(dst, src, src2)) } -emit_vpminsb_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append(instructions, inst_vpminsb_xmm_xmm_m128(dst, src, src2)) } -emit_vpminsb_ymm_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM) { append(instructions, inst_vpminsb_ymm_ymm_ymm(dst, src, src2)) } -emit_vpminsb_ymm_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256) { append(instructions, inst_vpminsb_ymm_ymm_m256(dst, src, src2)) } +emit_vpminsb_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append_elem(instructions, inst_vpminsb_xmm_xmm_xmm(dst, src, src2)) } +emit_vpminsb_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append_elem(instructions, inst_vpminsb_xmm_xmm_m128(dst, src, src2)) } +emit_vpminsb_ymm_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM) { append_elem(instructions, inst_vpminsb_ymm_ymm_ymm(dst, src, src2)) } +emit_vpminsb_ymm_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256) { append_elem(instructions, inst_vpminsb_ymm_ymm_m256(dst, src, src2)) } inst_vpminsd_xmm_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPMINSD, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_xmm(src2), {}} }, 1442) } inst_vpminsd_xmm_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .VPMINSD, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_mem(src2.mem, 16), {}} }, 1442) } inst_vpminsd_ymm_ymm_ymm :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: YMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPMINSD, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_ymm(src2), {}} }, 1443) } inst_vpminsd_ymm_ymm_m256 :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: Mem256) -> Instruction { return with_hint(Instruction{ mnemonic = .VPMINSD, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_mem(src2.mem, 32), {}} }, 1443) } -emit_vpminsd_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append(instructions, inst_vpminsd_xmm_xmm_xmm(dst, src, src2)) } -emit_vpminsd_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append(instructions, inst_vpminsd_xmm_xmm_m128(dst, src, src2)) } -emit_vpminsd_ymm_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM) { append(instructions, inst_vpminsd_ymm_ymm_ymm(dst, src, src2)) } -emit_vpminsd_ymm_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256) { append(instructions, inst_vpminsd_ymm_ymm_m256(dst, src, src2)) } +emit_vpminsd_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append_elem(instructions, inst_vpminsd_xmm_xmm_xmm(dst, src, src2)) } +emit_vpminsd_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append_elem(instructions, inst_vpminsd_xmm_xmm_m128(dst, src, src2)) } +emit_vpminsd_ymm_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM) { append_elem(instructions, inst_vpminsd_ymm_ymm_ymm(dst, src, src2)) } +emit_vpminsd_ymm_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256) { append_elem(instructions, inst_vpminsd_ymm_ymm_m256(dst, src, src2)) } inst_vpminuw_xmm_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPMINUW, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_xmm(src2), {}} }, 1444) } inst_vpminuw_xmm_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .VPMINUW, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_mem(src2.mem, 16), {}} }, 1444) } inst_vpminuw_ymm_ymm_ymm :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: YMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPMINUW, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_ymm(src2), {}} }, 1445) } inst_vpminuw_ymm_ymm_m256 :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: Mem256) -> Instruction { return with_hint(Instruction{ mnemonic = .VPMINUW, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_mem(src2.mem, 32), {}} }, 1445) } -emit_vpminuw_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append(instructions, inst_vpminuw_xmm_xmm_xmm(dst, src, src2)) } -emit_vpminuw_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append(instructions, inst_vpminuw_xmm_xmm_m128(dst, src, src2)) } -emit_vpminuw_ymm_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM) { append(instructions, inst_vpminuw_ymm_ymm_ymm(dst, src, src2)) } -emit_vpminuw_ymm_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256) { append(instructions, inst_vpminuw_ymm_ymm_m256(dst, src, src2)) } +emit_vpminuw_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append_elem(instructions, inst_vpminuw_xmm_xmm_xmm(dst, src, src2)) } +emit_vpminuw_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append_elem(instructions, inst_vpminuw_xmm_xmm_m128(dst, src, src2)) } +emit_vpminuw_ymm_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM) { append_elem(instructions, inst_vpminuw_ymm_ymm_ymm(dst, src, src2)) } +emit_vpminuw_ymm_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256) { append_elem(instructions, inst_vpminuw_ymm_ymm_m256(dst, src, src2)) } inst_vpminud_xmm_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPMINUD, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_xmm(src2), {}} }, 1446) } inst_vpminud_xmm_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .VPMINUD, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_mem(src2.mem, 16), {}} }, 1446) } inst_vpminud_ymm_ymm_ymm :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: YMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPMINUD, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_ymm(src2), {}} }, 1447) } inst_vpminud_ymm_ymm_m256 :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: Mem256) -> Instruction { return with_hint(Instruction{ mnemonic = .VPMINUD, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_mem(src2.mem, 32), {}} }, 1447) } -emit_vpminud_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append(instructions, inst_vpminud_xmm_xmm_xmm(dst, src, src2)) } -emit_vpminud_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append(instructions, inst_vpminud_xmm_xmm_m128(dst, src, src2)) } -emit_vpminud_ymm_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM) { append(instructions, inst_vpminud_ymm_ymm_ymm(dst, src, src2)) } -emit_vpminud_ymm_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256) { append(instructions, inst_vpminud_ymm_ymm_m256(dst, src, src2)) } +emit_vpminud_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append_elem(instructions, inst_vpminud_xmm_xmm_xmm(dst, src, src2)) } +emit_vpminud_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append_elem(instructions, inst_vpminud_xmm_xmm_m128(dst, src, src2)) } +emit_vpminud_ymm_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM) { append_elem(instructions, inst_vpminud_ymm_ymm_ymm(dst, src, src2)) } +emit_vpminud_ymm_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256) { append_elem(instructions, inst_vpminud_ymm_ymm_m256(dst, src, src2)) } inst_vpmovsxbw_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPMOVSXBW, operand_count = 2, ops = {op_xmm(dst), op_xmm(src), {}, {}} }, 1448) } inst_vpmovsxbw_xmm_m64 :: #force_inline proc "contextless" (dst: XMM, src: Mem64) -> Instruction { return with_hint(Instruction{ mnemonic = .VPMOVSXBW, operand_count = 2, ops = {op_xmm(dst), op_mem(src.mem, 8), {}, {}} }, 1448) } inst_vpmovsxbw_ymm_xmm :: #force_inline proc "contextless" (dst: YMM, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPMOVSXBW, operand_count = 2, ops = {op_ymm(dst), op_xmm(src), {}, {}} }, 1449) } inst_vpmovsxbw_ymm_m128 :: #force_inline proc "contextless" (dst: YMM, src: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .VPMOVSXBW, operand_count = 2, ops = {op_ymm(dst), op_mem(src.mem, 16), {}, {}} }, 1449) } -emit_vpmovsxbw_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append(instructions, inst_vpmovsxbw_xmm_xmm(dst, src)) } -emit_vpmovsxbw_xmm_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem64) { append(instructions, inst_vpmovsxbw_xmm_m64(dst, src)) } -emit_vpmovsxbw_ymm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: XMM) { append(instructions, inst_vpmovsxbw_ymm_xmm(dst, src)) } -emit_vpmovsxbw_ymm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: Mem128) { append(instructions, inst_vpmovsxbw_ymm_m128(dst, src)) } +emit_vpmovsxbw_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append_elem(instructions, inst_vpmovsxbw_xmm_xmm(dst, src)) } +emit_vpmovsxbw_xmm_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem64) { append_elem(instructions, inst_vpmovsxbw_xmm_m64(dst, src)) } +emit_vpmovsxbw_ymm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: XMM) { append_elem(instructions, inst_vpmovsxbw_ymm_xmm(dst, src)) } +emit_vpmovsxbw_ymm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: Mem128) { append_elem(instructions, inst_vpmovsxbw_ymm_m128(dst, src)) } inst_vpmovsxbd_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPMOVSXBD, operand_count = 2, ops = {op_xmm(dst), op_xmm(src), {}, {}} }, 1450) } inst_vpmovsxbd_xmm_m32 :: #force_inline proc "contextless" (dst: XMM, src: Mem32) -> Instruction { return with_hint(Instruction{ mnemonic = .VPMOVSXBD, operand_count = 2, ops = {op_xmm(dst), op_mem(src.mem, 4), {}, {}} }, 1450) } inst_vpmovsxbd_ymm_xmm :: #force_inline proc "contextless" (dst: YMM, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPMOVSXBD, operand_count = 2, ops = {op_ymm(dst), op_xmm(src), {}, {}} }, 1451) } inst_vpmovsxbd_ymm_m64 :: #force_inline proc "contextless" (dst: YMM, src: Mem64) -> Instruction { return with_hint(Instruction{ mnemonic = .VPMOVSXBD, operand_count = 2, ops = {op_ymm(dst), op_mem(src.mem, 8), {}, {}} }, 1451) } -emit_vpmovsxbd_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append(instructions, inst_vpmovsxbd_xmm_xmm(dst, src)) } -emit_vpmovsxbd_xmm_m32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem32) { append(instructions, inst_vpmovsxbd_xmm_m32(dst, src)) } -emit_vpmovsxbd_ymm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: XMM) { append(instructions, inst_vpmovsxbd_ymm_xmm(dst, src)) } -emit_vpmovsxbd_ymm_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: Mem64) { append(instructions, inst_vpmovsxbd_ymm_m64(dst, src)) } +emit_vpmovsxbd_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append_elem(instructions, inst_vpmovsxbd_xmm_xmm(dst, src)) } +emit_vpmovsxbd_xmm_m32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem32) { append_elem(instructions, inst_vpmovsxbd_xmm_m32(dst, src)) } +emit_vpmovsxbd_ymm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: XMM) { append_elem(instructions, inst_vpmovsxbd_ymm_xmm(dst, src)) } +emit_vpmovsxbd_ymm_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: Mem64) { append_elem(instructions, inst_vpmovsxbd_ymm_m64(dst, src)) } inst_vpmovsxbq_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPMOVSXBQ, operand_count = 2, ops = {op_xmm(dst), op_xmm(src), {}, {}} }, 1452) } inst_vpmovsxbq_ymm_xmm :: #force_inline proc "contextless" (dst: YMM, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPMOVSXBQ, operand_count = 2, ops = {op_ymm(dst), op_xmm(src), {}, {}} }, 1453) } inst_vpmovsxbq_ymm_m32 :: #force_inline proc "contextless" (dst: YMM, src: Mem32) -> Instruction { return with_hint(Instruction{ mnemonic = .VPMOVSXBQ, operand_count = 2, ops = {op_ymm(dst), op_mem(src.mem, 4), {}, {}} }, 1453) } -emit_vpmovsxbq_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append(instructions, inst_vpmovsxbq_xmm_xmm(dst, src)) } -emit_vpmovsxbq_ymm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: XMM) { append(instructions, inst_vpmovsxbq_ymm_xmm(dst, src)) } -emit_vpmovsxbq_ymm_m32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: Mem32) { append(instructions, inst_vpmovsxbq_ymm_m32(dst, src)) } +emit_vpmovsxbq_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append_elem(instructions, inst_vpmovsxbq_xmm_xmm(dst, src)) } +emit_vpmovsxbq_ymm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: XMM) { append_elem(instructions, inst_vpmovsxbq_ymm_xmm(dst, src)) } +emit_vpmovsxbq_ymm_m32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: Mem32) { append_elem(instructions, inst_vpmovsxbq_ymm_m32(dst, src)) } inst_vpmovsxwd_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPMOVSXWD, operand_count = 2, ops = {op_xmm(dst), op_xmm(src), {}, {}} }, 1454) } inst_vpmovsxwd_xmm_m64 :: #force_inline proc "contextless" (dst: XMM, src: Mem64) -> Instruction { return with_hint(Instruction{ mnemonic = .VPMOVSXWD, operand_count = 2, ops = {op_xmm(dst), op_mem(src.mem, 8), {}, {}} }, 1454) } inst_vpmovsxwd_ymm_xmm :: #force_inline proc "contextless" (dst: YMM, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPMOVSXWD, operand_count = 2, ops = {op_ymm(dst), op_xmm(src), {}, {}} }, 1455) } inst_vpmovsxwd_ymm_m128 :: #force_inline proc "contextless" (dst: YMM, src: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .VPMOVSXWD, operand_count = 2, ops = {op_ymm(dst), op_mem(src.mem, 16), {}, {}} }, 1455) } -emit_vpmovsxwd_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append(instructions, inst_vpmovsxwd_xmm_xmm(dst, src)) } -emit_vpmovsxwd_xmm_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem64) { append(instructions, inst_vpmovsxwd_xmm_m64(dst, src)) } -emit_vpmovsxwd_ymm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: XMM) { append(instructions, inst_vpmovsxwd_ymm_xmm(dst, src)) } -emit_vpmovsxwd_ymm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: Mem128) { append(instructions, inst_vpmovsxwd_ymm_m128(dst, src)) } +emit_vpmovsxwd_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append_elem(instructions, inst_vpmovsxwd_xmm_xmm(dst, src)) } +emit_vpmovsxwd_xmm_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem64) { append_elem(instructions, inst_vpmovsxwd_xmm_m64(dst, src)) } +emit_vpmovsxwd_ymm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: XMM) { append_elem(instructions, inst_vpmovsxwd_ymm_xmm(dst, src)) } +emit_vpmovsxwd_ymm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: Mem128) { append_elem(instructions, inst_vpmovsxwd_ymm_m128(dst, src)) } inst_vpmovsxwq_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPMOVSXWQ, operand_count = 2, ops = {op_xmm(dst), op_xmm(src), {}, {}} }, 1456) } inst_vpmovsxwq_xmm_m32 :: #force_inline proc "contextless" (dst: XMM, src: Mem32) -> Instruction { return with_hint(Instruction{ mnemonic = .VPMOVSXWQ, operand_count = 2, ops = {op_xmm(dst), op_mem(src.mem, 4), {}, {}} }, 1456) } inst_vpmovsxwq_ymm_xmm :: #force_inline proc "contextless" (dst: YMM, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPMOVSXWQ, operand_count = 2, ops = {op_ymm(dst), op_xmm(src), {}, {}} }, 1457) } inst_vpmovsxwq_ymm_m64 :: #force_inline proc "contextless" (dst: YMM, src: Mem64) -> Instruction { return with_hint(Instruction{ mnemonic = .VPMOVSXWQ, operand_count = 2, ops = {op_ymm(dst), op_mem(src.mem, 8), {}, {}} }, 1457) } -emit_vpmovsxwq_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append(instructions, inst_vpmovsxwq_xmm_xmm(dst, src)) } -emit_vpmovsxwq_xmm_m32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem32) { append(instructions, inst_vpmovsxwq_xmm_m32(dst, src)) } -emit_vpmovsxwq_ymm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: XMM) { append(instructions, inst_vpmovsxwq_ymm_xmm(dst, src)) } -emit_vpmovsxwq_ymm_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: Mem64) { append(instructions, inst_vpmovsxwq_ymm_m64(dst, src)) } +emit_vpmovsxwq_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append_elem(instructions, inst_vpmovsxwq_xmm_xmm(dst, src)) } +emit_vpmovsxwq_xmm_m32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem32) { append_elem(instructions, inst_vpmovsxwq_xmm_m32(dst, src)) } +emit_vpmovsxwq_ymm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: XMM) { append_elem(instructions, inst_vpmovsxwq_ymm_xmm(dst, src)) } +emit_vpmovsxwq_ymm_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: Mem64) { append_elem(instructions, inst_vpmovsxwq_ymm_m64(dst, src)) } inst_vpmovsxdq_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPMOVSXDQ, operand_count = 2, ops = {op_xmm(dst), op_xmm(src), {}, {}} }, 1458) } inst_vpmovsxdq_xmm_m64 :: #force_inline proc "contextless" (dst: XMM, src: Mem64) -> Instruction { return with_hint(Instruction{ mnemonic = .VPMOVSXDQ, operand_count = 2, ops = {op_xmm(dst), op_mem(src.mem, 8), {}, {}} }, 1458) } inst_vpmovsxdq_ymm_xmm :: #force_inline proc "contextless" (dst: YMM, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPMOVSXDQ, operand_count = 2, ops = {op_ymm(dst), op_xmm(src), {}, {}} }, 1459) } inst_vpmovsxdq_ymm_m128 :: #force_inline proc "contextless" (dst: YMM, src: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .VPMOVSXDQ, operand_count = 2, ops = {op_ymm(dst), op_mem(src.mem, 16), {}, {}} }, 1459) } -emit_vpmovsxdq_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append(instructions, inst_vpmovsxdq_xmm_xmm(dst, src)) } -emit_vpmovsxdq_xmm_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem64) { append(instructions, inst_vpmovsxdq_xmm_m64(dst, src)) } -emit_vpmovsxdq_ymm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: XMM) { append(instructions, inst_vpmovsxdq_ymm_xmm(dst, src)) } -emit_vpmovsxdq_ymm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: Mem128) { append(instructions, inst_vpmovsxdq_ymm_m128(dst, src)) } +emit_vpmovsxdq_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append_elem(instructions, inst_vpmovsxdq_xmm_xmm(dst, src)) } +emit_vpmovsxdq_xmm_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem64) { append_elem(instructions, inst_vpmovsxdq_xmm_m64(dst, src)) } +emit_vpmovsxdq_ymm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: XMM) { append_elem(instructions, inst_vpmovsxdq_ymm_xmm(dst, src)) } +emit_vpmovsxdq_ymm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: Mem128) { append_elem(instructions, inst_vpmovsxdq_ymm_m128(dst, src)) } inst_vpmovzxbw_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPMOVZXBW, operand_count = 2, ops = {op_xmm(dst), op_xmm(src), {}, {}} }, 1460) } inst_vpmovzxbw_xmm_m64 :: #force_inline proc "contextless" (dst: XMM, src: Mem64) -> Instruction { return with_hint(Instruction{ mnemonic = .VPMOVZXBW, operand_count = 2, ops = {op_xmm(dst), op_mem(src.mem, 8), {}, {}} }, 1460) } inst_vpmovzxbw_ymm_xmm :: #force_inline proc "contextless" (dst: YMM, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPMOVZXBW, operand_count = 2, ops = {op_ymm(dst), op_xmm(src), {}, {}} }, 1461) } inst_vpmovzxbw_ymm_m128 :: #force_inline proc "contextless" (dst: YMM, src: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .VPMOVZXBW, operand_count = 2, ops = {op_ymm(dst), op_mem(src.mem, 16), {}, {}} }, 1461) } -emit_vpmovzxbw_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append(instructions, inst_vpmovzxbw_xmm_xmm(dst, src)) } -emit_vpmovzxbw_xmm_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem64) { append(instructions, inst_vpmovzxbw_xmm_m64(dst, src)) } -emit_vpmovzxbw_ymm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: XMM) { append(instructions, inst_vpmovzxbw_ymm_xmm(dst, src)) } -emit_vpmovzxbw_ymm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: Mem128) { append(instructions, inst_vpmovzxbw_ymm_m128(dst, src)) } +emit_vpmovzxbw_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append_elem(instructions, inst_vpmovzxbw_xmm_xmm(dst, src)) } +emit_vpmovzxbw_xmm_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem64) { append_elem(instructions, inst_vpmovzxbw_xmm_m64(dst, src)) } +emit_vpmovzxbw_ymm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: XMM) { append_elem(instructions, inst_vpmovzxbw_ymm_xmm(dst, src)) } +emit_vpmovzxbw_ymm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: Mem128) { append_elem(instructions, inst_vpmovzxbw_ymm_m128(dst, src)) } inst_vpmovzxbd_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPMOVZXBD, operand_count = 2, ops = {op_xmm(dst), op_xmm(src), {}, {}} }, 1462) } inst_vpmovzxbd_xmm_m32 :: #force_inline proc "contextless" (dst: XMM, src: Mem32) -> Instruction { return with_hint(Instruction{ mnemonic = .VPMOVZXBD, operand_count = 2, ops = {op_xmm(dst), op_mem(src.mem, 4), {}, {}} }, 1462) } inst_vpmovzxbd_ymm_xmm :: #force_inline proc "contextless" (dst: YMM, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPMOVZXBD, operand_count = 2, ops = {op_ymm(dst), op_xmm(src), {}, {}} }, 1463) } inst_vpmovzxbd_ymm_m64 :: #force_inline proc "contextless" (dst: YMM, src: Mem64) -> Instruction { return with_hint(Instruction{ mnemonic = .VPMOVZXBD, operand_count = 2, ops = {op_ymm(dst), op_mem(src.mem, 8), {}, {}} }, 1463) } -emit_vpmovzxbd_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append(instructions, inst_vpmovzxbd_xmm_xmm(dst, src)) } -emit_vpmovzxbd_xmm_m32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem32) { append(instructions, inst_vpmovzxbd_xmm_m32(dst, src)) } -emit_vpmovzxbd_ymm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: XMM) { append(instructions, inst_vpmovzxbd_ymm_xmm(dst, src)) } -emit_vpmovzxbd_ymm_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: Mem64) { append(instructions, inst_vpmovzxbd_ymm_m64(dst, src)) } +emit_vpmovzxbd_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append_elem(instructions, inst_vpmovzxbd_xmm_xmm(dst, src)) } +emit_vpmovzxbd_xmm_m32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem32) { append_elem(instructions, inst_vpmovzxbd_xmm_m32(dst, src)) } +emit_vpmovzxbd_ymm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: XMM) { append_elem(instructions, inst_vpmovzxbd_ymm_xmm(dst, src)) } +emit_vpmovzxbd_ymm_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: Mem64) { append_elem(instructions, inst_vpmovzxbd_ymm_m64(dst, src)) } inst_vpmovzxbq_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPMOVZXBQ, operand_count = 2, ops = {op_xmm(dst), op_xmm(src), {}, {}} }, 1464) } inst_vpmovzxbq_ymm_xmm :: #force_inline proc "contextless" (dst: YMM, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPMOVZXBQ, operand_count = 2, ops = {op_ymm(dst), op_xmm(src), {}, {}} }, 1465) } inst_vpmovzxbq_ymm_m32 :: #force_inline proc "contextless" (dst: YMM, src: Mem32) -> Instruction { return with_hint(Instruction{ mnemonic = .VPMOVZXBQ, operand_count = 2, ops = {op_ymm(dst), op_mem(src.mem, 4), {}, {}} }, 1465) } -emit_vpmovzxbq_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append(instructions, inst_vpmovzxbq_xmm_xmm(dst, src)) } -emit_vpmovzxbq_ymm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: XMM) { append(instructions, inst_vpmovzxbq_ymm_xmm(dst, src)) } -emit_vpmovzxbq_ymm_m32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: Mem32) { append(instructions, inst_vpmovzxbq_ymm_m32(dst, src)) } +emit_vpmovzxbq_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append_elem(instructions, inst_vpmovzxbq_xmm_xmm(dst, src)) } +emit_vpmovzxbq_ymm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: XMM) { append_elem(instructions, inst_vpmovzxbq_ymm_xmm(dst, src)) } +emit_vpmovzxbq_ymm_m32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: Mem32) { append_elem(instructions, inst_vpmovzxbq_ymm_m32(dst, src)) } inst_vpmovzxwd_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPMOVZXWD, operand_count = 2, ops = {op_xmm(dst), op_xmm(src), {}, {}} }, 1466) } inst_vpmovzxwd_xmm_m64 :: #force_inline proc "contextless" (dst: XMM, src: Mem64) -> Instruction { return with_hint(Instruction{ mnemonic = .VPMOVZXWD, operand_count = 2, ops = {op_xmm(dst), op_mem(src.mem, 8), {}, {}} }, 1466) } inst_vpmovzxwd_ymm_xmm :: #force_inline proc "contextless" (dst: YMM, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPMOVZXWD, operand_count = 2, ops = {op_ymm(dst), op_xmm(src), {}, {}} }, 1467) } inst_vpmovzxwd_ymm_m128 :: #force_inline proc "contextless" (dst: YMM, src: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .VPMOVZXWD, operand_count = 2, ops = {op_ymm(dst), op_mem(src.mem, 16), {}, {}} }, 1467) } -emit_vpmovzxwd_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append(instructions, inst_vpmovzxwd_xmm_xmm(dst, src)) } -emit_vpmovzxwd_xmm_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem64) { append(instructions, inst_vpmovzxwd_xmm_m64(dst, src)) } -emit_vpmovzxwd_ymm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: XMM) { append(instructions, inst_vpmovzxwd_ymm_xmm(dst, src)) } -emit_vpmovzxwd_ymm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: Mem128) { append(instructions, inst_vpmovzxwd_ymm_m128(dst, src)) } +emit_vpmovzxwd_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append_elem(instructions, inst_vpmovzxwd_xmm_xmm(dst, src)) } +emit_vpmovzxwd_xmm_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem64) { append_elem(instructions, inst_vpmovzxwd_xmm_m64(dst, src)) } +emit_vpmovzxwd_ymm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: XMM) { append_elem(instructions, inst_vpmovzxwd_ymm_xmm(dst, src)) } +emit_vpmovzxwd_ymm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: Mem128) { append_elem(instructions, inst_vpmovzxwd_ymm_m128(dst, src)) } inst_vpmovzxwq_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPMOVZXWQ, operand_count = 2, ops = {op_xmm(dst), op_xmm(src), {}, {}} }, 1468) } inst_vpmovzxwq_xmm_m32 :: #force_inline proc "contextless" (dst: XMM, src: Mem32) -> Instruction { return with_hint(Instruction{ mnemonic = .VPMOVZXWQ, operand_count = 2, ops = {op_xmm(dst), op_mem(src.mem, 4), {}, {}} }, 1468) } inst_vpmovzxwq_ymm_xmm :: #force_inline proc "contextless" (dst: YMM, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPMOVZXWQ, operand_count = 2, ops = {op_ymm(dst), op_xmm(src), {}, {}} }, 1469) } inst_vpmovzxwq_ymm_m64 :: #force_inline proc "contextless" (dst: YMM, src: Mem64) -> Instruction { return with_hint(Instruction{ mnemonic = .VPMOVZXWQ, operand_count = 2, ops = {op_ymm(dst), op_mem(src.mem, 8), {}, {}} }, 1469) } -emit_vpmovzxwq_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append(instructions, inst_vpmovzxwq_xmm_xmm(dst, src)) } -emit_vpmovzxwq_xmm_m32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem32) { append(instructions, inst_vpmovzxwq_xmm_m32(dst, src)) } -emit_vpmovzxwq_ymm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: XMM) { append(instructions, inst_vpmovzxwq_ymm_xmm(dst, src)) } -emit_vpmovzxwq_ymm_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: Mem64) { append(instructions, inst_vpmovzxwq_ymm_m64(dst, src)) } +emit_vpmovzxwq_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append_elem(instructions, inst_vpmovzxwq_xmm_xmm(dst, src)) } +emit_vpmovzxwq_xmm_m32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem32) { append_elem(instructions, inst_vpmovzxwq_xmm_m32(dst, src)) } +emit_vpmovzxwq_ymm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: XMM) { append_elem(instructions, inst_vpmovzxwq_ymm_xmm(dst, src)) } +emit_vpmovzxwq_ymm_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: Mem64) { append_elem(instructions, inst_vpmovzxwq_ymm_m64(dst, src)) } inst_vpmovzxdq_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPMOVZXDQ, operand_count = 2, ops = {op_xmm(dst), op_xmm(src), {}, {}} }, 1470) } inst_vpmovzxdq_xmm_m64 :: #force_inline proc "contextless" (dst: XMM, src: Mem64) -> Instruction { return with_hint(Instruction{ mnemonic = .VPMOVZXDQ, operand_count = 2, ops = {op_xmm(dst), op_mem(src.mem, 8), {}, {}} }, 1470) } inst_vpmovzxdq_ymm_xmm :: #force_inline proc "contextless" (dst: YMM, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPMOVZXDQ, operand_count = 2, ops = {op_ymm(dst), op_xmm(src), {}, {}} }, 1471) } inst_vpmovzxdq_ymm_m128 :: #force_inline proc "contextless" (dst: YMM, src: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .VPMOVZXDQ, operand_count = 2, ops = {op_ymm(dst), op_mem(src.mem, 16), {}, {}} }, 1471) } -emit_vpmovzxdq_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append(instructions, inst_vpmovzxdq_xmm_xmm(dst, src)) } -emit_vpmovzxdq_xmm_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem64) { append(instructions, inst_vpmovzxdq_xmm_m64(dst, src)) } -emit_vpmovzxdq_ymm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: XMM) { append(instructions, inst_vpmovzxdq_ymm_xmm(dst, src)) } -emit_vpmovzxdq_ymm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: Mem128) { append(instructions, inst_vpmovzxdq_ymm_m128(dst, src)) } +emit_vpmovzxdq_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append_elem(instructions, inst_vpmovzxdq_xmm_xmm(dst, src)) } +emit_vpmovzxdq_xmm_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem64) { append_elem(instructions, inst_vpmovzxdq_xmm_m64(dst, src)) } +emit_vpmovzxdq_ymm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: XMM) { append_elem(instructions, inst_vpmovzxdq_ymm_xmm(dst, src)) } +emit_vpmovzxdq_ymm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: Mem128) { append_elem(instructions, inst_vpmovzxdq_ymm_m128(dst, src)) } inst_vpmuldq_xmm_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPMULDQ, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_xmm(src2), {}} }, 1472) } inst_vpmuldq_xmm_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .VPMULDQ, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_mem(src2.mem, 16), {}} }, 1472) } inst_vpmuldq_ymm_ymm_ymm :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: YMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPMULDQ, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_ymm(src2), {}} }, 1473) } inst_vpmuldq_ymm_ymm_m256 :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: Mem256) -> Instruction { return with_hint(Instruction{ mnemonic = .VPMULDQ, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_mem(src2.mem, 32), {}} }, 1473) } -emit_vpmuldq_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append(instructions, inst_vpmuldq_xmm_xmm_xmm(dst, src, src2)) } -emit_vpmuldq_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append(instructions, inst_vpmuldq_xmm_xmm_m128(dst, src, src2)) } -emit_vpmuldq_ymm_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM) { append(instructions, inst_vpmuldq_ymm_ymm_ymm(dst, src, src2)) } -emit_vpmuldq_ymm_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256) { append(instructions, inst_vpmuldq_ymm_ymm_m256(dst, src, src2)) } +emit_vpmuldq_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append_elem(instructions, inst_vpmuldq_xmm_xmm_xmm(dst, src, src2)) } +emit_vpmuldq_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append_elem(instructions, inst_vpmuldq_xmm_xmm_m128(dst, src, src2)) } +emit_vpmuldq_ymm_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM) { append_elem(instructions, inst_vpmuldq_ymm_ymm_ymm(dst, src, src2)) } +emit_vpmuldq_ymm_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256) { append_elem(instructions, inst_vpmuldq_ymm_ymm_m256(dst, src, src2)) } inst_vpmulld_xmm_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPMULLD, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_xmm(src2), {}} }, 1474) } inst_vpmulld_xmm_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .VPMULLD, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_mem(src2.mem, 16), {}} }, 1474) } inst_vpmulld_ymm_ymm_ymm :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: YMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPMULLD, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_ymm(src2), {}} }, 1475) } inst_vpmulld_ymm_ymm_m256 :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: Mem256) -> Instruction { return with_hint(Instruction{ mnemonic = .VPMULLD, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_mem(src2.mem, 32), {}} }, 1475) } -emit_vpmulld_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append(instructions, inst_vpmulld_xmm_xmm_xmm(dst, src, src2)) } -emit_vpmulld_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append(instructions, inst_vpmulld_xmm_xmm_m128(dst, src, src2)) } -emit_vpmulld_ymm_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM) { append(instructions, inst_vpmulld_ymm_ymm_ymm(dst, src, src2)) } -emit_vpmulld_ymm_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256) { append(instructions, inst_vpmulld_ymm_ymm_m256(dst, src, src2)) } +emit_vpmulld_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append_elem(instructions, inst_vpmulld_xmm_xmm_xmm(dst, src, src2)) } +emit_vpmulld_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append_elem(instructions, inst_vpmulld_xmm_xmm_m128(dst, src, src2)) } +emit_vpmulld_ymm_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM) { append_elem(instructions, inst_vpmulld_ymm_ymm_ymm(dst, src, src2)) } +emit_vpmulld_ymm_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256) { append_elem(instructions, inst_vpmulld_ymm_ymm_m256(dst, src, src2)) } inst_vmaskmovdqu_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VMASKMOVDQU, operand_count = 2, ops = {op_xmm(dst), op_xmm(src), {}, {}} }, 1476) } -emit_vmaskmovdqu_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append(instructions, inst_vmaskmovdqu_xmm_xmm(dst, src)) } +emit_vmaskmovdqu_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append_elem(instructions, inst_vmaskmovdqu_xmm_xmm(dst, src)) } inst_vpclmulqdq_xmm_xmm_xmm_imm8 :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: XMM, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .VPCLMULQDQ, operand_count = 4, ops = {op_xmm(dst), op_xmm(src), op_xmm(src2), op_imm8(imm)} }, 1477) } inst_vpclmulqdq_xmm_xmm_m128_imm8 :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: Mem128, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .VPCLMULQDQ, operand_count = 4, ops = {op_xmm(dst), op_xmm(src), op_mem(src2.mem, 16), op_imm8(imm)} }, 1477) } inst_vpclmulqdq_ymm_ymm_ymm_imm8 :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: YMM, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .VPCLMULQDQ, operand_count = 4, ops = {op_ymm(dst), op_ymm(src), op_ymm(src2), op_imm8(imm)} }, 1478) } inst_vpclmulqdq_ymm_ymm_m256_imm8 :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: Mem256, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .VPCLMULQDQ, operand_count = 4, ops = {op_ymm(dst), op_ymm(src), op_mem(src2.mem, 32), op_imm8(imm)} }, 1478) } -emit_vpclmulqdq_xmm_xmm_xmm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM, imm: i8) { append(instructions, inst_vpclmulqdq_xmm_xmm_xmm_imm8(dst, src, src2, imm)) } -emit_vpclmulqdq_xmm_xmm_m128_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128, imm: i8) { append(instructions, inst_vpclmulqdq_xmm_xmm_m128_imm8(dst, src, src2, imm)) } -emit_vpclmulqdq_ymm_ymm_ymm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM, imm: i8) { append(instructions, inst_vpclmulqdq_ymm_ymm_ymm_imm8(dst, src, src2, imm)) } -emit_vpclmulqdq_ymm_ymm_m256_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256, imm: i8) { append(instructions, inst_vpclmulqdq_ymm_ymm_m256_imm8(dst, src, src2, imm)) } +emit_vpclmulqdq_xmm_xmm_xmm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM, imm: i8) { append_elem(instructions, inst_vpclmulqdq_xmm_xmm_xmm_imm8(dst, src, src2, imm)) } +emit_vpclmulqdq_xmm_xmm_m128_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128, imm: i8) { append_elem(instructions, inst_vpclmulqdq_xmm_xmm_m128_imm8(dst, src, src2, imm)) } +emit_vpclmulqdq_ymm_ymm_ymm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM, imm: i8) { append_elem(instructions, inst_vpclmulqdq_ymm_ymm_ymm_imm8(dst, src, src2, imm)) } +emit_vpclmulqdq_ymm_ymm_m256_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256, imm: i8) { append_elem(instructions, inst_vpclmulqdq_ymm_ymm_m256_imm8(dst, src, src2, imm)) } inst_vaesdec_xmm_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VAESDEC, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_xmm(src2), {}} }, 1479) } inst_vaesdec_xmm_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .VAESDEC, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_mem(src2.mem, 16), {}} }, 1479) } -emit_vaesdec_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append(instructions, inst_vaesdec_xmm_xmm_xmm(dst, src, src2)) } -emit_vaesdec_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append(instructions, inst_vaesdec_xmm_xmm_m128(dst, src, src2)) } +emit_vaesdec_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append_elem(instructions, inst_vaesdec_xmm_xmm_xmm(dst, src, src2)) } +emit_vaesdec_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append_elem(instructions, inst_vaesdec_xmm_xmm_m128(dst, src, src2)) } inst_vaesdeclast_xmm_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VAESDECLAST, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_xmm(src2), {}} }, 1480) } inst_vaesdeclast_xmm_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .VAESDECLAST, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_mem(src2.mem, 16), {}} }, 1480) } -emit_vaesdeclast_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append(instructions, inst_vaesdeclast_xmm_xmm_xmm(dst, src, src2)) } -emit_vaesdeclast_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append(instructions, inst_vaesdeclast_xmm_xmm_m128(dst, src, src2)) } +emit_vaesdeclast_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append_elem(instructions, inst_vaesdeclast_xmm_xmm_xmm(dst, src, src2)) } +emit_vaesdeclast_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append_elem(instructions, inst_vaesdeclast_xmm_xmm_m128(dst, src, src2)) } inst_vaesenc_xmm_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VAESENC, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_xmm(src2), {}} }, 1481) } inst_vaesenc_xmm_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .VAESENC, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_mem(src2.mem, 16), {}} }, 1481) } -emit_vaesenc_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append(instructions, inst_vaesenc_xmm_xmm_xmm(dst, src, src2)) } -emit_vaesenc_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append(instructions, inst_vaesenc_xmm_xmm_m128(dst, src, src2)) } +emit_vaesenc_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append_elem(instructions, inst_vaesenc_xmm_xmm_xmm(dst, src, src2)) } +emit_vaesenc_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append_elem(instructions, inst_vaesenc_xmm_xmm_m128(dst, src, src2)) } inst_vaesenclast_xmm_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VAESENCLAST, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_xmm(src2), {}} }, 1482) } inst_vaesenclast_xmm_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .VAESENCLAST, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_mem(src2.mem, 16), {}} }, 1482) } -emit_vaesenclast_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append(instructions, inst_vaesenclast_xmm_xmm_xmm(dst, src, src2)) } -emit_vaesenclast_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append(instructions, inst_vaesenclast_xmm_xmm_m128(dst, src, src2)) } +emit_vaesenclast_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append_elem(instructions, inst_vaesenclast_xmm_xmm_xmm(dst, src, src2)) } +emit_vaesenclast_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append_elem(instructions, inst_vaesenclast_xmm_xmm_m128(dst, src, src2)) } inst_vaesimc_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VAESIMC, operand_count = 2, ops = {op_xmm(dst), op_xmm(src), {}, {}} }, 1483) } inst_vaesimc_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .VAESIMC, operand_count = 2, ops = {op_xmm(dst), op_mem(src.mem, 16), {}, {}} }, 1483) } -emit_vaesimc_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append(instructions, inst_vaesimc_xmm_xmm(dst, src)) } -emit_vaesimc_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append(instructions, inst_vaesimc_xmm_m128(dst, src)) } +emit_vaesimc_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append_elem(instructions, inst_vaesimc_xmm_xmm(dst, src)) } +emit_vaesimc_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append_elem(instructions, inst_vaesimc_xmm_m128(dst, src)) } inst_vaeskeygenassist_xmm_xmm_imm8 :: #force_inline proc "contextless" (dst: XMM, src: XMM, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .VAESKEYGENASSIST, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_imm8(imm), {}} }, 1484) } inst_vaeskeygenassist_xmm_m128_imm8 :: #force_inline proc "contextless" (dst: XMM, src: Mem128, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .VAESKEYGENASSIST, operand_count = 3, ops = {op_xmm(dst), op_mem(src.mem, 16), op_imm8(imm), {}} }, 1484) } -emit_vaeskeygenassist_xmm_xmm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, imm: i8) { append(instructions, inst_vaeskeygenassist_xmm_xmm_imm8(dst, src, imm)) } -emit_vaeskeygenassist_xmm_m128_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128, imm: i8) { append(instructions, inst_vaeskeygenassist_xmm_m128_imm8(dst, src, imm)) } +emit_vaeskeygenassist_xmm_xmm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, imm: i8) { append_elem(instructions, inst_vaeskeygenassist_xmm_xmm_imm8(dst, src, imm)) } +emit_vaeskeygenassist_xmm_m128_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128, imm: i8) { append_elem(instructions, inst_vaeskeygenassist_xmm_m128_imm8(dst, src, imm)) } inst_vbroadcastss_xmm_m32 :: #force_inline proc "contextless" (dst: XMM, src: Mem32) -> Instruction { return with_hint(Instruction{ mnemonic = .VBROADCASTSS, operand_count = 2, ops = {op_xmm(dst), op_mem(src.mem, 4), {}, {}} }, 1485) } inst_vbroadcastss_ymm_m32 :: #force_inline proc "contextless" (dst: YMM, src: Mem32) -> Instruction { return with_hint(Instruction{ mnemonic = .VBROADCASTSS, operand_count = 2, ops = {op_ymm(dst), op_mem(src.mem, 4), {}, {}} }, 1486) } inst_vbroadcastss_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VBROADCASTSS, operand_count = 2, ops = {op_xmm(dst), op_xmm(src), {}, {}} }, 1487) } inst_vbroadcastss_ymm_xmm :: #force_inline proc "contextless" (dst: YMM, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VBROADCASTSS, operand_count = 2, ops = {op_ymm(dst), op_xmm(src), {}, {}} }, 1488) } -emit_vbroadcastss_xmm_m32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem32) { append(instructions, inst_vbroadcastss_xmm_m32(dst, src)) } -emit_vbroadcastss_ymm_m32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: Mem32) { append(instructions, inst_vbroadcastss_ymm_m32(dst, src)) } -emit_vbroadcastss_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append(instructions, inst_vbroadcastss_xmm_xmm(dst, src)) } -emit_vbroadcastss_ymm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: XMM) { append(instructions, inst_vbroadcastss_ymm_xmm(dst, src)) } +emit_vbroadcastss_xmm_m32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem32) { append_elem(instructions, inst_vbroadcastss_xmm_m32(dst, src)) } +emit_vbroadcastss_ymm_m32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: Mem32) { append_elem(instructions, inst_vbroadcastss_ymm_m32(dst, src)) } +emit_vbroadcastss_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append_elem(instructions, inst_vbroadcastss_xmm_xmm(dst, src)) } +emit_vbroadcastss_ymm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: XMM) { append_elem(instructions, inst_vbroadcastss_ymm_xmm(dst, src)) } inst_vbroadcastsd_ymm_m64 :: #force_inline proc "contextless" (dst: YMM, src: Mem64) -> Instruction { return with_hint(Instruction{ mnemonic = .VBROADCASTSD, operand_count = 2, ops = {op_ymm(dst), op_mem(src.mem, 8), {}, {}} }, 1489) } inst_vbroadcastsd_ymm_xmm :: #force_inline proc "contextless" (dst: YMM, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VBROADCASTSD, operand_count = 2, ops = {op_ymm(dst), op_xmm(src), {}, {}} }, 1490) } -emit_vbroadcastsd_ymm_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: Mem64) { append(instructions, inst_vbroadcastsd_ymm_m64(dst, src)) } -emit_vbroadcastsd_ymm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: XMM) { append(instructions, inst_vbroadcastsd_ymm_xmm(dst, src)) } +emit_vbroadcastsd_ymm_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: Mem64) { append_elem(instructions, inst_vbroadcastsd_ymm_m64(dst, src)) } +emit_vbroadcastsd_ymm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: XMM) { append_elem(instructions, inst_vbroadcastsd_ymm_xmm(dst, src)) } inst_vbroadcastf128_ymm_m128 :: #force_inline proc "contextless" (dst: YMM, src: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .VBROADCASTF128, operand_count = 2, ops = {op_ymm(dst), op_mem(src.mem, 16), {}, {}} }, 1491) } -emit_vbroadcastf128_ymm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: Mem128) { append(instructions, inst_vbroadcastf128_ymm_m128(dst, src)) } +emit_vbroadcastf128_ymm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: Mem128) { append_elem(instructions, inst_vbroadcastf128_ymm_m128(dst, src)) } inst_vextractf128_xmm_ymm_imm8 :: #force_inline proc "contextless" (dst: XMM, src: YMM, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .VEXTRACTF128, operand_count = 3, ops = {op_xmm(dst), op_ymm(src), op_imm8(imm), {}} }, 1492) } inst_vextractf128_m128_ymm_imm8 :: #force_inline proc "contextless" (dst: Mem128, src: YMM, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .VEXTRACTF128, operand_count = 3, ops = {op_mem(dst.mem, 16), op_ymm(src), op_imm8(imm), {}} }, 1492) } -emit_vextractf128_xmm_ymm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: YMM, imm: i8) { append(instructions, inst_vextractf128_xmm_ymm_imm8(dst, src, imm)) } -emit_vextractf128_m128_ymm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem128, src: YMM, imm: i8) { append(instructions, inst_vextractf128_m128_ymm_imm8(dst, src, imm)) } +emit_vextractf128_xmm_ymm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: YMM, imm: i8) { append_elem(instructions, inst_vextractf128_xmm_ymm_imm8(dst, src, imm)) } +emit_vextractf128_m128_ymm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem128, src: YMM, imm: i8) { append_elem(instructions, inst_vextractf128_m128_ymm_imm8(dst, src, imm)) } inst_vinsertf128_ymm_ymm_xmm_imm8 :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: XMM, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .VINSERTF128, operand_count = 4, ops = {op_ymm(dst), op_ymm(src), op_xmm(src2), op_imm8(imm)} }, 1493) } inst_vinsertf128_ymm_ymm_m128_imm8 :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: Mem128, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .VINSERTF128, operand_count = 4, ops = {op_ymm(dst), op_ymm(src), op_mem(src2.mem, 16), op_imm8(imm)} }, 1493) } -emit_vinsertf128_ymm_ymm_xmm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: XMM, imm: i8) { append(instructions, inst_vinsertf128_ymm_ymm_xmm_imm8(dst, src, src2, imm)) } -emit_vinsertf128_ymm_ymm_m128_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem128, imm: i8) { append(instructions, inst_vinsertf128_ymm_ymm_m128_imm8(dst, src, src2, imm)) } +emit_vinsertf128_ymm_ymm_xmm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: XMM, imm: i8) { append_elem(instructions, inst_vinsertf128_ymm_ymm_xmm_imm8(dst, src, src2, imm)) } +emit_vinsertf128_ymm_ymm_m128_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem128, imm: i8) { append_elem(instructions, inst_vinsertf128_ymm_ymm_m128_imm8(dst, src, src2, imm)) } inst_vperm2f128_ymm_ymm_ymm_imm8 :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: YMM, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .VPERM2F128, operand_count = 4, ops = {op_ymm(dst), op_ymm(src), op_ymm(src2), op_imm8(imm)} }, 1494) } inst_vperm2f128_ymm_ymm_m256_imm8 :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: Mem256, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .VPERM2F128, operand_count = 4, ops = {op_ymm(dst), op_ymm(src), op_mem(src2.mem, 32), op_imm8(imm)} }, 1494) } -emit_vperm2f128_ymm_ymm_ymm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM, imm: i8) { append(instructions, inst_vperm2f128_ymm_ymm_ymm_imm8(dst, src, src2, imm)) } -emit_vperm2f128_ymm_ymm_m256_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256, imm: i8) { append(instructions, inst_vperm2f128_ymm_ymm_m256_imm8(dst, src, src2, imm)) } +emit_vperm2f128_ymm_ymm_ymm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM, imm: i8) { append_elem(instructions, inst_vperm2f128_ymm_ymm_ymm_imm8(dst, src, src2, imm)) } +emit_vperm2f128_ymm_ymm_m256_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256, imm: i8) { append_elem(instructions, inst_vperm2f128_ymm_ymm_m256_imm8(dst, src, src2, imm)) } inst_vmaskmovps_xmm_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .VMASKMOVPS, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_mem(src2.mem, 16), {}} }, 1495) } inst_vmaskmovps_ymm_ymm_m256 :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: Mem256) -> Instruction { return with_hint(Instruction{ mnemonic = .VMASKMOVPS, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_mem(src2.mem, 32), {}} }, 1496) } inst_vmaskmovps_m128_xmm_xmm :: #force_inline proc "contextless" (dst: Mem128, src: XMM, src2: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VMASKMOVPS, operand_count = 3, ops = {op_mem(dst.mem, 16), op_xmm(src), op_xmm(src2), {}} }, 1497) } inst_vmaskmovps_m256_ymm_ymm :: #force_inline proc "contextless" (dst: Mem256, src: YMM, src2: YMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VMASKMOVPS, operand_count = 3, ops = {op_mem(dst.mem, 32), op_ymm(src), op_ymm(src2), {}} }, 1498) } -emit_vmaskmovps_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append(instructions, inst_vmaskmovps_xmm_xmm_m128(dst, src, src2)) } -emit_vmaskmovps_ymm_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256) { append(instructions, inst_vmaskmovps_ymm_ymm_m256(dst, src, src2)) } -emit_vmaskmovps_m128_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem128, src: XMM, src2: XMM) { append(instructions, inst_vmaskmovps_m128_xmm_xmm(dst, src, src2)) } -emit_vmaskmovps_m256_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem256, src: YMM, src2: YMM) { append(instructions, inst_vmaskmovps_m256_ymm_ymm(dst, src, src2)) } +emit_vmaskmovps_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append_elem(instructions, inst_vmaskmovps_xmm_xmm_m128(dst, src, src2)) } +emit_vmaskmovps_ymm_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256) { append_elem(instructions, inst_vmaskmovps_ymm_ymm_m256(dst, src, src2)) } +emit_vmaskmovps_m128_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem128, src: XMM, src2: XMM) { append_elem(instructions, inst_vmaskmovps_m128_xmm_xmm(dst, src, src2)) } +emit_vmaskmovps_m256_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem256, src: YMM, src2: YMM) { append_elem(instructions, inst_vmaskmovps_m256_ymm_ymm(dst, src, src2)) } inst_vmaskmovpd_xmm_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .VMASKMOVPD, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_mem(src2.mem, 16), {}} }, 1499) } inst_vmaskmovpd_ymm_ymm_m256 :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: Mem256) -> Instruction { return with_hint(Instruction{ mnemonic = .VMASKMOVPD, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_mem(src2.mem, 32), {}} }, 1500) } inst_vmaskmovpd_m128_xmm_xmm :: #force_inline proc "contextless" (dst: Mem128, src: XMM, src2: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VMASKMOVPD, operand_count = 3, ops = {op_mem(dst.mem, 16), op_xmm(src), op_xmm(src2), {}} }, 1501) } inst_vmaskmovpd_m256_ymm_ymm :: #force_inline proc "contextless" (dst: Mem256, src: YMM, src2: YMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VMASKMOVPD, operand_count = 3, ops = {op_mem(dst.mem, 32), op_ymm(src), op_ymm(src2), {}} }, 1502) } -emit_vmaskmovpd_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append(instructions, inst_vmaskmovpd_xmm_xmm_m128(dst, src, src2)) } -emit_vmaskmovpd_ymm_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256) { append(instructions, inst_vmaskmovpd_ymm_ymm_m256(dst, src, src2)) } -emit_vmaskmovpd_m128_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem128, src: XMM, src2: XMM) { append(instructions, inst_vmaskmovpd_m128_xmm_xmm(dst, src, src2)) } -emit_vmaskmovpd_m256_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem256, src: YMM, src2: YMM) { append(instructions, inst_vmaskmovpd_m256_ymm_ymm(dst, src, src2)) } +emit_vmaskmovpd_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append_elem(instructions, inst_vmaskmovpd_xmm_xmm_m128(dst, src, src2)) } +emit_vmaskmovpd_ymm_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256) { append_elem(instructions, inst_vmaskmovpd_ymm_ymm_m256(dst, src, src2)) } +emit_vmaskmovpd_m128_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem128, src: XMM, src2: XMM) { append_elem(instructions, inst_vmaskmovpd_m128_xmm_xmm(dst, src, src2)) } +emit_vmaskmovpd_m256_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem256, src: YMM, src2: YMM) { append_elem(instructions, inst_vmaskmovpd_m256_ymm_ymm(dst, src, src2)) } inst_vtestps_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VTESTPS, operand_count = 2, ops = {op_xmm(dst), op_xmm(src), {}, {}} }, 1503) } inst_vtestps_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .VTESTPS, operand_count = 2, ops = {op_xmm(dst), op_mem(src.mem, 16), {}, {}} }, 1503) } inst_vtestps_ymm_ymm :: #force_inline proc "contextless" (dst: YMM, src: YMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VTESTPS, operand_count = 2, ops = {op_ymm(dst), op_ymm(src), {}, {}} }, 1504) } inst_vtestps_ymm_m256 :: #force_inline proc "contextless" (dst: YMM, src: Mem256) -> Instruction { return with_hint(Instruction{ mnemonic = .VTESTPS, operand_count = 2, ops = {op_ymm(dst), op_mem(src.mem, 32), {}, {}} }, 1504) } -emit_vtestps_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append(instructions, inst_vtestps_xmm_xmm(dst, src)) } -emit_vtestps_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append(instructions, inst_vtestps_xmm_m128(dst, src)) } -emit_vtestps_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM) { append(instructions, inst_vtestps_ymm_ymm(dst, src)) } -emit_vtestps_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: Mem256) { append(instructions, inst_vtestps_ymm_m256(dst, src)) } +emit_vtestps_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append_elem(instructions, inst_vtestps_xmm_xmm(dst, src)) } +emit_vtestps_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append_elem(instructions, inst_vtestps_xmm_m128(dst, src)) } +emit_vtestps_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM) { append_elem(instructions, inst_vtestps_ymm_ymm(dst, src)) } +emit_vtestps_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: Mem256) { append_elem(instructions, inst_vtestps_ymm_m256(dst, src)) } inst_vtestpd_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VTESTPD, operand_count = 2, ops = {op_xmm(dst), op_xmm(src), {}, {}} }, 1505) } inst_vtestpd_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .VTESTPD, operand_count = 2, ops = {op_xmm(dst), op_mem(src.mem, 16), {}, {}} }, 1505) } inst_vtestpd_ymm_ymm :: #force_inline proc "contextless" (dst: YMM, src: YMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VTESTPD, operand_count = 2, ops = {op_ymm(dst), op_ymm(src), {}, {}} }, 1506) } inst_vtestpd_ymm_m256 :: #force_inline proc "contextless" (dst: YMM, src: Mem256) -> Instruction { return with_hint(Instruction{ mnemonic = .VTESTPD, operand_count = 2, ops = {op_ymm(dst), op_mem(src.mem, 32), {}, {}} }, 1506) } -emit_vtestpd_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append(instructions, inst_vtestpd_xmm_xmm(dst, src)) } -emit_vtestpd_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append(instructions, inst_vtestpd_xmm_m128(dst, src)) } -emit_vtestpd_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM) { append(instructions, inst_vtestpd_ymm_ymm(dst, src)) } -emit_vtestpd_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: Mem256) { append(instructions, inst_vtestpd_ymm_m256(dst, src)) } +emit_vtestpd_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append_elem(instructions, inst_vtestpd_xmm_xmm(dst, src)) } +emit_vtestpd_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append_elem(instructions, inst_vtestpd_xmm_m128(dst, src)) } +emit_vtestpd_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM) { append_elem(instructions, inst_vtestpd_ymm_ymm(dst, src)) } +emit_vtestpd_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: Mem256) { append_elem(instructions, inst_vtestpd_ymm_m256(dst, src)) } inst_vzeroall_none :: #force_inline proc "contextless" () -> Instruction { return with_hint(Instruction{ mnemonic = .VZEROALL, operand_count = 0, ops = {{}, {}, {}, {}} }, 1507) } -emit_vzeroall_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_vzeroall_none()) } +emit_vzeroall_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_vzeroall_none()) } inst_vzeroupper_none :: #force_inline proc "contextless" () -> Instruction { return with_hint(Instruction{ mnemonic = .VZEROUPPER, operand_count = 0, ops = {{}, {}, {}, {}} }, 1508) } -emit_vzeroupper_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_vzeroupper_none()) } +emit_vzeroupper_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_vzeroupper_none()) } inst_vbroadcasti128_ymm_m128 :: #force_inline proc "contextless" (dst: YMM, src: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .VBROADCASTI128, operand_count = 2, ops = {op_ymm(dst), op_mem(src.mem, 16), {}, {}} }, 1509) } -emit_vbroadcasti128_ymm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: Mem128) { append(instructions, inst_vbroadcasti128_ymm_m128(dst, src)) } +emit_vbroadcasti128_ymm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: Mem128) { append_elem(instructions, inst_vbroadcasti128_ymm_m128(dst, src)) } inst_vextracti128_xmm_ymm_imm8 :: #force_inline proc "contextless" (dst: XMM, src: YMM, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .VEXTRACTI128, operand_count = 3, ops = {op_xmm(dst), op_ymm(src), op_imm8(imm), {}} }, 1510) } inst_vextracti128_m128_ymm_imm8 :: #force_inline proc "contextless" (dst: Mem128, src: YMM, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .VEXTRACTI128, operand_count = 3, ops = {op_mem(dst.mem, 16), op_ymm(src), op_imm8(imm), {}} }, 1510) } -emit_vextracti128_xmm_ymm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: YMM, imm: i8) { append(instructions, inst_vextracti128_xmm_ymm_imm8(dst, src, imm)) } -emit_vextracti128_m128_ymm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem128, src: YMM, imm: i8) { append(instructions, inst_vextracti128_m128_ymm_imm8(dst, src, imm)) } +emit_vextracti128_xmm_ymm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: YMM, imm: i8) { append_elem(instructions, inst_vextracti128_xmm_ymm_imm8(dst, src, imm)) } +emit_vextracti128_m128_ymm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem128, src: YMM, imm: i8) { append_elem(instructions, inst_vextracti128_m128_ymm_imm8(dst, src, imm)) } inst_vinserti128_ymm_ymm_xmm_imm8 :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: XMM, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .VINSERTI128, operand_count = 4, ops = {op_ymm(dst), op_ymm(src), op_xmm(src2), op_imm8(imm)} }, 1511) } inst_vinserti128_ymm_ymm_m128_imm8 :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: Mem128, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .VINSERTI128, operand_count = 4, ops = {op_ymm(dst), op_ymm(src), op_mem(src2.mem, 16), op_imm8(imm)} }, 1511) } -emit_vinserti128_ymm_ymm_xmm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: XMM, imm: i8) { append(instructions, inst_vinserti128_ymm_ymm_xmm_imm8(dst, src, src2, imm)) } -emit_vinserti128_ymm_ymm_m128_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem128, imm: i8) { append(instructions, inst_vinserti128_ymm_ymm_m128_imm8(dst, src, src2, imm)) } +emit_vinserti128_ymm_ymm_xmm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: XMM, imm: i8) { append_elem(instructions, inst_vinserti128_ymm_ymm_xmm_imm8(dst, src, src2, imm)) } +emit_vinserti128_ymm_ymm_m128_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem128, imm: i8) { append_elem(instructions, inst_vinserti128_ymm_ymm_m128_imm8(dst, src, src2, imm)) } inst_vperm2i128_ymm_ymm_ymm_imm8 :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: YMM, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .VPERM2I128, operand_count = 4, ops = {op_ymm(dst), op_ymm(src), op_ymm(src2), op_imm8(imm)} }, 1512) } inst_vperm2i128_ymm_ymm_m256_imm8 :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: Mem256, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .VPERM2I128, operand_count = 4, ops = {op_ymm(dst), op_ymm(src), op_mem(src2.mem, 32), op_imm8(imm)} }, 1512) } -emit_vperm2i128_ymm_ymm_ymm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM, imm: i8) { append(instructions, inst_vperm2i128_ymm_ymm_ymm_imm8(dst, src, src2, imm)) } -emit_vperm2i128_ymm_ymm_m256_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256, imm: i8) { append(instructions, inst_vperm2i128_ymm_ymm_m256_imm8(dst, src, src2, imm)) } +emit_vperm2i128_ymm_ymm_ymm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM, imm: i8) { append_elem(instructions, inst_vperm2i128_ymm_ymm_ymm_imm8(dst, src, src2, imm)) } +emit_vperm2i128_ymm_ymm_m256_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256, imm: i8) { append_elem(instructions, inst_vperm2i128_ymm_ymm_m256_imm8(dst, src, src2, imm)) } inst_vpermd_ymm_ymm_ymm :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: YMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPERMD, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_ymm(src2), {}} }, 1513) } inst_vpermd_ymm_ymm_m256 :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: Mem256) -> Instruction { return with_hint(Instruction{ mnemonic = .VPERMD, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_mem(src2.mem, 32), {}} }, 1513) } -emit_vpermd_ymm_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM) { append(instructions, inst_vpermd_ymm_ymm_ymm(dst, src, src2)) } -emit_vpermd_ymm_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256) { append(instructions, inst_vpermd_ymm_ymm_m256(dst, src, src2)) } +emit_vpermd_ymm_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM) { append_elem(instructions, inst_vpermd_ymm_ymm_ymm(dst, src, src2)) } +emit_vpermd_ymm_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256) { append_elem(instructions, inst_vpermd_ymm_ymm_m256(dst, src, src2)) } inst_vpermps_ymm_ymm_ymm :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: YMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPERMPS, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_ymm(src2), {}} }, 1514) } inst_vpermps_ymm_ymm_m256 :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: Mem256) -> Instruction { return with_hint(Instruction{ mnemonic = .VPERMPS, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_mem(src2.mem, 32), {}} }, 1514) } -emit_vpermps_ymm_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM) { append(instructions, inst_vpermps_ymm_ymm_ymm(dst, src, src2)) } -emit_vpermps_ymm_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256) { append(instructions, inst_vpermps_ymm_ymm_m256(dst, src, src2)) } +emit_vpermps_ymm_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM) { append_elem(instructions, inst_vpermps_ymm_ymm_ymm(dst, src, src2)) } +emit_vpermps_ymm_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256) { append_elem(instructions, inst_vpermps_ymm_ymm_m256(dst, src, src2)) } inst_vpermq_ymm_ymm_imm8 :: #force_inline proc "contextless" (dst: YMM, src: YMM, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .VPERMQ, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_imm8(imm), {}} }, 1515) } inst_vpermq_ymm_m256_imm8 :: #force_inline proc "contextless" (dst: YMM, src: Mem256, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .VPERMQ, operand_count = 3, ops = {op_ymm(dst), op_mem(src.mem, 32), op_imm8(imm), {}} }, 1515) } -emit_vpermq_ymm_ymm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, imm: i8) { append(instructions, inst_vpermq_ymm_ymm_imm8(dst, src, imm)) } -emit_vpermq_ymm_m256_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: Mem256, imm: i8) { append(instructions, inst_vpermq_ymm_m256_imm8(dst, src, imm)) } +emit_vpermq_ymm_ymm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, imm: i8) { append_elem(instructions, inst_vpermq_ymm_ymm_imm8(dst, src, imm)) } +emit_vpermq_ymm_m256_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: Mem256, imm: i8) { append_elem(instructions, inst_vpermq_ymm_m256_imm8(dst, src, imm)) } inst_vpermpd_ymm_ymm_imm8 :: #force_inline proc "contextless" (dst: YMM, src: YMM, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .VPERMPD, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_imm8(imm), {}} }, 1516) } inst_vpermpd_ymm_m256_imm8 :: #force_inline proc "contextless" (dst: YMM, src: Mem256, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .VPERMPD, operand_count = 3, ops = {op_ymm(dst), op_mem(src.mem, 32), op_imm8(imm), {}} }, 1516) } -emit_vpermpd_ymm_ymm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, imm: i8) { append(instructions, inst_vpermpd_ymm_ymm_imm8(dst, src, imm)) } -emit_vpermpd_ymm_m256_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: Mem256, imm: i8) { append(instructions, inst_vpermpd_ymm_m256_imm8(dst, src, imm)) } +emit_vpermpd_ymm_ymm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, imm: i8) { append_elem(instructions, inst_vpermpd_ymm_ymm_imm8(dst, src, imm)) } +emit_vpermpd_ymm_m256_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: Mem256, imm: i8) { append_elem(instructions, inst_vpermpd_ymm_m256_imm8(dst, src, imm)) } inst_vpblendd_xmm_xmm_xmm_imm8 :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: XMM, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .VPBLENDD, operand_count = 4, ops = {op_xmm(dst), op_xmm(src), op_xmm(src2), op_imm8(imm)} }, 1517) } inst_vpblendd_xmm_xmm_m128_imm8 :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: Mem128, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .VPBLENDD, operand_count = 4, ops = {op_xmm(dst), op_xmm(src), op_mem(src2.mem, 16), op_imm8(imm)} }, 1517) } inst_vpblendd_ymm_ymm_ymm_imm8 :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: YMM, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .VPBLENDD, operand_count = 4, ops = {op_ymm(dst), op_ymm(src), op_ymm(src2), op_imm8(imm)} }, 1518) } inst_vpblendd_ymm_ymm_m256_imm8 :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: Mem256, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .VPBLENDD, operand_count = 4, ops = {op_ymm(dst), op_ymm(src), op_mem(src2.mem, 32), op_imm8(imm)} }, 1518) } -emit_vpblendd_xmm_xmm_xmm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM, imm: i8) { append(instructions, inst_vpblendd_xmm_xmm_xmm_imm8(dst, src, src2, imm)) } -emit_vpblendd_xmm_xmm_m128_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128, imm: i8) { append(instructions, inst_vpblendd_xmm_xmm_m128_imm8(dst, src, src2, imm)) } -emit_vpblendd_ymm_ymm_ymm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM, imm: i8) { append(instructions, inst_vpblendd_ymm_ymm_ymm_imm8(dst, src, src2, imm)) } -emit_vpblendd_ymm_ymm_m256_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256, imm: i8) { append(instructions, inst_vpblendd_ymm_ymm_m256_imm8(dst, src, src2, imm)) } +emit_vpblendd_xmm_xmm_xmm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM, imm: i8) { append_elem(instructions, inst_vpblendd_xmm_xmm_xmm_imm8(dst, src, src2, imm)) } +emit_vpblendd_xmm_xmm_m128_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128, imm: i8) { append_elem(instructions, inst_vpblendd_xmm_xmm_m128_imm8(dst, src, src2, imm)) } +emit_vpblendd_ymm_ymm_ymm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM, imm: i8) { append_elem(instructions, inst_vpblendd_ymm_ymm_ymm_imm8(dst, src, src2, imm)) } +emit_vpblendd_ymm_ymm_m256_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256, imm: i8) { append_elem(instructions, inst_vpblendd_ymm_ymm_m256_imm8(dst, src, src2, imm)) } inst_vpsllvd_xmm_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPSLLVD, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_xmm(src2), {}} }, 1519) } inst_vpsllvd_xmm_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .VPSLLVD, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_mem(src2.mem, 16), {}} }, 1519) } inst_vpsllvd_ymm_ymm_ymm :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: YMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPSLLVD, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_ymm(src2), {}} }, 1520) } inst_vpsllvd_ymm_ymm_m256 :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: Mem256) -> Instruction { return with_hint(Instruction{ mnemonic = .VPSLLVD, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_mem(src2.mem, 32), {}} }, 1520) } -emit_vpsllvd_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append(instructions, inst_vpsllvd_xmm_xmm_xmm(dst, src, src2)) } -emit_vpsllvd_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append(instructions, inst_vpsllvd_xmm_xmm_m128(dst, src, src2)) } -emit_vpsllvd_ymm_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM) { append(instructions, inst_vpsllvd_ymm_ymm_ymm(dst, src, src2)) } -emit_vpsllvd_ymm_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256) { append(instructions, inst_vpsllvd_ymm_ymm_m256(dst, src, src2)) } +emit_vpsllvd_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append_elem(instructions, inst_vpsllvd_xmm_xmm_xmm(dst, src, src2)) } +emit_vpsllvd_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append_elem(instructions, inst_vpsllvd_xmm_xmm_m128(dst, src, src2)) } +emit_vpsllvd_ymm_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM) { append_elem(instructions, inst_vpsllvd_ymm_ymm_ymm(dst, src, src2)) } +emit_vpsllvd_ymm_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256) { append_elem(instructions, inst_vpsllvd_ymm_ymm_m256(dst, src, src2)) } inst_vpsllvq_xmm_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPSLLVQ, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_xmm(src2), {}} }, 1521) } inst_vpsllvq_xmm_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .VPSLLVQ, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_mem(src2.mem, 16), {}} }, 1521) } inst_vpsllvq_ymm_ymm_ymm :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: YMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPSLLVQ, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_ymm(src2), {}} }, 1522) } inst_vpsllvq_ymm_ymm_m256 :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: Mem256) -> Instruction { return with_hint(Instruction{ mnemonic = .VPSLLVQ, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_mem(src2.mem, 32), {}} }, 1522) } -emit_vpsllvq_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append(instructions, inst_vpsllvq_xmm_xmm_xmm(dst, src, src2)) } -emit_vpsllvq_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append(instructions, inst_vpsllvq_xmm_xmm_m128(dst, src, src2)) } -emit_vpsllvq_ymm_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM) { append(instructions, inst_vpsllvq_ymm_ymm_ymm(dst, src, src2)) } -emit_vpsllvq_ymm_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256) { append(instructions, inst_vpsllvq_ymm_ymm_m256(dst, src, src2)) } +emit_vpsllvq_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append_elem(instructions, inst_vpsllvq_xmm_xmm_xmm(dst, src, src2)) } +emit_vpsllvq_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append_elem(instructions, inst_vpsllvq_xmm_xmm_m128(dst, src, src2)) } +emit_vpsllvq_ymm_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM) { append_elem(instructions, inst_vpsllvq_ymm_ymm_ymm(dst, src, src2)) } +emit_vpsllvq_ymm_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256) { append_elem(instructions, inst_vpsllvq_ymm_ymm_m256(dst, src, src2)) } inst_vpsrlvd_xmm_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPSRLVD, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_xmm(src2), {}} }, 1523) } inst_vpsrlvd_xmm_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .VPSRLVD, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_mem(src2.mem, 16), {}} }, 1523) } inst_vpsrlvd_ymm_ymm_ymm :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: YMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPSRLVD, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_ymm(src2), {}} }, 1524) } inst_vpsrlvd_ymm_ymm_m256 :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: Mem256) -> Instruction { return with_hint(Instruction{ mnemonic = .VPSRLVD, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_mem(src2.mem, 32), {}} }, 1524) } -emit_vpsrlvd_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append(instructions, inst_vpsrlvd_xmm_xmm_xmm(dst, src, src2)) } -emit_vpsrlvd_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append(instructions, inst_vpsrlvd_xmm_xmm_m128(dst, src, src2)) } -emit_vpsrlvd_ymm_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM) { append(instructions, inst_vpsrlvd_ymm_ymm_ymm(dst, src, src2)) } -emit_vpsrlvd_ymm_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256) { append(instructions, inst_vpsrlvd_ymm_ymm_m256(dst, src, src2)) } +emit_vpsrlvd_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append_elem(instructions, inst_vpsrlvd_xmm_xmm_xmm(dst, src, src2)) } +emit_vpsrlvd_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append_elem(instructions, inst_vpsrlvd_xmm_xmm_m128(dst, src, src2)) } +emit_vpsrlvd_ymm_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM) { append_elem(instructions, inst_vpsrlvd_ymm_ymm_ymm(dst, src, src2)) } +emit_vpsrlvd_ymm_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256) { append_elem(instructions, inst_vpsrlvd_ymm_ymm_m256(dst, src, src2)) } inst_vpsrlvq_xmm_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPSRLVQ, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_xmm(src2), {}} }, 1525) } inst_vpsrlvq_xmm_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .VPSRLVQ, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_mem(src2.mem, 16), {}} }, 1525) } inst_vpsrlvq_ymm_ymm_ymm :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: YMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPSRLVQ, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_ymm(src2), {}} }, 1526) } inst_vpsrlvq_ymm_ymm_m256 :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: Mem256) -> Instruction { return with_hint(Instruction{ mnemonic = .VPSRLVQ, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_mem(src2.mem, 32), {}} }, 1526) } -emit_vpsrlvq_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append(instructions, inst_vpsrlvq_xmm_xmm_xmm(dst, src, src2)) } -emit_vpsrlvq_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append(instructions, inst_vpsrlvq_xmm_xmm_m128(dst, src, src2)) } -emit_vpsrlvq_ymm_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM) { append(instructions, inst_vpsrlvq_ymm_ymm_ymm(dst, src, src2)) } -emit_vpsrlvq_ymm_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256) { append(instructions, inst_vpsrlvq_ymm_ymm_m256(dst, src, src2)) } +emit_vpsrlvq_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append_elem(instructions, inst_vpsrlvq_xmm_xmm_xmm(dst, src, src2)) } +emit_vpsrlvq_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append_elem(instructions, inst_vpsrlvq_xmm_xmm_m128(dst, src, src2)) } +emit_vpsrlvq_ymm_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM) { append_elem(instructions, inst_vpsrlvq_ymm_ymm_ymm(dst, src, src2)) } +emit_vpsrlvq_ymm_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256) { append_elem(instructions, inst_vpsrlvq_ymm_ymm_m256(dst, src, src2)) } inst_vpsravd_xmm_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPSRAVD, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_xmm(src2), {}} }, 1527) } inst_vpsravd_xmm_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .VPSRAVD, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_mem(src2.mem, 16), {}} }, 1527) } inst_vpsravd_ymm_ymm_ymm :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: YMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPSRAVD, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_ymm(src2), {}} }, 1528) } inst_vpsravd_ymm_ymm_m256 :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: Mem256) -> Instruction { return with_hint(Instruction{ mnemonic = .VPSRAVD, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_mem(src2.mem, 32), {}} }, 1528) } -emit_vpsravd_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append(instructions, inst_vpsravd_xmm_xmm_xmm(dst, src, src2)) } -emit_vpsravd_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append(instructions, inst_vpsravd_xmm_xmm_m128(dst, src, src2)) } -emit_vpsravd_ymm_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM) { append(instructions, inst_vpsravd_ymm_ymm_ymm(dst, src, src2)) } -emit_vpsravd_ymm_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256) { append(instructions, inst_vpsravd_ymm_ymm_m256(dst, src, src2)) } +emit_vpsravd_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append_elem(instructions, inst_vpsravd_xmm_xmm_xmm(dst, src, src2)) } +emit_vpsravd_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append_elem(instructions, inst_vpsravd_xmm_xmm_m128(dst, src, src2)) } +emit_vpsravd_ymm_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM) { append_elem(instructions, inst_vpsravd_ymm_ymm_ymm(dst, src, src2)) } +emit_vpsravd_ymm_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256) { append_elem(instructions, inst_vpsravd_ymm_ymm_m256(dst, src, src2)) } inst_vpmaskmovd_xmm_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .VPMASKMOVD, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_mem(src2.mem, 16), {}} }, 1529) } inst_vpmaskmovd_ymm_ymm_m256 :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: Mem256) -> Instruction { return with_hint(Instruction{ mnemonic = .VPMASKMOVD, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_mem(src2.mem, 32), {}} }, 1530) } inst_vpmaskmovd_m128_xmm_xmm :: #force_inline proc "contextless" (dst: Mem128, src: XMM, src2: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPMASKMOVD, operand_count = 3, ops = {op_mem(dst.mem, 16), op_xmm(src), op_xmm(src2), {}} }, 1531) } inst_vpmaskmovd_m256_ymm_ymm :: #force_inline proc "contextless" (dst: Mem256, src: YMM, src2: YMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPMASKMOVD, operand_count = 3, ops = {op_mem(dst.mem, 32), op_ymm(src), op_ymm(src2), {}} }, 1532) } -emit_vpmaskmovd_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append(instructions, inst_vpmaskmovd_xmm_xmm_m128(dst, src, src2)) } -emit_vpmaskmovd_ymm_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256) { append(instructions, inst_vpmaskmovd_ymm_ymm_m256(dst, src, src2)) } -emit_vpmaskmovd_m128_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem128, src: XMM, src2: XMM) { append(instructions, inst_vpmaskmovd_m128_xmm_xmm(dst, src, src2)) } -emit_vpmaskmovd_m256_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem256, src: YMM, src2: YMM) { append(instructions, inst_vpmaskmovd_m256_ymm_ymm(dst, src, src2)) } +emit_vpmaskmovd_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append_elem(instructions, inst_vpmaskmovd_xmm_xmm_m128(dst, src, src2)) } +emit_vpmaskmovd_ymm_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256) { append_elem(instructions, inst_vpmaskmovd_ymm_ymm_m256(dst, src, src2)) } +emit_vpmaskmovd_m128_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem128, src: XMM, src2: XMM) { append_elem(instructions, inst_vpmaskmovd_m128_xmm_xmm(dst, src, src2)) } +emit_vpmaskmovd_m256_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem256, src: YMM, src2: YMM) { append_elem(instructions, inst_vpmaskmovd_m256_ymm_ymm(dst, src, src2)) } inst_vpmaskmovq_xmm_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .VPMASKMOVQ, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_mem(src2.mem, 16), {}} }, 1533) } inst_vpmaskmovq_ymm_ymm_m256 :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: Mem256) -> Instruction { return with_hint(Instruction{ mnemonic = .VPMASKMOVQ, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_mem(src2.mem, 32), {}} }, 1534) } inst_vpmaskmovq_m128_xmm_xmm :: #force_inline proc "contextless" (dst: Mem128, src: XMM, src2: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPMASKMOVQ, operand_count = 3, ops = {op_mem(dst.mem, 16), op_xmm(src), op_xmm(src2), {}} }, 1535) } inst_vpmaskmovq_m256_ymm_ymm :: #force_inline proc "contextless" (dst: Mem256, src: YMM, src2: YMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPMASKMOVQ, operand_count = 3, ops = {op_mem(dst.mem, 32), op_ymm(src), op_ymm(src2), {}} }, 1536) } -emit_vpmaskmovq_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append(instructions, inst_vpmaskmovq_xmm_xmm_m128(dst, src, src2)) } -emit_vpmaskmovq_ymm_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256) { append(instructions, inst_vpmaskmovq_ymm_ymm_m256(dst, src, src2)) } -emit_vpmaskmovq_m128_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem128, src: XMM, src2: XMM) { append(instructions, inst_vpmaskmovq_m128_xmm_xmm(dst, src, src2)) } -emit_vpmaskmovq_m256_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem256, src: YMM, src2: YMM) { append(instructions, inst_vpmaskmovq_m256_ymm_ymm(dst, src, src2)) } +emit_vpmaskmovq_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append_elem(instructions, inst_vpmaskmovq_xmm_xmm_m128(dst, src, src2)) } +emit_vpmaskmovq_ymm_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256) { append_elem(instructions, inst_vpmaskmovq_ymm_ymm_m256(dst, src, src2)) } +emit_vpmaskmovq_m128_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem128, src: XMM, src2: XMM) { append_elem(instructions, inst_vpmaskmovq_m128_xmm_xmm(dst, src, src2)) } +emit_vpmaskmovq_m256_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem256, src: YMM, src2: YMM) { append_elem(instructions, inst_vpmaskmovq_m256_ymm_ymm(dst, src, src2)) } inst_vgatherdps_xmm_m_xmm :: #force_inline proc "contextless" (dst: XMM, src: Memory, src2: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VGATHERDPS, operand_count = 3, ops = {op_xmm(dst), op_mem(src, 0), op_xmm(src2), {}} }, 1537) } inst_vgatherdps_ymm_m_ymm :: #force_inline proc "contextless" (dst: YMM, src: Memory, src2: YMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VGATHERDPS, operand_count = 3, ops = {op_ymm(dst), op_mem(src, 0), op_ymm(src2), {}} }, 1538) } -emit_vgatherdps_xmm_m_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Memory, src2: XMM) { append(instructions, inst_vgatherdps_xmm_m_xmm(dst, src, src2)) } -emit_vgatherdps_ymm_m_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: Memory, src2: YMM) { append(instructions, inst_vgatherdps_ymm_m_ymm(dst, src, src2)) } +emit_vgatherdps_xmm_m_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Memory, src2: XMM) { append_elem(instructions, inst_vgatherdps_xmm_m_xmm(dst, src, src2)) } +emit_vgatherdps_ymm_m_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: Memory, src2: YMM) { append_elem(instructions, inst_vgatherdps_ymm_m_ymm(dst, src, src2)) } inst_vgatherdpd_xmm_m_xmm :: #force_inline proc "contextless" (dst: XMM, src: Memory, src2: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VGATHERDPD, operand_count = 3, ops = {op_xmm(dst), op_mem(src, 0), op_xmm(src2), {}} }, 1539) } inst_vgatherdpd_ymm_m_ymm :: #force_inline proc "contextless" (dst: YMM, src: Memory, src2: YMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VGATHERDPD, operand_count = 3, ops = {op_ymm(dst), op_mem(src, 0), op_ymm(src2), {}} }, 1540) } -emit_vgatherdpd_xmm_m_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Memory, src2: XMM) { append(instructions, inst_vgatherdpd_xmm_m_xmm(dst, src, src2)) } -emit_vgatherdpd_ymm_m_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: Memory, src2: YMM) { append(instructions, inst_vgatherdpd_ymm_m_ymm(dst, src, src2)) } +emit_vgatherdpd_xmm_m_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Memory, src2: XMM) { append_elem(instructions, inst_vgatherdpd_xmm_m_xmm(dst, src, src2)) } +emit_vgatherdpd_ymm_m_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: Memory, src2: YMM) { append_elem(instructions, inst_vgatherdpd_ymm_m_ymm(dst, src, src2)) } inst_vgatherqps_xmm_m_xmm :: #force_inline proc "contextless" (dst: XMM, src: Memory, src2: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VGATHERQPS, operand_count = 3, ops = {op_xmm(dst), op_mem(src, 0), op_xmm(src2), {}} }, 1541) } -emit_vgatherqps_xmm_m_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Memory, src2: XMM) { append(instructions, inst_vgatherqps_xmm_m_xmm(dst, src, src2)) } +emit_vgatherqps_xmm_m_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Memory, src2: XMM) { append_elem(instructions, inst_vgatherqps_xmm_m_xmm(dst, src, src2)) } inst_vgatherqpd_xmm_m_xmm :: #force_inline proc "contextless" (dst: XMM, src: Memory, src2: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VGATHERQPD, operand_count = 3, ops = {op_xmm(dst), op_mem(src, 0), op_xmm(src2), {}} }, 1543) } inst_vgatherqpd_ymm_m_ymm :: #force_inline proc "contextless" (dst: YMM, src: Memory, src2: YMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VGATHERQPD, operand_count = 3, ops = {op_ymm(dst), op_mem(src, 0), op_ymm(src2), {}} }, 1544) } -emit_vgatherqpd_xmm_m_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Memory, src2: XMM) { append(instructions, inst_vgatherqpd_xmm_m_xmm(dst, src, src2)) } -emit_vgatherqpd_ymm_m_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: Memory, src2: YMM) { append(instructions, inst_vgatherqpd_ymm_m_ymm(dst, src, src2)) } +emit_vgatherqpd_xmm_m_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Memory, src2: XMM) { append_elem(instructions, inst_vgatherqpd_xmm_m_xmm(dst, src, src2)) } +emit_vgatherqpd_ymm_m_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: Memory, src2: YMM) { append_elem(instructions, inst_vgatherqpd_ymm_m_ymm(dst, src, src2)) } inst_vpgatherdd_xmm_m_xmm :: #force_inline proc "contextless" (dst: XMM, src: Memory, src2: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPGATHERDD, operand_count = 3, ops = {op_xmm(dst), op_mem(src, 0), op_xmm(src2), {}} }, 1545) } inst_vpgatherdd_ymm_m_ymm :: #force_inline proc "contextless" (dst: YMM, src: Memory, src2: YMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPGATHERDD, operand_count = 3, ops = {op_ymm(dst), op_mem(src, 0), op_ymm(src2), {}} }, 1546) } -emit_vpgatherdd_xmm_m_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Memory, src2: XMM) { append(instructions, inst_vpgatherdd_xmm_m_xmm(dst, src, src2)) } -emit_vpgatherdd_ymm_m_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: Memory, src2: YMM) { append(instructions, inst_vpgatherdd_ymm_m_ymm(dst, src, src2)) } +emit_vpgatherdd_xmm_m_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Memory, src2: XMM) { append_elem(instructions, inst_vpgatherdd_xmm_m_xmm(dst, src, src2)) } +emit_vpgatherdd_ymm_m_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: Memory, src2: YMM) { append_elem(instructions, inst_vpgatherdd_ymm_m_ymm(dst, src, src2)) } inst_vpgatherdq_xmm_m_xmm :: #force_inline proc "contextless" (dst: XMM, src: Memory, src2: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPGATHERDQ, operand_count = 3, ops = {op_xmm(dst), op_mem(src, 0), op_xmm(src2), {}} }, 1547) } inst_vpgatherdq_ymm_m_ymm :: #force_inline proc "contextless" (dst: YMM, src: Memory, src2: YMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPGATHERDQ, operand_count = 3, ops = {op_ymm(dst), op_mem(src, 0), op_ymm(src2), {}} }, 1548) } -emit_vpgatherdq_xmm_m_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Memory, src2: XMM) { append(instructions, inst_vpgatherdq_xmm_m_xmm(dst, src, src2)) } -emit_vpgatherdq_ymm_m_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: Memory, src2: YMM) { append(instructions, inst_vpgatherdq_ymm_m_ymm(dst, src, src2)) } +emit_vpgatherdq_xmm_m_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Memory, src2: XMM) { append_elem(instructions, inst_vpgatherdq_xmm_m_xmm(dst, src, src2)) } +emit_vpgatherdq_ymm_m_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: Memory, src2: YMM) { append_elem(instructions, inst_vpgatherdq_ymm_m_ymm(dst, src, src2)) } inst_vpgatherqd_xmm_m_xmm :: #force_inline proc "contextless" (dst: XMM, src: Memory, src2: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPGATHERQD, operand_count = 3, ops = {op_xmm(dst), op_mem(src, 0), op_xmm(src2), {}} }, 1549) } -emit_vpgatherqd_xmm_m_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Memory, src2: XMM) { append(instructions, inst_vpgatherqd_xmm_m_xmm(dst, src, src2)) } +emit_vpgatherqd_xmm_m_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Memory, src2: XMM) { append_elem(instructions, inst_vpgatherqd_xmm_m_xmm(dst, src, src2)) } inst_vpgatherqq_xmm_m_xmm :: #force_inline proc "contextless" (dst: XMM, src: Memory, src2: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPGATHERQQ, operand_count = 3, ops = {op_xmm(dst), op_mem(src, 0), op_xmm(src2), {}} }, 1551) } inst_vpgatherqq_ymm_m_ymm :: #force_inline proc "contextless" (dst: YMM, src: Memory, src2: YMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPGATHERQQ, operand_count = 3, ops = {op_ymm(dst), op_mem(src, 0), op_ymm(src2), {}} }, 1552) } -emit_vpgatherqq_xmm_m_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Memory, src2: XMM) { append(instructions, inst_vpgatherqq_xmm_m_xmm(dst, src, src2)) } -emit_vpgatherqq_ymm_m_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: Memory, src2: YMM) { append(instructions, inst_vpgatherqq_ymm_m_ymm(dst, src, src2)) } +emit_vpgatherqq_xmm_m_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Memory, src2: XMM) { append_elem(instructions, inst_vpgatherqq_xmm_m_xmm(dst, src, src2)) } +emit_vpgatherqq_ymm_m_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: Memory, src2: YMM) { append_elem(instructions, inst_vpgatherqq_ymm_m_ymm(dst, src, src2)) } inst_vfmadd132ps_xmm_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VFMADD132PS, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_xmm(src2), {}} }, 1553) } inst_vfmadd132ps_xmm_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .VFMADD132PS, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_mem(src2.mem, 16), {}} }, 1553) } inst_vfmadd132ps_ymm_ymm_ymm :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: YMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VFMADD132PS, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_ymm(src2), {}} }, 1554) } inst_vfmadd132ps_ymm_ymm_m256 :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: Mem256) -> Instruction { return with_hint(Instruction{ mnemonic = .VFMADD132PS, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_mem(src2.mem, 32), {}} }, 1554) } -emit_vfmadd132ps_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append(instructions, inst_vfmadd132ps_xmm_xmm_xmm(dst, src, src2)) } -emit_vfmadd132ps_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append(instructions, inst_vfmadd132ps_xmm_xmm_m128(dst, src, src2)) } -emit_vfmadd132ps_ymm_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM) { append(instructions, inst_vfmadd132ps_ymm_ymm_ymm(dst, src, src2)) } -emit_vfmadd132ps_ymm_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256) { append(instructions, inst_vfmadd132ps_ymm_ymm_m256(dst, src, src2)) } +emit_vfmadd132ps_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append_elem(instructions, inst_vfmadd132ps_xmm_xmm_xmm(dst, src, src2)) } +emit_vfmadd132ps_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append_elem(instructions, inst_vfmadd132ps_xmm_xmm_m128(dst, src, src2)) } +emit_vfmadd132ps_ymm_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM) { append_elem(instructions, inst_vfmadd132ps_ymm_ymm_ymm(dst, src, src2)) } +emit_vfmadd132ps_ymm_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256) { append_elem(instructions, inst_vfmadd132ps_ymm_ymm_m256(dst, src, src2)) } inst_vfmadd213ps_xmm_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VFMADD213PS, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_xmm(src2), {}} }, 1555) } inst_vfmadd213ps_xmm_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .VFMADD213PS, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_mem(src2.mem, 16), {}} }, 1555) } inst_vfmadd213ps_ymm_ymm_ymm :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: YMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VFMADD213PS, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_ymm(src2), {}} }, 1556) } inst_vfmadd213ps_ymm_ymm_m256 :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: Mem256) -> Instruction { return with_hint(Instruction{ mnemonic = .VFMADD213PS, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_mem(src2.mem, 32), {}} }, 1556) } -emit_vfmadd213ps_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append(instructions, inst_vfmadd213ps_xmm_xmm_xmm(dst, src, src2)) } -emit_vfmadd213ps_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append(instructions, inst_vfmadd213ps_xmm_xmm_m128(dst, src, src2)) } -emit_vfmadd213ps_ymm_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM) { append(instructions, inst_vfmadd213ps_ymm_ymm_ymm(dst, src, src2)) } -emit_vfmadd213ps_ymm_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256) { append(instructions, inst_vfmadd213ps_ymm_ymm_m256(dst, src, src2)) } +emit_vfmadd213ps_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append_elem(instructions, inst_vfmadd213ps_xmm_xmm_xmm(dst, src, src2)) } +emit_vfmadd213ps_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append_elem(instructions, inst_vfmadd213ps_xmm_xmm_m128(dst, src, src2)) } +emit_vfmadd213ps_ymm_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM) { append_elem(instructions, inst_vfmadd213ps_ymm_ymm_ymm(dst, src, src2)) } +emit_vfmadd213ps_ymm_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256) { append_elem(instructions, inst_vfmadd213ps_ymm_ymm_m256(dst, src, src2)) } inst_vfmadd231ps_xmm_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VFMADD231PS, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_xmm(src2), {}} }, 1557) } inst_vfmadd231ps_xmm_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .VFMADD231PS, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_mem(src2.mem, 16), {}} }, 1557) } inst_vfmadd231ps_ymm_ymm_ymm :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: YMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VFMADD231PS, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_ymm(src2), {}} }, 1558) } inst_vfmadd231ps_ymm_ymm_m256 :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: Mem256) -> Instruction { return with_hint(Instruction{ mnemonic = .VFMADD231PS, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_mem(src2.mem, 32), {}} }, 1558) } -emit_vfmadd231ps_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append(instructions, inst_vfmadd231ps_xmm_xmm_xmm(dst, src, src2)) } -emit_vfmadd231ps_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append(instructions, inst_vfmadd231ps_xmm_xmm_m128(dst, src, src2)) } -emit_vfmadd231ps_ymm_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM) { append(instructions, inst_vfmadd231ps_ymm_ymm_ymm(dst, src, src2)) } -emit_vfmadd231ps_ymm_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256) { append(instructions, inst_vfmadd231ps_ymm_ymm_m256(dst, src, src2)) } +emit_vfmadd231ps_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append_elem(instructions, inst_vfmadd231ps_xmm_xmm_xmm(dst, src, src2)) } +emit_vfmadd231ps_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append_elem(instructions, inst_vfmadd231ps_xmm_xmm_m128(dst, src, src2)) } +emit_vfmadd231ps_ymm_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM) { append_elem(instructions, inst_vfmadd231ps_ymm_ymm_ymm(dst, src, src2)) } +emit_vfmadd231ps_ymm_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256) { append_elem(instructions, inst_vfmadd231ps_ymm_ymm_m256(dst, src, src2)) } inst_vfmadd132pd_xmm_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VFMADD132PD, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_xmm(src2), {}} }, 1559) } inst_vfmadd132pd_xmm_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .VFMADD132PD, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_mem(src2.mem, 16), {}} }, 1559) } inst_vfmadd132pd_ymm_ymm_ymm :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: YMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VFMADD132PD, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_ymm(src2), {}} }, 1560) } inst_vfmadd132pd_ymm_ymm_m256 :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: Mem256) -> Instruction { return with_hint(Instruction{ mnemonic = .VFMADD132PD, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_mem(src2.mem, 32), {}} }, 1560) } -emit_vfmadd132pd_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append(instructions, inst_vfmadd132pd_xmm_xmm_xmm(dst, src, src2)) } -emit_vfmadd132pd_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append(instructions, inst_vfmadd132pd_xmm_xmm_m128(dst, src, src2)) } -emit_vfmadd132pd_ymm_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM) { append(instructions, inst_vfmadd132pd_ymm_ymm_ymm(dst, src, src2)) } -emit_vfmadd132pd_ymm_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256) { append(instructions, inst_vfmadd132pd_ymm_ymm_m256(dst, src, src2)) } +emit_vfmadd132pd_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append_elem(instructions, inst_vfmadd132pd_xmm_xmm_xmm(dst, src, src2)) } +emit_vfmadd132pd_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append_elem(instructions, inst_vfmadd132pd_xmm_xmm_m128(dst, src, src2)) } +emit_vfmadd132pd_ymm_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM) { append_elem(instructions, inst_vfmadd132pd_ymm_ymm_ymm(dst, src, src2)) } +emit_vfmadd132pd_ymm_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256) { append_elem(instructions, inst_vfmadd132pd_ymm_ymm_m256(dst, src, src2)) } inst_vfmadd213pd_xmm_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VFMADD213PD, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_xmm(src2), {}} }, 1561) } inst_vfmadd213pd_xmm_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .VFMADD213PD, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_mem(src2.mem, 16), {}} }, 1561) } inst_vfmadd213pd_ymm_ymm_ymm :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: YMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VFMADD213PD, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_ymm(src2), {}} }, 1562) } inst_vfmadd213pd_ymm_ymm_m256 :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: Mem256) -> Instruction { return with_hint(Instruction{ mnemonic = .VFMADD213PD, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_mem(src2.mem, 32), {}} }, 1562) } -emit_vfmadd213pd_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append(instructions, inst_vfmadd213pd_xmm_xmm_xmm(dst, src, src2)) } -emit_vfmadd213pd_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append(instructions, inst_vfmadd213pd_xmm_xmm_m128(dst, src, src2)) } -emit_vfmadd213pd_ymm_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM) { append(instructions, inst_vfmadd213pd_ymm_ymm_ymm(dst, src, src2)) } -emit_vfmadd213pd_ymm_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256) { append(instructions, inst_vfmadd213pd_ymm_ymm_m256(dst, src, src2)) } +emit_vfmadd213pd_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append_elem(instructions, inst_vfmadd213pd_xmm_xmm_xmm(dst, src, src2)) } +emit_vfmadd213pd_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append_elem(instructions, inst_vfmadd213pd_xmm_xmm_m128(dst, src, src2)) } +emit_vfmadd213pd_ymm_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM) { append_elem(instructions, inst_vfmadd213pd_ymm_ymm_ymm(dst, src, src2)) } +emit_vfmadd213pd_ymm_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256) { append_elem(instructions, inst_vfmadd213pd_ymm_ymm_m256(dst, src, src2)) } inst_vfmadd231pd_xmm_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VFMADD231PD, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_xmm(src2), {}} }, 1563) } inst_vfmadd231pd_xmm_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .VFMADD231PD, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_mem(src2.mem, 16), {}} }, 1563) } inst_vfmadd231pd_ymm_ymm_ymm :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: YMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VFMADD231PD, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_ymm(src2), {}} }, 1564) } inst_vfmadd231pd_ymm_ymm_m256 :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: Mem256) -> Instruction { return with_hint(Instruction{ mnemonic = .VFMADD231PD, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_mem(src2.mem, 32), {}} }, 1564) } -emit_vfmadd231pd_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append(instructions, inst_vfmadd231pd_xmm_xmm_xmm(dst, src, src2)) } -emit_vfmadd231pd_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append(instructions, inst_vfmadd231pd_xmm_xmm_m128(dst, src, src2)) } -emit_vfmadd231pd_ymm_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM) { append(instructions, inst_vfmadd231pd_ymm_ymm_ymm(dst, src, src2)) } -emit_vfmadd231pd_ymm_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256) { append(instructions, inst_vfmadd231pd_ymm_ymm_m256(dst, src, src2)) } +emit_vfmadd231pd_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append_elem(instructions, inst_vfmadd231pd_xmm_xmm_xmm(dst, src, src2)) } +emit_vfmadd231pd_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append_elem(instructions, inst_vfmadd231pd_xmm_xmm_m128(dst, src, src2)) } +emit_vfmadd231pd_ymm_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM) { append_elem(instructions, inst_vfmadd231pd_ymm_ymm_ymm(dst, src, src2)) } +emit_vfmadd231pd_ymm_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256) { append_elem(instructions, inst_vfmadd231pd_ymm_ymm_m256(dst, src, src2)) } inst_vfmadd132ss_xmm_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VFMADD132SS, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_xmm(src2), {}} }, 1565) } inst_vfmadd132ss_xmm_xmm_m32 :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: Mem32) -> Instruction { return with_hint(Instruction{ mnemonic = .VFMADD132SS, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_mem(src2.mem, 4), {}} }, 1565) } -emit_vfmadd132ss_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append(instructions, inst_vfmadd132ss_xmm_xmm_xmm(dst, src, src2)) } -emit_vfmadd132ss_xmm_xmm_m32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem32) { append(instructions, inst_vfmadd132ss_xmm_xmm_m32(dst, src, src2)) } +emit_vfmadd132ss_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append_elem(instructions, inst_vfmadd132ss_xmm_xmm_xmm(dst, src, src2)) } +emit_vfmadd132ss_xmm_xmm_m32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem32) { append_elem(instructions, inst_vfmadd132ss_xmm_xmm_m32(dst, src, src2)) } inst_vfmadd213ss_xmm_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VFMADD213SS, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_xmm(src2), {}} }, 1566) } inst_vfmadd213ss_xmm_xmm_m32 :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: Mem32) -> Instruction { return with_hint(Instruction{ mnemonic = .VFMADD213SS, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_mem(src2.mem, 4), {}} }, 1566) } -emit_vfmadd213ss_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append(instructions, inst_vfmadd213ss_xmm_xmm_xmm(dst, src, src2)) } -emit_vfmadd213ss_xmm_xmm_m32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem32) { append(instructions, inst_vfmadd213ss_xmm_xmm_m32(dst, src, src2)) } +emit_vfmadd213ss_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append_elem(instructions, inst_vfmadd213ss_xmm_xmm_xmm(dst, src, src2)) } +emit_vfmadd213ss_xmm_xmm_m32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem32) { append_elem(instructions, inst_vfmadd213ss_xmm_xmm_m32(dst, src, src2)) } inst_vfmadd231ss_xmm_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VFMADD231SS, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_xmm(src2), {}} }, 1567) } inst_vfmadd231ss_xmm_xmm_m32 :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: Mem32) -> Instruction { return with_hint(Instruction{ mnemonic = .VFMADD231SS, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_mem(src2.mem, 4), {}} }, 1567) } -emit_vfmadd231ss_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append(instructions, inst_vfmadd231ss_xmm_xmm_xmm(dst, src, src2)) } -emit_vfmadd231ss_xmm_xmm_m32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem32) { append(instructions, inst_vfmadd231ss_xmm_xmm_m32(dst, src, src2)) } +emit_vfmadd231ss_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append_elem(instructions, inst_vfmadd231ss_xmm_xmm_xmm(dst, src, src2)) } +emit_vfmadd231ss_xmm_xmm_m32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem32) { append_elem(instructions, inst_vfmadd231ss_xmm_xmm_m32(dst, src, src2)) } inst_vfmadd132sd_xmm_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VFMADD132SD, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_xmm(src2), {}} }, 1568) } inst_vfmadd132sd_xmm_xmm_m64 :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: Mem64) -> Instruction { return with_hint(Instruction{ mnemonic = .VFMADD132SD, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_mem(src2.mem, 8), {}} }, 1568) } -emit_vfmadd132sd_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append(instructions, inst_vfmadd132sd_xmm_xmm_xmm(dst, src, src2)) } -emit_vfmadd132sd_xmm_xmm_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem64) { append(instructions, inst_vfmadd132sd_xmm_xmm_m64(dst, src, src2)) } +emit_vfmadd132sd_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append_elem(instructions, inst_vfmadd132sd_xmm_xmm_xmm(dst, src, src2)) } +emit_vfmadd132sd_xmm_xmm_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem64) { append_elem(instructions, inst_vfmadd132sd_xmm_xmm_m64(dst, src, src2)) } inst_vfmadd213sd_xmm_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VFMADD213SD, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_xmm(src2), {}} }, 1569) } inst_vfmadd213sd_xmm_xmm_m64 :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: Mem64) -> Instruction { return with_hint(Instruction{ mnemonic = .VFMADD213SD, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_mem(src2.mem, 8), {}} }, 1569) } -emit_vfmadd213sd_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append(instructions, inst_vfmadd213sd_xmm_xmm_xmm(dst, src, src2)) } -emit_vfmadd213sd_xmm_xmm_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem64) { append(instructions, inst_vfmadd213sd_xmm_xmm_m64(dst, src, src2)) } +emit_vfmadd213sd_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append_elem(instructions, inst_vfmadd213sd_xmm_xmm_xmm(dst, src, src2)) } +emit_vfmadd213sd_xmm_xmm_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem64) { append_elem(instructions, inst_vfmadd213sd_xmm_xmm_m64(dst, src, src2)) } inst_vfmadd231sd_xmm_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VFMADD231SD, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_xmm(src2), {}} }, 1570) } inst_vfmadd231sd_xmm_xmm_m64 :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: Mem64) -> Instruction { return with_hint(Instruction{ mnemonic = .VFMADD231SD, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_mem(src2.mem, 8), {}} }, 1570) } -emit_vfmadd231sd_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append(instructions, inst_vfmadd231sd_xmm_xmm_xmm(dst, src, src2)) } -emit_vfmadd231sd_xmm_xmm_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem64) { append(instructions, inst_vfmadd231sd_xmm_xmm_m64(dst, src, src2)) } +emit_vfmadd231sd_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append_elem(instructions, inst_vfmadd231sd_xmm_xmm_xmm(dst, src, src2)) } +emit_vfmadd231sd_xmm_xmm_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem64) { append_elem(instructions, inst_vfmadd231sd_xmm_xmm_m64(dst, src, src2)) } inst_vfmsub132ps_xmm_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VFMSUB132PS, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_xmm(src2), {}} }, 1571) } inst_vfmsub132ps_xmm_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .VFMSUB132PS, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_mem(src2.mem, 16), {}} }, 1571) } inst_vfmsub132ps_ymm_ymm_ymm :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: YMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VFMSUB132PS, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_ymm(src2), {}} }, 1572) } inst_vfmsub132ps_ymm_ymm_m256 :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: Mem256) -> Instruction { return with_hint(Instruction{ mnemonic = .VFMSUB132PS, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_mem(src2.mem, 32), {}} }, 1572) } -emit_vfmsub132ps_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append(instructions, inst_vfmsub132ps_xmm_xmm_xmm(dst, src, src2)) } -emit_vfmsub132ps_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append(instructions, inst_vfmsub132ps_xmm_xmm_m128(dst, src, src2)) } -emit_vfmsub132ps_ymm_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM) { append(instructions, inst_vfmsub132ps_ymm_ymm_ymm(dst, src, src2)) } -emit_vfmsub132ps_ymm_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256) { append(instructions, inst_vfmsub132ps_ymm_ymm_m256(dst, src, src2)) } +emit_vfmsub132ps_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append_elem(instructions, inst_vfmsub132ps_xmm_xmm_xmm(dst, src, src2)) } +emit_vfmsub132ps_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append_elem(instructions, inst_vfmsub132ps_xmm_xmm_m128(dst, src, src2)) } +emit_vfmsub132ps_ymm_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM) { append_elem(instructions, inst_vfmsub132ps_ymm_ymm_ymm(dst, src, src2)) } +emit_vfmsub132ps_ymm_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256) { append_elem(instructions, inst_vfmsub132ps_ymm_ymm_m256(dst, src, src2)) } inst_vfmsub213ps_xmm_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VFMSUB213PS, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_xmm(src2), {}} }, 1573) } inst_vfmsub213ps_xmm_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .VFMSUB213PS, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_mem(src2.mem, 16), {}} }, 1573) } inst_vfmsub213ps_ymm_ymm_ymm :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: YMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VFMSUB213PS, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_ymm(src2), {}} }, 1574) } inst_vfmsub213ps_ymm_ymm_m256 :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: Mem256) -> Instruction { return with_hint(Instruction{ mnemonic = .VFMSUB213PS, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_mem(src2.mem, 32), {}} }, 1574) } -emit_vfmsub213ps_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append(instructions, inst_vfmsub213ps_xmm_xmm_xmm(dst, src, src2)) } -emit_vfmsub213ps_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append(instructions, inst_vfmsub213ps_xmm_xmm_m128(dst, src, src2)) } -emit_vfmsub213ps_ymm_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM) { append(instructions, inst_vfmsub213ps_ymm_ymm_ymm(dst, src, src2)) } -emit_vfmsub213ps_ymm_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256) { append(instructions, inst_vfmsub213ps_ymm_ymm_m256(dst, src, src2)) } +emit_vfmsub213ps_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append_elem(instructions, inst_vfmsub213ps_xmm_xmm_xmm(dst, src, src2)) } +emit_vfmsub213ps_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append_elem(instructions, inst_vfmsub213ps_xmm_xmm_m128(dst, src, src2)) } +emit_vfmsub213ps_ymm_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM) { append_elem(instructions, inst_vfmsub213ps_ymm_ymm_ymm(dst, src, src2)) } +emit_vfmsub213ps_ymm_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256) { append_elem(instructions, inst_vfmsub213ps_ymm_ymm_m256(dst, src, src2)) } inst_vfmsub231ps_xmm_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VFMSUB231PS, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_xmm(src2), {}} }, 1575) } inst_vfmsub231ps_xmm_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .VFMSUB231PS, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_mem(src2.mem, 16), {}} }, 1575) } inst_vfmsub231ps_ymm_ymm_ymm :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: YMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VFMSUB231PS, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_ymm(src2), {}} }, 1576) } inst_vfmsub231ps_ymm_ymm_m256 :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: Mem256) -> Instruction { return with_hint(Instruction{ mnemonic = .VFMSUB231PS, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_mem(src2.mem, 32), {}} }, 1576) } -emit_vfmsub231ps_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append(instructions, inst_vfmsub231ps_xmm_xmm_xmm(dst, src, src2)) } -emit_vfmsub231ps_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append(instructions, inst_vfmsub231ps_xmm_xmm_m128(dst, src, src2)) } -emit_vfmsub231ps_ymm_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM) { append(instructions, inst_vfmsub231ps_ymm_ymm_ymm(dst, src, src2)) } -emit_vfmsub231ps_ymm_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256) { append(instructions, inst_vfmsub231ps_ymm_ymm_m256(dst, src, src2)) } +emit_vfmsub231ps_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append_elem(instructions, inst_vfmsub231ps_xmm_xmm_xmm(dst, src, src2)) } +emit_vfmsub231ps_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append_elem(instructions, inst_vfmsub231ps_xmm_xmm_m128(dst, src, src2)) } +emit_vfmsub231ps_ymm_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM) { append_elem(instructions, inst_vfmsub231ps_ymm_ymm_ymm(dst, src, src2)) } +emit_vfmsub231ps_ymm_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256) { append_elem(instructions, inst_vfmsub231ps_ymm_ymm_m256(dst, src, src2)) } inst_vfmsub132pd_xmm_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VFMSUB132PD, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_xmm(src2), {}} }, 1577) } inst_vfmsub132pd_xmm_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .VFMSUB132PD, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_mem(src2.mem, 16), {}} }, 1577) } inst_vfmsub132pd_ymm_ymm_ymm :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: YMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VFMSUB132PD, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_ymm(src2), {}} }, 1578) } inst_vfmsub132pd_ymm_ymm_m256 :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: Mem256) -> Instruction { return with_hint(Instruction{ mnemonic = .VFMSUB132PD, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_mem(src2.mem, 32), {}} }, 1578) } -emit_vfmsub132pd_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append(instructions, inst_vfmsub132pd_xmm_xmm_xmm(dst, src, src2)) } -emit_vfmsub132pd_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append(instructions, inst_vfmsub132pd_xmm_xmm_m128(dst, src, src2)) } -emit_vfmsub132pd_ymm_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM) { append(instructions, inst_vfmsub132pd_ymm_ymm_ymm(dst, src, src2)) } -emit_vfmsub132pd_ymm_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256) { append(instructions, inst_vfmsub132pd_ymm_ymm_m256(dst, src, src2)) } +emit_vfmsub132pd_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append_elem(instructions, inst_vfmsub132pd_xmm_xmm_xmm(dst, src, src2)) } +emit_vfmsub132pd_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append_elem(instructions, inst_vfmsub132pd_xmm_xmm_m128(dst, src, src2)) } +emit_vfmsub132pd_ymm_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM) { append_elem(instructions, inst_vfmsub132pd_ymm_ymm_ymm(dst, src, src2)) } +emit_vfmsub132pd_ymm_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256) { append_elem(instructions, inst_vfmsub132pd_ymm_ymm_m256(dst, src, src2)) } inst_vfmsub213pd_xmm_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VFMSUB213PD, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_xmm(src2), {}} }, 1579) } inst_vfmsub213pd_xmm_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .VFMSUB213PD, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_mem(src2.mem, 16), {}} }, 1579) } inst_vfmsub213pd_ymm_ymm_ymm :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: YMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VFMSUB213PD, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_ymm(src2), {}} }, 1580) } inst_vfmsub213pd_ymm_ymm_m256 :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: Mem256) -> Instruction { return with_hint(Instruction{ mnemonic = .VFMSUB213PD, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_mem(src2.mem, 32), {}} }, 1580) } -emit_vfmsub213pd_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append(instructions, inst_vfmsub213pd_xmm_xmm_xmm(dst, src, src2)) } -emit_vfmsub213pd_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append(instructions, inst_vfmsub213pd_xmm_xmm_m128(dst, src, src2)) } -emit_vfmsub213pd_ymm_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM) { append(instructions, inst_vfmsub213pd_ymm_ymm_ymm(dst, src, src2)) } -emit_vfmsub213pd_ymm_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256) { append(instructions, inst_vfmsub213pd_ymm_ymm_m256(dst, src, src2)) } +emit_vfmsub213pd_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append_elem(instructions, inst_vfmsub213pd_xmm_xmm_xmm(dst, src, src2)) } +emit_vfmsub213pd_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append_elem(instructions, inst_vfmsub213pd_xmm_xmm_m128(dst, src, src2)) } +emit_vfmsub213pd_ymm_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM) { append_elem(instructions, inst_vfmsub213pd_ymm_ymm_ymm(dst, src, src2)) } +emit_vfmsub213pd_ymm_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256) { append_elem(instructions, inst_vfmsub213pd_ymm_ymm_m256(dst, src, src2)) } inst_vfmsub231pd_xmm_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VFMSUB231PD, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_xmm(src2), {}} }, 1581) } inst_vfmsub231pd_xmm_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .VFMSUB231PD, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_mem(src2.mem, 16), {}} }, 1581) } inst_vfmsub231pd_ymm_ymm_ymm :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: YMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VFMSUB231PD, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_ymm(src2), {}} }, 1582) } inst_vfmsub231pd_ymm_ymm_m256 :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: Mem256) -> Instruction { return with_hint(Instruction{ mnemonic = .VFMSUB231PD, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_mem(src2.mem, 32), {}} }, 1582) } -emit_vfmsub231pd_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append(instructions, inst_vfmsub231pd_xmm_xmm_xmm(dst, src, src2)) } -emit_vfmsub231pd_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append(instructions, inst_vfmsub231pd_xmm_xmm_m128(dst, src, src2)) } -emit_vfmsub231pd_ymm_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM) { append(instructions, inst_vfmsub231pd_ymm_ymm_ymm(dst, src, src2)) } -emit_vfmsub231pd_ymm_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256) { append(instructions, inst_vfmsub231pd_ymm_ymm_m256(dst, src, src2)) } +emit_vfmsub231pd_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append_elem(instructions, inst_vfmsub231pd_xmm_xmm_xmm(dst, src, src2)) } +emit_vfmsub231pd_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append_elem(instructions, inst_vfmsub231pd_xmm_xmm_m128(dst, src, src2)) } +emit_vfmsub231pd_ymm_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM) { append_elem(instructions, inst_vfmsub231pd_ymm_ymm_ymm(dst, src, src2)) } +emit_vfmsub231pd_ymm_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256) { append_elem(instructions, inst_vfmsub231pd_ymm_ymm_m256(dst, src, src2)) } inst_vfmsub132ss_xmm_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VFMSUB132SS, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_xmm(src2), {}} }, 1583) } inst_vfmsub132ss_xmm_xmm_m32 :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: Mem32) -> Instruction { return with_hint(Instruction{ mnemonic = .VFMSUB132SS, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_mem(src2.mem, 4), {}} }, 1583) } -emit_vfmsub132ss_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append(instructions, inst_vfmsub132ss_xmm_xmm_xmm(dst, src, src2)) } -emit_vfmsub132ss_xmm_xmm_m32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem32) { append(instructions, inst_vfmsub132ss_xmm_xmm_m32(dst, src, src2)) } +emit_vfmsub132ss_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append_elem(instructions, inst_vfmsub132ss_xmm_xmm_xmm(dst, src, src2)) } +emit_vfmsub132ss_xmm_xmm_m32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem32) { append_elem(instructions, inst_vfmsub132ss_xmm_xmm_m32(dst, src, src2)) } inst_vfmsub213ss_xmm_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VFMSUB213SS, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_xmm(src2), {}} }, 1584) } inst_vfmsub213ss_xmm_xmm_m32 :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: Mem32) -> Instruction { return with_hint(Instruction{ mnemonic = .VFMSUB213SS, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_mem(src2.mem, 4), {}} }, 1584) } -emit_vfmsub213ss_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append(instructions, inst_vfmsub213ss_xmm_xmm_xmm(dst, src, src2)) } -emit_vfmsub213ss_xmm_xmm_m32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem32) { append(instructions, inst_vfmsub213ss_xmm_xmm_m32(dst, src, src2)) } +emit_vfmsub213ss_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append_elem(instructions, inst_vfmsub213ss_xmm_xmm_xmm(dst, src, src2)) } +emit_vfmsub213ss_xmm_xmm_m32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem32) { append_elem(instructions, inst_vfmsub213ss_xmm_xmm_m32(dst, src, src2)) } inst_vfmsub231ss_xmm_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VFMSUB231SS, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_xmm(src2), {}} }, 1585) } inst_vfmsub231ss_xmm_xmm_m32 :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: Mem32) -> Instruction { return with_hint(Instruction{ mnemonic = .VFMSUB231SS, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_mem(src2.mem, 4), {}} }, 1585) } -emit_vfmsub231ss_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append(instructions, inst_vfmsub231ss_xmm_xmm_xmm(dst, src, src2)) } -emit_vfmsub231ss_xmm_xmm_m32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem32) { append(instructions, inst_vfmsub231ss_xmm_xmm_m32(dst, src, src2)) } +emit_vfmsub231ss_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append_elem(instructions, inst_vfmsub231ss_xmm_xmm_xmm(dst, src, src2)) } +emit_vfmsub231ss_xmm_xmm_m32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem32) { append_elem(instructions, inst_vfmsub231ss_xmm_xmm_m32(dst, src, src2)) } inst_vfmsub132sd_xmm_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VFMSUB132SD, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_xmm(src2), {}} }, 1586) } inst_vfmsub132sd_xmm_xmm_m64 :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: Mem64) -> Instruction { return with_hint(Instruction{ mnemonic = .VFMSUB132SD, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_mem(src2.mem, 8), {}} }, 1586) } -emit_vfmsub132sd_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append(instructions, inst_vfmsub132sd_xmm_xmm_xmm(dst, src, src2)) } -emit_vfmsub132sd_xmm_xmm_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem64) { append(instructions, inst_vfmsub132sd_xmm_xmm_m64(dst, src, src2)) } +emit_vfmsub132sd_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append_elem(instructions, inst_vfmsub132sd_xmm_xmm_xmm(dst, src, src2)) } +emit_vfmsub132sd_xmm_xmm_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem64) { append_elem(instructions, inst_vfmsub132sd_xmm_xmm_m64(dst, src, src2)) } inst_vfmsub213sd_xmm_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VFMSUB213SD, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_xmm(src2), {}} }, 1587) } inst_vfmsub213sd_xmm_xmm_m64 :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: Mem64) -> Instruction { return with_hint(Instruction{ mnemonic = .VFMSUB213SD, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_mem(src2.mem, 8), {}} }, 1587) } -emit_vfmsub213sd_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append(instructions, inst_vfmsub213sd_xmm_xmm_xmm(dst, src, src2)) } -emit_vfmsub213sd_xmm_xmm_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem64) { append(instructions, inst_vfmsub213sd_xmm_xmm_m64(dst, src, src2)) } +emit_vfmsub213sd_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append_elem(instructions, inst_vfmsub213sd_xmm_xmm_xmm(dst, src, src2)) } +emit_vfmsub213sd_xmm_xmm_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem64) { append_elem(instructions, inst_vfmsub213sd_xmm_xmm_m64(dst, src, src2)) } inst_vfmsub231sd_xmm_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VFMSUB231SD, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_xmm(src2), {}} }, 1588) } inst_vfmsub231sd_xmm_xmm_m64 :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: Mem64) -> Instruction { return with_hint(Instruction{ mnemonic = .VFMSUB231SD, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_mem(src2.mem, 8), {}} }, 1588) } -emit_vfmsub231sd_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append(instructions, inst_vfmsub231sd_xmm_xmm_xmm(dst, src, src2)) } -emit_vfmsub231sd_xmm_xmm_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem64) { append(instructions, inst_vfmsub231sd_xmm_xmm_m64(dst, src, src2)) } +emit_vfmsub231sd_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append_elem(instructions, inst_vfmsub231sd_xmm_xmm_xmm(dst, src, src2)) } +emit_vfmsub231sd_xmm_xmm_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem64) { append_elem(instructions, inst_vfmsub231sd_xmm_xmm_m64(dst, src, src2)) } inst_vfnmadd132ps_xmm_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VFNMADD132PS, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_xmm(src2), {}} }, 1589) } inst_vfnmadd132ps_xmm_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .VFNMADD132PS, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_mem(src2.mem, 16), {}} }, 1589) } inst_vfnmadd132ps_ymm_ymm_ymm :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: YMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VFNMADD132PS, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_ymm(src2), {}} }, 1590) } inst_vfnmadd132ps_ymm_ymm_m256 :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: Mem256) -> Instruction { return with_hint(Instruction{ mnemonic = .VFNMADD132PS, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_mem(src2.mem, 32), {}} }, 1590) } -emit_vfnmadd132ps_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append(instructions, inst_vfnmadd132ps_xmm_xmm_xmm(dst, src, src2)) } -emit_vfnmadd132ps_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append(instructions, inst_vfnmadd132ps_xmm_xmm_m128(dst, src, src2)) } -emit_vfnmadd132ps_ymm_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM) { append(instructions, inst_vfnmadd132ps_ymm_ymm_ymm(dst, src, src2)) } -emit_vfnmadd132ps_ymm_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256) { append(instructions, inst_vfnmadd132ps_ymm_ymm_m256(dst, src, src2)) } +emit_vfnmadd132ps_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append_elem(instructions, inst_vfnmadd132ps_xmm_xmm_xmm(dst, src, src2)) } +emit_vfnmadd132ps_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append_elem(instructions, inst_vfnmadd132ps_xmm_xmm_m128(dst, src, src2)) } +emit_vfnmadd132ps_ymm_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM) { append_elem(instructions, inst_vfnmadd132ps_ymm_ymm_ymm(dst, src, src2)) } +emit_vfnmadd132ps_ymm_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256) { append_elem(instructions, inst_vfnmadd132ps_ymm_ymm_m256(dst, src, src2)) } inst_vfnmadd213ps_xmm_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VFNMADD213PS, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_xmm(src2), {}} }, 1591) } inst_vfnmadd213ps_xmm_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .VFNMADD213PS, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_mem(src2.mem, 16), {}} }, 1591) } inst_vfnmadd213ps_ymm_ymm_ymm :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: YMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VFNMADD213PS, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_ymm(src2), {}} }, 1592) } inst_vfnmadd213ps_ymm_ymm_m256 :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: Mem256) -> Instruction { return with_hint(Instruction{ mnemonic = .VFNMADD213PS, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_mem(src2.mem, 32), {}} }, 1592) } -emit_vfnmadd213ps_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append(instructions, inst_vfnmadd213ps_xmm_xmm_xmm(dst, src, src2)) } -emit_vfnmadd213ps_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append(instructions, inst_vfnmadd213ps_xmm_xmm_m128(dst, src, src2)) } -emit_vfnmadd213ps_ymm_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM) { append(instructions, inst_vfnmadd213ps_ymm_ymm_ymm(dst, src, src2)) } -emit_vfnmadd213ps_ymm_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256) { append(instructions, inst_vfnmadd213ps_ymm_ymm_m256(dst, src, src2)) } +emit_vfnmadd213ps_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append_elem(instructions, inst_vfnmadd213ps_xmm_xmm_xmm(dst, src, src2)) } +emit_vfnmadd213ps_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append_elem(instructions, inst_vfnmadd213ps_xmm_xmm_m128(dst, src, src2)) } +emit_vfnmadd213ps_ymm_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM) { append_elem(instructions, inst_vfnmadd213ps_ymm_ymm_ymm(dst, src, src2)) } +emit_vfnmadd213ps_ymm_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256) { append_elem(instructions, inst_vfnmadd213ps_ymm_ymm_m256(dst, src, src2)) } inst_vfnmadd231ps_xmm_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VFNMADD231PS, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_xmm(src2), {}} }, 1593) } inst_vfnmadd231ps_xmm_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .VFNMADD231PS, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_mem(src2.mem, 16), {}} }, 1593) } inst_vfnmadd231ps_ymm_ymm_ymm :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: YMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VFNMADD231PS, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_ymm(src2), {}} }, 1594) } inst_vfnmadd231ps_ymm_ymm_m256 :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: Mem256) -> Instruction { return with_hint(Instruction{ mnemonic = .VFNMADD231PS, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_mem(src2.mem, 32), {}} }, 1594) } -emit_vfnmadd231ps_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append(instructions, inst_vfnmadd231ps_xmm_xmm_xmm(dst, src, src2)) } -emit_vfnmadd231ps_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append(instructions, inst_vfnmadd231ps_xmm_xmm_m128(dst, src, src2)) } -emit_vfnmadd231ps_ymm_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM) { append(instructions, inst_vfnmadd231ps_ymm_ymm_ymm(dst, src, src2)) } -emit_vfnmadd231ps_ymm_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256) { append(instructions, inst_vfnmadd231ps_ymm_ymm_m256(dst, src, src2)) } +emit_vfnmadd231ps_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append_elem(instructions, inst_vfnmadd231ps_xmm_xmm_xmm(dst, src, src2)) } +emit_vfnmadd231ps_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append_elem(instructions, inst_vfnmadd231ps_xmm_xmm_m128(dst, src, src2)) } +emit_vfnmadd231ps_ymm_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM) { append_elem(instructions, inst_vfnmadd231ps_ymm_ymm_ymm(dst, src, src2)) } +emit_vfnmadd231ps_ymm_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256) { append_elem(instructions, inst_vfnmadd231ps_ymm_ymm_m256(dst, src, src2)) } inst_vfnmadd132pd_xmm_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VFNMADD132PD, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_xmm(src2), {}} }, 1595) } inst_vfnmadd132pd_xmm_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .VFNMADD132PD, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_mem(src2.mem, 16), {}} }, 1595) } inst_vfnmadd132pd_ymm_ymm_ymm :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: YMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VFNMADD132PD, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_ymm(src2), {}} }, 1596) } inst_vfnmadd132pd_ymm_ymm_m256 :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: Mem256) -> Instruction { return with_hint(Instruction{ mnemonic = .VFNMADD132PD, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_mem(src2.mem, 32), {}} }, 1596) } -emit_vfnmadd132pd_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append(instructions, inst_vfnmadd132pd_xmm_xmm_xmm(dst, src, src2)) } -emit_vfnmadd132pd_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append(instructions, inst_vfnmadd132pd_xmm_xmm_m128(dst, src, src2)) } -emit_vfnmadd132pd_ymm_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM) { append(instructions, inst_vfnmadd132pd_ymm_ymm_ymm(dst, src, src2)) } -emit_vfnmadd132pd_ymm_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256) { append(instructions, inst_vfnmadd132pd_ymm_ymm_m256(dst, src, src2)) } +emit_vfnmadd132pd_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append_elem(instructions, inst_vfnmadd132pd_xmm_xmm_xmm(dst, src, src2)) } +emit_vfnmadd132pd_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append_elem(instructions, inst_vfnmadd132pd_xmm_xmm_m128(dst, src, src2)) } +emit_vfnmadd132pd_ymm_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM) { append_elem(instructions, inst_vfnmadd132pd_ymm_ymm_ymm(dst, src, src2)) } +emit_vfnmadd132pd_ymm_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256) { append_elem(instructions, inst_vfnmadd132pd_ymm_ymm_m256(dst, src, src2)) } inst_vfnmadd213pd_xmm_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VFNMADD213PD, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_xmm(src2), {}} }, 1597) } inst_vfnmadd213pd_xmm_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .VFNMADD213PD, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_mem(src2.mem, 16), {}} }, 1597) } inst_vfnmadd213pd_ymm_ymm_ymm :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: YMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VFNMADD213PD, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_ymm(src2), {}} }, 1598) } inst_vfnmadd213pd_ymm_ymm_m256 :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: Mem256) -> Instruction { return with_hint(Instruction{ mnemonic = .VFNMADD213PD, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_mem(src2.mem, 32), {}} }, 1598) } -emit_vfnmadd213pd_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append(instructions, inst_vfnmadd213pd_xmm_xmm_xmm(dst, src, src2)) } -emit_vfnmadd213pd_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append(instructions, inst_vfnmadd213pd_xmm_xmm_m128(dst, src, src2)) } -emit_vfnmadd213pd_ymm_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM) { append(instructions, inst_vfnmadd213pd_ymm_ymm_ymm(dst, src, src2)) } -emit_vfnmadd213pd_ymm_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256) { append(instructions, inst_vfnmadd213pd_ymm_ymm_m256(dst, src, src2)) } +emit_vfnmadd213pd_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append_elem(instructions, inst_vfnmadd213pd_xmm_xmm_xmm(dst, src, src2)) } +emit_vfnmadd213pd_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append_elem(instructions, inst_vfnmadd213pd_xmm_xmm_m128(dst, src, src2)) } +emit_vfnmadd213pd_ymm_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM) { append_elem(instructions, inst_vfnmadd213pd_ymm_ymm_ymm(dst, src, src2)) } +emit_vfnmadd213pd_ymm_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256) { append_elem(instructions, inst_vfnmadd213pd_ymm_ymm_m256(dst, src, src2)) } inst_vfnmadd231pd_xmm_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VFNMADD231PD, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_xmm(src2), {}} }, 1599) } inst_vfnmadd231pd_xmm_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .VFNMADD231PD, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_mem(src2.mem, 16), {}} }, 1599) } inst_vfnmadd231pd_ymm_ymm_ymm :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: YMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VFNMADD231PD, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_ymm(src2), {}} }, 1600) } inst_vfnmadd231pd_ymm_ymm_m256 :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: Mem256) -> Instruction { return with_hint(Instruction{ mnemonic = .VFNMADD231PD, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_mem(src2.mem, 32), {}} }, 1600) } -emit_vfnmadd231pd_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append(instructions, inst_vfnmadd231pd_xmm_xmm_xmm(dst, src, src2)) } -emit_vfnmadd231pd_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append(instructions, inst_vfnmadd231pd_xmm_xmm_m128(dst, src, src2)) } -emit_vfnmadd231pd_ymm_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM) { append(instructions, inst_vfnmadd231pd_ymm_ymm_ymm(dst, src, src2)) } -emit_vfnmadd231pd_ymm_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256) { append(instructions, inst_vfnmadd231pd_ymm_ymm_m256(dst, src, src2)) } +emit_vfnmadd231pd_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append_elem(instructions, inst_vfnmadd231pd_xmm_xmm_xmm(dst, src, src2)) } +emit_vfnmadd231pd_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append_elem(instructions, inst_vfnmadd231pd_xmm_xmm_m128(dst, src, src2)) } +emit_vfnmadd231pd_ymm_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM) { append_elem(instructions, inst_vfnmadd231pd_ymm_ymm_ymm(dst, src, src2)) } +emit_vfnmadd231pd_ymm_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256) { append_elem(instructions, inst_vfnmadd231pd_ymm_ymm_m256(dst, src, src2)) } inst_vfnmadd132ss_xmm_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VFNMADD132SS, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_xmm(src2), {}} }, 1601) } inst_vfnmadd132ss_xmm_xmm_m32 :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: Mem32) -> Instruction { return with_hint(Instruction{ mnemonic = .VFNMADD132SS, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_mem(src2.mem, 4), {}} }, 1601) } -emit_vfnmadd132ss_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append(instructions, inst_vfnmadd132ss_xmm_xmm_xmm(dst, src, src2)) } -emit_vfnmadd132ss_xmm_xmm_m32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem32) { append(instructions, inst_vfnmadd132ss_xmm_xmm_m32(dst, src, src2)) } +emit_vfnmadd132ss_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append_elem(instructions, inst_vfnmadd132ss_xmm_xmm_xmm(dst, src, src2)) } +emit_vfnmadd132ss_xmm_xmm_m32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem32) { append_elem(instructions, inst_vfnmadd132ss_xmm_xmm_m32(dst, src, src2)) } inst_vfnmadd213ss_xmm_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VFNMADD213SS, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_xmm(src2), {}} }, 1602) } inst_vfnmadd213ss_xmm_xmm_m32 :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: Mem32) -> Instruction { return with_hint(Instruction{ mnemonic = .VFNMADD213SS, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_mem(src2.mem, 4), {}} }, 1602) } -emit_vfnmadd213ss_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append(instructions, inst_vfnmadd213ss_xmm_xmm_xmm(dst, src, src2)) } -emit_vfnmadd213ss_xmm_xmm_m32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem32) { append(instructions, inst_vfnmadd213ss_xmm_xmm_m32(dst, src, src2)) } +emit_vfnmadd213ss_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append_elem(instructions, inst_vfnmadd213ss_xmm_xmm_xmm(dst, src, src2)) } +emit_vfnmadd213ss_xmm_xmm_m32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem32) { append_elem(instructions, inst_vfnmadd213ss_xmm_xmm_m32(dst, src, src2)) } inst_vfnmadd231ss_xmm_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VFNMADD231SS, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_xmm(src2), {}} }, 1603) } inst_vfnmadd231ss_xmm_xmm_m32 :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: Mem32) -> Instruction { return with_hint(Instruction{ mnemonic = .VFNMADD231SS, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_mem(src2.mem, 4), {}} }, 1603) } -emit_vfnmadd231ss_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append(instructions, inst_vfnmadd231ss_xmm_xmm_xmm(dst, src, src2)) } -emit_vfnmadd231ss_xmm_xmm_m32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem32) { append(instructions, inst_vfnmadd231ss_xmm_xmm_m32(dst, src, src2)) } +emit_vfnmadd231ss_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append_elem(instructions, inst_vfnmadd231ss_xmm_xmm_xmm(dst, src, src2)) } +emit_vfnmadd231ss_xmm_xmm_m32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem32) { append_elem(instructions, inst_vfnmadd231ss_xmm_xmm_m32(dst, src, src2)) } inst_vfnmadd132sd_xmm_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VFNMADD132SD, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_xmm(src2), {}} }, 1604) } inst_vfnmadd132sd_xmm_xmm_m64 :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: Mem64) -> Instruction { return with_hint(Instruction{ mnemonic = .VFNMADD132SD, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_mem(src2.mem, 8), {}} }, 1604) } -emit_vfnmadd132sd_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append(instructions, inst_vfnmadd132sd_xmm_xmm_xmm(dst, src, src2)) } -emit_vfnmadd132sd_xmm_xmm_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem64) { append(instructions, inst_vfnmadd132sd_xmm_xmm_m64(dst, src, src2)) } +emit_vfnmadd132sd_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append_elem(instructions, inst_vfnmadd132sd_xmm_xmm_xmm(dst, src, src2)) } +emit_vfnmadd132sd_xmm_xmm_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem64) { append_elem(instructions, inst_vfnmadd132sd_xmm_xmm_m64(dst, src, src2)) } inst_vfnmadd213sd_xmm_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VFNMADD213SD, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_xmm(src2), {}} }, 1605) } inst_vfnmadd213sd_xmm_xmm_m64 :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: Mem64) -> Instruction { return with_hint(Instruction{ mnemonic = .VFNMADD213SD, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_mem(src2.mem, 8), {}} }, 1605) } -emit_vfnmadd213sd_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append(instructions, inst_vfnmadd213sd_xmm_xmm_xmm(dst, src, src2)) } -emit_vfnmadd213sd_xmm_xmm_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem64) { append(instructions, inst_vfnmadd213sd_xmm_xmm_m64(dst, src, src2)) } +emit_vfnmadd213sd_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append_elem(instructions, inst_vfnmadd213sd_xmm_xmm_xmm(dst, src, src2)) } +emit_vfnmadd213sd_xmm_xmm_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem64) { append_elem(instructions, inst_vfnmadd213sd_xmm_xmm_m64(dst, src, src2)) } inst_vfnmadd231sd_xmm_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VFNMADD231SD, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_xmm(src2), {}} }, 1606) } inst_vfnmadd231sd_xmm_xmm_m64 :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: Mem64) -> Instruction { return with_hint(Instruction{ mnemonic = .VFNMADD231SD, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_mem(src2.mem, 8), {}} }, 1606) } -emit_vfnmadd231sd_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append(instructions, inst_vfnmadd231sd_xmm_xmm_xmm(dst, src, src2)) } -emit_vfnmadd231sd_xmm_xmm_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem64) { append(instructions, inst_vfnmadd231sd_xmm_xmm_m64(dst, src, src2)) } +emit_vfnmadd231sd_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append_elem(instructions, inst_vfnmadd231sd_xmm_xmm_xmm(dst, src, src2)) } +emit_vfnmadd231sd_xmm_xmm_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem64) { append_elem(instructions, inst_vfnmadd231sd_xmm_xmm_m64(dst, src, src2)) } inst_vfnmsub132ps_xmm_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VFNMSUB132PS, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_xmm(src2), {}} }, 1607) } inst_vfnmsub132ps_xmm_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .VFNMSUB132PS, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_mem(src2.mem, 16), {}} }, 1607) } inst_vfnmsub132ps_ymm_ymm_ymm :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: YMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VFNMSUB132PS, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_ymm(src2), {}} }, 1608) } inst_vfnmsub132ps_ymm_ymm_m256 :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: Mem256) -> Instruction { return with_hint(Instruction{ mnemonic = .VFNMSUB132PS, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_mem(src2.mem, 32), {}} }, 1608) } -emit_vfnmsub132ps_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append(instructions, inst_vfnmsub132ps_xmm_xmm_xmm(dst, src, src2)) } -emit_vfnmsub132ps_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append(instructions, inst_vfnmsub132ps_xmm_xmm_m128(dst, src, src2)) } -emit_vfnmsub132ps_ymm_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM) { append(instructions, inst_vfnmsub132ps_ymm_ymm_ymm(dst, src, src2)) } -emit_vfnmsub132ps_ymm_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256) { append(instructions, inst_vfnmsub132ps_ymm_ymm_m256(dst, src, src2)) } +emit_vfnmsub132ps_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append_elem(instructions, inst_vfnmsub132ps_xmm_xmm_xmm(dst, src, src2)) } +emit_vfnmsub132ps_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append_elem(instructions, inst_vfnmsub132ps_xmm_xmm_m128(dst, src, src2)) } +emit_vfnmsub132ps_ymm_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM) { append_elem(instructions, inst_vfnmsub132ps_ymm_ymm_ymm(dst, src, src2)) } +emit_vfnmsub132ps_ymm_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256) { append_elem(instructions, inst_vfnmsub132ps_ymm_ymm_m256(dst, src, src2)) } inst_vfnmsub213ps_xmm_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VFNMSUB213PS, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_xmm(src2), {}} }, 1609) } inst_vfnmsub213ps_xmm_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .VFNMSUB213PS, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_mem(src2.mem, 16), {}} }, 1609) } inst_vfnmsub213ps_ymm_ymm_ymm :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: YMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VFNMSUB213PS, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_ymm(src2), {}} }, 1610) } inst_vfnmsub213ps_ymm_ymm_m256 :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: Mem256) -> Instruction { return with_hint(Instruction{ mnemonic = .VFNMSUB213PS, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_mem(src2.mem, 32), {}} }, 1610) } -emit_vfnmsub213ps_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append(instructions, inst_vfnmsub213ps_xmm_xmm_xmm(dst, src, src2)) } -emit_vfnmsub213ps_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append(instructions, inst_vfnmsub213ps_xmm_xmm_m128(dst, src, src2)) } -emit_vfnmsub213ps_ymm_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM) { append(instructions, inst_vfnmsub213ps_ymm_ymm_ymm(dst, src, src2)) } -emit_vfnmsub213ps_ymm_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256) { append(instructions, inst_vfnmsub213ps_ymm_ymm_m256(dst, src, src2)) } +emit_vfnmsub213ps_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append_elem(instructions, inst_vfnmsub213ps_xmm_xmm_xmm(dst, src, src2)) } +emit_vfnmsub213ps_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append_elem(instructions, inst_vfnmsub213ps_xmm_xmm_m128(dst, src, src2)) } +emit_vfnmsub213ps_ymm_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM) { append_elem(instructions, inst_vfnmsub213ps_ymm_ymm_ymm(dst, src, src2)) } +emit_vfnmsub213ps_ymm_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256) { append_elem(instructions, inst_vfnmsub213ps_ymm_ymm_m256(dst, src, src2)) } inst_vfnmsub231ps_xmm_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VFNMSUB231PS, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_xmm(src2), {}} }, 1611) } inst_vfnmsub231ps_xmm_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .VFNMSUB231PS, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_mem(src2.mem, 16), {}} }, 1611) } inst_vfnmsub231ps_ymm_ymm_ymm :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: YMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VFNMSUB231PS, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_ymm(src2), {}} }, 1612) } inst_vfnmsub231ps_ymm_ymm_m256 :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: Mem256) -> Instruction { return with_hint(Instruction{ mnemonic = .VFNMSUB231PS, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_mem(src2.mem, 32), {}} }, 1612) } -emit_vfnmsub231ps_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append(instructions, inst_vfnmsub231ps_xmm_xmm_xmm(dst, src, src2)) } -emit_vfnmsub231ps_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append(instructions, inst_vfnmsub231ps_xmm_xmm_m128(dst, src, src2)) } -emit_vfnmsub231ps_ymm_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM) { append(instructions, inst_vfnmsub231ps_ymm_ymm_ymm(dst, src, src2)) } -emit_vfnmsub231ps_ymm_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256) { append(instructions, inst_vfnmsub231ps_ymm_ymm_m256(dst, src, src2)) } +emit_vfnmsub231ps_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append_elem(instructions, inst_vfnmsub231ps_xmm_xmm_xmm(dst, src, src2)) } +emit_vfnmsub231ps_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append_elem(instructions, inst_vfnmsub231ps_xmm_xmm_m128(dst, src, src2)) } +emit_vfnmsub231ps_ymm_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM) { append_elem(instructions, inst_vfnmsub231ps_ymm_ymm_ymm(dst, src, src2)) } +emit_vfnmsub231ps_ymm_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256) { append_elem(instructions, inst_vfnmsub231ps_ymm_ymm_m256(dst, src, src2)) } inst_vfnmsub132pd_xmm_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VFNMSUB132PD, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_xmm(src2), {}} }, 1613) } inst_vfnmsub132pd_xmm_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .VFNMSUB132PD, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_mem(src2.mem, 16), {}} }, 1613) } inst_vfnmsub132pd_ymm_ymm_ymm :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: YMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VFNMSUB132PD, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_ymm(src2), {}} }, 1614) } inst_vfnmsub132pd_ymm_ymm_m256 :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: Mem256) -> Instruction { return with_hint(Instruction{ mnemonic = .VFNMSUB132PD, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_mem(src2.mem, 32), {}} }, 1614) } -emit_vfnmsub132pd_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append(instructions, inst_vfnmsub132pd_xmm_xmm_xmm(dst, src, src2)) } -emit_vfnmsub132pd_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append(instructions, inst_vfnmsub132pd_xmm_xmm_m128(dst, src, src2)) } -emit_vfnmsub132pd_ymm_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM) { append(instructions, inst_vfnmsub132pd_ymm_ymm_ymm(dst, src, src2)) } -emit_vfnmsub132pd_ymm_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256) { append(instructions, inst_vfnmsub132pd_ymm_ymm_m256(dst, src, src2)) } +emit_vfnmsub132pd_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append_elem(instructions, inst_vfnmsub132pd_xmm_xmm_xmm(dst, src, src2)) } +emit_vfnmsub132pd_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append_elem(instructions, inst_vfnmsub132pd_xmm_xmm_m128(dst, src, src2)) } +emit_vfnmsub132pd_ymm_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM) { append_elem(instructions, inst_vfnmsub132pd_ymm_ymm_ymm(dst, src, src2)) } +emit_vfnmsub132pd_ymm_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256) { append_elem(instructions, inst_vfnmsub132pd_ymm_ymm_m256(dst, src, src2)) } inst_vfnmsub213pd_xmm_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VFNMSUB213PD, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_xmm(src2), {}} }, 1615) } inst_vfnmsub213pd_xmm_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .VFNMSUB213PD, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_mem(src2.mem, 16), {}} }, 1615) } inst_vfnmsub213pd_ymm_ymm_ymm :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: YMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VFNMSUB213PD, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_ymm(src2), {}} }, 1616) } inst_vfnmsub213pd_ymm_ymm_m256 :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: Mem256) -> Instruction { return with_hint(Instruction{ mnemonic = .VFNMSUB213PD, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_mem(src2.mem, 32), {}} }, 1616) } -emit_vfnmsub213pd_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append(instructions, inst_vfnmsub213pd_xmm_xmm_xmm(dst, src, src2)) } -emit_vfnmsub213pd_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append(instructions, inst_vfnmsub213pd_xmm_xmm_m128(dst, src, src2)) } -emit_vfnmsub213pd_ymm_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM) { append(instructions, inst_vfnmsub213pd_ymm_ymm_ymm(dst, src, src2)) } -emit_vfnmsub213pd_ymm_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256) { append(instructions, inst_vfnmsub213pd_ymm_ymm_m256(dst, src, src2)) } +emit_vfnmsub213pd_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append_elem(instructions, inst_vfnmsub213pd_xmm_xmm_xmm(dst, src, src2)) } +emit_vfnmsub213pd_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append_elem(instructions, inst_vfnmsub213pd_xmm_xmm_m128(dst, src, src2)) } +emit_vfnmsub213pd_ymm_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM) { append_elem(instructions, inst_vfnmsub213pd_ymm_ymm_ymm(dst, src, src2)) } +emit_vfnmsub213pd_ymm_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256) { append_elem(instructions, inst_vfnmsub213pd_ymm_ymm_m256(dst, src, src2)) } inst_vfnmsub231pd_xmm_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VFNMSUB231PD, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_xmm(src2), {}} }, 1617) } inst_vfnmsub231pd_xmm_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .VFNMSUB231PD, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_mem(src2.mem, 16), {}} }, 1617) } inst_vfnmsub231pd_ymm_ymm_ymm :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: YMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VFNMSUB231PD, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_ymm(src2), {}} }, 1618) } inst_vfnmsub231pd_ymm_ymm_m256 :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: Mem256) -> Instruction { return with_hint(Instruction{ mnemonic = .VFNMSUB231PD, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_mem(src2.mem, 32), {}} }, 1618) } -emit_vfnmsub231pd_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append(instructions, inst_vfnmsub231pd_xmm_xmm_xmm(dst, src, src2)) } -emit_vfnmsub231pd_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append(instructions, inst_vfnmsub231pd_xmm_xmm_m128(dst, src, src2)) } -emit_vfnmsub231pd_ymm_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM) { append(instructions, inst_vfnmsub231pd_ymm_ymm_ymm(dst, src, src2)) } -emit_vfnmsub231pd_ymm_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256) { append(instructions, inst_vfnmsub231pd_ymm_ymm_m256(dst, src, src2)) } +emit_vfnmsub231pd_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append_elem(instructions, inst_vfnmsub231pd_xmm_xmm_xmm(dst, src, src2)) } +emit_vfnmsub231pd_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append_elem(instructions, inst_vfnmsub231pd_xmm_xmm_m128(dst, src, src2)) } +emit_vfnmsub231pd_ymm_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM) { append_elem(instructions, inst_vfnmsub231pd_ymm_ymm_ymm(dst, src, src2)) } +emit_vfnmsub231pd_ymm_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256) { append_elem(instructions, inst_vfnmsub231pd_ymm_ymm_m256(dst, src, src2)) } inst_vfnmsub132ss_xmm_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VFNMSUB132SS, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_xmm(src2), {}} }, 1619) } inst_vfnmsub132ss_xmm_xmm_m32 :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: Mem32) -> Instruction { return with_hint(Instruction{ mnemonic = .VFNMSUB132SS, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_mem(src2.mem, 4), {}} }, 1619) } -emit_vfnmsub132ss_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append(instructions, inst_vfnmsub132ss_xmm_xmm_xmm(dst, src, src2)) } -emit_vfnmsub132ss_xmm_xmm_m32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem32) { append(instructions, inst_vfnmsub132ss_xmm_xmm_m32(dst, src, src2)) } +emit_vfnmsub132ss_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append_elem(instructions, inst_vfnmsub132ss_xmm_xmm_xmm(dst, src, src2)) } +emit_vfnmsub132ss_xmm_xmm_m32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem32) { append_elem(instructions, inst_vfnmsub132ss_xmm_xmm_m32(dst, src, src2)) } inst_vfnmsub213ss_xmm_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VFNMSUB213SS, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_xmm(src2), {}} }, 1620) } inst_vfnmsub213ss_xmm_xmm_m32 :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: Mem32) -> Instruction { return with_hint(Instruction{ mnemonic = .VFNMSUB213SS, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_mem(src2.mem, 4), {}} }, 1620) } -emit_vfnmsub213ss_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append(instructions, inst_vfnmsub213ss_xmm_xmm_xmm(dst, src, src2)) } -emit_vfnmsub213ss_xmm_xmm_m32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem32) { append(instructions, inst_vfnmsub213ss_xmm_xmm_m32(dst, src, src2)) } +emit_vfnmsub213ss_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append_elem(instructions, inst_vfnmsub213ss_xmm_xmm_xmm(dst, src, src2)) } +emit_vfnmsub213ss_xmm_xmm_m32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem32) { append_elem(instructions, inst_vfnmsub213ss_xmm_xmm_m32(dst, src, src2)) } inst_vfnmsub231ss_xmm_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VFNMSUB231SS, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_xmm(src2), {}} }, 1621) } inst_vfnmsub231ss_xmm_xmm_m32 :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: Mem32) -> Instruction { return with_hint(Instruction{ mnemonic = .VFNMSUB231SS, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_mem(src2.mem, 4), {}} }, 1621) } -emit_vfnmsub231ss_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append(instructions, inst_vfnmsub231ss_xmm_xmm_xmm(dst, src, src2)) } -emit_vfnmsub231ss_xmm_xmm_m32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem32) { append(instructions, inst_vfnmsub231ss_xmm_xmm_m32(dst, src, src2)) } +emit_vfnmsub231ss_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append_elem(instructions, inst_vfnmsub231ss_xmm_xmm_xmm(dst, src, src2)) } +emit_vfnmsub231ss_xmm_xmm_m32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem32) { append_elem(instructions, inst_vfnmsub231ss_xmm_xmm_m32(dst, src, src2)) } inst_vfnmsub132sd_xmm_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VFNMSUB132SD, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_xmm(src2), {}} }, 1622) } inst_vfnmsub132sd_xmm_xmm_m64 :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: Mem64) -> Instruction { return with_hint(Instruction{ mnemonic = .VFNMSUB132SD, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_mem(src2.mem, 8), {}} }, 1622) } -emit_vfnmsub132sd_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append(instructions, inst_vfnmsub132sd_xmm_xmm_xmm(dst, src, src2)) } -emit_vfnmsub132sd_xmm_xmm_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem64) { append(instructions, inst_vfnmsub132sd_xmm_xmm_m64(dst, src, src2)) } +emit_vfnmsub132sd_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append_elem(instructions, inst_vfnmsub132sd_xmm_xmm_xmm(dst, src, src2)) } +emit_vfnmsub132sd_xmm_xmm_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem64) { append_elem(instructions, inst_vfnmsub132sd_xmm_xmm_m64(dst, src, src2)) } inst_vfnmsub213sd_xmm_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VFNMSUB213SD, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_xmm(src2), {}} }, 1623) } inst_vfnmsub213sd_xmm_xmm_m64 :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: Mem64) -> Instruction { return with_hint(Instruction{ mnemonic = .VFNMSUB213SD, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_mem(src2.mem, 8), {}} }, 1623) } -emit_vfnmsub213sd_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append(instructions, inst_vfnmsub213sd_xmm_xmm_xmm(dst, src, src2)) } -emit_vfnmsub213sd_xmm_xmm_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem64) { append(instructions, inst_vfnmsub213sd_xmm_xmm_m64(dst, src, src2)) } +emit_vfnmsub213sd_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append_elem(instructions, inst_vfnmsub213sd_xmm_xmm_xmm(dst, src, src2)) } +emit_vfnmsub213sd_xmm_xmm_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem64) { append_elem(instructions, inst_vfnmsub213sd_xmm_xmm_m64(dst, src, src2)) } inst_vfnmsub231sd_xmm_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VFNMSUB231SD, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_xmm(src2), {}} }, 1624) } inst_vfnmsub231sd_xmm_xmm_m64 :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: Mem64) -> Instruction { return with_hint(Instruction{ mnemonic = .VFNMSUB231SD, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_mem(src2.mem, 8), {}} }, 1624) } -emit_vfnmsub231sd_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append(instructions, inst_vfnmsub231sd_xmm_xmm_xmm(dst, src, src2)) } -emit_vfnmsub231sd_xmm_xmm_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem64) { append(instructions, inst_vfnmsub231sd_xmm_xmm_m64(dst, src, src2)) } +emit_vfnmsub231sd_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append_elem(instructions, inst_vfnmsub231sd_xmm_xmm_xmm(dst, src, src2)) } +emit_vfnmsub231sd_xmm_xmm_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem64) { append_elem(instructions, inst_vfnmsub231sd_xmm_xmm_m64(dst, src, src2)) } inst_vfmaddsub132ps_xmm_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VFMADDSUB132PS, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_xmm(src2), {}} }, 1625) } inst_vfmaddsub132ps_xmm_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .VFMADDSUB132PS, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_mem(src2.mem, 16), {}} }, 1625) } inst_vfmaddsub132ps_ymm_ymm_ymm :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: YMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VFMADDSUB132PS, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_ymm(src2), {}} }, 1626) } inst_vfmaddsub132ps_ymm_ymm_m256 :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: Mem256) -> Instruction { return with_hint(Instruction{ mnemonic = .VFMADDSUB132PS, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_mem(src2.mem, 32), {}} }, 1626) } -emit_vfmaddsub132ps_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append(instructions, inst_vfmaddsub132ps_xmm_xmm_xmm(dst, src, src2)) } -emit_vfmaddsub132ps_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append(instructions, inst_vfmaddsub132ps_xmm_xmm_m128(dst, src, src2)) } -emit_vfmaddsub132ps_ymm_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM) { append(instructions, inst_vfmaddsub132ps_ymm_ymm_ymm(dst, src, src2)) } -emit_vfmaddsub132ps_ymm_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256) { append(instructions, inst_vfmaddsub132ps_ymm_ymm_m256(dst, src, src2)) } +emit_vfmaddsub132ps_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append_elem(instructions, inst_vfmaddsub132ps_xmm_xmm_xmm(dst, src, src2)) } +emit_vfmaddsub132ps_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append_elem(instructions, inst_vfmaddsub132ps_xmm_xmm_m128(dst, src, src2)) } +emit_vfmaddsub132ps_ymm_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM) { append_elem(instructions, inst_vfmaddsub132ps_ymm_ymm_ymm(dst, src, src2)) } +emit_vfmaddsub132ps_ymm_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256) { append_elem(instructions, inst_vfmaddsub132ps_ymm_ymm_m256(dst, src, src2)) } inst_vfmaddsub213ps_xmm_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VFMADDSUB213PS, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_xmm(src2), {}} }, 1627) } inst_vfmaddsub213ps_xmm_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .VFMADDSUB213PS, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_mem(src2.mem, 16), {}} }, 1627) } inst_vfmaddsub213ps_ymm_ymm_ymm :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: YMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VFMADDSUB213PS, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_ymm(src2), {}} }, 1628) } inst_vfmaddsub213ps_ymm_ymm_m256 :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: Mem256) -> Instruction { return with_hint(Instruction{ mnemonic = .VFMADDSUB213PS, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_mem(src2.mem, 32), {}} }, 1628) } -emit_vfmaddsub213ps_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append(instructions, inst_vfmaddsub213ps_xmm_xmm_xmm(dst, src, src2)) } -emit_vfmaddsub213ps_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append(instructions, inst_vfmaddsub213ps_xmm_xmm_m128(dst, src, src2)) } -emit_vfmaddsub213ps_ymm_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM) { append(instructions, inst_vfmaddsub213ps_ymm_ymm_ymm(dst, src, src2)) } -emit_vfmaddsub213ps_ymm_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256) { append(instructions, inst_vfmaddsub213ps_ymm_ymm_m256(dst, src, src2)) } +emit_vfmaddsub213ps_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append_elem(instructions, inst_vfmaddsub213ps_xmm_xmm_xmm(dst, src, src2)) } +emit_vfmaddsub213ps_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append_elem(instructions, inst_vfmaddsub213ps_xmm_xmm_m128(dst, src, src2)) } +emit_vfmaddsub213ps_ymm_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM) { append_elem(instructions, inst_vfmaddsub213ps_ymm_ymm_ymm(dst, src, src2)) } +emit_vfmaddsub213ps_ymm_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256) { append_elem(instructions, inst_vfmaddsub213ps_ymm_ymm_m256(dst, src, src2)) } inst_vfmaddsub231ps_xmm_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VFMADDSUB231PS, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_xmm(src2), {}} }, 1629) } inst_vfmaddsub231ps_xmm_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .VFMADDSUB231PS, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_mem(src2.mem, 16), {}} }, 1629) } inst_vfmaddsub231ps_ymm_ymm_ymm :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: YMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VFMADDSUB231PS, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_ymm(src2), {}} }, 1630) } inst_vfmaddsub231ps_ymm_ymm_m256 :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: Mem256) -> Instruction { return with_hint(Instruction{ mnemonic = .VFMADDSUB231PS, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_mem(src2.mem, 32), {}} }, 1630) } -emit_vfmaddsub231ps_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append(instructions, inst_vfmaddsub231ps_xmm_xmm_xmm(dst, src, src2)) } -emit_vfmaddsub231ps_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append(instructions, inst_vfmaddsub231ps_xmm_xmm_m128(dst, src, src2)) } -emit_vfmaddsub231ps_ymm_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM) { append(instructions, inst_vfmaddsub231ps_ymm_ymm_ymm(dst, src, src2)) } -emit_vfmaddsub231ps_ymm_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256) { append(instructions, inst_vfmaddsub231ps_ymm_ymm_m256(dst, src, src2)) } +emit_vfmaddsub231ps_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append_elem(instructions, inst_vfmaddsub231ps_xmm_xmm_xmm(dst, src, src2)) } +emit_vfmaddsub231ps_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append_elem(instructions, inst_vfmaddsub231ps_xmm_xmm_m128(dst, src, src2)) } +emit_vfmaddsub231ps_ymm_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM) { append_elem(instructions, inst_vfmaddsub231ps_ymm_ymm_ymm(dst, src, src2)) } +emit_vfmaddsub231ps_ymm_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256) { append_elem(instructions, inst_vfmaddsub231ps_ymm_ymm_m256(dst, src, src2)) } inst_vfmaddsub132pd_xmm_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VFMADDSUB132PD, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_xmm(src2), {}} }, 1631) } inst_vfmaddsub132pd_xmm_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .VFMADDSUB132PD, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_mem(src2.mem, 16), {}} }, 1631) } inst_vfmaddsub132pd_ymm_ymm_ymm :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: YMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VFMADDSUB132PD, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_ymm(src2), {}} }, 1632) } inst_vfmaddsub132pd_ymm_ymm_m256 :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: Mem256) -> Instruction { return with_hint(Instruction{ mnemonic = .VFMADDSUB132PD, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_mem(src2.mem, 32), {}} }, 1632) } -emit_vfmaddsub132pd_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append(instructions, inst_vfmaddsub132pd_xmm_xmm_xmm(dst, src, src2)) } -emit_vfmaddsub132pd_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append(instructions, inst_vfmaddsub132pd_xmm_xmm_m128(dst, src, src2)) } -emit_vfmaddsub132pd_ymm_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM) { append(instructions, inst_vfmaddsub132pd_ymm_ymm_ymm(dst, src, src2)) } -emit_vfmaddsub132pd_ymm_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256) { append(instructions, inst_vfmaddsub132pd_ymm_ymm_m256(dst, src, src2)) } +emit_vfmaddsub132pd_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append_elem(instructions, inst_vfmaddsub132pd_xmm_xmm_xmm(dst, src, src2)) } +emit_vfmaddsub132pd_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append_elem(instructions, inst_vfmaddsub132pd_xmm_xmm_m128(dst, src, src2)) } +emit_vfmaddsub132pd_ymm_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM) { append_elem(instructions, inst_vfmaddsub132pd_ymm_ymm_ymm(dst, src, src2)) } +emit_vfmaddsub132pd_ymm_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256) { append_elem(instructions, inst_vfmaddsub132pd_ymm_ymm_m256(dst, src, src2)) } inst_vfmaddsub213pd_xmm_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VFMADDSUB213PD, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_xmm(src2), {}} }, 1633) } inst_vfmaddsub213pd_xmm_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .VFMADDSUB213PD, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_mem(src2.mem, 16), {}} }, 1633) } inst_vfmaddsub213pd_ymm_ymm_ymm :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: YMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VFMADDSUB213PD, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_ymm(src2), {}} }, 1634) } inst_vfmaddsub213pd_ymm_ymm_m256 :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: Mem256) -> Instruction { return with_hint(Instruction{ mnemonic = .VFMADDSUB213PD, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_mem(src2.mem, 32), {}} }, 1634) } -emit_vfmaddsub213pd_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append(instructions, inst_vfmaddsub213pd_xmm_xmm_xmm(dst, src, src2)) } -emit_vfmaddsub213pd_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append(instructions, inst_vfmaddsub213pd_xmm_xmm_m128(dst, src, src2)) } -emit_vfmaddsub213pd_ymm_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM) { append(instructions, inst_vfmaddsub213pd_ymm_ymm_ymm(dst, src, src2)) } -emit_vfmaddsub213pd_ymm_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256) { append(instructions, inst_vfmaddsub213pd_ymm_ymm_m256(dst, src, src2)) } +emit_vfmaddsub213pd_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append_elem(instructions, inst_vfmaddsub213pd_xmm_xmm_xmm(dst, src, src2)) } +emit_vfmaddsub213pd_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append_elem(instructions, inst_vfmaddsub213pd_xmm_xmm_m128(dst, src, src2)) } +emit_vfmaddsub213pd_ymm_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM) { append_elem(instructions, inst_vfmaddsub213pd_ymm_ymm_ymm(dst, src, src2)) } +emit_vfmaddsub213pd_ymm_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256) { append_elem(instructions, inst_vfmaddsub213pd_ymm_ymm_m256(dst, src, src2)) } inst_vfmaddsub231pd_xmm_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VFMADDSUB231PD, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_xmm(src2), {}} }, 1635) } inst_vfmaddsub231pd_xmm_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .VFMADDSUB231PD, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_mem(src2.mem, 16), {}} }, 1635) } inst_vfmaddsub231pd_ymm_ymm_ymm :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: YMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VFMADDSUB231PD, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_ymm(src2), {}} }, 1636) } inst_vfmaddsub231pd_ymm_ymm_m256 :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: Mem256) -> Instruction { return with_hint(Instruction{ mnemonic = .VFMADDSUB231PD, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_mem(src2.mem, 32), {}} }, 1636) } -emit_vfmaddsub231pd_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append(instructions, inst_vfmaddsub231pd_xmm_xmm_xmm(dst, src, src2)) } -emit_vfmaddsub231pd_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append(instructions, inst_vfmaddsub231pd_xmm_xmm_m128(dst, src, src2)) } -emit_vfmaddsub231pd_ymm_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM) { append(instructions, inst_vfmaddsub231pd_ymm_ymm_ymm(dst, src, src2)) } -emit_vfmaddsub231pd_ymm_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256) { append(instructions, inst_vfmaddsub231pd_ymm_ymm_m256(dst, src, src2)) } +emit_vfmaddsub231pd_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append_elem(instructions, inst_vfmaddsub231pd_xmm_xmm_xmm(dst, src, src2)) } +emit_vfmaddsub231pd_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append_elem(instructions, inst_vfmaddsub231pd_xmm_xmm_m128(dst, src, src2)) } +emit_vfmaddsub231pd_ymm_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM) { append_elem(instructions, inst_vfmaddsub231pd_ymm_ymm_ymm(dst, src, src2)) } +emit_vfmaddsub231pd_ymm_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256) { append_elem(instructions, inst_vfmaddsub231pd_ymm_ymm_m256(dst, src, src2)) } inst_vfmsubadd132ps_xmm_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VFMSUBADD132PS, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_xmm(src2), {}} }, 1637) } inst_vfmsubadd132ps_xmm_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .VFMSUBADD132PS, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_mem(src2.mem, 16), {}} }, 1637) } inst_vfmsubadd132ps_ymm_ymm_ymm :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: YMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VFMSUBADD132PS, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_ymm(src2), {}} }, 1638) } inst_vfmsubadd132ps_ymm_ymm_m256 :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: Mem256) -> Instruction { return with_hint(Instruction{ mnemonic = .VFMSUBADD132PS, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_mem(src2.mem, 32), {}} }, 1638) } -emit_vfmsubadd132ps_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append(instructions, inst_vfmsubadd132ps_xmm_xmm_xmm(dst, src, src2)) } -emit_vfmsubadd132ps_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append(instructions, inst_vfmsubadd132ps_xmm_xmm_m128(dst, src, src2)) } -emit_vfmsubadd132ps_ymm_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM) { append(instructions, inst_vfmsubadd132ps_ymm_ymm_ymm(dst, src, src2)) } -emit_vfmsubadd132ps_ymm_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256) { append(instructions, inst_vfmsubadd132ps_ymm_ymm_m256(dst, src, src2)) } +emit_vfmsubadd132ps_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append_elem(instructions, inst_vfmsubadd132ps_xmm_xmm_xmm(dst, src, src2)) } +emit_vfmsubadd132ps_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append_elem(instructions, inst_vfmsubadd132ps_xmm_xmm_m128(dst, src, src2)) } +emit_vfmsubadd132ps_ymm_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM) { append_elem(instructions, inst_vfmsubadd132ps_ymm_ymm_ymm(dst, src, src2)) } +emit_vfmsubadd132ps_ymm_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256) { append_elem(instructions, inst_vfmsubadd132ps_ymm_ymm_m256(dst, src, src2)) } inst_vfmsubadd213ps_xmm_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VFMSUBADD213PS, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_xmm(src2), {}} }, 1639) } inst_vfmsubadd213ps_xmm_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .VFMSUBADD213PS, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_mem(src2.mem, 16), {}} }, 1639) } inst_vfmsubadd213ps_ymm_ymm_ymm :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: YMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VFMSUBADD213PS, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_ymm(src2), {}} }, 1640) } inst_vfmsubadd213ps_ymm_ymm_m256 :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: Mem256) -> Instruction { return with_hint(Instruction{ mnemonic = .VFMSUBADD213PS, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_mem(src2.mem, 32), {}} }, 1640) } -emit_vfmsubadd213ps_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append(instructions, inst_vfmsubadd213ps_xmm_xmm_xmm(dst, src, src2)) } -emit_vfmsubadd213ps_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append(instructions, inst_vfmsubadd213ps_xmm_xmm_m128(dst, src, src2)) } -emit_vfmsubadd213ps_ymm_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM) { append(instructions, inst_vfmsubadd213ps_ymm_ymm_ymm(dst, src, src2)) } -emit_vfmsubadd213ps_ymm_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256) { append(instructions, inst_vfmsubadd213ps_ymm_ymm_m256(dst, src, src2)) } +emit_vfmsubadd213ps_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append_elem(instructions, inst_vfmsubadd213ps_xmm_xmm_xmm(dst, src, src2)) } +emit_vfmsubadd213ps_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append_elem(instructions, inst_vfmsubadd213ps_xmm_xmm_m128(dst, src, src2)) } +emit_vfmsubadd213ps_ymm_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM) { append_elem(instructions, inst_vfmsubadd213ps_ymm_ymm_ymm(dst, src, src2)) } +emit_vfmsubadd213ps_ymm_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256) { append_elem(instructions, inst_vfmsubadd213ps_ymm_ymm_m256(dst, src, src2)) } inst_vfmsubadd231ps_xmm_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VFMSUBADD231PS, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_xmm(src2), {}} }, 1641) } inst_vfmsubadd231ps_xmm_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .VFMSUBADD231PS, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_mem(src2.mem, 16), {}} }, 1641) } inst_vfmsubadd231ps_ymm_ymm_ymm :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: YMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VFMSUBADD231PS, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_ymm(src2), {}} }, 1642) } inst_vfmsubadd231ps_ymm_ymm_m256 :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: Mem256) -> Instruction { return with_hint(Instruction{ mnemonic = .VFMSUBADD231PS, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_mem(src2.mem, 32), {}} }, 1642) } -emit_vfmsubadd231ps_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append(instructions, inst_vfmsubadd231ps_xmm_xmm_xmm(dst, src, src2)) } -emit_vfmsubadd231ps_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append(instructions, inst_vfmsubadd231ps_xmm_xmm_m128(dst, src, src2)) } -emit_vfmsubadd231ps_ymm_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM) { append(instructions, inst_vfmsubadd231ps_ymm_ymm_ymm(dst, src, src2)) } -emit_vfmsubadd231ps_ymm_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256) { append(instructions, inst_vfmsubadd231ps_ymm_ymm_m256(dst, src, src2)) } +emit_vfmsubadd231ps_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append_elem(instructions, inst_vfmsubadd231ps_xmm_xmm_xmm(dst, src, src2)) } +emit_vfmsubadd231ps_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append_elem(instructions, inst_vfmsubadd231ps_xmm_xmm_m128(dst, src, src2)) } +emit_vfmsubadd231ps_ymm_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM) { append_elem(instructions, inst_vfmsubadd231ps_ymm_ymm_ymm(dst, src, src2)) } +emit_vfmsubadd231ps_ymm_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256) { append_elem(instructions, inst_vfmsubadd231ps_ymm_ymm_m256(dst, src, src2)) } inst_vfmsubadd132pd_xmm_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VFMSUBADD132PD, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_xmm(src2), {}} }, 1643) } inst_vfmsubadd132pd_xmm_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .VFMSUBADD132PD, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_mem(src2.mem, 16), {}} }, 1643) } inst_vfmsubadd132pd_ymm_ymm_ymm :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: YMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VFMSUBADD132PD, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_ymm(src2), {}} }, 1644) } inst_vfmsubadd132pd_ymm_ymm_m256 :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: Mem256) -> Instruction { return with_hint(Instruction{ mnemonic = .VFMSUBADD132PD, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_mem(src2.mem, 32), {}} }, 1644) } -emit_vfmsubadd132pd_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append(instructions, inst_vfmsubadd132pd_xmm_xmm_xmm(dst, src, src2)) } -emit_vfmsubadd132pd_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append(instructions, inst_vfmsubadd132pd_xmm_xmm_m128(dst, src, src2)) } -emit_vfmsubadd132pd_ymm_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM) { append(instructions, inst_vfmsubadd132pd_ymm_ymm_ymm(dst, src, src2)) } -emit_vfmsubadd132pd_ymm_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256) { append(instructions, inst_vfmsubadd132pd_ymm_ymm_m256(dst, src, src2)) } +emit_vfmsubadd132pd_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append_elem(instructions, inst_vfmsubadd132pd_xmm_xmm_xmm(dst, src, src2)) } +emit_vfmsubadd132pd_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append_elem(instructions, inst_vfmsubadd132pd_xmm_xmm_m128(dst, src, src2)) } +emit_vfmsubadd132pd_ymm_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM) { append_elem(instructions, inst_vfmsubadd132pd_ymm_ymm_ymm(dst, src, src2)) } +emit_vfmsubadd132pd_ymm_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256) { append_elem(instructions, inst_vfmsubadd132pd_ymm_ymm_m256(dst, src, src2)) } inst_vfmsubadd213pd_xmm_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VFMSUBADD213PD, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_xmm(src2), {}} }, 1645) } inst_vfmsubadd213pd_xmm_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .VFMSUBADD213PD, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_mem(src2.mem, 16), {}} }, 1645) } inst_vfmsubadd213pd_ymm_ymm_ymm :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: YMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VFMSUBADD213PD, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_ymm(src2), {}} }, 1646) } inst_vfmsubadd213pd_ymm_ymm_m256 :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: Mem256) -> Instruction { return with_hint(Instruction{ mnemonic = .VFMSUBADD213PD, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_mem(src2.mem, 32), {}} }, 1646) } -emit_vfmsubadd213pd_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append(instructions, inst_vfmsubadd213pd_xmm_xmm_xmm(dst, src, src2)) } -emit_vfmsubadd213pd_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append(instructions, inst_vfmsubadd213pd_xmm_xmm_m128(dst, src, src2)) } -emit_vfmsubadd213pd_ymm_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM) { append(instructions, inst_vfmsubadd213pd_ymm_ymm_ymm(dst, src, src2)) } -emit_vfmsubadd213pd_ymm_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256) { append(instructions, inst_vfmsubadd213pd_ymm_ymm_m256(dst, src, src2)) } +emit_vfmsubadd213pd_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append_elem(instructions, inst_vfmsubadd213pd_xmm_xmm_xmm(dst, src, src2)) } +emit_vfmsubadd213pd_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append_elem(instructions, inst_vfmsubadd213pd_xmm_xmm_m128(dst, src, src2)) } +emit_vfmsubadd213pd_ymm_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM) { append_elem(instructions, inst_vfmsubadd213pd_ymm_ymm_ymm(dst, src, src2)) } +emit_vfmsubadd213pd_ymm_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256) { append_elem(instructions, inst_vfmsubadd213pd_ymm_ymm_m256(dst, src, src2)) } inst_vfmsubadd231pd_xmm_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VFMSUBADD231PD, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_xmm(src2), {}} }, 1647) } inst_vfmsubadd231pd_xmm_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .VFMSUBADD231PD, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_mem(src2.mem, 16), {}} }, 1647) } inst_vfmsubadd231pd_ymm_ymm_ymm :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: YMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VFMSUBADD231PD, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_ymm(src2), {}} }, 1648) } inst_vfmsubadd231pd_ymm_ymm_m256 :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: Mem256) -> Instruction { return with_hint(Instruction{ mnemonic = .VFMSUBADD231PD, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_mem(src2.mem, 32), {}} }, 1648) } -emit_vfmsubadd231pd_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append(instructions, inst_vfmsubadd231pd_xmm_xmm_xmm(dst, src, src2)) } -emit_vfmsubadd231pd_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append(instructions, inst_vfmsubadd231pd_xmm_xmm_m128(dst, src, src2)) } -emit_vfmsubadd231pd_ymm_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM) { append(instructions, inst_vfmsubadd231pd_ymm_ymm_ymm(dst, src, src2)) } -emit_vfmsubadd231pd_ymm_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256) { append(instructions, inst_vfmsubadd231pd_ymm_ymm_m256(dst, src, src2)) } +emit_vfmsubadd231pd_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append_elem(instructions, inst_vfmsubadd231pd_xmm_xmm_xmm(dst, src, src2)) } +emit_vfmsubadd231pd_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append_elem(instructions, inst_vfmsubadd231pd_xmm_xmm_m128(dst, src, src2)) } +emit_vfmsubadd231pd_ymm_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM) { append_elem(instructions, inst_vfmsubadd231pd_ymm_ymm_ymm(dst, src, src2)) } +emit_vfmsubadd231pd_ymm_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256) { append_elem(instructions, inst_vfmsubadd231pd_ymm_ymm_m256(dst, src, src2)) } inst_vcvtph2ps_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VCVTPH2PS, operand_count = 2, ops = {op_xmm(dst), op_xmm(src), {}, {}} }, 1649) } inst_vcvtph2ps_xmm_m64 :: #force_inline proc "contextless" (dst: XMM, src: Mem64) -> Instruction { return with_hint(Instruction{ mnemonic = .VCVTPH2PS, operand_count = 2, ops = {op_xmm(dst), op_mem(src.mem, 8), {}, {}} }, 1649) } inst_vcvtph2ps_ymm_xmm :: #force_inline proc "contextless" (dst: YMM, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VCVTPH2PS, operand_count = 2, ops = {op_ymm(dst), op_xmm(src), {}, {}} }, 1650) } inst_vcvtph2ps_ymm_m128 :: #force_inline proc "contextless" (dst: YMM, src: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .VCVTPH2PS, operand_count = 2, ops = {op_ymm(dst), op_mem(src.mem, 16), {}, {}} }, 1650) } inst_vcvtph2ps_zmm_ymm :: #force_inline proc "contextless" (dst: ZMM, src: YMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VCVTPH2PS, operand_count = 2, ops = {op_zmm(dst), op_ymm(src), {}, {}} }, 1651) } inst_vcvtph2ps_zmm_m256 :: #force_inline proc "contextless" (dst: ZMM, src: Mem256) -> Instruction { return with_hint(Instruction{ mnemonic = .VCVTPH2PS, operand_count = 2, ops = {op_zmm(dst), op_mem(src.mem, 32), {}, {}} }, 1651) } -emit_vcvtph2ps_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append(instructions, inst_vcvtph2ps_xmm_xmm(dst, src)) } -emit_vcvtph2ps_xmm_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem64) { append(instructions, inst_vcvtph2ps_xmm_m64(dst, src)) } -emit_vcvtph2ps_ymm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: XMM) { append(instructions, inst_vcvtph2ps_ymm_xmm(dst, src)) } -emit_vcvtph2ps_ymm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: Mem128) { append(instructions, inst_vcvtph2ps_ymm_m128(dst, src)) } -emit_vcvtph2ps_zmm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ZMM, src: YMM) { append(instructions, inst_vcvtph2ps_zmm_ymm(dst, src)) } -emit_vcvtph2ps_zmm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ZMM, src: Mem256) { append(instructions, inst_vcvtph2ps_zmm_m256(dst, src)) } +emit_vcvtph2ps_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append_elem(instructions, inst_vcvtph2ps_xmm_xmm(dst, src)) } +emit_vcvtph2ps_xmm_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem64) { append_elem(instructions, inst_vcvtph2ps_xmm_m64(dst, src)) } +emit_vcvtph2ps_ymm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: XMM) { append_elem(instructions, inst_vcvtph2ps_ymm_xmm(dst, src)) } +emit_vcvtph2ps_ymm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: Mem128) { append_elem(instructions, inst_vcvtph2ps_ymm_m128(dst, src)) } +emit_vcvtph2ps_zmm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ZMM, src: YMM) { append_elem(instructions, inst_vcvtph2ps_zmm_ymm(dst, src)) } +emit_vcvtph2ps_zmm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ZMM, src: Mem256) { append_elem(instructions, inst_vcvtph2ps_zmm_m256(dst, src)) } inst_vcvtps2ph_xmm_xmm_imm8 :: #force_inline proc "contextless" (dst: XMM, src: XMM, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .VCVTPS2PH, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_imm8(imm), {}} }, 1652) } inst_vcvtps2ph_m64_xmm_imm8 :: #force_inline proc "contextless" (dst: Mem64, src: XMM, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .VCVTPS2PH, operand_count = 3, ops = {op_mem(dst.mem, 8), op_xmm(src), op_imm8(imm), {}} }, 1652) } inst_vcvtps2ph_xmm_ymm_imm8 :: #force_inline proc "contextless" (dst: XMM, src: YMM, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .VCVTPS2PH, operand_count = 3, ops = {op_xmm(dst), op_ymm(src), op_imm8(imm), {}} }, 1653) } inst_vcvtps2ph_m128_ymm_imm8 :: #force_inline proc "contextless" (dst: Mem128, src: YMM, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .VCVTPS2PH, operand_count = 3, ops = {op_mem(dst.mem, 16), op_ymm(src), op_imm8(imm), {}} }, 1653) } inst_vcvtps2ph_ymm_zmm_imm8 :: #force_inline proc "contextless" (dst: YMM, src: ZMM, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .VCVTPS2PH, operand_count = 3, ops = {op_ymm(dst), op_zmm(src), op_imm8(imm), {}} }, 1654) } inst_vcvtps2ph_m256_zmm_imm8 :: #force_inline proc "contextless" (dst: Mem256, src: ZMM, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .VCVTPS2PH, operand_count = 3, ops = {op_mem(dst.mem, 32), op_zmm(src), op_imm8(imm), {}} }, 1654) } -emit_vcvtps2ph_xmm_xmm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, imm: i8) { append(instructions, inst_vcvtps2ph_xmm_xmm_imm8(dst, src, imm)) } -emit_vcvtps2ph_m64_xmm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem64, src: XMM, imm: i8) { append(instructions, inst_vcvtps2ph_m64_xmm_imm8(dst, src, imm)) } -emit_vcvtps2ph_xmm_ymm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: YMM, imm: i8) { append(instructions, inst_vcvtps2ph_xmm_ymm_imm8(dst, src, imm)) } -emit_vcvtps2ph_m128_ymm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem128, src: YMM, imm: i8) { append(instructions, inst_vcvtps2ph_m128_ymm_imm8(dst, src, imm)) } -emit_vcvtps2ph_ymm_zmm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: ZMM, imm: i8) { append(instructions, inst_vcvtps2ph_ymm_zmm_imm8(dst, src, imm)) } -emit_vcvtps2ph_m256_zmm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem256, src: ZMM, imm: i8) { append(instructions, inst_vcvtps2ph_m256_zmm_imm8(dst, src, imm)) } +emit_vcvtps2ph_xmm_xmm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, imm: i8) { append_elem(instructions, inst_vcvtps2ph_xmm_xmm_imm8(dst, src, imm)) } +emit_vcvtps2ph_m64_xmm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem64, src: XMM, imm: i8) { append_elem(instructions, inst_vcvtps2ph_m64_xmm_imm8(dst, src, imm)) } +emit_vcvtps2ph_xmm_ymm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: YMM, imm: i8) { append_elem(instructions, inst_vcvtps2ph_xmm_ymm_imm8(dst, src, imm)) } +emit_vcvtps2ph_m128_ymm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem128, src: YMM, imm: i8) { append_elem(instructions, inst_vcvtps2ph_m128_ymm_imm8(dst, src, imm)) } +emit_vcvtps2ph_ymm_zmm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: ZMM, imm: i8) { append_elem(instructions, inst_vcvtps2ph_ymm_zmm_imm8(dst, src, imm)) } +emit_vcvtps2ph_m256_zmm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem256, src: ZMM, imm: i8) { append_elem(instructions, inst_vcvtps2ph_m256_zmm_imm8(dst, src, imm)) } inst_vmovdqa32_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VMOVDQA32, operand_count = 2, ops = {op_xmm(dst), op_xmm(src), {}, {}} }, 1655) } inst_vmovdqa32_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .VMOVDQA32, operand_count = 2, ops = {op_xmm(dst), op_mem(src.mem, 16), {}, {}} }, 1655) } inst_vmovdqa32_m128_xmm :: #force_inline proc "contextless" (dst: Mem128, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VMOVDQA32, operand_count = 2, ops = {op_mem(dst.mem, 16), op_xmm(src), {}, {}} }, 1656) } @@ -5490,15 +5490,15 @@ inst_vmovdqa32_m256_ymm :: #force_inline proc "contextless" (dst: Me inst_vmovdqa32_zmm_zmm :: #force_inline proc "contextless" (dst: ZMM, src: ZMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VMOVDQA32, operand_count = 2, ops = {op_zmm(dst), op_zmm(src), {}, {}} }, 1659) } inst_vmovdqa32_zmm_m512 :: #force_inline proc "contextless" (dst: ZMM, src: Mem512) -> Instruction { return with_hint(Instruction{ mnemonic = .VMOVDQA32, operand_count = 2, ops = {op_zmm(dst), op_mem(src.mem, 64), {}, {}} }, 1659) } inst_vmovdqa32_m512_zmm :: #force_inline proc "contextless" (dst: Mem512, src: ZMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VMOVDQA32, operand_count = 2, ops = {op_mem(dst.mem, 64), op_zmm(src), {}, {}} }, 1660) } -emit_vmovdqa32_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append(instructions, inst_vmovdqa32_xmm_xmm(dst, src)) } -emit_vmovdqa32_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append(instructions, inst_vmovdqa32_xmm_m128(dst, src)) } -emit_vmovdqa32_m128_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem128, src: XMM) { append(instructions, inst_vmovdqa32_m128_xmm(dst, src)) } -emit_vmovdqa32_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM) { append(instructions, inst_vmovdqa32_ymm_ymm(dst, src)) } -emit_vmovdqa32_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: Mem256) { append(instructions, inst_vmovdqa32_ymm_m256(dst, src)) } -emit_vmovdqa32_m256_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem256, src: YMM) { append(instructions, inst_vmovdqa32_m256_ymm(dst, src)) } -emit_vmovdqa32_zmm_zmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ZMM, src: ZMM) { append(instructions, inst_vmovdqa32_zmm_zmm(dst, src)) } -emit_vmovdqa32_zmm_m512 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ZMM, src: Mem512) { append(instructions, inst_vmovdqa32_zmm_m512(dst, src)) } -emit_vmovdqa32_m512_zmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem512, src: ZMM) { append(instructions, inst_vmovdqa32_m512_zmm(dst, src)) } +emit_vmovdqa32_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append_elem(instructions, inst_vmovdqa32_xmm_xmm(dst, src)) } +emit_vmovdqa32_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append_elem(instructions, inst_vmovdqa32_xmm_m128(dst, src)) } +emit_vmovdqa32_m128_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem128, src: XMM) { append_elem(instructions, inst_vmovdqa32_m128_xmm(dst, src)) } +emit_vmovdqa32_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM) { append_elem(instructions, inst_vmovdqa32_ymm_ymm(dst, src)) } +emit_vmovdqa32_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: Mem256) { append_elem(instructions, inst_vmovdqa32_ymm_m256(dst, src)) } +emit_vmovdqa32_m256_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem256, src: YMM) { append_elem(instructions, inst_vmovdqa32_m256_ymm(dst, src)) } +emit_vmovdqa32_zmm_zmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ZMM, src: ZMM) { append_elem(instructions, inst_vmovdqa32_zmm_zmm(dst, src)) } +emit_vmovdqa32_zmm_m512 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ZMM, src: Mem512) { append_elem(instructions, inst_vmovdqa32_zmm_m512(dst, src)) } +emit_vmovdqa32_m512_zmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem512, src: ZMM) { append_elem(instructions, inst_vmovdqa32_m512_zmm(dst, src)) } inst_vmovdqa64_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VMOVDQA64, operand_count = 2, ops = {op_xmm(dst), op_xmm(src), {}, {}} }, 1661) } inst_vmovdqa64_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .VMOVDQA64, operand_count = 2, ops = {op_xmm(dst), op_mem(src.mem, 16), {}, {}} }, 1661) } inst_vmovdqa64_m128_xmm :: #force_inline proc "contextless" (dst: Mem128, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VMOVDQA64, operand_count = 2, ops = {op_mem(dst.mem, 16), op_xmm(src), {}, {}} }, 1662) } @@ -5508,15 +5508,15 @@ inst_vmovdqa64_m256_ymm :: #force_inline proc "contextless" (dst: Me inst_vmovdqa64_zmm_zmm :: #force_inline proc "contextless" (dst: ZMM, src: ZMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VMOVDQA64, operand_count = 2, ops = {op_zmm(dst), op_zmm(src), {}, {}} }, 1665) } inst_vmovdqa64_zmm_m512 :: #force_inline proc "contextless" (dst: ZMM, src: Mem512) -> Instruction { return with_hint(Instruction{ mnemonic = .VMOVDQA64, operand_count = 2, ops = {op_zmm(dst), op_mem(src.mem, 64), {}, {}} }, 1665) } inst_vmovdqa64_m512_zmm :: #force_inline proc "contextless" (dst: Mem512, src: ZMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VMOVDQA64, operand_count = 2, ops = {op_mem(dst.mem, 64), op_zmm(src), {}, {}} }, 1666) } -emit_vmovdqa64_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append(instructions, inst_vmovdqa64_xmm_xmm(dst, src)) } -emit_vmovdqa64_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append(instructions, inst_vmovdqa64_xmm_m128(dst, src)) } -emit_vmovdqa64_m128_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem128, src: XMM) { append(instructions, inst_vmovdqa64_m128_xmm(dst, src)) } -emit_vmovdqa64_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM) { append(instructions, inst_vmovdqa64_ymm_ymm(dst, src)) } -emit_vmovdqa64_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: Mem256) { append(instructions, inst_vmovdqa64_ymm_m256(dst, src)) } -emit_vmovdqa64_m256_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem256, src: YMM) { append(instructions, inst_vmovdqa64_m256_ymm(dst, src)) } -emit_vmovdqa64_zmm_zmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ZMM, src: ZMM) { append(instructions, inst_vmovdqa64_zmm_zmm(dst, src)) } -emit_vmovdqa64_zmm_m512 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ZMM, src: Mem512) { append(instructions, inst_vmovdqa64_zmm_m512(dst, src)) } -emit_vmovdqa64_m512_zmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem512, src: ZMM) { append(instructions, inst_vmovdqa64_m512_zmm(dst, src)) } +emit_vmovdqa64_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append_elem(instructions, inst_vmovdqa64_xmm_xmm(dst, src)) } +emit_vmovdqa64_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append_elem(instructions, inst_vmovdqa64_xmm_m128(dst, src)) } +emit_vmovdqa64_m128_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem128, src: XMM) { append_elem(instructions, inst_vmovdqa64_m128_xmm(dst, src)) } +emit_vmovdqa64_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM) { append_elem(instructions, inst_vmovdqa64_ymm_ymm(dst, src)) } +emit_vmovdqa64_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: Mem256) { append_elem(instructions, inst_vmovdqa64_ymm_m256(dst, src)) } +emit_vmovdqa64_m256_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem256, src: YMM) { append_elem(instructions, inst_vmovdqa64_m256_ymm(dst, src)) } +emit_vmovdqa64_zmm_zmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ZMM, src: ZMM) { append_elem(instructions, inst_vmovdqa64_zmm_zmm(dst, src)) } +emit_vmovdqa64_zmm_m512 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ZMM, src: Mem512) { append_elem(instructions, inst_vmovdqa64_zmm_m512(dst, src)) } +emit_vmovdqa64_m512_zmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem512, src: ZMM) { append_elem(instructions, inst_vmovdqa64_m512_zmm(dst, src)) } inst_vmovdqu8_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VMOVDQU8, operand_count = 2, ops = {op_xmm(dst), op_xmm(src), {}, {}} }, 1667) } inst_vmovdqu8_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .VMOVDQU8, operand_count = 2, ops = {op_xmm(dst), op_mem(src.mem, 16), {}, {}} }, 1667) } inst_vmovdqu8_m128_xmm :: #force_inline proc "contextless" (dst: Mem128, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VMOVDQU8, operand_count = 2, ops = {op_mem(dst.mem, 16), op_xmm(src), {}, {}} }, 1668) } @@ -5526,15 +5526,15 @@ inst_vmovdqu8_m256_ymm :: #force_inline proc "contextless" (dst: Me inst_vmovdqu8_zmm_zmm :: #force_inline proc "contextless" (dst: ZMM, src: ZMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VMOVDQU8, operand_count = 2, ops = {op_zmm(dst), op_zmm(src), {}, {}} }, 1671) } inst_vmovdqu8_zmm_m512 :: #force_inline proc "contextless" (dst: ZMM, src: Mem512) -> Instruction { return with_hint(Instruction{ mnemonic = .VMOVDQU8, operand_count = 2, ops = {op_zmm(dst), op_mem(src.mem, 64), {}, {}} }, 1671) } inst_vmovdqu8_m512_zmm :: #force_inline proc "contextless" (dst: Mem512, src: ZMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VMOVDQU8, operand_count = 2, ops = {op_mem(dst.mem, 64), op_zmm(src), {}, {}} }, 1672) } -emit_vmovdqu8_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append(instructions, inst_vmovdqu8_xmm_xmm(dst, src)) } -emit_vmovdqu8_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append(instructions, inst_vmovdqu8_xmm_m128(dst, src)) } -emit_vmovdqu8_m128_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem128, src: XMM) { append(instructions, inst_vmovdqu8_m128_xmm(dst, src)) } -emit_vmovdqu8_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM) { append(instructions, inst_vmovdqu8_ymm_ymm(dst, src)) } -emit_vmovdqu8_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: Mem256) { append(instructions, inst_vmovdqu8_ymm_m256(dst, src)) } -emit_vmovdqu8_m256_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem256, src: YMM) { append(instructions, inst_vmovdqu8_m256_ymm(dst, src)) } -emit_vmovdqu8_zmm_zmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ZMM, src: ZMM) { append(instructions, inst_vmovdqu8_zmm_zmm(dst, src)) } -emit_vmovdqu8_zmm_m512 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ZMM, src: Mem512) { append(instructions, inst_vmovdqu8_zmm_m512(dst, src)) } -emit_vmovdqu8_m512_zmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem512, src: ZMM) { append(instructions, inst_vmovdqu8_m512_zmm(dst, src)) } +emit_vmovdqu8_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append_elem(instructions, inst_vmovdqu8_xmm_xmm(dst, src)) } +emit_vmovdqu8_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append_elem(instructions, inst_vmovdqu8_xmm_m128(dst, src)) } +emit_vmovdqu8_m128_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem128, src: XMM) { append_elem(instructions, inst_vmovdqu8_m128_xmm(dst, src)) } +emit_vmovdqu8_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM) { append_elem(instructions, inst_vmovdqu8_ymm_ymm(dst, src)) } +emit_vmovdqu8_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: Mem256) { append_elem(instructions, inst_vmovdqu8_ymm_m256(dst, src)) } +emit_vmovdqu8_m256_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem256, src: YMM) { append_elem(instructions, inst_vmovdqu8_m256_ymm(dst, src)) } +emit_vmovdqu8_zmm_zmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ZMM, src: ZMM) { append_elem(instructions, inst_vmovdqu8_zmm_zmm(dst, src)) } +emit_vmovdqu8_zmm_m512 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ZMM, src: Mem512) { append_elem(instructions, inst_vmovdqu8_zmm_m512(dst, src)) } +emit_vmovdqu8_m512_zmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem512, src: ZMM) { append_elem(instructions, inst_vmovdqu8_m512_zmm(dst, src)) } inst_vmovdqu16_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VMOVDQU16, operand_count = 2, ops = {op_xmm(dst), op_xmm(src), {}, {}} }, 1673) } inst_vmovdqu16_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .VMOVDQU16, operand_count = 2, ops = {op_xmm(dst), op_mem(src.mem, 16), {}, {}} }, 1673) } inst_vmovdqu16_m128_xmm :: #force_inline proc "contextless" (dst: Mem128, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VMOVDQU16, operand_count = 2, ops = {op_mem(dst.mem, 16), op_xmm(src), {}, {}} }, 1674) } @@ -5544,15 +5544,15 @@ inst_vmovdqu16_m256_ymm :: #force_inline proc "contextless" (dst: Me inst_vmovdqu16_zmm_zmm :: #force_inline proc "contextless" (dst: ZMM, src: ZMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VMOVDQU16, operand_count = 2, ops = {op_zmm(dst), op_zmm(src), {}, {}} }, 1677) } inst_vmovdqu16_zmm_m512 :: #force_inline proc "contextless" (dst: ZMM, src: Mem512) -> Instruction { return with_hint(Instruction{ mnemonic = .VMOVDQU16, operand_count = 2, ops = {op_zmm(dst), op_mem(src.mem, 64), {}, {}} }, 1677) } inst_vmovdqu16_m512_zmm :: #force_inline proc "contextless" (dst: Mem512, src: ZMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VMOVDQU16, operand_count = 2, ops = {op_mem(dst.mem, 64), op_zmm(src), {}, {}} }, 1678) } -emit_vmovdqu16_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append(instructions, inst_vmovdqu16_xmm_xmm(dst, src)) } -emit_vmovdqu16_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append(instructions, inst_vmovdqu16_xmm_m128(dst, src)) } -emit_vmovdqu16_m128_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem128, src: XMM) { append(instructions, inst_vmovdqu16_m128_xmm(dst, src)) } -emit_vmovdqu16_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM) { append(instructions, inst_vmovdqu16_ymm_ymm(dst, src)) } -emit_vmovdqu16_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: Mem256) { append(instructions, inst_vmovdqu16_ymm_m256(dst, src)) } -emit_vmovdqu16_m256_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem256, src: YMM) { append(instructions, inst_vmovdqu16_m256_ymm(dst, src)) } -emit_vmovdqu16_zmm_zmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ZMM, src: ZMM) { append(instructions, inst_vmovdqu16_zmm_zmm(dst, src)) } -emit_vmovdqu16_zmm_m512 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ZMM, src: Mem512) { append(instructions, inst_vmovdqu16_zmm_m512(dst, src)) } -emit_vmovdqu16_m512_zmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem512, src: ZMM) { append(instructions, inst_vmovdqu16_m512_zmm(dst, src)) } +emit_vmovdqu16_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append_elem(instructions, inst_vmovdqu16_xmm_xmm(dst, src)) } +emit_vmovdqu16_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append_elem(instructions, inst_vmovdqu16_xmm_m128(dst, src)) } +emit_vmovdqu16_m128_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem128, src: XMM) { append_elem(instructions, inst_vmovdqu16_m128_xmm(dst, src)) } +emit_vmovdqu16_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM) { append_elem(instructions, inst_vmovdqu16_ymm_ymm(dst, src)) } +emit_vmovdqu16_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: Mem256) { append_elem(instructions, inst_vmovdqu16_ymm_m256(dst, src)) } +emit_vmovdqu16_m256_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem256, src: YMM) { append_elem(instructions, inst_vmovdqu16_m256_ymm(dst, src)) } +emit_vmovdqu16_zmm_zmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ZMM, src: ZMM) { append_elem(instructions, inst_vmovdqu16_zmm_zmm(dst, src)) } +emit_vmovdqu16_zmm_m512 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ZMM, src: Mem512) { append_elem(instructions, inst_vmovdqu16_zmm_m512(dst, src)) } +emit_vmovdqu16_m512_zmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem512, src: ZMM) { append_elem(instructions, inst_vmovdqu16_m512_zmm(dst, src)) } inst_vmovdqu32_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VMOVDQU32, operand_count = 2, ops = {op_xmm(dst), op_xmm(src), {}, {}} }, 1679) } inst_vmovdqu32_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .VMOVDQU32, operand_count = 2, ops = {op_xmm(dst), op_mem(src.mem, 16), {}, {}} }, 1679) } inst_vmovdqu32_m128_xmm :: #force_inline proc "contextless" (dst: Mem128, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VMOVDQU32, operand_count = 2, ops = {op_mem(dst.mem, 16), op_xmm(src), {}, {}} }, 1680) } @@ -5562,15 +5562,15 @@ inst_vmovdqu32_m256_ymm :: #force_inline proc "contextless" (dst: Me inst_vmovdqu32_zmm_zmm :: #force_inline proc "contextless" (dst: ZMM, src: ZMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VMOVDQU32, operand_count = 2, ops = {op_zmm(dst), op_zmm(src), {}, {}} }, 1683) } inst_vmovdqu32_zmm_m512 :: #force_inline proc "contextless" (dst: ZMM, src: Mem512) -> Instruction { return with_hint(Instruction{ mnemonic = .VMOVDQU32, operand_count = 2, ops = {op_zmm(dst), op_mem(src.mem, 64), {}, {}} }, 1683) } inst_vmovdqu32_m512_zmm :: #force_inline proc "contextless" (dst: Mem512, src: ZMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VMOVDQU32, operand_count = 2, ops = {op_mem(dst.mem, 64), op_zmm(src), {}, {}} }, 1684) } -emit_vmovdqu32_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append(instructions, inst_vmovdqu32_xmm_xmm(dst, src)) } -emit_vmovdqu32_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append(instructions, inst_vmovdqu32_xmm_m128(dst, src)) } -emit_vmovdqu32_m128_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem128, src: XMM) { append(instructions, inst_vmovdqu32_m128_xmm(dst, src)) } -emit_vmovdqu32_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM) { append(instructions, inst_vmovdqu32_ymm_ymm(dst, src)) } -emit_vmovdqu32_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: Mem256) { append(instructions, inst_vmovdqu32_ymm_m256(dst, src)) } -emit_vmovdqu32_m256_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem256, src: YMM) { append(instructions, inst_vmovdqu32_m256_ymm(dst, src)) } -emit_vmovdqu32_zmm_zmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ZMM, src: ZMM) { append(instructions, inst_vmovdqu32_zmm_zmm(dst, src)) } -emit_vmovdqu32_zmm_m512 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ZMM, src: Mem512) { append(instructions, inst_vmovdqu32_zmm_m512(dst, src)) } -emit_vmovdqu32_m512_zmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem512, src: ZMM) { append(instructions, inst_vmovdqu32_m512_zmm(dst, src)) } +emit_vmovdqu32_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append_elem(instructions, inst_vmovdqu32_xmm_xmm(dst, src)) } +emit_vmovdqu32_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append_elem(instructions, inst_vmovdqu32_xmm_m128(dst, src)) } +emit_vmovdqu32_m128_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem128, src: XMM) { append_elem(instructions, inst_vmovdqu32_m128_xmm(dst, src)) } +emit_vmovdqu32_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM) { append_elem(instructions, inst_vmovdqu32_ymm_ymm(dst, src)) } +emit_vmovdqu32_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: Mem256) { append_elem(instructions, inst_vmovdqu32_ymm_m256(dst, src)) } +emit_vmovdqu32_m256_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem256, src: YMM) { append_elem(instructions, inst_vmovdqu32_m256_ymm(dst, src)) } +emit_vmovdqu32_zmm_zmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ZMM, src: ZMM) { append_elem(instructions, inst_vmovdqu32_zmm_zmm(dst, src)) } +emit_vmovdqu32_zmm_m512 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ZMM, src: Mem512) { append_elem(instructions, inst_vmovdqu32_zmm_m512(dst, src)) } +emit_vmovdqu32_m512_zmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem512, src: ZMM) { append_elem(instructions, inst_vmovdqu32_m512_zmm(dst, src)) } inst_vmovdqu64_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VMOVDQU64, operand_count = 2, ops = {op_xmm(dst), op_xmm(src), {}, {}} }, 1685) } inst_vmovdqu64_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .VMOVDQU64, operand_count = 2, ops = {op_xmm(dst), op_mem(src.mem, 16), {}, {}} }, 1685) } inst_vmovdqu64_m128_xmm :: #force_inline proc "contextless" (dst: Mem128, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VMOVDQU64, operand_count = 2, ops = {op_mem(dst.mem, 16), op_xmm(src), {}, {}} }, 1686) } @@ -5580,2087 +5580,2087 @@ inst_vmovdqu64_m256_ymm :: #force_inline proc "contextless" (dst: Me inst_vmovdqu64_zmm_zmm :: #force_inline proc "contextless" (dst: ZMM, src: ZMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VMOVDQU64, operand_count = 2, ops = {op_zmm(dst), op_zmm(src), {}, {}} }, 1689) } inst_vmovdqu64_zmm_m512 :: #force_inline proc "contextless" (dst: ZMM, src: Mem512) -> Instruction { return with_hint(Instruction{ mnemonic = .VMOVDQU64, operand_count = 2, ops = {op_zmm(dst), op_mem(src.mem, 64), {}, {}} }, 1689) } inst_vmovdqu64_m512_zmm :: #force_inline proc "contextless" (dst: Mem512, src: ZMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VMOVDQU64, operand_count = 2, ops = {op_mem(dst.mem, 64), op_zmm(src), {}, {}} }, 1690) } -emit_vmovdqu64_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append(instructions, inst_vmovdqu64_xmm_xmm(dst, src)) } -emit_vmovdqu64_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append(instructions, inst_vmovdqu64_xmm_m128(dst, src)) } -emit_vmovdqu64_m128_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem128, src: XMM) { append(instructions, inst_vmovdqu64_m128_xmm(dst, src)) } -emit_vmovdqu64_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM) { append(instructions, inst_vmovdqu64_ymm_ymm(dst, src)) } -emit_vmovdqu64_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: Mem256) { append(instructions, inst_vmovdqu64_ymm_m256(dst, src)) } -emit_vmovdqu64_m256_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem256, src: YMM) { append(instructions, inst_vmovdqu64_m256_ymm(dst, src)) } -emit_vmovdqu64_zmm_zmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ZMM, src: ZMM) { append(instructions, inst_vmovdqu64_zmm_zmm(dst, src)) } -emit_vmovdqu64_zmm_m512 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ZMM, src: Mem512) { append(instructions, inst_vmovdqu64_zmm_m512(dst, src)) } -emit_vmovdqu64_m512_zmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem512, src: ZMM) { append(instructions, inst_vmovdqu64_m512_zmm(dst, src)) } +emit_vmovdqu64_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append_elem(instructions, inst_vmovdqu64_xmm_xmm(dst, src)) } +emit_vmovdqu64_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append_elem(instructions, inst_vmovdqu64_xmm_m128(dst, src)) } +emit_vmovdqu64_m128_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem128, src: XMM) { append_elem(instructions, inst_vmovdqu64_m128_xmm(dst, src)) } +emit_vmovdqu64_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM) { append_elem(instructions, inst_vmovdqu64_ymm_ymm(dst, src)) } +emit_vmovdqu64_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: Mem256) { append_elem(instructions, inst_vmovdqu64_ymm_m256(dst, src)) } +emit_vmovdqu64_m256_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem256, src: YMM) { append_elem(instructions, inst_vmovdqu64_m256_ymm(dst, src)) } +emit_vmovdqu64_zmm_zmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ZMM, src: ZMM) { append_elem(instructions, inst_vmovdqu64_zmm_zmm(dst, src)) } +emit_vmovdqu64_zmm_m512 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ZMM, src: Mem512) { append_elem(instructions, inst_vmovdqu64_zmm_m512(dst, src)) } +emit_vmovdqu64_m512_zmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem512, src: ZMM) { append_elem(instructions, inst_vmovdqu64_m512_zmm(dst, src)) } inst_vpblendmb_xmm_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPBLENDMB, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_xmm(src2), {}} }, 1691) } inst_vpblendmb_xmm_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .VPBLENDMB, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_mem(src2.mem, 16), {}} }, 1691) } inst_vpblendmb_ymm_ymm_ymm :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: YMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPBLENDMB, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_ymm(src2), {}} }, 1692) } inst_vpblendmb_ymm_ymm_m256 :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: Mem256) -> Instruction { return with_hint(Instruction{ mnemonic = .VPBLENDMB, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_mem(src2.mem, 32), {}} }, 1692) } inst_vpblendmb_zmm_zmm_zmm :: #force_inline proc "contextless" (dst: ZMM, src: ZMM, src2: ZMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPBLENDMB, operand_count = 3, ops = {op_zmm(dst), op_zmm(src), op_zmm(src2), {}} }, 1693) } inst_vpblendmb_zmm_zmm_m512 :: #force_inline proc "contextless" (dst: ZMM, src: ZMM, src2: Mem512) -> Instruction { return with_hint(Instruction{ mnemonic = .VPBLENDMB, operand_count = 3, ops = {op_zmm(dst), op_zmm(src), op_mem(src2.mem, 64), {}} }, 1693) } -emit_vpblendmb_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append(instructions, inst_vpblendmb_xmm_xmm_xmm(dst, src, src2)) } -emit_vpblendmb_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append(instructions, inst_vpblendmb_xmm_xmm_m128(dst, src, src2)) } -emit_vpblendmb_ymm_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM) { append(instructions, inst_vpblendmb_ymm_ymm_ymm(dst, src, src2)) } -emit_vpblendmb_ymm_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256) { append(instructions, inst_vpblendmb_ymm_ymm_m256(dst, src, src2)) } -emit_vpblendmb_zmm_zmm_zmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ZMM, src: ZMM, src2: ZMM) { append(instructions, inst_vpblendmb_zmm_zmm_zmm(dst, src, src2)) } -emit_vpblendmb_zmm_zmm_m512 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ZMM, src: ZMM, src2: Mem512) { append(instructions, inst_vpblendmb_zmm_zmm_m512(dst, src, src2)) } +emit_vpblendmb_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append_elem(instructions, inst_vpblendmb_xmm_xmm_xmm(dst, src, src2)) } +emit_vpblendmb_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append_elem(instructions, inst_vpblendmb_xmm_xmm_m128(dst, src, src2)) } +emit_vpblendmb_ymm_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM) { append_elem(instructions, inst_vpblendmb_ymm_ymm_ymm(dst, src, src2)) } +emit_vpblendmb_ymm_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256) { append_elem(instructions, inst_vpblendmb_ymm_ymm_m256(dst, src, src2)) } +emit_vpblendmb_zmm_zmm_zmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ZMM, src: ZMM, src2: ZMM) { append_elem(instructions, inst_vpblendmb_zmm_zmm_zmm(dst, src, src2)) } +emit_vpblendmb_zmm_zmm_m512 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ZMM, src: ZMM, src2: Mem512) { append_elem(instructions, inst_vpblendmb_zmm_zmm_m512(dst, src, src2)) } inst_vpblendmw_xmm_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPBLENDMW, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_xmm(src2), {}} }, 1694) } inst_vpblendmw_xmm_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .VPBLENDMW, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_mem(src2.mem, 16), {}} }, 1694) } inst_vpblendmw_ymm_ymm_ymm :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: YMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPBLENDMW, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_ymm(src2), {}} }, 1695) } inst_vpblendmw_ymm_ymm_m256 :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: Mem256) -> Instruction { return with_hint(Instruction{ mnemonic = .VPBLENDMW, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_mem(src2.mem, 32), {}} }, 1695) } inst_vpblendmw_zmm_zmm_zmm :: #force_inline proc "contextless" (dst: ZMM, src: ZMM, src2: ZMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPBLENDMW, operand_count = 3, ops = {op_zmm(dst), op_zmm(src), op_zmm(src2), {}} }, 1696) } inst_vpblendmw_zmm_zmm_m512 :: #force_inline proc "contextless" (dst: ZMM, src: ZMM, src2: Mem512) -> Instruction { return with_hint(Instruction{ mnemonic = .VPBLENDMW, operand_count = 3, ops = {op_zmm(dst), op_zmm(src), op_mem(src2.mem, 64), {}} }, 1696) } -emit_vpblendmw_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append(instructions, inst_vpblendmw_xmm_xmm_xmm(dst, src, src2)) } -emit_vpblendmw_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append(instructions, inst_vpblendmw_xmm_xmm_m128(dst, src, src2)) } -emit_vpblendmw_ymm_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM) { append(instructions, inst_vpblendmw_ymm_ymm_ymm(dst, src, src2)) } -emit_vpblendmw_ymm_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256) { append(instructions, inst_vpblendmw_ymm_ymm_m256(dst, src, src2)) } -emit_vpblendmw_zmm_zmm_zmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ZMM, src: ZMM, src2: ZMM) { append(instructions, inst_vpblendmw_zmm_zmm_zmm(dst, src, src2)) } -emit_vpblendmw_zmm_zmm_m512 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ZMM, src: ZMM, src2: Mem512) { append(instructions, inst_vpblendmw_zmm_zmm_m512(dst, src, src2)) } +emit_vpblendmw_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append_elem(instructions, inst_vpblendmw_xmm_xmm_xmm(dst, src, src2)) } +emit_vpblendmw_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append_elem(instructions, inst_vpblendmw_xmm_xmm_m128(dst, src, src2)) } +emit_vpblendmw_ymm_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM) { append_elem(instructions, inst_vpblendmw_ymm_ymm_ymm(dst, src, src2)) } +emit_vpblendmw_ymm_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256) { append_elem(instructions, inst_vpblendmw_ymm_ymm_m256(dst, src, src2)) } +emit_vpblendmw_zmm_zmm_zmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ZMM, src: ZMM, src2: ZMM) { append_elem(instructions, inst_vpblendmw_zmm_zmm_zmm(dst, src, src2)) } +emit_vpblendmw_zmm_zmm_m512 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ZMM, src: ZMM, src2: Mem512) { append_elem(instructions, inst_vpblendmw_zmm_zmm_m512(dst, src, src2)) } inst_vpblendmd_xmm_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPBLENDMD, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_xmm(src2), {}} }, 1697) } inst_vpblendmd_xmm_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .VPBLENDMD, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_mem(src2.mem, 16), {}} }, 1697) } inst_vpblendmd_ymm_ymm_ymm :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: YMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPBLENDMD, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_ymm(src2), {}} }, 1698) } inst_vpblendmd_ymm_ymm_m256 :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: Mem256) -> Instruction { return with_hint(Instruction{ mnemonic = .VPBLENDMD, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_mem(src2.mem, 32), {}} }, 1698) } inst_vpblendmd_zmm_zmm_zmm :: #force_inline proc "contextless" (dst: ZMM, src: ZMM, src2: ZMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPBLENDMD, operand_count = 3, ops = {op_zmm(dst), op_zmm(src), op_zmm(src2), {}} }, 1699) } inst_vpblendmd_zmm_zmm_m512 :: #force_inline proc "contextless" (dst: ZMM, src: ZMM, src2: Mem512) -> Instruction { return with_hint(Instruction{ mnemonic = .VPBLENDMD, operand_count = 3, ops = {op_zmm(dst), op_zmm(src), op_mem(src2.mem, 64), {}} }, 1699) } -emit_vpblendmd_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append(instructions, inst_vpblendmd_xmm_xmm_xmm(dst, src, src2)) } -emit_vpblendmd_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append(instructions, inst_vpblendmd_xmm_xmm_m128(dst, src, src2)) } -emit_vpblendmd_ymm_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM) { append(instructions, inst_vpblendmd_ymm_ymm_ymm(dst, src, src2)) } -emit_vpblendmd_ymm_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256) { append(instructions, inst_vpblendmd_ymm_ymm_m256(dst, src, src2)) } -emit_vpblendmd_zmm_zmm_zmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ZMM, src: ZMM, src2: ZMM) { append(instructions, inst_vpblendmd_zmm_zmm_zmm(dst, src, src2)) } -emit_vpblendmd_zmm_zmm_m512 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ZMM, src: ZMM, src2: Mem512) { append(instructions, inst_vpblendmd_zmm_zmm_m512(dst, src, src2)) } +emit_vpblendmd_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append_elem(instructions, inst_vpblendmd_xmm_xmm_xmm(dst, src, src2)) } +emit_vpblendmd_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append_elem(instructions, inst_vpblendmd_xmm_xmm_m128(dst, src, src2)) } +emit_vpblendmd_ymm_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM) { append_elem(instructions, inst_vpblendmd_ymm_ymm_ymm(dst, src, src2)) } +emit_vpblendmd_ymm_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256) { append_elem(instructions, inst_vpblendmd_ymm_ymm_m256(dst, src, src2)) } +emit_vpblendmd_zmm_zmm_zmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ZMM, src: ZMM, src2: ZMM) { append_elem(instructions, inst_vpblendmd_zmm_zmm_zmm(dst, src, src2)) } +emit_vpblendmd_zmm_zmm_m512 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ZMM, src: ZMM, src2: Mem512) { append_elem(instructions, inst_vpblendmd_zmm_zmm_m512(dst, src, src2)) } inst_vpblendmq_xmm_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPBLENDMQ, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_xmm(src2), {}} }, 1700) } inst_vpblendmq_xmm_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .VPBLENDMQ, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_mem(src2.mem, 16), {}} }, 1700) } inst_vpblendmq_ymm_ymm_ymm :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: YMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPBLENDMQ, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_ymm(src2), {}} }, 1701) } inst_vpblendmq_ymm_ymm_m256 :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: Mem256) -> Instruction { return with_hint(Instruction{ mnemonic = .VPBLENDMQ, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_mem(src2.mem, 32), {}} }, 1701) } inst_vpblendmq_zmm_zmm_zmm :: #force_inline proc "contextless" (dst: ZMM, src: ZMM, src2: ZMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPBLENDMQ, operand_count = 3, ops = {op_zmm(dst), op_zmm(src), op_zmm(src2), {}} }, 1702) } inst_vpblendmq_zmm_zmm_m512 :: #force_inline proc "contextless" (dst: ZMM, src: ZMM, src2: Mem512) -> Instruction { return with_hint(Instruction{ mnemonic = .VPBLENDMQ, operand_count = 3, ops = {op_zmm(dst), op_zmm(src), op_mem(src2.mem, 64), {}} }, 1702) } -emit_vpblendmq_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append(instructions, inst_vpblendmq_xmm_xmm_xmm(dst, src, src2)) } -emit_vpblendmq_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append(instructions, inst_vpblendmq_xmm_xmm_m128(dst, src, src2)) } -emit_vpblendmq_ymm_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM) { append(instructions, inst_vpblendmq_ymm_ymm_ymm(dst, src, src2)) } -emit_vpblendmq_ymm_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256) { append(instructions, inst_vpblendmq_ymm_ymm_m256(dst, src, src2)) } -emit_vpblendmq_zmm_zmm_zmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ZMM, src: ZMM, src2: ZMM) { append(instructions, inst_vpblendmq_zmm_zmm_zmm(dst, src, src2)) } -emit_vpblendmq_zmm_zmm_m512 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ZMM, src: ZMM, src2: Mem512) { append(instructions, inst_vpblendmq_zmm_zmm_m512(dst, src, src2)) } +emit_vpblendmq_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append_elem(instructions, inst_vpblendmq_xmm_xmm_xmm(dst, src, src2)) } +emit_vpblendmq_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append_elem(instructions, inst_vpblendmq_xmm_xmm_m128(dst, src, src2)) } +emit_vpblendmq_ymm_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM) { append_elem(instructions, inst_vpblendmq_ymm_ymm_ymm(dst, src, src2)) } +emit_vpblendmq_ymm_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256) { append_elem(instructions, inst_vpblendmq_ymm_ymm_m256(dst, src, src2)) } +emit_vpblendmq_zmm_zmm_zmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ZMM, src: ZMM, src2: ZMM) { append_elem(instructions, inst_vpblendmq_zmm_zmm_zmm(dst, src, src2)) } +emit_vpblendmq_zmm_zmm_m512 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ZMM, src: ZMM, src2: Mem512) { append_elem(instructions, inst_vpblendmq_zmm_zmm_m512(dst, src, src2)) } inst_vblendmps_xmm_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VBLENDMPS, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_xmm(src2), {}} }, 1703) } inst_vblendmps_xmm_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .VBLENDMPS, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_mem(src2.mem, 16), {}} }, 1703) } inst_vblendmps_ymm_ymm_ymm :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: YMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VBLENDMPS, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_ymm(src2), {}} }, 1704) } inst_vblendmps_ymm_ymm_m256 :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: Mem256) -> Instruction { return with_hint(Instruction{ mnemonic = .VBLENDMPS, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_mem(src2.mem, 32), {}} }, 1704) } inst_vblendmps_zmm_zmm_zmm :: #force_inline proc "contextless" (dst: ZMM, src: ZMM, src2: ZMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VBLENDMPS, operand_count = 3, ops = {op_zmm(dst), op_zmm(src), op_zmm(src2), {}} }, 1705) } inst_vblendmps_zmm_zmm_m512 :: #force_inline proc "contextless" (dst: ZMM, src: ZMM, src2: Mem512) -> Instruction { return with_hint(Instruction{ mnemonic = .VBLENDMPS, operand_count = 3, ops = {op_zmm(dst), op_zmm(src), op_mem(src2.mem, 64), {}} }, 1705) } -emit_vblendmps_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append(instructions, inst_vblendmps_xmm_xmm_xmm(dst, src, src2)) } -emit_vblendmps_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append(instructions, inst_vblendmps_xmm_xmm_m128(dst, src, src2)) } -emit_vblendmps_ymm_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM) { append(instructions, inst_vblendmps_ymm_ymm_ymm(dst, src, src2)) } -emit_vblendmps_ymm_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256) { append(instructions, inst_vblendmps_ymm_ymm_m256(dst, src, src2)) } -emit_vblendmps_zmm_zmm_zmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ZMM, src: ZMM, src2: ZMM) { append(instructions, inst_vblendmps_zmm_zmm_zmm(dst, src, src2)) } -emit_vblendmps_zmm_zmm_m512 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ZMM, src: ZMM, src2: Mem512) { append(instructions, inst_vblendmps_zmm_zmm_m512(dst, src, src2)) } +emit_vblendmps_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append_elem(instructions, inst_vblendmps_xmm_xmm_xmm(dst, src, src2)) } +emit_vblendmps_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append_elem(instructions, inst_vblendmps_xmm_xmm_m128(dst, src, src2)) } +emit_vblendmps_ymm_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM) { append_elem(instructions, inst_vblendmps_ymm_ymm_ymm(dst, src, src2)) } +emit_vblendmps_ymm_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256) { append_elem(instructions, inst_vblendmps_ymm_ymm_m256(dst, src, src2)) } +emit_vblendmps_zmm_zmm_zmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ZMM, src: ZMM, src2: ZMM) { append_elem(instructions, inst_vblendmps_zmm_zmm_zmm(dst, src, src2)) } +emit_vblendmps_zmm_zmm_m512 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ZMM, src: ZMM, src2: Mem512) { append_elem(instructions, inst_vblendmps_zmm_zmm_m512(dst, src, src2)) } inst_vblendmpd_xmm_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VBLENDMPD, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_xmm(src2), {}} }, 1706) } inst_vblendmpd_xmm_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .VBLENDMPD, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_mem(src2.mem, 16), {}} }, 1706) } inst_vblendmpd_ymm_ymm_ymm :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: YMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VBLENDMPD, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_ymm(src2), {}} }, 1707) } inst_vblendmpd_ymm_ymm_m256 :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: Mem256) -> Instruction { return with_hint(Instruction{ mnemonic = .VBLENDMPD, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_mem(src2.mem, 32), {}} }, 1707) } inst_vblendmpd_zmm_zmm_zmm :: #force_inline proc "contextless" (dst: ZMM, src: ZMM, src2: ZMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VBLENDMPD, operand_count = 3, ops = {op_zmm(dst), op_zmm(src), op_zmm(src2), {}} }, 1708) } inst_vblendmpd_zmm_zmm_m512 :: #force_inline proc "contextless" (dst: ZMM, src: ZMM, src2: Mem512) -> Instruction { return with_hint(Instruction{ mnemonic = .VBLENDMPD, operand_count = 3, ops = {op_zmm(dst), op_zmm(src), op_mem(src2.mem, 64), {}} }, 1708) } -emit_vblendmpd_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append(instructions, inst_vblendmpd_xmm_xmm_xmm(dst, src, src2)) } -emit_vblendmpd_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append(instructions, inst_vblendmpd_xmm_xmm_m128(dst, src, src2)) } -emit_vblendmpd_ymm_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM) { append(instructions, inst_vblendmpd_ymm_ymm_ymm(dst, src, src2)) } -emit_vblendmpd_ymm_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256) { append(instructions, inst_vblendmpd_ymm_ymm_m256(dst, src, src2)) } -emit_vblendmpd_zmm_zmm_zmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ZMM, src: ZMM, src2: ZMM) { append(instructions, inst_vblendmpd_zmm_zmm_zmm(dst, src, src2)) } -emit_vblendmpd_zmm_zmm_m512 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ZMM, src: ZMM, src2: Mem512) { append(instructions, inst_vblendmpd_zmm_zmm_m512(dst, src, src2)) } +emit_vblendmpd_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append_elem(instructions, inst_vblendmpd_xmm_xmm_xmm(dst, src, src2)) } +emit_vblendmpd_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append_elem(instructions, inst_vblendmpd_xmm_xmm_m128(dst, src, src2)) } +emit_vblendmpd_ymm_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM) { append_elem(instructions, inst_vblendmpd_ymm_ymm_ymm(dst, src, src2)) } +emit_vblendmpd_ymm_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256) { append_elem(instructions, inst_vblendmpd_ymm_ymm_m256(dst, src, src2)) } +emit_vblendmpd_zmm_zmm_zmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ZMM, src: ZMM, src2: ZMM) { append_elem(instructions, inst_vblendmpd_zmm_zmm_zmm(dst, src, src2)) } +emit_vblendmpd_zmm_zmm_m512 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ZMM, src: ZMM, src2: Mem512) { append_elem(instructions, inst_vblendmpd_zmm_zmm_m512(dst, src, src2)) } inst_vpcmpb_k_xmm_xmm_imm8 :: #force_inline proc "contextless" (dst: KREG, src: XMM, src2: XMM, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .VPCMPB, operand_count = 4, ops = {op_kreg(dst), op_xmm(src), op_xmm(src2), op_imm8(imm)} }, 1709) } inst_vpcmpb_k_xmm_m128_imm8 :: #force_inline proc "contextless" (dst: KREG, src: XMM, src2: Mem128, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .VPCMPB, operand_count = 4, ops = {op_kreg(dst), op_xmm(src), op_mem(src2.mem, 16), op_imm8(imm)} }, 1709) } inst_vpcmpb_k_ymm_ymm_imm8 :: #force_inline proc "contextless" (dst: KREG, src: YMM, src2: YMM, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .VPCMPB, operand_count = 4, ops = {op_kreg(dst), op_ymm(src), op_ymm(src2), op_imm8(imm)} }, 1710) } inst_vpcmpb_k_ymm_m256_imm8 :: #force_inline proc "contextless" (dst: KREG, src: YMM, src2: Mem256, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .VPCMPB, operand_count = 4, ops = {op_kreg(dst), op_ymm(src), op_mem(src2.mem, 32), op_imm8(imm)} }, 1710) } inst_vpcmpb_k_zmm_zmm_imm8 :: #force_inline proc "contextless" (dst: KREG, src: ZMM, src2: ZMM, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .VPCMPB, operand_count = 4, ops = {op_kreg(dst), op_zmm(src), op_zmm(src2), op_imm8(imm)} }, 1711) } inst_vpcmpb_k_zmm_m512_imm8 :: #force_inline proc "contextless" (dst: KREG, src: ZMM, src2: Mem512, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .VPCMPB, operand_count = 4, ops = {op_kreg(dst), op_zmm(src), op_mem(src2.mem, 64), op_imm8(imm)} }, 1711) } -emit_vpcmpb_k_xmm_xmm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: XMM, src2: XMM, imm: i8) { append(instructions, inst_vpcmpb_k_xmm_xmm_imm8(dst, src, src2, imm)) } -emit_vpcmpb_k_xmm_m128_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: XMM, src2: Mem128, imm: i8) { append(instructions, inst_vpcmpb_k_xmm_m128_imm8(dst, src, src2, imm)) } -emit_vpcmpb_k_ymm_ymm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: YMM, src2: YMM, imm: i8) { append(instructions, inst_vpcmpb_k_ymm_ymm_imm8(dst, src, src2, imm)) } -emit_vpcmpb_k_ymm_m256_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: YMM, src2: Mem256, imm: i8) { append(instructions, inst_vpcmpb_k_ymm_m256_imm8(dst, src, src2, imm)) } -emit_vpcmpb_k_zmm_zmm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: ZMM, src2: ZMM, imm: i8) { append(instructions, inst_vpcmpb_k_zmm_zmm_imm8(dst, src, src2, imm)) } -emit_vpcmpb_k_zmm_m512_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: ZMM, src2: Mem512, imm: i8) { append(instructions, inst_vpcmpb_k_zmm_m512_imm8(dst, src, src2, imm)) } +emit_vpcmpb_k_xmm_xmm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: XMM, src2: XMM, imm: i8) { append_elem(instructions, inst_vpcmpb_k_xmm_xmm_imm8(dst, src, src2, imm)) } +emit_vpcmpb_k_xmm_m128_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: XMM, src2: Mem128, imm: i8) { append_elem(instructions, inst_vpcmpb_k_xmm_m128_imm8(dst, src, src2, imm)) } +emit_vpcmpb_k_ymm_ymm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: YMM, src2: YMM, imm: i8) { append_elem(instructions, inst_vpcmpb_k_ymm_ymm_imm8(dst, src, src2, imm)) } +emit_vpcmpb_k_ymm_m256_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: YMM, src2: Mem256, imm: i8) { append_elem(instructions, inst_vpcmpb_k_ymm_m256_imm8(dst, src, src2, imm)) } +emit_vpcmpb_k_zmm_zmm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: ZMM, src2: ZMM, imm: i8) { append_elem(instructions, inst_vpcmpb_k_zmm_zmm_imm8(dst, src, src2, imm)) } +emit_vpcmpb_k_zmm_m512_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: ZMM, src2: Mem512, imm: i8) { append_elem(instructions, inst_vpcmpb_k_zmm_m512_imm8(dst, src, src2, imm)) } inst_vpcmpub_k_xmm_xmm_imm8 :: #force_inline proc "contextless" (dst: KREG, src: XMM, src2: XMM, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .VPCMPUB, operand_count = 4, ops = {op_kreg(dst), op_xmm(src), op_xmm(src2), op_imm8(imm)} }, 1712) } inst_vpcmpub_k_xmm_m128_imm8 :: #force_inline proc "contextless" (dst: KREG, src: XMM, src2: Mem128, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .VPCMPUB, operand_count = 4, ops = {op_kreg(dst), op_xmm(src), op_mem(src2.mem, 16), op_imm8(imm)} }, 1712) } inst_vpcmpub_k_ymm_ymm_imm8 :: #force_inline proc "contextless" (dst: KREG, src: YMM, src2: YMM, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .VPCMPUB, operand_count = 4, ops = {op_kreg(dst), op_ymm(src), op_ymm(src2), op_imm8(imm)} }, 1713) } inst_vpcmpub_k_ymm_m256_imm8 :: #force_inline proc "contextless" (dst: KREG, src: YMM, src2: Mem256, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .VPCMPUB, operand_count = 4, ops = {op_kreg(dst), op_ymm(src), op_mem(src2.mem, 32), op_imm8(imm)} }, 1713) } inst_vpcmpub_k_zmm_zmm_imm8 :: #force_inline proc "contextless" (dst: KREG, src: ZMM, src2: ZMM, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .VPCMPUB, operand_count = 4, ops = {op_kreg(dst), op_zmm(src), op_zmm(src2), op_imm8(imm)} }, 1714) } inst_vpcmpub_k_zmm_m512_imm8 :: #force_inline proc "contextless" (dst: KREG, src: ZMM, src2: Mem512, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .VPCMPUB, operand_count = 4, ops = {op_kreg(dst), op_zmm(src), op_mem(src2.mem, 64), op_imm8(imm)} }, 1714) } -emit_vpcmpub_k_xmm_xmm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: XMM, src2: XMM, imm: i8) { append(instructions, inst_vpcmpub_k_xmm_xmm_imm8(dst, src, src2, imm)) } -emit_vpcmpub_k_xmm_m128_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: XMM, src2: Mem128, imm: i8) { append(instructions, inst_vpcmpub_k_xmm_m128_imm8(dst, src, src2, imm)) } -emit_vpcmpub_k_ymm_ymm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: YMM, src2: YMM, imm: i8) { append(instructions, inst_vpcmpub_k_ymm_ymm_imm8(dst, src, src2, imm)) } -emit_vpcmpub_k_ymm_m256_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: YMM, src2: Mem256, imm: i8) { append(instructions, inst_vpcmpub_k_ymm_m256_imm8(dst, src, src2, imm)) } -emit_vpcmpub_k_zmm_zmm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: ZMM, src2: ZMM, imm: i8) { append(instructions, inst_vpcmpub_k_zmm_zmm_imm8(dst, src, src2, imm)) } -emit_vpcmpub_k_zmm_m512_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: ZMM, src2: Mem512, imm: i8) { append(instructions, inst_vpcmpub_k_zmm_m512_imm8(dst, src, src2, imm)) } +emit_vpcmpub_k_xmm_xmm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: XMM, src2: XMM, imm: i8) { append_elem(instructions, inst_vpcmpub_k_xmm_xmm_imm8(dst, src, src2, imm)) } +emit_vpcmpub_k_xmm_m128_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: XMM, src2: Mem128, imm: i8) { append_elem(instructions, inst_vpcmpub_k_xmm_m128_imm8(dst, src, src2, imm)) } +emit_vpcmpub_k_ymm_ymm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: YMM, src2: YMM, imm: i8) { append_elem(instructions, inst_vpcmpub_k_ymm_ymm_imm8(dst, src, src2, imm)) } +emit_vpcmpub_k_ymm_m256_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: YMM, src2: Mem256, imm: i8) { append_elem(instructions, inst_vpcmpub_k_ymm_m256_imm8(dst, src, src2, imm)) } +emit_vpcmpub_k_zmm_zmm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: ZMM, src2: ZMM, imm: i8) { append_elem(instructions, inst_vpcmpub_k_zmm_zmm_imm8(dst, src, src2, imm)) } +emit_vpcmpub_k_zmm_m512_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: ZMM, src2: Mem512, imm: i8) { append_elem(instructions, inst_vpcmpub_k_zmm_m512_imm8(dst, src, src2, imm)) } inst_vpcmpw_k_xmm_xmm_imm8 :: #force_inline proc "contextless" (dst: KREG, src: XMM, src2: XMM, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .VPCMPW, operand_count = 4, ops = {op_kreg(dst), op_xmm(src), op_xmm(src2), op_imm8(imm)} }, 1715) } inst_vpcmpw_k_xmm_m128_imm8 :: #force_inline proc "contextless" (dst: KREG, src: XMM, src2: Mem128, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .VPCMPW, operand_count = 4, ops = {op_kreg(dst), op_xmm(src), op_mem(src2.mem, 16), op_imm8(imm)} }, 1715) } inst_vpcmpw_k_ymm_ymm_imm8 :: #force_inline proc "contextless" (dst: KREG, src: YMM, src2: YMM, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .VPCMPW, operand_count = 4, ops = {op_kreg(dst), op_ymm(src), op_ymm(src2), op_imm8(imm)} }, 1716) } inst_vpcmpw_k_ymm_m256_imm8 :: #force_inline proc "contextless" (dst: KREG, src: YMM, src2: Mem256, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .VPCMPW, operand_count = 4, ops = {op_kreg(dst), op_ymm(src), op_mem(src2.mem, 32), op_imm8(imm)} }, 1716) } inst_vpcmpw_k_zmm_zmm_imm8 :: #force_inline proc "contextless" (dst: KREG, src: ZMM, src2: ZMM, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .VPCMPW, operand_count = 4, ops = {op_kreg(dst), op_zmm(src), op_zmm(src2), op_imm8(imm)} }, 1717) } inst_vpcmpw_k_zmm_m512_imm8 :: #force_inline proc "contextless" (dst: KREG, src: ZMM, src2: Mem512, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .VPCMPW, operand_count = 4, ops = {op_kreg(dst), op_zmm(src), op_mem(src2.mem, 64), op_imm8(imm)} }, 1717) } -emit_vpcmpw_k_xmm_xmm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: XMM, src2: XMM, imm: i8) { append(instructions, inst_vpcmpw_k_xmm_xmm_imm8(dst, src, src2, imm)) } -emit_vpcmpw_k_xmm_m128_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: XMM, src2: Mem128, imm: i8) { append(instructions, inst_vpcmpw_k_xmm_m128_imm8(dst, src, src2, imm)) } -emit_vpcmpw_k_ymm_ymm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: YMM, src2: YMM, imm: i8) { append(instructions, inst_vpcmpw_k_ymm_ymm_imm8(dst, src, src2, imm)) } -emit_vpcmpw_k_ymm_m256_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: YMM, src2: Mem256, imm: i8) { append(instructions, inst_vpcmpw_k_ymm_m256_imm8(dst, src, src2, imm)) } -emit_vpcmpw_k_zmm_zmm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: ZMM, src2: ZMM, imm: i8) { append(instructions, inst_vpcmpw_k_zmm_zmm_imm8(dst, src, src2, imm)) } -emit_vpcmpw_k_zmm_m512_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: ZMM, src2: Mem512, imm: i8) { append(instructions, inst_vpcmpw_k_zmm_m512_imm8(dst, src, src2, imm)) } +emit_vpcmpw_k_xmm_xmm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: XMM, src2: XMM, imm: i8) { append_elem(instructions, inst_vpcmpw_k_xmm_xmm_imm8(dst, src, src2, imm)) } +emit_vpcmpw_k_xmm_m128_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: XMM, src2: Mem128, imm: i8) { append_elem(instructions, inst_vpcmpw_k_xmm_m128_imm8(dst, src, src2, imm)) } +emit_vpcmpw_k_ymm_ymm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: YMM, src2: YMM, imm: i8) { append_elem(instructions, inst_vpcmpw_k_ymm_ymm_imm8(dst, src, src2, imm)) } +emit_vpcmpw_k_ymm_m256_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: YMM, src2: Mem256, imm: i8) { append_elem(instructions, inst_vpcmpw_k_ymm_m256_imm8(dst, src, src2, imm)) } +emit_vpcmpw_k_zmm_zmm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: ZMM, src2: ZMM, imm: i8) { append_elem(instructions, inst_vpcmpw_k_zmm_zmm_imm8(dst, src, src2, imm)) } +emit_vpcmpw_k_zmm_m512_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: ZMM, src2: Mem512, imm: i8) { append_elem(instructions, inst_vpcmpw_k_zmm_m512_imm8(dst, src, src2, imm)) } inst_vpcmpuw_k_xmm_xmm_imm8 :: #force_inline proc "contextless" (dst: KREG, src: XMM, src2: XMM, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .VPCMPUW, operand_count = 4, ops = {op_kreg(dst), op_xmm(src), op_xmm(src2), op_imm8(imm)} }, 1718) } inst_vpcmpuw_k_xmm_m128_imm8 :: #force_inline proc "contextless" (dst: KREG, src: XMM, src2: Mem128, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .VPCMPUW, operand_count = 4, ops = {op_kreg(dst), op_xmm(src), op_mem(src2.mem, 16), op_imm8(imm)} }, 1718) } inst_vpcmpuw_k_ymm_ymm_imm8 :: #force_inline proc "contextless" (dst: KREG, src: YMM, src2: YMM, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .VPCMPUW, operand_count = 4, ops = {op_kreg(dst), op_ymm(src), op_ymm(src2), op_imm8(imm)} }, 1719) } inst_vpcmpuw_k_ymm_m256_imm8 :: #force_inline proc "contextless" (dst: KREG, src: YMM, src2: Mem256, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .VPCMPUW, operand_count = 4, ops = {op_kreg(dst), op_ymm(src), op_mem(src2.mem, 32), op_imm8(imm)} }, 1719) } inst_vpcmpuw_k_zmm_zmm_imm8 :: #force_inline proc "contextless" (dst: KREG, src: ZMM, src2: ZMM, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .VPCMPUW, operand_count = 4, ops = {op_kreg(dst), op_zmm(src), op_zmm(src2), op_imm8(imm)} }, 1720) } inst_vpcmpuw_k_zmm_m512_imm8 :: #force_inline proc "contextless" (dst: KREG, src: ZMM, src2: Mem512, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .VPCMPUW, operand_count = 4, ops = {op_kreg(dst), op_zmm(src), op_mem(src2.mem, 64), op_imm8(imm)} }, 1720) } -emit_vpcmpuw_k_xmm_xmm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: XMM, src2: XMM, imm: i8) { append(instructions, inst_vpcmpuw_k_xmm_xmm_imm8(dst, src, src2, imm)) } -emit_vpcmpuw_k_xmm_m128_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: XMM, src2: Mem128, imm: i8) { append(instructions, inst_vpcmpuw_k_xmm_m128_imm8(dst, src, src2, imm)) } -emit_vpcmpuw_k_ymm_ymm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: YMM, src2: YMM, imm: i8) { append(instructions, inst_vpcmpuw_k_ymm_ymm_imm8(dst, src, src2, imm)) } -emit_vpcmpuw_k_ymm_m256_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: YMM, src2: Mem256, imm: i8) { append(instructions, inst_vpcmpuw_k_ymm_m256_imm8(dst, src, src2, imm)) } -emit_vpcmpuw_k_zmm_zmm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: ZMM, src2: ZMM, imm: i8) { append(instructions, inst_vpcmpuw_k_zmm_zmm_imm8(dst, src, src2, imm)) } -emit_vpcmpuw_k_zmm_m512_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: ZMM, src2: Mem512, imm: i8) { append(instructions, inst_vpcmpuw_k_zmm_m512_imm8(dst, src, src2, imm)) } +emit_vpcmpuw_k_xmm_xmm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: XMM, src2: XMM, imm: i8) { append_elem(instructions, inst_vpcmpuw_k_xmm_xmm_imm8(dst, src, src2, imm)) } +emit_vpcmpuw_k_xmm_m128_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: XMM, src2: Mem128, imm: i8) { append_elem(instructions, inst_vpcmpuw_k_xmm_m128_imm8(dst, src, src2, imm)) } +emit_vpcmpuw_k_ymm_ymm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: YMM, src2: YMM, imm: i8) { append_elem(instructions, inst_vpcmpuw_k_ymm_ymm_imm8(dst, src, src2, imm)) } +emit_vpcmpuw_k_ymm_m256_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: YMM, src2: Mem256, imm: i8) { append_elem(instructions, inst_vpcmpuw_k_ymm_m256_imm8(dst, src, src2, imm)) } +emit_vpcmpuw_k_zmm_zmm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: ZMM, src2: ZMM, imm: i8) { append_elem(instructions, inst_vpcmpuw_k_zmm_zmm_imm8(dst, src, src2, imm)) } +emit_vpcmpuw_k_zmm_m512_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: ZMM, src2: Mem512, imm: i8) { append_elem(instructions, inst_vpcmpuw_k_zmm_m512_imm8(dst, src, src2, imm)) } inst_vpcmpd_k_xmm_xmm_imm8 :: #force_inline proc "contextless" (dst: KREG, src: XMM, src2: XMM, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .VPCMPD, operand_count = 4, ops = {op_kreg(dst), op_xmm(src), op_xmm(src2), op_imm8(imm)} }, 1721) } inst_vpcmpd_k_xmm_m128_imm8 :: #force_inline proc "contextless" (dst: KREG, src: XMM, src2: Mem128, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .VPCMPD, operand_count = 4, ops = {op_kreg(dst), op_xmm(src), op_mem(src2.mem, 16), op_imm8(imm)} }, 1721) } inst_vpcmpd_k_ymm_ymm_imm8 :: #force_inline proc "contextless" (dst: KREG, src: YMM, src2: YMM, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .VPCMPD, operand_count = 4, ops = {op_kreg(dst), op_ymm(src), op_ymm(src2), op_imm8(imm)} }, 1722) } inst_vpcmpd_k_ymm_m256_imm8 :: #force_inline proc "contextless" (dst: KREG, src: YMM, src2: Mem256, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .VPCMPD, operand_count = 4, ops = {op_kreg(dst), op_ymm(src), op_mem(src2.mem, 32), op_imm8(imm)} }, 1722) } inst_vpcmpd_k_zmm_zmm_imm8 :: #force_inline proc "contextless" (dst: KREG, src: ZMM, src2: ZMM, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .VPCMPD, operand_count = 4, ops = {op_kreg(dst), op_zmm(src), op_zmm(src2), op_imm8(imm)} }, 1723) } inst_vpcmpd_k_zmm_m512_imm8 :: #force_inline proc "contextless" (dst: KREG, src: ZMM, src2: Mem512, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .VPCMPD, operand_count = 4, ops = {op_kreg(dst), op_zmm(src), op_mem(src2.mem, 64), op_imm8(imm)} }, 1723) } -emit_vpcmpd_k_xmm_xmm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: XMM, src2: XMM, imm: i8) { append(instructions, inst_vpcmpd_k_xmm_xmm_imm8(dst, src, src2, imm)) } -emit_vpcmpd_k_xmm_m128_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: XMM, src2: Mem128, imm: i8) { append(instructions, inst_vpcmpd_k_xmm_m128_imm8(dst, src, src2, imm)) } -emit_vpcmpd_k_ymm_ymm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: YMM, src2: YMM, imm: i8) { append(instructions, inst_vpcmpd_k_ymm_ymm_imm8(dst, src, src2, imm)) } -emit_vpcmpd_k_ymm_m256_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: YMM, src2: Mem256, imm: i8) { append(instructions, inst_vpcmpd_k_ymm_m256_imm8(dst, src, src2, imm)) } -emit_vpcmpd_k_zmm_zmm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: ZMM, src2: ZMM, imm: i8) { append(instructions, inst_vpcmpd_k_zmm_zmm_imm8(dst, src, src2, imm)) } -emit_vpcmpd_k_zmm_m512_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: ZMM, src2: Mem512, imm: i8) { append(instructions, inst_vpcmpd_k_zmm_m512_imm8(dst, src, src2, imm)) } +emit_vpcmpd_k_xmm_xmm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: XMM, src2: XMM, imm: i8) { append_elem(instructions, inst_vpcmpd_k_xmm_xmm_imm8(dst, src, src2, imm)) } +emit_vpcmpd_k_xmm_m128_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: XMM, src2: Mem128, imm: i8) { append_elem(instructions, inst_vpcmpd_k_xmm_m128_imm8(dst, src, src2, imm)) } +emit_vpcmpd_k_ymm_ymm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: YMM, src2: YMM, imm: i8) { append_elem(instructions, inst_vpcmpd_k_ymm_ymm_imm8(dst, src, src2, imm)) } +emit_vpcmpd_k_ymm_m256_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: YMM, src2: Mem256, imm: i8) { append_elem(instructions, inst_vpcmpd_k_ymm_m256_imm8(dst, src, src2, imm)) } +emit_vpcmpd_k_zmm_zmm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: ZMM, src2: ZMM, imm: i8) { append_elem(instructions, inst_vpcmpd_k_zmm_zmm_imm8(dst, src, src2, imm)) } +emit_vpcmpd_k_zmm_m512_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: ZMM, src2: Mem512, imm: i8) { append_elem(instructions, inst_vpcmpd_k_zmm_m512_imm8(dst, src, src2, imm)) } inst_vpcmpud_k_xmm_xmm_imm8 :: #force_inline proc "contextless" (dst: KREG, src: XMM, src2: XMM, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .VPCMPUD, operand_count = 4, ops = {op_kreg(dst), op_xmm(src), op_xmm(src2), op_imm8(imm)} }, 1724) } inst_vpcmpud_k_xmm_m128_imm8 :: #force_inline proc "contextless" (dst: KREG, src: XMM, src2: Mem128, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .VPCMPUD, operand_count = 4, ops = {op_kreg(dst), op_xmm(src), op_mem(src2.mem, 16), op_imm8(imm)} }, 1724) } inst_vpcmpud_k_ymm_ymm_imm8 :: #force_inline proc "contextless" (dst: KREG, src: YMM, src2: YMM, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .VPCMPUD, operand_count = 4, ops = {op_kreg(dst), op_ymm(src), op_ymm(src2), op_imm8(imm)} }, 1725) } inst_vpcmpud_k_ymm_m256_imm8 :: #force_inline proc "contextless" (dst: KREG, src: YMM, src2: Mem256, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .VPCMPUD, operand_count = 4, ops = {op_kreg(dst), op_ymm(src), op_mem(src2.mem, 32), op_imm8(imm)} }, 1725) } inst_vpcmpud_k_zmm_zmm_imm8 :: #force_inline proc "contextless" (dst: KREG, src: ZMM, src2: ZMM, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .VPCMPUD, operand_count = 4, ops = {op_kreg(dst), op_zmm(src), op_zmm(src2), op_imm8(imm)} }, 1726) } inst_vpcmpud_k_zmm_m512_imm8 :: #force_inline proc "contextless" (dst: KREG, src: ZMM, src2: Mem512, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .VPCMPUD, operand_count = 4, ops = {op_kreg(dst), op_zmm(src), op_mem(src2.mem, 64), op_imm8(imm)} }, 1726) } -emit_vpcmpud_k_xmm_xmm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: XMM, src2: XMM, imm: i8) { append(instructions, inst_vpcmpud_k_xmm_xmm_imm8(dst, src, src2, imm)) } -emit_vpcmpud_k_xmm_m128_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: XMM, src2: Mem128, imm: i8) { append(instructions, inst_vpcmpud_k_xmm_m128_imm8(dst, src, src2, imm)) } -emit_vpcmpud_k_ymm_ymm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: YMM, src2: YMM, imm: i8) { append(instructions, inst_vpcmpud_k_ymm_ymm_imm8(dst, src, src2, imm)) } -emit_vpcmpud_k_ymm_m256_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: YMM, src2: Mem256, imm: i8) { append(instructions, inst_vpcmpud_k_ymm_m256_imm8(dst, src, src2, imm)) } -emit_vpcmpud_k_zmm_zmm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: ZMM, src2: ZMM, imm: i8) { append(instructions, inst_vpcmpud_k_zmm_zmm_imm8(dst, src, src2, imm)) } -emit_vpcmpud_k_zmm_m512_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: ZMM, src2: Mem512, imm: i8) { append(instructions, inst_vpcmpud_k_zmm_m512_imm8(dst, src, src2, imm)) } +emit_vpcmpud_k_xmm_xmm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: XMM, src2: XMM, imm: i8) { append_elem(instructions, inst_vpcmpud_k_xmm_xmm_imm8(dst, src, src2, imm)) } +emit_vpcmpud_k_xmm_m128_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: XMM, src2: Mem128, imm: i8) { append_elem(instructions, inst_vpcmpud_k_xmm_m128_imm8(dst, src, src2, imm)) } +emit_vpcmpud_k_ymm_ymm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: YMM, src2: YMM, imm: i8) { append_elem(instructions, inst_vpcmpud_k_ymm_ymm_imm8(dst, src, src2, imm)) } +emit_vpcmpud_k_ymm_m256_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: YMM, src2: Mem256, imm: i8) { append_elem(instructions, inst_vpcmpud_k_ymm_m256_imm8(dst, src, src2, imm)) } +emit_vpcmpud_k_zmm_zmm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: ZMM, src2: ZMM, imm: i8) { append_elem(instructions, inst_vpcmpud_k_zmm_zmm_imm8(dst, src, src2, imm)) } +emit_vpcmpud_k_zmm_m512_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: ZMM, src2: Mem512, imm: i8) { append_elem(instructions, inst_vpcmpud_k_zmm_m512_imm8(dst, src, src2, imm)) } inst_vpcmpq_k_xmm_xmm_imm8 :: #force_inline proc "contextless" (dst: KREG, src: XMM, src2: XMM, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .VPCMPQ, operand_count = 4, ops = {op_kreg(dst), op_xmm(src), op_xmm(src2), op_imm8(imm)} }, 1727) } inst_vpcmpq_k_xmm_m128_imm8 :: #force_inline proc "contextless" (dst: KREG, src: XMM, src2: Mem128, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .VPCMPQ, operand_count = 4, ops = {op_kreg(dst), op_xmm(src), op_mem(src2.mem, 16), op_imm8(imm)} }, 1727) } inst_vpcmpq_k_ymm_ymm_imm8 :: #force_inline proc "contextless" (dst: KREG, src: YMM, src2: YMM, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .VPCMPQ, operand_count = 4, ops = {op_kreg(dst), op_ymm(src), op_ymm(src2), op_imm8(imm)} }, 1728) } inst_vpcmpq_k_ymm_m256_imm8 :: #force_inline proc "contextless" (dst: KREG, src: YMM, src2: Mem256, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .VPCMPQ, operand_count = 4, ops = {op_kreg(dst), op_ymm(src), op_mem(src2.mem, 32), op_imm8(imm)} }, 1728) } inst_vpcmpq_k_zmm_zmm_imm8 :: #force_inline proc "contextless" (dst: KREG, src: ZMM, src2: ZMM, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .VPCMPQ, operand_count = 4, ops = {op_kreg(dst), op_zmm(src), op_zmm(src2), op_imm8(imm)} }, 1729) } inst_vpcmpq_k_zmm_m512_imm8 :: #force_inline proc "contextless" (dst: KREG, src: ZMM, src2: Mem512, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .VPCMPQ, operand_count = 4, ops = {op_kreg(dst), op_zmm(src), op_mem(src2.mem, 64), op_imm8(imm)} }, 1729) } -emit_vpcmpq_k_xmm_xmm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: XMM, src2: XMM, imm: i8) { append(instructions, inst_vpcmpq_k_xmm_xmm_imm8(dst, src, src2, imm)) } -emit_vpcmpq_k_xmm_m128_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: XMM, src2: Mem128, imm: i8) { append(instructions, inst_vpcmpq_k_xmm_m128_imm8(dst, src, src2, imm)) } -emit_vpcmpq_k_ymm_ymm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: YMM, src2: YMM, imm: i8) { append(instructions, inst_vpcmpq_k_ymm_ymm_imm8(dst, src, src2, imm)) } -emit_vpcmpq_k_ymm_m256_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: YMM, src2: Mem256, imm: i8) { append(instructions, inst_vpcmpq_k_ymm_m256_imm8(dst, src, src2, imm)) } -emit_vpcmpq_k_zmm_zmm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: ZMM, src2: ZMM, imm: i8) { append(instructions, inst_vpcmpq_k_zmm_zmm_imm8(dst, src, src2, imm)) } -emit_vpcmpq_k_zmm_m512_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: ZMM, src2: Mem512, imm: i8) { append(instructions, inst_vpcmpq_k_zmm_m512_imm8(dst, src, src2, imm)) } +emit_vpcmpq_k_xmm_xmm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: XMM, src2: XMM, imm: i8) { append_elem(instructions, inst_vpcmpq_k_xmm_xmm_imm8(dst, src, src2, imm)) } +emit_vpcmpq_k_xmm_m128_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: XMM, src2: Mem128, imm: i8) { append_elem(instructions, inst_vpcmpq_k_xmm_m128_imm8(dst, src, src2, imm)) } +emit_vpcmpq_k_ymm_ymm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: YMM, src2: YMM, imm: i8) { append_elem(instructions, inst_vpcmpq_k_ymm_ymm_imm8(dst, src, src2, imm)) } +emit_vpcmpq_k_ymm_m256_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: YMM, src2: Mem256, imm: i8) { append_elem(instructions, inst_vpcmpq_k_ymm_m256_imm8(dst, src, src2, imm)) } +emit_vpcmpq_k_zmm_zmm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: ZMM, src2: ZMM, imm: i8) { append_elem(instructions, inst_vpcmpq_k_zmm_zmm_imm8(dst, src, src2, imm)) } +emit_vpcmpq_k_zmm_m512_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: ZMM, src2: Mem512, imm: i8) { append_elem(instructions, inst_vpcmpq_k_zmm_m512_imm8(dst, src, src2, imm)) } inst_vpcmpuq_k_xmm_xmm_imm8 :: #force_inline proc "contextless" (dst: KREG, src: XMM, src2: XMM, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .VPCMPUQ, operand_count = 4, ops = {op_kreg(dst), op_xmm(src), op_xmm(src2), op_imm8(imm)} }, 1730) } inst_vpcmpuq_k_xmm_m128_imm8 :: #force_inline proc "contextless" (dst: KREG, src: XMM, src2: Mem128, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .VPCMPUQ, operand_count = 4, ops = {op_kreg(dst), op_xmm(src), op_mem(src2.mem, 16), op_imm8(imm)} }, 1730) } inst_vpcmpuq_k_ymm_ymm_imm8 :: #force_inline proc "contextless" (dst: KREG, src: YMM, src2: YMM, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .VPCMPUQ, operand_count = 4, ops = {op_kreg(dst), op_ymm(src), op_ymm(src2), op_imm8(imm)} }, 1731) } inst_vpcmpuq_k_ymm_m256_imm8 :: #force_inline proc "contextless" (dst: KREG, src: YMM, src2: Mem256, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .VPCMPUQ, operand_count = 4, ops = {op_kreg(dst), op_ymm(src), op_mem(src2.mem, 32), op_imm8(imm)} }, 1731) } inst_vpcmpuq_k_zmm_zmm_imm8 :: #force_inline proc "contextless" (dst: KREG, src: ZMM, src2: ZMM, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .VPCMPUQ, operand_count = 4, ops = {op_kreg(dst), op_zmm(src), op_zmm(src2), op_imm8(imm)} }, 1732) } inst_vpcmpuq_k_zmm_m512_imm8 :: #force_inline proc "contextless" (dst: KREG, src: ZMM, src2: Mem512, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .VPCMPUQ, operand_count = 4, ops = {op_kreg(dst), op_zmm(src), op_mem(src2.mem, 64), op_imm8(imm)} }, 1732) } -emit_vpcmpuq_k_xmm_xmm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: XMM, src2: XMM, imm: i8) { append(instructions, inst_vpcmpuq_k_xmm_xmm_imm8(dst, src, src2, imm)) } -emit_vpcmpuq_k_xmm_m128_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: XMM, src2: Mem128, imm: i8) { append(instructions, inst_vpcmpuq_k_xmm_m128_imm8(dst, src, src2, imm)) } -emit_vpcmpuq_k_ymm_ymm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: YMM, src2: YMM, imm: i8) { append(instructions, inst_vpcmpuq_k_ymm_ymm_imm8(dst, src, src2, imm)) } -emit_vpcmpuq_k_ymm_m256_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: YMM, src2: Mem256, imm: i8) { append(instructions, inst_vpcmpuq_k_ymm_m256_imm8(dst, src, src2, imm)) } -emit_vpcmpuq_k_zmm_zmm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: ZMM, src2: ZMM, imm: i8) { append(instructions, inst_vpcmpuq_k_zmm_zmm_imm8(dst, src, src2, imm)) } -emit_vpcmpuq_k_zmm_m512_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: ZMM, src2: Mem512, imm: i8) { append(instructions, inst_vpcmpuq_k_zmm_m512_imm8(dst, src, src2, imm)) } +emit_vpcmpuq_k_xmm_xmm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: XMM, src2: XMM, imm: i8) { append_elem(instructions, inst_vpcmpuq_k_xmm_xmm_imm8(dst, src, src2, imm)) } +emit_vpcmpuq_k_xmm_m128_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: XMM, src2: Mem128, imm: i8) { append_elem(instructions, inst_vpcmpuq_k_xmm_m128_imm8(dst, src, src2, imm)) } +emit_vpcmpuq_k_ymm_ymm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: YMM, src2: YMM, imm: i8) { append_elem(instructions, inst_vpcmpuq_k_ymm_ymm_imm8(dst, src, src2, imm)) } +emit_vpcmpuq_k_ymm_m256_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: YMM, src2: Mem256, imm: i8) { append_elem(instructions, inst_vpcmpuq_k_ymm_m256_imm8(dst, src, src2, imm)) } +emit_vpcmpuq_k_zmm_zmm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: ZMM, src2: ZMM, imm: i8) { append_elem(instructions, inst_vpcmpuq_k_zmm_zmm_imm8(dst, src, src2, imm)) } +emit_vpcmpuq_k_zmm_m512_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: ZMM, src2: Mem512, imm: i8) { append_elem(instructions, inst_vpcmpuq_k_zmm_m512_imm8(dst, src, src2, imm)) } inst_vptestmb_k_xmm_xmm :: #force_inline proc "contextless" (dst: KREG, src: XMM, src2: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPTESTMB, operand_count = 3, ops = {op_kreg(dst), op_xmm(src), op_xmm(src2), {}} }, 1733) } inst_vptestmb_k_xmm_m128 :: #force_inline proc "contextless" (dst: KREG, src: XMM, src2: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .VPTESTMB, operand_count = 3, ops = {op_kreg(dst), op_xmm(src), op_mem(src2.mem, 16), {}} }, 1733) } inst_vptestmb_k_ymm_ymm :: #force_inline proc "contextless" (dst: KREG, src: YMM, src2: YMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPTESTMB, operand_count = 3, ops = {op_kreg(dst), op_ymm(src), op_ymm(src2), {}} }, 1734) } inst_vptestmb_k_ymm_m256 :: #force_inline proc "contextless" (dst: KREG, src: YMM, src2: Mem256) -> Instruction { return with_hint(Instruction{ mnemonic = .VPTESTMB, operand_count = 3, ops = {op_kreg(dst), op_ymm(src), op_mem(src2.mem, 32), {}} }, 1734) } inst_vptestmb_k_zmm_zmm :: #force_inline proc "contextless" (dst: KREG, src: ZMM, src2: ZMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPTESTMB, operand_count = 3, ops = {op_kreg(dst), op_zmm(src), op_zmm(src2), {}} }, 1735) } inst_vptestmb_k_zmm_m512 :: #force_inline proc "contextless" (dst: KREG, src: ZMM, src2: Mem512) -> Instruction { return with_hint(Instruction{ mnemonic = .VPTESTMB, operand_count = 3, ops = {op_kreg(dst), op_zmm(src), op_mem(src2.mem, 64), {}} }, 1735) } -emit_vptestmb_k_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: XMM, src2: XMM) { append(instructions, inst_vptestmb_k_xmm_xmm(dst, src, src2)) } -emit_vptestmb_k_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: XMM, src2: Mem128) { append(instructions, inst_vptestmb_k_xmm_m128(dst, src, src2)) } -emit_vptestmb_k_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: YMM, src2: YMM) { append(instructions, inst_vptestmb_k_ymm_ymm(dst, src, src2)) } -emit_vptestmb_k_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: YMM, src2: Mem256) { append(instructions, inst_vptestmb_k_ymm_m256(dst, src, src2)) } -emit_vptestmb_k_zmm_zmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: ZMM, src2: ZMM) { append(instructions, inst_vptestmb_k_zmm_zmm(dst, src, src2)) } -emit_vptestmb_k_zmm_m512 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: ZMM, src2: Mem512) { append(instructions, inst_vptestmb_k_zmm_m512(dst, src, src2)) } +emit_vptestmb_k_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: XMM, src2: XMM) { append_elem(instructions, inst_vptestmb_k_xmm_xmm(dst, src, src2)) } +emit_vptestmb_k_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: XMM, src2: Mem128) { append_elem(instructions, inst_vptestmb_k_xmm_m128(dst, src, src2)) } +emit_vptestmb_k_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: YMM, src2: YMM) { append_elem(instructions, inst_vptestmb_k_ymm_ymm(dst, src, src2)) } +emit_vptestmb_k_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: YMM, src2: Mem256) { append_elem(instructions, inst_vptestmb_k_ymm_m256(dst, src, src2)) } +emit_vptestmb_k_zmm_zmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: ZMM, src2: ZMM) { append_elem(instructions, inst_vptestmb_k_zmm_zmm(dst, src, src2)) } +emit_vptestmb_k_zmm_m512 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: ZMM, src2: Mem512) { append_elem(instructions, inst_vptestmb_k_zmm_m512(dst, src, src2)) } inst_vptestmw_k_xmm_xmm :: #force_inline proc "contextless" (dst: KREG, src: XMM, src2: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPTESTMW, operand_count = 3, ops = {op_kreg(dst), op_xmm(src), op_xmm(src2), {}} }, 1736) } inst_vptestmw_k_xmm_m128 :: #force_inline proc "contextless" (dst: KREG, src: XMM, src2: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .VPTESTMW, operand_count = 3, ops = {op_kreg(dst), op_xmm(src), op_mem(src2.mem, 16), {}} }, 1736) } inst_vptestmw_k_ymm_ymm :: #force_inline proc "contextless" (dst: KREG, src: YMM, src2: YMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPTESTMW, operand_count = 3, ops = {op_kreg(dst), op_ymm(src), op_ymm(src2), {}} }, 1737) } inst_vptestmw_k_ymm_m256 :: #force_inline proc "contextless" (dst: KREG, src: YMM, src2: Mem256) -> Instruction { return with_hint(Instruction{ mnemonic = .VPTESTMW, operand_count = 3, ops = {op_kreg(dst), op_ymm(src), op_mem(src2.mem, 32), {}} }, 1737) } inst_vptestmw_k_zmm_zmm :: #force_inline proc "contextless" (dst: KREG, src: ZMM, src2: ZMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPTESTMW, operand_count = 3, ops = {op_kreg(dst), op_zmm(src), op_zmm(src2), {}} }, 1738) } inst_vptestmw_k_zmm_m512 :: #force_inline proc "contextless" (dst: KREG, src: ZMM, src2: Mem512) -> Instruction { return with_hint(Instruction{ mnemonic = .VPTESTMW, operand_count = 3, ops = {op_kreg(dst), op_zmm(src), op_mem(src2.mem, 64), {}} }, 1738) } -emit_vptestmw_k_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: XMM, src2: XMM) { append(instructions, inst_vptestmw_k_xmm_xmm(dst, src, src2)) } -emit_vptestmw_k_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: XMM, src2: Mem128) { append(instructions, inst_vptestmw_k_xmm_m128(dst, src, src2)) } -emit_vptestmw_k_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: YMM, src2: YMM) { append(instructions, inst_vptestmw_k_ymm_ymm(dst, src, src2)) } -emit_vptestmw_k_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: YMM, src2: Mem256) { append(instructions, inst_vptestmw_k_ymm_m256(dst, src, src2)) } -emit_vptestmw_k_zmm_zmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: ZMM, src2: ZMM) { append(instructions, inst_vptestmw_k_zmm_zmm(dst, src, src2)) } -emit_vptestmw_k_zmm_m512 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: ZMM, src2: Mem512) { append(instructions, inst_vptestmw_k_zmm_m512(dst, src, src2)) } +emit_vptestmw_k_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: XMM, src2: XMM) { append_elem(instructions, inst_vptestmw_k_xmm_xmm(dst, src, src2)) } +emit_vptestmw_k_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: XMM, src2: Mem128) { append_elem(instructions, inst_vptestmw_k_xmm_m128(dst, src, src2)) } +emit_vptestmw_k_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: YMM, src2: YMM) { append_elem(instructions, inst_vptestmw_k_ymm_ymm(dst, src, src2)) } +emit_vptestmw_k_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: YMM, src2: Mem256) { append_elem(instructions, inst_vptestmw_k_ymm_m256(dst, src, src2)) } +emit_vptestmw_k_zmm_zmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: ZMM, src2: ZMM) { append_elem(instructions, inst_vptestmw_k_zmm_zmm(dst, src, src2)) } +emit_vptestmw_k_zmm_m512 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: ZMM, src2: Mem512) { append_elem(instructions, inst_vptestmw_k_zmm_m512(dst, src, src2)) } inst_vptestmd_k_xmm_xmm :: #force_inline proc "contextless" (dst: KREG, src: XMM, src2: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPTESTMD, operand_count = 3, ops = {op_kreg(dst), op_xmm(src), op_xmm(src2), {}} }, 1739) } inst_vptestmd_k_xmm_m128 :: #force_inline proc "contextless" (dst: KREG, src: XMM, src2: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .VPTESTMD, operand_count = 3, ops = {op_kreg(dst), op_xmm(src), op_mem(src2.mem, 16), {}} }, 1739) } inst_vptestmd_k_ymm_ymm :: #force_inline proc "contextless" (dst: KREG, src: YMM, src2: YMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPTESTMD, operand_count = 3, ops = {op_kreg(dst), op_ymm(src), op_ymm(src2), {}} }, 1740) } inst_vptestmd_k_ymm_m256 :: #force_inline proc "contextless" (dst: KREG, src: YMM, src2: Mem256) -> Instruction { return with_hint(Instruction{ mnemonic = .VPTESTMD, operand_count = 3, ops = {op_kreg(dst), op_ymm(src), op_mem(src2.mem, 32), {}} }, 1740) } inst_vptestmd_k_zmm_zmm :: #force_inline proc "contextless" (dst: KREG, src: ZMM, src2: ZMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPTESTMD, operand_count = 3, ops = {op_kreg(dst), op_zmm(src), op_zmm(src2), {}} }, 1741) } inst_vptestmd_k_zmm_m512 :: #force_inline proc "contextless" (dst: KREG, src: ZMM, src2: Mem512) -> Instruction { return with_hint(Instruction{ mnemonic = .VPTESTMD, operand_count = 3, ops = {op_kreg(dst), op_zmm(src), op_mem(src2.mem, 64), {}} }, 1741) } -emit_vptestmd_k_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: XMM, src2: XMM) { append(instructions, inst_vptestmd_k_xmm_xmm(dst, src, src2)) } -emit_vptestmd_k_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: XMM, src2: Mem128) { append(instructions, inst_vptestmd_k_xmm_m128(dst, src, src2)) } -emit_vptestmd_k_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: YMM, src2: YMM) { append(instructions, inst_vptestmd_k_ymm_ymm(dst, src, src2)) } -emit_vptestmd_k_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: YMM, src2: Mem256) { append(instructions, inst_vptestmd_k_ymm_m256(dst, src, src2)) } -emit_vptestmd_k_zmm_zmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: ZMM, src2: ZMM) { append(instructions, inst_vptestmd_k_zmm_zmm(dst, src, src2)) } -emit_vptestmd_k_zmm_m512 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: ZMM, src2: Mem512) { append(instructions, inst_vptestmd_k_zmm_m512(dst, src, src2)) } +emit_vptestmd_k_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: XMM, src2: XMM) { append_elem(instructions, inst_vptestmd_k_xmm_xmm(dst, src, src2)) } +emit_vptestmd_k_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: XMM, src2: Mem128) { append_elem(instructions, inst_vptestmd_k_xmm_m128(dst, src, src2)) } +emit_vptestmd_k_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: YMM, src2: YMM) { append_elem(instructions, inst_vptestmd_k_ymm_ymm(dst, src, src2)) } +emit_vptestmd_k_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: YMM, src2: Mem256) { append_elem(instructions, inst_vptestmd_k_ymm_m256(dst, src, src2)) } +emit_vptestmd_k_zmm_zmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: ZMM, src2: ZMM) { append_elem(instructions, inst_vptestmd_k_zmm_zmm(dst, src, src2)) } +emit_vptestmd_k_zmm_m512 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: ZMM, src2: Mem512) { append_elem(instructions, inst_vptestmd_k_zmm_m512(dst, src, src2)) } inst_vptestmq_k_xmm_xmm :: #force_inline proc "contextless" (dst: KREG, src: XMM, src2: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPTESTMQ, operand_count = 3, ops = {op_kreg(dst), op_xmm(src), op_xmm(src2), {}} }, 1742) } inst_vptestmq_k_xmm_m128 :: #force_inline proc "contextless" (dst: KREG, src: XMM, src2: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .VPTESTMQ, operand_count = 3, ops = {op_kreg(dst), op_xmm(src), op_mem(src2.mem, 16), {}} }, 1742) } inst_vptestmq_k_ymm_ymm :: #force_inline proc "contextless" (dst: KREG, src: YMM, src2: YMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPTESTMQ, operand_count = 3, ops = {op_kreg(dst), op_ymm(src), op_ymm(src2), {}} }, 1743) } inst_vptestmq_k_ymm_m256 :: #force_inline proc "contextless" (dst: KREG, src: YMM, src2: Mem256) -> Instruction { return with_hint(Instruction{ mnemonic = .VPTESTMQ, operand_count = 3, ops = {op_kreg(dst), op_ymm(src), op_mem(src2.mem, 32), {}} }, 1743) } inst_vptestmq_k_zmm_zmm :: #force_inline proc "contextless" (dst: KREG, src: ZMM, src2: ZMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPTESTMQ, operand_count = 3, ops = {op_kreg(dst), op_zmm(src), op_zmm(src2), {}} }, 1744) } inst_vptestmq_k_zmm_m512 :: #force_inline proc "contextless" (dst: KREG, src: ZMM, src2: Mem512) -> Instruction { return with_hint(Instruction{ mnemonic = .VPTESTMQ, operand_count = 3, ops = {op_kreg(dst), op_zmm(src), op_mem(src2.mem, 64), {}} }, 1744) } -emit_vptestmq_k_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: XMM, src2: XMM) { append(instructions, inst_vptestmq_k_xmm_xmm(dst, src, src2)) } -emit_vptestmq_k_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: XMM, src2: Mem128) { append(instructions, inst_vptestmq_k_xmm_m128(dst, src, src2)) } -emit_vptestmq_k_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: YMM, src2: YMM) { append(instructions, inst_vptestmq_k_ymm_ymm(dst, src, src2)) } -emit_vptestmq_k_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: YMM, src2: Mem256) { append(instructions, inst_vptestmq_k_ymm_m256(dst, src, src2)) } -emit_vptestmq_k_zmm_zmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: ZMM, src2: ZMM) { append(instructions, inst_vptestmq_k_zmm_zmm(dst, src, src2)) } -emit_vptestmq_k_zmm_m512 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: ZMM, src2: Mem512) { append(instructions, inst_vptestmq_k_zmm_m512(dst, src, src2)) } +emit_vptestmq_k_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: XMM, src2: XMM) { append_elem(instructions, inst_vptestmq_k_xmm_xmm(dst, src, src2)) } +emit_vptestmq_k_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: XMM, src2: Mem128) { append_elem(instructions, inst_vptestmq_k_xmm_m128(dst, src, src2)) } +emit_vptestmq_k_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: YMM, src2: YMM) { append_elem(instructions, inst_vptestmq_k_ymm_ymm(dst, src, src2)) } +emit_vptestmq_k_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: YMM, src2: Mem256) { append_elem(instructions, inst_vptestmq_k_ymm_m256(dst, src, src2)) } +emit_vptestmq_k_zmm_zmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: ZMM, src2: ZMM) { append_elem(instructions, inst_vptestmq_k_zmm_zmm(dst, src, src2)) } +emit_vptestmq_k_zmm_m512 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: ZMM, src2: Mem512) { append_elem(instructions, inst_vptestmq_k_zmm_m512(dst, src, src2)) } inst_vptestnmb_k_xmm_xmm :: #force_inline proc "contextless" (dst: KREG, src: XMM, src2: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPTESTNMB, operand_count = 3, ops = {op_kreg(dst), op_xmm(src), op_xmm(src2), {}} }, 1745) } inst_vptestnmb_k_xmm_m128 :: #force_inline proc "contextless" (dst: KREG, src: XMM, src2: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .VPTESTNMB, operand_count = 3, ops = {op_kreg(dst), op_xmm(src), op_mem(src2.mem, 16), {}} }, 1745) } inst_vptestnmb_k_ymm_ymm :: #force_inline proc "contextless" (dst: KREG, src: YMM, src2: YMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPTESTNMB, operand_count = 3, ops = {op_kreg(dst), op_ymm(src), op_ymm(src2), {}} }, 1746) } inst_vptestnmb_k_ymm_m256 :: #force_inline proc "contextless" (dst: KREG, src: YMM, src2: Mem256) -> Instruction { return with_hint(Instruction{ mnemonic = .VPTESTNMB, operand_count = 3, ops = {op_kreg(dst), op_ymm(src), op_mem(src2.mem, 32), {}} }, 1746) } inst_vptestnmb_k_zmm_zmm :: #force_inline proc "contextless" (dst: KREG, src: ZMM, src2: ZMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPTESTNMB, operand_count = 3, ops = {op_kreg(dst), op_zmm(src), op_zmm(src2), {}} }, 1747) } inst_vptestnmb_k_zmm_m512 :: #force_inline proc "contextless" (dst: KREG, src: ZMM, src2: Mem512) -> Instruction { return with_hint(Instruction{ mnemonic = .VPTESTNMB, operand_count = 3, ops = {op_kreg(dst), op_zmm(src), op_mem(src2.mem, 64), {}} }, 1747) } -emit_vptestnmb_k_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: XMM, src2: XMM) { append(instructions, inst_vptestnmb_k_xmm_xmm(dst, src, src2)) } -emit_vptestnmb_k_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: XMM, src2: Mem128) { append(instructions, inst_vptestnmb_k_xmm_m128(dst, src, src2)) } -emit_vptestnmb_k_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: YMM, src2: YMM) { append(instructions, inst_vptestnmb_k_ymm_ymm(dst, src, src2)) } -emit_vptestnmb_k_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: YMM, src2: Mem256) { append(instructions, inst_vptestnmb_k_ymm_m256(dst, src, src2)) } -emit_vptestnmb_k_zmm_zmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: ZMM, src2: ZMM) { append(instructions, inst_vptestnmb_k_zmm_zmm(dst, src, src2)) } -emit_vptestnmb_k_zmm_m512 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: ZMM, src2: Mem512) { append(instructions, inst_vptestnmb_k_zmm_m512(dst, src, src2)) } +emit_vptestnmb_k_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: XMM, src2: XMM) { append_elem(instructions, inst_vptestnmb_k_xmm_xmm(dst, src, src2)) } +emit_vptestnmb_k_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: XMM, src2: Mem128) { append_elem(instructions, inst_vptestnmb_k_xmm_m128(dst, src, src2)) } +emit_vptestnmb_k_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: YMM, src2: YMM) { append_elem(instructions, inst_vptestnmb_k_ymm_ymm(dst, src, src2)) } +emit_vptestnmb_k_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: YMM, src2: Mem256) { append_elem(instructions, inst_vptestnmb_k_ymm_m256(dst, src, src2)) } +emit_vptestnmb_k_zmm_zmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: ZMM, src2: ZMM) { append_elem(instructions, inst_vptestnmb_k_zmm_zmm(dst, src, src2)) } +emit_vptestnmb_k_zmm_m512 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: ZMM, src2: Mem512) { append_elem(instructions, inst_vptestnmb_k_zmm_m512(dst, src, src2)) } inst_vptestnmw_k_xmm_xmm :: #force_inline proc "contextless" (dst: KREG, src: XMM, src2: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPTESTNMW, operand_count = 3, ops = {op_kreg(dst), op_xmm(src), op_xmm(src2), {}} }, 1748) } inst_vptestnmw_k_xmm_m128 :: #force_inline proc "contextless" (dst: KREG, src: XMM, src2: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .VPTESTNMW, operand_count = 3, ops = {op_kreg(dst), op_xmm(src), op_mem(src2.mem, 16), {}} }, 1748) } inst_vptestnmw_k_ymm_ymm :: #force_inline proc "contextless" (dst: KREG, src: YMM, src2: YMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPTESTNMW, operand_count = 3, ops = {op_kreg(dst), op_ymm(src), op_ymm(src2), {}} }, 1749) } inst_vptestnmw_k_ymm_m256 :: #force_inline proc "contextless" (dst: KREG, src: YMM, src2: Mem256) -> Instruction { return with_hint(Instruction{ mnemonic = .VPTESTNMW, operand_count = 3, ops = {op_kreg(dst), op_ymm(src), op_mem(src2.mem, 32), {}} }, 1749) } inst_vptestnmw_k_zmm_zmm :: #force_inline proc "contextless" (dst: KREG, src: ZMM, src2: ZMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPTESTNMW, operand_count = 3, ops = {op_kreg(dst), op_zmm(src), op_zmm(src2), {}} }, 1750) } inst_vptestnmw_k_zmm_m512 :: #force_inline proc "contextless" (dst: KREG, src: ZMM, src2: Mem512) -> Instruction { return with_hint(Instruction{ mnemonic = .VPTESTNMW, operand_count = 3, ops = {op_kreg(dst), op_zmm(src), op_mem(src2.mem, 64), {}} }, 1750) } -emit_vptestnmw_k_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: XMM, src2: XMM) { append(instructions, inst_vptestnmw_k_xmm_xmm(dst, src, src2)) } -emit_vptestnmw_k_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: XMM, src2: Mem128) { append(instructions, inst_vptestnmw_k_xmm_m128(dst, src, src2)) } -emit_vptestnmw_k_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: YMM, src2: YMM) { append(instructions, inst_vptestnmw_k_ymm_ymm(dst, src, src2)) } -emit_vptestnmw_k_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: YMM, src2: Mem256) { append(instructions, inst_vptestnmw_k_ymm_m256(dst, src, src2)) } -emit_vptestnmw_k_zmm_zmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: ZMM, src2: ZMM) { append(instructions, inst_vptestnmw_k_zmm_zmm(dst, src, src2)) } -emit_vptestnmw_k_zmm_m512 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: ZMM, src2: Mem512) { append(instructions, inst_vptestnmw_k_zmm_m512(dst, src, src2)) } +emit_vptestnmw_k_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: XMM, src2: XMM) { append_elem(instructions, inst_vptestnmw_k_xmm_xmm(dst, src, src2)) } +emit_vptestnmw_k_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: XMM, src2: Mem128) { append_elem(instructions, inst_vptestnmw_k_xmm_m128(dst, src, src2)) } +emit_vptestnmw_k_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: YMM, src2: YMM) { append_elem(instructions, inst_vptestnmw_k_ymm_ymm(dst, src, src2)) } +emit_vptestnmw_k_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: YMM, src2: Mem256) { append_elem(instructions, inst_vptestnmw_k_ymm_m256(dst, src, src2)) } +emit_vptestnmw_k_zmm_zmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: ZMM, src2: ZMM) { append_elem(instructions, inst_vptestnmw_k_zmm_zmm(dst, src, src2)) } +emit_vptestnmw_k_zmm_m512 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: ZMM, src2: Mem512) { append_elem(instructions, inst_vptestnmw_k_zmm_m512(dst, src, src2)) } inst_vptestnmd_k_xmm_xmm :: #force_inline proc "contextless" (dst: KREG, src: XMM, src2: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPTESTNMD, operand_count = 3, ops = {op_kreg(dst), op_xmm(src), op_xmm(src2), {}} }, 1751) } inst_vptestnmd_k_xmm_m128 :: #force_inline proc "contextless" (dst: KREG, src: XMM, src2: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .VPTESTNMD, operand_count = 3, ops = {op_kreg(dst), op_xmm(src), op_mem(src2.mem, 16), {}} }, 1751) } inst_vptestnmd_k_ymm_ymm :: #force_inline proc "contextless" (dst: KREG, src: YMM, src2: YMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPTESTNMD, operand_count = 3, ops = {op_kreg(dst), op_ymm(src), op_ymm(src2), {}} }, 1752) } inst_vptestnmd_k_ymm_m256 :: #force_inline proc "contextless" (dst: KREG, src: YMM, src2: Mem256) -> Instruction { return with_hint(Instruction{ mnemonic = .VPTESTNMD, operand_count = 3, ops = {op_kreg(dst), op_ymm(src), op_mem(src2.mem, 32), {}} }, 1752) } inst_vptestnmd_k_zmm_zmm :: #force_inline proc "contextless" (dst: KREG, src: ZMM, src2: ZMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPTESTNMD, operand_count = 3, ops = {op_kreg(dst), op_zmm(src), op_zmm(src2), {}} }, 1753) } inst_vptestnmd_k_zmm_m512 :: #force_inline proc "contextless" (dst: KREG, src: ZMM, src2: Mem512) -> Instruction { return with_hint(Instruction{ mnemonic = .VPTESTNMD, operand_count = 3, ops = {op_kreg(dst), op_zmm(src), op_mem(src2.mem, 64), {}} }, 1753) } -emit_vptestnmd_k_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: XMM, src2: XMM) { append(instructions, inst_vptestnmd_k_xmm_xmm(dst, src, src2)) } -emit_vptestnmd_k_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: XMM, src2: Mem128) { append(instructions, inst_vptestnmd_k_xmm_m128(dst, src, src2)) } -emit_vptestnmd_k_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: YMM, src2: YMM) { append(instructions, inst_vptestnmd_k_ymm_ymm(dst, src, src2)) } -emit_vptestnmd_k_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: YMM, src2: Mem256) { append(instructions, inst_vptestnmd_k_ymm_m256(dst, src, src2)) } -emit_vptestnmd_k_zmm_zmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: ZMM, src2: ZMM) { append(instructions, inst_vptestnmd_k_zmm_zmm(dst, src, src2)) } -emit_vptestnmd_k_zmm_m512 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: ZMM, src2: Mem512) { append(instructions, inst_vptestnmd_k_zmm_m512(dst, src, src2)) } +emit_vptestnmd_k_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: XMM, src2: XMM) { append_elem(instructions, inst_vptestnmd_k_xmm_xmm(dst, src, src2)) } +emit_vptestnmd_k_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: XMM, src2: Mem128) { append_elem(instructions, inst_vptestnmd_k_xmm_m128(dst, src, src2)) } +emit_vptestnmd_k_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: YMM, src2: YMM) { append_elem(instructions, inst_vptestnmd_k_ymm_ymm(dst, src, src2)) } +emit_vptestnmd_k_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: YMM, src2: Mem256) { append_elem(instructions, inst_vptestnmd_k_ymm_m256(dst, src, src2)) } +emit_vptestnmd_k_zmm_zmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: ZMM, src2: ZMM) { append_elem(instructions, inst_vptestnmd_k_zmm_zmm(dst, src, src2)) } +emit_vptestnmd_k_zmm_m512 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: ZMM, src2: Mem512) { append_elem(instructions, inst_vptestnmd_k_zmm_m512(dst, src, src2)) } inst_vptestnmq_k_xmm_xmm :: #force_inline proc "contextless" (dst: KREG, src: XMM, src2: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPTESTNMQ, operand_count = 3, ops = {op_kreg(dst), op_xmm(src), op_xmm(src2), {}} }, 1754) } inst_vptestnmq_k_xmm_m128 :: #force_inline proc "contextless" (dst: KREG, src: XMM, src2: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .VPTESTNMQ, operand_count = 3, ops = {op_kreg(dst), op_xmm(src), op_mem(src2.mem, 16), {}} }, 1754) } inst_vptestnmq_k_ymm_ymm :: #force_inline proc "contextless" (dst: KREG, src: YMM, src2: YMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPTESTNMQ, operand_count = 3, ops = {op_kreg(dst), op_ymm(src), op_ymm(src2), {}} }, 1755) } inst_vptestnmq_k_ymm_m256 :: #force_inline proc "contextless" (dst: KREG, src: YMM, src2: Mem256) -> Instruction { return with_hint(Instruction{ mnemonic = .VPTESTNMQ, operand_count = 3, ops = {op_kreg(dst), op_ymm(src), op_mem(src2.mem, 32), {}} }, 1755) } inst_vptestnmq_k_zmm_zmm :: #force_inline proc "contextless" (dst: KREG, src: ZMM, src2: ZMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPTESTNMQ, operand_count = 3, ops = {op_kreg(dst), op_zmm(src), op_zmm(src2), {}} }, 1756) } inst_vptestnmq_k_zmm_m512 :: #force_inline proc "contextless" (dst: KREG, src: ZMM, src2: Mem512) -> Instruction { return with_hint(Instruction{ mnemonic = .VPTESTNMQ, operand_count = 3, ops = {op_kreg(dst), op_zmm(src), op_mem(src2.mem, 64), {}} }, 1756) } -emit_vptestnmq_k_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: XMM, src2: XMM) { append(instructions, inst_vptestnmq_k_xmm_xmm(dst, src, src2)) } -emit_vptestnmq_k_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: XMM, src2: Mem128) { append(instructions, inst_vptestnmq_k_xmm_m128(dst, src, src2)) } -emit_vptestnmq_k_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: YMM, src2: YMM) { append(instructions, inst_vptestnmq_k_ymm_ymm(dst, src, src2)) } -emit_vptestnmq_k_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: YMM, src2: Mem256) { append(instructions, inst_vptestnmq_k_ymm_m256(dst, src, src2)) } -emit_vptestnmq_k_zmm_zmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: ZMM, src2: ZMM) { append(instructions, inst_vptestnmq_k_zmm_zmm(dst, src, src2)) } -emit_vptestnmq_k_zmm_m512 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: ZMM, src2: Mem512) { append(instructions, inst_vptestnmq_k_zmm_m512(dst, src, src2)) } +emit_vptestnmq_k_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: XMM, src2: XMM) { append_elem(instructions, inst_vptestnmq_k_xmm_xmm(dst, src, src2)) } +emit_vptestnmq_k_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: XMM, src2: Mem128) { append_elem(instructions, inst_vptestnmq_k_xmm_m128(dst, src, src2)) } +emit_vptestnmq_k_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: YMM, src2: YMM) { append_elem(instructions, inst_vptestnmq_k_ymm_ymm(dst, src, src2)) } +emit_vptestnmq_k_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: YMM, src2: Mem256) { append_elem(instructions, inst_vptestnmq_k_ymm_m256(dst, src, src2)) } +emit_vptestnmq_k_zmm_zmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: ZMM, src2: ZMM) { append_elem(instructions, inst_vptestnmq_k_zmm_zmm(dst, src, src2)) } +emit_vptestnmq_k_zmm_m512 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: ZMM, src2: Mem512) { append_elem(instructions, inst_vptestnmq_k_zmm_m512(dst, src, src2)) } inst_vpcompressd_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPCOMPRESSD, operand_count = 2, ops = {op_xmm(dst), op_xmm(src), {}, {}} }, 1757) } inst_vpcompressd_m128_xmm :: #force_inline proc "contextless" (dst: Mem128, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPCOMPRESSD, operand_count = 2, ops = {op_mem(dst.mem, 16), op_xmm(src), {}, {}} }, 1757) } inst_vpcompressd_ymm_ymm :: #force_inline proc "contextless" (dst: YMM, src: YMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPCOMPRESSD, operand_count = 2, ops = {op_ymm(dst), op_ymm(src), {}, {}} }, 1758) } inst_vpcompressd_m256_ymm :: #force_inline proc "contextless" (dst: Mem256, src: YMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPCOMPRESSD, operand_count = 2, ops = {op_mem(dst.mem, 32), op_ymm(src), {}, {}} }, 1758) } inst_vpcompressd_zmm_zmm :: #force_inline proc "contextless" (dst: ZMM, src: ZMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPCOMPRESSD, operand_count = 2, ops = {op_zmm(dst), op_zmm(src), {}, {}} }, 1759) } inst_vpcompressd_m512_zmm :: #force_inline proc "contextless" (dst: Mem512, src: ZMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPCOMPRESSD, operand_count = 2, ops = {op_mem(dst.mem, 64), op_zmm(src), {}, {}} }, 1759) } -emit_vpcompressd_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append(instructions, inst_vpcompressd_xmm_xmm(dst, src)) } -emit_vpcompressd_m128_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem128, src: XMM) { append(instructions, inst_vpcompressd_m128_xmm(dst, src)) } -emit_vpcompressd_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM) { append(instructions, inst_vpcompressd_ymm_ymm(dst, src)) } -emit_vpcompressd_m256_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem256, src: YMM) { append(instructions, inst_vpcompressd_m256_ymm(dst, src)) } -emit_vpcompressd_zmm_zmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ZMM, src: ZMM) { append(instructions, inst_vpcompressd_zmm_zmm(dst, src)) } -emit_vpcompressd_m512_zmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem512, src: ZMM) { append(instructions, inst_vpcompressd_m512_zmm(dst, src)) } +emit_vpcompressd_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append_elem(instructions, inst_vpcompressd_xmm_xmm(dst, src)) } +emit_vpcompressd_m128_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem128, src: XMM) { append_elem(instructions, inst_vpcompressd_m128_xmm(dst, src)) } +emit_vpcompressd_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM) { append_elem(instructions, inst_vpcompressd_ymm_ymm(dst, src)) } +emit_vpcompressd_m256_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem256, src: YMM) { append_elem(instructions, inst_vpcompressd_m256_ymm(dst, src)) } +emit_vpcompressd_zmm_zmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ZMM, src: ZMM) { append_elem(instructions, inst_vpcompressd_zmm_zmm(dst, src)) } +emit_vpcompressd_m512_zmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem512, src: ZMM) { append_elem(instructions, inst_vpcompressd_m512_zmm(dst, src)) } inst_vpcompressq_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPCOMPRESSQ, operand_count = 2, ops = {op_xmm(dst), op_xmm(src), {}, {}} }, 1760) } inst_vpcompressq_m128_xmm :: #force_inline proc "contextless" (dst: Mem128, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPCOMPRESSQ, operand_count = 2, ops = {op_mem(dst.mem, 16), op_xmm(src), {}, {}} }, 1760) } inst_vpcompressq_ymm_ymm :: #force_inline proc "contextless" (dst: YMM, src: YMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPCOMPRESSQ, operand_count = 2, ops = {op_ymm(dst), op_ymm(src), {}, {}} }, 1761) } inst_vpcompressq_m256_ymm :: #force_inline proc "contextless" (dst: Mem256, src: YMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPCOMPRESSQ, operand_count = 2, ops = {op_mem(dst.mem, 32), op_ymm(src), {}, {}} }, 1761) } inst_vpcompressq_zmm_zmm :: #force_inline proc "contextless" (dst: ZMM, src: ZMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPCOMPRESSQ, operand_count = 2, ops = {op_zmm(dst), op_zmm(src), {}, {}} }, 1762) } inst_vpcompressq_m512_zmm :: #force_inline proc "contextless" (dst: Mem512, src: ZMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPCOMPRESSQ, operand_count = 2, ops = {op_mem(dst.mem, 64), op_zmm(src), {}, {}} }, 1762) } -emit_vpcompressq_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append(instructions, inst_vpcompressq_xmm_xmm(dst, src)) } -emit_vpcompressq_m128_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem128, src: XMM) { append(instructions, inst_vpcompressq_m128_xmm(dst, src)) } -emit_vpcompressq_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM) { append(instructions, inst_vpcompressq_ymm_ymm(dst, src)) } -emit_vpcompressq_m256_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem256, src: YMM) { append(instructions, inst_vpcompressq_m256_ymm(dst, src)) } -emit_vpcompressq_zmm_zmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ZMM, src: ZMM) { append(instructions, inst_vpcompressq_zmm_zmm(dst, src)) } -emit_vpcompressq_m512_zmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem512, src: ZMM) { append(instructions, inst_vpcompressq_m512_zmm(dst, src)) } +emit_vpcompressq_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append_elem(instructions, inst_vpcompressq_xmm_xmm(dst, src)) } +emit_vpcompressq_m128_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem128, src: XMM) { append_elem(instructions, inst_vpcompressq_m128_xmm(dst, src)) } +emit_vpcompressq_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM) { append_elem(instructions, inst_vpcompressq_ymm_ymm(dst, src)) } +emit_vpcompressq_m256_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem256, src: YMM) { append_elem(instructions, inst_vpcompressq_m256_ymm(dst, src)) } +emit_vpcompressq_zmm_zmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ZMM, src: ZMM) { append_elem(instructions, inst_vpcompressq_zmm_zmm(dst, src)) } +emit_vpcompressq_m512_zmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem512, src: ZMM) { append_elem(instructions, inst_vpcompressq_m512_zmm(dst, src)) } inst_vcompressps_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VCOMPRESSPS, operand_count = 2, ops = {op_xmm(dst), op_xmm(src), {}, {}} }, 1763) } inst_vcompressps_m128_xmm :: #force_inline proc "contextless" (dst: Mem128, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VCOMPRESSPS, operand_count = 2, ops = {op_mem(dst.mem, 16), op_xmm(src), {}, {}} }, 1763) } inst_vcompressps_ymm_ymm :: #force_inline proc "contextless" (dst: YMM, src: YMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VCOMPRESSPS, operand_count = 2, ops = {op_ymm(dst), op_ymm(src), {}, {}} }, 1764) } inst_vcompressps_m256_ymm :: #force_inline proc "contextless" (dst: Mem256, src: YMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VCOMPRESSPS, operand_count = 2, ops = {op_mem(dst.mem, 32), op_ymm(src), {}, {}} }, 1764) } inst_vcompressps_zmm_zmm :: #force_inline proc "contextless" (dst: ZMM, src: ZMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VCOMPRESSPS, operand_count = 2, ops = {op_zmm(dst), op_zmm(src), {}, {}} }, 1765) } inst_vcompressps_m512_zmm :: #force_inline proc "contextless" (dst: Mem512, src: ZMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VCOMPRESSPS, operand_count = 2, ops = {op_mem(dst.mem, 64), op_zmm(src), {}, {}} }, 1765) } -emit_vcompressps_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append(instructions, inst_vcompressps_xmm_xmm(dst, src)) } -emit_vcompressps_m128_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem128, src: XMM) { append(instructions, inst_vcompressps_m128_xmm(dst, src)) } -emit_vcompressps_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM) { append(instructions, inst_vcompressps_ymm_ymm(dst, src)) } -emit_vcompressps_m256_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem256, src: YMM) { append(instructions, inst_vcompressps_m256_ymm(dst, src)) } -emit_vcompressps_zmm_zmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ZMM, src: ZMM) { append(instructions, inst_vcompressps_zmm_zmm(dst, src)) } -emit_vcompressps_m512_zmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem512, src: ZMM) { append(instructions, inst_vcompressps_m512_zmm(dst, src)) } +emit_vcompressps_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append_elem(instructions, inst_vcompressps_xmm_xmm(dst, src)) } +emit_vcompressps_m128_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem128, src: XMM) { append_elem(instructions, inst_vcompressps_m128_xmm(dst, src)) } +emit_vcompressps_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM) { append_elem(instructions, inst_vcompressps_ymm_ymm(dst, src)) } +emit_vcompressps_m256_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem256, src: YMM) { append_elem(instructions, inst_vcompressps_m256_ymm(dst, src)) } +emit_vcompressps_zmm_zmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ZMM, src: ZMM) { append_elem(instructions, inst_vcompressps_zmm_zmm(dst, src)) } +emit_vcompressps_m512_zmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem512, src: ZMM) { append_elem(instructions, inst_vcompressps_m512_zmm(dst, src)) } inst_vcompresspd_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VCOMPRESSPD, operand_count = 2, ops = {op_xmm(dst), op_xmm(src), {}, {}} }, 1766) } inst_vcompresspd_m128_xmm :: #force_inline proc "contextless" (dst: Mem128, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VCOMPRESSPD, operand_count = 2, ops = {op_mem(dst.mem, 16), op_xmm(src), {}, {}} }, 1766) } inst_vcompresspd_ymm_ymm :: #force_inline proc "contextless" (dst: YMM, src: YMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VCOMPRESSPD, operand_count = 2, ops = {op_ymm(dst), op_ymm(src), {}, {}} }, 1767) } inst_vcompresspd_m256_ymm :: #force_inline proc "contextless" (dst: Mem256, src: YMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VCOMPRESSPD, operand_count = 2, ops = {op_mem(dst.mem, 32), op_ymm(src), {}, {}} }, 1767) } inst_vcompresspd_zmm_zmm :: #force_inline proc "contextless" (dst: ZMM, src: ZMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VCOMPRESSPD, operand_count = 2, ops = {op_zmm(dst), op_zmm(src), {}, {}} }, 1768) } inst_vcompresspd_m512_zmm :: #force_inline proc "contextless" (dst: Mem512, src: ZMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VCOMPRESSPD, operand_count = 2, ops = {op_mem(dst.mem, 64), op_zmm(src), {}, {}} }, 1768) } -emit_vcompresspd_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append(instructions, inst_vcompresspd_xmm_xmm(dst, src)) } -emit_vcompresspd_m128_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem128, src: XMM) { append(instructions, inst_vcompresspd_m128_xmm(dst, src)) } -emit_vcompresspd_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM) { append(instructions, inst_vcompresspd_ymm_ymm(dst, src)) } -emit_vcompresspd_m256_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem256, src: YMM) { append(instructions, inst_vcompresspd_m256_ymm(dst, src)) } -emit_vcompresspd_zmm_zmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ZMM, src: ZMM) { append(instructions, inst_vcompresspd_zmm_zmm(dst, src)) } -emit_vcompresspd_m512_zmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem512, src: ZMM) { append(instructions, inst_vcompresspd_m512_zmm(dst, src)) } +emit_vcompresspd_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append_elem(instructions, inst_vcompresspd_xmm_xmm(dst, src)) } +emit_vcompresspd_m128_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem128, src: XMM) { append_elem(instructions, inst_vcompresspd_m128_xmm(dst, src)) } +emit_vcompresspd_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM) { append_elem(instructions, inst_vcompresspd_ymm_ymm(dst, src)) } +emit_vcompresspd_m256_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem256, src: YMM) { append_elem(instructions, inst_vcompresspd_m256_ymm(dst, src)) } +emit_vcompresspd_zmm_zmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ZMM, src: ZMM) { append_elem(instructions, inst_vcompresspd_zmm_zmm(dst, src)) } +emit_vcompresspd_m512_zmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem512, src: ZMM) { append_elem(instructions, inst_vcompresspd_m512_zmm(dst, src)) } inst_vpexpandd_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPEXPANDD, operand_count = 2, ops = {op_xmm(dst), op_xmm(src), {}, {}} }, 1769) } inst_vpexpandd_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .VPEXPANDD, operand_count = 2, ops = {op_xmm(dst), op_mem(src.mem, 16), {}, {}} }, 1769) } inst_vpexpandd_ymm_ymm :: #force_inline proc "contextless" (dst: YMM, src: YMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPEXPANDD, operand_count = 2, ops = {op_ymm(dst), op_ymm(src), {}, {}} }, 1770) } inst_vpexpandd_ymm_m256 :: #force_inline proc "contextless" (dst: YMM, src: Mem256) -> Instruction { return with_hint(Instruction{ mnemonic = .VPEXPANDD, operand_count = 2, ops = {op_ymm(dst), op_mem(src.mem, 32), {}, {}} }, 1770) } inst_vpexpandd_zmm_zmm :: #force_inline proc "contextless" (dst: ZMM, src: ZMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPEXPANDD, operand_count = 2, ops = {op_zmm(dst), op_zmm(src), {}, {}} }, 1771) } inst_vpexpandd_zmm_m512 :: #force_inline proc "contextless" (dst: ZMM, src: Mem512) -> Instruction { return with_hint(Instruction{ mnemonic = .VPEXPANDD, operand_count = 2, ops = {op_zmm(dst), op_mem(src.mem, 64), {}, {}} }, 1771) } -emit_vpexpandd_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append(instructions, inst_vpexpandd_xmm_xmm(dst, src)) } -emit_vpexpandd_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append(instructions, inst_vpexpandd_xmm_m128(dst, src)) } -emit_vpexpandd_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM) { append(instructions, inst_vpexpandd_ymm_ymm(dst, src)) } -emit_vpexpandd_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: Mem256) { append(instructions, inst_vpexpandd_ymm_m256(dst, src)) } -emit_vpexpandd_zmm_zmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ZMM, src: ZMM) { append(instructions, inst_vpexpandd_zmm_zmm(dst, src)) } -emit_vpexpandd_zmm_m512 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ZMM, src: Mem512) { append(instructions, inst_vpexpandd_zmm_m512(dst, src)) } +emit_vpexpandd_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append_elem(instructions, inst_vpexpandd_xmm_xmm(dst, src)) } +emit_vpexpandd_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append_elem(instructions, inst_vpexpandd_xmm_m128(dst, src)) } +emit_vpexpandd_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM) { append_elem(instructions, inst_vpexpandd_ymm_ymm(dst, src)) } +emit_vpexpandd_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: Mem256) { append_elem(instructions, inst_vpexpandd_ymm_m256(dst, src)) } +emit_vpexpandd_zmm_zmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ZMM, src: ZMM) { append_elem(instructions, inst_vpexpandd_zmm_zmm(dst, src)) } +emit_vpexpandd_zmm_m512 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ZMM, src: Mem512) { append_elem(instructions, inst_vpexpandd_zmm_m512(dst, src)) } inst_vpexpandq_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPEXPANDQ, operand_count = 2, ops = {op_xmm(dst), op_xmm(src), {}, {}} }, 1772) } inst_vpexpandq_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .VPEXPANDQ, operand_count = 2, ops = {op_xmm(dst), op_mem(src.mem, 16), {}, {}} }, 1772) } inst_vpexpandq_ymm_ymm :: #force_inline proc "contextless" (dst: YMM, src: YMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPEXPANDQ, operand_count = 2, ops = {op_ymm(dst), op_ymm(src), {}, {}} }, 1773) } inst_vpexpandq_ymm_m256 :: #force_inline proc "contextless" (dst: YMM, src: Mem256) -> Instruction { return with_hint(Instruction{ mnemonic = .VPEXPANDQ, operand_count = 2, ops = {op_ymm(dst), op_mem(src.mem, 32), {}, {}} }, 1773) } inst_vpexpandq_zmm_zmm :: #force_inline proc "contextless" (dst: ZMM, src: ZMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPEXPANDQ, operand_count = 2, ops = {op_zmm(dst), op_zmm(src), {}, {}} }, 1774) } inst_vpexpandq_zmm_m512 :: #force_inline proc "contextless" (dst: ZMM, src: Mem512) -> Instruction { return with_hint(Instruction{ mnemonic = .VPEXPANDQ, operand_count = 2, ops = {op_zmm(dst), op_mem(src.mem, 64), {}, {}} }, 1774) } -emit_vpexpandq_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append(instructions, inst_vpexpandq_xmm_xmm(dst, src)) } -emit_vpexpandq_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append(instructions, inst_vpexpandq_xmm_m128(dst, src)) } -emit_vpexpandq_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM) { append(instructions, inst_vpexpandq_ymm_ymm(dst, src)) } -emit_vpexpandq_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: Mem256) { append(instructions, inst_vpexpandq_ymm_m256(dst, src)) } -emit_vpexpandq_zmm_zmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ZMM, src: ZMM) { append(instructions, inst_vpexpandq_zmm_zmm(dst, src)) } -emit_vpexpandq_zmm_m512 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ZMM, src: Mem512) { append(instructions, inst_vpexpandq_zmm_m512(dst, src)) } +emit_vpexpandq_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append_elem(instructions, inst_vpexpandq_xmm_xmm(dst, src)) } +emit_vpexpandq_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append_elem(instructions, inst_vpexpandq_xmm_m128(dst, src)) } +emit_vpexpandq_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM) { append_elem(instructions, inst_vpexpandq_ymm_ymm(dst, src)) } +emit_vpexpandq_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: Mem256) { append_elem(instructions, inst_vpexpandq_ymm_m256(dst, src)) } +emit_vpexpandq_zmm_zmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ZMM, src: ZMM) { append_elem(instructions, inst_vpexpandq_zmm_zmm(dst, src)) } +emit_vpexpandq_zmm_m512 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ZMM, src: Mem512) { append_elem(instructions, inst_vpexpandq_zmm_m512(dst, src)) } inst_vexpandps_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VEXPANDPS, operand_count = 2, ops = {op_xmm(dst), op_xmm(src), {}, {}} }, 1775) } inst_vexpandps_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .VEXPANDPS, operand_count = 2, ops = {op_xmm(dst), op_mem(src.mem, 16), {}, {}} }, 1775) } inst_vexpandps_ymm_ymm :: #force_inline proc "contextless" (dst: YMM, src: YMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VEXPANDPS, operand_count = 2, ops = {op_ymm(dst), op_ymm(src), {}, {}} }, 1776) } inst_vexpandps_ymm_m256 :: #force_inline proc "contextless" (dst: YMM, src: Mem256) -> Instruction { return with_hint(Instruction{ mnemonic = .VEXPANDPS, operand_count = 2, ops = {op_ymm(dst), op_mem(src.mem, 32), {}, {}} }, 1776) } inst_vexpandps_zmm_zmm :: #force_inline proc "contextless" (dst: ZMM, src: ZMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VEXPANDPS, operand_count = 2, ops = {op_zmm(dst), op_zmm(src), {}, {}} }, 1777) } inst_vexpandps_zmm_m512 :: #force_inline proc "contextless" (dst: ZMM, src: Mem512) -> Instruction { return with_hint(Instruction{ mnemonic = .VEXPANDPS, operand_count = 2, ops = {op_zmm(dst), op_mem(src.mem, 64), {}, {}} }, 1777) } -emit_vexpandps_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append(instructions, inst_vexpandps_xmm_xmm(dst, src)) } -emit_vexpandps_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append(instructions, inst_vexpandps_xmm_m128(dst, src)) } -emit_vexpandps_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM) { append(instructions, inst_vexpandps_ymm_ymm(dst, src)) } -emit_vexpandps_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: Mem256) { append(instructions, inst_vexpandps_ymm_m256(dst, src)) } -emit_vexpandps_zmm_zmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ZMM, src: ZMM) { append(instructions, inst_vexpandps_zmm_zmm(dst, src)) } -emit_vexpandps_zmm_m512 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ZMM, src: Mem512) { append(instructions, inst_vexpandps_zmm_m512(dst, src)) } +emit_vexpandps_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append_elem(instructions, inst_vexpandps_xmm_xmm(dst, src)) } +emit_vexpandps_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append_elem(instructions, inst_vexpandps_xmm_m128(dst, src)) } +emit_vexpandps_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM) { append_elem(instructions, inst_vexpandps_ymm_ymm(dst, src)) } +emit_vexpandps_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: Mem256) { append_elem(instructions, inst_vexpandps_ymm_m256(dst, src)) } +emit_vexpandps_zmm_zmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ZMM, src: ZMM) { append_elem(instructions, inst_vexpandps_zmm_zmm(dst, src)) } +emit_vexpandps_zmm_m512 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ZMM, src: Mem512) { append_elem(instructions, inst_vexpandps_zmm_m512(dst, src)) } inst_vexpandpd_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VEXPANDPD, operand_count = 2, ops = {op_xmm(dst), op_xmm(src), {}, {}} }, 1778) } inst_vexpandpd_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .VEXPANDPD, operand_count = 2, ops = {op_xmm(dst), op_mem(src.mem, 16), {}, {}} }, 1778) } inst_vexpandpd_ymm_ymm :: #force_inline proc "contextless" (dst: YMM, src: YMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VEXPANDPD, operand_count = 2, ops = {op_ymm(dst), op_ymm(src), {}, {}} }, 1779) } inst_vexpandpd_ymm_m256 :: #force_inline proc "contextless" (dst: YMM, src: Mem256) -> Instruction { return with_hint(Instruction{ mnemonic = .VEXPANDPD, operand_count = 2, ops = {op_ymm(dst), op_mem(src.mem, 32), {}, {}} }, 1779) } inst_vexpandpd_zmm_zmm :: #force_inline proc "contextless" (dst: ZMM, src: ZMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VEXPANDPD, operand_count = 2, ops = {op_zmm(dst), op_zmm(src), {}, {}} }, 1780) } inst_vexpandpd_zmm_m512 :: #force_inline proc "contextless" (dst: ZMM, src: Mem512) -> Instruction { return with_hint(Instruction{ mnemonic = .VEXPANDPD, operand_count = 2, ops = {op_zmm(dst), op_mem(src.mem, 64), {}, {}} }, 1780) } -emit_vexpandpd_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append(instructions, inst_vexpandpd_xmm_xmm(dst, src)) } -emit_vexpandpd_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append(instructions, inst_vexpandpd_xmm_m128(dst, src)) } -emit_vexpandpd_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM) { append(instructions, inst_vexpandpd_ymm_ymm(dst, src)) } -emit_vexpandpd_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: Mem256) { append(instructions, inst_vexpandpd_ymm_m256(dst, src)) } -emit_vexpandpd_zmm_zmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ZMM, src: ZMM) { append(instructions, inst_vexpandpd_zmm_zmm(dst, src)) } -emit_vexpandpd_zmm_m512 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ZMM, src: Mem512) { append(instructions, inst_vexpandpd_zmm_m512(dst, src)) } +emit_vexpandpd_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append_elem(instructions, inst_vexpandpd_xmm_xmm(dst, src)) } +emit_vexpandpd_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append_elem(instructions, inst_vexpandpd_xmm_m128(dst, src)) } +emit_vexpandpd_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM) { append_elem(instructions, inst_vexpandpd_ymm_ymm(dst, src)) } +emit_vexpandpd_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: Mem256) { append_elem(instructions, inst_vexpandpd_ymm_m256(dst, src)) } +emit_vexpandpd_zmm_zmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ZMM, src: ZMM) { append_elem(instructions, inst_vexpandpd_zmm_zmm(dst, src)) } +emit_vexpandpd_zmm_m512 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ZMM, src: Mem512) { append_elem(instructions, inst_vexpandpd_zmm_m512(dst, src)) } inst_vpconflictd_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPCONFLICTD, operand_count = 2, ops = {op_xmm(dst), op_xmm(src), {}, {}} }, 1781) } inst_vpconflictd_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .VPCONFLICTD, operand_count = 2, ops = {op_xmm(dst), op_mem(src.mem, 16), {}, {}} }, 1781) } inst_vpconflictd_ymm_ymm :: #force_inline proc "contextless" (dst: YMM, src: YMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPCONFLICTD, operand_count = 2, ops = {op_ymm(dst), op_ymm(src), {}, {}} }, 1782) } inst_vpconflictd_ymm_m256 :: #force_inline proc "contextless" (dst: YMM, src: Mem256) -> Instruction { return with_hint(Instruction{ mnemonic = .VPCONFLICTD, operand_count = 2, ops = {op_ymm(dst), op_mem(src.mem, 32), {}, {}} }, 1782) } inst_vpconflictd_zmm_zmm :: #force_inline proc "contextless" (dst: ZMM, src: ZMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPCONFLICTD, operand_count = 2, ops = {op_zmm(dst), op_zmm(src), {}, {}} }, 1783) } inst_vpconflictd_zmm_m512 :: #force_inline proc "contextless" (dst: ZMM, src: Mem512) -> Instruction { return with_hint(Instruction{ mnemonic = .VPCONFLICTD, operand_count = 2, ops = {op_zmm(dst), op_mem(src.mem, 64), {}, {}} }, 1783) } -emit_vpconflictd_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append(instructions, inst_vpconflictd_xmm_xmm(dst, src)) } -emit_vpconflictd_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append(instructions, inst_vpconflictd_xmm_m128(dst, src)) } -emit_vpconflictd_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM) { append(instructions, inst_vpconflictd_ymm_ymm(dst, src)) } -emit_vpconflictd_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: Mem256) { append(instructions, inst_vpconflictd_ymm_m256(dst, src)) } -emit_vpconflictd_zmm_zmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ZMM, src: ZMM) { append(instructions, inst_vpconflictd_zmm_zmm(dst, src)) } -emit_vpconflictd_zmm_m512 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ZMM, src: Mem512) { append(instructions, inst_vpconflictd_zmm_m512(dst, src)) } +emit_vpconflictd_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append_elem(instructions, inst_vpconflictd_xmm_xmm(dst, src)) } +emit_vpconflictd_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append_elem(instructions, inst_vpconflictd_xmm_m128(dst, src)) } +emit_vpconflictd_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM) { append_elem(instructions, inst_vpconflictd_ymm_ymm(dst, src)) } +emit_vpconflictd_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: Mem256) { append_elem(instructions, inst_vpconflictd_ymm_m256(dst, src)) } +emit_vpconflictd_zmm_zmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ZMM, src: ZMM) { append_elem(instructions, inst_vpconflictd_zmm_zmm(dst, src)) } +emit_vpconflictd_zmm_m512 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ZMM, src: Mem512) { append_elem(instructions, inst_vpconflictd_zmm_m512(dst, src)) } inst_vpconflictq_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPCONFLICTQ, operand_count = 2, ops = {op_xmm(dst), op_xmm(src), {}, {}} }, 1784) } inst_vpconflictq_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .VPCONFLICTQ, operand_count = 2, ops = {op_xmm(dst), op_mem(src.mem, 16), {}, {}} }, 1784) } inst_vpconflictq_ymm_ymm :: #force_inline proc "contextless" (dst: YMM, src: YMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPCONFLICTQ, operand_count = 2, ops = {op_ymm(dst), op_ymm(src), {}, {}} }, 1785) } inst_vpconflictq_ymm_m256 :: #force_inline proc "contextless" (dst: YMM, src: Mem256) -> Instruction { return with_hint(Instruction{ mnemonic = .VPCONFLICTQ, operand_count = 2, ops = {op_ymm(dst), op_mem(src.mem, 32), {}, {}} }, 1785) } inst_vpconflictq_zmm_zmm :: #force_inline proc "contextless" (dst: ZMM, src: ZMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPCONFLICTQ, operand_count = 2, ops = {op_zmm(dst), op_zmm(src), {}, {}} }, 1786) } inst_vpconflictq_zmm_m512 :: #force_inline proc "contextless" (dst: ZMM, src: Mem512) -> Instruction { return with_hint(Instruction{ mnemonic = .VPCONFLICTQ, operand_count = 2, ops = {op_zmm(dst), op_mem(src.mem, 64), {}, {}} }, 1786) } -emit_vpconflictq_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append(instructions, inst_vpconflictq_xmm_xmm(dst, src)) } -emit_vpconflictq_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append(instructions, inst_vpconflictq_xmm_m128(dst, src)) } -emit_vpconflictq_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM) { append(instructions, inst_vpconflictq_ymm_ymm(dst, src)) } -emit_vpconflictq_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: Mem256) { append(instructions, inst_vpconflictq_ymm_m256(dst, src)) } -emit_vpconflictq_zmm_zmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ZMM, src: ZMM) { append(instructions, inst_vpconflictq_zmm_zmm(dst, src)) } -emit_vpconflictq_zmm_m512 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ZMM, src: Mem512) { append(instructions, inst_vpconflictq_zmm_m512(dst, src)) } +emit_vpconflictq_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append_elem(instructions, inst_vpconflictq_xmm_xmm(dst, src)) } +emit_vpconflictq_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append_elem(instructions, inst_vpconflictq_xmm_m128(dst, src)) } +emit_vpconflictq_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM) { append_elem(instructions, inst_vpconflictq_ymm_ymm(dst, src)) } +emit_vpconflictq_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: Mem256) { append_elem(instructions, inst_vpconflictq_ymm_m256(dst, src)) } +emit_vpconflictq_zmm_zmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ZMM, src: ZMM) { append_elem(instructions, inst_vpconflictq_zmm_zmm(dst, src)) } +emit_vpconflictq_zmm_m512 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ZMM, src: Mem512) { append_elem(instructions, inst_vpconflictq_zmm_m512(dst, src)) } inst_vplzcntd_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPLZCNTD, operand_count = 2, ops = {op_xmm(dst), op_xmm(src), {}, {}} }, 1787) } inst_vplzcntd_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .VPLZCNTD, operand_count = 2, ops = {op_xmm(dst), op_mem(src.mem, 16), {}, {}} }, 1787) } inst_vplzcntd_ymm_ymm :: #force_inline proc "contextless" (dst: YMM, src: YMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPLZCNTD, operand_count = 2, ops = {op_ymm(dst), op_ymm(src), {}, {}} }, 1788) } inst_vplzcntd_ymm_m256 :: #force_inline proc "contextless" (dst: YMM, src: Mem256) -> Instruction { return with_hint(Instruction{ mnemonic = .VPLZCNTD, operand_count = 2, ops = {op_ymm(dst), op_mem(src.mem, 32), {}, {}} }, 1788) } inst_vplzcntd_zmm_zmm :: #force_inline proc "contextless" (dst: ZMM, src: ZMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPLZCNTD, operand_count = 2, ops = {op_zmm(dst), op_zmm(src), {}, {}} }, 1789) } inst_vplzcntd_zmm_m512 :: #force_inline proc "contextless" (dst: ZMM, src: Mem512) -> Instruction { return with_hint(Instruction{ mnemonic = .VPLZCNTD, operand_count = 2, ops = {op_zmm(dst), op_mem(src.mem, 64), {}, {}} }, 1789) } -emit_vplzcntd_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append(instructions, inst_vplzcntd_xmm_xmm(dst, src)) } -emit_vplzcntd_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append(instructions, inst_vplzcntd_xmm_m128(dst, src)) } -emit_vplzcntd_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM) { append(instructions, inst_vplzcntd_ymm_ymm(dst, src)) } -emit_vplzcntd_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: Mem256) { append(instructions, inst_vplzcntd_ymm_m256(dst, src)) } -emit_vplzcntd_zmm_zmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ZMM, src: ZMM) { append(instructions, inst_vplzcntd_zmm_zmm(dst, src)) } -emit_vplzcntd_zmm_m512 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ZMM, src: Mem512) { append(instructions, inst_vplzcntd_zmm_m512(dst, src)) } +emit_vplzcntd_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append_elem(instructions, inst_vplzcntd_xmm_xmm(dst, src)) } +emit_vplzcntd_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append_elem(instructions, inst_vplzcntd_xmm_m128(dst, src)) } +emit_vplzcntd_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM) { append_elem(instructions, inst_vplzcntd_ymm_ymm(dst, src)) } +emit_vplzcntd_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: Mem256) { append_elem(instructions, inst_vplzcntd_ymm_m256(dst, src)) } +emit_vplzcntd_zmm_zmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ZMM, src: ZMM) { append_elem(instructions, inst_vplzcntd_zmm_zmm(dst, src)) } +emit_vplzcntd_zmm_m512 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ZMM, src: Mem512) { append_elem(instructions, inst_vplzcntd_zmm_m512(dst, src)) } inst_vplzcntq_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPLZCNTQ, operand_count = 2, ops = {op_xmm(dst), op_xmm(src), {}, {}} }, 1790) } inst_vplzcntq_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .VPLZCNTQ, operand_count = 2, ops = {op_xmm(dst), op_mem(src.mem, 16), {}, {}} }, 1790) } inst_vplzcntq_ymm_ymm :: #force_inline proc "contextless" (dst: YMM, src: YMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPLZCNTQ, operand_count = 2, ops = {op_ymm(dst), op_ymm(src), {}, {}} }, 1791) } inst_vplzcntq_ymm_m256 :: #force_inline proc "contextless" (dst: YMM, src: Mem256) -> Instruction { return with_hint(Instruction{ mnemonic = .VPLZCNTQ, operand_count = 2, ops = {op_ymm(dst), op_mem(src.mem, 32), {}, {}} }, 1791) } inst_vplzcntq_zmm_zmm :: #force_inline proc "contextless" (dst: ZMM, src: ZMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPLZCNTQ, operand_count = 2, ops = {op_zmm(dst), op_zmm(src), {}, {}} }, 1792) } inst_vplzcntq_zmm_m512 :: #force_inline proc "contextless" (dst: ZMM, src: Mem512) -> Instruction { return with_hint(Instruction{ mnemonic = .VPLZCNTQ, operand_count = 2, ops = {op_zmm(dst), op_mem(src.mem, 64), {}, {}} }, 1792) } -emit_vplzcntq_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append(instructions, inst_vplzcntq_xmm_xmm(dst, src)) } -emit_vplzcntq_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append(instructions, inst_vplzcntq_xmm_m128(dst, src)) } -emit_vplzcntq_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM) { append(instructions, inst_vplzcntq_ymm_ymm(dst, src)) } -emit_vplzcntq_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: Mem256) { append(instructions, inst_vplzcntq_ymm_m256(dst, src)) } -emit_vplzcntq_zmm_zmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ZMM, src: ZMM) { append(instructions, inst_vplzcntq_zmm_zmm(dst, src)) } -emit_vplzcntq_zmm_m512 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ZMM, src: Mem512) { append(instructions, inst_vplzcntq_zmm_m512(dst, src)) } +emit_vplzcntq_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append_elem(instructions, inst_vplzcntq_xmm_xmm(dst, src)) } +emit_vplzcntq_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append_elem(instructions, inst_vplzcntq_xmm_m128(dst, src)) } +emit_vplzcntq_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM) { append_elem(instructions, inst_vplzcntq_ymm_ymm(dst, src)) } +emit_vplzcntq_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: Mem256) { append_elem(instructions, inst_vplzcntq_ymm_m256(dst, src)) } +emit_vplzcntq_zmm_zmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ZMM, src: ZMM) { append_elem(instructions, inst_vplzcntq_zmm_zmm(dst, src)) } +emit_vplzcntq_zmm_m512 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ZMM, src: Mem512) { append_elem(instructions, inst_vplzcntq_zmm_m512(dst, src)) } inst_vpermi2b_xmm_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPERMI2B, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_xmm(src2), {}} }, 1793) } inst_vpermi2b_xmm_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .VPERMI2B, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_mem(src2.mem, 16), {}} }, 1793) } inst_vpermi2b_ymm_ymm_ymm :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: YMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPERMI2B, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_ymm(src2), {}} }, 1794) } inst_vpermi2b_ymm_ymm_m256 :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: Mem256) -> Instruction { return with_hint(Instruction{ mnemonic = .VPERMI2B, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_mem(src2.mem, 32), {}} }, 1794) } inst_vpermi2b_zmm_zmm_zmm :: #force_inline proc "contextless" (dst: ZMM, src: ZMM, src2: ZMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPERMI2B, operand_count = 3, ops = {op_zmm(dst), op_zmm(src), op_zmm(src2), {}} }, 1795) } inst_vpermi2b_zmm_zmm_m512 :: #force_inline proc "contextless" (dst: ZMM, src: ZMM, src2: Mem512) -> Instruction { return with_hint(Instruction{ mnemonic = .VPERMI2B, operand_count = 3, ops = {op_zmm(dst), op_zmm(src), op_mem(src2.mem, 64), {}} }, 1795) } -emit_vpermi2b_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append(instructions, inst_vpermi2b_xmm_xmm_xmm(dst, src, src2)) } -emit_vpermi2b_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append(instructions, inst_vpermi2b_xmm_xmm_m128(dst, src, src2)) } -emit_vpermi2b_ymm_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM) { append(instructions, inst_vpermi2b_ymm_ymm_ymm(dst, src, src2)) } -emit_vpermi2b_ymm_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256) { append(instructions, inst_vpermi2b_ymm_ymm_m256(dst, src, src2)) } -emit_vpermi2b_zmm_zmm_zmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ZMM, src: ZMM, src2: ZMM) { append(instructions, inst_vpermi2b_zmm_zmm_zmm(dst, src, src2)) } -emit_vpermi2b_zmm_zmm_m512 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ZMM, src: ZMM, src2: Mem512) { append(instructions, inst_vpermi2b_zmm_zmm_m512(dst, src, src2)) } +emit_vpermi2b_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append_elem(instructions, inst_vpermi2b_xmm_xmm_xmm(dst, src, src2)) } +emit_vpermi2b_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append_elem(instructions, inst_vpermi2b_xmm_xmm_m128(dst, src, src2)) } +emit_vpermi2b_ymm_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM) { append_elem(instructions, inst_vpermi2b_ymm_ymm_ymm(dst, src, src2)) } +emit_vpermi2b_ymm_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256) { append_elem(instructions, inst_vpermi2b_ymm_ymm_m256(dst, src, src2)) } +emit_vpermi2b_zmm_zmm_zmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ZMM, src: ZMM, src2: ZMM) { append_elem(instructions, inst_vpermi2b_zmm_zmm_zmm(dst, src, src2)) } +emit_vpermi2b_zmm_zmm_m512 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ZMM, src: ZMM, src2: Mem512) { append_elem(instructions, inst_vpermi2b_zmm_zmm_m512(dst, src, src2)) } inst_vpermi2w_xmm_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPERMI2W, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_xmm(src2), {}} }, 1796) } inst_vpermi2w_xmm_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .VPERMI2W, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_mem(src2.mem, 16), {}} }, 1796) } inst_vpermi2w_ymm_ymm_ymm :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: YMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPERMI2W, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_ymm(src2), {}} }, 1797) } inst_vpermi2w_ymm_ymm_m256 :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: Mem256) -> Instruction { return with_hint(Instruction{ mnemonic = .VPERMI2W, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_mem(src2.mem, 32), {}} }, 1797) } inst_vpermi2w_zmm_zmm_zmm :: #force_inline proc "contextless" (dst: ZMM, src: ZMM, src2: ZMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPERMI2W, operand_count = 3, ops = {op_zmm(dst), op_zmm(src), op_zmm(src2), {}} }, 1798) } inst_vpermi2w_zmm_zmm_m512 :: #force_inline proc "contextless" (dst: ZMM, src: ZMM, src2: Mem512) -> Instruction { return with_hint(Instruction{ mnemonic = .VPERMI2W, operand_count = 3, ops = {op_zmm(dst), op_zmm(src), op_mem(src2.mem, 64), {}} }, 1798) } -emit_vpermi2w_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append(instructions, inst_vpermi2w_xmm_xmm_xmm(dst, src, src2)) } -emit_vpermi2w_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append(instructions, inst_vpermi2w_xmm_xmm_m128(dst, src, src2)) } -emit_vpermi2w_ymm_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM) { append(instructions, inst_vpermi2w_ymm_ymm_ymm(dst, src, src2)) } -emit_vpermi2w_ymm_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256) { append(instructions, inst_vpermi2w_ymm_ymm_m256(dst, src, src2)) } -emit_vpermi2w_zmm_zmm_zmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ZMM, src: ZMM, src2: ZMM) { append(instructions, inst_vpermi2w_zmm_zmm_zmm(dst, src, src2)) } -emit_vpermi2w_zmm_zmm_m512 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ZMM, src: ZMM, src2: Mem512) { append(instructions, inst_vpermi2w_zmm_zmm_m512(dst, src, src2)) } +emit_vpermi2w_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append_elem(instructions, inst_vpermi2w_xmm_xmm_xmm(dst, src, src2)) } +emit_vpermi2w_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append_elem(instructions, inst_vpermi2w_xmm_xmm_m128(dst, src, src2)) } +emit_vpermi2w_ymm_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM) { append_elem(instructions, inst_vpermi2w_ymm_ymm_ymm(dst, src, src2)) } +emit_vpermi2w_ymm_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256) { append_elem(instructions, inst_vpermi2w_ymm_ymm_m256(dst, src, src2)) } +emit_vpermi2w_zmm_zmm_zmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ZMM, src: ZMM, src2: ZMM) { append_elem(instructions, inst_vpermi2w_zmm_zmm_zmm(dst, src, src2)) } +emit_vpermi2w_zmm_zmm_m512 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ZMM, src: ZMM, src2: Mem512) { append_elem(instructions, inst_vpermi2w_zmm_zmm_m512(dst, src, src2)) } inst_vpermi2d_xmm_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPERMI2D, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_xmm(src2), {}} }, 1799) } inst_vpermi2d_xmm_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .VPERMI2D, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_mem(src2.mem, 16), {}} }, 1799) } inst_vpermi2d_ymm_ymm_ymm :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: YMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPERMI2D, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_ymm(src2), {}} }, 1800) } inst_vpermi2d_ymm_ymm_m256 :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: Mem256) -> Instruction { return with_hint(Instruction{ mnemonic = .VPERMI2D, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_mem(src2.mem, 32), {}} }, 1800) } inst_vpermi2d_zmm_zmm_zmm :: #force_inline proc "contextless" (dst: ZMM, src: ZMM, src2: ZMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPERMI2D, operand_count = 3, ops = {op_zmm(dst), op_zmm(src), op_zmm(src2), {}} }, 1801) } inst_vpermi2d_zmm_zmm_m512 :: #force_inline proc "contextless" (dst: ZMM, src: ZMM, src2: Mem512) -> Instruction { return with_hint(Instruction{ mnemonic = .VPERMI2D, operand_count = 3, ops = {op_zmm(dst), op_zmm(src), op_mem(src2.mem, 64), {}} }, 1801) } -emit_vpermi2d_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append(instructions, inst_vpermi2d_xmm_xmm_xmm(dst, src, src2)) } -emit_vpermi2d_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append(instructions, inst_vpermi2d_xmm_xmm_m128(dst, src, src2)) } -emit_vpermi2d_ymm_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM) { append(instructions, inst_vpermi2d_ymm_ymm_ymm(dst, src, src2)) } -emit_vpermi2d_ymm_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256) { append(instructions, inst_vpermi2d_ymm_ymm_m256(dst, src, src2)) } -emit_vpermi2d_zmm_zmm_zmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ZMM, src: ZMM, src2: ZMM) { append(instructions, inst_vpermi2d_zmm_zmm_zmm(dst, src, src2)) } -emit_vpermi2d_zmm_zmm_m512 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ZMM, src: ZMM, src2: Mem512) { append(instructions, inst_vpermi2d_zmm_zmm_m512(dst, src, src2)) } +emit_vpermi2d_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append_elem(instructions, inst_vpermi2d_xmm_xmm_xmm(dst, src, src2)) } +emit_vpermi2d_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append_elem(instructions, inst_vpermi2d_xmm_xmm_m128(dst, src, src2)) } +emit_vpermi2d_ymm_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM) { append_elem(instructions, inst_vpermi2d_ymm_ymm_ymm(dst, src, src2)) } +emit_vpermi2d_ymm_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256) { append_elem(instructions, inst_vpermi2d_ymm_ymm_m256(dst, src, src2)) } +emit_vpermi2d_zmm_zmm_zmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ZMM, src: ZMM, src2: ZMM) { append_elem(instructions, inst_vpermi2d_zmm_zmm_zmm(dst, src, src2)) } +emit_vpermi2d_zmm_zmm_m512 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ZMM, src: ZMM, src2: Mem512) { append_elem(instructions, inst_vpermi2d_zmm_zmm_m512(dst, src, src2)) } inst_vpermi2q_xmm_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPERMI2Q, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_xmm(src2), {}} }, 1802) } inst_vpermi2q_xmm_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .VPERMI2Q, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_mem(src2.mem, 16), {}} }, 1802) } inst_vpermi2q_ymm_ymm_ymm :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: YMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPERMI2Q, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_ymm(src2), {}} }, 1803) } inst_vpermi2q_ymm_ymm_m256 :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: Mem256) -> Instruction { return with_hint(Instruction{ mnemonic = .VPERMI2Q, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_mem(src2.mem, 32), {}} }, 1803) } inst_vpermi2q_zmm_zmm_zmm :: #force_inline proc "contextless" (dst: ZMM, src: ZMM, src2: ZMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPERMI2Q, operand_count = 3, ops = {op_zmm(dst), op_zmm(src), op_zmm(src2), {}} }, 1804) } inst_vpermi2q_zmm_zmm_m512 :: #force_inline proc "contextless" (dst: ZMM, src: ZMM, src2: Mem512) -> Instruction { return with_hint(Instruction{ mnemonic = .VPERMI2Q, operand_count = 3, ops = {op_zmm(dst), op_zmm(src), op_mem(src2.mem, 64), {}} }, 1804) } -emit_vpermi2q_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append(instructions, inst_vpermi2q_xmm_xmm_xmm(dst, src, src2)) } -emit_vpermi2q_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append(instructions, inst_vpermi2q_xmm_xmm_m128(dst, src, src2)) } -emit_vpermi2q_ymm_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM) { append(instructions, inst_vpermi2q_ymm_ymm_ymm(dst, src, src2)) } -emit_vpermi2q_ymm_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256) { append(instructions, inst_vpermi2q_ymm_ymm_m256(dst, src, src2)) } -emit_vpermi2q_zmm_zmm_zmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ZMM, src: ZMM, src2: ZMM) { append(instructions, inst_vpermi2q_zmm_zmm_zmm(dst, src, src2)) } -emit_vpermi2q_zmm_zmm_m512 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ZMM, src: ZMM, src2: Mem512) { append(instructions, inst_vpermi2q_zmm_zmm_m512(dst, src, src2)) } +emit_vpermi2q_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append_elem(instructions, inst_vpermi2q_xmm_xmm_xmm(dst, src, src2)) } +emit_vpermi2q_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append_elem(instructions, inst_vpermi2q_xmm_xmm_m128(dst, src, src2)) } +emit_vpermi2q_ymm_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM) { append_elem(instructions, inst_vpermi2q_ymm_ymm_ymm(dst, src, src2)) } +emit_vpermi2q_ymm_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256) { append_elem(instructions, inst_vpermi2q_ymm_ymm_m256(dst, src, src2)) } +emit_vpermi2q_zmm_zmm_zmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ZMM, src: ZMM, src2: ZMM) { append_elem(instructions, inst_vpermi2q_zmm_zmm_zmm(dst, src, src2)) } +emit_vpermi2q_zmm_zmm_m512 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ZMM, src: ZMM, src2: Mem512) { append_elem(instructions, inst_vpermi2q_zmm_zmm_m512(dst, src, src2)) } inst_vpermi2ps_xmm_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPERMI2PS, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_xmm(src2), {}} }, 1805) } inst_vpermi2ps_xmm_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .VPERMI2PS, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_mem(src2.mem, 16), {}} }, 1805) } inst_vpermi2ps_ymm_ymm_ymm :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: YMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPERMI2PS, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_ymm(src2), {}} }, 1806) } inst_vpermi2ps_ymm_ymm_m256 :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: Mem256) -> Instruction { return with_hint(Instruction{ mnemonic = .VPERMI2PS, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_mem(src2.mem, 32), {}} }, 1806) } inst_vpermi2ps_zmm_zmm_zmm :: #force_inline proc "contextless" (dst: ZMM, src: ZMM, src2: ZMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPERMI2PS, operand_count = 3, ops = {op_zmm(dst), op_zmm(src), op_zmm(src2), {}} }, 1807) } inst_vpermi2ps_zmm_zmm_m512 :: #force_inline proc "contextless" (dst: ZMM, src: ZMM, src2: Mem512) -> Instruction { return with_hint(Instruction{ mnemonic = .VPERMI2PS, operand_count = 3, ops = {op_zmm(dst), op_zmm(src), op_mem(src2.mem, 64), {}} }, 1807) } -emit_vpermi2ps_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append(instructions, inst_vpermi2ps_xmm_xmm_xmm(dst, src, src2)) } -emit_vpermi2ps_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append(instructions, inst_vpermi2ps_xmm_xmm_m128(dst, src, src2)) } -emit_vpermi2ps_ymm_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM) { append(instructions, inst_vpermi2ps_ymm_ymm_ymm(dst, src, src2)) } -emit_vpermi2ps_ymm_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256) { append(instructions, inst_vpermi2ps_ymm_ymm_m256(dst, src, src2)) } -emit_vpermi2ps_zmm_zmm_zmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ZMM, src: ZMM, src2: ZMM) { append(instructions, inst_vpermi2ps_zmm_zmm_zmm(dst, src, src2)) } -emit_vpermi2ps_zmm_zmm_m512 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ZMM, src: ZMM, src2: Mem512) { append(instructions, inst_vpermi2ps_zmm_zmm_m512(dst, src, src2)) } +emit_vpermi2ps_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append_elem(instructions, inst_vpermi2ps_xmm_xmm_xmm(dst, src, src2)) } +emit_vpermi2ps_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append_elem(instructions, inst_vpermi2ps_xmm_xmm_m128(dst, src, src2)) } +emit_vpermi2ps_ymm_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM) { append_elem(instructions, inst_vpermi2ps_ymm_ymm_ymm(dst, src, src2)) } +emit_vpermi2ps_ymm_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256) { append_elem(instructions, inst_vpermi2ps_ymm_ymm_m256(dst, src, src2)) } +emit_vpermi2ps_zmm_zmm_zmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ZMM, src: ZMM, src2: ZMM) { append_elem(instructions, inst_vpermi2ps_zmm_zmm_zmm(dst, src, src2)) } +emit_vpermi2ps_zmm_zmm_m512 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ZMM, src: ZMM, src2: Mem512) { append_elem(instructions, inst_vpermi2ps_zmm_zmm_m512(dst, src, src2)) } inst_vpermi2pd_xmm_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPERMI2PD, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_xmm(src2), {}} }, 1808) } inst_vpermi2pd_xmm_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .VPERMI2PD, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_mem(src2.mem, 16), {}} }, 1808) } inst_vpermi2pd_ymm_ymm_ymm :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: YMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPERMI2PD, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_ymm(src2), {}} }, 1809) } inst_vpermi2pd_ymm_ymm_m256 :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: Mem256) -> Instruction { return with_hint(Instruction{ mnemonic = .VPERMI2PD, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_mem(src2.mem, 32), {}} }, 1809) } inst_vpermi2pd_zmm_zmm_zmm :: #force_inline proc "contextless" (dst: ZMM, src: ZMM, src2: ZMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPERMI2PD, operand_count = 3, ops = {op_zmm(dst), op_zmm(src), op_zmm(src2), {}} }, 1810) } inst_vpermi2pd_zmm_zmm_m512 :: #force_inline proc "contextless" (dst: ZMM, src: ZMM, src2: Mem512) -> Instruction { return with_hint(Instruction{ mnemonic = .VPERMI2PD, operand_count = 3, ops = {op_zmm(dst), op_zmm(src), op_mem(src2.mem, 64), {}} }, 1810) } -emit_vpermi2pd_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append(instructions, inst_vpermi2pd_xmm_xmm_xmm(dst, src, src2)) } -emit_vpermi2pd_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append(instructions, inst_vpermi2pd_xmm_xmm_m128(dst, src, src2)) } -emit_vpermi2pd_ymm_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM) { append(instructions, inst_vpermi2pd_ymm_ymm_ymm(dst, src, src2)) } -emit_vpermi2pd_ymm_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256) { append(instructions, inst_vpermi2pd_ymm_ymm_m256(dst, src, src2)) } -emit_vpermi2pd_zmm_zmm_zmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ZMM, src: ZMM, src2: ZMM) { append(instructions, inst_vpermi2pd_zmm_zmm_zmm(dst, src, src2)) } -emit_vpermi2pd_zmm_zmm_m512 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ZMM, src: ZMM, src2: Mem512) { append(instructions, inst_vpermi2pd_zmm_zmm_m512(dst, src, src2)) } +emit_vpermi2pd_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append_elem(instructions, inst_vpermi2pd_xmm_xmm_xmm(dst, src, src2)) } +emit_vpermi2pd_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append_elem(instructions, inst_vpermi2pd_xmm_xmm_m128(dst, src, src2)) } +emit_vpermi2pd_ymm_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM) { append_elem(instructions, inst_vpermi2pd_ymm_ymm_ymm(dst, src, src2)) } +emit_vpermi2pd_ymm_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256) { append_elem(instructions, inst_vpermi2pd_ymm_ymm_m256(dst, src, src2)) } +emit_vpermi2pd_zmm_zmm_zmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ZMM, src: ZMM, src2: ZMM) { append_elem(instructions, inst_vpermi2pd_zmm_zmm_zmm(dst, src, src2)) } +emit_vpermi2pd_zmm_zmm_m512 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ZMM, src: ZMM, src2: Mem512) { append_elem(instructions, inst_vpermi2pd_zmm_zmm_m512(dst, src, src2)) } inst_vpermt2b_xmm_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPERMT2B, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_xmm(src2), {}} }, 1811) } inst_vpermt2b_xmm_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .VPERMT2B, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_mem(src2.mem, 16), {}} }, 1811) } inst_vpermt2b_ymm_ymm_ymm :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: YMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPERMT2B, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_ymm(src2), {}} }, 1812) } inst_vpermt2b_ymm_ymm_m256 :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: Mem256) -> Instruction { return with_hint(Instruction{ mnemonic = .VPERMT2B, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_mem(src2.mem, 32), {}} }, 1812) } inst_vpermt2b_zmm_zmm_zmm :: #force_inline proc "contextless" (dst: ZMM, src: ZMM, src2: ZMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPERMT2B, operand_count = 3, ops = {op_zmm(dst), op_zmm(src), op_zmm(src2), {}} }, 1813) } inst_vpermt2b_zmm_zmm_m512 :: #force_inline proc "contextless" (dst: ZMM, src: ZMM, src2: Mem512) -> Instruction { return with_hint(Instruction{ mnemonic = .VPERMT2B, operand_count = 3, ops = {op_zmm(dst), op_zmm(src), op_mem(src2.mem, 64), {}} }, 1813) } -emit_vpermt2b_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append(instructions, inst_vpermt2b_xmm_xmm_xmm(dst, src, src2)) } -emit_vpermt2b_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append(instructions, inst_vpermt2b_xmm_xmm_m128(dst, src, src2)) } -emit_vpermt2b_ymm_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM) { append(instructions, inst_vpermt2b_ymm_ymm_ymm(dst, src, src2)) } -emit_vpermt2b_ymm_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256) { append(instructions, inst_vpermt2b_ymm_ymm_m256(dst, src, src2)) } -emit_vpermt2b_zmm_zmm_zmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ZMM, src: ZMM, src2: ZMM) { append(instructions, inst_vpermt2b_zmm_zmm_zmm(dst, src, src2)) } -emit_vpermt2b_zmm_zmm_m512 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ZMM, src: ZMM, src2: Mem512) { append(instructions, inst_vpermt2b_zmm_zmm_m512(dst, src, src2)) } +emit_vpermt2b_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append_elem(instructions, inst_vpermt2b_xmm_xmm_xmm(dst, src, src2)) } +emit_vpermt2b_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append_elem(instructions, inst_vpermt2b_xmm_xmm_m128(dst, src, src2)) } +emit_vpermt2b_ymm_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM) { append_elem(instructions, inst_vpermt2b_ymm_ymm_ymm(dst, src, src2)) } +emit_vpermt2b_ymm_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256) { append_elem(instructions, inst_vpermt2b_ymm_ymm_m256(dst, src, src2)) } +emit_vpermt2b_zmm_zmm_zmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ZMM, src: ZMM, src2: ZMM) { append_elem(instructions, inst_vpermt2b_zmm_zmm_zmm(dst, src, src2)) } +emit_vpermt2b_zmm_zmm_m512 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ZMM, src: ZMM, src2: Mem512) { append_elem(instructions, inst_vpermt2b_zmm_zmm_m512(dst, src, src2)) } inst_vpermt2w_xmm_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPERMT2W, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_xmm(src2), {}} }, 1814) } inst_vpermt2w_xmm_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .VPERMT2W, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_mem(src2.mem, 16), {}} }, 1814) } inst_vpermt2w_ymm_ymm_ymm :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: YMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPERMT2W, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_ymm(src2), {}} }, 1815) } inst_vpermt2w_ymm_ymm_m256 :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: Mem256) -> Instruction { return with_hint(Instruction{ mnemonic = .VPERMT2W, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_mem(src2.mem, 32), {}} }, 1815) } inst_vpermt2w_zmm_zmm_zmm :: #force_inline proc "contextless" (dst: ZMM, src: ZMM, src2: ZMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPERMT2W, operand_count = 3, ops = {op_zmm(dst), op_zmm(src), op_zmm(src2), {}} }, 1816) } inst_vpermt2w_zmm_zmm_m512 :: #force_inline proc "contextless" (dst: ZMM, src: ZMM, src2: Mem512) -> Instruction { return with_hint(Instruction{ mnemonic = .VPERMT2W, operand_count = 3, ops = {op_zmm(dst), op_zmm(src), op_mem(src2.mem, 64), {}} }, 1816) } -emit_vpermt2w_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append(instructions, inst_vpermt2w_xmm_xmm_xmm(dst, src, src2)) } -emit_vpermt2w_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append(instructions, inst_vpermt2w_xmm_xmm_m128(dst, src, src2)) } -emit_vpermt2w_ymm_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM) { append(instructions, inst_vpermt2w_ymm_ymm_ymm(dst, src, src2)) } -emit_vpermt2w_ymm_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256) { append(instructions, inst_vpermt2w_ymm_ymm_m256(dst, src, src2)) } -emit_vpermt2w_zmm_zmm_zmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ZMM, src: ZMM, src2: ZMM) { append(instructions, inst_vpermt2w_zmm_zmm_zmm(dst, src, src2)) } -emit_vpermt2w_zmm_zmm_m512 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ZMM, src: ZMM, src2: Mem512) { append(instructions, inst_vpermt2w_zmm_zmm_m512(dst, src, src2)) } +emit_vpermt2w_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append_elem(instructions, inst_vpermt2w_xmm_xmm_xmm(dst, src, src2)) } +emit_vpermt2w_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append_elem(instructions, inst_vpermt2w_xmm_xmm_m128(dst, src, src2)) } +emit_vpermt2w_ymm_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM) { append_elem(instructions, inst_vpermt2w_ymm_ymm_ymm(dst, src, src2)) } +emit_vpermt2w_ymm_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256) { append_elem(instructions, inst_vpermt2w_ymm_ymm_m256(dst, src, src2)) } +emit_vpermt2w_zmm_zmm_zmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ZMM, src: ZMM, src2: ZMM) { append_elem(instructions, inst_vpermt2w_zmm_zmm_zmm(dst, src, src2)) } +emit_vpermt2w_zmm_zmm_m512 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ZMM, src: ZMM, src2: Mem512) { append_elem(instructions, inst_vpermt2w_zmm_zmm_m512(dst, src, src2)) } inst_vpermt2d_xmm_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPERMT2D, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_xmm(src2), {}} }, 1817) } inst_vpermt2d_xmm_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .VPERMT2D, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_mem(src2.mem, 16), {}} }, 1817) } inst_vpermt2d_ymm_ymm_ymm :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: YMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPERMT2D, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_ymm(src2), {}} }, 1818) } inst_vpermt2d_ymm_ymm_m256 :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: Mem256) -> Instruction { return with_hint(Instruction{ mnemonic = .VPERMT2D, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_mem(src2.mem, 32), {}} }, 1818) } inst_vpermt2d_zmm_zmm_zmm :: #force_inline proc "contextless" (dst: ZMM, src: ZMM, src2: ZMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPERMT2D, operand_count = 3, ops = {op_zmm(dst), op_zmm(src), op_zmm(src2), {}} }, 1819) } inst_vpermt2d_zmm_zmm_m512 :: #force_inline proc "contextless" (dst: ZMM, src: ZMM, src2: Mem512) -> Instruction { return with_hint(Instruction{ mnemonic = .VPERMT2D, operand_count = 3, ops = {op_zmm(dst), op_zmm(src), op_mem(src2.mem, 64), {}} }, 1819) } -emit_vpermt2d_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append(instructions, inst_vpermt2d_xmm_xmm_xmm(dst, src, src2)) } -emit_vpermt2d_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append(instructions, inst_vpermt2d_xmm_xmm_m128(dst, src, src2)) } -emit_vpermt2d_ymm_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM) { append(instructions, inst_vpermt2d_ymm_ymm_ymm(dst, src, src2)) } -emit_vpermt2d_ymm_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256) { append(instructions, inst_vpermt2d_ymm_ymm_m256(dst, src, src2)) } -emit_vpermt2d_zmm_zmm_zmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ZMM, src: ZMM, src2: ZMM) { append(instructions, inst_vpermt2d_zmm_zmm_zmm(dst, src, src2)) } -emit_vpermt2d_zmm_zmm_m512 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ZMM, src: ZMM, src2: Mem512) { append(instructions, inst_vpermt2d_zmm_zmm_m512(dst, src, src2)) } +emit_vpermt2d_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append_elem(instructions, inst_vpermt2d_xmm_xmm_xmm(dst, src, src2)) } +emit_vpermt2d_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append_elem(instructions, inst_vpermt2d_xmm_xmm_m128(dst, src, src2)) } +emit_vpermt2d_ymm_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM) { append_elem(instructions, inst_vpermt2d_ymm_ymm_ymm(dst, src, src2)) } +emit_vpermt2d_ymm_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256) { append_elem(instructions, inst_vpermt2d_ymm_ymm_m256(dst, src, src2)) } +emit_vpermt2d_zmm_zmm_zmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ZMM, src: ZMM, src2: ZMM) { append_elem(instructions, inst_vpermt2d_zmm_zmm_zmm(dst, src, src2)) } +emit_vpermt2d_zmm_zmm_m512 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ZMM, src: ZMM, src2: Mem512) { append_elem(instructions, inst_vpermt2d_zmm_zmm_m512(dst, src, src2)) } inst_vpermt2q_xmm_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPERMT2Q, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_xmm(src2), {}} }, 1820) } inst_vpermt2q_xmm_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .VPERMT2Q, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_mem(src2.mem, 16), {}} }, 1820) } inst_vpermt2q_ymm_ymm_ymm :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: YMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPERMT2Q, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_ymm(src2), {}} }, 1821) } inst_vpermt2q_ymm_ymm_m256 :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: Mem256) -> Instruction { return with_hint(Instruction{ mnemonic = .VPERMT2Q, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_mem(src2.mem, 32), {}} }, 1821) } inst_vpermt2q_zmm_zmm_zmm :: #force_inline proc "contextless" (dst: ZMM, src: ZMM, src2: ZMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPERMT2Q, operand_count = 3, ops = {op_zmm(dst), op_zmm(src), op_zmm(src2), {}} }, 1822) } inst_vpermt2q_zmm_zmm_m512 :: #force_inline proc "contextless" (dst: ZMM, src: ZMM, src2: Mem512) -> Instruction { return with_hint(Instruction{ mnemonic = .VPERMT2Q, operand_count = 3, ops = {op_zmm(dst), op_zmm(src), op_mem(src2.mem, 64), {}} }, 1822) } -emit_vpermt2q_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append(instructions, inst_vpermt2q_xmm_xmm_xmm(dst, src, src2)) } -emit_vpermt2q_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append(instructions, inst_vpermt2q_xmm_xmm_m128(dst, src, src2)) } -emit_vpermt2q_ymm_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM) { append(instructions, inst_vpermt2q_ymm_ymm_ymm(dst, src, src2)) } -emit_vpermt2q_ymm_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256) { append(instructions, inst_vpermt2q_ymm_ymm_m256(dst, src, src2)) } -emit_vpermt2q_zmm_zmm_zmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ZMM, src: ZMM, src2: ZMM) { append(instructions, inst_vpermt2q_zmm_zmm_zmm(dst, src, src2)) } -emit_vpermt2q_zmm_zmm_m512 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ZMM, src: ZMM, src2: Mem512) { append(instructions, inst_vpermt2q_zmm_zmm_m512(dst, src, src2)) } +emit_vpermt2q_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append_elem(instructions, inst_vpermt2q_xmm_xmm_xmm(dst, src, src2)) } +emit_vpermt2q_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append_elem(instructions, inst_vpermt2q_xmm_xmm_m128(dst, src, src2)) } +emit_vpermt2q_ymm_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM) { append_elem(instructions, inst_vpermt2q_ymm_ymm_ymm(dst, src, src2)) } +emit_vpermt2q_ymm_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256) { append_elem(instructions, inst_vpermt2q_ymm_ymm_m256(dst, src, src2)) } +emit_vpermt2q_zmm_zmm_zmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ZMM, src: ZMM, src2: ZMM) { append_elem(instructions, inst_vpermt2q_zmm_zmm_zmm(dst, src, src2)) } +emit_vpermt2q_zmm_zmm_m512 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ZMM, src: ZMM, src2: Mem512) { append_elem(instructions, inst_vpermt2q_zmm_zmm_m512(dst, src, src2)) } inst_vpermt2ps_xmm_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPERMT2PS, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_xmm(src2), {}} }, 1823) } inst_vpermt2ps_xmm_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .VPERMT2PS, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_mem(src2.mem, 16), {}} }, 1823) } inst_vpermt2ps_ymm_ymm_ymm :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: YMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPERMT2PS, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_ymm(src2), {}} }, 1824) } inst_vpermt2ps_ymm_ymm_m256 :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: Mem256) -> Instruction { return with_hint(Instruction{ mnemonic = .VPERMT2PS, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_mem(src2.mem, 32), {}} }, 1824) } inst_vpermt2ps_zmm_zmm_zmm :: #force_inline proc "contextless" (dst: ZMM, src: ZMM, src2: ZMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPERMT2PS, operand_count = 3, ops = {op_zmm(dst), op_zmm(src), op_zmm(src2), {}} }, 1825) } inst_vpermt2ps_zmm_zmm_m512 :: #force_inline proc "contextless" (dst: ZMM, src: ZMM, src2: Mem512) -> Instruction { return with_hint(Instruction{ mnemonic = .VPERMT2PS, operand_count = 3, ops = {op_zmm(dst), op_zmm(src), op_mem(src2.mem, 64), {}} }, 1825) } -emit_vpermt2ps_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append(instructions, inst_vpermt2ps_xmm_xmm_xmm(dst, src, src2)) } -emit_vpermt2ps_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append(instructions, inst_vpermt2ps_xmm_xmm_m128(dst, src, src2)) } -emit_vpermt2ps_ymm_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM) { append(instructions, inst_vpermt2ps_ymm_ymm_ymm(dst, src, src2)) } -emit_vpermt2ps_ymm_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256) { append(instructions, inst_vpermt2ps_ymm_ymm_m256(dst, src, src2)) } -emit_vpermt2ps_zmm_zmm_zmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ZMM, src: ZMM, src2: ZMM) { append(instructions, inst_vpermt2ps_zmm_zmm_zmm(dst, src, src2)) } -emit_vpermt2ps_zmm_zmm_m512 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ZMM, src: ZMM, src2: Mem512) { append(instructions, inst_vpermt2ps_zmm_zmm_m512(dst, src, src2)) } +emit_vpermt2ps_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append_elem(instructions, inst_vpermt2ps_xmm_xmm_xmm(dst, src, src2)) } +emit_vpermt2ps_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append_elem(instructions, inst_vpermt2ps_xmm_xmm_m128(dst, src, src2)) } +emit_vpermt2ps_ymm_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM) { append_elem(instructions, inst_vpermt2ps_ymm_ymm_ymm(dst, src, src2)) } +emit_vpermt2ps_ymm_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256) { append_elem(instructions, inst_vpermt2ps_ymm_ymm_m256(dst, src, src2)) } +emit_vpermt2ps_zmm_zmm_zmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ZMM, src: ZMM, src2: ZMM) { append_elem(instructions, inst_vpermt2ps_zmm_zmm_zmm(dst, src, src2)) } +emit_vpermt2ps_zmm_zmm_m512 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ZMM, src: ZMM, src2: Mem512) { append_elem(instructions, inst_vpermt2ps_zmm_zmm_m512(dst, src, src2)) } inst_vpermt2pd_xmm_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPERMT2PD, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_xmm(src2), {}} }, 1826) } inst_vpermt2pd_xmm_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .VPERMT2PD, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_mem(src2.mem, 16), {}} }, 1826) } inst_vpermt2pd_ymm_ymm_ymm :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: YMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPERMT2PD, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_ymm(src2), {}} }, 1827) } inst_vpermt2pd_ymm_ymm_m256 :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: Mem256) -> Instruction { return with_hint(Instruction{ mnemonic = .VPERMT2PD, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_mem(src2.mem, 32), {}} }, 1827) } inst_vpermt2pd_zmm_zmm_zmm :: #force_inline proc "contextless" (dst: ZMM, src: ZMM, src2: ZMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPERMT2PD, operand_count = 3, ops = {op_zmm(dst), op_zmm(src), op_zmm(src2), {}} }, 1828) } inst_vpermt2pd_zmm_zmm_m512 :: #force_inline proc "contextless" (dst: ZMM, src: ZMM, src2: Mem512) -> Instruction { return with_hint(Instruction{ mnemonic = .VPERMT2PD, operand_count = 3, ops = {op_zmm(dst), op_zmm(src), op_mem(src2.mem, 64), {}} }, 1828) } -emit_vpermt2pd_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append(instructions, inst_vpermt2pd_xmm_xmm_xmm(dst, src, src2)) } -emit_vpermt2pd_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append(instructions, inst_vpermt2pd_xmm_xmm_m128(dst, src, src2)) } -emit_vpermt2pd_ymm_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM) { append(instructions, inst_vpermt2pd_ymm_ymm_ymm(dst, src, src2)) } -emit_vpermt2pd_ymm_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256) { append(instructions, inst_vpermt2pd_ymm_ymm_m256(dst, src, src2)) } -emit_vpermt2pd_zmm_zmm_zmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ZMM, src: ZMM, src2: ZMM) { append(instructions, inst_vpermt2pd_zmm_zmm_zmm(dst, src, src2)) } -emit_vpermt2pd_zmm_zmm_m512 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ZMM, src: ZMM, src2: Mem512) { append(instructions, inst_vpermt2pd_zmm_zmm_m512(dst, src, src2)) } +emit_vpermt2pd_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append_elem(instructions, inst_vpermt2pd_xmm_xmm_xmm(dst, src, src2)) } +emit_vpermt2pd_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append_elem(instructions, inst_vpermt2pd_xmm_xmm_m128(dst, src, src2)) } +emit_vpermt2pd_ymm_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM) { append_elem(instructions, inst_vpermt2pd_ymm_ymm_ymm(dst, src, src2)) } +emit_vpermt2pd_ymm_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256) { append_elem(instructions, inst_vpermt2pd_ymm_ymm_m256(dst, src, src2)) } +emit_vpermt2pd_zmm_zmm_zmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ZMM, src: ZMM, src2: ZMM) { append_elem(instructions, inst_vpermt2pd_zmm_zmm_zmm(dst, src, src2)) } +emit_vpermt2pd_zmm_zmm_m512 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ZMM, src: ZMM, src2: Mem512) { append_elem(instructions, inst_vpermt2pd_zmm_zmm_m512(dst, src, src2)) } inst_vpermb_xmm_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPERMB, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_xmm(src2), {}} }, 1829) } inst_vpermb_xmm_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .VPERMB, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_mem(src2.mem, 16), {}} }, 1829) } inst_vpermb_ymm_ymm_ymm :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: YMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPERMB, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_ymm(src2), {}} }, 1830) } inst_vpermb_ymm_ymm_m256 :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: Mem256) -> Instruction { return with_hint(Instruction{ mnemonic = .VPERMB, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_mem(src2.mem, 32), {}} }, 1830) } inst_vpermb_zmm_zmm_zmm :: #force_inline proc "contextless" (dst: ZMM, src: ZMM, src2: ZMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPERMB, operand_count = 3, ops = {op_zmm(dst), op_zmm(src), op_zmm(src2), {}} }, 1831) } inst_vpermb_zmm_zmm_m512 :: #force_inline proc "contextless" (dst: ZMM, src: ZMM, src2: Mem512) -> Instruction { return with_hint(Instruction{ mnemonic = .VPERMB, operand_count = 3, ops = {op_zmm(dst), op_zmm(src), op_mem(src2.mem, 64), {}} }, 1831) } -emit_vpermb_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append(instructions, inst_vpermb_xmm_xmm_xmm(dst, src, src2)) } -emit_vpermb_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append(instructions, inst_vpermb_xmm_xmm_m128(dst, src, src2)) } -emit_vpermb_ymm_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM) { append(instructions, inst_vpermb_ymm_ymm_ymm(dst, src, src2)) } -emit_vpermb_ymm_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256) { append(instructions, inst_vpermb_ymm_ymm_m256(dst, src, src2)) } -emit_vpermb_zmm_zmm_zmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ZMM, src: ZMM, src2: ZMM) { append(instructions, inst_vpermb_zmm_zmm_zmm(dst, src, src2)) } -emit_vpermb_zmm_zmm_m512 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ZMM, src: ZMM, src2: Mem512) { append(instructions, inst_vpermb_zmm_zmm_m512(dst, src, src2)) } +emit_vpermb_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append_elem(instructions, inst_vpermb_xmm_xmm_xmm(dst, src, src2)) } +emit_vpermb_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append_elem(instructions, inst_vpermb_xmm_xmm_m128(dst, src, src2)) } +emit_vpermb_ymm_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM) { append_elem(instructions, inst_vpermb_ymm_ymm_ymm(dst, src, src2)) } +emit_vpermb_ymm_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256) { append_elem(instructions, inst_vpermb_ymm_ymm_m256(dst, src, src2)) } +emit_vpermb_zmm_zmm_zmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ZMM, src: ZMM, src2: ZMM) { append_elem(instructions, inst_vpermb_zmm_zmm_zmm(dst, src, src2)) } +emit_vpermb_zmm_zmm_m512 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ZMM, src: ZMM, src2: Mem512) { append_elem(instructions, inst_vpermb_zmm_zmm_m512(dst, src, src2)) } inst_vpermw_xmm_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPERMW, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_xmm(src2), {}} }, 1832) } inst_vpermw_xmm_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .VPERMW, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_mem(src2.mem, 16), {}} }, 1832) } inst_vpermw_ymm_ymm_ymm :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: YMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPERMW, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_ymm(src2), {}} }, 1833) } inst_vpermw_ymm_ymm_m256 :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: Mem256) -> Instruction { return with_hint(Instruction{ mnemonic = .VPERMW, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_mem(src2.mem, 32), {}} }, 1833) } inst_vpermw_zmm_zmm_zmm :: #force_inline proc "contextless" (dst: ZMM, src: ZMM, src2: ZMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPERMW, operand_count = 3, ops = {op_zmm(dst), op_zmm(src), op_zmm(src2), {}} }, 1834) } inst_vpermw_zmm_zmm_m512 :: #force_inline proc "contextless" (dst: ZMM, src: ZMM, src2: Mem512) -> Instruction { return with_hint(Instruction{ mnemonic = .VPERMW, operand_count = 3, ops = {op_zmm(dst), op_zmm(src), op_mem(src2.mem, 64), {}} }, 1834) } -emit_vpermw_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append(instructions, inst_vpermw_xmm_xmm_xmm(dst, src, src2)) } -emit_vpermw_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append(instructions, inst_vpermw_xmm_xmm_m128(dst, src, src2)) } -emit_vpermw_ymm_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM) { append(instructions, inst_vpermw_ymm_ymm_ymm(dst, src, src2)) } -emit_vpermw_ymm_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256) { append(instructions, inst_vpermw_ymm_ymm_m256(dst, src, src2)) } -emit_vpermw_zmm_zmm_zmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ZMM, src: ZMM, src2: ZMM) { append(instructions, inst_vpermw_zmm_zmm_zmm(dst, src, src2)) } -emit_vpermw_zmm_zmm_m512 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ZMM, src: ZMM, src2: Mem512) { append(instructions, inst_vpermw_zmm_zmm_m512(dst, src, src2)) } +emit_vpermw_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append_elem(instructions, inst_vpermw_xmm_xmm_xmm(dst, src, src2)) } +emit_vpermw_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append_elem(instructions, inst_vpermw_xmm_xmm_m128(dst, src, src2)) } +emit_vpermw_ymm_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM) { append_elem(instructions, inst_vpermw_ymm_ymm_ymm(dst, src, src2)) } +emit_vpermw_ymm_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256) { append_elem(instructions, inst_vpermw_ymm_ymm_m256(dst, src, src2)) } +emit_vpermw_zmm_zmm_zmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ZMM, src: ZMM, src2: ZMM) { append_elem(instructions, inst_vpermw_zmm_zmm_zmm(dst, src, src2)) } +emit_vpermw_zmm_zmm_m512 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ZMM, src: ZMM, src2: Mem512) { append_elem(instructions, inst_vpermw_zmm_zmm_m512(dst, src, src2)) } inst_vpmovb2m_k_xmm :: #force_inline proc "contextless" (dst: KREG, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPMOVB2M, operand_count = 2, ops = {op_kreg(dst), op_xmm(src), {}, {}} }, 1835) } inst_vpmovb2m_k_ymm :: #force_inline proc "contextless" (dst: KREG, src: YMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPMOVB2M, operand_count = 2, ops = {op_kreg(dst), op_ymm(src), {}, {}} }, 1836) } inst_vpmovb2m_k_zmm :: #force_inline proc "contextless" (dst: KREG, src: ZMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPMOVB2M, operand_count = 2, ops = {op_kreg(dst), op_zmm(src), {}, {}} }, 1837) } -emit_vpmovb2m_k_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: XMM) { append(instructions, inst_vpmovb2m_k_xmm(dst, src)) } -emit_vpmovb2m_k_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: YMM) { append(instructions, inst_vpmovb2m_k_ymm(dst, src)) } -emit_vpmovb2m_k_zmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: ZMM) { append(instructions, inst_vpmovb2m_k_zmm(dst, src)) } +emit_vpmovb2m_k_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: XMM) { append_elem(instructions, inst_vpmovb2m_k_xmm(dst, src)) } +emit_vpmovb2m_k_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: YMM) { append_elem(instructions, inst_vpmovb2m_k_ymm(dst, src)) } +emit_vpmovb2m_k_zmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: ZMM) { append_elem(instructions, inst_vpmovb2m_k_zmm(dst, src)) } inst_vpmovw2m_k_xmm :: #force_inline proc "contextless" (dst: KREG, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPMOVW2M, operand_count = 2, ops = {op_kreg(dst), op_xmm(src), {}, {}} }, 1838) } inst_vpmovw2m_k_ymm :: #force_inline proc "contextless" (dst: KREG, src: YMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPMOVW2M, operand_count = 2, ops = {op_kreg(dst), op_ymm(src), {}, {}} }, 1839) } inst_vpmovw2m_k_zmm :: #force_inline proc "contextless" (dst: KREG, src: ZMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPMOVW2M, operand_count = 2, ops = {op_kreg(dst), op_zmm(src), {}, {}} }, 1840) } -emit_vpmovw2m_k_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: XMM) { append(instructions, inst_vpmovw2m_k_xmm(dst, src)) } -emit_vpmovw2m_k_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: YMM) { append(instructions, inst_vpmovw2m_k_ymm(dst, src)) } -emit_vpmovw2m_k_zmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: ZMM) { append(instructions, inst_vpmovw2m_k_zmm(dst, src)) } +emit_vpmovw2m_k_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: XMM) { append_elem(instructions, inst_vpmovw2m_k_xmm(dst, src)) } +emit_vpmovw2m_k_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: YMM) { append_elem(instructions, inst_vpmovw2m_k_ymm(dst, src)) } +emit_vpmovw2m_k_zmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: ZMM) { append_elem(instructions, inst_vpmovw2m_k_zmm(dst, src)) } inst_vpmovd2m_k_xmm :: #force_inline proc "contextless" (dst: KREG, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPMOVD2M, operand_count = 2, ops = {op_kreg(dst), op_xmm(src), {}, {}} }, 1841) } inst_vpmovd2m_k_ymm :: #force_inline proc "contextless" (dst: KREG, src: YMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPMOVD2M, operand_count = 2, ops = {op_kreg(dst), op_ymm(src), {}, {}} }, 1842) } inst_vpmovd2m_k_zmm :: #force_inline proc "contextless" (dst: KREG, src: ZMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPMOVD2M, operand_count = 2, ops = {op_kreg(dst), op_zmm(src), {}, {}} }, 1843) } -emit_vpmovd2m_k_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: XMM) { append(instructions, inst_vpmovd2m_k_xmm(dst, src)) } -emit_vpmovd2m_k_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: YMM) { append(instructions, inst_vpmovd2m_k_ymm(dst, src)) } -emit_vpmovd2m_k_zmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: ZMM) { append(instructions, inst_vpmovd2m_k_zmm(dst, src)) } +emit_vpmovd2m_k_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: XMM) { append_elem(instructions, inst_vpmovd2m_k_xmm(dst, src)) } +emit_vpmovd2m_k_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: YMM) { append_elem(instructions, inst_vpmovd2m_k_ymm(dst, src)) } +emit_vpmovd2m_k_zmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: ZMM) { append_elem(instructions, inst_vpmovd2m_k_zmm(dst, src)) } inst_vpmovq2m_k_xmm :: #force_inline proc "contextless" (dst: KREG, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPMOVQ2M, operand_count = 2, ops = {op_kreg(dst), op_xmm(src), {}, {}} }, 1844) } inst_vpmovq2m_k_ymm :: #force_inline proc "contextless" (dst: KREG, src: YMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPMOVQ2M, operand_count = 2, ops = {op_kreg(dst), op_ymm(src), {}, {}} }, 1845) } inst_vpmovq2m_k_zmm :: #force_inline proc "contextless" (dst: KREG, src: ZMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPMOVQ2M, operand_count = 2, ops = {op_kreg(dst), op_zmm(src), {}, {}} }, 1846) } -emit_vpmovq2m_k_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: XMM) { append(instructions, inst_vpmovq2m_k_xmm(dst, src)) } -emit_vpmovq2m_k_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: YMM) { append(instructions, inst_vpmovq2m_k_ymm(dst, src)) } -emit_vpmovq2m_k_zmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: ZMM) { append(instructions, inst_vpmovq2m_k_zmm(dst, src)) } +emit_vpmovq2m_k_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: XMM) { append_elem(instructions, inst_vpmovq2m_k_xmm(dst, src)) } +emit_vpmovq2m_k_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: YMM) { append_elem(instructions, inst_vpmovq2m_k_ymm(dst, src)) } +emit_vpmovq2m_k_zmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: ZMM) { append_elem(instructions, inst_vpmovq2m_k_zmm(dst, src)) } inst_vpmovm2b_xmm_k :: #force_inline proc "contextless" (dst: XMM, src: KREG) -> Instruction { return with_hint(Instruction{ mnemonic = .VPMOVM2B, operand_count = 2, ops = {op_xmm(dst), op_kreg(src), {}, {}} }, 1847) } inst_vpmovm2b_ymm_k :: #force_inline proc "contextless" (dst: YMM, src: KREG) -> Instruction { return with_hint(Instruction{ mnemonic = .VPMOVM2B, operand_count = 2, ops = {op_ymm(dst), op_kreg(src), {}, {}} }, 1848) } inst_vpmovm2b_zmm_k :: #force_inline proc "contextless" (dst: ZMM, src: KREG) -> Instruction { return with_hint(Instruction{ mnemonic = .VPMOVM2B, operand_count = 2, ops = {op_zmm(dst), op_kreg(src), {}, {}} }, 1849) } -emit_vpmovm2b_xmm_k :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: KREG) { append(instructions, inst_vpmovm2b_xmm_k(dst, src)) } -emit_vpmovm2b_ymm_k :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: KREG) { append(instructions, inst_vpmovm2b_ymm_k(dst, src)) } -emit_vpmovm2b_zmm_k :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ZMM, src: KREG) { append(instructions, inst_vpmovm2b_zmm_k(dst, src)) } +emit_vpmovm2b_xmm_k :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: KREG) { append_elem(instructions, inst_vpmovm2b_xmm_k(dst, src)) } +emit_vpmovm2b_ymm_k :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: KREG) { append_elem(instructions, inst_vpmovm2b_ymm_k(dst, src)) } +emit_vpmovm2b_zmm_k :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ZMM, src: KREG) { append_elem(instructions, inst_vpmovm2b_zmm_k(dst, src)) } inst_vpmovm2w_xmm_k :: #force_inline proc "contextless" (dst: XMM, src: KREG) -> Instruction { return with_hint(Instruction{ mnemonic = .VPMOVM2W, operand_count = 2, ops = {op_xmm(dst), op_kreg(src), {}, {}} }, 1850) } inst_vpmovm2w_ymm_k :: #force_inline proc "contextless" (dst: YMM, src: KREG) -> Instruction { return with_hint(Instruction{ mnemonic = .VPMOVM2W, operand_count = 2, ops = {op_ymm(dst), op_kreg(src), {}, {}} }, 1851) } inst_vpmovm2w_zmm_k :: #force_inline proc "contextless" (dst: ZMM, src: KREG) -> Instruction { return with_hint(Instruction{ mnemonic = .VPMOVM2W, operand_count = 2, ops = {op_zmm(dst), op_kreg(src), {}, {}} }, 1852) } -emit_vpmovm2w_xmm_k :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: KREG) { append(instructions, inst_vpmovm2w_xmm_k(dst, src)) } -emit_vpmovm2w_ymm_k :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: KREG) { append(instructions, inst_vpmovm2w_ymm_k(dst, src)) } -emit_vpmovm2w_zmm_k :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ZMM, src: KREG) { append(instructions, inst_vpmovm2w_zmm_k(dst, src)) } +emit_vpmovm2w_xmm_k :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: KREG) { append_elem(instructions, inst_vpmovm2w_xmm_k(dst, src)) } +emit_vpmovm2w_ymm_k :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: KREG) { append_elem(instructions, inst_vpmovm2w_ymm_k(dst, src)) } +emit_vpmovm2w_zmm_k :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ZMM, src: KREG) { append_elem(instructions, inst_vpmovm2w_zmm_k(dst, src)) } inst_vpmovm2d_xmm_k :: #force_inline proc "contextless" (dst: XMM, src: KREG) -> Instruction { return with_hint(Instruction{ mnemonic = .VPMOVM2D, operand_count = 2, ops = {op_xmm(dst), op_kreg(src), {}, {}} }, 1853) } inst_vpmovm2d_ymm_k :: #force_inline proc "contextless" (dst: YMM, src: KREG) -> Instruction { return with_hint(Instruction{ mnemonic = .VPMOVM2D, operand_count = 2, ops = {op_ymm(dst), op_kreg(src), {}, {}} }, 1854) } inst_vpmovm2d_zmm_k :: #force_inline proc "contextless" (dst: ZMM, src: KREG) -> Instruction { return with_hint(Instruction{ mnemonic = .VPMOVM2D, operand_count = 2, ops = {op_zmm(dst), op_kreg(src), {}, {}} }, 1855) } -emit_vpmovm2d_xmm_k :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: KREG) { append(instructions, inst_vpmovm2d_xmm_k(dst, src)) } -emit_vpmovm2d_ymm_k :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: KREG) { append(instructions, inst_vpmovm2d_ymm_k(dst, src)) } -emit_vpmovm2d_zmm_k :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ZMM, src: KREG) { append(instructions, inst_vpmovm2d_zmm_k(dst, src)) } +emit_vpmovm2d_xmm_k :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: KREG) { append_elem(instructions, inst_vpmovm2d_xmm_k(dst, src)) } +emit_vpmovm2d_ymm_k :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: KREG) { append_elem(instructions, inst_vpmovm2d_ymm_k(dst, src)) } +emit_vpmovm2d_zmm_k :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ZMM, src: KREG) { append_elem(instructions, inst_vpmovm2d_zmm_k(dst, src)) } inst_vpmovm2q_xmm_k :: #force_inline proc "contextless" (dst: XMM, src: KREG) -> Instruction { return with_hint(Instruction{ mnemonic = .VPMOVM2Q, operand_count = 2, ops = {op_xmm(dst), op_kreg(src), {}, {}} }, 1856) } inst_vpmovm2q_ymm_k :: #force_inline proc "contextless" (dst: YMM, src: KREG) -> Instruction { return with_hint(Instruction{ mnemonic = .VPMOVM2Q, operand_count = 2, ops = {op_ymm(dst), op_kreg(src), {}, {}} }, 1857) } inst_vpmovm2q_zmm_k :: #force_inline proc "contextless" (dst: ZMM, src: KREG) -> Instruction { return with_hint(Instruction{ mnemonic = .VPMOVM2Q, operand_count = 2, ops = {op_zmm(dst), op_kreg(src), {}, {}} }, 1858) } -emit_vpmovm2q_xmm_k :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: KREG) { append(instructions, inst_vpmovm2q_xmm_k(dst, src)) } -emit_vpmovm2q_ymm_k :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: KREG) { append(instructions, inst_vpmovm2q_ymm_k(dst, src)) } -emit_vpmovm2q_zmm_k :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ZMM, src: KREG) { append(instructions, inst_vpmovm2q_zmm_k(dst, src)) } +emit_vpmovm2q_xmm_k :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: KREG) { append_elem(instructions, inst_vpmovm2q_xmm_k(dst, src)) } +emit_vpmovm2q_ymm_k :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: KREG) { append_elem(instructions, inst_vpmovm2q_ymm_k(dst, src)) } +emit_vpmovm2q_zmm_k :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ZMM, src: KREG) { append_elem(instructions, inst_vpmovm2q_zmm_k(dst, src)) } inst_vpmovqb_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPMOVQB, operand_count = 2, ops = {op_xmm(dst), op_xmm(src), {}, {}} }, 1859) } inst_vpmovqb_m32_xmm :: #force_inline proc "contextless" (dst: Mem32, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPMOVQB, operand_count = 2, ops = {op_mem(dst.mem, 4), op_xmm(src), {}, {}} }, 1859) } inst_vpmovqb_xmm_ymm :: #force_inline proc "contextless" (dst: XMM, src: YMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPMOVQB, operand_count = 2, ops = {op_xmm(dst), op_ymm(src), {}, {}} }, 1860) } inst_vpmovqb_m32_ymm :: #force_inline proc "contextless" (dst: Mem32, src: YMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPMOVQB, operand_count = 2, ops = {op_mem(dst.mem, 4), op_ymm(src), {}, {}} }, 1860) } inst_vpmovqb_xmm_zmm :: #force_inline proc "contextless" (dst: XMM, src: ZMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPMOVQB, operand_count = 2, ops = {op_xmm(dst), op_zmm(src), {}, {}} }, 1861) } inst_vpmovqb_m64_zmm :: #force_inline proc "contextless" (dst: Mem64, src: ZMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPMOVQB, operand_count = 2, ops = {op_mem(dst.mem, 8), op_zmm(src), {}, {}} }, 1861) } -emit_vpmovqb_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append(instructions, inst_vpmovqb_xmm_xmm(dst, src)) } -emit_vpmovqb_m32_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem32, src: XMM) { append(instructions, inst_vpmovqb_m32_xmm(dst, src)) } -emit_vpmovqb_xmm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: YMM) { append(instructions, inst_vpmovqb_xmm_ymm(dst, src)) } -emit_vpmovqb_m32_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem32, src: YMM) { append(instructions, inst_vpmovqb_m32_ymm(dst, src)) } -emit_vpmovqb_xmm_zmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: ZMM) { append(instructions, inst_vpmovqb_xmm_zmm(dst, src)) } -emit_vpmovqb_m64_zmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem64, src: ZMM) { append(instructions, inst_vpmovqb_m64_zmm(dst, src)) } +emit_vpmovqb_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append_elem(instructions, inst_vpmovqb_xmm_xmm(dst, src)) } +emit_vpmovqb_m32_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem32, src: XMM) { append_elem(instructions, inst_vpmovqb_m32_xmm(dst, src)) } +emit_vpmovqb_xmm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: YMM) { append_elem(instructions, inst_vpmovqb_xmm_ymm(dst, src)) } +emit_vpmovqb_m32_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem32, src: YMM) { append_elem(instructions, inst_vpmovqb_m32_ymm(dst, src)) } +emit_vpmovqb_xmm_zmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: ZMM) { append_elem(instructions, inst_vpmovqb_xmm_zmm(dst, src)) } +emit_vpmovqb_m64_zmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem64, src: ZMM) { append_elem(instructions, inst_vpmovqb_m64_zmm(dst, src)) } inst_vpmovsqb_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPMOVSQB, operand_count = 2, ops = {op_xmm(dst), op_xmm(src), {}, {}} }, 1862) } inst_vpmovsqb_m32_xmm :: #force_inline proc "contextless" (dst: Mem32, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPMOVSQB, operand_count = 2, ops = {op_mem(dst.mem, 4), op_xmm(src), {}, {}} }, 1862) } inst_vpmovsqb_xmm_ymm :: #force_inline proc "contextless" (dst: XMM, src: YMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPMOVSQB, operand_count = 2, ops = {op_xmm(dst), op_ymm(src), {}, {}} }, 1863) } inst_vpmovsqb_m32_ymm :: #force_inline proc "contextless" (dst: Mem32, src: YMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPMOVSQB, operand_count = 2, ops = {op_mem(dst.mem, 4), op_ymm(src), {}, {}} }, 1863) } inst_vpmovsqb_xmm_zmm :: #force_inline proc "contextless" (dst: XMM, src: ZMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPMOVSQB, operand_count = 2, ops = {op_xmm(dst), op_zmm(src), {}, {}} }, 1864) } inst_vpmovsqb_m64_zmm :: #force_inline proc "contextless" (dst: Mem64, src: ZMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPMOVSQB, operand_count = 2, ops = {op_mem(dst.mem, 8), op_zmm(src), {}, {}} }, 1864) } -emit_vpmovsqb_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append(instructions, inst_vpmovsqb_xmm_xmm(dst, src)) } -emit_vpmovsqb_m32_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem32, src: XMM) { append(instructions, inst_vpmovsqb_m32_xmm(dst, src)) } -emit_vpmovsqb_xmm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: YMM) { append(instructions, inst_vpmovsqb_xmm_ymm(dst, src)) } -emit_vpmovsqb_m32_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem32, src: YMM) { append(instructions, inst_vpmovsqb_m32_ymm(dst, src)) } -emit_vpmovsqb_xmm_zmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: ZMM) { append(instructions, inst_vpmovsqb_xmm_zmm(dst, src)) } -emit_vpmovsqb_m64_zmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem64, src: ZMM) { append(instructions, inst_vpmovsqb_m64_zmm(dst, src)) } +emit_vpmovsqb_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append_elem(instructions, inst_vpmovsqb_xmm_xmm(dst, src)) } +emit_vpmovsqb_m32_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem32, src: XMM) { append_elem(instructions, inst_vpmovsqb_m32_xmm(dst, src)) } +emit_vpmovsqb_xmm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: YMM) { append_elem(instructions, inst_vpmovsqb_xmm_ymm(dst, src)) } +emit_vpmovsqb_m32_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem32, src: YMM) { append_elem(instructions, inst_vpmovsqb_m32_ymm(dst, src)) } +emit_vpmovsqb_xmm_zmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: ZMM) { append_elem(instructions, inst_vpmovsqb_xmm_zmm(dst, src)) } +emit_vpmovsqb_m64_zmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem64, src: ZMM) { append_elem(instructions, inst_vpmovsqb_m64_zmm(dst, src)) } inst_vpmovusqb_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPMOVUSQB, operand_count = 2, ops = {op_xmm(dst), op_xmm(src), {}, {}} }, 1865) } inst_vpmovusqb_m32_xmm :: #force_inline proc "contextless" (dst: Mem32, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPMOVUSQB, operand_count = 2, ops = {op_mem(dst.mem, 4), op_xmm(src), {}, {}} }, 1865) } inst_vpmovusqb_xmm_ymm :: #force_inline proc "contextless" (dst: XMM, src: YMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPMOVUSQB, operand_count = 2, ops = {op_xmm(dst), op_ymm(src), {}, {}} }, 1866) } inst_vpmovusqb_m32_ymm :: #force_inline proc "contextless" (dst: Mem32, src: YMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPMOVUSQB, operand_count = 2, ops = {op_mem(dst.mem, 4), op_ymm(src), {}, {}} }, 1866) } inst_vpmovusqb_xmm_zmm :: #force_inline proc "contextless" (dst: XMM, src: ZMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPMOVUSQB, operand_count = 2, ops = {op_xmm(dst), op_zmm(src), {}, {}} }, 1867) } inst_vpmovusqb_m64_zmm :: #force_inline proc "contextless" (dst: Mem64, src: ZMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPMOVUSQB, operand_count = 2, ops = {op_mem(dst.mem, 8), op_zmm(src), {}, {}} }, 1867) } -emit_vpmovusqb_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append(instructions, inst_vpmovusqb_xmm_xmm(dst, src)) } -emit_vpmovusqb_m32_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem32, src: XMM) { append(instructions, inst_vpmovusqb_m32_xmm(dst, src)) } -emit_vpmovusqb_xmm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: YMM) { append(instructions, inst_vpmovusqb_xmm_ymm(dst, src)) } -emit_vpmovusqb_m32_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem32, src: YMM) { append(instructions, inst_vpmovusqb_m32_ymm(dst, src)) } -emit_vpmovusqb_xmm_zmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: ZMM) { append(instructions, inst_vpmovusqb_xmm_zmm(dst, src)) } -emit_vpmovusqb_m64_zmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem64, src: ZMM) { append(instructions, inst_vpmovusqb_m64_zmm(dst, src)) } +emit_vpmovusqb_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append_elem(instructions, inst_vpmovusqb_xmm_xmm(dst, src)) } +emit_vpmovusqb_m32_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem32, src: XMM) { append_elem(instructions, inst_vpmovusqb_m32_xmm(dst, src)) } +emit_vpmovusqb_xmm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: YMM) { append_elem(instructions, inst_vpmovusqb_xmm_ymm(dst, src)) } +emit_vpmovusqb_m32_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem32, src: YMM) { append_elem(instructions, inst_vpmovusqb_m32_ymm(dst, src)) } +emit_vpmovusqb_xmm_zmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: ZMM) { append_elem(instructions, inst_vpmovusqb_xmm_zmm(dst, src)) } +emit_vpmovusqb_m64_zmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem64, src: ZMM) { append_elem(instructions, inst_vpmovusqb_m64_zmm(dst, src)) } inst_vpmovqw_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPMOVQW, operand_count = 2, ops = {op_xmm(dst), op_xmm(src), {}, {}} }, 1868) } inst_vpmovqw_m32_xmm :: #force_inline proc "contextless" (dst: Mem32, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPMOVQW, operand_count = 2, ops = {op_mem(dst.mem, 4), op_xmm(src), {}, {}} }, 1868) } inst_vpmovqw_xmm_ymm :: #force_inline proc "contextless" (dst: XMM, src: YMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPMOVQW, operand_count = 2, ops = {op_xmm(dst), op_ymm(src), {}, {}} }, 1869) } inst_vpmovqw_m64_ymm :: #force_inline proc "contextless" (dst: Mem64, src: YMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPMOVQW, operand_count = 2, ops = {op_mem(dst.mem, 8), op_ymm(src), {}, {}} }, 1869) } inst_vpmovqw_xmm_zmm :: #force_inline proc "contextless" (dst: XMM, src: ZMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPMOVQW, operand_count = 2, ops = {op_xmm(dst), op_zmm(src), {}, {}} }, 1870) } inst_vpmovqw_m128_zmm :: #force_inline proc "contextless" (dst: Mem128, src: ZMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPMOVQW, operand_count = 2, ops = {op_mem(dst.mem, 16), op_zmm(src), {}, {}} }, 1870) } -emit_vpmovqw_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append(instructions, inst_vpmovqw_xmm_xmm(dst, src)) } -emit_vpmovqw_m32_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem32, src: XMM) { append(instructions, inst_vpmovqw_m32_xmm(dst, src)) } -emit_vpmovqw_xmm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: YMM) { append(instructions, inst_vpmovqw_xmm_ymm(dst, src)) } -emit_vpmovqw_m64_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem64, src: YMM) { append(instructions, inst_vpmovqw_m64_ymm(dst, src)) } -emit_vpmovqw_xmm_zmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: ZMM) { append(instructions, inst_vpmovqw_xmm_zmm(dst, src)) } -emit_vpmovqw_m128_zmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem128, src: ZMM) { append(instructions, inst_vpmovqw_m128_zmm(dst, src)) } +emit_vpmovqw_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append_elem(instructions, inst_vpmovqw_xmm_xmm(dst, src)) } +emit_vpmovqw_m32_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem32, src: XMM) { append_elem(instructions, inst_vpmovqw_m32_xmm(dst, src)) } +emit_vpmovqw_xmm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: YMM) { append_elem(instructions, inst_vpmovqw_xmm_ymm(dst, src)) } +emit_vpmovqw_m64_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem64, src: YMM) { append_elem(instructions, inst_vpmovqw_m64_ymm(dst, src)) } +emit_vpmovqw_xmm_zmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: ZMM) { append_elem(instructions, inst_vpmovqw_xmm_zmm(dst, src)) } +emit_vpmovqw_m128_zmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem128, src: ZMM) { append_elem(instructions, inst_vpmovqw_m128_zmm(dst, src)) } inst_vpmovsqw_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPMOVSQW, operand_count = 2, ops = {op_xmm(dst), op_xmm(src), {}, {}} }, 1871) } inst_vpmovsqw_m32_xmm :: #force_inline proc "contextless" (dst: Mem32, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPMOVSQW, operand_count = 2, ops = {op_mem(dst.mem, 4), op_xmm(src), {}, {}} }, 1871) } inst_vpmovsqw_xmm_ymm :: #force_inline proc "contextless" (dst: XMM, src: YMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPMOVSQW, operand_count = 2, ops = {op_xmm(dst), op_ymm(src), {}, {}} }, 1872) } inst_vpmovsqw_m64_ymm :: #force_inline proc "contextless" (dst: Mem64, src: YMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPMOVSQW, operand_count = 2, ops = {op_mem(dst.mem, 8), op_ymm(src), {}, {}} }, 1872) } inst_vpmovsqw_xmm_zmm :: #force_inline proc "contextless" (dst: XMM, src: ZMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPMOVSQW, operand_count = 2, ops = {op_xmm(dst), op_zmm(src), {}, {}} }, 1873) } inst_vpmovsqw_m128_zmm :: #force_inline proc "contextless" (dst: Mem128, src: ZMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPMOVSQW, operand_count = 2, ops = {op_mem(dst.mem, 16), op_zmm(src), {}, {}} }, 1873) } -emit_vpmovsqw_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append(instructions, inst_vpmovsqw_xmm_xmm(dst, src)) } -emit_vpmovsqw_m32_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem32, src: XMM) { append(instructions, inst_vpmovsqw_m32_xmm(dst, src)) } -emit_vpmovsqw_xmm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: YMM) { append(instructions, inst_vpmovsqw_xmm_ymm(dst, src)) } -emit_vpmovsqw_m64_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem64, src: YMM) { append(instructions, inst_vpmovsqw_m64_ymm(dst, src)) } -emit_vpmovsqw_xmm_zmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: ZMM) { append(instructions, inst_vpmovsqw_xmm_zmm(dst, src)) } -emit_vpmovsqw_m128_zmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem128, src: ZMM) { append(instructions, inst_vpmovsqw_m128_zmm(dst, src)) } +emit_vpmovsqw_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append_elem(instructions, inst_vpmovsqw_xmm_xmm(dst, src)) } +emit_vpmovsqw_m32_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem32, src: XMM) { append_elem(instructions, inst_vpmovsqw_m32_xmm(dst, src)) } +emit_vpmovsqw_xmm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: YMM) { append_elem(instructions, inst_vpmovsqw_xmm_ymm(dst, src)) } +emit_vpmovsqw_m64_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem64, src: YMM) { append_elem(instructions, inst_vpmovsqw_m64_ymm(dst, src)) } +emit_vpmovsqw_xmm_zmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: ZMM) { append_elem(instructions, inst_vpmovsqw_xmm_zmm(dst, src)) } +emit_vpmovsqw_m128_zmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem128, src: ZMM) { append_elem(instructions, inst_vpmovsqw_m128_zmm(dst, src)) } inst_vpmovusqw_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPMOVUSQW, operand_count = 2, ops = {op_xmm(dst), op_xmm(src), {}, {}} }, 1874) } inst_vpmovusqw_m32_xmm :: #force_inline proc "contextless" (dst: Mem32, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPMOVUSQW, operand_count = 2, ops = {op_mem(dst.mem, 4), op_xmm(src), {}, {}} }, 1874) } inst_vpmovusqw_xmm_ymm :: #force_inline proc "contextless" (dst: XMM, src: YMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPMOVUSQW, operand_count = 2, ops = {op_xmm(dst), op_ymm(src), {}, {}} }, 1875) } inst_vpmovusqw_m64_ymm :: #force_inline proc "contextless" (dst: Mem64, src: YMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPMOVUSQW, operand_count = 2, ops = {op_mem(dst.mem, 8), op_ymm(src), {}, {}} }, 1875) } inst_vpmovusqw_xmm_zmm :: #force_inline proc "contextless" (dst: XMM, src: ZMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPMOVUSQW, operand_count = 2, ops = {op_xmm(dst), op_zmm(src), {}, {}} }, 1876) } inst_vpmovusqw_m128_zmm :: #force_inline proc "contextless" (dst: Mem128, src: ZMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPMOVUSQW, operand_count = 2, ops = {op_mem(dst.mem, 16), op_zmm(src), {}, {}} }, 1876) } -emit_vpmovusqw_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append(instructions, inst_vpmovusqw_xmm_xmm(dst, src)) } -emit_vpmovusqw_m32_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem32, src: XMM) { append(instructions, inst_vpmovusqw_m32_xmm(dst, src)) } -emit_vpmovusqw_xmm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: YMM) { append(instructions, inst_vpmovusqw_xmm_ymm(dst, src)) } -emit_vpmovusqw_m64_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem64, src: YMM) { append(instructions, inst_vpmovusqw_m64_ymm(dst, src)) } -emit_vpmovusqw_xmm_zmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: ZMM) { append(instructions, inst_vpmovusqw_xmm_zmm(dst, src)) } -emit_vpmovusqw_m128_zmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem128, src: ZMM) { append(instructions, inst_vpmovusqw_m128_zmm(dst, src)) } +emit_vpmovusqw_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append_elem(instructions, inst_vpmovusqw_xmm_xmm(dst, src)) } +emit_vpmovusqw_m32_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem32, src: XMM) { append_elem(instructions, inst_vpmovusqw_m32_xmm(dst, src)) } +emit_vpmovusqw_xmm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: YMM) { append_elem(instructions, inst_vpmovusqw_xmm_ymm(dst, src)) } +emit_vpmovusqw_m64_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem64, src: YMM) { append_elem(instructions, inst_vpmovusqw_m64_ymm(dst, src)) } +emit_vpmovusqw_xmm_zmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: ZMM) { append_elem(instructions, inst_vpmovusqw_xmm_zmm(dst, src)) } +emit_vpmovusqw_m128_zmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem128, src: ZMM) { append_elem(instructions, inst_vpmovusqw_m128_zmm(dst, src)) } inst_vpmovqd_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPMOVQD, operand_count = 2, ops = {op_xmm(dst), op_xmm(src), {}, {}} }, 1877) } inst_vpmovqd_m64_xmm :: #force_inline proc "contextless" (dst: Mem64, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPMOVQD, operand_count = 2, ops = {op_mem(dst.mem, 8), op_xmm(src), {}, {}} }, 1877) } inst_vpmovqd_xmm_ymm :: #force_inline proc "contextless" (dst: XMM, src: YMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPMOVQD, operand_count = 2, ops = {op_xmm(dst), op_ymm(src), {}, {}} }, 1878) } inst_vpmovqd_m128_ymm :: #force_inline proc "contextless" (dst: Mem128, src: YMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPMOVQD, operand_count = 2, ops = {op_mem(dst.mem, 16), op_ymm(src), {}, {}} }, 1878) } inst_vpmovqd_ymm_zmm :: #force_inline proc "contextless" (dst: YMM, src: ZMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPMOVQD, operand_count = 2, ops = {op_ymm(dst), op_zmm(src), {}, {}} }, 1879) } inst_vpmovqd_m256_zmm :: #force_inline proc "contextless" (dst: Mem256, src: ZMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPMOVQD, operand_count = 2, ops = {op_mem(dst.mem, 32), op_zmm(src), {}, {}} }, 1879) } -emit_vpmovqd_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append(instructions, inst_vpmovqd_xmm_xmm(dst, src)) } -emit_vpmovqd_m64_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem64, src: XMM) { append(instructions, inst_vpmovqd_m64_xmm(dst, src)) } -emit_vpmovqd_xmm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: YMM) { append(instructions, inst_vpmovqd_xmm_ymm(dst, src)) } -emit_vpmovqd_m128_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem128, src: YMM) { append(instructions, inst_vpmovqd_m128_ymm(dst, src)) } -emit_vpmovqd_ymm_zmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: ZMM) { append(instructions, inst_vpmovqd_ymm_zmm(dst, src)) } -emit_vpmovqd_m256_zmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem256, src: ZMM) { append(instructions, inst_vpmovqd_m256_zmm(dst, src)) } +emit_vpmovqd_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append_elem(instructions, inst_vpmovqd_xmm_xmm(dst, src)) } +emit_vpmovqd_m64_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem64, src: XMM) { append_elem(instructions, inst_vpmovqd_m64_xmm(dst, src)) } +emit_vpmovqd_xmm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: YMM) { append_elem(instructions, inst_vpmovqd_xmm_ymm(dst, src)) } +emit_vpmovqd_m128_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem128, src: YMM) { append_elem(instructions, inst_vpmovqd_m128_ymm(dst, src)) } +emit_vpmovqd_ymm_zmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: ZMM) { append_elem(instructions, inst_vpmovqd_ymm_zmm(dst, src)) } +emit_vpmovqd_m256_zmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem256, src: ZMM) { append_elem(instructions, inst_vpmovqd_m256_zmm(dst, src)) } inst_vpmovsqd_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPMOVSQD, operand_count = 2, ops = {op_xmm(dst), op_xmm(src), {}, {}} }, 1880) } inst_vpmovsqd_m64_xmm :: #force_inline proc "contextless" (dst: Mem64, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPMOVSQD, operand_count = 2, ops = {op_mem(dst.mem, 8), op_xmm(src), {}, {}} }, 1880) } inst_vpmovsqd_xmm_ymm :: #force_inline proc "contextless" (dst: XMM, src: YMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPMOVSQD, operand_count = 2, ops = {op_xmm(dst), op_ymm(src), {}, {}} }, 1881) } inst_vpmovsqd_m128_ymm :: #force_inline proc "contextless" (dst: Mem128, src: YMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPMOVSQD, operand_count = 2, ops = {op_mem(dst.mem, 16), op_ymm(src), {}, {}} }, 1881) } inst_vpmovsqd_ymm_zmm :: #force_inline proc "contextless" (dst: YMM, src: ZMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPMOVSQD, operand_count = 2, ops = {op_ymm(dst), op_zmm(src), {}, {}} }, 1882) } inst_vpmovsqd_m256_zmm :: #force_inline proc "contextless" (dst: Mem256, src: ZMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPMOVSQD, operand_count = 2, ops = {op_mem(dst.mem, 32), op_zmm(src), {}, {}} }, 1882) } -emit_vpmovsqd_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append(instructions, inst_vpmovsqd_xmm_xmm(dst, src)) } -emit_vpmovsqd_m64_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem64, src: XMM) { append(instructions, inst_vpmovsqd_m64_xmm(dst, src)) } -emit_vpmovsqd_xmm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: YMM) { append(instructions, inst_vpmovsqd_xmm_ymm(dst, src)) } -emit_vpmovsqd_m128_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem128, src: YMM) { append(instructions, inst_vpmovsqd_m128_ymm(dst, src)) } -emit_vpmovsqd_ymm_zmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: ZMM) { append(instructions, inst_vpmovsqd_ymm_zmm(dst, src)) } -emit_vpmovsqd_m256_zmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem256, src: ZMM) { append(instructions, inst_vpmovsqd_m256_zmm(dst, src)) } +emit_vpmovsqd_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append_elem(instructions, inst_vpmovsqd_xmm_xmm(dst, src)) } +emit_vpmovsqd_m64_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem64, src: XMM) { append_elem(instructions, inst_vpmovsqd_m64_xmm(dst, src)) } +emit_vpmovsqd_xmm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: YMM) { append_elem(instructions, inst_vpmovsqd_xmm_ymm(dst, src)) } +emit_vpmovsqd_m128_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem128, src: YMM) { append_elem(instructions, inst_vpmovsqd_m128_ymm(dst, src)) } +emit_vpmovsqd_ymm_zmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: ZMM) { append_elem(instructions, inst_vpmovsqd_ymm_zmm(dst, src)) } +emit_vpmovsqd_m256_zmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem256, src: ZMM) { append_elem(instructions, inst_vpmovsqd_m256_zmm(dst, src)) } inst_vpmovusqd_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPMOVUSQD, operand_count = 2, ops = {op_xmm(dst), op_xmm(src), {}, {}} }, 1883) } inst_vpmovusqd_m64_xmm :: #force_inline proc "contextless" (dst: Mem64, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPMOVUSQD, operand_count = 2, ops = {op_mem(dst.mem, 8), op_xmm(src), {}, {}} }, 1883) } inst_vpmovusqd_xmm_ymm :: #force_inline proc "contextless" (dst: XMM, src: YMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPMOVUSQD, operand_count = 2, ops = {op_xmm(dst), op_ymm(src), {}, {}} }, 1884) } inst_vpmovusqd_m128_ymm :: #force_inline proc "contextless" (dst: Mem128, src: YMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPMOVUSQD, operand_count = 2, ops = {op_mem(dst.mem, 16), op_ymm(src), {}, {}} }, 1884) } inst_vpmovusqd_ymm_zmm :: #force_inline proc "contextless" (dst: YMM, src: ZMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPMOVUSQD, operand_count = 2, ops = {op_ymm(dst), op_zmm(src), {}, {}} }, 1885) } inst_vpmovusqd_m256_zmm :: #force_inline proc "contextless" (dst: Mem256, src: ZMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPMOVUSQD, operand_count = 2, ops = {op_mem(dst.mem, 32), op_zmm(src), {}, {}} }, 1885) } -emit_vpmovusqd_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append(instructions, inst_vpmovusqd_xmm_xmm(dst, src)) } -emit_vpmovusqd_m64_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem64, src: XMM) { append(instructions, inst_vpmovusqd_m64_xmm(dst, src)) } -emit_vpmovusqd_xmm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: YMM) { append(instructions, inst_vpmovusqd_xmm_ymm(dst, src)) } -emit_vpmovusqd_m128_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem128, src: YMM) { append(instructions, inst_vpmovusqd_m128_ymm(dst, src)) } -emit_vpmovusqd_ymm_zmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: ZMM) { append(instructions, inst_vpmovusqd_ymm_zmm(dst, src)) } -emit_vpmovusqd_m256_zmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem256, src: ZMM) { append(instructions, inst_vpmovusqd_m256_zmm(dst, src)) } +emit_vpmovusqd_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append_elem(instructions, inst_vpmovusqd_xmm_xmm(dst, src)) } +emit_vpmovusqd_m64_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem64, src: XMM) { append_elem(instructions, inst_vpmovusqd_m64_xmm(dst, src)) } +emit_vpmovusqd_xmm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: YMM) { append_elem(instructions, inst_vpmovusqd_xmm_ymm(dst, src)) } +emit_vpmovusqd_m128_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem128, src: YMM) { append_elem(instructions, inst_vpmovusqd_m128_ymm(dst, src)) } +emit_vpmovusqd_ymm_zmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: ZMM) { append_elem(instructions, inst_vpmovusqd_ymm_zmm(dst, src)) } +emit_vpmovusqd_m256_zmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem256, src: ZMM) { append_elem(instructions, inst_vpmovusqd_m256_zmm(dst, src)) } inst_vpmovdb_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPMOVDB, operand_count = 2, ops = {op_xmm(dst), op_xmm(src), {}, {}} }, 1886) } inst_vpmovdb_m32_xmm :: #force_inline proc "contextless" (dst: Mem32, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPMOVDB, operand_count = 2, ops = {op_mem(dst.mem, 4), op_xmm(src), {}, {}} }, 1886) } inst_vpmovdb_xmm_ymm :: #force_inline proc "contextless" (dst: XMM, src: YMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPMOVDB, operand_count = 2, ops = {op_xmm(dst), op_ymm(src), {}, {}} }, 1887) } inst_vpmovdb_m64_ymm :: #force_inline proc "contextless" (dst: Mem64, src: YMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPMOVDB, operand_count = 2, ops = {op_mem(dst.mem, 8), op_ymm(src), {}, {}} }, 1887) } inst_vpmovdb_xmm_zmm :: #force_inline proc "contextless" (dst: XMM, src: ZMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPMOVDB, operand_count = 2, ops = {op_xmm(dst), op_zmm(src), {}, {}} }, 1888) } inst_vpmovdb_m128_zmm :: #force_inline proc "contextless" (dst: Mem128, src: ZMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPMOVDB, operand_count = 2, ops = {op_mem(dst.mem, 16), op_zmm(src), {}, {}} }, 1888) } -emit_vpmovdb_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append(instructions, inst_vpmovdb_xmm_xmm(dst, src)) } -emit_vpmovdb_m32_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem32, src: XMM) { append(instructions, inst_vpmovdb_m32_xmm(dst, src)) } -emit_vpmovdb_xmm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: YMM) { append(instructions, inst_vpmovdb_xmm_ymm(dst, src)) } -emit_vpmovdb_m64_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem64, src: YMM) { append(instructions, inst_vpmovdb_m64_ymm(dst, src)) } -emit_vpmovdb_xmm_zmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: ZMM) { append(instructions, inst_vpmovdb_xmm_zmm(dst, src)) } -emit_vpmovdb_m128_zmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem128, src: ZMM) { append(instructions, inst_vpmovdb_m128_zmm(dst, src)) } +emit_vpmovdb_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append_elem(instructions, inst_vpmovdb_xmm_xmm(dst, src)) } +emit_vpmovdb_m32_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem32, src: XMM) { append_elem(instructions, inst_vpmovdb_m32_xmm(dst, src)) } +emit_vpmovdb_xmm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: YMM) { append_elem(instructions, inst_vpmovdb_xmm_ymm(dst, src)) } +emit_vpmovdb_m64_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem64, src: YMM) { append_elem(instructions, inst_vpmovdb_m64_ymm(dst, src)) } +emit_vpmovdb_xmm_zmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: ZMM) { append_elem(instructions, inst_vpmovdb_xmm_zmm(dst, src)) } +emit_vpmovdb_m128_zmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem128, src: ZMM) { append_elem(instructions, inst_vpmovdb_m128_zmm(dst, src)) } inst_vpmovsdb_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPMOVSDB, operand_count = 2, ops = {op_xmm(dst), op_xmm(src), {}, {}} }, 1889) } inst_vpmovsdb_m32_xmm :: #force_inline proc "contextless" (dst: Mem32, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPMOVSDB, operand_count = 2, ops = {op_mem(dst.mem, 4), op_xmm(src), {}, {}} }, 1889) } inst_vpmovsdb_xmm_ymm :: #force_inline proc "contextless" (dst: XMM, src: YMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPMOVSDB, operand_count = 2, ops = {op_xmm(dst), op_ymm(src), {}, {}} }, 1890) } inst_vpmovsdb_m64_ymm :: #force_inline proc "contextless" (dst: Mem64, src: YMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPMOVSDB, operand_count = 2, ops = {op_mem(dst.mem, 8), op_ymm(src), {}, {}} }, 1890) } inst_vpmovsdb_xmm_zmm :: #force_inline proc "contextless" (dst: XMM, src: ZMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPMOVSDB, operand_count = 2, ops = {op_xmm(dst), op_zmm(src), {}, {}} }, 1891) } inst_vpmovsdb_m128_zmm :: #force_inline proc "contextless" (dst: Mem128, src: ZMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPMOVSDB, operand_count = 2, ops = {op_mem(dst.mem, 16), op_zmm(src), {}, {}} }, 1891) } -emit_vpmovsdb_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append(instructions, inst_vpmovsdb_xmm_xmm(dst, src)) } -emit_vpmovsdb_m32_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem32, src: XMM) { append(instructions, inst_vpmovsdb_m32_xmm(dst, src)) } -emit_vpmovsdb_xmm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: YMM) { append(instructions, inst_vpmovsdb_xmm_ymm(dst, src)) } -emit_vpmovsdb_m64_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem64, src: YMM) { append(instructions, inst_vpmovsdb_m64_ymm(dst, src)) } -emit_vpmovsdb_xmm_zmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: ZMM) { append(instructions, inst_vpmovsdb_xmm_zmm(dst, src)) } -emit_vpmovsdb_m128_zmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem128, src: ZMM) { append(instructions, inst_vpmovsdb_m128_zmm(dst, src)) } +emit_vpmovsdb_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append_elem(instructions, inst_vpmovsdb_xmm_xmm(dst, src)) } +emit_vpmovsdb_m32_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem32, src: XMM) { append_elem(instructions, inst_vpmovsdb_m32_xmm(dst, src)) } +emit_vpmovsdb_xmm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: YMM) { append_elem(instructions, inst_vpmovsdb_xmm_ymm(dst, src)) } +emit_vpmovsdb_m64_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem64, src: YMM) { append_elem(instructions, inst_vpmovsdb_m64_ymm(dst, src)) } +emit_vpmovsdb_xmm_zmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: ZMM) { append_elem(instructions, inst_vpmovsdb_xmm_zmm(dst, src)) } +emit_vpmovsdb_m128_zmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem128, src: ZMM) { append_elem(instructions, inst_vpmovsdb_m128_zmm(dst, src)) } inst_vpmovusdb_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPMOVUSDB, operand_count = 2, ops = {op_xmm(dst), op_xmm(src), {}, {}} }, 1892) } inst_vpmovusdb_m32_xmm :: #force_inline proc "contextless" (dst: Mem32, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPMOVUSDB, operand_count = 2, ops = {op_mem(dst.mem, 4), op_xmm(src), {}, {}} }, 1892) } inst_vpmovusdb_xmm_ymm :: #force_inline proc "contextless" (dst: XMM, src: YMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPMOVUSDB, operand_count = 2, ops = {op_xmm(dst), op_ymm(src), {}, {}} }, 1893) } inst_vpmovusdb_m64_ymm :: #force_inline proc "contextless" (dst: Mem64, src: YMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPMOVUSDB, operand_count = 2, ops = {op_mem(dst.mem, 8), op_ymm(src), {}, {}} }, 1893) } inst_vpmovusdb_xmm_zmm :: #force_inline proc "contextless" (dst: XMM, src: ZMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPMOVUSDB, operand_count = 2, ops = {op_xmm(dst), op_zmm(src), {}, {}} }, 1894) } inst_vpmovusdb_m128_zmm :: #force_inline proc "contextless" (dst: Mem128, src: ZMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPMOVUSDB, operand_count = 2, ops = {op_mem(dst.mem, 16), op_zmm(src), {}, {}} }, 1894) } -emit_vpmovusdb_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append(instructions, inst_vpmovusdb_xmm_xmm(dst, src)) } -emit_vpmovusdb_m32_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem32, src: XMM) { append(instructions, inst_vpmovusdb_m32_xmm(dst, src)) } -emit_vpmovusdb_xmm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: YMM) { append(instructions, inst_vpmovusdb_xmm_ymm(dst, src)) } -emit_vpmovusdb_m64_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem64, src: YMM) { append(instructions, inst_vpmovusdb_m64_ymm(dst, src)) } -emit_vpmovusdb_xmm_zmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: ZMM) { append(instructions, inst_vpmovusdb_xmm_zmm(dst, src)) } -emit_vpmovusdb_m128_zmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem128, src: ZMM) { append(instructions, inst_vpmovusdb_m128_zmm(dst, src)) } +emit_vpmovusdb_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append_elem(instructions, inst_vpmovusdb_xmm_xmm(dst, src)) } +emit_vpmovusdb_m32_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem32, src: XMM) { append_elem(instructions, inst_vpmovusdb_m32_xmm(dst, src)) } +emit_vpmovusdb_xmm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: YMM) { append_elem(instructions, inst_vpmovusdb_xmm_ymm(dst, src)) } +emit_vpmovusdb_m64_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem64, src: YMM) { append_elem(instructions, inst_vpmovusdb_m64_ymm(dst, src)) } +emit_vpmovusdb_xmm_zmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: ZMM) { append_elem(instructions, inst_vpmovusdb_xmm_zmm(dst, src)) } +emit_vpmovusdb_m128_zmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem128, src: ZMM) { append_elem(instructions, inst_vpmovusdb_m128_zmm(dst, src)) } inst_vpmovdw_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPMOVDW, operand_count = 2, ops = {op_xmm(dst), op_xmm(src), {}, {}} }, 1895) } inst_vpmovdw_m64_xmm :: #force_inline proc "contextless" (dst: Mem64, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPMOVDW, operand_count = 2, ops = {op_mem(dst.mem, 8), op_xmm(src), {}, {}} }, 1895) } inst_vpmovdw_xmm_ymm :: #force_inline proc "contextless" (dst: XMM, src: YMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPMOVDW, operand_count = 2, ops = {op_xmm(dst), op_ymm(src), {}, {}} }, 1896) } inst_vpmovdw_m128_ymm :: #force_inline proc "contextless" (dst: Mem128, src: YMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPMOVDW, operand_count = 2, ops = {op_mem(dst.mem, 16), op_ymm(src), {}, {}} }, 1896) } inst_vpmovdw_ymm_zmm :: #force_inline proc "contextless" (dst: YMM, src: ZMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPMOVDW, operand_count = 2, ops = {op_ymm(dst), op_zmm(src), {}, {}} }, 1897) } inst_vpmovdw_m256_zmm :: #force_inline proc "contextless" (dst: Mem256, src: ZMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPMOVDW, operand_count = 2, ops = {op_mem(dst.mem, 32), op_zmm(src), {}, {}} }, 1897) } -emit_vpmovdw_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append(instructions, inst_vpmovdw_xmm_xmm(dst, src)) } -emit_vpmovdw_m64_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem64, src: XMM) { append(instructions, inst_vpmovdw_m64_xmm(dst, src)) } -emit_vpmovdw_xmm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: YMM) { append(instructions, inst_vpmovdw_xmm_ymm(dst, src)) } -emit_vpmovdw_m128_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem128, src: YMM) { append(instructions, inst_vpmovdw_m128_ymm(dst, src)) } -emit_vpmovdw_ymm_zmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: ZMM) { append(instructions, inst_vpmovdw_ymm_zmm(dst, src)) } -emit_vpmovdw_m256_zmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem256, src: ZMM) { append(instructions, inst_vpmovdw_m256_zmm(dst, src)) } +emit_vpmovdw_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append_elem(instructions, inst_vpmovdw_xmm_xmm(dst, src)) } +emit_vpmovdw_m64_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem64, src: XMM) { append_elem(instructions, inst_vpmovdw_m64_xmm(dst, src)) } +emit_vpmovdw_xmm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: YMM) { append_elem(instructions, inst_vpmovdw_xmm_ymm(dst, src)) } +emit_vpmovdw_m128_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem128, src: YMM) { append_elem(instructions, inst_vpmovdw_m128_ymm(dst, src)) } +emit_vpmovdw_ymm_zmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: ZMM) { append_elem(instructions, inst_vpmovdw_ymm_zmm(dst, src)) } +emit_vpmovdw_m256_zmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem256, src: ZMM) { append_elem(instructions, inst_vpmovdw_m256_zmm(dst, src)) } inst_vpmovsdw_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPMOVSDW, operand_count = 2, ops = {op_xmm(dst), op_xmm(src), {}, {}} }, 1898) } inst_vpmovsdw_m64_xmm :: #force_inline proc "contextless" (dst: Mem64, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPMOVSDW, operand_count = 2, ops = {op_mem(dst.mem, 8), op_xmm(src), {}, {}} }, 1898) } inst_vpmovsdw_xmm_ymm :: #force_inline proc "contextless" (dst: XMM, src: YMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPMOVSDW, operand_count = 2, ops = {op_xmm(dst), op_ymm(src), {}, {}} }, 1899) } inst_vpmovsdw_m128_ymm :: #force_inline proc "contextless" (dst: Mem128, src: YMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPMOVSDW, operand_count = 2, ops = {op_mem(dst.mem, 16), op_ymm(src), {}, {}} }, 1899) } inst_vpmovsdw_ymm_zmm :: #force_inline proc "contextless" (dst: YMM, src: ZMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPMOVSDW, operand_count = 2, ops = {op_ymm(dst), op_zmm(src), {}, {}} }, 1900) } inst_vpmovsdw_m256_zmm :: #force_inline proc "contextless" (dst: Mem256, src: ZMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPMOVSDW, operand_count = 2, ops = {op_mem(dst.mem, 32), op_zmm(src), {}, {}} }, 1900) } -emit_vpmovsdw_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append(instructions, inst_vpmovsdw_xmm_xmm(dst, src)) } -emit_vpmovsdw_m64_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem64, src: XMM) { append(instructions, inst_vpmovsdw_m64_xmm(dst, src)) } -emit_vpmovsdw_xmm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: YMM) { append(instructions, inst_vpmovsdw_xmm_ymm(dst, src)) } -emit_vpmovsdw_m128_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem128, src: YMM) { append(instructions, inst_vpmovsdw_m128_ymm(dst, src)) } -emit_vpmovsdw_ymm_zmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: ZMM) { append(instructions, inst_vpmovsdw_ymm_zmm(dst, src)) } -emit_vpmovsdw_m256_zmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem256, src: ZMM) { append(instructions, inst_vpmovsdw_m256_zmm(dst, src)) } +emit_vpmovsdw_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append_elem(instructions, inst_vpmovsdw_xmm_xmm(dst, src)) } +emit_vpmovsdw_m64_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem64, src: XMM) { append_elem(instructions, inst_vpmovsdw_m64_xmm(dst, src)) } +emit_vpmovsdw_xmm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: YMM) { append_elem(instructions, inst_vpmovsdw_xmm_ymm(dst, src)) } +emit_vpmovsdw_m128_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem128, src: YMM) { append_elem(instructions, inst_vpmovsdw_m128_ymm(dst, src)) } +emit_vpmovsdw_ymm_zmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: ZMM) { append_elem(instructions, inst_vpmovsdw_ymm_zmm(dst, src)) } +emit_vpmovsdw_m256_zmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem256, src: ZMM) { append_elem(instructions, inst_vpmovsdw_m256_zmm(dst, src)) } inst_vpmovusdw_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPMOVUSDW, operand_count = 2, ops = {op_xmm(dst), op_xmm(src), {}, {}} }, 1901) } inst_vpmovusdw_m64_xmm :: #force_inline proc "contextless" (dst: Mem64, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPMOVUSDW, operand_count = 2, ops = {op_mem(dst.mem, 8), op_xmm(src), {}, {}} }, 1901) } inst_vpmovusdw_xmm_ymm :: #force_inline proc "contextless" (dst: XMM, src: YMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPMOVUSDW, operand_count = 2, ops = {op_xmm(dst), op_ymm(src), {}, {}} }, 1902) } inst_vpmovusdw_m128_ymm :: #force_inline proc "contextless" (dst: Mem128, src: YMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPMOVUSDW, operand_count = 2, ops = {op_mem(dst.mem, 16), op_ymm(src), {}, {}} }, 1902) } inst_vpmovusdw_ymm_zmm :: #force_inline proc "contextless" (dst: YMM, src: ZMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPMOVUSDW, operand_count = 2, ops = {op_ymm(dst), op_zmm(src), {}, {}} }, 1903) } inst_vpmovusdw_m256_zmm :: #force_inline proc "contextless" (dst: Mem256, src: ZMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPMOVUSDW, operand_count = 2, ops = {op_mem(dst.mem, 32), op_zmm(src), {}, {}} }, 1903) } -emit_vpmovusdw_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append(instructions, inst_vpmovusdw_xmm_xmm(dst, src)) } -emit_vpmovusdw_m64_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem64, src: XMM) { append(instructions, inst_vpmovusdw_m64_xmm(dst, src)) } -emit_vpmovusdw_xmm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: YMM) { append(instructions, inst_vpmovusdw_xmm_ymm(dst, src)) } -emit_vpmovusdw_m128_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem128, src: YMM) { append(instructions, inst_vpmovusdw_m128_ymm(dst, src)) } -emit_vpmovusdw_ymm_zmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: ZMM) { append(instructions, inst_vpmovusdw_ymm_zmm(dst, src)) } -emit_vpmovusdw_m256_zmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem256, src: ZMM) { append(instructions, inst_vpmovusdw_m256_zmm(dst, src)) } +emit_vpmovusdw_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append_elem(instructions, inst_vpmovusdw_xmm_xmm(dst, src)) } +emit_vpmovusdw_m64_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem64, src: XMM) { append_elem(instructions, inst_vpmovusdw_m64_xmm(dst, src)) } +emit_vpmovusdw_xmm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: YMM) { append_elem(instructions, inst_vpmovusdw_xmm_ymm(dst, src)) } +emit_vpmovusdw_m128_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem128, src: YMM) { append_elem(instructions, inst_vpmovusdw_m128_ymm(dst, src)) } +emit_vpmovusdw_ymm_zmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: ZMM) { append_elem(instructions, inst_vpmovusdw_ymm_zmm(dst, src)) } +emit_vpmovusdw_m256_zmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem256, src: ZMM) { append_elem(instructions, inst_vpmovusdw_m256_zmm(dst, src)) } inst_vpmovwb_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPMOVWB, operand_count = 2, ops = {op_xmm(dst), op_xmm(src), {}, {}} }, 1904) } inst_vpmovwb_m64_xmm :: #force_inline proc "contextless" (dst: Mem64, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPMOVWB, operand_count = 2, ops = {op_mem(dst.mem, 8), op_xmm(src), {}, {}} }, 1904) } inst_vpmovwb_xmm_ymm :: #force_inline proc "contextless" (dst: XMM, src: YMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPMOVWB, operand_count = 2, ops = {op_xmm(dst), op_ymm(src), {}, {}} }, 1905) } inst_vpmovwb_m128_ymm :: #force_inline proc "contextless" (dst: Mem128, src: YMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPMOVWB, operand_count = 2, ops = {op_mem(dst.mem, 16), op_ymm(src), {}, {}} }, 1905) } inst_vpmovwb_ymm_zmm :: #force_inline proc "contextless" (dst: YMM, src: ZMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPMOVWB, operand_count = 2, ops = {op_ymm(dst), op_zmm(src), {}, {}} }, 1906) } inst_vpmovwb_m256_zmm :: #force_inline proc "contextless" (dst: Mem256, src: ZMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPMOVWB, operand_count = 2, ops = {op_mem(dst.mem, 32), op_zmm(src), {}, {}} }, 1906) } -emit_vpmovwb_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append(instructions, inst_vpmovwb_xmm_xmm(dst, src)) } -emit_vpmovwb_m64_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem64, src: XMM) { append(instructions, inst_vpmovwb_m64_xmm(dst, src)) } -emit_vpmovwb_xmm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: YMM) { append(instructions, inst_vpmovwb_xmm_ymm(dst, src)) } -emit_vpmovwb_m128_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem128, src: YMM) { append(instructions, inst_vpmovwb_m128_ymm(dst, src)) } -emit_vpmovwb_ymm_zmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: ZMM) { append(instructions, inst_vpmovwb_ymm_zmm(dst, src)) } -emit_vpmovwb_m256_zmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem256, src: ZMM) { append(instructions, inst_vpmovwb_m256_zmm(dst, src)) } +emit_vpmovwb_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append_elem(instructions, inst_vpmovwb_xmm_xmm(dst, src)) } +emit_vpmovwb_m64_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem64, src: XMM) { append_elem(instructions, inst_vpmovwb_m64_xmm(dst, src)) } +emit_vpmovwb_xmm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: YMM) { append_elem(instructions, inst_vpmovwb_xmm_ymm(dst, src)) } +emit_vpmovwb_m128_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem128, src: YMM) { append_elem(instructions, inst_vpmovwb_m128_ymm(dst, src)) } +emit_vpmovwb_ymm_zmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: ZMM) { append_elem(instructions, inst_vpmovwb_ymm_zmm(dst, src)) } +emit_vpmovwb_m256_zmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem256, src: ZMM) { append_elem(instructions, inst_vpmovwb_m256_zmm(dst, src)) } inst_vpmovswb_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPMOVSWB, operand_count = 2, ops = {op_xmm(dst), op_xmm(src), {}, {}} }, 1907) } inst_vpmovswb_m64_xmm :: #force_inline proc "contextless" (dst: Mem64, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPMOVSWB, operand_count = 2, ops = {op_mem(dst.mem, 8), op_xmm(src), {}, {}} }, 1907) } inst_vpmovswb_xmm_ymm :: #force_inline proc "contextless" (dst: XMM, src: YMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPMOVSWB, operand_count = 2, ops = {op_xmm(dst), op_ymm(src), {}, {}} }, 1908) } inst_vpmovswb_m128_ymm :: #force_inline proc "contextless" (dst: Mem128, src: YMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPMOVSWB, operand_count = 2, ops = {op_mem(dst.mem, 16), op_ymm(src), {}, {}} }, 1908) } inst_vpmovswb_ymm_zmm :: #force_inline proc "contextless" (dst: YMM, src: ZMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPMOVSWB, operand_count = 2, ops = {op_ymm(dst), op_zmm(src), {}, {}} }, 1909) } inst_vpmovswb_m256_zmm :: #force_inline proc "contextless" (dst: Mem256, src: ZMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPMOVSWB, operand_count = 2, ops = {op_mem(dst.mem, 32), op_zmm(src), {}, {}} }, 1909) } -emit_vpmovswb_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append(instructions, inst_vpmovswb_xmm_xmm(dst, src)) } -emit_vpmovswb_m64_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem64, src: XMM) { append(instructions, inst_vpmovswb_m64_xmm(dst, src)) } -emit_vpmovswb_xmm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: YMM) { append(instructions, inst_vpmovswb_xmm_ymm(dst, src)) } -emit_vpmovswb_m128_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem128, src: YMM) { append(instructions, inst_vpmovswb_m128_ymm(dst, src)) } -emit_vpmovswb_ymm_zmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: ZMM) { append(instructions, inst_vpmovswb_ymm_zmm(dst, src)) } -emit_vpmovswb_m256_zmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem256, src: ZMM) { append(instructions, inst_vpmovswb_m256_zmm(dst, src)) } +emit_vpmovswb_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append_elem(instructions, inst_vpmovswb_xmm_xmm(dst, src)) } +emit_vpmovswb_m64_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem64, src: XMM) { append_elem(instructions, inst_vpmovswb_m64_xmm(dst, src)) } +emit_vpmovswb_xmm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: YMM) { append_elem(instructions, inst_vpmovswb_xmm_ymm(dst, src)) } +emit_vpmovswb_m128_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem128, src: YMM) { append_elem(instructions, inst_vpmovswb_m128_ymm(dst, src)) } +emit_vpmovswb_ymm_zmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: ZMM) { append_elem(instructions, inst_vpmovswb_ymm_zmm(dst, src)) } +emit_vpmovswb_m256_zmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem256, src: ZMM) { append_elem(instructions, inst_vpmovswb_m256_zmm(dst, src)) } inst_vpmovuswb_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPMOVUSWB, operand_count = 2, ops = {op_xmm(dst), op_xmm(src), {}, {}} }, 1910) } inst_vpmovuswb_m64_xmm :: #force_inline proc "contextless" (dst: Mem64, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPMOVUSWB, operand_count = 2, ops = {op_mem(dst.mem, 8), op_xmm(src), {}, {}} }, 1910) } inst_vpmovuswb_xmm_ymm :: #force_inline proc "contextless" (dst: XMM, src: YMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPMOVUSWB, operand_count = 2, ops = {op_xmm(dst), op_ymm(src), {}, {}} }, 1911) } inst_vpmovuswb_m128_ymm :: #force_inline proc "contextless" (dst: Mem128, src: YMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPMOVUSWB, operand_count = 2, ops = {op_mem(dst.mem, 16), op_ymm(src), {}, {}} }, 1911) } inst_vpmovuswb_ymm_zmm :: #force_inline proc "contextless" (dst: YMM, src: ZMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPMOVUSWB, operand_count = 2, ops = {op_ymm(dst), op_zmm(src), {}, {}} }, 1912) } inst_vpmovuswb_m256_zmm :: #force_inline proc "contextless" (dst: Mem256, src: ZMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPMOVUSWB, operand_count = 2, ops = {op_mem(dst.mem, 32), op_zmm(src), {}, {}} }, 1912) } -emit_vpmovuswb_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append(instructions, inst_vpmovuswb_xmm_xmm(dst, src)) } -emit_vpmovuswb_m64_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem64, src: XMM) { append(instructions, inst_vpmovuswb_m64_xmm(dst, src)) } -emit_vpmovuswb_xmm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: YMM) { append(instructions, inst_vpmovuswb_xmm_ymm(dst, src)) } -emit_vpmovuswb_m128_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem128, src: YMM) { append(instructions, inst_vpmovuswb_m128_ymm(dst, src)) } -emit_vpmovuswb_ymm_zmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: ZMM) { append(instructions, inst_vpmovuswb_ymm_zmm(dst, src)) } -emit_vpmovuswb_m256_zmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem256, src: ZMM) { append(instructions, inst_vpmovuswb_m256_zmm(dst, src)) } +emit_vpmovuswb_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append_elem(instructions, inst_vpmovuswb_xmm_xmm(dst, src)) } +emit_vpmovuswb_m64_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem64, src: XMM) { append_elem(instructions, inst_vpmovuswb_m64_xmm(dst, src)) } +emit_vpmovuswb_xmm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: YMM) { append_elem(instructions, inst_vpmovuswb_xmm_ymm(dst, src)) } +emit_vpmovuswb_m128_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem128, src: YMM) { append_elem(instructions, inst_vpmovuswb_m128_ymm(dst, src)) } +emit_vpmovuswb_ymm_zmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: ZMM) { append_elem(instructions, inst_vpmovuswb_ymm_zmm(dst, src)) } +emit_vpmovuswb_m256_zmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem256, src: ZMM) { append_elem(instructions, inst_vpmovuswb_m256_zmm(dst, src)) } inst_vprold_xmm_xmm_imm8 :: #force_inline proc "contextless" (dst: XMM, src: XMM, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .VPROLD, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_imm8(imm), {}} }, 1913) } inst_vprold_xmm_m128_imm8 :: #force_inline proc "contextless" (dst: XMM, src: Mem128, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .VPROLD, operand_count = 3, ops = {op_xmm(dst), op_mem(src.mem, 16), op_imm8(imm), {}} }, 1913) } inst_vprold_ymm_ymm_imm8 :: #force_inline proc "contextless" (dst: YMM, src: YMM, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .VPROLD, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_imm8(imm), {}} }, 1914) } inst_vprold_ymm_m256_imm8 :: #force_inline proc "contextless" (dst: YMM, src: Mem256, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .VPROLD, operand_count = 3, ops = {op_ymm(dst), op_mem(src.mem, 32), op_imm8(imm), {}} }, 1914) } inst_vprold_zmm_zmm_imm8 :: #force_inline proc "contextless" (dst: ZMM, src: ZMM, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .VPROLD, operand_count = 3, ops = {op_zmm(dst), op_zmm(src), op_imm8(imm), {}} }, 1915) } inst_vprold_zmm_m512_imm8 :: #force_inline proc "contextless" (dst: ZMM, src: Mem512, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .VPROLD, operand_count = 3, ops = {op_zmm(dst), op_mem(src.mem, 64), op_imm8(imm), {}} }, 1915) } -emit_vprold_xmm_xmm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, imm: i8) { append(instructions, inst_vprold_xmm_xmm_imm8(dst, src, imm)) } -emit_vprold_xmm_m128_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128, imm: i8) { append(instructions, inst_vprold_xmm_m128_imm8(dst, src, imm)) } -emit_vprold_ymm_ymm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, imm: i8) { append(instructions, inst_vprold_ymm_ymm_imm8(dst, src, imm)) } -emit_vprold_ymm_m256_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: Mem256, imm: i8) { append(instructions, inst_vprold_ymm_m256_imm8(dst, src, imm)) } -emit_vprold_zmm_zmm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ZMM, src: ZMM, imm: i8) { append(instructions, inst_vprold_zmm_zmm_imm8(dst, src, imm)) } -emit_vprold_zmm_m512_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ZMM, src: Mem512, imm: i8) { append(instructions, inst_vprold_zmm_m512_imm8(dst, src, imm)) } +emit_vprold_xmm_xmm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, imm: i8) { append_elem(instructions, inst_vprold_xmm_xmm_imm8(dst, src, imm)) } +emit_vprold_xmm_m128_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128, imm: i8) { append_elem(instructions, inst_vprold_xmm_m128_imm8(dst, src, imm)) } +emit_vprold_ymm_ymm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, imm: i8) { append_elem(instructions, inst_vprold_ymm_ymm_imm8(dst, src, imm)) } +emit_vprold_ymm_m256_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: Mem256, imm: i8) { append_elem(instructions, inst_vprold_ymm_m256_imm8(dst, src, imm)) } +emit_vprold_zmm_zmm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ZMM, src: ZMM, imm: i8) { append_elem(instructions, inst_vprold_zmm_zmm_imm8(dst, src, imm)) } +emit_vprold_zmm_m512_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ZMM, src: Mem512, imm: i8) { append_elem(instructions, inst_vprold_zmm_m512_imm8(dst, src, imm)) } inst_vprolq_xmm_xmm_imm8 :: #force_inline proc "contextless" (dst: XMM, src: XMM, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .VPROLQ, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_imm8(imm), {}} }, 1916) } inst_vprolq_xmm_m128_imm8 :: #force_inline proc "contextless" (dst: XMM, src: Mem128, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .VPROLQ, operand_count = 3, ops = {op_xmm(dst), op_mem(src.mem, 16), op_imm8(imm), {}} }, 1916) } inst_vprolq_ymm_ymm_imm8 :: #force_inline proc "contextless" (dst: YMM, src: YMM, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .VPROLQ, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_imm8(imm), {}} }, 1917) } inst_vprolq_ymm_m256_imm8 :: #force_inline proc "contextless" (dst: YMM, src: Mem256, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .VPROLQ, operand_count = 3, ops = {op_ymm(dst), op_mem(src.mem, 32), op_imm8(imm), {}} }, 1917) } inst_vprolq_zmm_zmm_imm8 :: #force_inline proc "contextless" (dst: ZMM, src: ZMM, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .VPROLQ, operand_count = 3, ops = {op_zmm(dst), op_zmm(src), op_imm8(imm), {}} }, 1918) } inst_vprolq_zmm_m512_imm8 :: #force_inline proc "contextless" (dst: ZMM, src: Mem512, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .VPROLQ, operand_count = 3, ops = {op_zmm(dst), op_mem(src.mem, 64), op_imm8(imm), {}} }, 1918) } -emit_vprolq_xmm_xmm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, imm: i8) { append(instructions, inst_vprolq_xmm_xmm_imm8(dst, src, imm)) } -emit_vprolq_xmm_m128_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128, imm: i8) { append(instructions, inst_vprolq_xmm_m128_imm8(dst, src, imm)) } -emit_vprolq_ymm_ymm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, imm: i8) { append(instructions, inst_vprolq_ymm_ymm_imm8(dst, src, imm)) } -emit_vprolq_ymm_m256_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: Mem256, imm: i8) { append(instructions, inst_vprolq_ymm_m256_imm8(dst, src, imm)) } -emit_vprolq_zmm_zmm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ZMM, src: ZMM, imm: i8) { append(instructions, inst_vprolq_zmm_zmm_imm8(dst, src, imm)) } -emit_vprolq_zmm_m512_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ZMM, src: Mem512, imm: i8) { append(instructions, inst_vprolq_zmm_m512_imm8(dst, src, imm)) } +emit_vprolq_xmm_xmm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, imm: i8) { append_elem(instructions, inst_vprolq_xmm_xmm_imm8(dst, src, imm)) } +emit_vprolq_xmm_m128_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128, imm: i8) { append_elem(instructions, inst_vprolq_xmm_m128_imm8(dst, src, imm)) } +emit_vprolq_ymm_ymm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, imm: i8) { append_elem(instructions, inst_vprolq_ymm_ymm_imm8(dst, src, imm)) } +emit_vprolq_ymm_m256_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: Mem256, imm: i8) { append_elem(instructions, inst_vprolq_ymm_m256_imm8(dst, src, imm)) } +emit_vprolq_zmm_zmm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ZMM, src: ZMM, imm: i8) { append_elem(instructions, inst_vprolq_zmm_zmm_imm8(dst, src, imm)) } +emit_vprolq_zmm_m512_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ZMM, src: Mem512, imm: i8) { append_elem(instructions, inst_vprolq_zmm_m512_imm8(dst, src, imm)) } inst_vprolvd_xmm_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPROLVD, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_xmm(src2), {}} }, 1919) } inst_vprolvd_xmm_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .VPROLVD, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_mem(src2.mem, 16), {}} }, 1919) } inst_vprolvd_ymm_ymm_ymm :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: YMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPROLVD, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_ymm(src2), {}} }, 1920) } inst_vprolvd_ymm_ymm_m256 :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: Mem256) -> Instruction { return with_hint(Instruction{ mnemonic = .VPROLVD, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_mem(src2.mem, 32), {}} }, 1920) } inst_vprolvd_zmm_zmm_zmm :: #force_inline proc "contextless" (dst: ZMM, src: ZMM, src2: ZMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPROLVD, operand_count = 3, ops = {op_zmm(dst), op_zmm(src), op_zmm(src2), {}} }, 1921) } inst_vprolvd_zmm_zmm_m512 :: #force_inline proc "contextless" (dst: ZMM, src: ZMM, src2: Mem512) -> Instruction { return with_hint(Instruction{ mnemonic = .VPROLVD, operand_count = 3, ops = {op_zmm(dst), op_zmm(src), op_mem(src2.mem, 64), {}} }, 1921) } -emit_vprolvd_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append(instructions, inst_vprolvd_xmm_xmm_xmm(dst, src, src2)) } -emit_vprolvd_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append(instructions, inst_vprolvd_xmm_xmm_m128(dst, src, src2)) } -emit_vprolvd_ymm_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM) { append(instructions, inst_vprolvd_ymm_ymm_ymm(dst, src, src2)) } -emit_vprolvd_ymm_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256) { append(instructions, inst_vprolvd_ymm_ymm_m256(dst, src, src2)) } -emit_vprolvd_zmm_zmm_zmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ZMM, src: ZMM, src2: ZMM) { append(instructions, inst_vprolvd_zmm_zmm_zmm(dst, src, src2)) } -emit_vprolvd_zmm_zmm_m512 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ZMM, src: ZMM, src2: Mem512) { append(instructions, inst_vprolvd_zmm_zmm_m512(dst, src, src2)) } +emit_vprolvd_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append_elem(instructions, inst_vprolvd_xmm_xmm_xmm(dst, src, src2)) } +emit_vprolvd_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append_elem(instructions, inst_vprolvd_xmm_xmm_m128(dst, src, src2)) } +emit_vprolvd_ymm_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM) { append_elem(instructions, inst_vprolvd_ymm_ymm_ymm(dst, src, src2)) } +emit_vprolvd_ymm_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256) { append_elem(instructions, inst_vprolvd_ymm_ymm_m256(dst, src, src2)) } +emit_vprolvd_zmm_zmm_zmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ZMM, src: ZMM, src2: ZMM) { append_elem(instructions, inst_vprolvd_zmm_zmm_zmm(dst, src, src2)) } +emit_vprolvd_zmm_zmm_m512 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ZMM, src: ZMM, src2: Mem512) { append_elem(instructions, inst_vprolvd_zmm_zmm_m512(dst, src, src2)) } inst_vprolvq_xmm_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPROLVQ, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_xmm(src2), {}} }, 1922) } inst_vprolvq_xmm_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .VPROLVQ, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_mem(src2.mem, 16), {}} }, 1922) } inst_vprolvq_ymm_ymm_ymm :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: YMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPROLVQ, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_ymm(src2), {}} }, 1923) } inst_vprolvq_ymm_ymm_m256 :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: Mem256) -> Instruction { return with_hint(Instruction{ mnemonic = .VPROLVQ, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_mem(src2.mem, 32), {}} }, 1923) } inst_vprolvq_zmm_zmm_zmm :: #force_inline proc "contextless" (dst: ZMM, src: ZMM, src2: ZMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPROLVQ, operand_count = 3, ops = {op_zmm(dst), op_zmm(src), op_zmm(src2), {}} }, 1924) } inst_vprolvq_zmm_zmm_m512 :: #force_inline proc "contextless" (dst: ZMM, src: ZMM, src2: Mem512) -> Instruction { return with_hint(Instruction{ mnemonic = .VPROLVQ, operand_count = 3, ops = {op_zmm(dst), op_zmm(src), op_mem(src2.mem, 64), {}} }, 1924) } -emit_vprolvq_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append(instructions, inst_vprolvq_xmm_xmm_xmm(dst, src, src2)) } -emit_vprolvq_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append(instructions, inst_vprolvq_xmm_xmm_m128(dst, src, src2)) } -emit_vprolvq_ymm_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM) { append(instructions, inst_vprolvq_ymm_ymm_ymm(dst, src, src2)) } -emit_vprolvq_ymm_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256) { append(instructions, inst_vprolvq_ymm_ymm_m256(dst, src, src2)) } -emit_vprolvq_zmm_zmm_zmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ZMM, src: ZMM, src2: ZMM) { append(instructions, inst_vprolvq_zmm_zmm_zmm(dst, src, src2)) } -emit_vprolvq_zmm_zmm_m512 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ZMM, src: ZMM, src2: Mem512) { append(instructions, inst_vprolvq_zmm_zmm_m512(dst, src, src2)) } +emit_vprolvq_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append_elem(instructions, inst_vprolvq_xmm_xmm_xmm(dst, src, src2)) } +emit_vprolvq_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append_elem(instructions, inst_vprolvq_xmm_xmm_m128(dst, src, src2)) } +emit_vprolvq_ymm_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM) { append_elem(instructions, inst_vprolvq_ymm_ymm_ymm(dst, src, src2)) } +emit_vprolvq_ymm_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256) { append_elem(instructions, inst_vprolvq_ymm_ymm_m256(dst, src, src2)) } +emit_vprolvq_zmm_zmm_zmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ZMM, src: ZMM, src2: ZMM) { append_elem(instructions, inst_vprolvq_zmm_zmm_zmm(dst, src, src2)) } +emit_vprolvq_zmm_zmm_m512 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ZMM, src: ZMM, src2: Mem512) { append_elem(instructions, inst_vprolvq_zmm_zmm_m512(dst, src, src2)) } inst_vprord_xmm_xmm_imm8 :: #force_inline proc "contextless" (dst: XMM, src: XMM, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .VPRORD, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_imm8(imm), {}} }, 1925) } inst_vprord_xmm_m128_imm8 :: #force_inline proc "contextless" (dst: XMM, src: Mem128, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .VPRORD, operand_count = 3, ops = {op_xmm(dst), op_mem(src.mem, 16), op_imm8(imm), {}} }, 1925) } inst_vprord_ymm_ymm_imm8 :: #force_inline proc "contextless" (dst: YMM, src: YMM, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .VPRORD, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_imm8(imm), {}} }, 1926) } inst_vprord_ymm_m256_imm8 :: #force_inline proc "contextless" (dst: YMM, src: Mem256, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .VPRORD, operand_count = 3, ops = {op_ymm(dst), op_mem(src.mem, 32), op_imm8(imm), {}} }, 1926) } inst_vprord_zmm_zmm_imm8 :: #force_inline proc "contextless" (dst: ZMM, src: ZMM, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .VPRORD, operand_count = 3, ops = {op_zmm(dst), op_zmm(src), op_imm8(imm), {}} }, 1927) } inst_vprord_zmm_m512_imm8 :: #force_inline proc "contextless" (dst: ZMM, src: Mem512, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .VPRORD, operand_count = 3, ops = {op_zmm(dst), op_mem(src.mem, 64), op_imm8(imm), {}} }, 1927) } -emit_vprord_xmm_xmm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, imm: i8) { append(instructions, inst_vprord_xmm_xmm_imm8(dst, src, imm)) } -emit_vprord_xmm_m128_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128, imm: i8) { append(instructions, inst_vprord_xmm_m128_imm8(dst, src, imm)) } -emit_vprord_ymm_ymm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, imm: i8) { append(instructions, inst_vprord_ymm_ymm_imm8(dst, src, imm)) } -emit_vprord_ymm_m256_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: Mem256, imm: i8) { append(instructions, inst_vprord_ymm_m256_imm8(dst, src, imm)) } -emit_vprord_zmm_zmm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ZMM, src: ZMM, imm: i8) { append(instructions, inst_vprord_zmm_zmm_imm8(dst, src, imm)) } -emit_vprord_zmm_m512_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ZMM, src: Mem512, imm: i8) { append(instructions, inst_vprord_zmm_m512_imm8(dst, src, imm)) } +emit_vprord_xmm_xmm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, imm: i8) { append_elem(instructions, inst_vprord_xmm_xmm_imm8(dst, src, imm)) } +emit_vprord_xmm_m128_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128, imm: i8) { append_elem(instructions, inst_vprord_xmm_m128_imm8(dst, src, imm)) } +emit_vprord_ymm_ymm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, imm: i8) { append_elem(instructions, inst_vprord_ymm_ymm_imm8(dst, src, imm)) } +emit_vprord_ymm_m256_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: Mem256, imm: i8) { append_elem(instructions, inst_vprord_ymm_m256_imm8(dst, src, imm)) } +emit_vprord_zmm_zmm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ZMM, src: ZMM, imm: i8) { append_elem(instructions, inst_vprord_zmm_zmm_imm8(dst, src, imm)) } +emit_vprord_zmm_m512_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ZMM, src: Mem512, imm: i8) { append_elem(instructions, inst_vprord_zmm_m512_imm8(dst, src, imm)) } inst_vprorq_xmm_xmm_imm8 :: #force_inline proc "contextless" (dst: XMM, src: XMM, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .VPRORQ, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_imm8(imm), {}} }, 1928) } inst_vprorq_xmm_m128_imm8 :: #force_inline proc "contextless" (dst: XMM, src: Mem128, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .VPRORQ, operand_count = 3, ops = {op_xmm(dst), op_mem(src.mem, 16), op_imm8(imm), {}} }, 1928) } inst_vprorq_ymm_ymm_imm8 :: #force_inline proc "contextless" (dst: YMM, src: YMM, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .VPRORQ, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_imm8(imm), {}} }, 1929) } inst_vprorq_ymm_m256_imm8 :: #force_inline proc "contextless" (dst: YMM, src: Mem256, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .VPRORQ, operand_count = 3, ops = {op_ymm(dst), op_mem(src.mem, 32), op_imm8(imm), {}} }, 1929) } inst_vprorq_zmm_zmm_imm8 :: #force_inline proc "contextless" (dst: ZMM, src: ZMM, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .VPRORQ, operand_count = 3, ops = {op_zmm(dst), op_zmm(src), op_imm8(imm), {}} }, 1930) } inst_vprorq_zmm_m512_imm8 :: #force_inline proc "contextless" (dst: ZMM, src: Mem512, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .VPRORQ, operand_count = 3, ops = {op_zmm(dst), op_mem(src.mem, 64), op_imm8(imm), {}} }, 1930) } -emit_vprorq_xmm_xmm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, imm: i8) { append(instructions, inst_vprorq_xmm_xmm_imm8(dst, src, imm)) } -emit_vprorq_xmm_m128_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128, imm: i8) { append(instructions, inst_vprorq_xmm_m128_imm8(dst, src, imm)) } -emit_vprorq_ymm_ymm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, imm: i8) { append(instructions, inst_vprorq_ymm_ymm_imm8(dst, src, imm)) } -emit_vprorq_ymm_m256_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: Mem256, imm: i8) { append(instructions, inst_vprorq_ymm_m256_imm8(dst, src, imm)) } -emit_vprorq_zmm_zmm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ZMM, src: ZMM, imm: i8) { append(instructions, inst_vprorq_zmm_zmm_imm8(dst, src, imm)) } -emit_vprorq_zmm_m512_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ZMM, src: Mem512, imm: i8) { append(instructions, inst_vprorq_zmm_m512_imm8(dst, src, imm)) } +emit_vprorq_xmm_xmm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, imm: i8) { append_elem(instructions, inst_vprorq_xmm_xmm_imm8(dst, src, imm)) } +emit_vprorq_xmm_m128_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128, imm: i8) { append_elem(instructions, inst_vprorq_xmm_m128_imm8(dst, src, imm)) } +emit_vprorq_ymm_ymm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, imm: i8) { append_elem(instructions, inst_vprorq_ymm_ymm_imm8(dst, src, imm)) } +emit_vprorq_ymm_m256_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: Mem256, imm: i8) { append_elem(instructions, inst_vprorq_ymm_m256_imm8(dst, src, imm)) } +emit_vprorq_zmm_zmm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ZMM, src: ZMM, imm: i8) { append_elem(instructions, inst_vprorq_zmm_zmm_imm8(dst, src, imm)) } +emit_vprorq_zmm_m512_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ZMM, src: Mem512, imm: i8) { append_elem(instructions, inst_vprorq_zmm_m512_imm8(dst, src, imm)) } inst_vprorvd_xmm_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPRORVD, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_xmm(src2), {}} }, 1931) } inst_vprorvd_xmm_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .VPRORVD, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_mem(src2.mem, 16), {}} }, 1931) } inst_vprorvd_ymm_ymm_ymm :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: YMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPRORVD, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_ymm(src2), {}} }, 1932) } inst_vprorvd_ymm_ymm_m256 :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: Mem256) -> Instruction { return with_hint(Instruction{ mnemonic = .VPRORVD, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_mem(src2.mem, 32), {}} }, 1932) } inst_vprorvd_zmm_zmm_zmm :: #force_inline proc "contextless" (dst: ZMM, src: ZMM, src2: ZMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPRORVD, operand_count = 3, ops = {op_zmm(dst), op_zmm(src), op_zmm(src2), {}} }, 1933) } inst_vprorvd_zmm_zmm_m512 :: #force_inline proc "contextless" (dst: ZMM, src: ZMM, src2: Mem512) -> Instruction { return with_hint(Instruction{ mnemonic = .VPRORVD, operand_count = 3, ops = {op_zmm(dst), op_zmm(src), op_mem(src2.mem, 64), {}} }, 1933) } -emit_vprorvd_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append(instructions, inst_vprorvd_xmm_xmm_xmm(dst, src, src2)) } -emit_vprorvd_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append(instructions, inst_vprorvd_xmm_xmm_m128(dst, src, src2)) } -emit_vprorvd_ymm_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM) { append(instructions, inst_vprorvd_ymm_ymm_ymm(dst, src, src2)) } -emit_vprorvd_ymm_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256) { append(instructions, inst_vprorvd_ymm_ymm_m256(dst, src, src2)) } -emit_vprorvd_zmm_zmm_zmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ZMM, src: ZMM, src2: ZMM) { append(instructions, inst_vprorvd_zmm_zmm_zmm(dst, src, src2)) } -emit_vprorvd_zmm_zmm_m512 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ZMM, src: ZMM, src2: Mem512) { append(instructions, inst_vprorvd_zmm_zmm_m512(dst, src, src2)) } +emit_vprorvd_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append_elem(instructions, inst_vprorvd_xmm_xmm_xmm(dst, src, src2)) } +emit_vprorvd_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append_elem(instructions, inst_vprorvd_xmm_xmm_m128(dst, src, src2)) } +emit_vprorvd_ymm_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM) { append_elem(instructions, inst_vprorvd_ymm_ymm_ymm(dst, src, src2)) } +emit_vprorvd_ymm_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256) { append_elem(instructions, inst_vprorvd_ymm_ymm_m256(dst, src, src2)) } +emit_vprorvd_zmm_zmm_zmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ZMM, src: ZMM, src2: ZMM) { append_elem(instructions, inst_vprorvd_zmm_zmm_zmm(dst, src, src2)) } +emit_vprorvd_zmm_zmm_m512 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ZMM, src: ZMM, src2: Mem512) { append_elem(instructions, inst_vprorvd_zmm_zmm_m512(dst, src, src2)) } inst_vprorvq_xmm_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPRORVQ, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_xmm(src2), {}} }, 1934) } inst_vprorvq_xmm_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .VPRORVQ, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_mem(src2.mem, 16), {}} }, 1934) } inst_vprorvq_ymm_ymm_ymm :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: YMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPRORVQ, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_ymm(src2), {}} }, 1935) } inst_vprorvq_ymm_ymm_m256 :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: Mem256) -> Instruction { return with_hint(Instruction{ mnemonic = .VPRORVQ, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_mem(src2.mem, 32), {}} }, 1935) } inst_vprorvq_zmm_zmm_zmm :: #force_inline proc "contextless" (dst: ZMM, src: ZMM, src2: ZMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPRORVQ, operand_count = 3, ops = {op_zmm(dst), op_zmm(src), op_zmm(src2), {}} }, 1936) } inst_vprorvq_zmm_zmm_m512 :: #force_inline proc "contextless" (dst: ZMM, src: ZMM, src2: Mem512) -> Instruction { return with_hint(Instruction{ mnemonic = .VPRORVQ, operand_count = 3, ops = {op_zmm(dst), op_zmm(src), op_mem(src2.mem, 64), {}} }, 1936) } -emit_vprorvq_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append(instructions, inst_vprorvq_xmm_xmm_xmm(dst, src, src2)) } -emit_vprorvq_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append(instructions, inst_vprorvq_xmm_xmm_m128(dst, src, src2)) } -emit_vprorvq_ymm_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM) { append(instructions, inst_vprorvq_ymm_ymm_ymm(dst, src, src2)) } -emit_vprorvq_ymm_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256) { append(instructions, inst_vprorvq_ymm_ymm_m256(dst, src, src2)) } -emit_vprorvq_zmm_zmm_zmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ZMM, src: ZMM, src2: ZMM) { append(instructions, inst_vprorvq_zmm_zmm_zmm(dst, src, src2)) } -emit_vprorvq_zmm_zmm_m512 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ZMM, src: ZMM, src2: Mem512) { append(instructions, inst_vprorvq_zmm_zmm_m512(dst, src, src2)) } +emit_vprorvq_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append_elem(instructions, inst_vprorvq_xmm_xmm_xmm(dst, src, src2)) } +emit_vprorvq_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append_elem(instructions, inst_vprorvq_xmm_xmm_m128(dst, src, src2)) } +emit_vprorvq_ymm_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM) { append_elem(instructions, inst_vprorvq_ymm_ymm_ymm(dst, src, src2)) } +emit_vprorvq_ymm_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256) { append_elem(instructions, inst_vprorvq_ymm_ymm_m256(dst, src, src2)) } +emit_vprorvq_zmm_zmm_zmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ZMM, src: ZMM, src2: ZMM) { append_elem(instructions, inst_vprorvq_zmm_zmm_zmm(dst, src, src2)) } +emit_vprorvq_zmm_zmm_m512 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ZMM, src: ZMM, src2: Mem512) { append_elem(instructions, inst_vprorvq_zmm_zmm_m512(dst, src, src2)) } inst_vpscatterdd_m_xmm :: #force_inline proc "contextless" (dst: Memory, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPSCATTERDD, operand_count = 2, ops = {op_mem(dst, 0), op_xmm(src), {}, {}} }, 1937) } inst_vpscatterdd_m_ymm :: #force_inline proc "contextless" (dst: Memory, src: YMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPSCATTERDD, operand_count = 2, ops = {op_mem(dst, 0), op_ymm(src), {}, {}} }, 1938) } inst_vpscatterdd_m_zmm :: #force_inline proc "contextless" (dst: Memory, src: ZMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPSCATTERDD, operand_count = 2, ops = {op_mem(dst, 0), op_zmm(src), {}, {}} }, 1939) } -emit_vpscatterdd_m_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Memory, src: XMM) { append(instructions, inst_vpscatterdd_m_xmm(dst, src)) } -emit_vpscatterdd_m_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Memory, src: YMM) { append(instructions, inst_vpscatterdd_m_ymm(dst, src)) } -emit_vpscatterdd_m_zmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Memory, src: ZMM) { append(instructions, inst_vpscatterdd_m_zmm(dst, src)) } +emit_vpscatterdd_m_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Memory, src: XMM) { append_elem(instructions, inst_vpscatterdd_m_xmm(dst, src)) } +emit_vpscatterdd_m_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Memory, src: YMM) { append_elem(instructions, inst_vpscatterdd_m_ymm(dst, src)) } +emit_vpscatterdd_m_zmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Memory, src: ZMM) { append_elem(instructions, inst_vpscatterdd_m_zmm(dst, src)) } inst_vpscatterdq_m_xmm :: #force_inline proc "contextless" (dst: Memory, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPSCATTERDQ, operand_count = 2, ops = {op_mem(dst, 0), op_xmm(src), {}, {}} }, 1940) } inst_vpscatterdq_m_ymm :: #force_inline proc "contextless" (dst: Memory, src: YMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPSCATTERDQ, operand_count = 2, ops = {op_mem(dst, 0), op_ymm(src), {}, {}} }, 1941) } inst_vpscatterdq_m_zmm :: #force_inline proc "contextless" (dst: Memory, src: ZMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPSCATTERDQ, operand_count = 2, ops = {op_mem(dst, 0), op_zmm(src), {}, {}} }, 1942) } -emit_vpscatterdq_m_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Memory, src: XMM) { append(instructions, inst_vpscatterdq_m_xmm(dst, src)) } -emit_vpscatterdq_m_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Memory, src: YMM) { append(instructions, inst_vpscatterdq_m_ymm(dst, src)) } -emit_vpscatterdq_m_zmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Memory, src: ZMM) { append(instructions, inst_vpscatterdq_m_zmm(dst, src)) } +emit_vpscatterdq_m_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Memory, src: XMM) { append_elem(instructions, inst_vpscatterdq_m_xmm(dst, src)) } +emit_vpscatterdq_m_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Memory, src: YMM) { append_elem(instructions, inst_vpscatterdq_m_ymm(dst, src)) } +emit_vpscatterdq_m_zmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Memory, src: ZMM) { append_elem(instructions, inst_vpscatterdq_m_zmm(dst, src)) } inst_vpscatterqd_m_xmm :: #force_inline proc "contextless" (dst: Memory, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPSCATTERQD, operand_count = 2, ops = {op_mem(dst, 0), op_xmm(src), {}, {}} }, 1943) } inst_vpscatterqd_m_ymm :: #force_inline proc "contextless" (dst: Memory, src: YMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPSCATTERQD, operand_count = 2, ops = {op_mem(dst, 0), op_ymm(src), {}, {}} }, 1945) } -emit_vpscatterqd_m_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Memory, src: XMM) { append(instructions, inst_vpscatterqd_m_xmm(dst, src)) } -emit_vpscatterqd_m_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Memory, src: YMM) { append(instructions, inst_vpscatterqd_m_ymm(dst, src)) } +emit_vpscatterqd_m_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Memory, src: XMM) { append_elem(instructions, inst_vpscatterqd_m_xmm(dst, src)) } +emit_vpscatterqd_m_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Memory, src: YMM) { append_elem(instructions, inst_vpscatterqd_m_ymm(dst, src)) } inst_vpscatterqq_m_xmm :: #force_inline proc "contextless" (dst: Memory, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPSCATTERQQ, operand_count = 2, ops = {op_mem(dst, 0), op_xmm(src), {}, {}} }, 1946) } inst_vpscatterqq_m_ymm :: #force_inline proc "contextless" (dst: Memory, src: YMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPSCATTERQQ, operand_count = 2, ops = {op_mem(dst, 0), op_ymm(src), {}, {}} }, 1947) } inst_vpscatterqq_m_zmm :: #force_inline proc "contextless" (dst: Memory, src: ZMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPSCATTERQQ, operand_count = 2, ops = {op_mem(dst, 0), op_zmm(src), {}, {}} }, 1948) } -emit_vpscatterqq_m_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Memory, src: XMM) { append(instructions, inst_vpscatterqq_m_xmm(dst, src)) } -emit_vpscatterqq_m_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Memory, src: YMM) { append(instructions, inst_vpscatterqq_m_ymm(dst, src)) } -emit_vpscatterqq_m_zmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Memory, src: ZMM) { append(instructions, inst_vpscatterqq_m_zmm(dst, src)) } +emit_vpscatterqq_m_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Memory, src: XMM) { append_elem(instructions, inst_vpscatterqq_m_xmm(dst, src)) } +emit_vpscatterqq_m_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Memory, src: YMM) { append_elem(instructions, inst_vpscatterqq_m_ymm(dst, src)) } +emit_vpscatterqq_m_zmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Memory, src: ZMM) { append_elem(instructions, inst_vpscatterqq_m_zmm(dst, src)) } inst_vscatterdps_m_xmm :: #force_inline proc "contextless" (dst: Memory, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VSCATTERDPS, operand_count = 2, ops = {op_mem(dst, 0), op_xmm(src), {}, {}} }, 1949) } inst_vscatterdps_m_ymm :: #force_inline proc "contextless" (dst: Memory, src: YMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VSCATTERDPS, operand_count = 2, ops = {op_mem(dst, 0), op_ymm(src), {}, {}} }, 1950) } inst_vscatterdps_m_zmm :: #force_inline proc "contextless" (dst: Memory, src: ZMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VSCATTERDPS, operand_count = 2, ops = {op_mem(dst, 0), op_zmm(src), {}, {}} }, 1951) } -emit_vscatterdps_m_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Memory, src: XMM) { append(instructions, inst_vscatterdps_m_xmm(dst, src)) } -emit_vscatterdps_m_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Memory, src: YMM) { append(instructions, inst_vscatterdps_m_ymm(dst, src)) } -emit_vscatterdps_m_zmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Memory, src: ZMM) { append(instructions, inst_vscatterdps_m_zmm(dst, src)) } +emit_vscatterdps_m_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Memory, src: XMM) { append_elem(instructions, inst_vscatterdps_m_xmm(dst, src)) } +emit_vscatterdps_m_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Memory, src: YMM) { append_elem(instructions, inst_vscatterdps_m_ymm(dst, src)) } +emit_vscatterdps_m_zmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Memory, src: ZMM) { append_elem(instructions, inst_vscatterdps_m_zmm(dst, src)) } inst_vscatterdpd_m_xmm :: #force_inline proc "contextless" (dst: Memory, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VSCATTERDPD, operand_count = 2, ops = {op_mem(dst, 0), op_xmm(src), {}, {}} }, 1952) } inst_vscatterdpd_m_ymm :: #force_inline proc "contextless" (dst: Memory, src: YMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VSCATTERDPD, operand_count = 2, ops = {op_mem(dst, 0), op_ymm(src), {}, {}} }, 1953) } inst_vscatterdpd_m_zmm :: #force_inline proc "contextless" (dst: Memory, src: ZMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VSCATTERDPD, operand_count = 2, ops = {op_mem(dst, 0), op_zmm(src), {}, {}} }, 1954) } -emit_vscatterdpd_m_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Memory, src: XMM) { append(instructions, inst_vscatterdpd_m_xmm(dst, src)) } -emit_vscatterdpd_m_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Memory, src: YMM) { append(instructions, inst_vscatterdpd_m_ymm(dst, src)) } -emit_vscatterdpd_m_zmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Memory, src: ZMM) { append(instructions, inst_vscatterdpd_m_zmm(dst, src)) } +emit_vscatterdpd_m_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Memory, src: XMM) { append_elem(instructions, inst_vscatterdpd_m_xmm(dst, src)) } +emit_vscatterdpd_m_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Memory, src: YMM) { append_elem(instructions, inst_vscatterdpd_m_ymm(dst, src)) } +emit_vscatterdpd_m_zmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Memory, src: ZMM) { append_elem(instructions, inst_vscatterdpd_m_zmm(dst, src)) } inst_vscatterqps_m_xmm :: #force_inline proc "contextless" (dst: Memory, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VSCATTERQPS, operand_count = 2, ops = {op_mem(dst, 0), op_xmm(src), {}, {}} }, 1955) } inst_vscatterqps_m_ymm :: #force_inline proc "contextless" (dst: Memory, src: YMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VSCATTERQPS, operand_count = 2, ops = {op_mem(dst, 0), op_ymm(src), {}, {}} }, 1957) } -emit_vscatterqps_m_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Memory, src: XMM) { append(instructions, inst_vscatterqps_m_xmm(dst, src)) } -emit_vscatterqps_m_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Memory, src: YMM) { append(instructions, inst_vscatterqps_m_ymm(dst, src)) } +emit_vscatterqps_m_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Memory, src: XMM) { append_elem(instructions, inst_vscatterqps_m_xmm(dst, src)) } +emit_vscatterqps_m_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Memory, src: YMM) { append_elem(instructions, inst_vscatterqps_m_ymm(dst, src)) } inst_vscatterqpd_m_xmm :: #force_inline proc "contextless" (dst: Memory, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VSCATTERQPD, operand_count = 2, ops = {op_mem(dst, 0), op_xmm(src), {}, {}} }, 1958) } inst_vscatterqpd_m_ymm :: #force_inline proc "contextless" (dst: Memory, src: YMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VSCATTERQPD, operand_count = 2, ops = {op_mem(dst, 0), op_ymm(src), {}, {}} }, 1959) } inst_vscatterqpd_m_zmm :: #force_inline proc "contextless" (dst: Memory, src: ZMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VSCATTERQPD, operand_count = 2, ops = {op_mem(dst, 0), op_zmm(src), {}, {}} }, 1960) } -emit_vscatterqpd_m_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Memory, src: XMM) { append(instructions, inst_vscatterqpd_m_xmm(dst, src)) } -emit_vscatterqpd_m_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Memory, src: YMM) { append(instructions, inst_vscatterqpd_m_ymm(dst, src)) } -emit_vscatterqpd_m_zmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Memory, src: ZMM) { append(instructions, inst_vscatterqpd_m_zmm(dst, src)) } +emit_vscatterqpd_m_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Memory, src: XMM) { append_elem(instructions, inst_vscatterqpd_m_xmm(dst, src)) } +emit_vscatterqpd_m_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Memory, src: YMM) { append_elem(instructions, inst_vscatterqpd_m_ymm(dst, src)) } +emit_vscatterqpd_m_zmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Memory, src: ZMM) { append_elem(instructions, inst_vscatterqpd_m_zmm(dst, src)) } inst_vpsravq_xmm_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPSRAVQ, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_xmm(src2), {}} }, 1961) } inst_vpsravq_xmm_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .VPSRAVQ, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_mem(src2.mem, 16), {}} }, 1961) } inst_vpsravq_ymm_ymm_ymm :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: YMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPSRAVQ, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_ymm(src2), {}} }, 1962) } inst_vpsravq_ymm_ymm_m256 :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: Mem256) -> Instruction { return with_hint(Instruction{ mnemonic = .VPSRAVQ, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_mem(src2.mem, 32), {}} }, 1962) } inst_vpsravq_zmm_zmm_zmm :: #force_inline proc "contextless" (dst: ZMM, src: ZMM, src2: ZMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPSRAVQ, operand_count = 3, ops = {op_zmm(dst), op_zmm(src), op_zmm(src2), {}} }, 1963) } inst_vpsravq_zmm_zmm_m512 :: #force_inline proc "contextless" (dst: ZMM, src: ZMM, src2: Mem512) -> Instruction { return with_hint(Instruction{ mnemonic = .VPSRAVQ, operand_count = 3, ops = {op_zmm(dst), op_zmm(src), op_mem(src2.mem, 64), {}} }, 1963) } -emit_vpsravq_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append(instructions, inst_vpsravq_xmm_xmm_xmm(dst, src, src2)) } -emit_vpsravq_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append(instructions, inst_vpsravq_xmm_xmm_m128(dst, src, src2)) } -emit_vpsravq_ymm_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM) { append(instructions, inst_vpsravq_ymm_ymm_ymm(dst, src, src2)) } -emit_vpsravq_ymm_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256) { append(instructions, inst_vpsravq_ymm_ymm_m256(dst, src, src2)) } -emit_vpsravq_zmm_zmm_zmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ZMM, src: ZMM, src2: ZMM) { append(instructions, inst_vpsravq_zmm_zmm_zmm(dst, src, src2)) } -emit_vpsravq_zmm_zmm_m512 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ZMM, src: ZMM, src2: Mem512) { append(instructions, inst_vpsravq_zmm_zmm_m512(dst, src, src2)) } +emit_vpsravq_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append_elem(instructions, inst_vpsravq_xmm_xmm_xmm(dst, src, src2)) } +emit_vpsravq_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append_elem(instructions, inst_vpsravq_xmm_xmm_m128(dst, src, src2)) } +emit_vpsravq_ymm_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM) { append_elem(instructions, inst_vpsravq_ymm_ymm_ymm(dst, src, src2)) } +emit_vpsravq_ymm_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256) { append_elem(instructions, inst_vpsravq_ymm_ymm_m256(dst, src, src2)) } +emit_vpsravq_zmm_zmm_zmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ZMM, src: ZMM, src2: ZMM) { append_elem(instructions, inst_vpsravq_zmm_zmm_zmm(dst, src, src2)) } +emit_vpsravq_zmm_zmm_m512 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ZMM, src: ZMM, src2: Mem512) { append_elem(instructions, inst_vpsravq_zmm_zmm_m512(dst, src, src2)) } inst_vpsravw_xmm_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPSRAVW, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_xmm(src2), {}} }, 1964) } inst_vpsravw_xmm_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .VPSRAVW, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_mem(src2.mem, 16), {}} }, 1964) } inst_vpsravw_ymm_ymm_ymm :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: YMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPSRAVW, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_ymm(src2), {}} }, 1965) } inst_vpsravw_ymm_ymm_m256 :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: Mem256) -> Instruction { return with_hint(Instruction{ mnemonic = .VPSRAVW, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_mem(src2.mem, 32), {}} }, 1965) } inst_vpsravw_zmm_zmm_zmm :: #force_inline proc "contextless" (dst: ZMM, src: ZMM, src2: ZMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPSRAVW, operand_count = 3, ops = {op_zmm(dst), op_zmm(src), op_zmm(src2), {}} }, 1966) } inst_vpsravw_zmm_zmm_m512 :: #force_inline proc "contextless" (dst: ZMM, src: ZMM, src2: Mem512) -> Instruction { return with_hint(Instruction{ mnemonic = .VPSRAVW, operand_count = 3, ops = {op_zmm(dst), op_zmm(src), op_mem(src2.mem, 64), {}} }, 1966) } -emit_vpsravw_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append(instructions, inst_vpsravw_xmm_xmm_xmm(dst, src, src2)) } -emit_vpsravw_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append(instructions, inst_vpsravw_xmm_xmm_m128(dst, src, src2)) } -emit_vpsravw_ymm_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM) { append(instructions, inst_vpsravw_ymm_ymm_ymm(dst, src, src2)) } -emit_vpsravw_ymm_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256) { append(instructions, inst_vpsravw_ymm_ymm_m256(dst, src, src2)) } -emit_vpsravw_zmm_zmm_zmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ZMM, src: ZMM, src2: ZMM) { append(instructions, inst_vpsravw_zmm_zmm_zmm(dst, src, src2)) } -emit_vpsravw_zmm_zmm_m512 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ZMM, src: ZMM, src2: Mem512) { append(instructions, inst_vpsravw_zmm_zmm_m512(dst, src, src2)) } +emit_vpsravw_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append_elem(instructions, inst_vpsravw_xmm_xmm_xmm(dst, src, src2)) } +emit_vpsravw_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append_elem(instructions, inst_vpsravw_xmm_xmm_m128(dst, src, src2)) } +emit_vpsravw_ymm_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM) { append_elem(instructions, inst_vpsravw_ymm_ymm_ymm(dst, src, src2)) } +emit_vpsravw_ymm_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256) { append_elem(instructions, inst_vpsravw_ymm_ymm_m256(dst, src, src2)) } +emit_vpsravw_zmm_zmm_zmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ZMM, src: ZMM, src2: ZMM) { append_elem(instructions, inst_vpsravw_zmm_zmm_zmm(dst, src, src2)) } +emit_vpsravw_zmm_zmm_m512 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ZMM, src: ZMM, src2: Mem512) { append_elem(instructions, inst_vpsravw_zmm_zmm_m512(dst, src, src2)) } inst_vpsllvw_xmm_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPSLLVW, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_xmm(src2), {}} }, 1967) } inst_vpsllvw_xmm_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .VPSLLVW, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_mem(src2.mem, 16), {}} }, 1967) } inst_vpsllvw_ymm_ymm_ymm :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: YMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPSLLVW, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_ymm(src2), {}} }, 1968) } inst_vpsllvw_ymm_ymm_m256 :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: Mem256) -> Instruction { return with_hint(Instruction{ mnemonic = .VPSLLVW, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_mem(src2.mem, 32), {}} }, 1968) } inst_vpsllvw_zmm_zmm_zmm :: #force_inline proc "contextless" (dst: ZMM, src: ZMM, src2: ZMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPSLLVW, operand_count = 3, ops = {op_zmm(dst), op_zmm(src), op_zmm(src2), {}} }, 1969) } inst_vpsllvw_zmm_zmm_m512 :: #force_inline proc "contextless" (dst: ZMM, src: ZMM, src2: Mem512) -> Instruction { return with_hint(Instruction{ mnemonic = .VPSLLVW, operand_count = 3, ops = {op_zmm(dst), op_zmm(src), op_mem(src2.mem, 64), {}} }, 1969) } -emit_vpsllvw_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append(instructions, inst_vpsllvw_xmm_xmm_xmm(dst, src, src2)) } -emit_vpsllvw_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append(instructions, inst_vpsllvw_xmm_xmm_m128(dst, src, src2)) } -emit_vpsllvw_ymm_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM) { append(instructions, inst_vpsllvw_ymm_ymm_ymm(dst, src, src2)) } -emit_vpsllvw_ymm_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256) { append(instructions, inst_vpsllvw_ymm_ymm_m256(dst, src, src2)) } -emit_vpsllvw_zmm_zmm_zmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ZMM, src: ZMM, src2: ZMM) { append(instructions, inst_vpsllvw_zmm_zmm_zmm(dst, src, src2)) } -emit_vpsllvw_zmm_zmm_m512 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ZMM, src: ZMM, src2: Mem512) { append(instructions, inst_vpsllvw_zmm_zmm_m512(dst, src, src2)) } +emit_vpsllvw_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append_elem(instructions, inst_vpsllvw_xmm_xmm_xmm(dst, src, src2)) } +emit_vpsllvw_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append_elem(instructions, inst_vpsllvw_xmm_xmm_m128(dst, src, src2)) } +emit_vpsllvw_ymm_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM) { append_elem(instructions, inst_vpsllvw_ymm_ymm_ymm(dst, src, src2)) } +emit_vpsllvw_ymm_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256) { append_elem(instructions, inst_vpsllvw_ymm_ymm_m256(dst, src, src2)) } +emit_vpsllvw_zmm_zmm_zmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ZMM, src: ZMM, src2: ZMM) { append_elem(instructions, inst_vpsllvw_zmm_zmm_zmm(dst, src, src2)) } +emit_vpsllvw_zmm_zmm_m512 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ZMM, src: ZMM, src2: Mem512) { append_elem(instructions, inst_vpsllvw_zmm_zmm_m512(dst, src, src2)) } inst_vpsrlvw_xmm_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPSRLVW, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_xmm(src2), {}} }, 1970) } inst_vpsrlvw_xmm_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .VPSRLVW, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_mem(src2.mem, 16), {}} }, 1970) } inst_vpsrlvw_ymm_ymm_ymm :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: YMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPSRLVW, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_ymm(src2), {}} }, 1971) } inst_vpsrlvw_ymm_ymm_m256 :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: Mem256) -> Instruction { return with_hint(Instruction{ mnemonic = .VPSRLVW, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_mem(src2.mem, 32), {}} }, 1971) } inst_vpsrlvw_zmm_zmm_zmm :: #force_inline proc "contextless" (dst: ZMM, src: ZMM, src2: ZMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPSRLVW, operand_count = 3, ops = {op_zmm(dst), op_zmm(src), op_zmm(src2), {}} }, 1972) } inst_vpsrlvw_zmm_zmm_m512 :: #force_inline proc "contextless" (dst: ZMM, src: ZMM, src2: Mem512) -> Instruction { return with_hint(Instruction{ mnemonic = .VPSRLVW, operand_count = 3, ops = {op_zmm(dst), op_zmm(src), op_mem(src2.mem, 64), {}} }, 1972) } -emit_vpsrlvw_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append(instructions, inst_vpsrlvw_xmm_xmm_xmm(dst, src, src2)) } -emit_vpsrlvw_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append(instructions, inst_vpsrlvw_xmm_xmm_m128(dst, src, src2)) } -emit_vpsrlvw_ymm_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM) { append(instructions, inst_vpsrlvw_ymm_ymm_ymm(dst, src, src2)) } -emit_vpsrlvw_ymm_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256) { append(instructions, inst_vpsrlvw_ymm_ymm_m256(dst, src, src2)) } -emit_vpsrlvw_zmm_zmm_zmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ZMM, src: ZMM, src2: ZMM) { append(instructions, inst_vpsrlvw_zmm_zmm_zmm(dst, src, src2)) } -emit_vpsrlvw_zmm_zmm_m512 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ZMM, src: ZMM, src2: Mem512) { append(instructions, inst_vpsrlvw_zmm_zmm_m512(dst, src, src2)) } +emit_vpsrlvw_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append_elem(instructions, inst_vpsrlvw_xmm_xmm_xmm(dst, src, src2)) } +emit_vpsrlvw_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append_elem(instructions, inst_vpsrlvw_xmm_xmm_m128(dst, src, src2)) } +emit_vpsrlvw_ymm_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM) { append_elem(instructions, inst_vpsrlvw_ymm_ymm_ymm(dst, src, src2)) } +emit_vpsrlvw_ymm_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256) { append_elem(instructions, inst_vpsrlvw_ymm_ymm_m256(dst, src, src2)) } +emit_vpsrlvw_zmm_zmm_zmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ZMM, src: ZMM, src2: ZMM) { append_elem(instructions, inst_vpsrlvw_zmm_zmm_zmm(dst, src, src2)) } +emit_vpsrlvw_zmm_zmm_m512 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ZMM, src: ZMM, src2: Mem512) { append_elem(instructions, inst_vpsrlvw_zmm_zmm_m512(dst, src, src2)) } inst_vrangeps_xmm_xmm_xmm_imm8 :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: XMM, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .VRANGEPS, operand_count = 4, ops = {op_xmm(dst), op_xmm(src), op_xmm(src2), op_imm8(imm)} }, 1973) } inst_vrangeps_xmm_xmm_m128_imm8 :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: Mem128, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .VRANGEPS, operand_count = 4, ops = {op_xmm(dst), op_xmm(src), op_mem(src2.mem, 16), op_imm8(imm)} }, 1973) } inst_vrangeps_ymm_ymm_ymm_imm8 :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: YMM, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .VRANGEPS, operand_count = 4, ops = {op_ymm(dst), op_ymm(src), op_ymm(src2), op_imm8(imm)} }, 1974) } inst_vrangeps_ymm_ymm_m256_imm8 :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: Mem256, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .VRANGEPS, operand_count = 4, ops = {op_ymm(dst), op_ymm(src), op_mem(src2.mem, 32), op_imm8(imm)} }, 1974) } inst_vrangeps_zmm_zmm_zmm_imm8 :: #force_inline proc "contextless" (dst: ZMM, src: ZMM, src2: ZMM, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .VRANGEPS, operand_count = 4, ops = {op_zmm(dst), op_zmm(src), op_zmm(src2), op_imm8(imm)} }, 1975) } inst_vrangeps_zmm_zmm_m512_imm8 :: #force_inline proc "contextless" (dst: ZMM, src: ZMM, src2: Mem512, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .VRANGEPS, operand_count = 4, ops = {op_zmm(dst), op_zmm(src), op_mem(src2.mem, 64), op_imm8(imm)} }, 1975) } -emit_vrangeps_xmm_xmm_xmm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM, imm: i8) { append(instructions, inst_vrangeps_xmm_xmm_xmm_imm8(dst, src, src2, imm)) } -emit_vrangeps_xmm_xmm_m128_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128, imm: i8) { append(instructions, inst_vrangeps_xmm_xmm_m128_imm8(dst, src, src2, imm)) } -emit_vrangeps_ymm_ymm_ymm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM, imm: i8) { append(instructions, inst_vrangeps_ymm_ymm_ymm_imm8(dst, src, src2, imm)) } -emit_vrangeps_ymm_ymm_m256_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256, imm: i8) { append(instructions, inst_vrangeps_ymm_ymm_m256_imm8(dst, src, src2, imm)) } -emit_vrangeps_zmm_zmm_zmm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ZMM, src: ZMM, src2: ZMM, imm: i8) { append(instructions, inst_vrangeps_zmm_zmm_zmm_imm8(dst, src, src2, imm)) } -emit_vrangeps_zmm_zmm_m512_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ZMM, src: ZMM, src2: Mem512, imm: i8) { append(instructions, inst_vrangeps_zmm_zmm_m512_imm8(dst, src, src2, imm)) } +emit_vrangeps_xmm_xmm_xmm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM, imm: i8) { append_elem(instructions, inst_vrangeps_xmm_xmm_xmm_imm8(dst, src, src2, imm)) } +emit_vrangeps_xmm_xmm_m128_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128, imm: i8) { append_elem(instructions, inst_vrangeps_xmm_xmm_m128_imm8(dst, src, src2, imm)) } +emit_vrangeps_ymm_ymm_ymm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM, imm: i8) { append_elem(instructions, inst_vrangeps_ymm_ymm_ymm_imm8(dst, src, src2, imm)) } +emit_vrangeps_ymm_ymm_m256_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256, imm: i8) { append_elem(instructions, inst_vrangeps_ymm_ymm_m256_imm8(dst, src, src2, imm)) } +emit_vrangeps_zmm_zmm_zmm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ZMM, src: ZMM, src2: ZMM, imm: i8) { append_elem(instructions, inst_vrangeps_zmm_zmm_zmm_imm8(dst, src, src2, imm)) } +emit_vrangeps_zmm_zmm_m512_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ZMM, src: ZMM, src2: Mem512, imm: i8) { append_elem(instructions, inst_vrangeps_zmm_zmm_m512_imm8(dst, src, src2, imm)) } inst_vrangepd_xmm_xmm_xmm_imm8 :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: XMM, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .VRANGEPD, operand_count = 4, ops = {op_xmm(dst), op_xmm(src), op_xmm(src2), op_imm8(imm)} }, 1976) } inst_vrangepd_xmm_xmm_m128_imm8 :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: Mem128, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .VRANGEPD, operand_count = 4, ops = {op_xmm(dst), op_xmm(src), op_mem(src2.mem, 16), op_imm8(imm)} }, 1976) } inst_vrangepd_ymm_ymm_ymm_imm8 :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: YMM, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .VRANGEPD, operand_count = 4, ops = {op_ymm(dst), op_ymm(src), op_ymm(src2), op_imm8(imm)} }, 1977) } inst_vrangepd_ymm_ymm_m256_imm8 :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: Mem256, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .VRANGEPD, operand_count = 4, ops = {op_ymm(dst), op_ymm(src), op_mem(src2.mem, 32), op_imm8(imm)} }, 1977) } inst_vrangepd_zmm_zmm_zmm_imm8 :: #force_inline proc "contextless" (dst: ZMM, src: ZMM, src2: ZMM, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .VRANGEPD, operand_count = 4, ops = {op_zmm(dst), op_zmm(src), op_zmm(src2), op_imm8(imm)} }, 1978) } inst_vrangepd_zmm_zmm_m512_imm8 :: #force_inline proc "contextless" (dst: ZMM, src: ZMM, src2: Mem512, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .VRANGEPD, operand_count = 4, ops = {op_zmm(dst), op_zmm(src), op_mem(src2.mem, 64), op_imm8(imm)} }, 1978) } -emit_vrangepd_xmm_xmm_xmm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM, imm: i8) { append(instructions, inst_vrangepd_xmm_xmm_xmm_imm8(dst, src, src2, imm)) } -emit_vrangepd_xmm_xmm_m128_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128, imm: i8) { append(instructions, inst_vrangepd_xmm_xmm_m128_imm8(dst, src, src2, imm)) } -emit_vrangepd_ymm_ymm_ymm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM, imm: i8) { append(instructions, inst_vrangepd_ymm_ymm_ymm_imm8(dst, src, src2, imm)) } -emit_vrangepd_ymm_ymm_m256_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256, imm: i8) { append(instructions, inst_vrangepd_ymm_ymm_m256_imm8(dst, src, src2, imm)) } -emit_vrangepd_zmm_zmm_zmm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ZMM, src: ZMM, src2: ZMM, imm: i8) { append(instructions, inst_vrangepd_zmm_zmm_zmm_imm8(dst, src, src2, imm)) } -emit_vrangepd_zmm_zmm_m512_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ZMM, src: ZMM, src2: Mem512, imm: i8) { append(instructions, inst_vrangepd_zmm_zmm_m512_imm8(dst, src, src2, imm)) } +emit_vrangepd_xmm_xmm_xmm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM, imm: i8) { append_elem(instructions, inst_vrangepd_xmm_xmm_xmm_imm8(dst, src, src2, imm)) } +emit_vrangepd_xmm_xmm_m128_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128, imm: i8) { append_elem(instructions, inst_vrangepd_xmm_xmm_m128_imm8(dst, src, src2, imm)) } +emit_vrangepd_ymm_ymm_ymm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM, imm: i8) { append_elem(instructions, inst_vrangepd_ymm_ymm_ymm_imm8(dst, src, src2, imm)) } +emit_vrangepd_ymm_ymm_m256_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256, imm: i8) { append_elem(instructions, inst_vrangepd_ymm_ymm_m256_imm8(dst, src, src2, imm)) } +emit_vrangepd_zmm_zmm_zmm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ZMM, src: ZMM, src2: ZMM, imm: i8) { append_elem(instructions, inst_vrangepd_zmm_zmm_zmm_imm8(dst, src, src2, imm)) } +emit_vrangepd_zmm_zmm_m512_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ZMM, src: ZMM, src2: Mem512, imm: i8) { append_elem(instructions, inst_vrangepd_zmm_zmm_m512_imm8(dst, src, src2, imm)) } inst_vrangess_xmm_xmm_xmm_imm8 :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: XMM, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .VRANGESS, operand_count = 4, ops = {op_xmm(dst), op_xmm(src), op_xmm(src2), op_imm8(imm)} }, 1979) } inst_vrangess_xmm_xmm_m32_imm8 :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: Mem32, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .VRANGESS, operand_count = 4, ops = {op_xmm(dst), op_xmm(src), op_mem(src2.mem, 4), op_imm8(imm)} }, 1979) } -emit_vrangess_xmm_xmm_xmm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM, imm: i8) { append(instructions, inst_vrangess_xmm_xmm_xmm_imm8(dst, src, src2, imm)) } -emit_vrangess_xmm_xmm_m32_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem32, imm: i8) { append(instructions, inst_vrangess_xmm_xmm_m32_imm8(dst, src, src2, imm)) } +emit_vrangess_xmm_xmm_xmm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM, imm: i8) { append_elem(instructions, inst_vrangess_xmm_xmm_xmm_imm8(dst, src, src2, imm)) } +emit_vrangess_xmm_xmm_m32_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem32, imm: i8) { append_elem(instructions, inst_vrangess_xmm_xmm_m32_imm8(dst, src, src2, imm)) } inst_vrangesd_xmm_xmm_xmm_imm8 :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: XMM, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .VRANGESD, operand_count = 4, ops = {op_xmm(dst), op_xmm(src), op_xmm(src2), op_imm8(imm)} }, 1980) } inst_vrangesd_xmm_xmm_m64_imm8 :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: Mem64, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .VRANGESD, operand_count = 4, ops = {op_xmm(dst), op_xmm(src), op_mem(src2.mem, 8), op_imm8(imm)} }, 1980) } -emit_vrangesd_xmm_xmm_xmm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM, imm: i8) { append(instructions, inst_vrangesd_xmm_xmm_xmm_imm8(dst, src, src2, imm)) } -emit_vrangesd_xmm_xmm_m64_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem64, imm: i8) { append(instructions, inst_vrangesd_xmm_xmm_m64_imm8(dst, src, src2, imm)) } +emit_vrangesd_xmm_xmm_xmm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM, imm: i8) { append_elem(instructions, inst_vrangesd_xmm_xmm_xmm_imm8(dst, src, src2, imm)) } +emit_vrangesd_xmm_xmm_m64_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem64, imm: i8) { append_elem(instructions, inst_vrangesd_xmm_xmm_m64_imm8(dst, src, src2, imm)) } inst_vreduceps_xmm_xmm_imm8 :: #force_inline proc "contextless" (dst: XMM, src: XMM, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .VREDUCEPS, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_imm8(imm), {}} }, 1981) } inst_vreduceps_xmm_m128_imm8 :: #force_inline proc "contextless" (dst: XMM, src: Mem128, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .VREDUCEPS, operand_count = 3, ops = {op_xmm(dst), op_mem(src.mem, 16), op_imm8(imm), {}} }, 1981) } inst_vreduceps_ymm_ymm_imm8 :: #force_inline proc "contextless" (dst: YMM, src: YMM, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .VREDUCEPS, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_imm8(imm), {}} }, 1982) } inst_vreduceps_ymm_m256_imm8 :: #force_inline proc "contextless" (dst: YMM, src: Mem256, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .VREDUCEPS, operand_count = 3, ops = {op_ymm(dst), op_mem(src.mem, 32), op_imm8(imm), {}} }, 1982) } inst_vreduceps_zmm_zmm_imm8 :: #force_inline proc "contextless" (dst: ZMM, src: ZMM, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .VREDUCEPS, operand_count = 3, ops = {op_zmm(dst), op_zmm(src), op_imm8(imm), {}} }, 1983) } inst_vreduceps_zmm_m512_imm8 :: #force_inline proc "contextless" (dst: ZMM, src: Mem512, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .VREDUCEPS, operand_count = 3, ops = {op_zmm(dst), op_mem(src.mem, 64), op_imm8(imm), {}} }, 1983) } -emit_vreduceps_xmm_xmm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, imm: i8) { append(instructions, inst_vreduceps_xmm_xmm_imm8(dst, src, imm)) } -emit_vreduceps_xmm_m128_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128, imm: i8) { append(instructions, inst_vreduceps_xmm_m128_imm8(dst, src, imm)) } -emit_vreduceps_ymm_ymm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, imm: i8) { append(instructions, inst_vreduceps_ymm_ymm_imm8(dst, src, imm)) } -emit_vreduceps_ymm_m256_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: Mem256, imm: i8) { append(instructions, inst_vreduceps_ymm_m256_imm8(dst, src, imm)) } -emit_vreduceps_zmm_zmm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ZMM, src: ZMM, imm: i8) { append(instructions, inst_vreduceps_zmm_zmm_imm8(dst, src, imm)) } -emit_vreduceps_zmm_m512_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ZMM, src: Mem512, imm: i8) { append(instructions, inst_vreduceps_zmm_m512_imm8(dst, src, imm)) } +emit_vreduceps_xmm_xmm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, imm: i8) { append_elem(instructions, inst_vreduceps_xmm_xmm_imm8(dst, src, imm)) } +emit_vreduceps_xmm_m128_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128, imm: i8) { append_elem(instructions, inst_vreduceps_xmm_m128_imm8(dst, src, imm)) } +emit_vreduceps_ymm_ymm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, imm: i8) { append_elem(instructions, inst_vreduceps_ymm_ymm_imm8(dst, src, imm)) } +emit_vreduceps_ymm_m256_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: Mem256, imm: i8) { append_elem(instructions, inst_vreduceps_ymm_m256_imm8(dst, src, imm)) } +emit_vreduceps_zmm_zmm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ZMM, src: ZMM, imm: i8) { append_elem(instructions, inst_vreduceps_zmm_zmm_imm8(dst, src, imm)) } +emit_vreduceps_zmm_m512_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ZMM, src: Mem512, imm: i8) { append_elem(instructions, inst_vreduceps_zmm_m512_imm8(dst, src, imm)) } inst_vreducepd_xmm_xmm_imm8 :: #force_inline proc "contextless" (dst: XMM, src: XMM, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .VREDUCEPD, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_imm8(imm), {}} }, 1984) } inst_vreducepd_xmm_m128_imm8 :: #force_inline proc "contextless" (dst: XMM, src: Mem128, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .VREDUCEPD, operand_count = 3, ops = {op_xmm(dst), op_mem(src.mem, 16), op_imm8(imm), {}} }, 1984) } inst_vreducepd_ymm_ymm_imm8 :: #force_inline proc "contextless" (dst: YMM, src: YMM, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .VREDUCEPD, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_imm8(imm), {}} }, 1985) } inst_vreducepd_ymm_m256_imm8 :: #force_inline proc "contextless" (dst: YMM, src: Mem256, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .VREDUCEPD, operand_count = 3, ops = {op_ymm(dst), op_mem(src.mem, 32), op_imm8(imm), {}} }, 1985) } inst_vreducepd_zmm_zmm_imm8 :: #force_inline proc "contextless" (dst: ZMM, src: ZMM, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .VREDUCEPD, operand_count = 3, ops = {op_zmm(dst), op_zmm(src), op_imm8(imm), {}} }, 1986) } inst_vreducepd_zmm_m512_imm8 :: #force_inline proc "contextless" (dst: ZMM, src: Mem512, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .VREDUCEPD, operand_count = 3, ops = {op_zmm(dst), op_mem(src.mem, 64), op_imm8(imm), {}} }, 1986) } -emit_vreducepd_xmm_xmm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, imm: i8) { append(instructions, inst_vreducepd_xmm_xmm_imm8(dst, src, imm)) } -emit_vreducepd_xmm_m128_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128, imm: i8) { append(instructions, inst_vreducepd_xmm_m128_imm8(dst, src, imm)) } -emit_vreducepd_ymm_ymm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, imm: i8) { append(instructions, inst_vreducepd_ymm_ymm_imm8(dst, src, imm)) } -emit_vreducepd_ymm_m256_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: Mem256, imm: i8) { append(instructions, inst_vreducepd_ymm_m256_imm8(dst, src, imm)) } -emit_vreducepd_zmm_zmm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ZMM, src: ZMM, imm: i8) { append(instructions, inst_vreducepd_zmm_zmm_imm8(dst, src, imm)) } -emit_vreducepd_zmm_m512_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ZMM, src: Mem512, imm: i8) { append(instructions, inst_vreducepd_zmm_m512_imm8(dst, src, imm)) } +emit_vreducepd_xmm_xmm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, imm: i8) { append_elem(instructions, inst_vreducepd_xmm_xmm_imm8(dst, src, imm)) } +emit_vreducepd_xmm_m128_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128, imm: i8) { append_elem(instructions, inst_vreducepd_xmm_m128_imm8(dst, src, imm)) } +emit_vreducepd_ymm_ymm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, imm: i8) { append_elem(instructions, inst_vreducepd_ymm_ymm_imm8(dst, src, imm)) } +emit_vreducepd_ymm_m256_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: Mem256, imm: i8) { append_elem(instructions, inst_vreducepd_ymm_m256_imm8(dst, src, imm)) } +emit_vreducepd_zmm_zmm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ZMM, src: ZMM, imm: i8) { append_elem(instructions, inst_vreducepd_zmm_zmm_imm8(dst, src, imm)) } +emit_vreducepd_zmm_m512_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ZMM, src: Mem512, imm: i8) { append_elem(instructions, inst_vreducepd_zmm_m512_imm8(dst, src, imm)) } inst_vreducess_xmm_xmm_xmm_imm8 :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: XMM, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .VREDUCESS, operand_count = 4, ops = {op_xmm(dst), op_xmm(src), op_xmm(src2), op_imm8(imm)} }, 1987) } inst_vreducess_xmm_xmm_m32_imm8 :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: Mem32, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .VREDUCESS, operand_count = 4, ops = {op_xmm(dst), op_xmm(src), op_mem(src2.mem, 4), op_imm8(imm)} }, 1987) } -emit_vreducess_xmm_xmm_xmm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM, imm: i8) { append(instructions, inst_vreducess_xmm_xmm_xmm_imm8(dst, src, src2, imm)) } -emit_vreducess_xmm_xmm_m32_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem32, imm: i8) { append(instructions, inst_vreducess_xmm_xmm_m32_imm8(dst, src, src2, imm)) } +emit_vreducess_xmm_xmm_xmm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM, imm: i8) { append_elem(instructions, inst_vreducess_xmm_xmm_xmm_imm8(dst, src, src2, imm)) } +emit_vreducess_xmm_xmm_m32_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem32, imm: i8) { append_elem(instructions, inst_vreducess_xmm_xmm_m32_imm8(dst, src, src2, imm)) } inst_vreducesd_xmm_xmm_xmm_imm8 :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: XMM, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .VREDUCESD, operand_count = 4, ops = {op_xmm(dst), op_xmm(src), op_xmm(src2), op_imm8(imm)} }, 1988) } inst_vreducesd_xmm_xmm_m64_imm8 :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: Mem64, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .VREDUCESD, operand_count = 4, ops = {op_xmm(dst), op_xmm(src), op_mem(src2.mem, 8), op_imm8(imm)} }, 1988) } -emit_vreducesd_xmm_xmm_xmm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM, imm: i8) { append(instructions, inst_vreducesd_xmm_xmm_xmm_imm8(dst, src, src2, imm)) } -emit_vreducesd_xmm_xmm_m64_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem64, imm: i8) { append(instructions, inst_vreducesd_xmm_xmm_m64_imm8(dst, src, src2, imm)) } +emit_vreducesd_xmm_xmm_xmm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM, imm: i8) { append_elem(instructions, inst_vreducesd_xmm_xmm_xmm_imm8(dst, src, src2, imm)) } +emit_vreducesd_xmm_xmm_m64_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem64, imm: i8) { append_elem(instructions, inst_vreducesd_xmm_xmm_m64_imm8(dst, src, src2, imm)) } inst_vrndscaleps_xmm_xmm_imm8 :: #force_inline proc "contextless" (dst: XMM, src: XMM, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .VRNDSCALEPS, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_imm8(imm), {}} }, 1989) } inst_vrndscaleps_xmm_m128_imm8 :: #force_inline proc "contextless" (dst: XMM, src: Mem128, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .VRNDSCALEPS, operand_count = 3, ops = {op_xmm(dst), op_mem(src.mem, 16), op_imm8(imm), {}} }, 1989) } inst_vrndscaleps_ymm_ymm_imm8 :: #force_inline proc "contextless" (dst: YMM, src: YMM, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .VRNDSCALEPS, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_imm8(imm), {}} }, 1990) } inst_vrndscaleps_ymm_m256_imm8 :: #force_inline proc "contextless" (dst: YMM, src: Mem256, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .VRNDSCALEPS, operand_count = 3, ops = {op_ymm(dst), op_mem(src.mem, 32), op_imm8(imm), {}} }, 1990) } inst_vrndscaleps_zmm_zmm_imm8 :: #force_inline proc "contextless" (dst: ZMM, src: ZMM, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .VRNDSCALEPS, operand_count = 3, ops = {op_zmm(dst), op_zmm(src), op_imm8(imm), {}} }, 1991) } inst_vrndscaleps_zmm_m512_imm8 :: #force_inline proc "contextless" (dst: ZMM, src: Mem512, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .VRNDSCALEPS, operand_count = 3, ops = {op_zmm(dst), op_mem(src.mem, 64), op_imm8(imm), {}} }, 1991) } -emit_vrndscaleps_xmm_xmm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, imm: i8) { append(instructions, inst_vrndscaleps_xmm_xmm_imm8(dst, src, imm)) } -emit_vrndscaleps_xmm_m128_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128, imm: i8) { append(instructions, inst_vrndscaleps_xmm_m128_imm8(dst, src, imm)) } -emit_vrndscaleps_ymm_ymm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, imm: i8) { append(instructions, inst_vrndscaleps_ymm_ymm_imm8(dst, src, imm)) } -emit_vrndscaleps_ymm_m256_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: Mem256, imm: i8) { append(instructions, inst_vrndscaleps_ymm_m256_imm8(dst, src, imm)) } -emit_vrndscaleps_zmm_zmm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ZMM, src: ZMM, imm: i8) { append(instructions, inst_vrndscaleps_zmm_zmm_imm8(dst, src, imm)) } -emit_vrndscaleps_zmm_m512_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ZMM, src: Mem512, imm: i8) { append(instructions, inst_vrndscaleps_zmm_m512_imm8(dst, src, imm)) } +emit_vrndscaleps_xmm_xmm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, imm: i8) { append_elem(instructions, inst_vrndscaleps_xmm_xmm_imm8(dst, src, imm)) } +emit_vrndscaleps_xmm_m128_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128, imm: i8) { append_elem(instructions, inst_vrndscaleps_xmm_m128_imm8(dst, src, imm)) } +emit_vrndscaleps_ymm_ymm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, imm: i8) { append_elem(instructions, inst_vrndscaleps_ymm_ymm_imm8(dst, src, imm)) } +emit_vrndscaleps_ymm_m256_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: Mem256, imm: i8) { append_elem(instructions, inst_vrndscaleps_ymm_m256_imm8(dst, src, imm)) } +emit_vrndscaleps_zmm_zmm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ZMM, src: ZMM, imm: i8) { append_elem(instructions, inst_vrndscaleps_zmm_zmm_imm8(dst, src, imm)) } +emit_vrndscaleps_zmm_m512_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ZMM, src: Mem512, imm: i8) { append_elem(instructions, inst_vrndscaleps_zmm_m512_imm8(dst, src, imm)) } inst_vrndscalepd_xmm_xmm_imm8 :: #force_inline proc "contextless" (dst: XMM, src: XMM, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .VRNDSCALEPD, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_imm8(imm), {}} }, 1992) } inst_vrndscalepd_xmm_m128_imm8 :: #force_inline proc "contextless" (dst: XMM, src: Mem128, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .VRNDSCALEPD, operand_count = 3, ops = {op_xmm(dst), op_mem(src.mem, 16), op_imm8(imm), {}} }, 1992) } inst_vrndscalepd_ymm_ymm_imm8 :: #force_inline proc "contextless" (dst: YMM, src: YMM, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .VRNDSCALEPD, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_imm8(imm), {}} }, 1993) } inst_vrndscalepd_ymm_m256_imm8 :: #force_inline proc "contextless" (dst: YMM, src: Mem256, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .VRNDSCALEPD, operand_count = 3, ops = {op_ymm(dst), op_mem(src.mem, 32), op_imm8(imm), {}} }, 1993) } inst_vrndscalepd_zmm_zmm_imm8 :: #force_inline proc "contextless" (dst: ZMM, src: ZMM, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .VRNDSCALEPD, operand_count = 3, ops = {op_zmm(dst), op_zmm(src), op_imm8(imm), {}} }, 1994) } inst_vrndscalepd_zmm_m512_imm8 :: #force_inline proc "contextless" (dst: ZMM, src: Mem512, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .VRNDSCALEPD, operand_count = 3, ops = {op_zmm(dst), op_mem(src.mem, 64), op_imm8(imm), {}} }, 1994) } -emit_vrndscalepd_xmm_xmm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, imm: i8) { append(instructions, inst_vrndscalepd_xmm_xmm_imm8(dst, src, imm)) } -emit_vrndscalepd_xmm_m128_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128, imm: i8) { append(instructions, inst_vrndscalepd_xmm_m128_imm8(dst, src, imm)) } -emit_vrndscalepd_ymm_ymm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, imm: i8) { append(instructions, inst_vrndscalepd_ymm_ymm_imm8(dst, src, imm)) } -emit_vrndscalepd_ymm_m256_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: Mem256, imm: i8) { append(instructions, inst_vrndscalepd_ymm_m256_imm8(dst, src, imm)) } -emit_vrndscalepd_zmm_zmm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ZMM, src: ZMM, imm: i8) { append(instructions, inst_vrndscalepd_zmm_zmm_imm8(dst, src, imm)) } -emit_vrndscalepd_zmm_m512_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ZMM, src: Mem512, imm: i8) { append(instructions, inst_vrndscalepd_zmm_m512_imm8(dst, src, imm)) } +emit_vrndscalepd_xmm_xmm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, imm: i8) { append_elem(instructions, inst_vrndscalepd_xmm_xmm_imm8(dst, src, imm)) } +emit_vrndscalepd_xmm_m128_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128, imm: i8) { append_elem(instructions, inst_vrndscalepd_xmm_m128_imm8(dst, src, imm)) } +emit_vrndscalepd_ymm_ymm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, imm: i8) { append_elem(instructions, inst_vrndscalepd_ymm_ymm_imm8(dst, src, imm)) } +emit_vrndscalepd_ymm_m256_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: Mem256, imm: i8) { append_elem(instructions, inst_vrndscalepd_ymm_m256_imm8(dst, src, imm)) } +emit_vrndscalepd_zmm_zmm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ZMM, src: ZMM, imm: i8) { append_elem(instructions, inst_vrndscalepd_zmm_zmm_imm8(dst, src, imm)) } +emit_vrndscalepd_zmm_m512_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ZMM, src: Mem512, imm: i8) { append_elem(instructions, inst_vrndscalepd_zmm_m512_imm8(dst, src, imm)) } inst_vrndscaless_xmm_xmm_xmm_imm8 :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: XMM, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .VRNDSCALESS, operand_count = 4, ops = {op_xmm(dst), op_xmm(src), op_xmm(src2), op_imm8(imm)} }, 1995) } inst_vrndscaless_xmm_xmm_m32_imm8 :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: Mem32, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .VRNDSCALESS, operand_count = 4, ops = {op_xmm(dst), op_xmm(src), op_mem(src2.mem, 4), op_imm8(imm)} }, 1995) } -emit_vrndscaless_xmm_xmm_xmm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM, imm: i8) { append(instructions, inst_vrndscaless_xmm_xmm_xmm_imm8(dst, src, src2, imm)) } -emit_vrndscaless_xmm_xmm_m32_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem32, imm: i8) { append(instructions, inst_vrndscaless_xmm_xmm_m32_imm8(dst, src, src2, imm)) } +emit_vrndscaless_xmm_xmm_xmm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM, imm: i8) { append_elem(instructions, inst_vrndscaless_xmm_xmm_xmm_imm8(dst, src, src2, imm)) } +emit_vrndscaless_xmm_xmm_m32_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem32, imm: i8) { append_elem(instructions, inst_vrndscaless_xmm_xmm_m32_imm8(dst, src, src2, imm)) } inst_vrndscalesd_xmm_xmm_xmm_imm8 :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: XMM, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .VRNDSCALESD, operand_count = 4, ops = {op_xmm(dst), op_xmm(src), op_xmm(src2), op_imm8(imm)} }, 1996) } inst_vrndscalesd_xmm_xmm_m64_imm8 :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: Mem64, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .VRNDSCALESD, operand_count = 4, ops = {op_xmm(dst), op_xmm(src), op_mem(src2.mem, 8), op_imm8(imm)} }, 1996) } -emit_vrndscalesd_xmm_xmm_xmm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM, imm: i8) { append(instructions, inst_vrndscalesd_xmm_xmm_xmm_imm8(dst, src, src2, imm)) } -emit_vrndscalesd_xmm_xmm_m64_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem64, imm: i8) { append(instructions, inst_vrndscalesd_xmm_xmm_m64_imm8(dst, src, src2, imm)) } +emit_vrndscalesd_xmm_xmm_xmm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM, imm: i8) { append_elem(instructions, inst_vrndscalesd_xmm_xmm_xmm_imm8(dst, src, src2, imm)) } +emit_vrndscalesd_xmm_xmm_m64_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem64, imm: i8) { append_elem(instructions, inst_vrndscalesd_xmm_xmm_m64_imm8(dst, src, src2, imm)) } inst_vrsqrt14ps_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VRSQRT14PS, operand_count = 2, ops = {op_xmm(dst), op_xmm(src), {}, {}} }, 1997) } inst_vrsqrt14ps_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .VRSQRT14PS, operand_count = 2, ops = {op_xmm(dst), op_mem(src.mem, 16), {}, {}} }, 1997) } inst_vrsqrt14ps_ymm_ymm :: #force_inline proc "contextless" (dst: YMM, src: YMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VRSQRT14PS, operand_count = 2, ops = {op_ymm(dst), op_ymm(src), {}, {}} }, 1998) } inst_vrsqrt14ps_ymm_m256 :: #force_inline proc "contextless" (dst: YMM, src: Mem256) -> Instruction { return with_hint(Instruction{ mnemonic = .VRSQRT14PS, operand_count = 2, ops = {op_ymm(dst), op_mem(src.mem, 32), {}, {}} }, 1998) } inst_vrsqrt14ps_zmm_zmm :: #force_inline proc "contextless" (dst: ZMM, src: ZMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VRSQRT14PS, operand_count = 2, ops = {op_zmm(dst), op_zmm(src), {}, {}} }, 1999) } inst_vrsqrt14ps_zmm_m512 :: #force_inline proc "contextless" (dst: ZMM, src: Mem512) -> Instruction { return with_hint(Instruction{ mnemonic = .VRSQRT14PS, operand_count = 2, ops = {op_zmm(dst), op_mem(src.mem, 64), {}, {}} }, 1999) } -emit_vrsqrt14ps_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append(instructions, inst_vrsqrt14ps_xmm_xmm(dst, src)) } -emit_vrsqrt14ps_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append(instructions, inst_vrsqrt14ps_xmm_m128(dst, src)) } -emit_vrsqrt14ps_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM) { append(instructions, inst_vrsqrt14ps_ymm_ymm(dst, src)) } -emit_vrsqrt14ps_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: Mem256) { append(instructions, inst_vrsqrt14ps_ymm_m256(dst, src)) } -emit_vrsqrt14ps_zmm_zmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ZMM, src: ZMM) { append(instructions, inst_vrsqrt14ps_zmm_zmm(dst, src)) } -emit_vrsqrt14ps_zmm_m512 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ZMM, src: Mem512) { append(instructions, inst_vrsqrt14ps_zmm_m512(dst, src)) } +emit_vrsqrt14ps_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append_elem(instructions, inst_vrsqrt14ps_xmm_xmm(dst, src)) } +emit_vrsqrt14ps_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append_elem(instructions, inst_vrsqrt14ps_xmm_m128(dst, src)) } +emit_vrsqrt14ps_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM) { append_elem(instructions, inst_vrsqrt14ps_ymm_ymm(dst, src)) } +emit_vrsqrt14ps_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: Mem256) { append_elem(instructions, inst_vrsqrt14ps_ymm_m256(dst, src)) } +emit_vrsqrt14ps_zmm_zmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ZMM, src: ZMM) { append_elem(instructions, inst_vrsqrt14ps_zmm_zmm(dst, src)) } +emit_vrsqrt14ps_zmm_m512 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ZMM, src: Mem512) { append_elem(instructions, inst_vrsqrt14ps_zmm_m512(dst, src)) } inst_vrsqrt14pd_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VRSQRT14PD, operand_count = 2, ops = {op_xmm(dst), op_xmm(src), {}, {}} }, 2000) } inst_vrsqrt14pd_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .VRSQRT14PD, operand_count = 2, ops = {op_xmm(dst), op_mem(src.mem, 16), {}, {}} }, 2000) } inst_vrsqrt14pd_ymm_ymm :: #force_inline proc "contextless" (dst: YMM, src: YMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VRSQRT14PD, operand_count = 2, ops = {op_ymm(dst), op_ymm(src), {}, {}} }, 2001) } inst_vrsqrt14pd_ymm_m256 :: #force_inline proc "contextless" (dst: YMM, src: Mem256) -> Instruction { return with_hint(Instruction{ mnemonic = .VRSQRT14PD, operand_count = 2, ops = {op_ymm(dst), op_mem(src.mem, 32), {}, {}} }, 2001) } inst_vrsqrt14pd_zmm_zmm :: #force_inline proc "contextless" (dst: ZMM, src: ZMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VRSQRT14PD, operand_count = 2, ops = {op_zmm(dst), op_zmm(src), {}, {}} }, 2002) } inst_vrsqrt14pd_zmm_m512 :: #force_inline proc "contextless" (dst: ZMM, src: Mem512) -> Instruction { return with_hint(Instruction{ mnemonic = .VRSQRT14PD, operand_count = 2, ops = {op_zmm(dst), op_mem(src.mem, 64), {}, {}} }, 2002) } -emit_vrsqrt14pd_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append(instructions, inst_vrsqrt14pd_xmm_xmm(dst, src)) } -emit_vrsqrt14pd_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append(instructions, inst_vrsqrt14pd_xmm_m128(dst, src)) } -emit_vrsqrt14pd_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM) { append(instructions, inst_vrsqrt14pd_ymm_ymm(dst, src)) } -emit_vrsqrt14pd_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: Mem256) { append(instructions, inst_vrsqrt14pd_ymm_m256(dst, src)) } -emit_vrsqrt14pd_zmm_zmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ZMM, src: ZMM) { append(instructions, inst_vrsqrt14pd_zmm_zmm(dst, src)) } -emit_vrsqrt14pd_zmm_m512 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ZMM, src: Mem512) { append(instructions, inst_vrsqrt14pd_zmm_m512(dst, src)) } +emit_vrsqrt14pd_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append_elem(instructions, inst_vrsqrt14pd_xmm_xmm(dst, src)) } +emit_vrsqrt14pd_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append_elem(instructions, inst_vrsqrt14pd_xmm_m128(dst, src)) } +emit_vrsqrt14pd_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM) { append_elem(instructions, inst_vrsqrt14pd_ymm_ymm(dst, src)) } +emit_vrsqrt14pd_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: Mem256) { append_elem(instructions, inst_vrsqrt14pd_ymm_m256(dst, src)) } +emit_vrsqrt14pd_zmm_zmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ZMM, src: ZMM) { append_elem(instructions, inst_vrsqrt14pd_zmm_zmm(dst, src)) } +emit_vrsqrt14pd_zmm_m512 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ZMM, src: Mem512) { append_elem(instructions, inst_vrsqrt14pd_zmm_m512(dst, src)) } inst_vrsqrt14ss_xmm_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VRSQRT14SS, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_xmm(src2), {}} }, 2003) } inst_vrsqrt14ss_xmm_xmm_m32 :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: Mem32) -> Instruction { return with_hint(Instruction{ mnemonic = .VRSQRT14SS, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_mem(src2.mem, 4), {}} }, 2003) } -emit_vrsqrt14ss_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append(instructions, inst_vrsqrt14ss_xmm_xmm_xmm(dst, src, src2)) } -emit_vrsqrt14ss_xmm_xmm_m32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem32) { append(instructions, inst_vrsqrt14ss_xmm_xmm_m32(dst, src, src2)) } +emit_vrsqrt14ss_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append_elem(instructions, inst_vrsqrt14ss_xmm_xmm_xmm(dst, src, src2)) } +emit_vrsqrt14ss_xmm_xmm_m32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem32) { append_elem(instructions, inst_vrsqrt14ss_xmm_xmm_m32(dst, src, src2)) } inst_vrsqrt14sd_xmm_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VRSQRT14SD, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_xmm(src2), {}} }, 2004) } inst_vrsqrt14sd_xmm_xmm_m64 :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: Mem64) -> Instruction { return with_hint(Instruction{ mnemonic = .VRSQRT14SD, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_mem(src2.mem, 8), {}} }, 2004) } -emit_vrsqrt14sd_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append(instructions, inst_vrsqrt14sd_xmm_xmm_xmm(dst, src, src2)) } -emit_vrsqrt14sd_xmm_xmm_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem64) { append(instructions, inst_vrsqrt14sd_xmm_xmm_m64(dst, src, src2)) } +emit_vrsqrt14sd_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append_elem(instructions, inst_vrsqrt14sd_xmm_xmm_xmm(dst, src, src2)) } +emit_vrsqrt14sd_xmm_xmm_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem64) { append_elem(instructions, inst_vrsqrt14sd_xmm_xmm_m64(dst, src, src2)) } inst_vrcp14ps_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VRCP14PS, operand_count = 2, ops = {op_xmm(dst), op_xmm(src), {}, {}} }, 2005) } inst_vrcp14ps_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .VRCP14PS, operand_count = 2, ops = {op_xmm(dst), op_mem(src.mem, 16), {}, {}} }, 2005) } inst_vrcp14ps_ymm_ymm :: #force_inline proc "contextless" (dst: YMM, src: YMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VRCP14PS, operand_count = 2, ops = {op_ymm(dst), op_ymm(src), {}, {}} }, 2006) } inst_vrcp14ps_ymm_m256 :: #force_inline proc "contextless" (dst: YMM, src: Mem256) -> Instruction { return with_hint(Instruction{ mnemonic = .VRCP14PS, operand_count = 2, ops = {op_ymm(dst), op_mem(src.mem, 32), {}, {}} }, 2006) } inst_vrcp14ps_zmm_zmm :: #force_inline proc "contextless" (dst: ZMM, src: ZMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VRCP14PS, operand_count = 2, ops = {op_zmm(dst), op_zmm(src), {}, {}} }, 2007) } inst_vrcp14ps_zmm_m512 :: #force_inline proc "contextless" (dst: ZMM, src: Mem512) -> Instruction { return with_hint(Instruction{ mnemonic = .VRCP14PS, operand_count = 2, ops = {op_zmm(dst), op_mem(src.mem, 64), {}, {}} }, 2007) } -emit_vrcp14ps_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append(instructions, inst_vrcp14ps_xmm_xmm(dst, src)) } -emit_vrcp14ps_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append(instructions, inst_vrcp14ps_xmm_m128(dst, src)) } -emit_vrcp14ps_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM) { append(instructions, inst_vrcp14ps_ymm_ymm(dst, src)) } -emit_vrcp14ps_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: Mem256) { append(instructions, inst_vrcp14ps_ymm_m256(dst, src)) } -emit_vrcp14ps_zmm_zmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ZMM, src: ZMM) { append(instructions, inst_vrcp14ps_zmm_zmm(dst, src)) } -emit_vrcp14ps_zmm_m512 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ZMM, src: Mem512) { append(instructions, inst_vrcp14ps_zmm_m512(dst, src)) } +emit_vrcp14ps_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append_elem(instructions, inst_vrcp14ps_xmm_xmm(dst, src)) } +emit_vrcp14ps_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append_elem(instructions, inst_vrcp14ps_xmm_m128(dst, src)) } +emit_vrcp14ps_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM) { append_elem(instructions, inst_vrcp14ps_ymm_ymm(dst, src)) } +emit_vrcp14ps_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: Mem256) { append_elem(instructions, inst_vrcp14ps_ymm_m256(dst, src)) } +emit_vrcp14ps_zmm_zmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ZMM, src: ZMM) { append_elem(instructions, inst_vrcp14ps_zmm_zmm(dst, src)) } +emit_vrcp14ps_zmm_m512 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ZMM, src: Mem512) { append_elem(instructions, inst_vrcp14ps_zmm_m512(dst, src)) } inst_vrcp14pd_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VRCP14PD, operand_count = 2, ops = {op_xmm(dst), op_xmm(src), {}, {}} }, 2008) } inst_vrcp14pd_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .VRCP14PD, operand_count = 2, ops = {op_xmm(dst), op_mem(src.mem, 16), {}, {}} }, 2008) } inst_vrcp14pd_ymm_ymm :: #force_inline proc "contextless" (dst: YMM, src: YMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VRCP14PD, operand_count = 2, ops = {op_ymm(dst), op_ymm(src), {}, {}} }, 2009) } inst_vrcp14pd_ymm_m256 :: #force_inline proc "contextless" (dst: YMM, src: Mem256) -> Instruction { return with_hint(Instruction{ mnemonic = .VRCP14PD, operand_count = 2, ops = {op_ymm(dst), op_mem(src.mem, 32), {}, {}} }, 2009) } inst_vrcp14pd_zmm_zmm :: #force_inline proc "contextless" (dst: ZMM, src: ZMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VRCP14PD, operand_count = 2, ops = {op_zmm(dst), op_zmm(src), {}, {}} }, 2010) } inst_vrcp14pd_zmm_m512 :: #force_inline proc "contextless" (dst: ZMM, src: Mem512) -> Instruction { return with_hint(Instruction{ mnemonic = .VRCP14PD, operand_count = 2, ops = {op_zmm(dst), op_mem(src.mem, 64), {}, {}} }, 2010) } -emit_vrcp14pd_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append(instructions, inst_vrcp14pd_xmm_xmm(dst, src)) } -emit_vrcp14pd_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append(instructions, inst_vrcp14pd_xmm_m128(dst, src)) } -emit_vrcp14pd_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM) { append(instructions, inst_vrcp14pd_ymm_ymm(dst, src)) } -emit_vrcp14pd_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: Mem256) { append(instructions, inst_vrcp14pd_ymm_m256(dst, src)) } -emit_vrcp14pd_zmm_zmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ZMM, src: ZMM) { append(instructions, inst_vrcp14pd_zmm_zmm(dst, src)) } -emit_vrcp14pd_zmm_m512 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ZMM, src: Mem512) { append(instructions, inst_vrcp14pd_zmm_m512(dst, src)) } +emit_vrcp14pd_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append_elem(instructions, inst_vrcp14pd_xmm_xmm(dst, src)) } +emit_vrcp14pd_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append_elem(instructions, inst_vrcp14pd_xmm_m128(dst, src)) } +emit_vrcp14pd_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM) { append_elem(instructions, inst_vrcp14pd_ymm_ymm(dst, src)) } +emit_vrcp14pd_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: Mem256) { append_elem(instructions, inst_vrcp14pd_ymm_m256(dst, src)) } +emit_vrcp14pd_zmm_zmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ZMM, src: ZMM) { append_elem(instructions, inst_vrcp14pd_zmm_zmm(dst, src)) } +emit_vrcp14pd_zmm_m512 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ZMM, src: Mem512) { append_elem(instructions, inst_vrcp14pd_zmm_m512(dst, src)) } inst_vrcp14ss_xmm_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VRCP14SS, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_xmm(src2), {}} }, 2011) } inst_vrcp14ss_xmm_xmm_m32 :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: Mem32) -> Instruction { return with_hint(Instruction{ mnemonic = .VRCP14SS, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_mem(src2.mem, 4), {}} }, 2011) } -emit_vrcp14ss_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append(instructions, inst_vrcp14ss_xmm_xmm_xmm(dst, src, src2)) } -emit_vrcp14ss_xmm_xmm_m32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem32) { append(instructions, inst_vrcp14ss_xmm_xmm_m32(dst, src, src2)) } +emit_vrcp14ss_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append_elem(instructions, inst_vrcp14ss_xmm_xmm_xmm(dst, src, src2)) } +emit_vrcp14ss_xmm_xmm_m32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem32) { append_elem(instructions, inst_vrcp14ss_xmm_xmm_m32(dst, src, src2)) } inst_vrcp14sd_xmm_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VRCP14SD, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_xmm(src2), {}} }, 2012) } inst_vrcp14sd_xmm_xmm_m64 :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: Mem64) -> Instruction { return with_hint(Instruction{ mnemonic = .VRCP14SD, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_mem(src2.mem, 8), {}} }, 2012) } -emit_vrcp14sd_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append(instructions, inst_vrcp14sd_xmm_xmm_xmm(dst, src, src2)) } -emit_vrcp14sd_xmm_xmm_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem64) { append(instructions, inst_vrcp14sd_xmm_xmm_m64(dst, src, src2)) } +emit_vrcp14sd_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append_elem(instructions, inst_vrcp14sd_xmm_xmm_xmm(dst, src, src2)) } +emit_vrcp14sd_xmm_xmm_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem64) { append_elem(instructions, inst_vrcp14sd_xmm_xmm_m64(dst, src, src2)) } inst_vscalefps_xmm_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VSCALEFPS, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_xmm(src2), {}} }, 2013) } inst_vscalefps_xmm_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .VSCALEFPS, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_mem(src2.mem, 16), {}} }, 2013) } inst_vscalefps_ymm_ymm_ymm :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: YMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VSCALEFPS, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_ymm(src2), {}} }, 2014) } inst_vscalefps_ymm_ymm_m256 :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: Mem256) -> Instruction { return with_hint(Instruction{ mnemonic = .VSCALEFPS, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_mem(src2.mem, 32), {}} }, 2014) } inst_vscalefps_zmm_zmm_zmm :: #force_inline proc "contextless" (dst: ZMM, src: ZMM, src2: ZMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VSCALEFPS, operand_count = 3, ops = {op_zmm(dst), op_zmm(src), op_zmm(src2), {}} }, 2015) } inst_vscalefps_zmm_zmm_m512 :: #force_inline proc "contextless" (dst: ZMM, src: ZMM, src2: Mem512) -> Instruction { return with_hint(Instruction{ mnemonic = .VSCALEFPS, operand_count = 3, ops = {op_zmm(dst), op_zmm(src), op_mem(src2.mem, 64), {}} }, 2015) } -emit_vscalefps_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append(instructions, inst_vscalefps_xmm_xmm_xmm(dst, src, src2)) } -emit_vscalefps_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append(instructions, inst_vscalefps_xmm_xmm_m128(dst, src, src2)) } -emit_vscalefps_ymm_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM) { append(instructions, inst_vscalefps_ymm_ymm_ymm(dst, src, src2)) } -emit_vscalefps_ymm_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256) { append(instructions, inst_vscalefps_ymm_ymm_m256(dst, src, src2)) } -emit_vscalefps_zmm_zmm_zmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ZMM, src: ZMM, src2: ZMM) { append(instructions, inst_vscalefps_zmm_zmm_zmm(dst, src, src2)) } -emit_vscalefps_zmm_zmm_m512 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ZMM, src: ZMM, src2: Mem512) { append(instructions, inst_vscalefps_zmm_zmm_m512(dst, src, src2)) } +emit_vscalefps_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append_elem(instructions, inst_vscalefps_xmm_xmm_xmm(dst, src, src2)) } +emit_vscalefps_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append_elem(instructions, inst_vscalefps_xmm_xmm_m128(dst, src, src2)) } +emit_vscalefps_ymm_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM) { append_elem(instructions, inst_vscalefps_ymm_ymm_ymm(dst, src, src2)) } +emit_vscalefps_ymm_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256) { append_elem(instructions, inst_vscalefps_ymm_ymm_m256(dst, src, src2)) } +emit_vscalefps_zmm_zmm_zmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ZMM, src: ZMM, src2: ZMM) { append_elem(instructions, inst_vscalefps_zmm_zmm_zmm(dst, src, src2)) } +emit_vscalefps_zmm_zmm_m512 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ZMM, src: ZMM, src2: Mem512) { append_elem(instructions, inst_vscalefps_zmm_zmm_m512(dst, src, src2)) } inst_vscalefpd_xmm_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VSCALEFPD, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_xmm(src2), {}} }, 2016) } inst_vscalefpd_xmm_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .VSCALEFPD, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_mem(src2.mem, 16), {}} }, 2016) } inst_vscalefpd_ymm_ymm_ymm :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: YMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VSCALEFPD, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_ymm(src2), {}} }, 2017) } inst_vscalefpd_ymm_ymm_m256 :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: Mem256) -> Instruction { return with_hint(Instruction{ mnemonic = .VSCALEFPD, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_mem(src2.mem, 32), {}} }, 2017) } inst_vscalefpd_zmm_zmm_zmm :: #force_inline proc "contextless" (dst: ZMM, src: ZMM, src2: ZMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VSCALEFPD, operand_count = 3, ops = {op_zmm(dst), op_zmm(src), op_zmm(src2), {}} }, 2018) } inst_vscalefpd_zmm_zmm_m512 :: #force_inline proc "contextless" (dst: ZMM, src: ZMM, src2: Mem512) -> Instruction { return with_hint(Instruction{ mnemonic = .VSCALEFPD, operand_count = 3, ops = {op_zmm(dst), op_zmm(src), op_mem(src2.mem, 64), {}} }, 2018) } -emit_vscalefpd_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append(instructions, inst_vscalefpd_xmm_xmm_xmm(dst, src, src2)) } -emit_vscalefpd_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append(instructions, inst_vscalefpd_xmm_xmm_m128(dst, src, src2)) } -emit_vscalefpd_ymm_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM) { append(instructions, inst_vscalefpd_ymm_ymm_ymm(dst, src, src2)) } -emit_vscalefpd_ymm_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256) { append(instructions, inst_vscalefpd_ymm_ymm_m256(dst, src, src2)) } -emit_vscalefpd_zmm_zmm_zmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ZMM, src: ZMM, src2: ZMM) { append(instructions, inst_vscalefpd_zmm_zmm_zmm(dst, src, src2)) } -emit_vscalefpd_zmm_zmm_m512 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ZMM, src: ZMM, src2: Mem512) { append(instructions, inst_vscalefpd_zmm_zmm_m512(dst, src, src2)) } +emit_vscalefpd_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append_elem(instructions, inst_vscalefpd_xmm_xmm_xmm(dst, src, src2)) } +emit_vscalefpd_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append_elem(instructions, inst_vscalefpd_xmm_xmm_m128(dst, src, src2)) } +emit_vscalefpd_ymm_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM) { append_elem(instructions, inst_vscalefpd_ymm_ymm_ymm(dst, src, src2)) } +emit_vscalefpd_ymm_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256) { append_elem(instructions, inst_vscalefpd_ymm_ymm_m256(dst, src, src2)) } +emit_vscalefpd_zmm_zmm_zmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ZMM, src: ZMM, src2: ZMM) { append_elem(instructions, inst_vscalefpd_zmm_zmm_zmm(dst, src, src2)) } +emit_vscalefpd_zmm_zmm_m512 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ZMM, src: ZMM, src2: Mem512) { append_elem(instructions, inst_vscalefpd_zmm_zmm_m512(dst, src, src2)) } inst_vscalefss_xmm_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VSCALEFSS, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_xmm(src2), {}} }, 2019) } inst_vscalefss_xmm_xmm_m32 :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: Mem32) -> Instruction { return with_hint(Instruction{ mnemonic = .VSCALEFSS, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_mem(src2.mem, 4), {}} }, 2019) } -emit_vscalefss_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append(instructions, inst_vscalefss_xmm_xmm_xmm(dst, src, src2)) } -emit_vscalefss_xmm_xmm_m32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem32) { append(instructions, inst_vscalefss_xmm_xmm_m32(dst, src, src2)) } +emit_vscalefss_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append_elem(instructions, inst_vscalefss_xmm_xmm_xmm(dst, src, src2)) } +emit_vscalefss_xmm_xmm_m32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem32) { append_elem(instructions, inst_vscalefss_xmm_xmm_m32(dst, src, src2)) } inst_vscalefsd_xmm_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VSCALEFSD, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_xmm(src2), {}} }, 2020) } inst_vscalefsd_xmm_xmm_m64 :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: Mem64) -> Instruction { return with_hint(Instruction{ mnemonic = .VSCALEFSD, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_mem(src2.mem, 8), {}} }, 2020) } -emit_vscalefsd_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append(instructions, inst_vscalefsd_xmm_xmm_xmm(dst, src, src2)) } -emit_vscalefsd_xmm_xmm_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem64) { append(instructions, inst_vscalefsd_xmm_xmm_m64(dst, src, src2)) } +emit_vscalefsd_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append_elem(instructions, inst_vscalefsd_xmm_xmm_xmm(dst, src, src2)) } +emit_vscalefsd_xmm_xmm_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem64) { append_elem(instructions, inst_vscalefsd_xmm_xmm_m64(dst, src, src2)) } inst_vgetexpps_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VGETEXPPS, operand_count = 2, ops = {op_xmm(dst), op_xmm(src), {}, {}} }, 2021) } inst_vgetexpps_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .VGETEXPPS, operand_count = 2, ops = {op_xmm(dst), op_mem(src.mem, 16), {}, {}} }, 2021) } inst_vgetexpps_ymm_ymm :: #force_inline proc "contextless" (dst: YMM, src: YMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VGETEXPPS, operand_count = 2, ops = {op_ymm(dst), op_ymm(src), {}, {}} }, 2022) } inst_vgetexpps_ymm_m256 :: #force_inline proc "contextless" (dst: YMM, src: Mem256) -> Instruction { return with_hint(Instruction{ mnemonic = .VGETEXPPS, operand_count = 2, ops = {op_ymm(dst), op_mem(src.mem, 32), {}, {}} }, 2022) } inst_vgetexpps_zmm_zmm :: #force_inline proc "contextless" (dst: ZMM, src: ZMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VGETEXPPS, operand_count = 2, ops = {op_zmm(dst), op_zmm(src), {}, {}} }, 2023) } inst_vgetexpps_zmm_m512 :: #force_inline proc "contextless" (dst: ZMM, src: Mem512) -> Instruction { return with_hint(Instruction{ mnemonic = .VGETEXPPS, operand_count = 2, ops = {op_zmm(dst), op_mem(src.mem, 64), {}, {}} }, 2023) } -emit_vgetexpps_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append(instructions, inst_vgetexpps_xmm_xmm(dst, src)) } -emit_vgetexpps_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append(instructions, inst_vgetexpps_xmm_m128(dst, src)) } -emit_vgetexpps_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM) { append(instructions, inst_vgetexpps_ymm_ymm(dst, src)) } -emit_vgetexpps_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: Mem256) { append(instructions, inst_vgetexpps_ymm_m256(dst, src)) } -emit_vgetexpps_zmm_zmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ZMM, src: ZMM) { append(instructions, inst_vgetexpps_zmm_zmm(dst, src)) } -emit_vgetexpps_zmm_m512 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ZMM, src: Mem512) { append(instructions, inst_vgetexpps_zmm_m512(dst, src)) } +emit_vgetexpps_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append_elem(instructions, inst_vgetexpps_xmm_xmm(dst, src)) } +emit_vgetexpps_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append_elem(instructions, inst_vgetexpps_xmm_m128(dst, src)) } +emit_vgetexpps_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM) { append_elem(instructions, inst_vgetexpps_ymm_ymm(dst, src)) } +emit_vgetexpps_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: Mem256) { append_elem(instructions, inst_vgetexpps_ymm_m256(dst, src)) } +emit_vgetexpps_zmm_zmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ZMM, src: ZMM) { append_elem(instructions, inst_vgetexpps_zmm_zmm(dst, src)) } +emit_vgetexpps_zmm_m512 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ZMM, src: Mem512) { append_elem(instructions, inst_vgetexpps_zmm_m512(dst, src)) } inst_vgetexppd_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VGETEXPPD, operand_count = 2, ops = {op_xmm(dst), op_xmm(src), {}, {}} }, 2024) } inst_vgetexppd_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .VGETEXPPD, operand_count = 2, ops = {op_xmm(dst), op_mem(src.mem, 16), {}, {}} }, 2024) } inst_vgetexppd_ymm_ymm :: #force_inline proc "contextless" (dst: YMM, src: YMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VGETEXPPD, operand_count = 2, ops = {op_ymm(dst), op_ymm(src), {}, {}} }, 2025) } inst_vgetexppd_ymm_m256 :: #force_inline proc "contextless" (dst: YMM, src: Mem256) -> Instruction { return with_hint(Instruction{ mnemonic = .VGETEXPPD, operand_count = 2, ops = {op_ymm(dst), op_mem(src.mem, 32), {}, {}} }, 2025) } inst_vgetexppd_zmm_zmm :: #force_inline proc "contextless" (dst: ZMM, src: ZMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VGETEXPPD, operand_count = 2, ops = {op_zmm(dst), op_zmm(src), {}, {}} }, 2026) } inst_vgetexppd_zmm_m512 :: #force_inline proc "contextless" (dst: ZMM, src: Mem512) -> Instruction { return with_hint(Instruction{ mnemonic = .VGETEXPPD, operand_count = 2, ops = {op_zmm(dst), op_mem(src.mem, 64), {}, {}} }, 2026) } -emit_vgetexppd_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append(instructions, inst_vgetexppd_xmm_xmm(dst, src)) } -emit_vgetexppd_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append(instructions, inst_vgetexppd_xmm_m128(dst, src)) } -emit_vgetexppd_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM) { append(instructions, inst_vgetexppd_ymm_ymm(dst, src)) } -emit_vgetexppd_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: Mem256) { append(instructions, inst_vgetexppd_ymm_m256(dst, src)) } -emit_vgetexppd_zmm_zmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ZMM, src: ZMM) { append(instructions, inst_vgetexppd_zmm_zmm(dst, src)) } -emit_vgetexppd_zmm_m512 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ZMM, src: Mem512) { append(instructions, inst_vgetexppd_zmm_m512(dst, src)) } +emit_vgetexppd_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append_elem(instructions, inst_vgetexppd_xmm_xmm(dst, src)) } +emit_vgetexppd_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128) { append_elem(instructions, inst_vgetexppd_xmm_m128(dst, src)) } +emit_vgetexppd_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM) { append_elem(instructions, inst_vgetexppd_ymm_ymm(dst, src)) } +emit_vgetexppd_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: Mem256) { append_elem(instructions, inst_vgetexppd_ymm_m256(dst, src)) } +emit_vgetexppd_zmm_zmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ZMM, src: ZMM) { append_elem(instructions, inst_vgetexppd_zmm_zmm(dst, src)) } +emit_vgetexppd_zmm_m512 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ZMM, src: Mem512) { append_elem(instructions, inst_vgetexppd_zmm_m512(dst, src)) } inst_vgetexpss_xmm_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VGETEXPSS, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_xmm(src2), {}} }, 2027) } inst_vgetexpss_xmm_xmm_m32 :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: Mem32) -> Instruction { return with_hint(Instruction{ mnemonic = .VGETEXPSS, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_mem(src2.mem, 4), {}} }, 2027) } -emit_vgetexpss_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append(instructions, inst_vgetexpss_xmm_xmm_xmm(dst, src, src2)) } -emit_vgetexpss_xmm_xmm_m32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem32) { append(instructions, inst_vgetexpss_xmm_xmm_m32(dst, src, src2)) } +emit_vgetexpss_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append_elem(instructions, inst_vgetexpss_xmm_xmm_xmm(dst, src, src2)) } +emit_vgetexpss_xmm_xmm_m32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem32) { append_elem(instructions, inst_vgetexpss_xmm_xmm_m32(dst, src, src2)) } inst_vgetexpsd_xmm_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VGETEXPSD, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_xmm(src2), {}} }, 2028) } inst_vgetexpsd_xmm_xmm_m64 :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: Mem64) -> Instruction { return with_hint(Instruction{ mnemonic = .VGETEXPSD, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_mem(src2.mem, 8), {}} }, 2028) } -emit_vgetexpsd_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append(instructions, inst_vgetexpsd_xmm_xmm_xmm(dst, src, src2)) } -emit_vgetexpsd_xmm_xmm_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem64) { append(instructions, inst_vgetexpsd_xmm_xmm_m64(dst, src, src2)) } +emit_vgetexpsd_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append_elem(instructions, inst_vgetexpsd_xmm_xmm_xmm(dst, src, src2)) } +emit_vgetexpsd_xmm_xmm_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem64) { append_elem(instructions, inst_vgetexpsd_xmm_xmm_m64(dst, src, src2)) } inst_vgetmantps_xmm_xmm_imm8 :: #force_inline proc "contextless" (dst: XMM, src: XMM, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .VGETMANTPS, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_imm8(imm), {}} }, 2029) } inst_vgetmantps_xmm_m128_imm8 :: #force_inline proc "contextless" (dst: XMM, src: Mem128, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .VGETMANTPS, operand_count = 3, ops = {op_xmm(dst), op_mem(src.mem, 16), op_imm8(imm), {}} }, 2029) } inst_vgetmantps_ymm_ymm_imm8 :: #force_inline proc "contextless" (dst: YMM, src: YMM, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .VGETMANTPS, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_imm8(imm), {}} }, 2030) } inst_vgetmantps_ymm_m256_imm8 :: #force_inline proc "contextless" (dst: YMM, src: Mem256, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .VGETMANTPS, operand_count = 3, ops = {op_ymm(dst), op_mem(src.mem, 32), op_imm8(imm), {}} }, 2030) } inst_vgetmantps_zmm_zmm_imm8 :: #force_inline proc "contextless" (dst: ZMM, src: ZMM, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .VGETMANTPS, operand_count = 3, ops = {op_zmm(dst), op_zmm(src), op_imm8(imm), {}} }, 2031) } inst_vgetmantps_zmm_m512_imm8 :: #force_inline proc "contextless" (dst: ZMM, src: Mem512, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .VGETMANTPS, operand_count = 3, ops = {op_zmm(dst), op_mem(src.mem, 64), op_imm8(imm), {}} }, 2031) } -emit_vgetmantps_xmm_xmm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, imm: i8) { append(instructions, inst_vgetmantps_xmm_xmm_imm8(dst, src, imm)) } -emit_vgetmantps_xmm_m128_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128, imm: i8) { append(instructions, inst_vgetmantps_xmm_m128_imm8(dst, src, imm)) } -emit_vgetmantps_ymm_ymm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, imm: i8) { append(instructions, inst_vgetmantps_ymm_ymm_imm8(dst, src, imm)) } -emit_vgetmantps_ymm_m256_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: Mem256, imm: i8) { append(instructions, inst_vgetmantps_ymm_m256_imm8(dst, src, imm)) } -emit_vgetmantps_zmm_zmm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ZMM, src: ZMM, imm: i8) { append(instructions, inst_vgetmantps_zmm_zmm_imm8(dst, src, imm)) } -emit_vgetmantps_zmm_m512_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ZMM, src: Mem512, imm: i8) { append(instructions, inst_vgetmantps_zmm_m512_imm8(dst, src, imm)) } +emit_vgetmantps_xmm_xmm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, imm: i8) { append_elem(instructions, inst_vgetmantps_xmm_xmm_imm8(dst, src, imm)) } +emit_vgetmantps_xmm_m128_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128, imm: i8) { append_elem(instructions, inst_vgetmantps_xmm_m128_imm8(dst, src, imm)) } +emit_vgetmantps_ymm_ymm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, imm: i8) { append_elem(instructions, inst_vgetmantps_ymm_ymm_imm8(dst, src, imm)) } +emit_vgetmantps_ymm_m256_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: Mem256, imm: i8) { append_elem(instructions, inst_vgetmantps_ymm_m256_imm8(dst, src, imm)) } +emit_vgetmantps_zmm_zmm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ZMM, src: ZMM, imm: i8) { append_elem(instructions, inst_vgetmantps_zmm_zmm_imm8(dst, src, imm)) } +emit_vgetmantps_zmm_m512_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ZMM, src: Mem512, imm: i8) { append_elem(instructions, inst_vgetmantps_zmm_m512_imm8(dst, src, imm)) } inst_vgetmantpd_xmm_xmm_imm8 :: #force_inline proc "contextless" (dst: XMM, src: XMM, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .VGETMANTPD, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_imm8(imm), {}} }, 2032) } inst_vgetmantpd_xmm_m128_imm8 :: #force_inline proc "contextless" (dst: XMM, src: Mem128, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .VGETMANTPD, operand_count = 3, ops = {op_xmm(dst), op_mem(src.mem, 16), op_imm8(imm), {}} }, 2032) } inst_vgetmantpd_ymm_ymm_imm8 :: #force_inline proc "contextless" (dst: YMM, src: YMM, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .VGETMANTPD, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_imm8(imm), {}} }, 2033) } inst_vgetmantpd_ymm_m256_imm8 :: #force_inline proc "contextless" (dst: YMM, src: Mem256, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .VGETMANTPD, operand_count = 3, ops = {op_ymm(dst), op_mem(src.mem, 32), op_imm8(imm), {}} }, 2033) } inst_vgetmantpd_zmm_zmm_imm8 :: #force_inline proc "contextless" (dst: ZMM, src: ZMM, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .VGETMANTPD, operand_count = 3, ops = {op_zmm(dst), op_zmm(src), op_imm8(imm), {}} }, 2034) } inst_vgetmantpd_zmm_m512_imm8 :: #force_inline proc "contextless" (dst: ZMM, src: Mem512, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .VGETMANTPD, operand_count = 3, ops = {op_zmm(dst), op_mem(src.mem, 64), op_imm8(imm), {}} }, 2034) } -emit_vgetmantpd_xmm_xmm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, imm: i8) { append(instructions, inst_vgetmantpd_xmm_xmm_imm8(dst, src, imm)) } -emit_vgetmantpd_xmm_m128_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128, imm: i8) { append(instructions, inst_vgetmantpd_xmm_m128_imm8(dst, src, imm)) } -emit_vgetmantpd_ymm_ymm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, imm: i8) { append(instructions, inst_vgetmantpd_ymm_ymm_imm8(dst, src, imm)) } -emit_vgetmantpd_ymm_m256_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: Mem256, imm: i8) { append(instructions, inst_vgetmantpd_ymm_m256_imm8(dst, src, imm)) } -emit_vgetmantpd_zmm_zmm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ZMM, src: ZMM, imm: i8) { append(instructions, inst_vgetmantpd_zmm_zmm_imm8(dst, src, imm)) } -emit_vgetmantpd_zmm_m512_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ZMM, src: Mem512, imm: i8) { append(instructions, inst_vgetmantpd_zmm_m512_imm8(dst, src, imm)) } +emit_vgetmantpd_xmm_xmm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, imm: i8) { append_elem(instructions, inst_vgetmantpd_xmm_xmm_imm8(dst, src, imm)) } +emit_vgetmantpd_xmm_m128_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem128, imm: i8) { append_elem(instructions, inst_vgetmantpd_xmm_m128_imm8(dst, src, imm)) } +emit_vgetmantpd_ymm_ymm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, imm: i8) { append_elem(instructions, inst_vgetmantpd_ymm_ymm_imm8(dst, src, imm)) } +emit_vgetmantpd_ymm_m256_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: Mem256, imm: i8) { append_elem(instructions, inst_vgetmantpd_ymm_m256_imm8(dst, src, imm)) } +emit_vgetmantpd_zmm_zmm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ZMM, src: ZMM, imm: i8) { append_elem(instructions, inst_vgetmantpd_zmm_zmm_imm8(dst, src, imm)) } +emit_vgetmantpd_zmm_m512_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ZMM, src: Mem512, imm: i8) { append_elem(instructions, inst_vgetmantpd_zmm_m512_imm8(dst, src, imm)) } inst_vgetmantss_xmm_xmm_xmm_imm8 :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: XMM, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .VGETMANTSS, operand_count = 4, ops = {op_xmm(dst), op_xmm(src), op_xmm(src2), op_imm8(imm)} }, 2035) } inst_vgetmantss_xmm_xmm_m32_imm8 :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: Mem32, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .VGETMANTSS, operand_count = 4, ops = {op_xmm(dst), op_xmm(src), op_mem(src2.mem, 4), op_imm8(imm)} }, 2035) } -emit_vgetmantss_xmm_xmm_xmm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM, imm: i8) { append(instructions, inst_vgetmantss_xmm_xmm_xmm_imm8(dst, src, src2, imm)) } -emit_vgetmantss_xmm_xmm_m32_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem32, imm: i8) { append(instructions, inst_vgetmantss_xmm_xmm_m32_imm8(dst, src, src2, imm)) } +emit_vgetmantss_xmm_xmm_xmm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM, imm: i8) { append_elem(instructions, inst_vgetmantss_xmm_xmm_xmm_imm8(dst, src, src2, imm)) } +emit_vgetmantss_xmm_xmm_m32_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem32, imm: i8) { append_elem(instructions, inst_vgetmantss_xmm_xmm_m32_imm8(dst, src, src2, imm)) } inst_vgetmantsd_xmm_xmm_xmm_imm8 :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: XMM, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .VGETMANTSD, operand_count = 4, ops = {op_xmm(dst), op_xmm(src), op_xmm(src2), op_imm8(imm)} }, 2036) } inst_vgetmantsd_xmm_xmm_m64_imm8 :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: Mem64, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .VGETMANTSD, operand_count = 4, ops = {op_xmm(dst), op_xmm(src), op_mem(src2.mem, 8), op_imm8(imm)} }, 2036) } -emit_vgetmantsd_xmm_xmm_xmm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM, imm: i8) { append(instructions, inst_vgetmantsd_xmm_xmm_xmm_imm8(dst, src, src2, imm)) } -emit_vgetmantsd_xmm_xmm_m64_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem64, imm: i8) { append(instructions, inst_vgetmantsd_xmm_xmm_m64_imm8(dst, src, src2, imm)) } +emit_vgetmantsd_xmm_xmm_xmm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM, imm: i8) { append_elem(instructions, inst_vgetmantsd_xmm_xmm_xmm_imm8(dst, src, src2, imm)) } +emit_vgetmantsd_xmm_xmm_m64_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem64, imm: i8) { append_elem(instructions, inst_vgetmantsd_xmm_xmm_m64_imm8(dst, src, src2, imm)) } inst_vfixupimmps_xmm_xmm_xmm_imm8 :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: XMM, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .VFIXUPIMMPS, operand_count = 4, ops = {op_xmm(dst), op_xmm(src), op_xmm(src2), op_imm8(imm)} }, 2037) } inst_vfixupimmps_xmm_xmm_m128_imm8 :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: Mem128, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .VFIXUPIMMPS, operand_count = 4, ops = {op_xmm(dst), op_xmm(src), op_mem(src2.mem, 16), op_imm8(imm)} }, 2037) } inst_vfixupimmps_ymm_ymm_ymm_imm8 :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: YMM, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .VFIXUPIMMPS, operand_count = 4, ops = {op_ymm(dst), op_ymm(src), op_ymm(src2), op_imm8(imm)} }, 2038) } inst_vfixupimmps_ymm_ymm_m256_imm8 :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: Mem256, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .VFIXUPIMMPS, operand_count = 4, ops = {op_ymm(dst), op_ymm(src), op_mem(src2.mem, 32), op_imm8(imm)} }, 2038) } inst_vfixupimmps_zmm_zmm_zmm_imm8 :: #force_inline proc "contextless" (dst: ZMM, src: ZMM, src2: ZMM, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .VFIXUPIMMPS, operand_count = 4, ops = {op_zmm(dst), op_zmm(src), op_zmm(src2), op_imm8(imm)} }, 2039) } inst_vfixupimmps_zmm_zmm_m512_imm8 :: #force_inline proc "contextless" (dst: ZMM, src: ZMM, src2: Mem512, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .VFIXUPIMMPS, operand_count = 4, ops = {op_zmm(dst), op_zmm(src), op_mem(src2.mem, 64), op_imm8(imm)} }, 2039) } -emit_vfixupimmps_xmm_xmm_xmm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM, imm: i8) { append(instructions, inst_vfixupimmps_xmm_xmm_xmm_imm8(dst, src, src2, imm)) } -emit_vfixupimmps_xmm_xmm_m128_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128, imm: i8) { append(instructions, inst_vfixupimmps_xmm_xmm_m128_imm8(dst, src, src2, imm)) } -emit_vfixupimmps_ymm_ymm_ymm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM, imm: i8) { append(instructions, inst_vfixupimmps_ymm_ymm_ymm_imm8(dst, src, src2, imm)) } -emit_vfixupimmps_ymm_ymm_m256_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256, imm: i8) { append(instructions, inst_vfixupimmps_ymm_ymm_m256_imm8(dst, src, src2, imm)) } -emit_vfixupimmps_zmm_zmm_zmm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ZMM, src: ZMM, src2: ZMM, imm: i8) { append(instructions, inst_vfixupimmps_zmm_zmm_zmm_imm8(dst, src, src2, imm)) } -emit_vfixupimmps_zmm_zmm_m512_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ZMM, src: ZMM, src2: Mem512, imm: i8) { append(instructions, inst_vfixupimmps_zmm_zmm_m512_imm8(dst, src, src2, imm)) } +emit_vfixupimmps_xmm_xmm_xmm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM, imm: i8) { append_elem(instructions, inst_vfixupimmps_xmm_xmm_xmm_imm8(dst, src, src2, imm)) } +emit_vfixupimmps_xmm_xmm_m128_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128, imm: i8) { append_elem(instructions, inst_vfixupimmps_xmm_xmm_m128_imm8(dst, src, src2, imm)) } +emit_vfixupimmps_ymm_ymm_ymm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM, imm: i8) { append_elem(instructions, inst_vfixupimmps_ymm_ymm_ymm_imm8(dst, src, src2, imm)) } +emit_vfixupimmps_ymm_ymm_m256_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256, imm: i8) { append_elem(instructions, inst_vfixupimmps_ymm_ymm_m256_imm8(dst, src, src2, imm)) } +emit_vfixupimmps_zmm_zmm_zmm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ZMM, src: ZMM, src2: ZMM, imm: i8) { append_elem(instructions, inst_vfixupimmps_zmm_zmm_zmm_imm8(dst, src, src2, imm)) } +emit_vfixupimmps_zmm_zmm_m512_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ZMM, src: ZMM, src2: Mem512, imm: i8) { append_elem(instructions, inst_vfixupimmps_zmm_zmm_m512_imm8(dst, src, src2, imm)) } inst_vfixupimmpd_xmm_xmm_xmm_imm8 :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: XMM, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .VFIXUPIMMPD, operand_count = 4, ops = {op_xmm(dst), op_xmm(src), op_xmm(src2), op_imm8(imm)} }, 2040) } inst_vfixupimmpd_xmm_xmm_m128_imm8 :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: Mem128, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .VFIXUPIMMPD, operand_count = 4, ops = {op_xmm(dst), op_xmm(src), op_mem(src2.mem, 16), op_imm8(imm)} }, 2040) } inst_vfixupimmpd_ymm_ymm_ymm_imm8 :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: YMM, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .VFIXUPIMMPD, operand_count = 4, ops = {op_ymm(dst), op_ymm(src), op_ymm(src2), op_imm8(imm)} }, 2041) } inst_vfixupimmpd_ymm_ymm_m256_imm8 :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: Mem256, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .VFIXUPIMMPD, operand_count = 4, ops = {op_ymm(dst), op_ymm(src), op_mem(src2.mem, 32), op_imm8(imm)} }, 2041) } inst_vfixupimmpd_zmm_zmm_zmm_imm8 :: #force_inline proc "contextless" (dst: ZMM, src: ZMM, src2: ZMM, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .VFIXUPIMMPD, operand_count = 4, ops = {op_zmm(dst), op_zmm(src), op_zmm(src2), op_imm8(imm)} }, 2042) } inst_vfixupimmpd_zmm_zmm_m512_imm8 :: #force_inline proc "contextless" (dst: ZMM, src: ZMM, src2: Mem512, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .VFIXUPIMMPD, operand_count = 4, ops = {op_zmm(dst), op_zmm(src), op_mem(src2.mem, 64), op_imm8(imm)} }, 2042) } -emit_vfixupimmpd_xmm_xmm_xmm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM, imm: i8) { append(instructions, inst_vfixupimmpd_xmm_xmm_xmm_imm8(dst, src, src2, imm)) } -emit_vfixupimmpd_xmm_xmm_m128_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128, imm: i8) { append(instructions, inst_vfixupimmpd_xmm_xmm_m128_imm8(dst, src, src2, imm)) } -emit_vfixupimmpd_ymm_ymm_ymm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM, imm: i8) { append(instructions, inst_vfixupimmpd_ymm_ymm_ymm_imm8(dst, src, src2, imm)) } -emit_vfixupimmpd_ymm_ymm_m256_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256, imm: i8) { append(instructions, inst_vfixupimmpd_ymm_ymm_m256_imm8(dst, src, src2, imm)) } -emit_vfixupimmpd_zmm_zmm_zmm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ZMM, src: ZMM, src2: ZMM, imm: i8) { append(instructions, inst_vfixupimmpd_zmm_zmm_zmm_imm8(dst, src, src2, imm)) } -emit_vfixupimmpd_zmm_zmm_m512_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ZMM, src: ZMM, src2: Mem512, imm: i8) { append(instructions, inst_vfixupimmpd_zmm_zmm_m512_imm8(dst, src, src2, imm)) } +emit_vfixupimmpd_xmm_xmm_xmm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM, imm: i8) { append_elem(instructions, inst_vfixupimmpd_xmm_xmm_xmm_imm8(dst, src, src2, imm)) } +emit_vfixupimmpd_xmm_xmm_m128_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128, imm: i8) { append_elem(instructions, inst_vfixupimmpd_xmm_xmm_m128_imm8(dst, src, src2, imm)) } +emit_vfixupimmpd_ymm_ymm_ymm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM, imm: i8) { append_elem(instructions, inst_vfixupimmpd_ymm_ymm_ymm_imm8(dst, src, src2, imm)) } +emit_vfixupimmpd_ymm_ymm_m256_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256, imm: i8) { append_elem(instructions, inst_vfixupimmpd_ymm_ymm_m256_imm8(dst, src, src2, imm)) } +emit_vfixupimmpd_zmm_zmm_zmm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ZMM, src: ZMM, src2: ZMM, imm: i8) { append_elem(instructions, inst_vfixupimmpd_zmm_zmm_zmm_imm8(dst, src, src2, imm)) } +emit_vfixupimmpd_zmm_zmm_m512_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ZMM, src: ZMM, src2: Mem512, imm: i8) { append_elem(instructions, inst_vfixupimmpd_zmm_zmm_m512_imm8(dst, src, src2, imm)) } inst_vfixupimmss_xmm_xmm_xmm_imm8 :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: XMM, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .VFIXUPIMMSS, operand_count = 4, ops = {op_xmm(dst), op_xmm(src), op_xmm(src2), op_imm8(imm)} }, 2043) } inst_vfixupimmss_xmm_xmm_m32_imm8 :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: Mem32, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .VFIXUPIMMSS, operand_count = 4, ops = {op_xmm(dst), op_xmm(src), op_mem(src2.mem, 4), op_imm8(imm)} }, 2043) } -emit_vfixupimmss_xmm_xmm_xmm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM, imm: i8) { append(instructions, inst_vfixupimmss_xmm_xmm_xmm_imm8(dst, src, src2, imm)) } -emit_vfixupimmss_xmm_xmm_m32_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem32, imm: i8) { append(instructions, inst_vfixupimmss_xmm_xmm_m32_imm8(dst, src, src2, imm)) } +emit_vfixupimmss_xmm_xmm_xmm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM, imm: i8) { append_elem(instructions, inst_vfixupimmss_xmm_xmm_xmm_imm8(dst, src, src2, imm)) } +emit_vfixupimmss_xmm_xmm_m32_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem32, imm: i8) { append_elem(instructions, inst_vfixupimmss_xmm_xmm_m32_imm8(dst, src, src2, imm)) } inst_vfixupimmsd_xmm_xmm_xmm_imm8 :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: XMM, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .VFIXUPIMMSD, operand_count = 4, ops = {op_xmm(dst), op_xmm(src), op_xmm(src2), op_imm8(imm)} }, 2044) } inst_vfixupimmsd_xmm_xmm_m64_imm8 :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: Mem64, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .VFIXUPIMMSD, operand_count = 4, ops = {op_xmm(dst), op_xmm(src), op_mem(src2.mem, 8), op_imm8(imm)} }, 2044) } -emit_vfixupimmsd_xmm_xmm_xmm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM, imm: i8) { append(instructions, inst_vfixupimmsd_xmm_xmm_xmm_imm8(dst, src, src2, imm)) } -emit_vfixupimmsd_xmm_xmm_m64_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem64, imm: i8) { append(instructions, inst_vfixupimmsd_xmm_xmm_m64_imm8(dst, src, src2, imm)) } +emit_vfixupimmsd_xmm_xmm_xmm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM, imm: i8) { append_elem(instructions, inst_vfixupimmsd_xmm_xmm_xmm_imm8(dst, src, src2, imm)) } +emit_vfixupimmsd_xmm_xmm_m64_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem64, imm: i8) { append_elem(instructions, inst_vfixupimmsd_xmm_xmm_m64_imm8(dst, src, src2, imm)) } inst_vfpclassps_k_xmm_imm8 :: #force_inline proc "contextless" (dst: KREG, src: XMM, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .VFPCLASSPS, operand_count = 3, ops = {op_kreg(dst), op_xmm(src), op_imm8(imm), {}} }, 2045) } inst_vfpclassps_k_m128_imm8 :: #force_inline proc "contextless" (dst: KREG, src: Mem128, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .VFPCLASSPS, operand_count = 3, ops = {op_kreg(dst), op_mem(src.mem, 16), op_imm8(imm), {}} }, 2045) } inst_vfpclassps_k_ymm_imm8 :: #force_inline proc "contextless" (dst: KREG, src: YMM, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .VFPCLASSPS, operand_count = 3, ops = {op_kreg(dst), op_ymm(src), op_imm8(imm), {}} }, 2046) } inst_vfpclassps_k_m256_imm8 :: #force_inline proc "contextless" (dst: KREG, src: Mem256, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .VFPCLASSPS, operand_count = 3, ops = {op_kreg(dst), op_mem(src.mem, 32), op_imm8(imm), {}} }, 2046) } inst_vfpclassps_k_zmm_imm8 :: #force_inline proc "contextless" (dst: KREG, src: ZMM, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .VFPCLASSPS, operand_count = 3, ops = {op_kreg(dst), op_zmm(src), op_imm8(imm), {}} }, 2047) } inst_vfpclassps_k_m512_imm8 :: #force_inline proc "contextless" (dst: KREG, src: Mem512, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .VFPCLASSPS, operand_count = 3, ops = {op_kreg(dst), op_mem(src.mem, 64), op_imm8(imm), {}} }, 2047) } -emit_vfpclassps_k_xmm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: XMM, imm: i8) { append(instructions, inst_vfpclassps_k_xmm_imm8(dst, src, imm)) } -emit_vfpclassps_k_m128_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: Mem128, imm: i8) { append(instructions, inst_vfpclassps_k_m128_imm8(dst, src, imm)) } -emit_vfpclassps_k_ymm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: YMM, imm: i8) { append(instructions, inst_vfpclassps_k_ymm_imm8(dst, src, imm)) } -emit_vfpclassps_k_m256_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: Mem256, imm: i8) { append(instructions, inst_vfpclassps_k_m256_imm8(dst, src, imm)) } -emit_vfpclassps_k_zmm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: ZMM, imm: i8) { append(instructions, inst_vfpclassps_k_zmm_imm8(dst, src, imm)) } -emit_vfpclassps_k_m512_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: Mem512, imm: i8) { append(instructions, inst_vfpclassps_k_m512_imm8(dst, src, imm)) } +emit_vfpclassps_k_xmm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: XMM, imm: i8) { append_elem(instructions, inst_vfpclassps_k_xmm_imm8(dst, src, imm)) } +emit_vfpclassps_k_m128_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: Mem128, imm: i8) { append_elem(instructions, inst_vfpclassps_k_m128_imm8(dst, src, imm)) } +emit_vfpclassps_k_ymm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: YMM, imm: i8) { append_elem(instructions, inst_vfpclassps_k_ymm_imm8(dst, src, imm)) } +emit_vfpclassps_k_m256_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: Mem256, imm: i8) { append_elem(instructions, inst_vfpclassps_k_m256_imm8(dst, src, imm)) } +emit_vfpclassps_k_zmm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: ZMM, imm: i8) { append_elem(instructions, inst_vfpclassps_k_zmm_imm8(dst, src, imm)) } +emit_vfpclassps_k_m512_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: Mem512, imm: i8) { append_elem(instructions, inst_vfpclassps_k_m512_imm8(dst, src, imm)) } inst_vfpclasspd_k_xmm_imm8 :: #force_inline proc "contextless" (dst: KREG, src: XMM, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .VFPCLASSPD, operand_count = 3, ops = {op_kreg(dst), op_xmm(src), op_imm8(imm), {}} }, 2048) } inst_vfpclasspd_k_m128_imm8 :: #force_inline proc "contextless" (dst: KREG, src: Mem128, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .VFPCLASSPD, operand_count = 3, ops = {op_kreg(dst), op_mem(src.mem, 16), op_imm8(imm), {}} }, 2048) } inst_vfpclasspd_k_ymm_imm8 :: #force_inline proc "contextless" (dst: KREG, src: YMM, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .VFPCLASSPD, operand_count = 3, ops = {op_kreg(dst), op_ymm(src), op_imm8(imm), {}} }, 2049) } inst_vfpclasspd_k_m256_imm8 :: #force_inline proc "contextless" (dst: KREG, src: Mem256, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .VFPCLASSPD, operand_count = 3, ops = {op_kreg(dst), op_mem(src.mem, 32), op_imm8(imm), {}} }, 2049) } inst_vfpclasspd_k_zmm_imm8 :: #force_inline proc "contextless" (dst: KREG, src: ZMM, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .VFPCLASSPD, operand_count = 3, ops = {op_kreg(dst), op_zmm(src), op_imm8(imm), {}} }, 2050) } inst_vfpclasspd_k_m512_imm8 :: #force_inline proc "contextless" (dst: KREG, src: Mem512, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .VFPCLASSPD, operand_count = 3, ops = {op_kreg(dst), op_mem(src.mem, 64), op_imm8(imm), {}} }, 2050) } -emit_vfpclasspd_k_xmm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: XMM, imm: i8) { append(instructions, inst_vfpclasspd_k_xmm_imm8(dst, src, imm)) } -emit_vfpclasspd_k_m128_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: Mem128, imm: i8) { append(instructions, inst_vfpclasspd_k_m128_imm8(dst, src, imm)) } -emit_vfpclasspd_k_ymm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: YMM, imm: i8) { append(instructions, inst_vfpclasspd_k_ymm_imm8(dst, src, imm)) } -emit_vfpclasspd_k_m256_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: Mem256, imm: i8) { append(instructions, inst_vfpclasspd_k_m256_imm8(dst, src, imm)) } -emit_vfpclasspd_k_zmm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: ZMM, imm: i8) { append(instructions, inst_vfpclasspd_k_zmm_imm8(dst, src, imm)) } -emit_vfpclasspd_k_m512_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: Mem512, imm: i8) { append(instructions, inst_vfpclasspd_k_m512_imm8(dst, src, imm)) } +emit_vfpclasspd_k_xmm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: XMM, imm: i8) { append_elem(instructions, inst_vfpclasspd_k_xmm_imm8(dst, src, imm)) } +emit_vfpclasspd_k_m128_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: Mem128, imm: i8) { append_elem(instructions, inst_vfpclasspd_k_m128_imm8(dst, src, imm)) } +emit_vfpclasspd_k_ymm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: YMM, imm: i8) { append_elem(instructions, inst_vfpclasspd_k_ymm_imm8(dst, src, imm)) } +emit_vfpclasspd_k_m256_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: Mem256, imm: i8) { append_elem(instructions, inst_vfpclasspd_k_m256_imm8(dst, src, imm)) } +emit_vfpclasspd_k_zmm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: ZMM, imm: i8) { append_elem(instructions, inst_vfpclasspd_k_zmm_imm8(dst, src, imm)) } +emit_vfpclasspd_k_m512_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: Mem512, imm: i8) { append_elem(instructions, inst_vfpclasspd_k_m512_imm8(dst, src, imm)) } inst_vfpclassss_k_xmm_imm8 :: #force_inline proc "contextless" (dst: KREG, src: XMM, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .VFPCLASSSS, operand_count = 3, ops = {op_kreg(dst), op_xmm(src), op_imm8(imm), {}} }, 2051) } inst_vfpclassss_k_m32_imm8 :: #force_inline proc "contextless" (dst: KREG, src: Mem32, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .VFPCLASSSS, operand_count = 3, ops = {op_kreg(dst), op_mem(src.mem, 4), op_imm8(imm), {}} }, 2051) } -emit_vfpclassss_k_xmm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: XMM, imm: i8) { append(instructions, inst_vfpclassss_k_xmm_imm8(dst, src, imm)) } -emit_vfpclassss_k_m32_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: Mem32, imm: i8) { append(instructions, inst_vfpclassss_k_m32_imm8(dst, src, imm)) } +emit_vfpclassss_k_xmm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: XMM, imm: i8) { append_elem(instructions, inst_vfpclassss_k_xmm_imm8(dst, src, imm)) } +emit_vfpclassss_k_m32_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: Mem32, imm: i8) { append_elem(instructions, inst_vfpclassss_k_m32_imm8(dst, src, imm)) } inst_vfpclasssd_k_xmm_imm8 :: #force_inline proc "contextless" (dst: KREG, src: XMM, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .VFPCLASSSD, operand_count = 3, ops = {op_kreg(dst), op_xmm(src), op_imm8(imm), {}} }, 2052) } inst_vfpclasssd_k_m64_imm8 :: #force_inline proc "contextless" (dst: KREG, src: Mem64, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .VFPCLASSSD, operand_count = 3, ops = {op_kreg(dst), op_mem(src.mem, 8), op_imm8(imm), {}} }, 2052) } -emit_vfpclasssd_k_xmm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: XMM, imm: i8) { append(instructions, inst_vfpclasssd_k_xmm_imm8(dst, src, imm)) } -emit_vfpclasssd_k_m64_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: Mem64, imm: i8) { append(instructions, inst_vfpclasssd_k_m64_imm8(dst, src, imm)) } +emit_vfpclasssd_k_xmm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: XMM, imm: i8) { append_elem(instructions, inst_vfpclasssd_k_xmm_imm8(dst, src, imm)) } +emit_vfpclasssd_k_m64_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: Mem64, imm: i8) { append_elem(instructions, inst_vfpclasssd_k_m64_imm8(dst, src, imm)) } inst_valignq_xmm_xmm_xmm_imm8 :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: XMM, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .VALIGNQ, operand_count = 4, ops = {op_xmm(dst), op_xmm(src), op_xmm(src2), op_imm8(imm)} }, 2053) } inst_valignq_xmm_xmm_m128_imm8 :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: Mem128, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .VALIGNQ, operand_count = 4, ops = {op_xmm(dst), op_xmm(src), op_mem(src2.mem, 16), op_imm8(imm)} }, 2053) } inst_valignq_ymm_ymm_ymm_imm8 :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: YMM, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .VALIGNQ, operand_count = 4, ops = {op_ymm(dst), op_ymm(src), op_ymm(src2), op_imm8(imm)} }, 2054) } inst_valignq_ymm_ymm_m256_imm8 :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: Mem256, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .VALIGNQ, operand_count = 4, ops = {op_ymm(dst), op_ymm(src), op_mem(src2.mem, 32), op_imm8(imm)} }, 2054) } inst_valignq_zmm_zmm_zmm_imm8 :: #force_inline proc "contextless" (dst: ZMM, src: ZMM, src2: ZMM, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .VALIGNQ, operand_count = 4, ops = {op_zmm(dst), op_zmm(src), op_zmm(src2), op_imm8(imm)} }, 2055) } inst_valignq_zmm_zmm_m512_imm8 :: #force_inline proc "contextless" (dst: ZMM, src: ZMM, src2: Mem512, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .VALIGNQ, operand_count = 4, ops = {op_zmm(dst), op_zmm(src), op_mem(src2.mem, 64), op_imm8(imm)} }, 2055) } -emit_valignq_xmm_xmm_xmm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM, imm: i8) { append(instructions, inst_valignq_xmm_xmm_xmm_imm8(dst, src, src2, imm)) } -emit_valignq_xmm_xmm_m128_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128, imm: i8) { append(instructions, inst_valignq_xmm_xmm_m128_imm8(dst, src, src2, imm)) } -emit_valignq_ymm_ymm_ymm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM, imm: i8) { append(instructions, inst_valignq_ymm_ymm_ymm_imm8(dst, src, src2, imm)) } -emit_valignq_ymm_ymm_m256_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256, imm: i8) { append(instructions, inst_valignq_ymm_ymm_m256_imm8(dst, src, src2, imm)) } -emit_valignq_zmm_zmm_zmm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ZMM, src: ZMM, src2: ZMM, imm: i8) { append(instructions, inst_valignq_zmm_zmm_zmm_imm8(dst, src, src2, imm)) } -emit_valignq_zmm_zmm_m512_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ZMM, src: ZMM, src2: Mem512, imm: i8) { append(instructions, inst_valignq_zmm_zmm_m512_imm8(dst, src, src2, imm)) } +emit_valignq_xmm_xmm_xmm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM, imm: i8) { append_elem(instructions, inst_valignq_xmm_xmm_xmm_imm8(dst, src, src2, imm)) } +emit_valignq_xmm_xmm_m128_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128, imm: i8) { append_elem(instructions, inst_valignq_xmm_xmm_m128_imm8(dst, src, src2, imm)) } +emit_valignq_ymm_ymm_ymm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM, imm: i8) { append_elem(instructions, inst_valignq_ymm_ymm_ymm_imm8(dst, src, src2, imm)) } +emit_valignq_ymm_ymm_m256_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256, imm: i8) { append_elem(instructions, inst_valignq_ymm_ymm_m256_imm8(dst, src, src2, imm)) } +emit_valignq_zmm_zmm_zmm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ZMM, src: ZMM, src2: ZMM, imm: i8) { append_elem(instructions, inst_valignq_zmm_zmm_zmm_imm8(dst, src, src2, imm)) } +emit_valignq_zmm_zmm_m512_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ZMM, src: ZMM, src2: Mem512, imm: i8) { append_elem(instructions, inst_valignq_zmm_zmm_m512_imm8(dst, src, src2, imm)) } inst_valignd_xmm_xmm_xmm_imm8 :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: XMM, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .VALIGND, operand_count = 4, ops = {op_xmm(dst), op_xmm(src), op_xmm(src2), op_imm8(imm)} }, 2056) } inst_valignd_xmm_xmm_m128_imm8 :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: Mem128, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .VALIGND, operand_count = 4, ops = {op_xmm(dst), op_xmm(src), op_mem(src2.mem, 16), op_imm8(imm)} }, 2056) } inst_valignd_ymm_ymm_ymm_imm8 :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: YMM, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .VALIGND, operand_count = 4, ops = {op_ymm(dst), op_ymm(src), op_ymm(src2), op_imm8(imm)} }, 2057) } inst_valignd_ymm_ymm_m256_imm8 :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: Mem256, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .VALIGND, operand_count = 4, ops = {op_ymm(dst), op_ymm(src), op_mem(src2.mem, 32), op_imm8(imm)} }, 2057) } inst_valignd_zmm_zmm_zmm_imm8 :: #force_inline proc "contextless" (dst: ZMM, src: ZMM, src2: ZMM, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .VALIGND, operand_count = 4, ops = {op_zmm(dst), op_zmm(src), op_zmm(src2), op_imm8(imm)} }, 2058) } inst_valignd_zmm_zmm_m512_imm8 :: #force_inline proc "contextless" (dst: ZMM, src: ZMM, src2: Mem512, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .VALIGND, operand_count = 4, ops = {op_zmm(dst), op_zmm(src), op_mem(src2.mem, 64), op_imm8(imm)} }, 2058) } -emit_valignd_xmm_xmm_xmm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM, imm: i8) { append(instructions, inst_valignd_xmm_xmm_xmm_imm8(dst, src, src2, imm)) } -emit_valignd_xmm_xmm_m128_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128, imm: i8) { append(instructions, inst_valignd_xmm_xmm_m128_imm8(dst, src, src2, imm)) } -emit_valignd_ymm_ymm_ymm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM, imm: i8) { append(instructions, inst_valignd_ymm_ymm_ymm_imm8(dst, src, src2, imm)) } -emit_valignd_ymm_ymm_m256_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256, imm: i8) { append(instructions, inst_valignd_ymm_ymm_m256_imm8(dst, src, src2, imm)) } -emit_valignd_zmm_zmm_zmm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ZMM, src: ZMM, src2: ZMM, imm: i8) { append(instructions, inst_valignd_zmm_zmm_zmm_imm8(dst, src, src2, imm)) } -emit_valignd_zmm_zmm_m512_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ZMM, src: ZMM, src2: Mem512, imm: i8) { append(instructions, inst_valignd_zmm_zmm_m512_imm8(dst, src, src2, imm)) } +emit_valignd_xmm_xmm_xmm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM, imm: i8) { append_elem(instructions, inst_valignd_xmm_xmm_xmm_imm8(dst, src, src2, imm)) } +emit_valignd_xmm_xmm_m128_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128, imm: i8) { append_elem(instructions, inst_valignd_xmm_xmm_m128_imm8(dst, src, src2, imm)) } +emit_valignd_ymm_ymm_ymm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM, imm: i8) { append_elem(instructions, inst_valignd_ymm_ymm_ymm_imm8(dst, src, src2, imm)) } +emit_valignd_ymm_ymm_m256_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256, imm: i8) { append_elem(instructions, inst_valignd_ymm_ymm_m256_imm8(dst, src, src2, imm)) } +emit_valignd_zmm_zmm_zmm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ZMM, src: ZMM, src2: ZMM, imm: i8) { append_elem(instructions, inst_valignd_zmm_zmm_zmm_imm8(dst, src, src2, imm)) } +emit_valignd_zmm_zmm_m512_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ZMM, src: ZMM, src2: Mem512, imm: i8) { append_elem(instructions, inst_valignd_zmm_zmm_m512_imm8(dst, src, src2, imm)) } inst_vdbpsadbw_xmm_xmm_xmm_imm8 :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: XMM, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .VDBPSADBW, operand_count = 4, ops = {op_xmm(dst), op_xmm(src), op_xmm(src2), op_imm8(imm)} }, 2059) } inst_vdbpsadbw_xmm_xmm_m128_imm8 :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: Mem128, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .VDBPSADBW, operand_count = 4, ops = {op_xmm(dst), op_xmm(src), op_mem(src2.mem, 16), op_imm8(imm)} }, 2059) } inst_vdbpsadbw_ymm_ymm_ymm_imm8 :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: YMM, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .VDBPSADBW, operand_count = 4, ops = {op_ymm(dst), op_ymm(src), op_ymm(src2), op_imm8(imm)} }, 2060) } inst_vdbpsadbw_ymm_ymm_m256_imm8 :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: Mem256, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .VDBPSADBW, operand_count = 4, ops = {op_ymm(dst), op_ymm(src), op_mem(src2.mem, 32), op_imm8(imm)} }, 2060) } inst_vdbpsadbw_zmm_zmm_zmm_imm8 :: #force_inline proc "contextless" (dst: ZMM, src: ZMM, src2: ZMM, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .VDBPSADBW, operand_count = 4, ops = {op_zmm(dst), op_zmm(src), op_zmm(src2), op_imm8(imm)} }, 2061) } inst_vdbpsadbw_zmm_zmm_m512_imm8 :: #force_inline proc "contextless" (dst: ZMM, src: ZMM, src2: Mem512, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .VDBPSADBW, operand_count = 4, ops = {op_zmm(dst), op_zmm(src), op_mem(src2.mem, 64), op_imm8(imm)} }, 2061) } -emit_vdbpsadbw_xmm_xmm_xmm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM, imm: i8) { append(instructions, inst_vdbpsadbw_xmm_xmm_xmm_imm8(dst, src, src2, imm)) } -emit_vdbpsadbw_xmm_xmm_m128_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128, imm: i8) { append(instructions, inst_vdbpsadbw_xmm_xmm_m128_imm8(dst, src, src2, imm)) } -emit_vdbpsadbw_ymm_ymm_ymm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM, imm: i8) { append(instructions, inst_vdbpsadbw_ymm_ymm_ymm_imm8(dst, src, src2, imm)) } -emit_vdbpsadbw_ymm_ymm_m256_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256, imm: i8) { append(instructions, inst_vdbpsadbw_ymm_ymm_m256_imm8(dst, src, src2, imm)) } -emit_vdbpsadbw_zmm_zmm_zmm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ZMM, src: ZMM, src2: ZMM, imm: i8) { append(instructions, inst_vdbpsadbw_zmm_zmm_zmm_imm8(dst, src, src2, imm)) } -emit_vdbpsadbw_zmm_zmm_m512_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ZMM, src: ZMM, src2: Mem512, imm: i8) { append(instructions, inst_vdbpsadbw_zmm_zmm_m512_imm8(dst, src, src2, imm)) } +emit_vdbpsadbw_xmm_xmm_xmm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM, imm: i8) { append_elem(instructions, inst_vdbpsadbw_xmm_xmm_xmm_imm8(dst, src, src2, imm)) } +emit_vdbpsadbw_xmm_xmm_m128_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128, imm: i8) { append_elem(instructions, inst_vdbpsadbw_xmm_xmm_m128_imm8(dst, src, src2, imm)) } +emit_vdbpsadbw_ymm_ymm_ymm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM, imm: i8) { append_elem(instructions, inst_vdbpsadbw_ymm_ymm_ymm_imm8(dst, src, src2, imm)) } +emit_vdbpsadbw_ymm_ymm_m256_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256, imm: i8) { append_elem(instructions, inst_vdbpsadbw_ymm_ymm_m256_imm8(dst, src, src2, imm)) } +emit_vdbpsadbw_zmm_zmm_zmm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ZMM, src: ZMM, src2: ZMM, imm: i8) { append_elem(instructions, inst_vdbpsadbw_zmm_zmm_zmm_imm8(dst, src, src2, imm)) } +emit_vdbpsadbw_zmm_zmm_m512_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ZMM, src: ZMM, src2: Mem512, imm: i8) { append_elem(instructions, inst_vdbpsadbw_zmm_zmm_m512_imm8(dst, src, src2, imm)) } inst_vpternlogd_xmm_xmm_xmm_imm8 :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: XMM, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .VPTERNLOGD, operand_count = 4, ops = {op_xmm(dst), op_xmm(src), op_xmm(src2), op_imm8(imm)} }, 2062) } inst_vpternlogd_xmm_xmm_m128_imm8 :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: Mem128, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .VPTERNLOGD, operand_count = 4, ops = {op_xmm(dst), op_xmm(src), op_mem(src2.mem, 16), op_imm8(imm)} }, 2062) } inst_vpternlogd_ymm_ymm_ymm_imm8 :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: YMM, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .VPTERNLOGD, operand_count = 4, ops = {op_ymm(dst), op_ymm(src), op_ymm(src2), op_imm8(imm)} }, 2063) } inst_vpternlogd_ymm_ymm_m256_imm8 :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: Mem256, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .VPTERNLOGD, operand_count = 4, ops = {op_ymm(dst), op_ymm(src), op_mem(src2.mem, 32), op_imm8(imm)} }, 2063) } inst_vpternlogd_zmm_zmm_zmm_imm8 :: #force_inline proc "contextless" (dst: ZMM, src: ZMM, src2: ZMM, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .VPTERNLOGD, operand_count = 4, ops = {op_zmm(dst), op_zmm(src), op_zmm(src2), op_imm8(imm)} }, 2064) } inst_vpternlogd_zmm_zmm_m512_imm8 :: #force_inline proc "contextless" (dst: ZMM, src: ZMM, src2: Mem512, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .VPTERNLOGD, operand_count = 4, ops = {op_zmm(dst), op_zmm(src), op_mem(src2.mem, 64), op_imm8(imm)} }, 2064) } -emit_vpternlogd_xmm_xmm_xmm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM, imm: i8) { append(instructions, inst_vpternlogd_xmm_xmm_xmm_imm8(dst, src, src2, imm)) } -emit_vpternlogd_xmm_xmm_m128_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128, imm: i8) { append(instructions, inst_vpternlogd_xmm_xmm_m128_imm8(dst, src, src2, imm)) } -emit_vpternlogd_ymm_ymm_ymm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM, imm: i8) { append(instructions, inst_vpternlogd_ymm_ymm_ymm_imm8(dst, src, src2, imm)) } -emit_vpternlogd_ymm_ymm_m256_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256, imm: i8) { append(instructions, inst_vpternlogd_ymm_ymm_m256_imm8(dst, src, src2, imm)) } -emit_vpternlogd_zmm_zmm_zmm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ZMM, src: ZMM, src2: ZMM, imm: i8) { append(instructions, inst_vpternlogd_zmm_zmm_zmm_imm8(dst, src, src2, imm)) } -emit_vpternlogd_zmm_zmm_m512_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ZMM, src: ZMM, src2: Mem512, imm: i8) { append(instructions, inst_vpternlogd_zmm_zmm_m512_imm8(dst, src, src2, imm)) } +emit_vpternlogd_xmm_xmm_xmm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM, imm: i8) { append_elem(instructions, inst_vpternlogd_xmm_xmm_xmm_imm8(dst, src, src2, imm)) } +emit_vpternlogd_xmm_xmm_m128_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128, imm: i8) { append_elem(instructions, inst_vpternlogd_xmm_xmm_m128_imm8(dst, src, src2, imm)) } +emit_vpternlogd_ymm_ymm_ymm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM, imm: i8) { append_elem(instructions, inst_vpternlogd_ymm_ymm_ymm_imm8(dst, src, src2, imm)) } +emit_vpternlogd_ymm_ymm_m256_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256, imm: i8) { append_elem(instructions, inst_vpternlogd_ymm_ymm_m256_imm8(dst, src, src2, imm)) } +emit_vpternlogd_zmm_zmm_zmm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ZMM, src: ZMM, src2: ZMM, imm: i8) { append_elem(instructions, inst_vpternlogd_zmm_zmm_zmm_imm8(dst, src, src2, imm)) } +emit_vpternlogd_zmm_zmm_m512_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ZMM, src: ZMM, src2: Mem512, imm: i8) { append_elem(instructions, inst_vpternlogd_zmm_zmm_m512_imm8(dst, src, src2, imm)) } inst_vpternlogq_xmm_xmm_xmm_imm8 :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: XMM, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .VPTERNLOGQ, operand_count = 4, ops = {op_xmm(dst), op_xmm(src), op_xmm(src2), op_imm8(imm)} }, 2065) } inst_vpternlogq_xmm_xmm_m128_imm8 :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: Mem128, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .VPTERNLOGQ, operand_count = 4, ops = {op_xmm(dst), op_xmm(src), op_mem(src2.mem, 16), op_imm8(imm)} }, 2065) } inst_vpternlogq_ymm_ymm_ymm_imm8 :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: YMM, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .VPTERNLOGQ, operand_count = 4, ops = {op_ymm(dst), op_ymm(src), op_ymm(src2), op_imm8(imm)} }, 2066) } inst_vpternlogq_ymm_ymm_m256_imm8 :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: Mem256, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .VPTERNLOGQ, operand_count = 4, ops = {op_ymm(dst), op_ymm(src), op_mem(src2.mem, 32), op_imm8(imm)} }, 2066) } inst_vpternlogq_zmm_zmm_zmm_imm8 :: #force_inline proc "contextless" (dst: ZMM, src: ZMM, src2: ZMM, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .VPTERNLOGQ, operand_count = 4, ops = {op_zmm(dst), op_zmm(src), op_zmm(src2), op_imm8(imm)} }, 2067) } inst_vpternlogq_zmm_zmm_m512_imm8 :: #force_inline proc "contextless" (dst: ZMM, src: ZMM, src2: Mem512, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .VPTERNLOGQ, operand_count = 4, ops = {op_zmm(dst), op_zmm(src), op_mem(src2.mem, 64), op_imm8(imm)} }, 2067) } -emit_vpternlogq_xmm_xmm_xmm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM, imm: i8) { append(instructions, inst_vpternlogq_xmm_xmm_xmm_imm8(dst, src, src2, imm)) } -emit_vpternlogq_xmm_xmm_m128_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128, imm: i8) { append(instructions, inst_vpternlogq_xmm_xmm_m128_imm8(dst, src, src2, imm)) } -emit_vpternlogq_ymm_ymm_ymm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM, imm: i8) { append(instructions, inst_vpternlogq_ymm_ymm_ymm_imm8(dst, src, src2, imm)) } -emit_vpternlogq_ymm_ymm_m256_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256, imm: i8) { append(instructions, inst_vpternlogq_ymm_ymm_m256_imm8(dst, src, src2, imm)) } -emit_vpternlogq_zmm_zmm_zmm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ZMM, src: ZMM, src2: ZMM, imm: i8) { append(instructions, inst_vpternlogq_zmm_zmm_zmm_imm8(dst, src, src2, imm)) } -emit_vpternlogq_zmm_zmm_m512_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ZMM, src: ZMM, src2: Mem512, imm: i8) { append(instructions, inst_vpternlogq_zmm_zmm_m512_imm8(dst, src, src2, imm)) } +emit_vpternlogq_xmm_xmm_xmm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM, imm: i8) { append_elem(instructions, inst_vpternlogq_xmm_xmm_xmm_imm8(dst, src, src2, imm)) } +emit_vpternlogq_xmm_xmm_m128_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128, imm: i8) { append_elem(instructions, inst_vpternlogq_xmm_xmm_m128_imm8(dst, src, src2, imm)) } +emit_vpternlogq_ymm_ymm_ymm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM, imm: i8) { append_elem(instructions, inst_vpternlogq_ymm_ymm_ymm_imm8(dst, src, src2, imm)) } +emit_vpternlogq_ymm_ymm_m256_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256, imm: i8) { append_elem(instructions, inst_vpternlogq_ymm_ymm_m256_imm8(dst, src, src2, imm)) } +emit_vpternlogq_zmm_zmm_zmm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ZMM, src: ZMM, src2: ZMM, imm: i8) { append_elem(instructions, inst_vpternlogq_zmm_zmm_zmm_imm8(dst, src, src2, imm)) } +emit_vpternlogq_zmm_zmm_m512_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ZMM, src: ZMM, src2: Mem512, imm: i8) { append_elem(instructions, inst_vpternlogq_zmm_zmm_m512_imm8(dst, src, src2, imm)) } inst_vpdpwssd_xmm_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPDPWSSD, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_xmm(src2), {}} }, 2068) } inst_vpdpwssd_xmm_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .VPDPWSSD, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_mem(src2.mem, 16), {}} }, 2068) } inst_vpdpwssd_ymm_ymm_ymm :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: YMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPDPWSSD, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_ymm(src2), {}} }, 2069) } inst_vpdpwssd_ymm_ymm_m256 :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: Mem256) -> Instruction { return with_hint(Instruction{ mnemonic = .VPDPWSSD, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_mem(src2.mem, 32), {}} }, 2069) } inst_vpdpwssd_zmm_zmm_zmm :: #force_inline proc "contextless" (dst: ZMM, src: ZMM, src2: ZMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPDPWSSD, operand_count = 3, ops = {op_zmm(dst), op_zmm(src), op_zmm(src2), {}} }, 2070) } inst_vpdpwssd_zmm_zmm_m512 :: #force_inline proc "contextless" (dst: ZMM, src: ZMM, src2: Mem512) -> Instruction { return with_hint(Instruction{ mnemonic = .VPDPWSSD, operand_count = 3, ops = {op_zmm(dst), op_zmm(src), op_mem(src2.mem, 64), {}} }, 2070) } -emit_vpdpwssd_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append(instructions, inst_vpdpwssd_xmm_xmm_xmm(dst, src, src2)) } -emit_vpdpwssd_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append(instructions, inst_vpdpwssd_xmm_xmm_m128(dst, src, src2)) } -emit_vpdpwssd_ymm_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM) { append(instructions, inst_vpdpwssd_ymm_ymm_ymm(dst, src, src2)) } -emit_vpdpwssd_ymm_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256) { append(instructions, inst_vpdpwssd_ymm_ymm_m256(dst, src, src2)) } -emit_vpdpwssd_zmm_zmm_zmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ZMM, src: ZMM, src2: ZMM) { append(instructions, inst_vpdpwssd_zmm_zmm_zmm(dst, src, src2)) } -emit_vpdpwssd_zmm_zmm_m512 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ZMM, src: ZMM, src2: Mem512) { append(instructions, inst_vpdpwssd_zmm_zmm_m512(dst, src, src2)) } +emit_vpdpwssd_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append_elem(instructions, inst_vpdpwssd_xmm_xmm_xmm(dst, src, src2)) } +emit_vpdpwssd_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append_elem(instructions, inst_vpdpwssd_xmm_xmm_m128(dst, src, src2)) } +emit_vpdpwssd_ymm_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM) { append_elem(instructions, inst_vpdpwssd_ymm_ymm_ymm(dst, src, src2)) } +emit_vpdpwssd_ymm_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256) { append_elem(instructions, inst_vpdpwssd_ymm_ymm_m256(dst, src, src2)) } +emit_vpdpwssd_zmm_zmm_zmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ZMM, src: ZMM, src2: ZMM) { append_elem(instructions, inst_vpdpwssd_zmm_zmm_zmm(dst, src, src2)) } +emit_vpdpwssd_zmm_zmm_m512 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ZMM, src: ZMM, src2: Mem512) { append_elem(instructions, inst_vpdpwssd_zmm_zmm_m512(dst, src, src2)) } inst_vpmultishiftqb_xmm_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPMULTISHIFTQB, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_xmm(src2), {}} }, 2071) } inst_vpmultishiftqb_xmm_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: XMM, src2: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .VPMULTISHIFTQB, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_mem(src2.mem, 16), {}} }, 2071) } inst_vpmultishiftqb_ymm_ymm_ymm :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: YMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPMULTISHIFTQB, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_ymm(src2), {}} }, 2072) } inst_vpmultishiftqb_ymm_ymm_m256 :: #force_inline proc "contextless" (dst: YMM, src: YMM, src2: Mem256) -> Instruction { return with_hint(Instruction{ mnemonic = .VPMULTISHIFTQB, operand_count = 3, ops = {op_ymm(dst), op_ymm(src), op_mem(src2.mem, 32), {}} }, 2072) } inst_vpmultishiftqb_zmm_zmm_zmm :: #force_inline proc "contextless" (dst: ZMM, src: ZMM, src2: ZMM) -> Instruction { return with_hint(Instruction{ mnemonic = .VPMULTISHIFTQB, operand_count = 3, ops = {op_zmm(dst), op_zmm(src), op_zmm(src2), {}} }, 2073) } inst_vpmultishiftqb_zmm_zmm_m512 :: #force_inline proc "contextless" (dst: ZMM, src: ZMM, src2: Mem512) -> Instruction { return with_hint(Instruction{ mnemonic = .VPMULTISHIFTQB, operand_count = 3, ops = {op_zmm(dst), op_zmm(src), op_mem(src2.mem, 64), {}} }, 2073) } -emit_vpmultishiftqb_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append(instructions, inst_vpmultishiftqb_xmm_xmm_xmm(dst, src, src2)) } -emit_vpmultishiftqb_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append(instructions, inst_vpmultishiftqb_xmm_xmm_m128(dst, src, src2)) } -emit_vpmultishiftqb_ymm_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM) { append(instructions, inst_vpmultishiftqb_ymm_ymm_ymm(dst, src, src2)) } -emit_vpmultishiftqb_ymm_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256) { append(instructions, inst_vpmultishiftqb_ymm_ymm_m256(dst, src, src2)) } -emit_vpmultishiftqb_zmm_zmm_zmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ZMM, src: ZMM, src2: ZMM) { append(instructions, inst_vpmultishiftqb_zmm_zmm_zmm(dst, src, src2)) } -emit_vpmultishiftqb_zmm_zmm_m512 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ZMM, src: ZMM, src2: Mem512) { append(instructions, inst_vpmultishiftqb_zmm_zmm_m512(dst, src, src2)) } +emit_vpmultishiftqb_xmm_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: XMM) { append_elem(instructions, inst_vpmultishiftqb_xmm_xmm_xmm(dst, src, src2)) } +emit_vpmultishiftqb_xmm_xmm_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, src2: Mem128) { append_elem(instructions, inst_vpmultishiftqb_xmm_xmm_m128(dst, src, src2)) } +emit_vpmultishiftqb_ymm_ymm_ymm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: YMM) { append_elem(instructions, inst_vpmultishiftqb_ymm_ymm_ymm(dst, src, src2)) } +emit_vpmultishiftqb_ymm_ymm_m256 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: YMM, src: YMM, src2: Mem256) { append_elem(instructions, inst_vpmultishiftqb_ymm_ymm_m256(dst, src, src2)) } +emit_vpmultishiftqb_zmm_zmm_zmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ZMM, src: ZMM, src2: ZMM) { append_elem(instructions, inst_vpmultishiftqb_zmm_zmm_zmm(dst, src, src2)) } +emit_vpmultishiftqb_zmm_zmm_m512 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ZMM, src: ZMM, src2: Mem512) { append_elem(instructions, inst_vpmultishiftqb_zmm_zmm_m512(dst, src, src2)) } inst_kaddw_k_k_k :: #force_inline proc "contextless" (dst: KREG, src: KREG, src2: KREG) -> Instruction { return with_hint(Instruction{ mnemonic = .KADDW, operand_count = 3, ops = {op_kreg(dst), op_kreg(src), op_kreg(src2), {}} }, 2074) } -emit_kaddw_k_k_k :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: KREG, src2: KREG) { append(instructions, inst_kaddw_k_k_k(dst, src, src2)) } +emit_kaddw_k_k_k :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: KREG, src2: KREG) { append_elem(instructions, inst_kaddw_k_k_k(dst, src, src2)) } inst_kaddb_k_k_k :: #force_inline proc "contextless" (dst: KREG, src: KREG, src2: KREG) -> Instruction { return with_hint(Instruction{ mnemonic = .KADDB, operand_count = 3, ops = {op_kreg(dst), op_kreg(src), op_kreg(src2), {}} }, 2075) } -emit_kaddb_k_k_k :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: KREG, src2: KREG) { append(instructions, inst_kaddb_k_k_k(dst, src, src2)) } +emit_kaddb_k_k_k :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: KREG, src2: KREG) { append_elem(instructions, inst_kaddb_k_k_k(dst, src, src2)) } inst_kaddq_k_k_k :: #force_inline proc "contextless" (dst: KREG, src: KREG, src2: KREG) -> Instruction { return with_hint(Instruction{ mnemonic = .KADDQ, operand_count = 3, ops = {op_kreg(dst), op_kreg(src), op_kreg(src2), {}} }, 2076) } -emit_kaddq_k_k_k :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: KREG, src2: KREG) { append(instructions, inst_kaddq_k_k_k(dst, src, src2)) } +emit_kaddq_k_k_k :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: KREG, src2: KREG) { append_elem(instructions, inst_kaddq_k_k_k(dst, src, src2)) } inst_kaddd_k_k_k :: #force_inline proc "contextless" (dst: KREG, src: KREG, src2: KREG) -> Instruction { return with_hint(Instruction{ mnemonic = .KADDD, operand_count = 3, ops = {op_kreg(dst), op_kreg(src), op_kreg(src2), {}} }, 2077) } -emit_kaddd_k_k_k :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: KREG, src2: KREG) { append(instructions, inst_kaddd_k_k_k(dst, src, src2)) } +emit_kaddd_k_k_k :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: KREG, src2: KREG) { append_elem(instructions, inst_kaddd_k_k_k(dst, src, src2)) } inst_kandw_k_k_k :: #force_inline proc "contextless" (dst: KREG, src: KREG, src2: KREG) -> Instruction { return with_hint(Instruction{ mnemonic = .KANDW, operand_count = 3, ops = {op_kreg(dst), op_kreg(src), op_kreg(src2), {}} }, 2078) } -emit_kandw_k_k_k :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: KREG, src2: KREG) { append(instructions, inst_kandw_k_k_k(dst, src, src2)) } +emit_kandw_k_k_k :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: KREG, src2: KREG) { append_elem(instructions, inst_kandw_k_k_k(dst, src, src2)) } inst_kandb_k_k_k :: #force_inline proc "contextless" (dst: KREG, src: KREG, src2: KREG) -> Instruction { return with_hint(Instruction{ mnemonic = .KANDB, operand_count = 3, ops = {op_kreg(dst), op_kreg(src), op_kreg(src2), {}} }, 2079) } -emit_kandb_k_k_k :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: KREG, src2: KREG) { append(instructions, inst_kandb_k_k_k(dst, src, src2)) } +emit_kandb_k_k_k :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: KREG, src2: KREG) { append_elem(instructions, inst_kandb_k_k_k(dst, src, src2)) } inst_kandq_k_k_k :: #force_inline proc "contextless" (dst: KREG, src: KREG, src2: KREG) -> Instruction { return with_hint(Instruction{ mnemonic = .KANDQ, operand_count = 3, ops = {op_kreg(dst), op_kreg(src), op_kreg(src2), {}} }, 2080) } -emit_kandq_k_k_k :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: KREG, src2: KREG) { append(instructions, inst_kandq_k_k_k(dst, src, src2)) } +emit_kandq_k_k_k :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: KREG, src2: KREG) { append_elem(instructions, inst_kandq_k_k_k(dst, src, src2)) } inst_kandd_k_k_k :: #force_inline proc "contextless" (dst: KREG, src: KREG, src2: KREG) -> Instruction { return with_hint(Instruction{ mnemonic = .KANDD, operand_count = 3, ops = {op_kreg(dst), op_kreg(src), op_kreg(src2), {}} }, 2081) } -emit_kandd_k_k_k :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: KREG, src2: KREG) { append(instructions, inst_kandd_k_k_k(dst, src, src2)) } +emit_kandd_k_k_k :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: KREG, src2: KREG) { append_elem(instructions, inst_kandd_k_k_k(dst, src, src2)) } inst_kandnw_k_k_k :: #force_inline proc "contextless" (dst: KREG, src: KREG, src2: KREG) -> Instruction { return with_hint(Instruction{ mnemonic = .KANDNW, operand_count = 3, ops = {op_kreg(dst), op_kreg(src), op_kreg(src2), {}} }, 2082) } -emit_kandnw_k_k_k :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: KREG, src2: KREG) { append(instructions, inst_kandnw_k_k_k(dst, src, src2)) } +emit_kandnw_k_k_k :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: KREG, src2: KREG) { append_elem(instructions, inst_kandnw_k_k_k(dst, src, src2)) } inst_kandnb_k_k_k :: #force_inline proc "contextless" (dst: KREG, src: KREG, src2: KREG) -> Instruction { return with_hint(Instruction{ mnemonic = .KANDNB, operand_count = 3, ops = {op_kreg(dst), op_kreg(src), op_kreg(src2), {}} }, 2083) } -emit_kandnb_k_k_k :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: KREG, src2: KREG) { append(instructions, inst_kandnb_k_k_k(dst, src, src2)) } +emit_kandnb_k_k_k :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: KREG, src2: KREG) { append_elem(instructions, inst_kandnb_k_k_k(dst, src, src2)) } inst_kandnq_k_k_k :: #force_inline proc "contextless" (dst: KREG, src: KREG, src2: KREG) -> Instruction { return with_hint(Instruction{ mnemonic = .KANDNQ, operand_count = 3, ops = {op_kreg(dst), op_kreg(src), op_kreg(src2), {}} }, 2084) } -emit_kandnq_k_k_k :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: KREG, src2: KREG) { append(instructions, inst_kandnq_k_k_k(dst, src, src2)) } +emit_kandnq_k_k_k :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: KREG, src2: KREG) { append_elem(instructions, inst_kandnq_k_k_k(dst, src, src2)) } inst_kandnd_k_k_k :: #force_inline proc "contextless" (dst: KREG, src: KREG, src2: KREG) -> Instruction { return with_hint(Instruction{ mnemonic = .KANDND, operand_count = 3, ops = {op_kreg(dst), op_kreg(src), op_kreg(src2), {}} }, 2085) } -emit_kandnd_k_k_k :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: KREG, src2: KREG) { append(instructions, inst_kandnd_k_k_k(dst, src, src2)) } +emit_kandnd_k_k_k :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: KREG, src2: KREG) { append_elem(instructions, inst_kandnd_k_k_k(dst, src, src2)) } inst_kmovw_k_k :: #force_inline proc "contextless" (dst: KREG, src: KREG) -> Instruction { return with_hint(Instruction{ mnemonic = .KMOVW, operand_count = 2, ops = {op_kreg(dst), op_kreg(src), {}, {}} }, 2086) } inst_kmovw_k_m16 :: #force_inline proc "contextless" (dst: KREG, src: Mem16) -> Instruction { return with_hint(Instruction{ mnemonic = .KMOVW, operand_count = 2, ops = {op_kreg(dst), op_mem(src.mem, 2), {}, {}} }, 2086) } inst_kmovw_m16_k :: #force_inline proc "contextless" (dst: Mem16, src: KREG) -> Instruction { return with_hint(Instruction{ mnemonic = .KMOVW, operand_count = 2, ops = {op_mem(dst.mem, 2), op_kreg(src), {}, {}} }, 2087) } inst_kmovw_k_r32 :: #force_inline proc "contextless" (dst: KREG, src: GPR32) -> Instruction { return with_hint(Instruction{ mnemonic = .KMOVW, operand_count = 2, ops = {op_kreg(dst), op_gpr32(src), {}, {}} }, 2088) } inst_kmovw_r32_k :: #force_inline proc "contextless" (dst: GPR32, src: KREG) -> Instruction { return with_hint(Instruction{ mnemonic = .KMOVW, operand_count = 2, ops = {op_gpr32(dst), op_kreg(src), {}, {}} }, 2089) } -emit_kmovw_k_k :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: KREG) { append(instructions, inst_kmovw_k_k(dst, src)) } -emit_kmovw_k_m16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: Mem16) { append(instructions, inst_kmovw_k_m16(dst, src)) } -emit_kmovw_m16_k :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem16, src: KREG) { append(instructions, inst_kmovw_m16_k(dst, src)) } -emit_kmovw_k_r32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: GPR32) { append(instructions, inst_kmovw_k_r32(dst, src)) } -emit_kmovw_r32_k :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: KREG) { append(instructions, inst_kmovw_r32_k(dst, src)) } +emit_kmovw_k_k :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: KREG) { append_elem(instructions, inst_kmovw_k_k(dst, src)) } +emit_kmovw_k_m16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: Mem16) { append_elem(instructions, inst_kmovw_k_m16(dst, src)) } +emit_kmovw_m16_k :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem16, src: KREG) { append_elem(instructions, inst_kmovw_m16_k(dst, src)) } +emit_kmovw_k_r32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: GPR32) { append_elem(instructions, inst_kmovw_k_r32(dst, src)) } +emit_kmovw_r32_k :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: KREG) { append_elem(instructions, inst_kmovw_r32_k(dst, src)) } inst_kmovb_k_k :: #force_inline proc "contextless" (dst: KREG, src: KREG) -> Instruction { return with_hint(Instruction{ mnemonic = .KMOVB, operand_count = 2, ops = {op_kreg(dst), op_kreg(src), {}, {}} }, 2090) } inst_kmovb_k_m8 :: #force_inline proc "contextless" (dst: KREG, src: Mem8) -> Instruction { return with_hint(Instruction{ mnemonic = .KMOVB, operand_count = 2, ops = {op_kreg(dst), op_mem(src.mem, 1), {}, {}} }, 2090) } inst_kmovb_m8_k :: #force_inline proc "contextless" (dst: Mem8, src: KREG) -> Instruction { return with_hint(Instruction{ mnemonic = .KMOVB, operand_count = 2, ops = {op_mem(dst.mem, 1), op_kreg(src), {}, {}} }, 2091) } inst_kmovb_k_r32 :: #force_inline proc "contextless" (dst: KREG, src: GPR32) -> Instruction { return with_hint(Instruction{ mnemonic = .KMOVB, operand_count = 2, ops = {op_kreg(dst), op_gpr32(src), {}, {}} }, 2092) } inst_kmovb_r32_k :: #force_inline proc "contextless" (dst: GPR32, src: KREG) -> Instruction { return with_hint(Instruction{ mnemonic = .KMOVB, operand_count = 2, ops = {op_gpr32(dst), op_kreg(src), {}, {}} }, 2093) } -emit_kmovb_k_k :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: KREG) { append(instructions, inst_kmovb_k_k(dst, src)) } -emit_kmovb_k_m8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: Mem8) { append(instructions, inst_kmovb_k_m8(dst, src)) } -emit_kmovb_m8_k :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem8, src: KREG) { append(instructions, inst_kmovb_m8_k(dst, src)) } -emit_kmovb_k_r32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: GPR32) { append(instructions, inst_kmovb_k_r32(dst, src)) } -emit_kmovb_r32_k :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: KREG) { append(instructions, inst_kmovb_r32_k(dst, src)) } +emit_kmovb_k_k :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: KREG) { append_elem(instructions, inst_kmovb_k_k(dst, src)) } +emit_kmovb_k_m8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: Mem8) { append_elem(instructions, inst_kmovb_k_m8(dst, src)) } +emit_kmovb_m8_k :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem8, src: KREG) { append_elem(instructions, inst_kmovb_m8_k(dst, src)) } +emit_kmovb_k_r32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: GPR32) { append_elem(instructions, inst_kmovb_k_r32(dst, src)) } +emit_kmovb_r32_k :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: KREG) { append_elem(instructions, inst_kmovb_r32_k(dst, src)) } inst_kmovq_k_k :: #force_inline proc "contextless" (dst: KREG, src: KREG) -> Instruction { return with_hint(Instruction{ mnemonic = .KMOVQ, operand_count = 2, ops = {op_kreg(dst), op_kreg(src), {}, {}} }, 2094) } inst_kmovq_k_m64 :: #force_inline proc "contextless" (dst: KREG, src: Mem64) -> Instruction { return with_hint(Instruction{ mnemonic = .KMOVQ, operand_count = 2, ops = {op_kreg(dst), op_mem(src.mem, 8), {}, {}} }, 2094) } inst_kmovq_m64_k :: #force_inline proc "contextless" (dst: Mem64, src: KREG) -> Instruction { return with_hint(Instruction{ mnemonic = .KMOVQ, operand_count = 2, ops = {op_mem(dst.mem, 8), op_kreg(src), {}, {}} }, 2095) } inst_kmovq_k_r64 :: #force_inline proc "contextless" (dst: KREG, src: GPR64) -> Instruction { return with_hint(Instruction{ mnemonic = .KMOVQ, operand_count = 2, ops = {op_kreg(dst), op_gpr64(src), {}, {}} }, 2096) } inst_kmovq_r64_k :: #force_inline proc "contextless" (dst: GPR64, src: KREG) -> Instruction { return with_hint(Instruction{ mnemonic = .KMOVQ, operand_count = 2, ops = {op_gpr64(dst), op_kreg(src), {}, {}} }, 2097) } -emit_kmovq_k_k :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: KREG) { append(instructions, inst_kmovq_k_k(dst, src)) } -emit_kmovq_k_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: Mem64) { append(instructions, inst_kmovq_k_m64(dst, src)) } -emit_kmovq_m64_k :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem64, src: KREG) { append(instructions, inst_kmovq_m64_k(dst, src)) } -emit_kmovq_k_r64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: GPR64) { append(instructions, inst_kmovq_k_r64(dst, src)) } -emit_kmovq_r64_k :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: KREG) { append(instructions, inst_kmovq_r64_k(dst, src)) } +emit_kmovq_k_k :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: KREG) { append_elem(instructions, inst_kmovq_k_k(dst, src)) } +emit_kmovq_k_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: Mem64) { append_elem(instructions, inst_kmovq_k_m64(dst, src)) } +emit_kmovq_m64_k :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem64, src: KREG) { append_elem(instructions, inst_kmovq_m64_k(dst, src)) } +emit_kmovq_k_r64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: GPR64) { append_elem(instructions, inst_kmovq_k_r64(dst, src)) } +emit_kmovq_r64_k :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: KREG) { append_elem(instructions, inst_kmovq_r64_k(dst, src)) } inst_kmovd_k_k :: #force_inline proc "contextless" (dst: KREG, src: KREG) -> Instruction { return with_hint(Instruction{ mnemonic = .KMOVD, operand_count = 2, ops = {op_kreg(dst), op_kreg(src), {}, {}} }, 2098) } inst_kmovd_k_m32 :: #force_inline proc "contextless" (dst: KREG, src: Mem32) -> Instruction { return with_hint(Instruction{ mnemonic = .KMOVD, operand_count = 2, ops = {op_kreg(dst), op_mem(src.mem, 4), {}, {}} }, 2098) } inst_kmovd_m32_k :: #force_inline proc "contextless" (dst: Mem32, src: KREG) -> Instruction { return with_hint(Instruction{ mnemonic = .KMOVD, operand_count = 2, ops = {op_mem(dst.mem, 4), op_kreg(src), {}, {}} }, 2099) } inst_kmovd_k_r32 :: #force_inline proc "contextless" (dst: KREG, src: GPR32) -> Instruction { return with_hint(Instruction{ mnemonic = .KMOVD, operand_count = 2, ops = {op_kreg(dst), op_gpr32(src), {}, {}} }, 2100) } inst_kmovd_r32_k :: #force_inline proc "contextless" (dst: GPR32, src: KREG) -> Instruction { return with_hint(Instruction{ mnemonic = .KMOVD, operand_count = 2, ops = {op_gpr32(dst), op_kreg(src), {}, {}} }, 2101) } -emit_kmovd_k_k :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: KREG) { append(instructions, inst_kmovd_k_k(dst, src)) } -emit_kmovd_k_m32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: Mem32) { append(instructions, inst_kmovd_k_m32(dst, src)) } -emit_kmovd_m32_k :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem32, src: KREG) { append(instructions, inst_kmovd_m32_k(dst, src)) } -emit_kmovd_k_r32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: GPR32) { append(instructions, inst_kmovd_k_r32(dst, src)) } -emit_kmovd_r32_k :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: KREG) { append(instructions, inst_kmovd_r32_k(dst, src)) } +emit_kmovd_k_k :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: KREG) { append_elem(instructions, inst_kmovd_k_k(dst, src)) } +emit_kmovd_k_m32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: Mem32) { append_elem(instructions, inst_kmovd_k_m32(dst, src)) } +emit_kmovd_m32_k :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem32, src: KREG) { append_elem(instructions, inst_kmovd_m32_k(dst, src)) } +emit_kmovd_k_r32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: GPR32) { append_elem(instructions, inst_kmovd_k_r32(dst, src)) } +emit_kmovd_r32_k :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: KREG) { append_elem(instructions, inst_kmovd_r32_k(dst, src)) } inst_knotw_k_k :: #force_inline proc "contextless" (dst: KREG, src: KREG) -> Instruction { return with_hint(Instruction{ mnemonic = .KNOTW, operand_count = 2, ops = {op_kreg(dst), op_kreg(src), {}, {}} }, 2102) } -emit_knotw_k_k :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: KREG) { append(instructions, inst_knotw_k_k(dst, src)) } +emit_knotw_k_k :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: KREG) { append_elem(instructions, inst_knotw_k_k(dst, src)) } inst_knotb_k_k :: #force_inline proc "contextless" (dst: KREG, src: KREG) -> Instruction { return with_hint(Instruction{ mnemonic = .KNOTB, operand_count = 2, ops = {op_kreg(dst), op_kreg(src), {}, {}} }, 2103) } -emit_knotb_k_k :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: KREG) { append(instructions, inst_knotb_k_k(dst, src)) } +emit_knotb_k_k :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: KREG) { append_elem(instructions, inst_knotb_k_k(dst, src)) } inst_knotq_k_k :: #force_inline proc "contextless" (dst: KREG, src: KREG) -> Instruction { return with_hint(Instruction{ mnemonic = .KNOTQ, operand_count = 2, ops = {op_kreg(dst), op_kreg(src), {}, {}} }, 2104) } -emit_knotq_k_k :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: KREG) { append(instructions, inst_knotq_k_k(dst, src)) } +emit_knotq_k_k :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: KREG) { append_elem(instructions, inst_knotq_k_k(dst, src)) } inst_knotd_k_k :: #force_inline proc "contextless" (dst: KREG, src: KREG) -> Instruction { return with_hint(Instruction{ mnemonic = .KNOTD, operand_count = 2, ops = {op_kreg(dst), op_kreg(src), {}, {}} }, 2105) } -emit_knotd_k_k :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: KREG) { append(instructions, inst_knotd_k_k(dst, src)) } +emit_knotd_k_k :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: KREG) { append_elem(instructions, inst_knotd_k_k(dst, src)) } inst_korw_k_k_k :: #force_inline proc "contextless" (dst: KREG, src: KREG, src2: KREG) -> Instruction { return with_hint(Instruction{ mnemonic = .KORW, operand_count = 3, ops = {op_kreg(dst), op_kreg(src), op_kreg(src2), {}} }, 2106) } -emit_korw_k_k_k :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: KREG, src2: KREG) { append(instructions, inst_korw_k_k_k(dst, src, src2)) } +emit_korw_k_k_k :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: KREG, src2: KREG) { append_elem(instructions, inst_korw_k_k_k(dst, src, src2)) } inst_korb_k_k_k :: #force_inline proc "contextless" (dst: KREG, src: KREG, src2: KREG) -> Instruction { return with_hint(Instruction{ mnemonic = .KORB, operand_count = 3, ops = {op_kreg(dst), op_kreg(src), op_kreg(src2), {}} }, 2107) } -emit_korb_k_k_k :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: KREG, src2: KREG) { append(instructions, inst_korb_k_k_k(dst, src, src2)) } +emit_korb_k_k_k :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: KREG, src2: KREG) { append_elem(instructions, inst_korb_k_k_k(dst, src, src2)) } inst_korq_k_k_k :: #force_inline proc "contextless" (dst: KREG, src: KREG, src2: KREG) -> Instruction { return with_hint(Instruction{ mnemonic = .KORQ, operand_count = 3, ops = {op_kreg(dst), op_kreg(src), op_kreg(src2), {}} }, 2108) } -emit_korq_k_k_k :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: KREG, src2: KREG) { append(instructions, inst_korq_k_k_k(dst, src, src2)) } +emit_korq_k_k_k :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: KREG, src2: KREG) { append_elem(instructions, inst_korq_k_k_k(dst, src, src2)) } inst_kord_k_k_k :: #force_inline proc "contextless" (dst: KREG, src: KREG, src2: KREG) -> Instruction { return with_hint(Instruction{ mnemonic = .KORD, operand_count = 3, ops = {op_kreg(dst), op_kreg(src), op_kreg(src2), {}} }, 2109) } -emit_kord_k_k_k :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: KREG, src2: KREG) { append(instructions, inst_kord_k_k_k(dst, src, src2)) } +emit_kord_k_k_k :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: KREG, src2: KREG) { append_elem(instructions, inst_kord_k_k_k(dst, src, src2)) } inst_kortestw_k_k :: #force_inline proc "contextless" (dst: KREG, src: KREG) -> Instruction { return with_hint(Instruction{ mnemonic = .KORTESTW, operand_count = 2, ops = {op_kreg(dst), op_kreg(src), {}, {}} }, 2110) } -emit_kortestw_k_k :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: KREG) { append(instructions, inst_kortestw_k_k(dst, src)) } +emit_kortestw_k_k :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: KREG) { append_elem(instructions, inst_kortestw_k_k(dst, src)) } inst_kortestb_k_k :: #force_inline proc "contextless" (dst: KREG, src: KREG) -> Instruction { return with_hint(Instruction{ mnemonic = .KORTESTB, operand_count = 2, ops = {op_kreg(dst), op_kreg(src), {}, {}} }, 2111) } -emit_kortestb_k_k :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: KREG) { append(instructions, inst_kortestb_k_k(dst, src)) } +emit_kortestb_k_k :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: KREG) { append_elem(instructions, inst_kortestb_k_k(dst, src)) } inst_kortestq_k_k :: #force_inline proc "contextless" (dst: KREG, src: KREG) -> Instruction { return with_hint(Instruction{ mnemonic = .KORTESTQ, operand_count = 2, ops = {op_kreg(dst), op_kreg(src), {}, {}} }, 2112) } -emit_kortestq_k_k :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: KREG) { append(instructions, inst_kortestq_k_k(dst, src)) } +emit_kortestq_k_k :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: KREG) { append_elem(instructions, inst_kortestq_k_k(dst, src)) } inst_kortestd_k_k :: #force_inline proc "contextless" (dst: KREG, src: KREG) -> Instruction { return with_hint(Instruction{ mnemonic = .KORTESTD, operand_count = 2, ops = {op_kreg(dst), op_kreg(src), {}, {}} }, 2113) } -emit_kortestd_k_k :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: KREG) { append(instructions, inst_kortestd_k_k(dst, src)) } +emit_kortestd_k_k :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: KREG) { append_elem(instructions, inst_kortestd_k_k(dst, src)) } inst_kshiftlw_k_k_imm8 :: #force_inline proc "contextless" (dst: KREG, src: KREG, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .KSHIFTLW, operand_count = 3, ops = {op_kreg(dst), op_kreg(src), op_imm8(imm), {}} }, 2114) } -emit_kshiftlw_k_k_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: KREG, imm: i8) { append(instructions, inst_kshiftlw_k_k_imm8(dst, src, imm)) } +emit_kshiftlw_k_k_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: KREG, imm: i8) { append_elem(instructions, inst_kshiftlw_k_k_imm8(dst, src, imm)) } inst_kshiftlb_k_k_imm8 :: #force_inline proc "contextless" (dst: KREG, src: KREG, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .KSHIFTLB, operand_count = 3, ops = {op_kreg(dst), op_kreg(src), op_imm8(imm), {}} }, 2115) } -emit_kshiftlb_k_k_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: KREG, imm: i8) { append(instructions, inst_kshiftlb_k_k_imm8(dst, src, imm)) } +emit_kshiftlb_k_k_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: KREG, imm: i8) { append_elem(instructions, inst_kshiftlb_k_k_imm8(dst, src, imm)) } inst_kshiftlq_k_k_imm8 :: #force_inline proc "contextless" (dst: KREG, src: KREG, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .KSHIFTLQ, operand_count = 3, ops = {op_kreg(dst), op_kreg(src), op_imm8(imm), {}} }, 2116) } -emit_kshiftlq_k_k_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: KREG, imm: i8) { append(instructions, inst_kshiftlq_k_k_imm8(dst, src, imm)) } +emit_kshiftlq_k_k_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: KREG, imm: i8) { append_elem(instructions, inst_kshiftlq_k_k_imm8(dst, src, imm)) } inst_kshiftld_k_k_imm8 :: #force_inline proc "contextless" (dst: KREG, src: KREG, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .KSHIFTLD, operand_count = 3, ops = {op_kreg(dst), op_kreg(src), op_imm8(imm), {}} }, 2117) } -emit_kshiftld_k_k_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: KREG, imm: i8) { append(instructions, inst_kshiftld_k_k_imm8(dst, src, imm)) } +emit_kshiftld_k_k_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: KREG, imm: i8) { append_elem(instructions, inst_kshiftld_k_k_imm8(dst, src, imm)) } inst_kshiftrw_k_k_imm8 :: #force_inline proc "contextless" (dst: KREG, src: KREG, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .KSHIFTRW, operand_count = 3, ops = {op_kreg(dst), op_kreg(src), op_imm8(imm), {}} }, 2118) } -emit_kshiftrw_k_k_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: KREG, imm: i8) { append(instructions, inst_kshiftrw_k_k_imm8(dst, src, imm)) } +emit_kshiftrw_k_k_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: KREG, imm: i8) { append_elem(instructions, inst_kshiftrw_k_k_imm8(dst, src, imm)) } inst_kshiftrb_k_k_imm8 :: #force_inline proc "contextless" (dst: KREG, src: KREG, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .KSHIFTRB, operand_count = 3, ops = {op_kreg(dst), op_kreg(src), op_imm8(imm), {}} }, 2119) } -emit_kshiftrb_k_k_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: KREG, imm: i8) { append(instructions, inst_kshiftrb_k_k_imm8(dst, src, imm)) } +emit_kshiftrb_k_k_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: KREG, imm: i8) { append_elem(instructions, inst_kshiftrb_k_k_imm8(dst, src, imm)) } inst_kshiftrq_k_k_imm8 :: #force_inline proc "contextless" (dst: KREG, src: KREG, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .KSHIFTRQ, operand_count = 3, ops = {op_kreg(dst), op_kreg(src), op_imm8(imm), {}} }, 2120) } -emit_kshiftrq_k_k_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: KREG, imm: i8) { append(instructions, inst_kshiftrq_k_k_imm8(dst, src, imm)) } +emit_kshiftrq_k_k_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: KREG, imm: i8) { append_elem(instructions, inst_kshiftrq_k_k_imm8(dst, src, imm)) } inst_kshiftrd_k_k_imm8 :: #force_inline proc "contextless" (dst: KREG, src: KREG, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .KSHIFTRD, operand_count = 3, ops = {op_kreg(dst), op_kreg(src), op_imm8(imm), {}} }, 2121) } -emit_kshiftrd_k_k_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: KREG, imm: i8) { append(instructions, inst_kshiftrd_k_k_imm8(dst, src, imm)) } +emit_kshiftrd_k_k_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: KREG, imm: i8) { append_elem(instructions, inst_kshiftrd_k_k_imm8(dst, src, imm)) } inst_ktestw_k_k :: #force_inline proc "contextless" (dst: KREG, src: KREG) -> Instruction { return with_hint(Instruction{ mnemonic = .KTESTW, operand_count = 2, ops = {op_kreg(dst), op_kreg(src), {}, {}} }, 2122) } -emit_ktestw_k_k :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: KREG) { append(instructions, inst_ktestw_k_k(dst, src)) } +emit_ktestw_k_k :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: KREG) { append_elem(instructions, inst_ktestw_k_k(dst, src)) } inst_ktestb_k_k :: #force_inline proc "contextless" (dst: KREG, src: KREG) -> Instruction { return with_hint(Instruction{ mnemonic = .KTESTB, operand_count = 2, ops = {op_kreg(dst), op_kreg(src), {}, {}} }, 2123) } -emit_ktestb_k_k :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: KREG) { append(instructions, inst_ktestb_k_k(dst, src)) } +emit_ktestb_k_k :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: KREG) { append_elem(instructions, inst_ktestb_k_k(dst, src)) } inst_ktestq_k_k :: #force_inline proc "contextless" (dst: KREG, src: KREG) -> Instruction { return with_hint(Instruction{ mnemonic = .KTESTQ, operand_count = 2, ops = {op_kreg(dst), op_kreg(src), {}, {}} }, 2124) } -emit_ktestq_k_k :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: KREG) { append(instructions, inst_ktestq_k_k(dst, src)) } +emit_ktestq_k_k :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: KREG) { append_elem(instructions, inst_ktestq_k_k(dst, src)) } inst_ktestd_k_k :: #force_inline proc "contextless" (dst: KREG, src: KREG) -> Instruction { return with_hint(Instruction{ mnemonic = .KTESTD, operand_count = 2, ops = {op_kreg(dst), op_kreg(src), {}, {}} }, 2125) } -emit_ktestd_k_k :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: KREG) { append(instructions, inst_ktestd_k_k(dst, src)) } +emit_ktestd_k_k :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: KREG) { append_elem(instructions, inst_ktestd_k_k(dst, src)) } inst_kunpckbw_k_k_k :: #force_inline proc "contextless" (dst: KREG, src: KREG, src2: KREG) -> Instruction { return with_hint(Instruction{ mnemonic = .KUNPCKBW, operand_count = 3, ops = {op_kreg(dst), op_kreg(src), op_kreg(src2), {}} }, 2126) } -emit_kunpckbw_k_k_k :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: KREG, src2: KREG) { append(instructions, inst_kunpckbw_k_k_k(dst, src, src2)) } +emit_kunpckbw_k_k_k :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: KREG, src2: KREG) { append_elem(instructions, inst_kunpckbw_k_k_k(dst, src, src2)) } inst_kunpckwd_k_k_k :: #force_inline proc "contextless" (dst: KREG, src: KREG, src2: KREG) -> Instruction { return with_hint(Instruction{ mnemonic = .KUNPCKWD, operand_count = 3, ops = {op_kreg(dst), op_kreg(src), op_kreg(src2), {}} }, 2127) } -emit_kunpckwd_k_k_k :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: KREG, src2: KREG) { append(instructions, inst_kunpckwd_k_k_k(dst, src, src2)) } +emit_kunpckwd_k_k_k :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: KREG, src2: KREG) { append_elem(instructions, inst_kunpckwd_k_k_k(dst, src, src2)) } inst_kunpckdq_k_k_k :: #force_inline proc "contextless" (dst: KREG, src: KREG, src2: KREG) -> Instruction { return with_hint(Instruction{ mnemonic = .KUNPCKDQ, operand_count = 3, ops = {op_kreg(dst), op_kreg(src), op_kreg(src2), {}} }, 2128) } -emit_kunpckdq_k_k_k :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: KREG, src2: KREG) { append(instructions, inst_kunpckdq_k_k_k(dst, src, src2)) } +emit_kunpckdq_k_k_k :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: KREG, src2: KREG) { append_elem(instructions, inst_kunpckdq_k_k_k(dst, src, src2)) } inst_kxnorw_k_k_k :: #force_inline proc "contextless" (dst: KREG, src: KREG, src2: KREG) -> Instruction { return with_hint(Instruction{ mnemonic = .KXNORW, operand_count = 3, ops = {op_kreg(dst), op_kreg(src), op_kreg(src2), {}} }, 2129) } -emit_kxnorw_k_k_k :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: KREG, src2: KREG) { append(instructions, inst_kxnorw_k_k_k(dst, src, src2)) } +emit_kxnorw_k_k_k :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: KREG, src2: KREG) { append_elem(instructions, inst_kxnorw_k_k_k(dst, src, src2)) } inst_kxnorb_k_k_k :: #force_inline proc "contextless" (dst: KREG, src: KREG, src2: KREG) -> Instruction { return with_hint(Instruction{ mnemonic = .KXNORB, operand_count = 3, ops = {op_kreg(dst), op_kreg(src), op_kreg(src2), {}} }, 2130) } -emit_kxnorb_k_k_k :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: KREG, src2: KREG) { append(instructions, inst_kxnorb_k_k_k(dst, src, src2)) } +emit_kxnorb_k_k_k :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: KREG, src2: KREG) { append_elem(instructions, inst_kxnorb_k_k_k(dst, src, src2)) } inst_kxnorq_k_k_k :: #force_inline proc "contextless" (dst: KREG, src: KREG, src2: KREG) -> Instruction { return with_hint(Instruction{ mnemonic = .KXNORQ, operand_count = 3, ops = {op_kreg(dst), op_kreg(src), op_kreg(src2), {}} }, 2131) } -emit_kxnorq_k_k_k :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: KREG, src2: KREG) { append(instructions, inst_kxnorq_k_k_k(dst, src, src2)) } +emit_kxnorq_k_k_k :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: KREG, src2: KREG) { append_elem(instructions, inst_kxnorq_k_k_k(dst, src, src2)) } inst_kxnord_k_k_k :: #force_inline proc "contextless" (dst: KREG, src: KREG, src2: KREG) -> Instruction { return with_hint(Instruction{ mnemonic = .KXNORD, operand_count = 3, ops = {op_kreg(dst), op_kreg(src), op_kreg(src2), {}} }, 2132) } -emit_kxnord_k_k_k :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: KREG, src2: KREG) { append(instructions, inst_kxnord_k_k_k(dst, src, src2)) } +emit_kxnord_k_k_k :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: KREG, src2: KREG) { append_elem(instructions, inst_kxnord_k_k_k(dst, src, src2)) } inst_kxorw_k_k_k :: #force_inline proc "contextless" (dst: KREG, src: KREG, src2: KREG) -> Instruction { return with_hint(Instruction{ mnemonic = .KXORW, operand_count = 3, ops = {op_kreg(dst), op_kreg(src), op_kreg(src2), {}} }, 2133) } -emit_kxorw_k_k_k :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: KREG, src2: KREG) { append(instructions, inst_kxorw_k_k_k(dst, src, src2)) } +emit_kxorw_k_k_k :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: KREG, src2: KREG) { append_elem(instructions, inst_kxorw_k_k_k(dst, src, src2)) } inst_kxorb_k_k_k :: #force_inline proc "contextless" (dst: KREG, src: KREG, src2: KREG) -> Instruction { return with_hint(Instruction{ mnemonic = .KXORB, operand_count = 3, ops = {op_kreg(dst), op_kreg(src), op_kreg(src2), {}} }, 2134) } -emit_kxorb_k_k_k :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: KREG, src2: KREG) { append(instructions, inst_kxorb_k_k_k(dst, src, src2)) } +emit_kxorb_k_k_k :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: KREG, src2: KREG) { append_elem(instructions, inst_kxorb_k_k_k(dst, src, src2)) } inst_kxorq_k_k_k :: #force_inline proc "contextless" (dst: KREG, src: KREG, src2: KREG) -> Instruction { return with_hint(Instruction{ mnemonic = .KXORQ, operand_count = 3, ops = {op_kreg(dst), op_kreg(src), op_kreg(src2), {}} }, 2135) } -emit_kxorq_k_k_k :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: KREG, src2: KREG) { append(instructions, inst_kxorq_k_k_k(dst, src, src2)) } +emit_kxorq_k_k_k :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: KREG, src2: KREG) { append_elem(instructions, inst_kxorq_k_k_k(dst, src, src2)) } inst_kxord_k_k_k :: #force_inline proc "contextless" (dst: KREG, src: KREG, src2: KREG) -> Instruction { return with_hint(Instruction{ mnemonic = .KXORD, operand_count = 3, ops = {op_kreg(dst), op_kreg(src), op_kreg(src2), {}} }, 2136) } -emit_kxord_k_k_k :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: KREG, src2: KREG) { append(instructions, inst_kxord_k_k_k(dst, src, src2)) } +emit_kxord_k_k_k :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: KREG, src: KREG, src2: KREG) { append_elem(instructions, inst_kxord_k_k_k(dst, src, src2)) } inst_fadd_m32 :: #force_inline proc "contextless" (dst: Mem32) -> Instruction { return with_hint(Instruction{ mnemonic = .FADD, operand_count = 1, ops = {op_mem(dst.mem, 4), {}, {}, {}} }, 2137) } inst_fadd_m64 :: #force_inline proc "contextless" (dst: Mem64) -> Instruction { return with_hint(Instruction{ mnemonic = .FADD, operand_count = 1, ops = {op_mem(dst.mem, 8), {}, {}, {}} }, 2138) } inst_fadd_st :: #force_inline proc "contextless" (dst: ST) -> Instruction { return with_hint(Instruction{ mnemonic = .FADD, operand_count = 1, ops = {op_st(dst), {}, {}, {}} }, 2139) } -emit_fadd_m32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem32) { append(instructions, inst_fadd_m32(dst)) } -emit_fadd_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem64) { append(instructions, inst_fadd_m64(dst)) } -emit_fadd_st :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ST) { append(instructions, inst_fadd_st(dst)) } +emit_fadd_m32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem32) { append_elem(instructions, inst_fadd_m32(dst)) } +emit_fadd_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem64) { append_elem(instructions, inst_fadd_m64(dst)) } +emit_fadd_st :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ST) { append_elem(instructions, inst_fadd_st(dst)) } inst_faddp_st :: #force_inline proc "contextless" (dst: ST) -> Instruction { return with_hint(Instruction{ mnemonic = .FADDP, operand_count = 1, ops = {op_st(dst), {}, {}, {}} }, 2141) } inst_faddp_none :: #force_inline proc "contextless" () -> Instruction { return with_hint(Instruction{ mnemonic = .FADDP, operand_count = 0, ops = {{}, {}, {}, {}} }, 2142) } -emit_faddp_st :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ST) { append(instructions, inst_faddp_st(dst)) } -emit_faddp_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_faddp_none()) } +emit_faddp_st :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ST) { append_elem(instructions, inst_faddp_st(dst)) } +emit_faddp_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_faddp_none()) } inst_fiadd_m16 :: #force_inline proc "contextless" (dst: Mem16) -> Instruction { return with_hint(Instruction{ mnemonic = .FIADD, operand_count = 1, ops = {op_mem(dst.mem, 2), {}, {}, {}} }, 2143) } inst_fiadd_m32 :: #force_inline proc "contextless" (dst: Mem32) -> Instruction { return with_hint(Instruction{ mnemonic = .FIADD, operand_count = 1, ops = {op_mem(dst.mem, 4), {}, {}, {}} }, 2144) } -emit_fiadd_m16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem16) { append(instructions, inst_fiadd_m16(dst)) } -emit_fiadd_m32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem32) { append(instructions, inst_fiadd_m32(dst)) } +emit_fiadd_m16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem16) { append_elem(instructions, inst_fiadd_m16(dst)) } +emit_fiadd_m32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem32) { append_elem(instructions, inst_fiadd_m32(dst)) } inst_fsub_m32 :: #force_inline proc "contextless" (dst: Mem32) -> Instruction { return with_hint(Instruction{ mnemonic = .FSUB, operand_count = 1, ops = {op_mem(dst.mem, 4), {}, {}, {}} }, 2145) } inst_fsub_m64 :: #force_inline proc "contextless" (dst: Mem64) -> Instruction { return with_hint(Instruction{ mnemonic = .FSUB, operand_count = 1, ops = {op_mem(dst.mem, 8), {}, {}, {}} }, 2146) } inst_fsub_st :: #force_inline proc "contextless" (dst: ST) -> Instruction { return with_hint(Instruction{ mnemonic = .FSUB, operand_count = 1, ops = {op_st(dst), {}, {}, {}} }, 2147) } -emit_fsub_m32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem32) { append(instructions, inst_fsub_m32(dst)) } -emit_fsub_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem64) { append(instructions, inst_fsub_m64(dst)) } -emit_fsub_st :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ST) { append(instructions, inst_fsub_st(dst)) } +emit_fsub_m32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem32) { append_elem(instructions, inst_fsub_m32(dst)) } +emit_fsub_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem64) { append_elem(instructions, inst_fsub_m64(dst)) } +emit_fsub_st :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ST) { append_elem(instructions, inst_fsub_st(dst)) } inst_fsubp_st :: #force_inline proc "contextless" (dst: ST) -> Instruction { return with_hint(Instruction{ mnemonic = .FSUBP, operand_count = 1, ops = {op_st(dst), {}, {}, {}} }, 2149) } inst_fsubp_none :: #force_inline proc "contextless" () -> Instruction { return with_hint(Instruction{ mnemonic = .FSUBP, operand_count = 0, ops = {{}, {}, {}, {}} }, 2150) } -emit_fsubp_st :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ST) { append(instructions, inst_fsubp_st(dst)) } -emit_fsubp_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_fsubp_none()) } +emit_fsubp_st :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ST) { append_elem(instructions, inst_fsubp_st(dst)) } +emit_fsubp_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_fsubp_none()) } inst_fisub_m16 :: #force_inline proc "contextless" (dst: Mem16) -> Instruction { return with_hint(Instruction{ mnemonic = .FISUB, operand_count = 1, ops = {op_mem(dst.mem, 2), {}, {}, {}} }, 2151) } inst_fisub_m32 :: #force_inline proc "contextless" (dst: Mem32) -> Instruction { return with_hint(Instruction{ mnemonic = .FISUB, operand_count = 1, ops = {op_mem(dst.mem, 4), {}, {}, {}} }, 2152) } -emit_fisub_m16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem16) { append(instructions, inst_fisub_m16(dst)) } -emit_fisub_m32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem32) { append(instructions, inst_fisub_m32(dst)) } +emit_fisub_m16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem16) { append_elem(instructions, inst_fisub_m16(dst)) } +emit_fisub_m32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem32) { append_elem(instructions, inst_fisub_m32(dst)) } inst_fsubr_m32 :: #force_inline proc "contextless" (dst: Mem32) -> Instruction { return with_hint(Instruction{ mnemonic = .FSUBR, operand_count = 1, ops = {op_mem(dst.mem, 4), {}, {}, {}} }, 2153) } inst_fsubr_m64 :: #force_inline proc "contextless" (dst: Mem64) -> Instruction { return with_hint(Instruction{ mnemonic = .FSUBR, operand_count = 1, ops = {op_mem(dst.mem, 8), {}, {}, {}} }, 2154) } inst_fsubr_st :: #force_inline proc "contextless" (dst: ST) -> Instruction { return with_hint(Instruction{ mnemonic = .FSUBR, operand_count = 1, ops = {op_st(dst), {}, {}, {}} }, 2155) } -emit_fsubr_m32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem32) { append(instructions, inst_fsubr_m32(dst)) } -emit_fsubr_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem64) { append(instructions, inst_fsubr_m64(dst)) } -emit_fsubr_st :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ST) { append(instructions, inst_fsubr_st(dst)) } +emit_fsubr_m32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem32) { append_elem(instructions, inst_fsubr_m32(dst)) } +emit_fsubr_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem64) { append_elem(instructions, inst_fsubr_m64(dst)) } +emit_fsubr_st :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ST) { append_elem(instructions, inst_fsubr_st(dst)) } inst_fsubrp_st :: #force_inline proc "contextless" (dst: ST) -> Instruction { return with_hint(Instruction{ mnemonic = .FSUBRP, operand_count = 1, ops = {op_st(dst), {}, {}, {}} }, 2157) } inst_fsubrp_none :: #force_inline proc "contextless" () -> Instruction { return with_hint(Instruction{ mnemonic = .FSUBRP, operand_count = 0, ops = {{}, {}, {}, {}} }, 2158) } -emit_fsubrp_st :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ST) { append(instructions, inst_fsubrp_st(dst)) } -emit_fsubrp_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_fsubrp_none()) } +emit_fsubrp_st :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ST) { append_elem(instructions, inst_fsubrp_st(dst)) } +emit_fsubrp_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_fsubrp_none()) } inst_fisubr_m16 :: #force_inline proc "contextless" (dst: Mem16) -> Instruction { return with_hint(Instruction{ mnemonic = .FISUBR, operand_count = 1, ops = {op_mem(dst.mem, 2), {}, {}, {}} }, 2159) } inst_fisubr_m32 :: #force_inline proc "contextless" (dst: Mem32) -> Instruction { return with_hint(Instruction{ mnemonic = .FISUBR, operand_count = 1, ops = {op_mem(dst.mem, 4), {}, {}, {}} }, 2160) } -emit_fisubr_m16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem16) { append(instructions, inst_fisubr_m16(dst)) } -emit_fisubr_m32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem32) { append(instructions, inst_fisubr_m32(dst)) } +emit_fisubr_m16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem16) { append_elem(instructions, inst_fisubr_m16(dst)) } +emit_fisubr_m32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem32) { append_elem(instructions, inst_fisubr_m32(dst)) } inst_fmul_m32 :: #force_inline proc "contextless" (dst: Mem32) -> Instruction { return with_hint(Instruction{ mnemonic = .FMUL, operand_count = 1, ops = {op_mem(dst.mem, 4), {}, {}, {}} }, 2161) } inst_fmul_m64 :: #force_inline proc "contextless" (dst: Mem64) -> Instruction { return with_hint(Instruction{ mnemonic = .FMUL, operand_count = 1, ops = {op_mem(dst.mem, 8), {}, {}, {}} }, 2162) } inst_fmul_st :: #force_inline proc "contextless" (dst: ST) -> Instruction { return with_hint(Instruction{ mnemonic = .FMUL, operand_count = 1, ops = {op_st(dst), {}, {}, {}} }, 2163) } -emit_fmul_m32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem32) { append(instructions, inst_fmul_m32(dst)) } -emit_fmul_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem64) { append(instructions, inst_fmul_m64(dst)) } -emit_fmul_st :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ST) { append(instructions, inst_fmul_st(dst)) } +emit_fmul_m32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem32) { append_elem(instructions, inst_fmul_m32(dst)) } +emit_fmul_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem64) { append_elem(instructions, inst_fmul_m64(dst)) } +emit_fmul_st :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ST) { append_elem(instructions, inst_fmul_st(dst)) } inst_fmulp_st :: #force_inline proc "contextless" (dst: ST) -> Instruction { return with_hint(Instruction{ mnemonic = .FMULP, operand_count = 1, ops = {op_st(dst), {}, {}, {}} }, 2165) } inst_fmulp_none :: #force_inline proc "contextless" () -> Instruction { return with_hint(Instruction{ mnemonic = .FMULP, operand_count = 0, ops = {{}, {}, {}, {}} }, 2166) } -emit_fmulp_st :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ST) { append(instructions, inst_fmulp_st(dst)) } -emit_fmulp_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_fmulp_none()) } +emit_fmulp_st :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ST) { append_elem(instructions, inst_fmulp_st(dst)) } +emit_fmulp_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_fmulp_none()) } inst_fimul_m16 :: #force_inline proc "contextless" (dst: Mem16) -> Instruction { return with_hint(Instruction{ mnemonic = .FIMUL, operand_count = 1, ops = {op_mem(dst.mem, 2), {}, {}, {}} }, 2167) } inst_fimul_m32 :: #force_inline proc "contextless" (dst: Mem32) -> Instruction { return with_hint(Instruction{ mnemonic = .FIMUL, operand_count = 1, ops = {op_mem(dst.mem, 4), {}, {}, {}} }, 2168) } -emit_fimul_m16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem16) { append(instructions, inst_fimul_m16(dst)) } -emit_fimul_m32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem32) { append(instructions, inst_fimul_m32(dst)) } +emit_fimul_m16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem16) { append_elem(instructions, inst_fimul_m16(dst)) } +emit_fimul_m32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem32) { append_elem(instructions, inst_fimul_m32(dst)) } inst_fdiv_m32 :: #force_inline proc "contextless" (dst: Mem32) -> Instruction { return with_hint(Instruction{ mnemonic = .FDIV, operand_count = 1, ops = {op_mem(dst.mem, 4), {}, {}, {}} }, 2169) } inst_fdiv_m64 :: #force_inline proc "contextless" (dst: Mem64) -> Instruction { return with_hint(Instruction{ mnemonic = .FDIV, operand_count = 1, ops = {op_mem(dst.mem, 8), {}, {}, {}} }, 2170) } inst_fdiv_st :: #force_inline proc "contextless" (dst: ST) -> Instruction { return with_hint(Instruction{ mnemonic = .FDIV, operand_count = 1, ops = {op_st(dst), {}, {}, {}} }, 2171) } -emit_fdiv_m32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem32) { append(instructions, inst_fdiv_m32(dst)) } -emit_fdiv_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem64) { append(instructions, inst_fdiv_m64(dst)) } -emit_fdiv_st :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ST) { append(instructions, inst_fdiv_st(dst)) } +emit_fdiv_m32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem32) { append_elem(instructions, inst_fdiv_m32(dst)) } +emit_fdiv_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem64) { append_elem(instructions, inst_fdiv_m64(dst)) } +emit_fdiv_st :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ST) { append_elem(instructions, inst_fdiv_st(dst)) } inst_fdivp_st :: #force_inline proc "contextless" (dst: ST) -> Instruction { return with_hint(Instruction{ mnemonic = .FDIVP, operand_count = 1, ops = {op_st(dst), {}, {}, {}} }, 2173) } inst_fdivp_none :: #force_inline proc "contextless" () -> Instruction { return with_hint(Instruction{ mnemonic = .FDIVP, operand_count = 0, ops = {{}, {}, {}, {}} }, 2174) } -emit_fdivp_st :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ST) { append(instructions, inst_fdivp_st(dst)) } -emit_fdivp_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_fdivp_none()) } +emit_fdivp_st :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ST) { append_elem(instructions, inst_fdivp_st(dst)) } +emit_fdivp_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_fdivp_none()) } inst_fidiv_m16 :: #force_inline proc "contextless" (dst: Mem16) -> Instruction { return with_hint(Instruction{ mnemonic = .FIDIV, operand_count = 1, ops = {op_mem(dst.mem, 2), {}, {}, {}} }, 2175) } inst_fidiv_m32 :: #force_inline proc "contextless" (dst: Mem32) -> Instruction { return with_hint(Instruction{ mnemonic = .FIDIV, operand_count = 1, ops = {op_mem(dst.mem, 4), {}, {}, {}} }, 2176) } -emit_fidiv_m16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem16) { append(instructions, inst_fidiv_m16(dst)) } -emit_fidiv_m32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem32) { append(instructions, inst_fidiv_m32(dst)) } +emit_fidiv_m16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem16) { append_elem(instructions, inst_fidiv_m16(dst)) } +emit_fidiv_m32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem32) { append_elem(instructions, inst_fidiv_m32(dst)) } inst_fdivr_m32 :: #force_inline proc "contextless" (dst: Mem32) -> Instruction { return with_hint(Instruction{ mnemonic = .FDIVR, operand_count = 1, ops = {op_mem(dst.mem, 4), {}, {}, {}} }, 2177) } inst_fdivr_m64 :: #force_inline proc "contextless" (dst: Mem64) -> Instruction { return with_hint(Instruction{ mnemonic = .FDIVR, operand_count = 1, ops = {op_mem(dst.mem, 8), {}, {}, {}} }, 2178) } inst_fdivr_st :: #force_inline proc "contextless" (dst: ST) -> Instruction { return with_hint(Instruction{ mnemonic = .FDIVR, operand_count = 1, ops = {op_st(dst), {}, {}, {}} }, 2179) } -emit_fdivr_m32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem32) { append(instructions, inst_fdivr_m32(dst)) } -emit_fdivr_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem64) { append(instructions, inst_fdivr_m64(dst)) } -emit_fdivr_st :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ST) { append(instructions, inst_fdivr_st(dst)) } +emit_fdivr_m32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem32) { append_elem(instructions, inst_fdivr_m32(dst)) } +emit_fdivr_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem64) { append_elem(instructions, inst_fdivr_m64(dst)) } +emit_fdivr_st :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ST) { append_elem(instructions, inst_fdivr_st(dst)) } inst_fdivrp_st :: #force_inline proc "contextless" (dst: ST) -> Instruction { return with_hint(Instruction{ mnemonic = .FDIVRP, operand_count = 1, ops = {op_st(dst), {}, {}, {}} }, 2181) } inst_fdivrp_none :: #force_inline proc "contextless" () -> Instruction { return with_hint(Instruction{ mnemonic = .FDIVRP, operand_count = 0, ops = {{}, {}, {}, {}} }, 2182) } -emit_fdivrp_st :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ST) { append(instructions, inst_fdivrp_st(dst)) } -emit_fdivrp_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_fdivrp_none()) } +emit_fdivrp_st :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ST) { append_elem(instructions, inst_fdivrp_st(dst)) } +emit_fdivrp_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_fdivrp_none()) } inst_fidivr_m16 :: #force_inline proc "contextless" (dst: Mem16) -> Instruction { return with_hint(Instruction{ mnemonic = .FIDIVR, operand_count = 1, ops = {op_mem(dst.mem, 2), {}, {}, {}} }, 2183) } inst_fidivr_m32 :: #force_inline proc "contextless" (dst: Mem32) -> Instruction { return with_hint(Instruction{ mnemonic = .FIDIVR, operand_count = 1, ops = {op_mem(dst.mem, 4), {}, {}, {}} }, 2184) } -emit_fidivr_m16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem16) { append(instructions, inst_fidivr_m16(dst)) } -emit_fidivr_m32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem32) { append(instructions, inst_fidivr_m32(dst)) } +emit_fidivr_m16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem16) { append_elem(instructions, inst_fidivr_m16(dst)) } +emit_fidivr_m32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem32) { append_elem(instructions, inst_fidivr_m32(dst)) } inst_fsqrt_none :: #force_inline proc "contextless" () -> Instruction { return with_hint(Instruction{ mnemonic = .FSQRT, operand_count = 0, ops = {{}, {}, {}, {}} }, 2185) } -emit_fsqrt_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_fsqrt_none()) } +emit_fsqrt_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_fsqrt_none()) } inst_fabs_none :: #force_inline proc "contextless" () -> Instruction { return with_hint(Instruction{ mnemonic = .FABS, operand_count = 0, ops = {{}, {}, {}, {}} }, 2186) } -emit_fabs_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_fabs_none()) } +emit_fabs_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_fabs_none()) } inst_fchs_none :: #force_inline proc "contextless" () -> Instruction { return with_hint(Instruction{ mnemonic = .FCHS, operand_count = 0, ops = {{}, {}, {}, {}} }, 2187) } -emit_fchs_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_fchs_none()) } +emit_fchs_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_fchs_none()) } inst_fprem_none :: #force_inline proc "contextless" () -> Instruction { return with_hint(Instruction{ mnemonic = .FPREM, operand_count = 0, ops = {{}, {}, {}, {}} }, 2188) } -emit_fprem_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_fprem_none()) } +emit_fprem_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_fprem_none()) } inst_fprem1_none :: #force_inline proc "contextless" () -> Instruction { return with_hint(Instruction{ mnemonic = .FPREM1, operand_count = 0, ops = {{}, {}, {}, {}} }, 2189) } -emit_fprem1_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_fprem1_none()) } +emit_fprem1_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_fprem1_none()) } inst_frndint_none :: #force_inline proc "contextless" () -> Instruction { return with_hint(Instruction{ mnemonic = .FRNDINT, operand_count = 0, ops = {{}, {}, {}, {}} }, 2190) } -emit_frndint_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_frndint_none()) } +emit_frndint_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_frndint_none()) } inst_fscale_none :: #force_inline proc "contextless" () -> Instruction { return with_hint(Instruction{ mnemonic = .FSCALE, operand_count = 0, ops = {{}, {}, {}, {}} }, 2191) } -emit_fscale_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_fscale_none()) } +emit_fscale_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_fscale_none()) } inst_fxtract_none :: #force_inline proc "contextless" () -> Instruction { return with_hint(Instruction{ mnemonic = .FXTRACT, operand_count = 0, ops = {{}, {}, {}, {}} }, 2192) } -emit_fxtract_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_fxtract_none()) } +emit_fxtract_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_fxtract_none()) } inst_fxam_none :: #force_inline proc "contextless" () -> Instruction { return with_hint(Instruction{ mnemonic = .FXAM, operand_count = 0, ops = {{}, {}, {}, {}} }, 2193) } -emit_fxam_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_fxam_none()) } +emit_fxam_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_fxam_none()) } inst_fld_m32 :: #force_inline proc "contextless" (dst: Mem32) -> Instruction { return with_hint(Instruction{ mnemonic = .FLD, operand_count = 1, ops = {op_mem(dst.mem, 4), {}, {}, {}} }, 2194) } inst_fld_m64 :: #force_inline proc "contextless" (dst: Mem64) -> Instruction { return with_hint(Instruction{ mnemonic = .FLD, operand_count = 1, ops = {op_mem(dst.mem, 8), {}, {}, {}} }, 2195) } inst_fld_m80 :: #force_inline proc "contextless" (dst: Mem80) -> Instruction { return with_hint(Instruction{ mnemonic = .FLD, operand_count = 1, ops = {op_mem(dst.mem, 10), {}, {}, {}} }, 2196) } inst_fld_st :: #force_inline proc "contextless" (dst: ST) -> Instruction { return with_hint(Instruction{ mnemonic = .FLD, operand_count = 1, ops = {op_st(dst), {}, {}, {}} }, 2197) } -emit_fld_m32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem32) { append(instructions, inst_fld_m32(dst)) } -emit_fld_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem64) { append(instructions, inst_fld_m64(dst)) } -emit_fld_m80 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem80) { append(instructions, inst_fld_m80(dst)) } -emit_fld_st :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ST) { append(instructions, inst_fld_st(dst)) } +emit_fld_m32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem32) { append_elem(instructions, inst_fld_m32(dst)) } +emit_fld_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem64) { append_elem(instructions, inst_fld_m64(dst)) } +emit_fld_m80 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem80) { append_elem(instructions, inst_fld_m80(dst)) } +emit_fld_st :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ST) { append_elem(instructions, inst_fld_st(dst)) } inst_fild_m16 :: #force_inline proc "contextless" (dst: Mem16) -> Instruction { return with_hint(Instruction{ mnemonic = .FILD, operand_count = 1, ops = {op_mem(dst.mem, 2), {}, {}, {}} }, 2198) } inst_fild_m32 :: #force_inline proc "contextless" (dst: Mem32) -> Instruction { return with_hint(Instruction{ mnemonic = .FILD, operand_count = 1, ops = {op_mem(dst.mem, 4), {}, {}, {}} }, 2199) } inst_fild_m64 :: #force_inline proc "contextless" (dst: Mem64) -> Instruction { return with_hint(Instruction{ mnemonic = .FILD, operand_count = 1, ops = {op_mem(dst.mem, 8), {}, {}, {}} }, 2200) } -emit_fild_m16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem16) { append(instructions, inst_fild_m16(dst)) } -emit_fild_m32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem32) { append(instructions, inst_fild_m32(dst)) } -emit_fild_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem64) { append(instructions, inst_fild_m64(dst)) } +emit_fild_m16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem16) { append_elem(instructions, inst_fild_m16(dst)) } +emit_fild_m32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem32) { append_elem(instructions, inst_fild_m32(dst)) } +emit_fild_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem64) { append_elem(instructions, inst_fild_m64(dst)) } inst_fbld_m80 :: #force_inline proc "contextless" (dst: Mem80) -> Instruction { return with_hint(Instruction{ mnemonic = .FBLD, operand_count = 1, ops = {op_mem(dst.mem, 10), {}, {}, {}} }, 2201) } -emit_fbld_m80 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem80) { append(instructions, inst_fbld_m80(dst)) } +emit_fbld_m80 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem80) { append_elem(instructions, inst_fbld_m80(dst)) } inst_fst_m32 :: #force_inline proc "contextless" (dst: Mem32) -> Instruction { return with_hint(Instruction{ mnemonic = .FST, operand_count = 1, ops = {op_mem(dst.mem, 4), {}, {}, {}} }, 2202) } inst_fst_m64 :: #force_inline proc "contextless" (dst: Mem64) -> Instruction { return with_hint(Instruction{ mnemonic = .FST, operand_count = 1, ops = {op_mem(dst.mem, 8), {}, {}, {}} }, 2203) } inst_fst_st :: #force_inline proc "contextless" (dst: ST) -> Instruction { return with_hint(Instruction{ mnemonic = .FST, operand_count = 1, ops = {op_st(dst), {}, {}, {}} }, 2204) } -emit_fst_m32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem32) { append(instructions, inst_fst_m32(dst)) } -emit_fst_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem64) { append(instructions, inst_fst_m64(dst)) } -emit_fst_st :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ST) { append(instructions, inst_fst_st(dst)) } +emit_fst_m32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem32) { append_elem(instructions, inst_fst_m32(dst)) } +emit_fst_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem64) { append_elem(instructions, inst_fst_m64(dst)) } +emit_fst_st :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ST) { append_elem(instructions, inst_fst_st(dst)) } inst_fstp_m32 :: #force_inline proc "contextless" (dst: Mem32) -> Instruction { return with_hint(Instruction{ mnemonic = .FSTP, operand_count = 1, ops = {op_mem(dst.mem, 4), {}, {}, {}} }, 2205) } inst_fstp_m64 :: #force_inline proc "contextless" (dst: Mem64) -> Instruction { return with_hint(Instruction{ mnemonic = .FSTP, operand_count = 1, ops = {op_mem(dst.mem, 8), {}, {}, {}} }, 2206) } inst_fstp_m80 :: #force_inline proc "contextless" (dst: Mem80) -> Instruction { return with_hint(Instruction{ mnemonic = .FSTP, operand_count = 1, ops = {op_mem(dst.mem, 10), {}, {}, {}} }, 2207) } inst_fstp_st :: #force_inline proc "contextless" (dst: ST) -> Instruction { return with_hint(Instruction{ mnemonic = .FSTP, operand_count = 1, ops = {op_st(dst), {}, {}, {}} }, 2208) } -emit_fstp_m32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem32) { append(instructions, inst_fstp_m32(dst)) } -emit_fstp_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem64) { append(instructions, inst_fstp_m64(dst)) } -emit_fstp_m80 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem80) { append(instructions, inst_fstp_m80(dst)) } -emit_fstp_st :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ST) { append(instructions, inst_fstp_st(dst)) } +emit_fstp_m32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem32) { append_elem(instructions, inst_fstp_m32(dst)) } +emit_fstp_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem64) { append_elem(instructions, inst_fstp_m64(dst)) } +emit_fstp_m80 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem80) { append_elem(instructions, inst_fstp_m80(dst)) } +emit_fstp_st :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ST) { append_elem(instructions, inst_fstp_st(dst)) } inst_fist_m16 :: #force_inline proc "contextless" (dst: Mem16) -> Instruction { return with_hint(Instruction{ mnemonic = .FIST, operand_count = 1, ops = {op_mem(dst.mem, 2), {}, {}, {}} }, 2209) } inst_fist_m32 :: #force_inline proc "contextless" (dst: Mem32) -> Instruction { return with_hint(Instruction{ mnemonic = .FIST, operand_count = 1, ops = {op_mem(dst.mem, 4), {}, {}, {}} }, 2210) } -emit_fist_m16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem16) { append(instructions, inst_fist_m16(dst)) } -emit_fist_m32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem32) { append(instructions, inst_fist_m32(dst)) } +emit_fist_m16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem16) { append_elem(instructions, inst_fist_m16(dst)) } +emit_fist_m32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem32) { append_elem(instructions, inst_fist_m32(dst)) } inst_fistp_m16 :: #force_inline proc "contextless" (dst: Mem16) -> Instruction { return with_hint(Instruction{ mnemonic = .FISTP, operand_count = 1, ops = {op_mem(dst.mem, 2), {}, {}, {}} }, 2211) } inst_fistp_m32 :: #force_inline proc "contextless" (dst: Mem32) -> Instruction { return with_hint(Instruction{ mnemonic = .FISTP, operand_count = 1, ops = {op_mem(dst.mem, 4), {}, {}, {}} }, 2212) } inst_fistp_m64 :: #force_inline proc "contextless" (dst: Mem64) -> Instruction { return with_hint(Instruction{ mnemonic = .FISTP, operand_count = 1, ops = {op_mem(dst.mem, 8), {}, {}, {}} }, 2213) } -emit_fistp_m16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem16) { append(instructions, inst_fistp_m16(dst)) } -emit_fistp_m32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem32) { append(instructions, inst_fistp_m32(dst)) } -emit_fistp_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem64) { append(instructions, inst_fistp_m64(dst)) } +emit_fistp_m16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem16) { append_elem(instructions, inst_fistp_m16(dst)) } +emit_fistp_m32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem32) { append_elem(instructions, inst_fistp_m32(dst)) } +emit_fistp_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem64) { append_elem(instructions, inst_fistp_m64(dst)) } inst_fisttp_m16 :: #force_inline proc "contextless" (dst: Mem16) -> Instruction { return with_hint(Instruction{ mnemonic = .FISTTP, operand_count = 1, ops = {op_mem(dst.mem, 2), {}, {}, {}} }, 2214) } inst_fisttp_m32 :: #force_inline proc "contextless" (dst: Mem32) -> Instruction { return with_hint(Instruction{ mnemonic = .FISTTP, operand_count = 1, ops = {op_mem(dst.mem, 4), {}, {}, {}} }, 2215) } inst_fisttp_m64 :: #force_inline proc "contextless" (dst: Mem64) -> Instruction { return with_hint(Instruction{ mnemonic = .FISTTP, operand_count = 1, ops = {op_mem(dst.mem, 8), {}, {}, {}} }, 2216) } -emit_fisttp_m16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem16) { append(instructions, inst_fisttp_m16(dst)) } -emit_fisttp_m32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem32) { append(instructions, inst_fisttp_m32(dst)) } -emit_fisttp_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem64) { append(instructions, inst_fisttp_m64(dst)) } +emit_fisttp_m16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem16) { append_elem(instructions, inst_fisttp_m16(dst)) } +emit_fisttp_m32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem32) { append_elem(instructions, inst_fisttp_m32(dst)) } +emit_fisttp_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem64) { append_elem(instructions, inst_fisttp_m64(dst)) } inst_fbstp_m80 :: #force_inline proc "contextless" (dst: Mem80) -> Instruction { return with_hint(Instruction{ mnemonic = .FBSTP, operand_count = 1, ops = {op_mem(dst.mem, 10), {}, {}, {}} }, 2217) } -emit_fbstp_m80 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem80) { append(instructions, inst_fbstp_m80(dst)) } +emit_fbstp_m80 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem80) { append_elem(instructions, inst_fbstp_m80(dst)) } inst_fxch_st :: #force_inline proc "contextless" (dst: ST) -> Instruction { return with_hint(Instruction{ mnemonic = .FXCH, operand_count = 1, ops = {op_st(dst), {}, {}, {}} }, 2218) } inst_fxch_none :: #force_inline proc "contextless" () -> Instruction { return with_hint(Instruction{ mnemonic = .FXCH, operand_count = 0, ops = {{}, {}, {}, {}} }, 2219) } -emit_fxch_st :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ST) { append(instructions, inst_fxch_st(dst)) } -emit_fxch_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_fxch_none()) } +emit_fxch_st :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ST) { append_elem(instructions, inst_fxch_st(dst)) } +emit_fxch_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_fxch_none()) } inst_fcmovb_st :: #force_inline proc "contextless" (dst: ST) -> Instruction { return with_hint(Instruction{ mnemonic = .FCMOVB, operand_count = 1, ops = {op_st(dst), {}, {}, {}} }, 2220) } -emit_fcmovb_st :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ST) { append(instructions, inst_fcmovb_st(dst)) } +emit_fcmovb_st :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ST) { append_elem(instructions, inst_fcmovb_st(dst)) } inst_fcmove_st :: #force_inline proc "contextless" (dst: ST) -> Instruction { return with_hint(Instruction{ mnemonic = .FCMOVE, operand_count = 1, ops = {op_st(dst), {}, {}, {}} }, 2221) } -emit_fcmove_st :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ST) { append(instructions, inst_fcmove_st(dst)) } +emit_fcmove_st :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ST) { append_elem(instructions, inst_fcmove_st(dst)) } inst_fcmovbe_st :: #force_inline proc "contextless" (dst: ST) -> Instruction { return with_hint(Instruction{ mnemonic = .FCMOVBE, operand_count = 1, ops = {op_st(dst), {}, {}, {}} }, 2222) } -emit_fcmovbe_st :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ST) { append(instructions, inst_fcmovbe_st(dst)) } +emit_fcmovbe_st :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ST) { append_elem(instructions, inst_fcmovbe_st(dst)) } inst_fcmovu_st :: #force_inline proc "contextless" (dst: ST) -> Instruction { return with_hint(Instruction{ mnemonic = .FCMOVU, operand_count = 1, ops = {op_st(dst), {}, {}, {}} }, 2223) } -emit_fcmovu_st :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ST) { append(instructions, inst_fcmovu_st(dst)) } +emit_fcmovu_st :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ST) { append_elem(instructions, inst_fcmovu_st(dst)) } inst_fcmovnb_st :: #force_inline proc "contextless" (dst: ST) -> Instruction { return with_hint(Instruction{ mnemonic = .FCMOVNB, operand_count = 1, ops = {op_st(dst), {}, {}, {}} }, 2224) } -emit_fcmovnb_st :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ST) { append(instructions, inst_fcmovnb_st(dst)) } +emit_fcmovnb_st :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ST) { append_elem(instructions, inst_fcmovnb_st(dst)) } inst_fcmovne_st :: #force_inline proc "contextless" (dst: ST) -> Instruction { return with_hint(Instruction{ mnemonic = .FCMOVNE, operand_count = 1, ops = {op_st(dst), {}, {}, {}} }, 2225) } -emit_fcmovne_st :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ST) { append(instructions, inst_fcmovne_st(dst)) } +emit_fcmovne_st :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ST) { append_elem(instructions, inst_fcmovne_st(dst)) } inst_fcmovnbe_st :: #force_inline proc "contextless" (dst: ST) -> Instruction { return with_hint(Instruction{ mnemonic = .FCMOVNBE, operand_count = 1, ops = {op_st(dst), {}, {}, {}} }, 2226) } -emit_fcmovnbe_st :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ST) { append(instructions, inst_fcmovnbe_st(dst)) } +emit_fcmovnbe_st :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ST) { append_elem(instructions, inst_fcmovnbe_st(dst)) } inst_fcmovnu_st :: #force_inline proc "contextless" (dst: ST) -> Instruction { return with_hint(Instruction{ mnemonic = .FCMOVNU, operand_count = 1, ops = {op_st(dst), {}, {}, {}} }, 2227) } -emit_fcmovnu_st :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ST) { append(instructions, inst_fcmovnu_st(dst)) } +emit_fcmovnu_st :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ST) { append_elem(instructions, inst_fcmovnu_st(dst)) } inst_fcom_m32 :: #force_inline proc "contextless" (dst: Mem32) -> Instruction { return with_hint(Instruction{ mnemonic = .FCOM, operand_count = 1, ops = {op_mem(dst.mem, 4), {}, {}, {}} }, 2228) } inst_fcom_m64 :: #force_inline proc "contextless" (dst: Mem64) -> Instruction { return with_hint(Instruction{ mnemonic = .FCOM, operand_count = 1, ops = {op_mem(dst.mem, 8), {}, {}, {}} }, 2229) } inst_fcom_st :: #force_inline proc "contextless" (dst: ST) -> Instruction { return with_hint(Instruction{ mnemonic = .FCOM, operand_count = 1, ops = {op_st(dst), {}, {}, {}} }, 2230) } inst_fcom_none :: #force_inline proc "contextless" () -> Instruction { return with_hint(Instruction{ mnemonic = .FCOM, operand_count = 0, ops = {{}, {}, {}, {}} }, 2231) } -emit_fcom_m32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem32) { append(instructions, inst_fcom_m32(dst)) } -emit_fcom_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem64) { append(instructions, inst_fcom_m64(dst)) } -emit_fcom_st :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ST) { append(instructions, inst_fcom_st(dst)) } -emit_fcom_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_fcom_none()) } +emit_fcom_m32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem32) { append_elem(instructions, inst_fcom_m32(dst)) } +emit_fcom_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem64) { append_elem(instructions, inst_fcom_m64(dst)) } +emit_fcom_st :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ST) { append_elem(instructions, inst_fcom_st(dst)) } +emit_fcom_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_fcom_none()) } inst_fcomp_m32 :: #force_inline proc "contextless" (dst: Mem32) -> Instruction { return with_hint(Instruction{ mnemonic = .FCOMP, operand_count = 1, ops = {op_mem(dst.mem, 4), {}, {}, {}} }, 2232) } inst_fcomp_m64 :: #force_inline proc "contextless" (dst: Mem64) -> Instruction { return with_hint(Instruction{ mnemonic = .FCOMP, operand_count = 1, ops = {op_mem(dst.mem, 8), {}, {}, {}} }, 2233) } inst_fcomp_st :: #force_inline proc "contextless" (dst: ST) -> Instruction { return with_hint(Instruction{ mnemonic = .FCOMP, operand_count = 1, ops = {op_st(dst), {}, {}, {}} }, 2234) } inst_fcomp_none :: #force_inline proc "contextless" () -> Instruction { return with_hint(Instruction{ mnemonic = .FCOMP, operand_count = 0, ops = {{}, {}, {}, {}} }, 2235) } -emit_fcomp_m32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem32) { append(instructions, inst_fcomp_m32(dst)) } -emit_fcomp_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem64) { append(instructions, inst_fcomp_m64(dst)) } -emit_fcomp_st :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ST) { append(instructions, inst_fcomp_st(dst)) } -emit_fcomp_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_fcomp_none()) } +emit_fcomp_m32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem32) { append_elem(instructions, inst_fcomp_m32(dst)) } +emit_fcomp_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem64) { append_elem(instructions, inst_fcomp_m64(dst)) } +emit_fcomp_st :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ST) { append_elem(instructions, inst_fcomp_st(dst)) } +emit_fcomp_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_fcomp_none()) } inst_fcompp_none :: #force_inline proc "contextless" () -> Instruction { return with_hint(Instruction{ mnemonic = .FCOMPP, operand_count = 0, ops = {{}, {}, {}, {}} }, 2236) } -emit_fcompp_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_fcompp_none()) } +emit_fcompp_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_fcompp_none()) } inst_ficom_m16 :: #force_inline proc "contextless" (dst: Mem16) -> Instruction { return with_hint(Instruction{ mnemonic = .FICOM, operand_count = 1, ops = {op_mem(dst.mem, 2), {}, {}, {}} }, 2237) } inst_ficom_m32 :: #force_inline proc "contextless" (dst: Mem32) -> Instruction { return with_hint(Instruction{ mnemonic = .FICOM, operand_count = 1, ops = {op_mem(dst.mem, 4), {}, {}, {}} }, 2238) } -emit_ficom_m16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem16) { append(instructions, inst_ficom_m16(dst)) } -emit_ficom_m32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem32) { append(instructions, inst_ficom_m32(dst)) } +emit_ficom_m16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem16) { append_elem(instructions, inst_ficom_m16(dst)) } +emit_ficom_m32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem32) { append_elem(instructions, inst_ficom_m32(dst)) } inst_ficomp_m16 :: #force_inline proc "contextless" (dst: Mem16) -> Instruction { return with_hint(Instruction{ mnemonic = .FICOMP, operand_count = 1, ops = {op_mem(dst.mem, 2), {}, {}, {}} }, 2239) } inst_ficomp_m32 :: #force_inline proc "contextless" (dst: Mem32) -> Instruction { return with_hint(Instruction{ mnemonic = .FICOMP, operand_count = 1, ops = {op_mem(dst.mem, 4), {}, {}, {}} }, 2240) } -emit_ficomp_m16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem16) { append(instructions, inst_ficomp_m16(dst)) } -emit_ficomp_m32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem32) { append(instructions, inst_ficomp_m32(dst)) } +emit_ficomp_m16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem16) { append_elem(instructions, inst_ficomp_m16(dst)) } +emit_ficomp_m32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem32) { append_elem(instructions, inst_ficomp_m32(dst)) } inst_fcomi_st :: #force_inline proc "contextless" (dst: ST) -> Instruction { return with_hint(Instruction{ mnemonic = .FCOMI, operand_count = 1, ops = {op_st(dst), {}, {}, {}} }, 2241) } -emit_fcomi_st :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ST) { append(instructions, inst_fcomi_st(dst)) } +emit_fcomi_st :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ST) { append_elem(instructions, inst_fcomi_st(dst)) } inst_fcomip_st :: #force_inline proc "contextless" (dst: ST) -> Instruction { return with_hint(Instruction{ mnemonic = .FCOMIP, operand_count = 1, ops = {op_st(dst), {}, {}, {}} }, 2242) } -emit_fcomip_st :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ST) { append(instructions, inst_fcomip_st(dst)) } +emit_fcomip_st :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ST) { append_elem(instructions, inst_fcomip_st(dst)) } inst_fucomi_st :: #force_inline proc "contextless" (dst: ST) -> Instruction { return with_hint(Instruction{ mnemonic = .FUCOMI, operand_count = 1, ops = {op_st(dst), {}, {}, {}} }, 2243) } -emit_fucomi_st :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ST) { append(instructions, inst_fucomi_st(dst)) } +emit_fucomi_st :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ST) { append_elem(instructions, inst_fucomi_st(dst)) } inst_fucomip_st :: #force_inline proc "contextless" (dst: ST) -> Instruction { return with_hint(Instruction{ mnemonic = .FUCOMIP, operand_count = 1, ops = {op_st(dst), {}, {}, {}} }, 2244) } -emit_fucomip_st :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ST) { append(instructions, inst_fucomip_st(dst)) } +emit_fucomip_st :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ST) { append_elem(instructions, inst_fucomip_st(dst)) } inst_fucom_st :: #force_inline proc "contextless" (dst: ST) -> Instruction { return with_hint(Instruction{ mnemonic = .FUCOM, operand_count = 1, ops = {op_st(dst), {}, {}, {}} }, 2245) } inst_fucom_none :: #force_inline proc "contextless" () -> Instruction { return with_hint(Instruction{ mnemonic = .FUCOM, operand_count = 0, ops = {{}, {}, {}, {}} }, 2246) } -emit_fucom_st :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ST) { append(instructions, inst_fucom_st(dst)) } -emit_fucom_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_fucom_none()) } +emit_fucom_st :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ST) { append_elem(instructions, inst_fucom_st(dst)) } +emit_fucom_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_fucom_none()) } inst_fucomp_st :: #force_inline proc "contextless" (dst: ST) -> Instruction { return with_hint(Instruction{ mnemonic = .FUCOMP, operand_count = 1, ops = {op_st(dst), {}, {}, {}} }, 2247) } inst_fucomp_none :: #force_inline proc "contextless" () -> Instruction { return with_hint(Instruction{ mnemonic = .FUCOMP, operand_count = 0, ops = {{}, {}, {}, {}} }, 2248) } -emit_fucomp_st :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ST) { append(instructions, inst_fucomp_st(dst)) } -emit_fucomp_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_fucomp_none()) } +emit_fucomp_st :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ST) { append_elem(instructions, inst_fucomp_st(dst)) } +emit_fucomp_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_fucomp_none()) } inst_fucompp_none :: #force_inline proc "contextless" () -> Instruction { return with_hint(Instruction{ mnemonic = .FUCOMPP, operand_count = 0, ops = {{}, {}, {}, {}} }, 2249) } -emit_fucompp_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_fucompp_none()) } +emit_fucompp_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_fucompp_none()) } inst_ftst_none :: #force_inline proc "contextless" () -> Instruction { return with_hint(Instruction{ mnemonic = .FTST, operand_count = 0, ops = {{}, {}, {}, {}} }, 2250) } -emit_ftst_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_ftst_none()) } +emit_ftst_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_ftst_none()) } inst_fldz_none :: #force_inline proc "contextless" () -> Instruction { return with_hint(Instruction{ mnemonic = .FLDZ, operand_count = 0, ops = {{}, {}, {}, {}} }, 2251) } -emit_fldz_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_fldz_none()) } +emit_fldz_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_fldz_none()) } inst_fld1_none :: #force_inline proc "contextless" () -> Instruction { return with_hint(Instruction{ mnemonic = .FLD1, operand_count = 0, ops = {{}, {}, {}, {}} }, 2252) } -emit_fld1_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_fld1_none()) } +emit_fld1_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_fld1_none()) } inst_fldpi_none :: #force_inline proc "contextless" () -> Instruction { return with_hint(Instruction{ mnemonic = .FLDPI, operand_count = 0, ops = {{}, {}, {}, {}} }, 2253) } -emit_fldpi_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_fldpi_none()) } +emit_fldpi_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_fldpi_none()) } inst_fldl2t_none :: #force_inline proc "contextless" () -> Instruction { return with_hint(Instruction{ mnemonic = .FLDL2T, operand_count = 0, ops = {{}, {}, {}, {}} }, 2254) } -emit_fldl2t_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_fldl2t_none()) } +emit_fldl2t_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_fldl2t_none()) } inst_fldl2e_none :: #force_inline proc "contextless" () -> Instruction { return with_hint(Instruction{ mnemonic = .FLDL2E, operand_count = 0, ops = {{}, {}, {}, {}} }, 2255) } -emit_fldl2e_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_fldl2e_none()) } +emit_fldl2e_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_fldl2e_none()) } inst_fldlg2_none :: #force_inline proc "contextless" () -> Instruction { return with_hint(Instruction{ mnemonic = .FLDLG2, operand_count = 0, ops = {{}, {}, {}, {}} }, 2256) } -emit_fldlg2_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_fldlg2_none()) } +emit_fldlg2_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_fldlg2_none()) } inst_fldln2_none :: #force_inline proc "contextless" () -> Instruction { return with_hint(Instruction{ mnemonic = .FLDLN2, operand_count = 0, ops = {{}, {}, {}, {}} }, 2257) } -emit_fldln2_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_fldln2_none()) } +emit_fldln2_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_fldln2_none()) } inst_fsin_none :: #force_inline proc "contextless" () -> Instruction { return with_hint(Instruction{ mnemonic = .FSIN, operand_count = 0, ops = {{}, {}, {}, {}} }, 2258) } -emit_fsin_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_fsin_none()) } +emit_fsin_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_fsin_none()) } inst_fcos_none :: #force_inline proc "contextless" () -> Instruction { return with_hint(Instruction{ mnemonic = .FCOS, operand_count = 0, ops = {{}, {}, {}, {}} }, 2259) } -emit_fcos_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_fcos_none()) } +emit_fcos_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_fcos_none()) } inst_fsincos_none :: #force_inline proc "contextless" () -> Instruction { return with_hint(Instruction{ mnemonic = .FSINCOS, operand_count = 0, ops = {{}, {}, {}, {}} }, 2260) } -emit_fsincos_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_fsincos_none()) } +emit_fsincos_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_fsincos_none()) } inst_fptan_none :: #force_inline proc "contextless" () -> Instruction { return with_hint(Instruction{ mnemonic = .FPTAN, operand_count = 0, ops = {{}, {}, {}, {}} }, 2261) } -emit_fptan_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_fptan_none()) } +emit_fptan_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_fptan_none()) } inst_fpatan_none :: #force_inline proc "contextless" () -> Instruction { return with_hint(Instruction{ mnemonic = .FPATAN, operand_count = 0, ops = {{}, {}, {}, {}} }, 2262) } -emit_fpatan_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_fpatan_none()) } +emit_fpatan_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_fpatan_none()) } inst_f2xm1_none :: #force_inline proc "contextless" () -> Instruction { return with_hint(Instruction{ mnemonic = .F2XM1, operand_count = 0, ops = {{}, {}, {}, {}} }, 2263) } -emit_f2xm1_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_f2xm1_none()) } +emit_f2xm1_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_f2xm1_none()) } inst_fyl2x_none :: #force_inline proc "contextless" () -> Instruction { return with_hint(Instruction{ mnemonic = .FYL2X, operand_count = 0, ops = {{}, {}, {}, {}} }, 2264) } -emit_fyl2x_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_fyl2x_none()) } +emit_fyl2x_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_fyl2x_none()) } inst_fyl2xp1_none :: #force_inline proc "contextless" () -> Instruction { return with_hint(Instruction{ mnemonic = .FYL2XP1, operand_count = 0, ops = {{}, {}, {}, {}} }, 2265) } -emit_fyl2xp1_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_fyl2xp1_none()) } +emit_fyl2xp1_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_fyl2xp1_none()) } inst_finit_none :: #force_inline proc "contextless" () -> Instruction { return with_hint(Instruction{ mnemonic = .FINIT, operand_count = 0, ops = {{}, {}, {}, {}} }, 2266) } -emit_finit_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_finit_none()) } +emit_finit_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_finit_none()) } inst_fninit_none :: #force_inline proc "contextless" () -> Instruction { return with_hint(Instruction{ mnemonic = .FNINIT, operand_count = 0, ops = {{}, {}, {}, {}} }, 2267) } -emit_fninit_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_fninit_none()) } +emit_fninit_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_fninit_none()) } inst_fincstp_none :: #force_inline proc "contextless" () -> Instruction { return with_hint(Instruction{ mnemonic = .FINCSTP, operand_count = 0, ops = {{}, {}, {}, {}} }, 2268) } -emit_fincstp_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_fincstp_none()) } +emit_fincstp_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_fincstp_none()) } inst_fdecstp_none :: #force_inline proc "contextless" () -> Instruction { return with_hint(Instruction{ mnemonic = .FDECSTP, operand_count = 0, ops = {{}, {}, {}, {}} }, 2269) } -emit_fdecstp_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_fdecstp_none()) } +emit_fdecstp_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_fdecstp_none()) } inst_ffree_st :: #force_inline proc "contextless" (dst: ST) -> Instruction { return with_hint(Instruction{ mnemonic = .FFREE, operand_count = 1, ops = {op_st(dst), {}, {}, {}} }, 2270) } -emit_ffree_st :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ST) { append(instructions, inst_ffree_st(dst)) } +emit_ffree_st :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ST) { append_elem(instructions, inst_ffree_st(dst)) } inst_ffreep_st :: #force_inline proc "contextless" (dst: ST) -> Instruction { return with_hint(Instruction{ mnemonic = .FFREEP, operand_count = 1, ops = {op_st(dst), {}, {}, {}} }, 2271) } -emit_ffreep_st :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ST) { append(instructions, inst_ffreep_st(dst)) } +emit_ffreep_st :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: ST) { append_elem(instructions, inst_ffreep_st(dst)) } inst_fnop_none :: #force_inline proc "contextless" () -> Instruction { return with_hint(Instruction{ mnemonic = .FNOP, operand_count = 0, ops = {{}, {}, {}, {}} }, 2272) } -emit_fnop_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_fnop_none()) } +emit_fnop_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_fnop_none()) } inst_fwait_none :: #force_inline proc "contextless" () -> Instruction { return with_hint(Instruction{ mnemonic = .FWAIT, operand_count = 0, ops = {{}, {}, {}, {}} }, 2273) } -emit_fwait_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_fwait_none()) } +emit_fwait_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_fwait_none()) } inst_fclex_none :: #force_inline proc "contextless" () -> Instruction { return with_hint(Instruction{ mnemonic = .FCLEX, operand_count = 0, ops = {{}, {}, {}, {}} }, 2274) } -emit_fclex_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_fclex_none()) } +emit_fclex_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_fclex_none()) } inst_fnclex_none :: #force_inline proc "contextless" () -> Instruction { return with_hint(Instruction{ mnemonic = .FNCLEX, operand_count = 0, ops = {{}, {}, {}, {}} }, 2275) } -emit_fnclex_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_fnclex_none()) } +emit_fnclex_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_fnclex_none()) } inst_fstcw_m16 :: #force_inline proc "contextless" (dst: Mem16) -> Instruction { return with_hint(Instruction{ mnemonic = .FSTCW, operand_count = 1, ops = {op_mem(dst.mem, 2), {}, {}, {}} }, 2276) } -emit_fstcw_m16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem16) { append(instructions, inst_fstcw_m16(dst)) } +emit_fstcw_m16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem16) { append_elem(instructions, inst_fstcw_m16(dst)) } inst_fnstcw_m16 :: #force_inline proc "contextless" (dst: Mem16) -> Instruction { return with_hint(Instruction{ mnemonic = .FNSTCW, operand_count = 1, ops = {op_mem(dst.mem, 2), {}, {}, {}} }, 2277) } -emit_fnstcw_m16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem16) { append(instructions, inst_fnstcw_m16(dst)) } +emit_fnstcw_m16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem16) { append_elem(instructions, inst_fnstcw_m16(dst)) } inst_fldcw_m16 :: #force_inline proc "contextless" (dst: Mem16) -> Instruction { return with_hint(Instruction{ mnemonic = .FLDCW, operand_count = 1, ops = {op_mem(dst.mem, 2), {}, {}, {}} }, 2278) } -emit_fldcw_m16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem16) { append(instructions, inst_fldcw_m16(dst)) } +emit_fldcw_m16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem16) { append_elem(instructions, inst_fldcw_m16(dst)) } inst_fstenv_m :: #force_inline proc "contextless" (dst: Memory) -> Instruction { return with_hint(Instruction{ mnemonic = .FSTENV, operand_count = 1, ops = {op_mem(dst, 0), {}, {}, {}} }, 2279) } -emit_fstenv_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Memory) { append(instructions, inst_fstenv_m(dst)) } +emit_fstenv_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Memory) { append_elem(instructions, inst_fstenv_m(dst)) } inst_fnstenv_m :: #force_inline proc "contextless" (dst: Memory) -> Instruction { return with_hint(Instruction{ mnemonic = .FNSTENV, operand_count = 1, ops = {op_mem(dst, 0), {}, {}, {}} }, 2280) } -emit_fnstenv_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Memory) { append(instructions, inst_fnstenv_m(dst)) } +emit_fnstenv_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Memory) { append_elem(instructions, inst_fnstenv_m(dst)) } inst_fldenv_m :: #force_inline proc "contextless" (dst: Memory) -> Instruction { return with_hint(Instruction{ mnemonic = .FLDENV, operand_count = 1, ops = {op_mem(dst, 0), {}, {}, {}} }, 2281) } -emit_fldenv_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Memory) { append(instructions, inst_fldenv_m(dst)) } +emit_fldenv_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Memory) { append_elem(instructions, inst_fldenv_m(dst)) } inst_fsave_m :: #force_inline proc "contextless" (dst: Memory) -> Instruction { return with_hint(Instruction{ mnemonic = .FSAVE, operand_count = 1, ops = {op_mem(dst, 0), {}, {}, {}} }, 2282) } -emit_fsave_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Memory) { append(instructions, inst_fsave_m(dst)) } +emit_fsave_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Memory) { append_elem(instructions, inst_fsave_m(dst)) } inst_fnsave_m :: #force_inline proc "contextless" (dst: Memory) -> Instruction { return with_hint(Instruction{ mnemonic = .FNSAVE, operand_count = 1, ops = {op_mem(dst, 0), {}, {}, {}} }, 2283) } -emit_fnsave_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Memory) { append(instructions, inst_fnsave_m(dst)) } +emit_fnsave_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Memory) { append_elem(instructions, inst_fnsave_m(dst)) } inst_frstor_m :: #force_inline proc "contextless" (dst: Memory) -> Instruction { return with_hint(Instruction{ mnemonic = .FRSTOR, operand_count = 1, ops = {op_mem(dst, 0), {}, {}, {}} }, 2284) } -emit_frstor_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Memory) { append(instructions, inst_frstor_m(dst)) } +emit_frstor_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Memory) { append_elem(instructions, inst_frstor_m(dst)) } inst_fstsw_m16 :: #force_inline proc "contextless" (dst: Mem16) -> Instruction { return with_hint(Instruction{ mnemonic = .FSTSW, operand_count = 1, ops = {op_mem(dst.mem, 2), {}, {}, {}} }, 2285) } -emit_fstsw_m16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem16) { append(instructions, inst_fstsw_m16(dst)) } +emit_fstsw_m16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem16) { append_elem(instructions, inst_fstsw_m16(dst)) } inst_fnstsw_m16 :: #force_inline proc "contextless" (dst: Mem16) -> Instruction { return with_hint(Instruction{ mnemonic = .FNSTSW, operand_count = 1, ops = {op_mem(dst.mem, 2), {}, {}, {}} }, 2287) } -emit_fnstsw_m16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem16) { append(instructions, inst_fnstsw_m16(dst)) } +emit_fnstsw_m16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem16) { append_elem(instructions, inst_fnstsw_m16(dst)) } inst_fxsave_m512 :: #force_inline proc "contextless" (dst: Mem512) -> Instruction { return with_hint(Instruction{ mnemonic = .FXSAVE, operand_count = 1, ops = {op_mem(dst.mem, 64), {}, {}, {}} }, 2289) } -emit_fxsave_m512 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem512) { append(instructions, inst_fxsave_m512(dst)) } +emit_fxsave_m512 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem512) { append_elem(instructions, inst_fxsave_m512(dst)) } inst_fxsave64_m512 :: #force_inline proc "contextless" (dst: Mem512) -> Instruction { return with_hint(Instruction{ mnemonic = .FXSAVE64, operand_count = 1, ops = {op_mem(dst.mem, 64), {}, {}, {}} }, 2290) } -emit_fxsave64_m512 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem512) { append(instructions, inst_fxsave64_m512(dst)) } +emit_fxsave64_m512 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem512) { append_elem(instructions, inst_fxsave64_m512(dst)) } inst_fxrstor_m512 :: #force_inline proc "contextless" (dst: Mem512) -> Instruction { return with_hint(Instruction{ mnemonic = .FXRSTOR, operand_count = 1, ops = {op_mem(dst.mem, 64), {}, {}, {}} }, 2291) } -emit_fxrstor_m512 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem512) { append(instructions, inst_fxrstor_m512(dst)) } +emit_fxrstor_m512 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem512) { append_elem(instructions, inst_fxrstor_m512(dst)) } inst_fxrstor64_m512 :: #force_inline proc "contextless" (dst: Mem512) -> Instruction { return with_hint(Instruction{ mnemonic = .FXRSTOR64, operand_count = 1, ops = {op_mem(dst.mem, 64), {}, {}, {}} }, 2292) } -emit_fxrstor64_m512 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem512) { append(instructions, inst_fxrstor64_m512(dst)) } +emit_fxrstor64_m512 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem512) { append_elem(instructions, inst_fxrstor64_m512(dst)) } inst_lgdt_m :: #force_inline proc "contextless" (dst: Memory) -> Instruction { return with_hint(Instruction{ mnemonic = .LGDT, operand_count = 1, ops = {op_mem(dst, 0), {}, {}, {}} }, 2293) } -emit_lgdt_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Memory) { append(instructions, inst_lgdt_m(dst)) } +emit_lgdt_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Memory) { append_elem(instructions, inst_lgdt_m(dst)) } inst_sgdt_m :: #force_inline proc "contextless" (dst: Memory) -> Instruction { return with_hint(Instruction{ mnemonic = .SGDT, operand_count = 1, ops = {op_mem(dst, 0), {}, {}, {}} }, 2295) } -emit_sgdt_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Memory) { append(instructions, inst_sgdt_m(dst)) } +emit_sgdt_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Memory) { append_elem(instructions, inst_sgdt_m(dst)) } inst_lidt_m :: #force_inline proc "contextless" (dst: Memory) -> Instruction { return with_hint(Instruction{ mnemonic = .LIDT, operand_count = 1, ops = {op_mem(dst, 0), {}, {}, {}} }, 2297) } -emit_lidt_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Memory) { append(instructions, inst_lidt_m(dst)) } +emit_lidt_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Memory) { append_elem(instructions, inst_lidt_m(dst)) } inst_sidt_m :: #force_inline proc "contextless" (dst: Memory) -> Instruction { return with_hint(Instruction{ mnemonic = .SIDT, operand_count = 1, ops = {op_mem(dst, 0), {}, {}, {}} }, 2299) } -emit_sidt_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Memory) { append(instructions, inst_sidt_m(dst)) } +emit_sidt_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Memory) { append_elem(instructions, inst_sidt_m(dst)) } inst_lldt_r16 :: #force_inline proc "contextless" (dst: GPR16) -> Instruction { return with_hint(Instruction{ mnemonic = .LLDT, operand_count = 1, ops = {op_gpr16(dst), {}, {}, {}} }, 2301) } inst_lldt_m16 :: #force_inline proc "contextless" (dst: Mem16) -> Instruction { return with_hint(Instruction{ mnemonic = .LLDT, operand_count = 1, ops = {op_mem(dst.mem, 2), {}, {}, {}} }, 2301) } -emit_lldt_r16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR16) { append(instructions, inst_lldt_r16(dst)) } -emit_lldt_m16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem16) { append(instructions, inst_lldt_m16(dst)) } +emit_lldt_r16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR16) { append_elem(instructions, inst_lldt_r16(dst)) } +emit_lldt_m16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem16) { append_elem(instructions, inst_lldt_m16(dst)) } inst_sldt_r16 :: #force_inline proc "contextless" (dst: GPR16) -> Instruction { return with_hint(Instruction{ mnemonic = .SLDT, operand_count = 1, ops = {op_gpr16(dst), {}, {}, {}} }, 2302) } inst_sldt_m16 :: #force_inline proc "contextless" (dst: Mem16) -> Instruction { return with_hint(Instruction{ mnemonic = .SLDT, operand_count = 1, ops = {op_mem(dst.mem, 2), {}, {}, {}} }, 2302) } inst_sldt_r32 :: #force_inline proc "contextless" (dst: GPR32) -> Instruction { return with_hint(Instruction{ mnemonic = .SLDT, operand_count = 1, ops = {op_gpr32(dst), {}, {}, {}} }, 2303) } inst_sldt_r64 :: #force_inline proc "contextless" (dst: GPR64) -> Instruction { return with_hint(Instruction{ mnemonic = .SLDT, operand_count = 1, ops = {op_gpr64(dst), {}, {}, {}} }, 2304) } -emit_sldt_r16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR16) { append(instructions, inst_sldt_r16(dst)) } -emit_sldt_m16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem16) { append(instructions, inst_sldt_m16(dst)) } -emit_sldt_r32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32) { append(instructions, inst_sldt_r32(dst)) } -emit_sldt_r64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64) { append(instructions, inst_sldt_r64(dst)) } +emit_sldt_r16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR16) { append_elem(instructions, inst_sldt_r16(dst)) } +emit_sldt_m16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem16) { append_elem(instructions, inst_sldt_m16(dst)) } +emit_sldt_r32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32) { append_elem(instructions, inst_sldt_r32(dst)) } +emit_sldt_r64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64) { append_elem(instructions, inst_sldt_r64(dst)) } inst_ltr_r16 :: #force_inline proc "contextless" (dst: GPR16) -> Instruction { return with_hint(Instruction{ mnemonic = .LTR, operand_count = 1, ops = {op_gpr16(dst), {}, {}, {}} }, 2305) } inst_ltr_m16 :: #force_inline proc "contextless" (dst: Mem16) -> Instruction { return with_hint(Instruction{ mnemonic = .LTR, operand_count = 1, ops = {op_mem(dst.mem, 2), {}, {}, {}} }, 2305) } -emit_ltr_r16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR16) { append(instructions, inst_ltr_r16(dst)) } -emit_ltr_m16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem16) { append(instructions, inst_ltr_m16(dst)) } +emit_ltr_r16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR16) { append_elem(instructions, inst_ltr_r16(dst)) } +emit_ltr_m16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem16) { append_elem(instructions, inst_ltr_m16(dst)) } inst_str_r16 :: #force_inline proc "contextless" (dst: GPR16) -> Instruction { return with_hint(Instruction{ mnemonic = .STR, operand_count = 1, ops = {op_gpr16(dst), {}, {}, {}} }, 2306) } inst_str_m16 :: #force_inline proc "contextless" (dst: Mem16) -> Instruction { return with_hint(Instruction{ mnemonic = .STR, operand_count = 1, ops = {op_mem(dst.mem, 2), {}, {}, {}} }, 2306) } inst_str_r32 :: #force_inline proc "contextless" (dst: GPR32) -> Instruction { return with_hint(Instruction{ mnemonic = .STR, operand_count = 1, ops = {op_gpr32(dst), {}, {}, {}} }, 2307) } inst_str_r64 :: #force_inline proc "contextless" (dst: GPR64) -> Instruction { return with_hint(Instruction{ mnemonic = .STR, operand_count = 1, ops = {op_gpr64(dst), {}, {}, {}} }, 2308) } -emit_str_r16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR16) { append(instructions, inst_str_r16(dst)) } -emit_str_m16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem16) { append(instructions, inst_str_m16(dst)) } -emit_str_r32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32) { append(instructions, inst_str_r32(dst)) } -emit_str_r64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64) { append(instructions, inst_str_r64(dst)) } +emit_str_r16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR16) { append_elem(instructions, inst_str_r16(dst)) } +emit_str_m16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem16) { append_elem(instructions, inst_str_m16(dst)) } +emit_str_r32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32) { append_elem(instructions, inst_str_r32(dst)) } +emit_str_r64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64) { append_elem(instructions, inst_str_r64(dst)) } inst_lmsw_r16 :: #force_inline proc "contextless" (dst: GPR16) -> Instruction { return with_hint(Instruction{ mnemonic = .LMSW, operand_count = 1, ops = {op_gpr16(dst), {}, {}, {}} }, 2309) } inst_lmsw_m16 :: #force_inline proc "contextless" (dst: Mem16) -> Instruction { return with_hint(Instruction{ mnemonic = .LMSW, operand_count = 1, ops = {op_mem(dst.mem, 2), {}, {}, {}} }, 2309) } -emit_lmsw_r16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR16) { append(instructions, inst_lmsw_r16(dst)) } -emit_lmsw_m16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem16) { append(instructions, inst_lmsw_m16(dst)) } +emit_lmsw_r16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR16) { append_elem(instructions, inst_lmsw_r16(dst)) } +emit_lmsw_m16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem16) { append_elem(instructions, inst_lmsw_m16(dst)) } inst_smsw_r16 :: #force_inline proc "contextless" (dst: GPR16) -> Instruction { return with_hint(Instruction{ mnemonic = .SMSW, operand_count = 1, ops = {op_gpr16(dst), {}, {}, {}} }, 2310) } inst_smsw_m16 :: #force_inline proc "contextless" (dst: Mem16) -> Instruction { return with_hint(Instruction{ mnemonic = .SMSW, operand_count = 1, ops = {op_mem(dst.mem, 2), {}, {}, {}} }, 2310) } inst_smsw_r32 :: #force_inline proc "contextless" (dst: GPR32) -> Instruction { return with_hint(Instruction{ mnemonic = .SMSW, operand_count = 1, ops = {op_gpr32(dst), {}, {}, {}} }, 2311) } inst_smsw_r64 :: #force_inline proc "contextless" (dst: GPR64) -> Instruction { return with_hint(Instruction{ mnemonic = .SMSW, operand_count = 1, ops = {op_gpr64(dst), {}, {}, {}} }, 2312) } -emit_smsw_r16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR16) { append(instructions, inst_smsw_r16(dst)) } -emit_smsw_m16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem16) { append(instructions, inst_smsw_m16(dst)) } -emit_smsw_r32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32) { append(instructions, inst_smsw_r32(dst)) } -emit_smsw_r64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64) { append(instructions, inst_smsw_r64(dst)) } +emit_smsw_r16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR16) { append_elem(instructions, inst_smsw_r16(dst)) } +emit_smsw_m16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem16) { append_elem(instructions, inst_smsw_m16(dst)) } +emit_smsw_r32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32) { append_elem(instructions, inst_smsw_r32(dst)) } +emit_smsw_r64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64) { append_elem(instructions, inst_smsw_r64(dst)) } inst_clts_none :: #force_inline proc "contextless" () -> Instruction { return with_hint(Instruction{ mnemonic = .CLTS, operand_count = 0, ops = {{}, {}, {}, {}} }, 2313) } -emit_clts_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_clts_none()) } +emit_clts_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_clts_none()) } inst_arpl_r16_r16 :: #force_inline proc "contextless" (dst: GPR16, src: GPR16) -> Instruction { return with_hint(Instruction{ mnemonic = .ARPL, operand_count = 2, ops = {op_gpr16(dst), op_gpr16(src), {}, {}} }, 2314) } inst_arpl_m16_r16 :: #force_inline proc "contextless" (dst: Mem16, src: GPR16) -> Instruction { return with_hint(Instruction{ mnemonic = .ARPL, operand_count = 2, ops = {op_mem(dst.mem, 2), op_gpr16(src), {}, {}} }, 2314) } -emit_arpl_r16_r16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR16, src: GPR16) { append(instructions, inst_arpl_r16_r16(dst, src)) } -emit_arpl_m16_r16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem16, src: GPR16) { append(instructions, inst_arpl_m16_r16(dst, src)) } +emit_arpl_r16_r16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR16, src: GPR16) { append_elem(instructions, inst_arpl_r16_r16(dst, src)) } +emit_arpl_m16_r16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem16, src: GPR16) { append_elem(instructions, inst_arpl_m16_r16(dst, src)) } inst_lar_r16_r16 :: #force_inline proc "contextless" (dst: GPR16, src: GPR16) -> Instruction { return with_hint(Instruction{ mnemonic = .LAR, operand_count = 2, ops = {op_gpr16(dst), op_gpr16(src), {}, {}} }, 2315) } inst_lar_r16_m16 :: #force_inline proc "contextless" (dst: GPR16, src: Mem16) -> Instruction { return with_hint(Instruction{ mnemonic = .LAR, operand_count = 2, ops = {op_gpr16(dst), op_mem(src.mem, 2), {}, {}} }, 2315) } inst_lar_r32_r32 :: #force_inline proc "contextless" (dst: GPR32, src: GPR32) -> Instruction { return with_hint(Instruction{ mnemonic = .LAR, operand_count = 2, ops = {op_gpr32(dst), op_gpr32(src), {}, {}} }, 2316) } inst_lar_r32_m32 :: #force_inline proc "contextless" (dst: GPR32, src: Mem32) -> Instruction { return with_hint(Instruction{ mnemonic = .LAR, operand_count = 2, ops = {op_gpr32(dst), op_mem(src.mem, 4), {}, {}} }, 2316) } inst_lar_r64_r64 :: #force_inline proc "contextless" (dst: GPR64, src: GPR64) -> Instruction { return with_hint(Instruction{ mnemonic = .LAR, operand_count = 2, ops = {op_gpr64(dst), op_gpr64(src), {}, {}} }, 2317) } inst_lar_r64_m64 :: #force_inline proc "contextless" (dst: GPR64, src: Mem64) -> Instruction { return with_hint(Instruction{ mnemonic = .LAR, operand_count = 2, ops = {op_gpr64(dst), op_mem(src.mem, 8), {}, {}} }, 2317) } -emit_lar_r16_r16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR16, src: GPR16) { append(instructions, inst_lar_r16_r16(dst, src)) } -emit_lar_r16_m16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR16, src: Mem16) { append(instructions, inst_lar_r16_m16(dst, src)) } -emit_lar_r32_r32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: GPR32) { append(instructions, inst_lar_r32_r32(dst, src)) } -emit_lar_r32_m32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: Mem32) { append(instructions, inst_lar_r32_m32(dst, src)) } -emit_lar_r64_r64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: GPR64) { append(instructions, inst_lar_r64_r64(dst, src)) } -emit_lar_r64_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: Mem64) { append(instructions, inst_lar_r64_m64(dst, src)) } +emit_lar_r16_r16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR16, src: GPR16) { append_elem(instructions, inst_lar_r16_r16(dst, src)) } +emit_lar_r16_m16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR16, src: Mem16) { append_elem(instructions, inst_lar_r16_m16(dst, src)) } +emit_lar_r32_r32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: GPR32) { append_elem(instructions, inst_lar_r32_r32(dst, src)) } +emit_lar_r32_m32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: Mem32) { append_elem(instructions, inst_lar_r32_m32(dst, src)) } +emit_lar_r64_r64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: GPR64) { append_elem(instructions, inst_lar_r64_r64(dst, src)) } +emit_lar_r64_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: Mem64) { append_elem(instructions, inst_lar_r64_m64(dst, src)) } inst_lsl_r16_r16 :: #force_inline proc "contextless" (dst: GPR16, src: GPR16) -> Instruction { return with_hint(Instruction{ mnemonic = .LSL, operand_count = 2, ops = {op_gpr16(dst), op_gpr16(src), {}, {}} }, 2318) } inst_lsl_r16_m16 :: #force_inline proc "contextless" (dst: GPR16, src: Mem16) -> Instruction { return with_hint(Instruction{ mnemonic = .LSL, operand_count = 2, ops = {op_gpr16(dst), op_mem(src.mem, 2), {}, {}} }, 2318) } inst_lsl_r32_r32 :: #force_inline proc "contextless" (dst: GPR32, src: GPR32) -> Instruction { return with_hint(Instruction{ mnemonic = .LSL, operand_count = 2, ops = {op_gpr32(dst), op_gpr32(src), {}, {}} }, 2319) } inst_lsl_r32_m32 :: #force_inline proc "contextless" (dst: GPR32, src: Mem32) -> Instruction { return with_hint(Instruction{ mnemonic = .LSL, operand_count = 2, ops = {op_gpr32(dst), op_mem(src.mem, 4), {}, {}} }, 2319) } inst_lsl_r64_r64 :: #force_inline proc "contextless" (dst: GPR64, src: GPR64) -> Instruction { return with_hint(Instruction{ mnemonic = .LSL, operand_count = 2, ops = {op_gpr64(dst), op_gpr64(src), {}, {}} }, 2320) } inst_lsl_r64_m64 :: #force_inline proc "contextless" (dst: GPR64, src: Mem64) -> Instruction { return with_hint(Instruction{ mnemonic = .LSL, operand_count = 2, ops = {op_gpr64(dst), op_mem(src.mem, 8), {}, {}} }, 2320) } -emit_lsl_r16_r16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR16, src: GPR16) { append(instructions, inst_lsl_r16_r16(dst, src)) } -emit_lsl_r16_m16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR16, src: Mem16) { append(instructions, inst_lsl_r16_m16(dst, src)) } -emit_lsl_r32_r32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: GPR32) { append(instructions, inst_lsl_r32_r32(dst, src)) } -emit_lsl_r32_m32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: Mem32) { append(instructions, inst_lsl_r32_m32(dst, src)) } -emit_lsl_r64_r64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: GPR64) { append(instructions, inst_lsl_r64_r64(dst, src)) } -emit_lsl_r64_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: Mem64) { append(instructions, inst_lsl_r64_m64(dst, src)) } +emit_lsl_r16_r16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR16, src: GPR16) { append_elem(instructions, inst_lsl_r16_r16(dst, src)) } +emit_lsl_r16_m16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR16, src: Mem16) { append_elem(instructions, inst_lsl_r16_m16(dst, src)) } +emit_lsl_r32_r32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: GPR32) { append_elem(instructions, inst_lsl_r32_r32(dst, src)) } +emit_lsl_r32_m32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: Mem32) { append_elem(instructions, inst_lsl_r32_m32(dst, src)) } +emit_lsl_r64_r64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: GPR64) { append_elem(instructions, inst_lsl_r64_r64(dst, src)) } +emit_lsl_r64_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: Mem64) { append_elem(instructions, inst_lsl_r64_m64(dst, src)) } inst_verr_r16 :: #force_inline proc "contextless" (dst: GPR16) -> Instruction { return with_hint(Instruction{ mnemonic = .VERR, operand_count = 1, ops = {op_gpr16(dst), {}, {}, {}} }, 2321) } inst_verr_m16 :: #force_inline proc "contextless" (dst: Mem16) -> Instruction { return with_hint(Instruction{ mnemonic = .VERR, operand_count = 1, ops = {op_mem(dst.mem, 2), {}, {}, {}} }, 2321) } -emit_verr_r16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR16) { append(instructions, inst_verr_r16(dst)) } -emit_verr_m16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem16) { append(instructions, inst_verr_m16(dst)) } +emit_verr_r16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR16) { append_elem(instructions, inst_verr_r16(dst)) } +emit_verr_m16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem16) { append_elem(instructions, inst_verr_m16(dst)) } inst_verw_r16 :: #force_inline proc "contextless" (dst: GPR16) -> Instruction { return with_hint(Instruction{ mnemonic = .VERW, operand_count = 1, ops = {op_gpr16(dst), {}, {}, {}} }, 2322) } inst_verw_m16 :: #force_inline proc "contextless" (dst: Mem16) -> Instruction { return with_hint(Instruction{ mnemonic = .VERW, operand_count = 1, ops = {op_mem(dst.mem, 2), {}, {}, {}} }, 2322) } -emit_verw_r16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR16) { append(instructions, inst_verw_r16(dst)) } -emit_verw_m16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem16) { append(instructions, inst_verw_m16(dst)) } +emit_verw_r16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR16) { append_elem(instructions, inst_verw_r16(dst)) } +emit_verw_m16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem16) { append_elem(instructions, inst_verw_m16(dst)) } inst_invd_none :: #force_inline proc "contextless" () -> Instruction { return with_hint(Instruction{ mnemonic = .INVD, operand_count = 0, ops = {{}, {}, {}, {}} }, 2323) } -emit_invd_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_invd_none()) } +emit_invd_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_invd_none()) } inst_wbinvd_none :: #force_inline proc "contextless" () -> Instruction { return with_hint(Instruction{ mnemonic = .WBINVD, operand_count = 0, ops = {{}, {}, {}, {}} }, 2324) } -emit_wbinvd_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_wbinvd_none()) } +emit_wbinvd_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_wbinvd_none()) } inst_invlpg_m8 :: #force_inline proc "contextless" (dst: Mem8) -> Instruction { return with_hint(Instruction{ mnemonic = .INVLPG, operand_count = 1, ops = {op_mem(dst.mem, 1), {}, {}, {}} }, 2325) } -emit_invlpg_m8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem8) { append(instructions, inst_invlpg_m8(dst)) } +emit_invlpg_m8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem8) { append_elem(instructions, inst_invlpg_m8(dst)) } inst_invpcid_r32_m128 :: #force_inline proc "contextless" (dst: GPR32, src: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .INVPCID, operand_count = 2, ops = {op_gpr32(dst), op_mem(src.mem, 16), {}, {}} }, 2326) } inst_invpcid_r64_m128 :: #force_inline proc "contextless" (dst: GPR64, src: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .INVPCID, operand_count = 2, ops = {op_gpr64(dst), op_mem(src.mem, 16), {}, {}} }, 2327) } -emit_invpcid_r32_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: Mem128) { append(instructions, inst_invpcid_r32_m128(dst, src)) } -emit_invpcid_r64_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: Mem128) { append(instructions, inst_invpcid_r64_m128(dst, src)) } +emit_invpcid_r32_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: Mem128) { append_elem(instructions, inst_invpcid_r32_m128(dst, src)) } +emit_invpcid_r64_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: Mem128) { append_elem(instructions, inst_invpcid_r64_m128(dst, src)) } inst_rsm_none :: #force_inline proc "contextless" () -> Instruction { return with_hint(Instruction{ mnemonic = .RSM, operand_count = 0, ops = {{}, {}, {}, {}} }, 2328) } -emit_rsm_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_rsm_none()) } +emit_rsm_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_rsm_none()) } inst_rdmsr_none :: #force_inline proc "contextless" () -> Instruction { return with_hint(Instruction{ mnemonic = .RDMSR, operand_count = 0, ops = {{}, {}, {}, {}} }, 2329) } -emit_rdmsr_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_rdmsr_none()) } +emit_rdmsr_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_rdmsr_none()) } inst_wrmsr_none :: #force_inline proc "contextless" () -> Instruction { return with_hint(Instruction{ mnemonic = .WRMSR, operand_count = 0, ops = {{}, {}, {}, {}} }, 2330) } -emit_wrmsr_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_wrmsr_none()) } +emit_wrmsr_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_wrmsr_none()) } inst_vmcall_none :: #force_inline proc "contextless" () -> Instruction { return with_hint(Instruction{ mnemonic = .VMCALL, operand_count = 0, ops = {{}, {}, {}, {}} }, 2331) } -emit_vmcall_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_vmcall_none()) } +emit_vmcall_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_vmcall_none()) } inst_vmlaunch_none :: #force_inline proc "contextless" () -> Instruction { return with_hint(Instruction{ mnemonic = .VMLAUNCH, operand_count = 0, ops = {{}, {}, {}, {}} }, 2332) } -emit_vmlaunch_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_vmlaunch_none()) } +emit_vmlaunch_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_vmlaunch_none()) } inst_vmresume_none :: #force_inline proc "contextless" () -> Instruction { return with_hint(Instruction{ mnemonic = .VMRESUME, operand_count = 0, ops = {{}, {}, {}, {}} }, 2333) } -emit_vmresume_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_vmresume_none()) } +emit_vmresume_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_vmresume_none()) } inst_vmxoff_none :: #force_inline proc "contextless" () -> Instruction { return with_hint(Instruction{ mnemonic = .VMXOFF, operand_count = 0, ops = {{}, {}, {}, {}} }, 2334) } -emit_vmxoff_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_vmxoff_none()) } +emit_vmxoff_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_vmxoff_none()) } inst_vmxon_m64 :: #force_inline proc "contextless" (dst: Mem64) -> Instruction { return with_hint(Instruction{ mnemonic = .VMXON, operand_count = 1, ops = {op_mem(dst.mem, 8), {}, {}, {}} }, 2335) } -emit_vmxon_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem64) { append(instructions, inst_vmxon_m64(dst)) } +emit_vmxon_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem64) { append_elem(instructions, inst_vmxon_m64(dst)) } inst_vmclear_m64 :: #force_inline proc "contextless" (dst: Mem64) -> Instruction { return with_hint(Instruction{ mnemonic = .VMCLEAR, operand_count = 1, ops = {op_mem(dst.mem, 8), {}, {}, {}} }, 2336) } -emit_vmclear_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem64) { append(instructions, inst_vmclear_m64(dst)) } +emit_vmclear_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem64) { append_elem(instructions, inst_vmclear_m64(dst)) } inst_vmptrld_m64 :: #force_inline proc "contextless" (dst: Mem64) -> Instruction { return with_hint(Instruction{ mnemonic = .VMPTRLD, operand_count = 1, ops = {op_mem(dst.mem, 8), {}, {}, {}} }, 2337) } -emit_vmptrld_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem64) { append(instructions, inst_vmptrld_m64(dst)) } +emit_vmptrld_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem64) { append_elem(instructions, inst_vmptrld_m64(dst)) } inst_vmptrst_m64 :: #force_inline proc "contextless" (dst: Mem64) -> Instruction { return with_hint(Instruction{ mnemonic = .VMPTRST, operand_count = 1, ops = {op_mem(dst.mem, 8), {}, {}, {}} }, 2338) } -emit_vmptrst_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem64) { append(instructions, inst_vmptrst_m64(dst)) } +emit_vmptrst_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem64) { append_elem(instructions, inst_vmptrst_m64(dst)) } inst_vmread_r64_r64 :: #force_inline proc "contextless" (dst: GPR64, src: GPR64) -> Instruction { return with_hint(Instruction{ mnemonic = .VMREAD, operand_count = 2, ops = {op_gpr64(dst), op_gpr64(src), {}, {}} }, 2339) } inst_vmread_m64_r64 :: #force_inline proc "contextless" (dst: Mem64, src: GPR64) -> Instruction { return with_hint(Instruction{ mnemonic = .VMREAD, operand_count = 2, ops = {op_mem(dst.mem, 8), op_gpr64(src), {}, {}} }, 2339) } -emit_vmread_r64_r64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: GPR64) { append(instructions, inst_vmread_r64_r64(dst, src)) } -emit_vmread_m64_r64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem64, src: GPR64) { append(instructions, inst_vmread_m64_r64(dst, src)) } +emit_vmread_r64_r64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: GPR64) { append_elem(instructions, inst_vmread_r64_r64(dst, src)) } +emit_vmread_m64_r64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem64, src: GPR64) { append_elem(instructions, inst_vmread_m64_r64(dst, src)) } inst_vmwrite_r64_r64 :: #force_inline proc "contextless" (dst: GPR64, src: GPR64) -> Instruction { return with_hint(Instruction{ mnemonic = .VMWRITE, operand_count = 2, ops = {op_gpr64(dst), op_gpr64(src), {}, {}} }, 2340) } inst_vmwrite_r64_m64 :: #force_inline proc "contextless" (dst: GPR64, src: Mem64) -> Instruction { return with_hint(Instruction{ mnemonic = .VMWRITE, operand_count = 2, ops = {op_gpr64(dst), op_mem(src.mem, 8), {}, {}} }, 2340) } -emit_vmwrite_r64_r64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: GPR64) { append(instructions, inst_vmwrite_r64_r64(dst, src)) } -emit_vmwrite_r64_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: Mem64) { append(instructions, inst_vmwrite_r64_m64(dst, src)) } +emit_vmwrite_r64_r64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: GPR64) { append_elem(instructions, inst_vmwrite_r64_r64(dst, src)) } +emit_vmwrite_r64_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: Mem64) { append_elem(instructions, inst_vmwrite_r64_m64(dst, src)) } inst_vmfunc_none :: #force_inline proc "contextless" () -> Instruction { return with_hint(Instruction{ mnemonic = .VMFUNC, operand_count = 0, ops = {{}, {}, {}, {}} }, 2341) } -emit_vmfunc_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_vmfunc_none()) } +emit_vmfunc_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_vmfunc_none()) } inst_invept_r64_m128 :: #force_inline proc "contextless" (dst: GPR64, src: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .INVEPT, operand_count = 2, ops = {op_gpr64(dst), op_mem(src.mem, 16), {}, {}} }, 2342) } -emit_invept_r64_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: Mem128) { append(instructions, inst_invept_r64_m128(dst, src)) } +emit_invept_r64_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: Mem128) { append_elem(instructions, inst_invept_r64_m128(dst, src)) } inst_invvpid_r64_m128 :: #force_inline proc "contextless" (dst: GPR64, src: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .INVVPID, operand_count = 2, ops = {op_gpr64(dst), op_mem(src.mem, 16), {}, {}} }, 2343) } -emit_invvpid_r64_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: Mem128) { append(instructions, inst_invvpid_r64_m128(dst, src)) } +emit_invvpid_r64_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: Mem128) { append_elem(instructions, inst_invvpid_r64_m128(dst, src)) } inst_encls_none :: #force_inline proc "contextless" () -> Instruction { return with_hint(Instruction{ mnemonic = .ENCLS, operand_count = 0, ops = {{}, {}, {}, {}} }, 2344) } -emit_encls_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_encls_none()) } +emit_encls_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_encls_none()) } inst_enclu_none :: #force_inline proc "contextless" () -> Instruction { return with_hint(Instruction{ mnemonic = .ENCLU, operand_count = 0, ops = {{}, {}, {}, {}} }, 2345) } -emit_enclu_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_enclu_none()) } +emit_enclu_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_enclu_none()) } inst_enclv_none :: #force_inline proc "contextless" () -> Instruction { return with_hint(Instruction{ mnemonic = .ENCLV, operand_count = 0, ops = {{}, {}, {}, {}} }, 2346) } -emit_enclv_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_enclv_none()) } +emit_enclv_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_enclv_none()) } inst_rdpkru_none :: #force_inline proc "contextless" () -> Instruction { return with_hint(Instruction{ mnemonic = .RDPKRU, operand_count = 0, ops = {{}, {}, {}, {}} }, 2347) } -emit_rdpkru_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_rdpkru_none()) } +emit_rdpkru_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_rdpkru_none()) } inst_wrpkru_none :: #force_inline proc "contextless" () -> Instruction { return with_hint(Instruction{ mnemonic = .WRPKRU, operand_count = 0, ops = {{}, {}, {}, {}} }, 2348) } -emit_wrpkru_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_wrpkru_none()) } +emit_wrpkru_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_wrpkru_none()) } inst_incsspd_r32 :: #force_inline proc "contextless" (dst: GPR32) -> Instruction { return with_hint(Instruction{ mnemonic = .INCSSPD, operand_count = 1, ops = {op_gpr32(dst), {}, {}, {}} }, 2349) } -emit_incsspd_r32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32) { append(instructions, inst_incsspd_r32(dst)) } +emit_incsspd_r32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32) { append_elem(instructions, inst_incsspd_r32(dst)) } inst_incsspq_r64 :: #force_inline proc "contextless" (dst: GPR64) -> Instruction { return with_hint(Instruction{ mnemonic = .INCSSPQ, operand_count = 1, ops = {op_gpr64(dst), {}, {}, {}} }, 2350) } -emit_incsspq_r64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64) { append(instructions, inst_incsspq_r64(dst)) } +emit_incsspq_r64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64) { append_elem(instructions, inst_incsspq_r64(dst)) } inst_rdsspd_r32 :: #force_inline proc "contextless" (dst: GPR32) -> Instruction { return with_hint(Instruction{ mnemonic = .RDSSPD, operand_count = 1, ops = {op_gpr32(dst), {}, {}, {}} }, 2351) } -emit_rdsspd_r32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32) { append(instructions, inst_rdsspd_r32(dst)) } +emit_rdsspd_r32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32) { append_elem(instructions, inst_rdsspd_r32(dst)) } inst_rdsspq_r64 :: #force_inline proc "contextless" (dst: GPR64) -> Instruction { return with_hint(Instruction{ mnemonic = .RDSSPQ, operand_count = 1, ops = {op_gpr64(dst), {}, {}, {}} }, 2352) } -emit_rdsspq_r64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64) { append(instructions, inst_rdsspq_r64(dst)) } +emit_rdsspq_r64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64) { append_elem(instructions, inst_rdsspq_r64(dst)) } inst_saveprevssp_none :: #force_inline proc "contextless" () -> Instruction { return with_hint(Instruction{ mnemonic = .SAVEPREVSSP, operand_count = 0, ops = {{}, {}, {}, {}} }, 2353) } -emit_saveprevssp_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_saveprevssp_none()) } +emit_saveprevssp_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_saveprevssp_none()) } inst_rstorssp_m64 :: #force_inline proc "contextless" (dst: Mem64) -> Instruction { return with_hint(Instruction{ mnemonic = .RSTORSSP, operand_count = 1, ops = {op_mem(dst.mem, 8), {}, {}, {}} }, 2354) } -emit_rstorssp_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem64) { append(instructions, inst_rstorssp_m64(dst)) } +emit_rstorssp_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem64) { append_elem(instructions, inst_rstorssp_m64(dst)) } inst_wrssd_m32_r32 :: #force_inline proc "contextless" (dst: Mem32, src: GPR32) -> Instruction { return with_hint(Instruction{ mnemonic = .WRSSD, operand_count = 2, ops = {op_mem(dst.mem, 4), op_gpr32(src), {}, {}} }, 2355) } -emit_wrssd_m32_r32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem32, src: GPR32) { append(instructions, inst_wrssd_m32_r32(dst, src)) } +emit_wrssd_m32_r32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem32, src: GPR32) { append_elem(instructions, inst_wrssd_m32_r32(dst, src)) } inst_wrssq_m64_r64 :: #force_inline proc "contextless" (dst: Mem64, src: GPR64) -> Instruction { return with_hint(Instruction{ mnemonic = .WRSSQ, operand_count = 2, ops = {op_mem(dst.mem, 8), op_gpr64(src), {}, {}} }, 2356) } -emit_wrssq_m64_r64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem64, src: GPR64) { append(instructions, inst_wrssq_m64_r64(dst, src)) } +emit_wrssq_m64_r64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem64, src: GPR64) { append_elem(instructions, inst_wrssq_m64_r64(dst, src)) } inst_wrussd_m32_r32 :: #force_inline proc "contextless" (dst: Mem32, src: GPR32) -> Instruction { return with_hint(Instruction{ mnemonic = .WRUSSD, operand_count = 2, ops = {op_mem(dst.mem, 4), op_gpr32(src), {}, {}} }, 2357) } -emit_wrussd_m32_r32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem32, src: GPR32) { append(instructions, inst_wrussd_m32_r32(dst, src)) } +emit_wrussd_m32_r32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem32, src: GPR32) { append_elem(instructions, inst_wrussd_m32_r32(dst, src)) } inst_wrussq_m64_r64 :: #force_inline proc "contextless" (dst: Mem64, src: GPR64) -> Instruction { return with_hint(Instruction{ mnemonic = .WRUSSQ, operand_count = 2, ops = {op_mem(dst.mem, 8), op_gpr64(src), {}, {}} }, 2358) } -emit_wrussq_m64_r64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem64, src: GPR64) { append(instructions, inst_wrussq_m64_r64(dst, src)) } +emit_wrussq_m64_r64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem64, src: GPR64) { append_elem(instructions, inst_wrussq_m64_r64(dst, src)) } inst_setssbsy_none :: #force_inline proc "contextless" () -> Instruction { return with_hint(Instruction{ mnemonic = .SETSSBSY, operand_count = 0, ops = {{}, {}, {}, {}} }, 2359) } -emit_setssbsy_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_setssbsy_none()) } +emit_setssbsy_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_setssbsy_none()) } inst_clrssbsy_m64 :: #force_inline proc "contextless" (dst: Mem64) -> Instruction { return with_hint(Instruction{ mnemonic = .CLRSSBSY, operand_count = 1, ops = {op_mem(dst.mem, 8), {}, {}, {}} }, 2360) } -emit_clrssbsy_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem64) { append(instructions, inst_clrssbsy_m64(dst)) } +emit_clrssbsy_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem64) { append_elem(instructions, inst_clrssbsy_m64(dst)) } inst_endbr64_none :: #force_inline proc "contextless" () -> Instruction { return with_hint(Instruction{ mnemonic = .ENDBR64, operand_count = 0, ops = {{}, {}, {}, {}} }, 2361) } -emit_endbr64_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_endbr64_none()) } +emit_endbr64_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_endbr64_none()) } inst_endbr32_none :: #force_inline proc "contextless" () -> Instruction { return with_hint(Instruction{ mnemonic = .ENDBR32, operand_count = 0, ops = {{}, {}, {}, {}} }, 2362) } -emit_endbr32_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_endbr32_none()) } +emit_endbr32_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_endbr32_none()) } inst_xsave_m8 :: #force_inline proc "contextless" (dst: Mem8) -> Instruction { return with_hint(Instruction{ mnemonic = .XSAVE, operand_count = 1, ops = {op_mem(dst.mem, 1), {}, {}, {}} }, 2363) } -emit_xsave_m8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem8) { append(instructions, inst_xsave_m8(dst)) } +emit_xsave_m8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem8) { append_elem(instructions, inst_xsave_m8(dst)) } inst_xsave64_m8 :: #force_inline proc "contextless" (dst: Mem8) -> Instruction { return with_hint(Instruction{ mnemonic = .XSAVE64, operand_count = 1, ops = {op_mem(dst.mem, 1), {}, {}, {}} }, 2364) } -emit_xsave64_m8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem8) { append(instructions, inst_xsave64_m8(dst)) } +emit_xsave64_m8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem8) { append_elem(instructions, inst_xsave64_m8(dst)) } inst_xrstor_m8 :: #force_inline proc "contextless" (dst: Mem8) -> Instruction { return with_hint(Instruction{ mnemonic = .XRSTOR, operand_count = 1, ops = {op_mem(dst.mem, 1), {}, {}, {}} }, 2365) } -emit_xrstor_m8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem8) { append(instructions, inst_xrstor_m8(dst)) } +emit_xrstor_m8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem8) { append_elem(instructions, inst_xrstor_m8(dst)) } inst_xrstor64_m8 :: #force_inline proc "contextless" (dst: Mem8) -> Instruction { return with_hint(Instruction{ mnemonic = .XRSTOR64, operand_count = 1, ops = {op_mem(dst.mem, 1), {}, {}, {}} }, 2366) } -emit_xrstor64_m8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem8) { append(instructions, inst_xrstor64_m8(dst)) } +emit_xrstor64_m8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem8) { append_elem(instructions, inst_xrstor64_m8(dst)) } inst_xsaveopt_m8 :: #force_inline proc "contextless" (dst: Mem8) -> Instruction { return with_hint(Instruction{ mnemonic = .XSAVEOPT, operand_count = 1, ops = {op_mem(dst.mem, 1), {}, {}, {}} }, 2367) } -emit_xsaveopt_m8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem8) { append(instructions, inst_xsaveopt_m8(dst)) } +emit_xsaveopt_m8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem8) { append_elem(instructions, inst_xsaveopt_m8(dst)) } inst_xsaveopt64_m8 :: #force_inline proc "contextless" (dst: Mem8) -> Instruction { return with_hint(Instruction{ mnemonic = .XSAVEOPT64, operand_count = 1, ops = {op_mem(dst.mem, 1), {}, {}, {}} }, 2368) } -emit_xsaveopt64_m8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem8) { append(instructions, inst_xsaveopt64_m8(dst)) } +emit_xsaveopt64_m8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem8) { append_elem(instructions, inst_xsaveopt64_m8(dst)) } inst_xsavec_m8 :: #force_inline proc "contextless" (dst: Mem8) -> Instruction { return with_hint(Instruction{ mnemonic = .XSAVEC, operand_count = 1, ops = {op_mem(dst.mem, 1), {}, {}, {}} }, 2369) } -emit_xsavec_m8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem8) { append(instructions, inst_xsavec_m8(dst)) } +emit_xsavec_m8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem8) { append_elem(instructions, inst_xsavec_m8(dst)) } inst_xsavec64_m8 :: #force_inline proc "contextless" (dst: Mem8) -> Instruction { return with_hint(Instruction{ mnemonic = .XSAVEC64, operand_count = 1, ops = {op_mem(dst.mem, 1), {}, {}, {}} }, 2370) } -emit_xsavec64_m8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem8) { append(instructions, inst_xsavec64_m8(dst)) } +emit_xsavec64_m8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem8) { append_elem(instructions, inst_xsavec64_m8(dst)) } inst_xsaves_m8 :: #force_inline proc "contextless" (dst: Mem8) -> Instruction { return with_hint(Instruction{ mnemonic = .XSAVES, operand_count = 1, ops = {op_mem(dst.mem, 1), {}, {}, {}} }, 2371) } -emit_xsaves_m8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem8) { append(instructions, inst_xsaves_m8(dst)) } +emit_xsaves_m8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem8) { append_elem(instructions, inst_xsaves_m8(dst)) } inst_xsaves64_m8 :: #force_inline proc "contextless" (dst: Mem8) -> Instruction { return with_hint(Instruction{ mnemonic = .XSAVES64, operand_count = 1, ops = {op_mem(dst.mem, 1), {}, {}, {}} }, 2372) } -emit_xsaves64_m8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem8) { append(instructions, inst_xsaves64_m8(dst)) } +emit_xsaves64_m8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem8) { append_elem(instructions, inst_xsaves64_m8(dst)) } inst_xrstors_m8 :: #force_inline proc "contextless" (dst: Mem8) -> Instruction { return with_hint(Instruction{ mnemonic = .XRSTORS, operand_count = 1, ops = {op_mem(dst.mem, 1), {}, {}, {}} }, 2373) } -emit_xrstors_m8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem8) { append(instructions, inst_xrstors_m8(dst)) } +emit_xrstors_m8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem8) { append_elem(instructions, inst_xrstors_m8(dst)) } inst_xrstors64_m8 :: #force_inline proc "contextless" (dst: Mem8) -> Instruction { return with_hint(Instruction{ mnemonic = .XRSTORS64, operand_count = 1, ops = {op_mem(dst.mem, 1), {}, {}, {}} }, 2374) } -emit_xrstors64_m8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem8) { append(instructions, inst_xrstors64_m8(dst)) } +emit_xrstors64_m8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem8) { append_elem(instructions, inst_xrstors64_m8(dst)) } inst_prefetcht0_m8 :: #force_inline proc "contextless" (dst: Mem8) -> Instruction { return with_hint(Instruction{ mnemonic = .PREFETCHT0, operand_count = 1, ops = {op_mem(dst.mem, 1), {}, {}, {}} }, 2375) } -emit_prefetcht0_m8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem8) { append(instructions, inst_prefetcht0_m8(dst)) } +emit_prefetcht0_m8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem8) { append_elem(instructions, inst_prefetcht0_m8(dst)) } inst_prefetcht1_m8 :: #force_inline proc "contextless" (dst: Mem8) -> Instruction { return with_hint(Instruction{ mnemonic = .PREFETCHT1, operand_count = 1, ops = {op_mem(dst.mem, 1), {}, {}, {}} }, 2376) } -emit_prefetcht1_m8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem8) { append(instructions, inst_prefetcht1_m8(dst)) } +emit_prefetcht1_m8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem8) { append_elem(instructions, inst_prefetcht1_m8(dst)) } inst_prefetcht2_m8 :: #force_inline proc "contextless" (dst: Mem8) -> Instruction { return with_hint(Instruction{ mnemonic = .PREFETCHT2, operand_count = 1, ops = {op_mem(dst.mem, 1), {}, {}, {}} }, 2377) } -emit_prefetcht2_m8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem8) { append(instructions, inst_prefetcht2_m8(dst)) } +emit_prefetcht2_m8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem8) { append_elem(instructions, inst_prefetcht2_m8(dst)) } inst_prefetchnta_m8 :: #force_inline proc "contextless" (dst: Mem8) -> Instruction { return with_hint(Instruction{ mnemonic = .PREFETCHNTA, operand_count = 1, ops = {op_mem(dst.mem, 1), {}, {}, {}} }, 2378) } -emit_prefetchnta_m8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem8) { append(instructions, inst_prefetchnta_m8(dst)) } +emit_prefetchnta_m8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem8) { append_elem(instructions, inst_prefetchnta_m8(dst)) } inst_prefetchw_m8 :: #force_inline proc "contextless" (dst: Mem8) -> Instruction { return with_hint(Instruction{ mnemonic = .PREFETCHW, operand_count = 1, ops = {op_mem(dst.mem, 1), {}, {}, {}} }, 2379) } -emit_prefetchw_m8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem8) { append(instructions, inst_prefetchw_m8(dst)) } +emit_prefetchw_m8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem8) { append_elem(instructions, inst_prefetchw_m8(dst)) } inst_clflushopt_m8 :: #force_inline proc "contextless" (dst: Mem8) -> Instruction { return with_hint(Instruction{ mnemonic = .CLFLUSHOPT, operand_count = 1, ops = {op_mem(dst.mem, 1), {}, {}, {}} }, 2380) } -emit_clflushopt_m8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem8) { append(instructions, inst_clflushopt_m8(dst)) } +emit_clflushopt_m8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem8) { append_elem(instructions, inst_clflushopt_m8(dst)) } inst_clwb_m8 :: #force_inline proc "contextless" (dst: Mem8) -> Instruction { return with_hint(Instruction{ mnemonic = .CLWB, operand_count = 1, ops = {op_mem(dst.mem, 1), {}, {}, {}} }, 2381) } -emit_clwb_m8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem8) { append(instructions, inst_clwb_m8(dst)) } +emit_clwb_m8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem8) { append_elem(instructions, inst_clwb_m8(dst)) } inst_cldemote_m8 :: #force_inline proc "contextless" (dst: Mem8) -> Instruction { return with_hint(Instruction{ mnemonic = .CLDEMOTE, operand_count = 1, ops = {op_mem(dst.mem, 1), {}, {}, {}} }, 2382) } -emit_cldemote_m8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem8) { append(instructions, inst_cldemote_m8(dst)) } +emit_cldemote_m8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem8) { append_elem(instructions, inst_cldemote_m8(dst)) } inst_bswap_r32 :: #force_inline proc "contextless" (dst: GPR32) -> Instruction { return with_hint(Instruction{ mnemonic = .BSWAP, operand_count = 1, ops = {op_gpr32(dst), {}, {}, {}} }, 2383) } inst_bswap_r64 :: #force_inline proc "contextless" (dst: GPR64) -> Instruction { return with_hint(Instruction{ mnemonic = .BSWAP, operand_count = 1, ops = {op_gpr64(dst), {}, {}, {}} }, 2384) } -emit_bswap_r32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32) { append(instructions, inst_bswap_r32(dst)) } -emit_bswap_r64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64) { append(instructions, inst_bswap_r64(dst)) } +emit_bswap_r32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32) { append_elem(instructions, inst_bswap_r32(dst)) } +emit_bswap_r64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64) { append_elem(instructions, inst_bswap_r64(dst)) } inst_cmpxchg_r8_r8 :: #force_inline proc "contextless" (dst: GPR8, src: GPR8) -> Instruction { return with_hint(Instruction{ mnemonic = .CMPXCHG, operand_count = 2, ops = {op_gpr8(dst), op_gpr8(src), {}, {}} }, 2385) } inst_cmpxchg_m8_r8 :: #force_inline proc "contextless" (dst: Mem8, src: GPR8) -> Instruction { return with_hint(Instruction{ mnemonic = .CMPXCHG, operand_count = 2, ops = {op_mem(dst.mem, 1), op_gpr8(src), {}, {}} }, 2385) } inst_cmpxchg_r16_r16 :: #force_inline proc "contextless" (dst: GPR16, src: GPR16) -> Instruction { return with_hint(Instruction{ mnemonic = .CMPXCHG, operand_count = 2, ops = {op_gpr16(dst), op_gpr16(src), {}, {}} }, 2386) } @@ -7669,18 +7669,18 @@ inst_cmpxchg_r32_r32 :: #force_inline proc "contextless" (dst: GP inst_cmpxchg_m32_r32 :: #force_inline proc "contextless" (dst: Mem32, src: GPR32) -> Instruction { return with_hint(Instruction{ mnemonic = .CMPXCHG, operand_count = 2, ops = {op_mem(dst.mem, 4), op_gpr32(src), {}, {}} }, 2387) } inst_cmpxchg_r64_r64 :: #force_inline proc "contextless" (dst: GPR64, src: GPR64) -> Instruction { return with_hint(Instruction{ mnemonic = .CMPXCHG, operand_count = 2, ops = {op_gpr64(dst), op_gpr64(src), {}, {}} }, 2388) } inst_cmpxchg_m64_r64 :: #force_inline proc "contextless" (dst: Mem64, src: GPR64) -> Instruction { return with_hint(Instruction{ mnemonic = .CMPXCHG, operand_count = 2, ops = {op_mem(dst.mem, 8), op_gpr64(src), {}, {}} }, 2388) } -emit_cmpxchg_r8_r8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR8, src: GPR8) { append(instructions, inst_cmpxchg_r8_r8(dst, src)) } -emit_cmpxchg_m8_r8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem8, src: GPR8) { append(instructions, inst_cmpxchg_m8_r8(dst, src)) } -emit_cmpxchg_r16_r16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR16, src: GPR16) { append(instructions, inst_cmpxchg_r16_r16(dst, src)) } -emit_cmpxchg_m16_r16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem16, src: GPR16) { append(instructions, inst_cmpxchg_m16_r16(dst, src)) } -emit_cmpxchg_r32_r32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: GPR32) { append(instructions, inst_cmpxchg_r32_r32(dst, src)) } -emit_cmpxchg_m32_r32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem32, src: GPR32) { append(instructions, inst_cmpxchg_m32_r32(dst, src)) } -emit_cmpxchg_r64_r64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: GPR64) { append(instructions, inst_cmpxchg_r64_r64(dst, src)) } -emit_cmpxchg_m64_r64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem64, src: GPR64) { append(instructions, inst_cmpxchg_m64_r64(dst, src)) } +emit_cmpxchg_r8_r8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR8, src: GPR8) { append_elem(instructions, inst_cmpxchg_r8_r8(dst, src)) } +emit_cmpxchg_m8_r8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem8, src: GPR8) { append_elem(instructions, inst_cmpxchg_m8_r8(dst, src)) } +emit_cmpxchg_r16_r16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR16, src: GPR16) { append_elem(instructions, inst_cmpxchg_r16_r16(dst, src)) } +emit_cmpxchg_m16_r16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem16, src: GPR16) { append_elem(instructions, inst_cmpxchg_m16_r16(dst, src)) } +emit_cmpxchg_r32_r32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: GPR32) { append_elem(instructions, inst_cmpxchg_r32_r32(dst, src)) } +emit_cmpxchg_m32_r32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem32, src: GPR32) { append_elem(instructions, inst_cmpxchg_m32_r32(dst, src)) } +emit_cmpxchg_r64_r64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: GPR64) { append_elem(instructions, inst_cmpxchg_r64_r64(dst, src)) } +emit_cmpxchg_m64_r64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem64, src: GPR64) { append_elem(instructions, inst_cmpxchg_m64_r64(dst, src)) } inst_cmpxchg8b_m64 :: #force_inline proc "contextless" (dst: Mem64) -> Instruction { return with_hint(Instruction{ mnemonic = .CMPXCHG8B, operand_count = 1, ops = {op_mem(dst.mem, 8), {}, {}, {}} }, 2389) } -emit_cmpxchg8b_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem64) { append(instructions, inst_cmpxchg8b_m64(dst)) } +emit_cmpxchg8b_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem64) { append_elem(instructions, inst_cmpxchg8b_m64(dst)) } inst_cmpxchg16b_m128 :: #force_inline proc "contextless" (dst: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .CMPXCHG16B, operand_count = 1, ops = {op_mem(dst.mem, 16), {}, {}, {}} }, 2390) } -emit_cmpxchg16b_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem128) { append(instructions, inst_cmpxchg16b_m128(dst)) } +emit_cmpxchg16b_m128 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem128) { append_elem(instructions, inst_cmpxchg16b_m128(dst)) } inst_xadd_r8_r8 :: #force_inline proc "contextless" (dst: GPR8, src: GPR8) -> Instruction { return with_hint(Instruction{ mnemonic = .XADD, operand_count = 2, ops = {op_gpr8(dst), op_gpr8(src), {}, {}} }, 2391) } inst_xadd_m8_r8 :: #force_inline proc "contextless" (dst: Mem8, src: GPR8) -> Instruction { return with_hint(Instruction{ mnemonic = .XADD, operand_count = 2, ops = {op_mem(dst.mem, 1), op_gpr8(src), {}, {}} }, 2391) } inst_xadd_r16_r16 :: #force_inline proc "contextless" (dst: GPR16, src: GPR16) -> Instruction { return with_hint(Instruction{ mnemonic = .XADD, operand_count = 2, ops = {op_gpr16(dst), op_gpr16(src), {}, {}} }, 2392) } @@ -7689,170 +7689,170 @@ inst_xadd_r32_r32 :: #force_inline proc "contextless" (dst: GP inst_xadd_m32_r32 :: #force_inline proc "contextless" (dst: Mem32, src: GPR32) -> Instruction { return with_hint(Instruction{ mnemonic = .XADD, operand_count = 2, ops = {op_mem(dst.mem, 4), op_gpr32(src), {}, {}} }, 2393) } inst_xadd_r64_r64 :: #force_inline proc "contextless" (dst: GPR64, src: GPR64) -> Instruction { return with_hint(Instruction{ mnemonic = .XADD, operand_count = 2, ops = {op_gpr64(dst), op_gpr64(src), {}, {}} }, 2394) } inst_xadd_m64_r64 :: #force_inline proc "contextless" (dst: Mem64, src: GPR64) -> Instruction { return with_hint(Instruction{ mnemonic = .XADD, operand_count = 2, ops = {op_mem(dst.mem, 8), op_gpr64(src), {}, {}} }, 2394) } -emit_xadd_r8_r8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR8, src: GPR8) { append(instructions, inst_xadd_r8_r8(dst, src)) } -emit_xadd_m8_r8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem8, src: GPR8) { append(instructions, inst_xadd_m8_r8(dst, src)) } -emit_xadd_r16_r16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR16, src: GPR16) { append(instructions, inst_xadd_r16_r16(dst, src)) } -emit_xadd_m16_r16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem16, src: GPR16) { append(instructions, inst_xadd_m16_r16(dst, src)) } -emit_xadd_r32_r32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: GPR32) { append(instructions, inst_xadd_r32_r32(dst, src)) } -emit_xadd_m32_r32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem32, src: GPR32) { append(instructions, inst_xadd_m32_r32(dst, src)) } -emit_xadd_r64_r64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: GPR64) { append(instructions, inst_xadd_r64_r64(dst, src)) } -emit_xadd_m64_r64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem64, src: GPR64) { append(instructions, inst_xadd_m64_r64(dst, src)) } +emit_xadd_r8_r8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR8, src: GPR8) { append_elem(instructions, inst_xadd_r8_r8(dst, src)) } +emit_xadd_m8_r8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem8, src: GPR8) { append_elem(instructions, inst_xadd_m8_r8(dst, src)) } +emit_xadd_r16_r16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR16, src: GPR16) { append_elem(instructions, inst_xadd_r16_r16(dst, src)) } +emit_xadd_m16_r16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem16, src: GPR16) { append_elem(instructions, inst_xadd_m16_r16(dst, src)) } +emit_xadd_r32_r32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: GPR32) { append_elem(instructions, inst_xadd_r32_r32(dst, src)) } +emit_xadd_m32_r32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem32, src: GPR32) { append_elem(instructions, inst_xadd_m32_r32(dst, src)) } +emit_xadd_r64_r64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: GPR64) { append_elem(instructions, inst_xadd_r64_r64(dst, src)) } +emit_xadd_m64_r64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem64, src: GPR64) { append_elem(instructions, inst_xadd_m64_r64(dst, src)) } inst_bound_r16_m :: #force_inline proc "contextless" (dst: GPR16, src: Memory) -> Instruction { return with_hint(Instruction{ mnemonic = .BOUND, operand_count = 2, ops = {op_gpr16(dst), op_mem(src, 0), {}, {}} }, 2395) } inst_bound_r32_m32 :: #force_inline proc "contextless" (dst: GPR32, src: Mem32) -> Instruction { return with_hint(Instruction{ mnemonic = .BOUND, operand_count = 2, ops = {op_gpr32(dst), op_mem(src.mem, 4), {}, {}} }, 2396) } -emit_bound_r16_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR16, src: Memory) { append(instructions, inst_bound_r16_m(dst, src)) } -emit_bound_r32_m32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: Mem32) { append(instructions, inst_bound_r32_m32(dst, src)) } +emit_bound_r16_m :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR16, src: Memory) { append_elem(instructions, inst_bound_r16_m(dst, src)) } +emit_bound_r32_m32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: Mem32) { append_elem(instructions, inst_bound_r32_m32(dst, src)) } inst_enter_imm16_imm8 :: #force_inline proc "contextless" (imm: i16, imm2: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .ENTER, operand_count = 2, ops = {op_imm16(imm), op_imm8(imm2), {}, {}} }, 2397) } -emit_enter_imm16_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i16, imm2: i8) { append(instructions, inst_enter_imm16_imm8(imm, imm2)) } +emit_enter_imm16_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i16, imm2: i8) { append_elem(instructions, inst_enter_imm16_imm8(imm, imm2)) } inst_leave_none :: #force_inline proc "contextless" () -> Instruction { return with_hint(Instruction{ mnemonic = .LEAVE, operand_count = 0, ops = {{}, {}, {}, {}} }, 2398) } -emit_leave_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_leave_none()) } +emit_leave_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_leave_none()) } inst_xlat_none :: #force_inline proc "contextless" () -> Instruction { return with_hint(Instruction{ mnemonic = .XLAT, operand_count = 0, ops = {{}, {}, {}, {}} }, 2399) } -emit_xlat_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_xlat_none()) } +emit_xlat_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_xlat_none()) } inst_xlatb_none :: #force_inline proc "contextless" () -> Instruction { return with_hint(Instruction{ mnemonic = .XLATB, operand_count = 0, ops = {{}, {}, {}, {}} }, 2400) } -emit_xlatb_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_xlatb_none()) } +emit_xlatb_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_xlatb_none()) } inst_movbe_r16_m16 :: #force_inline proc "contextless" (dst: GPR16, src: Mem16) -> Instruction { return with_hint(Instruction{ mnemonic = .MOVBE, operand_count = 2, ops = {op_gpr16(dst), op_mem(src.mem, 2), {}, {}} }, 2401) } inst_movbe_r32_m32 :: #force_inline proc "contextless" (dst: GPR32, src: Mem32) -> Instruction { return with_hint(Instruction{ mnemonic = .MOVBE, operand_count = 2, ops = {op_gpr32(dst), op_mem(src.mem, 4), {}, {}} }, 2402) } inst_movbe_r64_m64 :: #force_inline proc "contextless" (dst: GPR64, src: Mem64) -> Instruction { return with_hint(Instruction{ mnemonic = .MOVBE, operand_count = 2, ops = {op_gpr64(dst), op_mem(src.mem, 8), {}, {}} }, 2403) } inst_movbe_m16_r16 :: #force_inline proc "contextless" (dst: Mem16, src: GPR16) -> Instruction { return with_hint(Instruction{ mnemonic = .MOVBE, operand_count = 2, ops = {op_mem(dst.mem, 2), op_gpr16(src), {}, {}} }, 2404) } inst_movbe_m32_r32 :: #force_inline proc "contextless" (dst: Mem32, src: GPR32) -> Instruction { return with_hint(Instruction{ mnemonic = .MOVBE, operand_count = 2, ops = {op_mem(dst.mem, 4), op_gpr32(src), {}, {}} }, 2405) } inst_movbe_m64_r64 :: #force_inline proc "contextless" (dst: Mem64, src: GPR64) -> Instruction { return with_hint(Instruction{ mnemonic = .MOVBE, operand_count = 2, ops = {op_mem(dst.mem, 8), op_gpr64(src), {}, {}} }, 2406) } -emit_movbe_r16_m16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR16, src: Mem16) { append(instructions, inst_movbe_r16_m16(dst, src)) } -emit_movbe_r32_m32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: Mem32) { append(instructions, inst_movbe_r32_m32(dst, src)) } -emit_movbe_r64_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: Mem64) { append(instructions, inst_movbe_r64_m64(dst, src)) } -emit_movbe_m16_r16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem16, src: GPR16) { append(instructions, inst_movbe_m16_r16(dst, src)) } -emit_movbe_m32_r32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem32, src: GPR32) { append(instructions, inst_movbe_m32_r32(dst, src)) } -emit_movbe_m64_r64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem64, src: GPR64) { append(instructions, inst_movbe_m64_r64(dst, src)) } +emit_movbe_r16_m16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR16, src: Mem16) { append_elem(instructions, inst_movbe_r16_m16(dst, src)) } +emit_movbe_r32_m32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32, src: Mem32) { append_elem(instructions, inst_movbe_r32_m32(dst, src)) } +emit_movbe_r64_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: Mem64) { append_elem(instructions, inst_movbe_r64_m64(dst, src)) } +emit_movbe_m16_r16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem16, src: GPR16) { append_elem(instructions, inst_movbe_m16_r16(dst, src)) } +emit_movbe_m32_r32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem32, src: GPR32) { append_elem(instructions, inst_movbe_m32_r32(dst, src)) } +emit_movbe_m64_r64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem64, src: GPR64) { append_elem(instructions, inst_movbe_m64_r64(dst, src)) } inst_rdrand_r16 :: #force_inline proc "contextless" (dst: GPR16) -> Instruction { return with_hint(Instruction{ mnemonic = .RDRAND, operand_count = 1, ops = {op_gpr16(dst), {}, {}, {}} }, 2407) } inst_rdrand_r32 :: #force_inline proc "contextless" (dst: GPR32) -> Instruction { return with_hint(Instruction{ mnemonic = .RDRAND, operand_count = 1, ops = {op_gpr32(dst), {}, {}, {}} }, 2408) } inst_rdrand_r64 :: #force_inline proc "contextless" (dst: GPR64) -> Instruction { return with_hint(Instruction{ mnemonic = .RDRAND, operand_count = 1, ops = {op_gpr64(dst), {}, {}, {}} }, 2409) } -emit_rdrand_r16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR16) { append(instructions, inst_rdrand_r16(dst)) } -emit_rdrand_r32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32) { append(instructions, inst_rdrand_r32(dst)) } -emit_rdrand_r64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64) { append(instructions, inst_rdrand_r64(dst)) } +emit_rdrand_r16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR16) { append_elem(instructions, inst_rdrand_r16(dst)) } +emit_rdrand_r32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32) { append_elem(instructions, inst_rdrand_r32(dst)) } +emit_rdrand_r64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64) { append_elem(instructions, inst_rdrand_r64(dst)) } inst_rdseed_r16 :: #force_inline proc "contextless" (dst: GPR16) -> Instruction { return with_hint(Instruction{ mnemonic = .RDSEED, operand_count = 1, ops = {op_gpr16(dst), {}, {}, {}} }, 2410) } inst_rdseed_r32 :: #force_inline proc "contextless" (dst: GPR32) -> Instruction { return with_hint(Instruction{ mnemonic = .RDSEED, operand_count = 1, ops = {op_gpr32(dst), {}, {}, {}} }, 2411) } inst_rdseed_r64 :: #force_inline proc "contextless" (dst: GPR64) -> Instruction { return with_hint(Instruction{ mnemonic = .RDSEED, operand_count = 1, ops = {op_gpr64(dst), {}, {}, {}} }, 2412) } -emit_rdseed_r16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR16) { append(instructions, inst_rdseed_r16(dst)) } -emit_rdseed_r32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32) { append(instructions, inst_rdseed_r32(dst)) } -emit_rdseed_r64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64) { append(instructions, inst_rdseed_r64(dst)) } +emit_rdseed_r16 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR16) { append_elem(instructions, inst_rdseed_r16(dst)) } +emit_rdseed_r32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32) { append_elem(instructions, inst_rdseed_r32(dst)) } +emit_rdseed_r64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64) { append_elem(instructions, inst_rdseed_r64(dst)) } inst_swapgs_none :: #force_inline proc "contextless" () -> Instruction { return with_hint(Instruction{ mnemonic = .SWAPGS, operand_count = 0, ops = {{}, {}, {}, {}} }, 2413) } -emit_swapgs_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_swapgs_none()) } +emit_swapgs_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_swapgs_none()) } inst_monitor_none :: #force_inline proc "contextless" () -> Instruction { return with_hint(Instruction{ mnemonic = .MONITOR, operand_count = 0, ops = {{}, {}, {}, {}} }, 2414) } -emit_monitor_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_monitor_none()) } +emit_monitor_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_monitor_none()) } inst_mwait_none :: #force_inline proc "contextless" () -> Instruction { return with_hint(Instruction{ mnemonic = .MWAIT, operand_count = 0, ops = {{}, {}, {}, {}} }, 2415) } -emit_mwait_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_mwait_none()) } +emit_mwait_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_mwait_none()) } inst_clac_none :: #force_inline proc "contextless" () -> Instruction { return with_hint(Instruction{ mnemonic = .CLAC, operand_count = 0, ops = {{}, {}, {}, {}} }, 2416) } -emit_clac_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_clac_none()) } +emit_clac_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_clac_none()) } inst_stac_none :: #force_inline proc "contextless" () -> Instruction { return with_hint(Instruction{ mnemonic = .STAC, operand_count = 0, ops = {{}, {}, {}, {}} }, 2417) } -emit_stac_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_stac_none()) } +emit_stac_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_stac_none()) } inst_rdfsbase_r32 :: #force_inline proc "contextless" (dst: GPR32) -> Instruction { return with_hint(Instruction{ mnemonic = .RDFSBASE, operand_count = 1, ops = {op_gpr32(dst), {}, {}, {}} }, 2418) } inst_rdfsbase_r64 :: #force_inline proc "contextless" (dst: GPR64) -> Instruction { return with_hint(Instruction{ mnemonic = .RDFSBASE, operand_count = 1, ops = {op_gpr64(dst), {}, {}, {}} }, 2419) } -emit_rdfsbase_r32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32) { append(instructions, inst_rdfsbase_r32(dst)) } -emit_rdfsbase_r64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64) { append(instructions, inst_rdfsbase_r64(dst)) } +emit_rdfsbase_r32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32) { append_elem(instructions, inst_rdfsbase_r32(dst)) } +emit_rdfsbase_r64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64) { append_elem(instructions, inst_rdfsbase_r64(dst)) } inst_rdgsbase_r32 :: #force_inline proc "contextless" (dst: GPR32) -> Instruction { return with_hint(Instruction{ mnemonic = .RDGSBASE, operand_count = 1, ops = {op_gpr32(dst), {}, {}, {}} }, 2420) } inst_rdgsbase_r64 :: #force_inline proc "contextless" (dst: GPR64) -> Instruction { return with_hint(Instruction{ mnemonic = .RDGSBASE, operand_count = 1, ops = {op_gpr64(dst), {}, {}, {}} }, 2421) } -emit_rdgsbase_r32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32) { append(instructions, inst_rdgsbase_r32(dst)) } -emit_rdgsbase_r64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64) { append(instructions, inst_rdgsbase_r64(dst)) } +emit_rdgsbase_r32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32) { append_elem(instructions, inst_rdgsbase_r32(dst)) } +emit_rdgsbase_r64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64) { append_elem(instructions, inst_rdgsbase_r64(dst)) } inst_wrfsbase_r32 :: #force_inline proc "contextless" (dst: GPR32) -> Instruction { return with_hint(Instruction{ mnemonic = .WRFSBASE, operand_count = 1, ops = {op_gpr32(dst), {}, {}, {}} }, 2422) } inst_wrfsbase_r64 :: #force_inline proc "contextless" (dst: GPR64) -> Instruction { return with_hint(Instruction{ mnemonic = .WRFSBASE, operand_count = 1, ops = {op_gpr64(dst), {}, {}, {}} }, 2423) } -emit_wrfsbase_r32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32) { append(instructions, inst_wrfsbase_r32(dst)) } -emit_wrfsbase_r64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64) { append(instructions, inst_wrfsbase_r64(dst)) } +emit_wrfsbase_r32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32) { append_elem(instructions, inst_wrfsbase_r32(dst)) } +emit_wrfsbase_r64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64) { append_elem(instructions, inst_wrfsbase_r64(dst)) } inst_wrgsbase_r32 :: #force_inline proc "contextless" (dst: GPR32) -> Instruction { return with_hint(Instruction{ mnemonic = .WRGSBASE, operand_count = 1, ops = {op_gpr32(dst), {}, {}, {}} }, 2424) } inst_wrgsbase_r64 :: #force_inline proc "contextless" (dst: GPR64) -> Instruction { return with_hint(Instruction{ mnemonic = .WRGSBASE, operand_count = 1, ops = {op_gpr64(dst), {}, {}, {}} }, 2425) } -emit_wrgsbase_r32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32) { append(instructions, inst_wrgsbase_r32(dst)) } -emit_wrgsbase_r64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64) { append(instructions, inst_wrgsbase_r64(dst)) } +emit_wrgsbase_r32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32) { append_elem(instructions, inst_wrgsbase_r32(dst)) } +emit_wrgsbase_r64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64) { append_elem(instructions, inst_wrgsbase_r64(dst)) } inst_ptwrite_r32 :: #force_inline proc "contextless" (dst: GPR32) -> Instruction { return with_hint(Instruction{ mnemonic = .PTWRITE, operand_count = 1, ops = {op_gpr32(dst), {}, {}, {}} }, 2426) } inst_ptwrite_m32 :: #force_inline proc "contextless" (dst: Mem32) -> Instruction { return with_hint(Instruction{ mnemonic = .PTWRITE, operand_count = 1, ops = {op_mem(dst.mem, 4), {}, {}, {}} }, 2426) } inst_ptwrite_r64 :: #force_inline proc "contextless" (dst: GPR64) -> Instruction { return with_hint(Instruction{ mnemonic = .PTWRITE, operand_count = 1, ops = {op_gpr64(dst), {}, {}, {}} }, 2427) } inst_ptwrite_m64 :: #force_inline proc "contextless" (dst: Mem64) -> Instruction { return with_hint(Instruction{ mnemonic = .PTWRITE, operand_count = 1, ops = {op_mem(dst.mem, 8), {}, {}, {}} }, 2427) } -emit_ptwrite_r32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32) { append(instructions, inst_ptwrite_r32(dst)) } -emit_ptwrite_m32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem32) { append(instructions, inst_ptwrite_m32(dst)) } -emit_ptwrite_r64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64) { append(instructions, inst_ptwrite_r64(dst)) } -emit_ptwrite_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem64) { append(instructions, inst_ptwrite_m64(dst)) } +emit_ptwrite_r32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32) { append_elem(instructions, inst_ptwrite_r32(dst)) } +emit_ptwrite_m32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem32) { append_elem(instructions, inst_ptwrite_m32(dst)) } +emit_ptwrite_r64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64) { append_elem(instructions, inst_ptwrite_r64(dst)) } +emit_ptwrite_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem64) { append_elem(instructions, inst_ptwrite_m64(dst)) } inst_rdpid_r64 :: #force_inline proc "contextless" (dst: GPR64) -> Instruction { return with_hint(Instruction{ mnemonic = .RDPID, operand_count = 1, ops = {op_gpr64(dst), {}, {}, {}} }, 2428) } -emit_rdpid_r64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64) { append(instructions, inst_rdpid_r64(dst)) } +emit_rdpid_r64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64) { append_elem(instructions, inst_rdpid_r64(dst)) } inst_wbnoinvd_none :: #force_inline proc "contextless" () -> Instruction { return with_hint(Instruction{ mnemonic = .WBNOINVD, operand_count = 0, ops = {{}, {}, {}, {}} }, 2429) } -emit_wbnoinvd_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_wbnoinvd_none()) } +emit_wbnoinvd_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_wbnoinvd_none()) } inst_serialize_none :: #force_inline proc "contextless" () -> Instruction { return with_hint(Instruction{ mnemonic = .SERIALIZE, operand_count = 0, ops = {{}, {}, {}, {}} }, 2430) } -emit_serialize_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_serialize_none()) } +emit_serialize_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_serialize_none()) } inst_prefetch_m8 :: #force_inline proc "contextless" (dst: Mem8) -> Instruction { return with_hint(Instruction{ mnemonic = .PREFETCH, operand_count = 1, ops = {op_mem(dst.mem, 1), {}, {}, {}} }, 2431) } -emit_prefetch_m8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem8) { append(instructions, inst_prefetch_m8(dst)) } +emit_prefetch_m8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem8) { append_elem(instructions, inst_prefetch_m8(dst)) } inst_in_imm8 :: #force_inline proc "contextless" (imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .IN, operand_count = 1, ops = {op_imm8(imm), {}, {}, {}} }, 2432) } -emit_in_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i8) { append(instructions, inst_in_imm8(imm)) } +emit_in_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i8) { append_elem(instructions, inst_in_imm8(imm)) } inst_out_imm8 :: #force_inline proc "contextless" (imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .OUT, operand_count = 1, ops = {op_imm8(imm), {}, {}, {}} }, 2438) } -emit_out_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i8) { append(instructions, inst_out_imm8(imm)) } +emit_out_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, imm: i8) { append_elem(instructions, inst_out_imm8(imm)) } inst_tpause_r32 :: #force_inline proc "contextless" (dst: GPR32) -> Instruction { return with_hint(Instruction{ mnemonic = .TPAUSE, operand_count = 1, ops = {op_gpr32(dst), {}, {}, {}} }, 2444) } -emit_tpause_r32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32) { append(instructions, inst_tpause_r32(dst)) } +emit_tpause_r32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32) { append_elem(instructions, inst_tpause_r32(dst)) } inst_umonitor_r64 :: #force_inline proc "contextless" (dst: GPR64) -> Instruction { return with_hint(Instruction{ mnemonic = .UMONITOR, operand_count = 1, ops = {op_gpr64(dst), {}, {}, {}} }, 2445) } -emit_umonitor_r64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64) { append(instructions, inst_umonitor_r64(dst)) } +emit_umonitor_r64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64) { append_elem(instructions, inst_umonitor_r64(dst)) } inst_umwait_r32 :: #force_inline proc "contextless" (dst: GPR32) -> Instruction { return with_hint(Instruction{ mnemonic = .UMWAIT, operand_count = 1, ops = {op_gpr32(dst), {}, {}, {}} }, 2446) } -emit_umwait_r32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32) { append(instructions, inst_umwait_r32(dst)) } +emit_umwait_r32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR32) { append_elem(instructions, inst_umwait_r32(dst)) } inst_movdiri_m32_r32 :: #force_inline proc "contextless" (dst: Mem32, src: GPR32) -> Instruction { return with_hint(Instruction{ mnemonic = .MOVDIRI, operand_count = 2, ops = {op_mem(dst.mem, 4), op_gpr32(src), {}, {}} }, 2447) } inst_movdiri_m64_r64 :: #force_inline proc "contextless" (dst: Mem64, src: GPR64) -> Instruction { return with_hint(Instruction{ mnemonic = .MOVDIRI, operand_count = 2, ops = {op_mem(dst.mem, 8), op_gpr64(src), {}, {}} }, 2448) } -emit_movdiri_m32_r32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem32, src: GPR32) { append(instructions, inst_movdiri_m32_r32(dst, src)) } -emit_movdiri_m64_r64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem64, src: GPR64) { append(instructions, inst_movdiri_m64_r64(dst, src)) } +emit_movdiri_m32_r32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem32, src: GPR32) { append_elem(instructions, inst_movdiri_m32_r32(dst, src)) } +emit_movdiri_m64_r64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem64, src: GPR64) { append_elem(instructions, inst_movdiri_m64_r64(dst, src)) } inst_movdir64b_r64_m512 :: #force_inline proc "contextless" (dst: GPR64, src: Mem512) -> Instruction { return with_hint(Instruction{ mnemonic = .MOVDIR64B, operand_count = 2, ops = {op_gpr64(dst), op_mem(src.mem, 64), {}, {}} }, 2449) } -emit_movdir64b_r64_m512 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: Mem512) { append(instructions, inst_movdir64b_r64_m512(dst, src)) } +emit_movdir64b_r64_m512 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: Mem512) { append_elem(instructions, inst_movdir64b_r64_m512(dst, src)) } inst_enqcmd_r64_m512 :: #force_inline proc "contextless" (dst: GPR64, src: Mem512) -> Instruction { return with_hint(Instruction{ mnemonic = .ENQCMD, operand_count = 2, ops = {op_gpr64(dst), op_mem(src.mem, 64), {}, {}} }, 2450) } -emit_enqcmd_r64_m512 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: Mem512) { append(instructions, inst_enqcmd_r64_m512(dst, src)) } +emit_enqcmd_r64_m512 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: Mem512) { append_elem(instructions, inst_enqcmd_r64_m512(dst, src)) } inst_enqcmds_r64_m512 :: #force_inline proc "contextless" (dst: GPR64, src: Mem512) -> Instruction { return with_hint(Instruction{ mnemonic = .ENQCMDS, operand_count = 2, ops = {op_gpr64(dst), op_mem(src.mem, 64), {}, {}} }, 2451) } -emit_enqcmds_r64_m512 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: Mem512) { append(instructions, inst_enqcmds_r64_m512(dst, src)) } +emit_enqcmds_r64_m512 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: GPR64, src: Mem512) { append_elem(instructions, inst_enqcmds_r64_m512(dst, src)) } inst_aadd_m32_r32 :: #force_inline proc "contextless" (dst: Mem32, src: GPR32) -> Instruction { return with_hint(Instruction{ mnemonic = .AADD, operand_count = 2, ops = {op_mem(dst.mem, 4), op_gpr32(src), {}, {}} }, 2452) } inst_aadd_m64_r64 :: #force_inline proc "contextless" (dst: Mem64, src: GPR64) -> Instruction { return with_hint(Instruction{ mnemonic = .AADD, operand_count = 2, ops = {op_mem(dst.mem, 8), op_gpr64(src), {}, {}} }, 2453) } -emit_aadd_m32_r32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem32, src: GPR32) { append(instructions, inst_aadd_m32_r32(dst, src)) } -emit_aadd_m64_r64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem64, src: GPR64) { append(instructions, inst_aadd_m64_r64(dst, src)) } +emit_aadd_m32_r32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem32, src: GPR32) { append_elem(instructions, inst_aadd_m32_r32(dst, src)) } +emit_aadd_m64_r64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem64, src: GPR64) { append_elem(instructions, inst_aadd_m64_r64(dst, src)) } inst_aand_m32_r32 :: #force_inline proc "contextless" (dst: Mem32, src: GPR32) -> Instruction { return with_hint(Instruction{ mnemonic = .AAND, operand_count = 2, ops = {op_mem(dst.mem, 4), op_gpr32(src), {}, {}} }, 2454) } inst_aand_m64_r64 :: #force_inline proc "contextless" (dst: Mem64, src: GPR64) -> Instruction { return with_hint(Instruction{ mnemonic = .AAND, operand_count = 2, ops = {op_mem(dst.mem, 8), op_gpr64(src), {}, {}} }, 2455) } -emit_aand_m32_r32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem32, src: GPR32) { append(instructions, inst_aand_m32_r32(dst, src)) } -emit_aand_m64_r64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem64, src: GPR64) { append(instructions, inst_aand_m64_r64(dst, src)) } +emit_aand_m32_r32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem32, src: GPR32) { append_elem(instructions, inst_aand_m32_r32(dst, src)) } +emit_aand_m64_r64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem64, src: GPR64) { append_elem(instructions, inst_aand_m64_r64(dst, src)) } inst_aor_m32_r32 :: #force_inline proc "contextless" (dst: Mem32, src: GPR32) -> Instruction { return with_hint(Instruction{ mnemonic = .AOR, operand_count = 2, ops = {op_mem(dst.mem, 4), op_gpr32(src), {}, {}} }, 2456) } inst_aor_m64_r64 :: #force_inline proc "contextless" (dst: Mem64, src: GPR64) -> Instruction { return with_hint(Instruction{ mnemonic = .AOR, operand_count = 2, ops = {op_mem(dst.mem, 8), op_gpr64(src), {}, {}} }, 2457) } -emit_aor_m32_r32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem32, src: GPR32) { append(instructions, inst_aor_m32_r32(dst, src)) } -emit_aor_m64_r64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem64, src: GPR64) { append(instructions, inst_aor_m64_r64(dst, src)) } +emit_aor_m32_r32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem32, src: GPR32) { append_elem(instructions, inst_aor_m32_r32(dst, src)) } +emit_aor_m64_r64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem64, src: GPR64) { append_elem(instructions, inst_aor_m64_r64(dst, src)) } inst_axor_m32_r32 :: #force_inline proc "contextless" (dst: Mem32, src: GPR32) -> Instruction { return with_hint(Instruction{ mnemonic = .AXOR, operand_count = 2, ops = {op_mem(dst.mem, 4), op_gpr32(src), {}, {}} }, 2458) } inst_axor_m64_r64 :: #force_inline proc "contextless" (dst: Mem64, src: GPR64) -> Instruction { return with_hint(Instruction{ mnemonic = .AXOR, operand_count = 2, ops = {op_mem(dst.mem, 8), op_gpr64(src), {}, {}} }, 2459) } -emit_axor_m32_r32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem32, src: GPR32) { append(instructions, inst_axor_m32_r32(dst, src)) } -emit_axor_m64_r64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem64, src: GPR64) { append(instructions, inst_axor_m64_r64(dst, src)) } +emit_axor_m32_r32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem32, src: GPR32) { append_elem(instructions, inst_axor_m32_r32(dst, src)) } +emit_axor_m64_r64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem64, src: GPR64) { append_elem(instructions, inst_axor_m64_r64(dst, src)) } inst_xend_none :: #force_inline proc "contextless" () -> Instruction { return with_hint(Instruction{ mnemonic = .XEND, operand_count = 0, ops = {{}, {}, {}, {}} }, 2460) } -emit_xend_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_xend_none()) } +emit_xend_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_xend_none()) } inst_xtest_none :: #force_inline proc "contextless" () -> Instruction { return with_hint(Instruction{ mnemonic = .XTEST, operand_count = 0, ops = {{}, {}, {}, {}} }, 2461) } -emit_xtest_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_xtest_none()) } +emit_xtest_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_xtest_none()) } inst_vmrun_none :: #force_inline proc "contextless" () -> Instruction { return with_hint(Instruction{ mnemonic = .VMRUN, operand_count = 0, ops = {{}, {}, {}, {}} }, 2462) } -emit_vmrun_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_vmrun_none()) } +emit_vmrun_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_vmrun_none()) } inst_vmmcall_none :: #force_inline proc "contextless" () -> Instruction { return with_hint(Instruction{ mnemonic = .VMMCALL, operand_count = 0, ops = {{}, {}, {}, {}} }, 2463) } -emit_vmmcall_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_vmmcall_none()) } +emit_vmmcall_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_vmmcall_none()) } inst_vmload_none :: #force_inline proc "contextless" () -> Instruction { return with_hint(Instruction{ mnemonic = .VMLOAD, operand_count = 0, ops = {{}, {}, {}, {}} }, 2464) } -emit_vmload_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_vmload_none()) } +emit_vmload_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_vmload_none()) } inst_vmsave_none :: #force_inline proc "contextless" () -> Instruction { return with_hint(Instruction{ mnemonic = .VMSAVE, operand_count = 0, ops = {{}, {}, {}, {}} }, 2465) } -emit_vmsave_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_vmsave_none()) } +emit_vmsave_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_vmsave_none()) } inst_stgi_none :: #force_inline proc "contextless" () -> Instruction { return with_hint(Instruction{ mnemonic = .STGI, operand_count = 0, ops = {{}, {}, {}, {}} }, 2466) } -emit_stgi_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_stgi_none()) } +emit_stgi_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_stgi_none()) } inst_clgi_none :: #force_inline proc "contextless" () -> Instruction { return with_hint(Instruction{ mnemonic = .CLGI, operand_count = 0, ops = {{}, {}, {}, {}} }, 2467) } -emit_clgi_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_clgi_none()) } +emit_clgi_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_clgi_none()) } inst_skinit_none :: #force_inline proc "contextless" () -> Instruction { return with_hint(Instruction{ mnemonic = .SKINIT, operand_count = 0, ops = {{}, {}, {}, {}} }, 2468) } -emit_skinit_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_skinit_none()) } +emit_skinit_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_skinit_none()) } inst_invlpga_none :: #force_inline proc "contextless" () -> Instruction { return with_hint(Instruction{ mnemonic = .INVLPGA, operand_count = 0, ops = {{}, {}, {}, {}} }, 2469) } -emit_invlpga_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_invlpga_none()) } +emit_invlpga_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_invlpga_none()) } inst_invlpgb_none :: #force_inline proc "contextless" () -> Instruction { return with_hint(Instruction{ mnemonic = .INVLPGB, operand_count = 0, ops = {{}, {}, {}, {}} }, 2470) } -emit_invlpgb_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_invlpgb_none()) } +emit_invlpgb_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_invlpgb_none()) } inst_tlbsync_none :: #force_inline proc "contextless" () -> Instruction { return with_hint(Instruction{ mnemonic = .TLBSYNC, operand_count = 0, ops = {{}, {}, {}, {}} }, 2471) } -emit_tlbsync_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_tlbsync_none()) } +emit_tlbsync_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_tlbsync_none()) } inst_pvalidate_none :: #force_inline proc "contextless" () -> Instruction { return with_hint(Instruction{ mnemonic = .PVALIDATE, operand_count = 0, ops = {{}, {}, {}, {}} }, 2472) } -emit_pvalidate_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_pvalidate_none()) } +emit_pvalidate_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_pvalidate_none()) } inst_rmpadjust_none :: #force_inline proc "contextless" () -> Instruction { return with_hint(Instruction{ mnemonic = .RMPADJUST, operand_count = 0, ops = {{}, {}, {}, {}} }, 2473) } -emit_rmpadjust_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_rmpadjust_none()) } +emit_rmpadjust_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_rmpadjust_none()) } inst_rmpupdate_none :: #force_inline proc "contextless" () -> Instruction { return with_hint(Instruction{ mnemonic = .RMPUPDATE, operand_count = 0, ops = {{}, {}, {}, {}} }, 2474) } -emit_rmpupdate_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_rmpupdate_none()) } +emit_rmpupdate_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_rmpupdate_none()) } inst_psmash_none :: #force_inline proc "contextless" () -> Instruction { return with_hint(Instruction{ mnemonic = .PSMASH, operand_count = 0, ops = {{}, {}, {}, {}} }, 2475) } -emit_psmash_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_psmash_none()) } +emit_psmash_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_psmash_none()) } inst_clzero_none :: #force_inline proc "contextless" () -> Instruction { return with_hint(Instruction{ mnemonic = .CLZERO, operand_count = 0, ops = {{}, {}, {}, {}} }, 2476) } -emit_clzero_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_clzero_none()) } +emit_clzero_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_clzero_none()) } inst_monitorx_none :: #force_inline proc "contextless" () -> Instruction { return with_hint(Instruction{ mnemonic = .MONITORX, operand_count = 0, ops = {{}, {}, {}, {}} }, 2477) } -emit_monitorx_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_monitorx_none()) } +emit_monitorx_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_monitorx_none()) } inst_mwaitx_none :: #force_inline proc "contextless" () -> Instruction { return with_hint(Instruction{ mnemonic = .MWAITX, operand_count = 0, ops = {{}, {}, {}, {}} }, 2478) } -emit_mwaitx_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_mwaitx_none()) } +emit_mwaitx_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_mwaitx_none()) } inst_rdpru_none :: #force_inline proc "contextless" () -> Instruction { return with_hint(Instruction{ mnemonic = .RDPRU, operand_count = 0, ops = {{}, {}, {}, {}} }, 2479) } -emit_rdpru_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_rdpru_none()) } +emit_rdpru_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_rdpru_none()) } inst_mcommit_none :: #force_inline proc "contextless" () -> Instruction { return with_hint(Instruction{ mnemonic = .MCOMMIT, operand_count = 0, ops = {{}, {}, {}, {}} }, 2480) } -emit_mcommit_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append(instructions, inst_mcommit_none()) } +emit_mcommit_none :: #force_inline proc(instructions: ^[dynamic]Instruction) { append_elem(instructions, inst_mcommit_none()) } // ============================================================================= // Overload Groups diff --git a/core/rexcode/isa/x86/tools/gen_mnemonic_builders.odin b/core/rexcode/isa/x86/tools/gen_mnemonic_builders.odin index bd266bae7..4e4938a32 100644 --- a/core/rexcode/isa/x86/tools/gen_mnemonic_builders.odin +++ b/core/rexcode/isa/x86/tools/gen_mnemonic_builders.odin @@ -1382,7 +1382,7 @@ generate_emit_helper_call :: proc(sb: ^strings.Builder, entry: Proc_Entry) { case: // Unknown pattern - fall back to append with inst_ call - strings.write_string(sb, "append(instructions, ") + strings.write_string(sb, "append_elem(instructions, ") strings.write_string(sb, entry.proc_name) strings.write_string(sb, "(") for i in 0.. Date: Wed, 30 Sep 2026 19:01:38 +0100 Subject: [PATCH 078/215] Continue to flesh out the new poly-subst engine --- src/check_expr.cpp | 2 +- src/check_type.cpp | 584 ++++++++++++++++++++++++++++++++++++++++----- 2 files changed, 523 insertions(+), 63 deletions(-) diff --git a/src/check_expr.cpp b/src/check_expr.cpp index b55bd5de9..ad91599d5 100644 --- a/src/check_expr.cpp +++ b/src/check_expr.cpp @@ -701,7 +701,7 @@ gb_internal bool find_or_generate_polymorphic_procedure_from_parameters(CheckerC return find_or_generate_polymorphic_procedure(c, base_entity, nullptr, operands, poly_def_node, poly_proc_data); } -gb_internal bool check_type_specialization_to(CheckerContext *c, Type *specialization, Type *type, bool compound, bool modify_type); +gb_internal bool check_type_specialization_to(CheckerContext *c, Type *specialization, Type *type, bool compound, bool modify_type, bool finalize = true); gb_internal bool is_polymorphic_type_assignable(CheckerContext *c, Type *poly, Type *source, bool compound, bool modify_type); gb_internal bool check_cast_internal(CheckerContext *c, Operand *x, Type *type); gb_internal bool check_proc_params_assignable(CheckerContext *c, Type *x, Type *y); diff --git a/src/check_type.cpp b/src/check_type.cpp index df1c8aebc..1901dabbe 100644 --- a/src/check_type.cpp +++ b/src/check_type.cpp @@ -520,7 +520,7 @@ gb_internal Type *check_record_polymorphic_params(CheckerContext *ctx, Ast *poly *is_polymorphic_ = true; can_check_fields = false; } else if (specialization && - !check_type_specialization_to(ctx, specialization, operand.type, false, /*modify_type*/true)) { + !check_type_specialization_to(ctx, specialization, operand.type, false, /*modify_type*/true, /*finalize*/false)) { if (!ctx->no_polymorphic_errors) { gbString t = type_to_string(operand.type); gbString s = type_to_string(specialization); @@ -724,7 +724,7 @@ gb_internal void check_struct_type(CheckerContext *ctx, Type *struct_type, Ast * case_end; } } - + scope_reserve(ctx->scope, min_field_count); // Even a one-field `#raw_union` must be marked. RISC-V psABI excludes unions from the hardware @@ -1561,12 +1561,12 @@ gb_internal void check_bit_set_type(CheckerContext *c, Type *type, Type *named_t } i64 lower = big_int_to_i64(&i); i64 upper = big_int_to_i64(&j); - + i64 actual_lower = lower; i64 bits = MAX_BITS; if (type->BitSet.underlying != nullptr) { bits = 8*type_size_of(type->BitSet.underlying); - + if (lower > 0) { actual_lower = 0; } else if (lower < 0) { @@ -1609,7 +1609,7 @@ gb_internal void check_bit_set_type(CheckerContext *c, Type *type, Type *named_t } } } - + type->BitSet.elem = t; type->BitSet.lower = lower; type->BitSet.upper = upper; @@ -1647,7 +1647,7 @@ gb_internal void check_bit_set_type(CheckerContext *c, Type *type, Type *named_t } GB_ASSERT(lower <= upper); - + bool lower_changed = false; i64 bits = MAX_BITS ; if (bs->underlying != nullptr) { @@ -1660,7 +1660,7 @@ gb_internal void check_bit_set_type(CheckerContext *c, Type *type, Type *named_t } type->BitSet.underlying = u; bits = 8*type_size_of(u); - + if (lower > 0) { lower = 0; lower_changed = true; @@ -1689,7 +1689,7 @@ gb_internal void check_bit_set_type(CheckerContext *c, Type *type, Type *named_t type->BitSet.upper = upper; } } - } + } } @@ -1709,7 +1709,7 @@ gb_internal GenTypesData *gen_types_data_of_specialization(Type *specialization) return nullptr; } -gb_internal bool check_type_specialization_to_internal(CheckerContext *ctx, Type *specialization, Type *type, TypeTuple *s_tuple, TypeTuple *t_tuple, bool modify_type) { +gb_internal bool check_type_specialization_to_internal(CheckerContext *ctx, Type *specialization, Type *type, TypeTuple *s_tuple, TypeTuple *t_tuple, bool modify_type, bool finalize) { GB_ASSERT(t_tuple->variables.count == s_tuple->variables.count); for_array(i, s_tuple->variables) { Entity *s_e = s_tuple->variables[i]; @@ -1741,7 +1741,7 @@ gb_internal bool check_type_specialization_to_internal(CheckerContext *ctx, Type } } - if (modify_type) { + if (modify_type && finalize) { // NOTE(bill): This is needed in order to change the actual type but still have the types defined within it. // `specialization` may already be published in a polymorphic record's gen_types cache; // finalize it under that record's (recursive) gen_types mutex so a concurrent @@ -1755,7 +1755,7 @@ gb_internal bool check_type_specialization_to_internal(CheckerContext *ctx, Type return true; } -gb_internal bool check_type_specialization_to(CheckerContext *ctx, Type *specialization, Type *type, bool compound, bool modify_type) { +gb_internal bool check_type_specialization_to(CheckerContext *ctx, Type *specialization, Type *type, bool compound, bool modify_type, bool finalize) { if (type == nullptr || type == t_invalid) { return true; @@ -1791,7 +1791,7 @@ gb_internal bool check_type_specialization_to(CheckerContext *ctx, Type *special TypeTuple *s_tuple = get_record_polymorphic_params(s); TypeTuple *t_tuple = get_record_polymorphic_params(t); - return check_type_specialization_to_internal(ctx, specialization, type, s_tuple, t_tuple, modify_type); + return check_type_specialization_to_internal(ctx, specialization, type, s_tuple, t_tuple, modify_type, finalize); } } else if (t->kind == Type_Union) { if (t->Union.polymorphic_parent == nullptr && @@ -1808,7 +1808,7 @@ gb_internal bool check_type_specialization_to(CheckerContext *ctx, Type *special TypeTuple *s_tuple = get_record_polymorphic_params(s); TypeTuple *t_tuple = get_record_polymorphic_params(t); - return check_type_specialization_to_internal(ctx, specialization, type, s_tuple, t_tuple, modify_type); + return check_type_specialization_to_internal(ctx, specialization, type, s_tuple, t_tuple, modify_type, finalize); } } @@ -1832,19 +1832,32 @@ gb_internal bool check_type_specialization_to(CheckerContext *ctx, Type *special // Subst_Unhandled and are skipped. No behavior change. This is refactor scaffolding: it runs a // second (constructive) match per instantiation, so set to 0 (or gate to debug) before release. #define PARAPOLY_VERIFY_SUBST 1 +// When 1, the substitution is authoritative for handled patterns: determine_type_from_polymorphic +// binds the poly-scope entities from the PolySubst and returns the constructed type WITHOUT running +// the in-place mutation. When 0, the mutation runs and the subst path only verifies against it. +#define PARAPOLY_SUBST_AUTHORITATIVE 1 -enum SubstResult { Subst_Unhandled, Subst_NoMatch, Subst_Matched }; +enum SubstResult : u8 { + Subst_Unhandled, + Subst_NoMatch, + Subst_Matched, +}; + +enum PolyBindKind : u8 { + PolyBind_Type, + PolyBind_Value, + PolyBind_EnumArray, +}; -enum PolyBindKind { PolyBind_Type, PolyBind_Value, PolyBind_EnumArray }; struct PolyBinding { - Entity *key; + Entity * key; PolyBindKind kind; - Type *type; // PolyBind_Type: bound type; PolyBind_EnumArray: source EnumeratedArray - i64 value; // PolyBind_Value: array count + Type * type; // PolyBind_Type: bound type; PolyBind_EnumArray: source EnumeratedArray + i64 value; // PolyBind_Value: array count + Type * value_type; // PolyBind_Value: entity type the mutation gives the count constant }; struct PolySubst { - PolyBinding items[64]; - isize count; + Array items; }; gb_internal Entity *poly_generic_entity(Type *g) { @@ -1855,9 +1868,9 @@ gb_internal Entity *poly_generic_entity(Type *g) { return scope_lookup(g->Generic.scope, g->Generic.interned_name, 0); } gb_internal PolyBinding *poly_subst_find(PolySubst *s, Entity *key) { - for (isize i = 0; i < s->count; i++) { - if (s->items[i].key == key) { - return &s->items[i]; + for (PolyBinding &b : s->items) { + if (b.key == key) { + return &b; } } return nullptr; @@ -1878,21 +1891,18 @@ gb_internal bool poly_subst_add(PolySubst *s, Entity *key, PolyBinding b) { } return false; } - if (s->count >= gb_count_of(s->items)) { - return false; - } b.key = key; - s->items[s->count++] = b; + array_add(&s->items, b); return true; } gb_internal bool poly_subst_bind_type(PolySubst *s, Entity *key, Type *t) { - return poly_subst_add(s, key, PolyBinding{nullptr, PolyBind_Type, t, 0}); + return poly_subst_add(s, key, PolyBinding{nullptr, PolyBind_Type, t, 0, nullptr}); } -gb_internal bool poly_subst_bind_value(PolySubst *s, Entity *key, i64 v) { - return poly_subst_add(s, key, PolyBinding{nullptr, PolyBind_Value, nullptr, v}); +gb_internal bool poly_subst_bind_value(PolySubst *s, Entity *key, i64 v, Type *value_type) { + return poly_subst_add(s, key, PolyBinding{nullptr, PolyBind_Value, nullptr, v, value_type}); } gb_internal bool poly_subst_bind_enum_array(PolySubst *s, Entity *key, Type *ea) { - return poly_subst_add(s, key, PolyBinding{nullptr, PolyBind_EnumArray, ea, 0}); + return poly_subst_add(s, key, PolyBinding{nullptr, PolyBind_EnumArray, ea, 0, nullptr}); } gb_internal SubstResult subst_unify(CheckerContext *c, Type *pattern, Type *source, PolySubst *subst) { @@ -1901,12 +1911,18 @@ gb_internal SubstResult subst_unify(CheckerContext *c, Type *pattern, Type *sour } switch (pattern->kind) { case Type_Basic: - return are_types_identical(pattern, source) ? Subst_Matched : Subst_NoMatch; + if (are_types_identical(pattern, source)){ + return Subst_Matched; + } + return Subst_NoMatch; case Type_Generic: if (pattern->Generic.specialized != nullptr) { return Subst_Unhandled; } - return poly_subst_bind_type(subst, poly_generic_entity(pattern), default_type(source)) ? Subst_Matched : Subst_NoMatch; + if (poly_subst_bind_type(subst, poly_generic_entity(pattern), default_type(source))){ + return Subst_Matched; + } + return Subst_NoMatch; case Type_Pointer: // old code also allows struct subtyping and Pointer<->MultiPointer; only the plain elem match here if (source->kind != Type_Pointer) { @@ -1954,7 +1970,7 @@ gb_internal SubstResult subst_unify(CheckerContext *c, Type *pattern, Type *sour if (ne == nullptr) { return Subst_Unhandled; } - if (!poly_subst_bind_value(subst, ne, source->Array.count)) { + if (!poly_subst_bind_value(subst, ne, source->Array.count, t_untyped_integer)) { return Subst_NoMatch; } } else if (pattern->Array.count != source->Array.count) { @@ -1989,18 +2005,30 @@ gb_internal SubstResult subst_unify(CheckerContext *c, Type *pattern, Type *sour return Subst_Unhandled; } if (pattern->Matrix.generic_row_count != nullptr) { - if (pattern->Matrix.generic_row_count->Generic.specialized != nullptr) return Subst_Unhandled; + if (pattern->Matrix.generic_row_count->Generic.specialized != nullptr) { + return Subst_Unhandled; + } Entity *re = poly_generic_entity(pattern->Matrix.generic_row_count); - if (re == nullptr) return Subst_Unhandled; - if (!poly_subst_bind_value(subst, re, source->Matrix.row_count)) return Subst_NoMatch; + if (re == nullptr) { + return Subst_Unhandled; + } + if (!poly_subst_bind_value(subst, re, source->Matrix.row_count, t_untyped_integer)) { + return Subst_NoMatch; + } } else if (pattern->Matrix.row_count != source->Matrix.row_count) { return Subst_NoMatch; } if (pattern->Matrix.generic_column_count != nullptr) { - if (pattern->Matrix.generic_column_count->Generic.specialized != nullptr) return Subst_Unhandled; + if (pattern->Matrix.generic_column_count->Generic.specialized != nullptr) { + return Subst_Unhandled; + } Entity *ce = poly_generic_entity(pattern->Matrix.generic_column_count); - if (ce == nullptr) return Subst_Unhandled; - if (!poly_subst_bind_value(subst, ce, source->Matrix.column_count)) return Subst_NoMatch; + if (ce == nullptr) { + return Subst_Unhandled; + } + if (!poly_subst_bind_value(subst, ce, source->Matrix.column_count, t_untyped_integer)) { + return Subst_NoMatch; + } } else if (pattern->Matrix.column_count != source->Matrix.column_count) { return Subst_NoMatch; } @@ -2011,19 +2039,290 @@ gb_internal SubstResult subst_unify(CheckerContext *c, Type *pattern, Type *sour return Subst_Unhandled; } if (pattern->SimdVector.generic_count != nullptr) { - if (pattern->SimdVector.generic_count->Generic.specialized != nullptr) return Subst_Unhandled; + if (pattern->SimdVector.generic_count->Generic.specialized != nullptr) { + return Subst_Unhandled; + } Entity *ne = poly_generic_entity(pattern->SimdVector.generic_count); - if (ne == nullptr) return Subst_Unhandled; - if (!poly_subst_bind_value(subst, ne, source->SimdVector.count)) return Subst_NoMatch; + if (ne == nullptr) { + return Subst_Unhandled; + } + if (!poly_subst_bind_value(subst, ne, source->SimdVector.count, t_untyped_integer)) { + return Subst_NoMatch; + } } else if (pattern->SimdVector.count != source->SimdVector.count) { return Subst_NoMatch; } return subst_unify(c, pattern->SimdVector.elem, source->SimdVector.elem, subst); + case Type_Named: { + if (!is_type_polymorphic(pattern)) { + if (are_types_identical(pattern, source)) { + return Subst_Matched; + } + return Subst_NoMatch; + } + Type *pb = base_type(pattern); + Type *sb = base_type(source); + if (pb->kind != sb->kind) { + return Subst_Unhandled; + } + Type *s_parent = nullptr, *t_parent = nullptr; + TypeTuple *s_tuple = nullptr, *t_tuple = nullptr; + if (pb->kind == Type_Struct) { + s_parent = pb->Struct.polymorphic_parent; + t_parent = sb->Struct.polymorphic_parent; + s_tuple = get_record_polymorphic_params(pb); + t_tuple = get_record_polymorphic_params(sb); + } else if (pb->kind == Type_Union) { + s_parent = pb->Union.polymorphic_parent; + t_parent = sb->Union.polymorphic_parent; + s_tuple = get_record_polymorphic_params(pb); + t_tuple = get_record_polymorphic_params(sb); + } else { + return Subst_Unhandled; + } + if (s_parent == nullptr || s_parent != t_parent || s_tuple == nullptr || t_tuple == nullptr) { + return Subst_Unhandled; + } + if (s_tuple->variables.count != t_tuple->variables.count) { + return Subst_NoMatch; + } + for_array(i, s_tuple->variables) { + Entity *s_e = s_tuple->variables[i]; + Entity *t_e = t_tuple->variables[i]; + Type *st = s_e->type; + if (st->kind == Type_Generic) { + Entity *ge = poly_generic_entity(st); + if (ge == nullptr || st->Generic.specialized != nullptr) { + return Subst_Unhandled; + } + if (t_e->kind == Entity_Constant) { + if (t_e->Constant.value.kind != ExactValue_Integer) { + return Subst_Unhandled; + } + if (!poly_subst_bind_value(subst, ge, big_int_to_i64(&t_e->Constant.value.value_integer), t_e->type)) { + return Subst_NoMatch; + } + } else { + if (!poly_subst_bind_type(subst, ge, default_type(t_e->type))) { + return Subst_NoMatch; + } + } + } else { + SubstResult r = subst_unify(c, st, t_e->type, subst); + if (r != Subst_Matched) { + return r; // NoMatch or Unhandled + } + } + } + return Subst_Matched; + } + case Type_Proc: { + if (source->kind != Type_Proc) { + return Subst_NoMatch; + } + if (pattern->Proc.calling_convention != source->Proc.calling_convention || + pattern->Proc.c_vararg != source->Proc.c_vararg || + pattern->Proc.variadic != source->Proc.variadic || + pattern->Proc.param_count != source->Proc.param_count || + pattern->Proc.result_count != source->Proc.result_count) { + return Subst_NoMatch; + } + for (i32 i = 0; i < pattern->Proc.param_count; i++) { + SubstResult r = subst_unify(c, pattern->Proc.params->Tuple.variables[i]->type, + source->Proc.params->Tuple.variables[i]->type, subst); + if (r != Subst_Matched) { + return Subst_Unhandled; // param context allows assignability, defer to the mutator + } + } + for (i32 i = 0; i < pattern->Proc.result_count; i++) { + SubstResult r = subst_unify(c, pattern->Proc.results->Tuple.variables[i]->type, + source->Proc.results->Tuple.variables[i]->type, subst); + if (r != Subst_Matched) { + return Subst_Unhandled; + } + } + return Subst_Matched; + } + case Type_Union: { + if (source->kind != Type_Union) { + return Subst_NoMatch; + } + if (pattern->Union.variants.count != source->Union.variants.count) { + return Subst_NoMatch; + } + for_array(i, pattern->Union.variants) { + SubstResult r = subst_unify(c, pattern->Union.variants[i], source->Union.variants[i], subst); + if (r != Subst_Matched) { + return Subst_Unhandled; // variant context allows assignability, defer to the mutator + } + } + return Subst_Matched; + } + case Type_SoaPointer: + if (source->kind != Type_SoaPointer) { + return Subst_Unhandled; + } + if (base_type(pattern->SoaPointer.elem)->kind == Type_Struct) { + return Subst_Unhandled; // subtype path, handled by the mutator + } + return subst_unify(c, pattern->SoaPointer.elem, source->SoaPointer.elem, subst); + case Type_FixedCapacityDynamicArray: + if (source->kind != Type_FixedCapacityDynamicArray) { + return Subst_NoMatch; + } + if (pattern->FixedCapacityDynamicArray.generic_capacity != nullptr) { + if (pattern->FixedCapacityDynamicArray.generic_capacity->Generic.specialized != nullptr) { + return Subst_Unhandled; + } + Entity *ne = poly_generic_entity(pattern->FixedCapacityDynamicArray.generic_capacity); + if (ne == nullptr) { + return Subst_Unhandled; + } + if (!poly_subst_bind_value(subst, ne, source->FixedCapacityDynamicArray.capacity, t_untyped_integer)) { + return Subst_NoMatch; + } + } else if (pattern->FixedCapacityDynamicArray.capacity != source->FixedCapacityDynamicArray.capacity) { + return Subst_NoMatch; + } + return subst_unify(c, pattern->FixedCapacityDynamicArray.elem, source->FixedCapacityDynamicArray.elem, subst); + case Type_EnumeratedArray: { + if (source->kind != Type_EnumeratedArray) { + return Subst_NoMatch; + } + if (pattern->EnumeratedArray.op || source->EnumeratedArray.op) { + return Subst_Unhandled; // sparse/range form, defer to the mutator + } + SubstResult ir = subst_unify(c, pattern->EnumeratedArray.index, source->EnumeratedArray.index, subst); + if (ir != Subst_Matched) { + return ir; + } + return subst_unify(c, pattern->EnumeratedArray.elem, source->EnumeratedArray.elem, subst); + } + case Type_BitSet: { + if (source->kind != Type_BitSet) { + return Subst_NoMatch; + } + if (!is_type_polymorphic(pattern->BitSet.elem)) { + if (pattern->BitSet.upper != source->BitSet.upper || + pattern->BitSet.lower != source->BitSet.lower) { + return Subst_NoMatch; + } + } + SubstResult er = subst_unify(c, pattern->BitSet.elem, source->BitSet.elem, subst); + if (er != Subst_Matched) { + return er; + } + if (pattern->BitSet.underlying != nullptr) { + if (source->BitSet.underlying == nullptr) { + return Subst_NoMatch; + } + SubstResult ur = subst_unify(c, pattern->BitSet.underlying, source->BitSet.underlying, subst); + if (ur != Subst_Matched) { + return ur; + } + } + return Subst_Matched; + } + case Type_BitField: + if (source->kind != Type_BitField) { + return Subst_NoMatch; + } + return subst_unify(c, pattern->BitField.backing_type, source->BitField.backing_type, subst); + case Type_Struct: + if (source->kind == Type_Struct && + pattern->Struct.soa_kind == source->Struct.soa_kind && + pattern->Struct.soa_kind != StructSoa_None) { + return subst_unify(c, pattern->Struct.soa_elem, source->Struct.soa_elem, subst); + } + return Subst_Unhandled; // plain anonymous struct / subtype, handled by the mutator } return Subst_Unhandled; } -gb_internal Type *subst_apply(CheckerContext *c, Type *pattern, PolySubst *subst) { +// Substitution-keyed instantiation lookup: find the already-generated record instantiation whose +// concrete parameters match `pattern`'s parameters under `subst`. Unlike find_polymorphic_record_entity +// this compares types/values directly (no call-site exprs), so it can be driven by a substitution. +// Caller holds the record's gen_types mutex. +gb_internal Entity *find_polymorphic_record_by_subst(GenTypesData *gt, TypeTuple *p_tuple, PolySubst *subst) { + for (Entity *e : gt->types) { + Type *eb = base_type(e->type); + TypeTuple *e_tuple = get_record_polymorphic_params(eb); + if (e_tuple == nullptr || e_tuple->variables.count != p_tuple->variables.count) { + continue; + } + bool match = true; + for_array(i, p_tuple->variables) { + Entity *pp = p_tuple->variables[i]; + Entity *ep = e_tuple->variables[i]; + Type *pt = pp->type; + if (pt != nullptr && pt->kind == Type_Generic) { + PolyBinding *b = poly_subst_find(subst, poly_generic_entity(pt)); + if (b == nullptr) { + match = false; + break; + } + if (b->kind == PolyBind_Value) { + if (ep->kind != Entity_Constant || ep->Constant.value.kind != ExactValue_Integer || + big_int_to_i64(&ep->Constant.value.value_integer) != b->value) { + match = false; + break; + } + } else if (b->kind == PolyBind_Type) { + if (ep->kind != Entity_TypeName || !are_types_identical(ep->type, b->type)) { + match = false; + break; + } + } else { + match = false; + break; + } + } else if (pp->kind == Entity_Constant && ep->kind == Entity_Constant) { + if (!compare_exact_values(Token_CmpEq, pp->Constant.value, ep->Constant.value)) { + match = false; + break; + } + } else if (pp->kind == Entity_TypeName && ep->kind == Entity_TypeName) { + if (!are_types_identical(pp->type, ep->type)) { + match = false; + break; + } + } else { + match = false; + break; + } + } + if (match) { + return e; + } + } + return nullptr; +} + +gb_internal Type *subst_apply(CheckerContext *c, Type *pattern, Type *source, PolySubst *subst); + +gb_internal Type *subst_apply_tuple(CheckerContext *c, Type *pattern_tuple, Type *source_tuple, PolySubst *subst) { + Type *t = alloc_type_tuple(); + isize n = pattern_tuple->Tuple.variables.count; + auto vars = slice_make(permanent_allocator(), n); + for (isize i = 0; i < n; i++) { + Entity *pe = pattern_tuple->Tuple.variables[i]; + Entity *se = source_tuple->Tuple.variables[i]; + Type *nt = subst_apply(c, pe->type, se->type, subst); + Entity *ne; + switch (pe->kind) { + case Entity_Constant: ne = alloc_entity_constant(pe->scope, pe->token, nt, pe->Constant.value); break; + case Entity_TypeName: ne = alloc_entity_type_name(pe->scope, pe->token, nt, EntityState_Resolved); break; + default: ne = alloc_entity_variable(pe->scope, pe->token, nt, EntityState_Resolved); break; + } + ne->flags = pe->flags.load(); + vars[i] = ne; + } + t->Tuple.variables = vars; + t->Tuple.is_packed = pattern_tuple->Tuple.is_packed; + return t; +} + +gb_internal Type *subst_apply(CheckerContext *c, Type *pattern, Type *source, PolySubst *subst) { switch (pattern->kind) { case Type_Basic: return pattern; @@ -2033,26 +2332,38 @@ gb_internal Type *subst_apply(CheckerContext *c, Type *pattern, PolySubst *subst return b->type; } case Type_Pointer: - return alloc_type_pointer(subst_apply(c, pattern->Pointer.elem, subst)); + return alloc_type_pointer(subst_apply(c, pattern->Pointer.elem, source->Pointer.elem, subst)); case Type_MultiPointer: - return alloc_type_multi_pointer(subst_apply(c, pattern->MultiPointer.elem, subst)); + return alloc_type_multi_pointer(subst_apply(c, pattern->MultiPointer.elem, source->MultiPointer.elem, subst)); + case Type_SoaPointer: + return alloc_type_soa_pointer(subst_apply(c, pattern->SoaPointer.elem, source->SoaPointer.elem, subst)); case Type_Slice: - return alloc_type_slice(subst_apply(c, pattern->Slice.elem, subst)); + return alloc_type_slice(subst_apply(c, pattern->Slice.elem, source->Slice.elem, subst)); case Type_DynamicArray: - return alloc_type_dynamic_array(subst_apply(c, pattern->DynamicArray.elem, subst)); + return alloc_type_dynamic_array(subst_apply(c, pattern->DynamicArray.elem, source->DynamicArray.elem, subst)); + case Type_FixedCapacityDynamicArray: { + Type *elem = subst_apply(c, pattern->FixedCapacityDynamicArray.elem, source->FixedCapacityDynamicArray.elem, subst); + i64 cap = pattern->FixedCapacityDynamicArray.capacity; + if (pattern->FixedCapacityDynamicArray.generic_capacity != nullptr) { + PolyBinding *b = poly_subst_find(subst, poly_generic_entity(pattern->FixedCapacityDynamicArray.generic_capacity)); + GB_ASSERT(b != nullptr && b->kind == PolyBind_Value); + cap = b->value; + } + return alloc_type_fixed_capacity_dynamic_array(elem, cap, nullptr); + } case Type_Map: { Type *m = alloc_type(Type_Map); - m->Map.key = subst_apply(c, pattern->Map.key, subst); - m->Map.value = subst_apply(c, pattern->Map.value, subst); + m->Map.key = subst_apply(c, pattern->Map.key, source->Map.key, subst); + m->Map.value = subst_apply(c, pattern->Map.value, source->Map.value, subst); return m; } case Type_Array: { - Type *elem = subst_apply(c, pattern->Array.elem, subst); if (pattern->Array.generic_count != nullptr) { PolyBinding *b = poly_subst_find(subst, poly_generic_entity(pattern->Array.generic_count)); GB_ASSERT(b != nullptr); if (b->kind == PolyBind_EnumArray) { - Type *ea = b->type; + Type *ea = b->type; // source EnumeratedArray captured at unify + Type *elem = subst_apply(c, pattern->Array.elem, ea->EnumeratedArray.elem, subst); Type *r = alloc_type_enumerated_array(elem, ea->EnumeratedArray.index, ea->EnumeratedArray.min_value, ea->EnumeratedArray.max_value, ea->EnumeratedArray.count, ea->EnumeratedArray.op); @@ -2060,12 +2371,19 @@ gb_internal Type *subst_apply(CheckerContext *c, Type *pattern, PolySubst *subst return r; } GB_ASSERT(b->kind == PolyBind_Value); - return alloc_type_array(elem, b->value, nullptr); + return alloc_type_array(subst_apply(c, pattern->Array.elem, source->Array.elem, subst), b->value, nullptr); } - return alloc_type_array(elem, pattern->Array.count, nullptr); + return alloc_type_array(subst_apply(c, pattern->Array.elem, source->Array.elem, subst), pattern->Array.count, nullptr); + } + case Type_EnumeratedArray: { + Type *elem = subst_apply(c, pattern->EnumeratedArray.elem, source->EnumeratedArray.elem, subst); + Type *index = subst_apply(c, pattern->EnumeratedArray.index, source->EnumeratedArray.index, subst); + return alloc_type_enumerated_array(elem, index, + pattern->EnumeratedArray.min_value, pattern->EnumeratedArray.max_value, + pattern->EnumeratedArray.count, pattern->EnumeratedArray.op); } case Type_Matrix: { - Type *elem = subst_apply(c, pattern->Matrix.elem, subst); + Type *elem = subst_apply(c, pattern->Matrix.elem, source->Matrix.elem, subst); i64 rc = pattern->Matrix.row_count; i64 cc = pattern->Matrix.column_count; if (pattern->Matrix.generic_row_count != nullptr) { @@ -2081,7 +2399,7 @@ gb_internal Type *subst_apply(CheckerContext *c, Type *pattern, PolySubst *subst return alloc_type_matrix(elem, rc, cc, nullptr, nullptr, pattern->Matrix.is_row_major); } case Type_SimdVector: { - Type *elem = subst_apply(c, pattern->SimdVector.elem, subst); + Type *elem = subst_apply(c, pattern->SimdVector.elem, source->SimdVector.elem, subst); i64 count = pattern->SimdVector.count; if (pattern->SimdVector.generic_count != nullptr) { PolyBinding *b = poly_subst_find(subst, poly_generic_entity(pattern->SimdVector.generic_count)); @@ -2090,11 +2408,136 @@ gb_internal Type *subst_apply(CheckerContext *c, Type *pattern, PolySubst *subst } return alloc_type_simd_vector(count, elem, nullptr); } + case Type_Proc: { + // Reproduce the mutator: keep the pattern's proc properties, substitute param/result types. + Type *r = alloc_type(Type_Proc); + r->Proc = pattern->Proc; + r->Proc.params = pattern->Proc.params ? subst_apply_tuple(c, pattern->Proc.params, source->Proc.params, subst) : nullptr; + r->Proc.results = pattern->Proc.results ? subst_apply_tuple(c, pattern->Proc.results, source->Proc.results, subst) : nullptr; + r->Proc.is_polymorphic = false; + r->Proc.is_poly_specialized = false; + return r; + } + case Type_Union: { + Type *r = alloc_type(Type_Union); + r->Union.node = pattern->Union.node; + r->Union.scope = pattern->Union.scope; + r->Union.custom_align = pattern->Union.custom_align; + r->Union.kind = pattern->Union.kind; + r->Union.variant_block_size.store(pattern->Union.variant_block_size.load()); + r->Union.tag_size.store(pattern->Union.tag_size.load()); + isize n = pattern->Union.variants.count; + auto vars = slice_make(permanent_allocator(), n); + for (isize i = 0; i < n; i++) { + vars[i] = subst_apply(c, pattern->Union.variants[i], source->Union.variants[i], subst); + } + r->Union.variants = vars; + wait_signal_set(&r->Union.variants_wait_signal); + wait_signal_set(&r->Union.polymorphic_wait_signal); + return r; + } + case Type_BitSet: + // bit_set has source-derived bounds/underlying; unify has verified the structural match, so the + // resolved type is the (already concrete) source. + return source; + case Type_BitField: { + Type *r = alloc_type_bit_field(); + r->BitField.backing_type = subst_apply(c, pattern->BitField.backing_type, source->BitField.backing_type, subst); + r->BitField.fields = pattern->BitField.fields; + r->BitField.tags = pattern->BitField.tags; + r->BitField.bit_sizes = pattern->BitField.bit_sizes; + r->BitField.bit_offsets = pattern->BitField.bit_offsets; + r->BitField.scope = pattern->BitField.scope; + r->BitField.node = pattern->BitField.node; + return r; + } + case Type_Struct: { + Type *elem = subst_apply(c, pattern->Struct.soa_elem, source->Struct.soa_elem, subst); + switch (pattern->Struct.soa_kind) { + case StructSoa_Fixed: return make_soa_struct_fixed(c, nullptr, pattern->Struct.node, elem, pattern->Struct.soa_count, nullptr); + case StructSoa_Slice: return make_soa_struct_slice(c, nullptr, pattern->Struct.node, elem); + case StructSoa_Dynamic: return make_soa_struct_dynamic_array(c, nullptr, pattern->Struct.node, elem); + } + GB_PANIC("subst_apply: unhandled soa struct kind"); + return nullptr; + } + case Type_Named: { + if (!is_type_polymorphic(pattern)) { + return pattern; + } + Type *pb = base_type(pattern); + Type *orig = nullptr; + TypeTuple *p_tuple = get_record_polymorphic_params(pb); + if (pb->kind == Type_Struct) { + orig = pb->Struct.polymorphic_parent; + } else if (pb->kind == Type_Union) { + orig = pb->Union.polymorphic_parent; + } + GB_ASSERT(orig != nullptr && p_tuple != nullptr); + GenTypesData *gt = ensure_polymorphic_record_entity_has_gen_types(c, orig); + mutex_lock(>->mutex); + Entity *found = find_polymorphic_record_by_subst(gt, p_tuple, subst); + mutex_unlock(>->mutex); + GB_ASSERT_MSG(found != nullptr, "subst_apply: no instantiation found for '%s'", type_to_string(pattern)); + return found->type; + } } GB_PANIC("subst_apply: unhandled kind"); return nullptr; } +// Bind each poly-scope entity to its substitution value, replacing the side effects the in-place +// mutation used to perform (polymorphic_assign_index's entity flip, the $T node rewrite, the +// enum-array alias). Used when the substitution is authoritative for a pattern. +gb_internal void subst_bind_entities(PolySubst *subst) { + for (PolyBinding &b : subst->items) { + Entity *e = b.key; + switch (b.kind) { + case PolyBind_Type: + e->type = b.type; + break; + case PolyBind_Value: + e->kind = Entity_Constant; + e->Constant.value = exact_value_i64(b.value); + e->type = b.value_type; + break; + case PolyBind_EnumArray: + e->kind = Entity_TypeName; + e->TypeName.is_type_alias = true; + e->type = b.type->EnumeratedArray.index; + break; + } + } +} + +#if PARAPOLY_VERIFY_SUBST +// Read-only: assert that the in-place mutation bound each poly-scope entity to exactly what the +// substitution captured. This is the entity-level analogue of the apply-reproduction check; once it +// holds everywhere, entity binding can be driven from the PolySubst and the mutation removed. +gb_internal void subst_verify_entities(PolySubst *subst) { + for (PolyBinding &b : subst->items) { + Entity *e = b.key; + switch (b.kind) { + case PolyBind_Type: + GB_ASSERT_MSG(e->type != nullptr && are_types_identical(e->type, b.type), + "parapoly subst entity type mismatch for '%.*s'", LIT(e->token.string)); + break; + case PolyBind_Value: + GB_ASSERT_MSG(e->kind == Entity_Constant && e->Constant.value.kind == ExactValue_Integer && + big_int_to_i64(&e->Constant.value.value_integer) == b.value && + are_types_identical(e->type, b.value_type), + "parapoly subst entity value mismatch for '%.*s'", LIT(e->token.string)); + break; + case PolyBind_EnumArray: + GB_ASSERT_MSG(e->kind == Entity_TypeName && e->type != nullptr && + are_types_identical(e->type, b.type->EnumeratedArray.index), + "parapoly subst entity enum-array mismatch for '%.*s'", LIT(e->token.string)); + break; + } + } +} +#endif + gb_internal Type *determine_type_from_polymorphic(CheckerContext *ctx, Type *poly_type, Operand const &operand) { bool modify_type = !ctx->no_polymorphic_errors; bool show_error = modify_type && !ctx->hide_polymorphic_errors; @@ -2118,29 +2561,42 @@ gb_internal Type *determine_type_from_polymorphic(CheckerContext *ctx, Type *pol #if PARAPOLY_VERIFY_SUBST PolySubst verify_subst = {}; + verify_subst.items.allocator = heap_allocator(); + defer (array_free(&verify_subst.items)); SubstResult verify_ur = Subst_Unhandled; Type *verify_applied = nullptr; if (modify_type) { verify_ur = subst_unify(ctx, poly_type, operand.type, &verify_subst); if (verify_ur == Subst_Matched) { - verify_applied = subst_apply(ctx, poly_type, &verify_subst); + verify_applied = subst_apply(ctx, poly_type, operand.type, &verify_subst); } } + #if PARAPOLY_SUBST_AUTHORITATIVE + if (verify_ur == Subst_Matched) { + // Substitution is authoritative: bind the poly-scope entities and return the constructed + // type; the in-place mutation is not run. (A handled NoMatch falls through and the mutation + // will also fail, reaching the error path.) + subst_bind_entities(&verify_subst); + return verify_applied; + } + #endif #endif if (is_polymorphic_type_assignable(ctx, poly_type, operand.type, false, modify_type)) { - #if PARAPOLY_VERIFY_SUBST + #if PARAPOLY_VERIFY_SUBST && !PARAPOLY_SUBST_AUTHORITATIVE if (verify_ur == Subst_Matched) { GB_ASSERT_MSG(are_types_identical(verify_applied, poly_type), "parapoly subst mismatch: applied '%s' vs mutated '%s'", type_to_string(verify_applied), type_to_string(poly_type)); + subst_verify_entities(&verify_subst); + return verify_applied; } else if (verify_ur == Subst_NoMatch) { GB_PANIC("parapoly subst reported NoMatch but in-place match succeeded (result '%s')", type_to_string(poly_type)); } #endif return poly_type; } -#if PARAPOLY_VERIFY_SUBST +#if PARAPOLY_VERIFY_SUBST && !PARAPOLY_SUBST_AUTHORITATIVE if (verify_ur == Subst_Matched) { GB_PANIC("parapoly subst matched but in-place match failed"); } @@ -2583,7 +3039,7 @@ gb_internal Type *check_get_params(CheckerContext *ctx, Scope *scope, Ast *_para } bool modify_type = !ctx->no_polymorphic_errors; - if (specialization != nullptr && !check_type_specialization_to(ctx, specialization, type, false, modify_type)) { + if (specialization != nullptr && !check_type_specialization_to(ctx, specialization, type, false, modify_type, /*finalize*/false)) { if (!ctx->no_polymorphic_errors) { gbString t = type_to_string(type); gbString s = type_to_string(specialization); @@ -3422,7 +3878,9 @@ gb_internal Type *get_map_cell_type(Type *type) { gb_internal void init_map_internal_debug_types(Type *type) { GB_ASSERT(type->kind == Type_Map); GB_ASSERT(t_allocator != nullptr); - if (type->Map.debug_metadata_type != nullptr) return; + if (type->Map.debug_metadata_type != nullptr) { + return; + } Type *key = type->Map.key; Type *value = type->Map.value; @@ -3469,7 +3927,9 @@ gb_internal void init_map_internal_debug_types(Type *type) { gb_internal void init_map_internal_types(Type *type) { GB_ASSERT(type->kind == Type_Map); GB_ASSERT(t_allocator != nullptr); - if (type->Map.lookup_result_type != nullptr) return; + if (type->Map.lookup_result_type != nullptr) { + return; + } Type *key = type->Map.key; Type *value = type->Map.value; From 2c0883b4e8db4de34d708dbb893d546086fe0ded Mon Sep 17 00:00:00 2001 From: Matthias Huerbe Date: Wed, 30 Sep 2026 20:20:54 +0200 Subject: [PATCH 079/215] chenged append to append_elem for spirv ir --- core/rexcode/ir/spirv/builders_gen.odin | 1746 +++++++++++------------ core/rexcode/ir/spirv/tablegen/gen.odin | 2 +- 2 files changed, 874 insertions(+), 874 deletions(-) diff --git a/core/rexcode/ir/spirv/builders_gen.odin b/core/rexcode/ir/spirv/builders_gen.odin index feae2dc73..299102dcc 100644 --- a/core/rexcode/ir/spirv/builders_gen.odin +++ b/core/rexcode/ir/spirv/builders_gen.odin @@ -10,7 +10,7 @@ inst_OpNop :: #force_inline proc "contextless" () -> Operation { } nop :: proc(b: ^Builder) { - append(&b.ops, inst_OpNop()) + append_elem(&b.ops, inst_OpNop()) } inst_OpUndef :: #force_inline proc "contextless" (result_type: Type_Ref, result: Id) -> Operation { @@ -19,7 +19,7 @@ inst_OpUndef :: #force_inline proc "contextless" (result_type: Type_Ref, result: undef :: proc(b: ^Builder, result_type: Type_Ref) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpUndef(result_type, r)) + append_elem(&b.ops, inst_OpUndef(result_type, r)) return r } @@ -30,7 +30,7 @@ inst_OpSourceContinued :: #force_inline proc "contextless" (buf: []Operand, op1: } source_continued :: proc(b: ^Builder, op1: string) { - append(&b.ops, inst_OpSourceContinued(opbuf(b, (len(op1) + 4) / 4), op1)) + append_elem(&b.ops, inst_OpSourceContinued(opbuf(b, (len(op1) + 4) / 4), op1)) } inst_OpSource :: #force_inline proc "contextless" (buf: []Operand, op1: Source_Language, op2: i64, op3: Maybe(Id), op4: Maybe(string)) -> Operation { @@ -43,7 +43,7 @@ inst_OpSource :: #force_inline proc "contextless" (buf: []Operand, op1: Source_L } source :: proc(b: ^Builder, op1: Source_Language, op2: i64, op3: Maybe(Id), op4: Maybe(string)) { - append(&b.ops, inst_OpSource(opbuf(b, 1 + 1 + 1 + (len(op4.? or_else "") + 4) / 4), op1, op2, op3, op4)) + append_elem(&b.ops, inst_OpSource(opbuf(b, 1 + 1 + 1 + (len(op4.? or_else "") + 4) / 4), op1, op2, op3, op4)) } inst_OpSourceExtension :: #force_inline proc "contextless" (buf: []Operand, op1: string) -> Operation { @@ -53,7 +53,7 @@ inst_OpSourceExtension :: #force_inline proc "contextless" (buf: []Operand, op1: } source_extension :: proc(b: ^Builder, op1: string) { - append(&b.ops, inst_OpSourceExtension(opbuf(b, (len(op1) + 4) / 4), op1)) + append_elem(&b.ops, inst_OpSourceExtension(opbuf(b, (len(op1) + 4) / 4), op1)) } inst_OpName :: #force_inline proc "contextless" (buf: []Operand, op1: Id, op2: string) -> Operation { @@ -64,7 +64,7 @@ inst_OpName :: #force_inline proc "contextless" (buf: []Operand, op1: Id, op2: s } name :: proc(b: ^Builder, op1: Id, op2: string) { - append(&b.ops, inst_OpName(opbuf(b, 1 + (len(op2) + 4) / 4), op1, op2)) + append_elem(&b.ops, inst_OpName(opbuf(b, 1 + (len(op2) + 4) / 4), op1, op2)) } inst_OpMemberName :: #force_inline proc "contextless" (buf: []Operand, op1: Id, op2: i64, op3: string) -> Operation { @@ -76,7 +76,7 @@ inst_OpMemberName :: #force_inline proc "contextless" (buf: []Operand, op1: Id, } member_name :: proc(b: ^Builder, op1: Id, op2: i64, op3: string) { - append(&b.ops, inst_OpMemberName(opbuf(b, 1 + 1 + (len(op3) + 4) / 4), op1, op2, op3)) + append_elem(&b.ops, inst_OpMemberName(opbuf(b, 1 + 1 + (len(op3) + 4) / 4), op1, op2, op3)) } inst_OpString :: #force_inline proc "contextless" (buf: []Operand, result: Id, op1: string) -> Operation { @@ -87,7 +87,7 @@ inst_OpString :: #force_inline proc "contextless" (buf: []Operand, result: Id, o string_ :: proc(b: ^Builder, op1: string) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpString(opbuf(b, (len(op1) + 4) / 4), r, op1)) + append_elem(&b.ops, inst_OpString(opbuf(b, (len(op1) + 4) / 4), r, op1)) return r } @@ -100,7 +100,7 @@ inst_OpLine :: #force_inline proc "contextless" (buf: []Operand, op1: Id, op2: i } line :: proc(b: ^Builder, op1: Id, op2: i64, op3: i64) { - append(&b.ops, inst_OpLine(opbuf(b, 1 + 1 + 1), op1, op2, op3)) + append_elem(&b.ops, inst_OpLine(opbuf(b, 1 + 1 + 1), op1, op2, op3)) } inst_OpExtension :: #force_inline proc "contextless" (buf: []Operand, op1: string) -> Operation { @@ -110,7 +110,7 @@ inst_OpExtension :: #force_inline proc "contextless" (buf: []Operand, op1: strin } extension :: proc(b: ^Builder, op1: string) { - append(&b.ops, inst_OpExtension(opbuf(b, (len(op1) + 4) / 4), op1)) + append_elem(&b.ops, inst_OpExtension(opbuf(b, (len(op1) + 4) / 4), op1)) } inst_OpExtInstImport :: #force_inline proc "contextless" (buf: []Operand, result: Id, op1: string) -> Operation { @@ -121,7 +121,7 @@ inst_OpExtInstImport :: #force_inline proc "contextless" (buf: []Operand, result ext_inst_import :: proc(b: ^Builder, op1: string) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpExtInstImport(opbuf(b, (len(op1) + 4) / 4), r, op1)) + append_elem(&b.ops, inst_OpExtInstImport(opbuf(b, (len(op1) + 4) / 4), r, op1)) return r } @@ -135,7 +135,7 @@ inst_OpExtInst :: #force_inline proc "contextless" (buf: []Operand, result_type: ext_inst :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: i64, op3: []Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpExtInst(opbuf(b, 1 + 1 + len(op3)), result_type, r, op1, op2, op3)) + append_elem(&b.ops, inst_OpExtInst(opbuf(b, 1 + 1 + len(op3)), result_type, r, op1, op2, op3)) return r } @@ -147,7 +147,7 @@ inst_OpMemoryModel :: #force_inline proc "contextless" (buf: []Operand, op1: Add } memory_model :: proc(b: ^Builder, op1: Addressing_Model, op2: Memory_Model) { - append(&b.ops, inst_OpMemoryModel(opbuf(b, 1 + 1), op1, op2)) + append_elem(&b.ops, inst_OpMemoryModel(opbuf(b, 1 + 1), op1, op2)) } inst_OpEntryPoint :: #force_inline proc "contextless" (buf: []Operand, op1: Execution_Model, op2: Id, op3: string, op4: []Id) -> Operation { @@ -160,7 +160,7 @@ inst_OpEntryPoint :: #force_inline proc "contextless" (buf: []Operand, op1: Exec } entry_point :: proc(b: ^Builder, op1: Execution_Model, op2: Id, op3: string, op4: []Id) { - append(&b.ops, inst_OpEntryPoint(opbuf(b, 1 + 1 + (len(op3) + 4) / 4 + len(op4)), op1, op2, op3, op4)) + append_elem(&b.ops, inst_OpEntryPoint(opbuf(b, 1 + 1 + (len(op3) + 4) / 4 + len(op4)), op1, op2, op3, op4)) } inst_OpExecutionMode :: #force_inline proc "contextless" (buf: []Operand, op1: Id, op2: Execution_Mode) -> Operation { @@ -171,7 +171,7 @@ inst_OpExecutionMode :: #force_inline proc "contextless" (buf: []Operand, op1: I } execution_mode :: proc(b: ^Builder, op1: Id, op2: Execution_Mode) { - append(&b.ops, inst_OpExecutionMode(opbuf(b, 1 + 1), op1, op2)) + append_elem(&b.ops, inst_OpExecutionMode(opbuf(b, 1 + 1), op1, op2)) } inst_OpCapability :: #force_inline proc "contextless" (buf: []Operand, op1: Capability) -> Operation { @@ -181,7 +181,7 @@ inst_OpCapability :: #force_inline proc "contextless" (buf: []Operand, op1: Capa } capability :: proc(b: ^Builder, op1: Capability) { - append(&b.ops, inst_OpCapability(opbuf(b, 1), op1)) + append_elem(&b.ops, inst_OpCapability(opbuf(b, 1), op1)) } inst_OpTypeVoid :: #force_inline proc "contextless" (result: Id) -> Operation { @@ -190,7 +190,7 @@ inst_OpTypeVoid :: #force_inline proc "contextless" (result: Id) -> Operation { type_void_ :: proc(b: ^Builder) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpTypeVoid(r)) + append_elem(&b.ops, inst_OpTypeVoid(r)) return r } @@ -200,7 +200,7 @@ inst_OpTypeBool :: #force_inline proc "contextless" (result: Id) -> Operation { type_bool_ :: proc(b: ^Builder) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpTypeBool(r)) + append_elem(&b.ops, inst_OpTypeBool(r)) return r } @@ -213,7 +213,7 @@ inst_OpTypeInt :: #force_inline proc "contextless" (buf: []Operand, result: Id, type_int_ :: proc(b: ^Builder, op1: i64, op2: i64) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpTypeInt(opbuf(b, 1 + 1), r, op1, op2)) + append_elem(&b.ops, inst_OpTypeInt(opbuf(b, 1 + 1), r, op1, op2)) return r } @@ -226,7 +226,7 @@ inst_OpTypeFloat :: #force_inline proc "contextless" (buf: []Operand, result: Id type_float_ :: proc(b: ^Builder, op1: i64, op2: Maybe(FP_Encoding)) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpTypeFloat(opbuf(b, 1 + 1), r, op1, op2)) + append_elem(&b.ops, inst_OpTypeFloat(opbuf(b, 1 + 1), r, op1, op2)) return r } @@ -239,7 +239,7 @@ inst_OpTypeVector :: #force_inline proc "contextless" (buf: []Operand, result: I type_vector_ :: proc(b: ^Builder, op1: Id, op2: i64) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpTypeVector(opbuf(b, 1 + 1), r, op1, op2)) + append_elem(&b.ops, inst_OpTypeVector(opbuf(b, 1 + 1), r, op1, op2)) return r } @@ -252,7 +252,7 @@ inst_OpTypeMatrix :: #force_inline proc "contextless" (buf: []Operand, result: I type_matrix :: proc(b: ^Builder, op1: Id, op2: i64) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpTypeMatrix(opbuf(b, 1 + 1), r, op1, op2)) + append_elem(&b.ops, inst_OpTypeMatrix(opbuf(b, 1 + 1), r, op1, op2)) return r } @@ -271,7 +271,7 @@ inst_OpTypeImage :: #force_inline proc "contextless" (buf: []Operand, result: Id type_image :: proc(b: ^Builder, op1: Id, op2: Dim, op3: i64, op4: i64, op5: i64, op6: i64, op7: Image_Format, op8: Maybe(Access_Qualifier)) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpTypeImage(opbuf(b, 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1), r, op1, op2, op3, op4, op5, op6, op7, op8)) + append_elem(&b.ops, inst_OpTypeImage(opbuf(b, 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1), r, op1, op2, op3, op4, op5, op6, op7, op8)) return r } @@ -281,7 +281,7 @@ inst_OpTypeSampler :: #force_inline proc "contextless" (result: Id) -> Operation type_sampler :: proc(b: ^Builder) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpTypeSampler(r)) + append_elem(&b.ops, inst_OpTypeSampler(r)) return r } @@ -293,7 +293,7 @@ inst_OpTypeSampledImage :: #force_inline proc "contextless" (buf: []Operand, res type_sampled_image :: proc(b: ^Builder, op1: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpTypeSampledImage(opbuf(b, 1), r, op1)) + append_elem(&b.ops, inst_OpTypeSampledImage(opbuf(b, 1), r, op1)) return r } @@ -306,7 +306,7 @@ inst_OpTypeArray :: #force_inline proc "contextless" (buf: []Operand, result: Id type_array_ :: proc(b: ^Builder, op1: Id, op2: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpTypeArray(opbuf(b, 1 + 1), r, op1, op2)) + append_elem(&b.ops, inst_OpTypeArray(opbuf(b, 1 + 1), r, op1, op2)) return r } @@ -318,7 +318,7 @@ inst_OpTypeRuntimeArray :: #force_inline proc "contextless" (buf: []Operand, res type_runtime_array :: proc(b: ^Builder, op1: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpTypeRuntimeArray(opbuf(b, 1), r, op1)) + append_elem(&b.ops, inst_OpTypeRuntimeArray(opbuf(b, 1), r, op1)) return r } @@ -330,7 +330,7 @@ inst_OpTypeStruct :: #force_inline proc "contextless" (buf: []Operand, result: I type_struct :: proc(b: ^Builder, op1: []Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpTypeStruct(opbuf(b, len(op1)), r, op1)) + append_elem(&b.ops, inst_OpTypeStruct(opbuf(b, len(op1)), r, op1)) return r } @@ -342,7 +342,7 @@ inst_OpTypeOpaque :: #force_inline proc "contextless" (buf: []Operand, result: I type_opaque :: proc(b: ^Builder, op1: string) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpTypeOpaque(opbuf(b, (len(op1) + 4) / 4), r, op1)) + append_elem(&b.ops, inst_OpTypeOpaque(opbuf(b, (len(op1) + 4) / 4), r, op1)) return r } @@ -355,7 +355,7 @@ inst_OpTypePointer :: #force_inline proc "contextless" (buf: []Operand, result: type_pointer_ :: proc(b: ^Builder, op1: Storage_Class, op2: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpTypePointer(opbuf(b, 1 + 1), r, op1, op2)) + append_elem(&b.ops, inst_OpTypePointer(opbuf(b, 1 + 1), r, op1, op2)) return r } @@ -368,7 +368,7 @@ inst_OpTypeFunction :: #force_inline proc "contextless" (buf: []Operand, result: type_function :: proc(b: ^Builder, op1: Id, op2: []Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpTypeFunction(opbuf(b, 1 + len(op2)), r, op1, op2)) + append_elem(&b.ops, inst_OpTypeFunction(opbuf(b, 1 + len(op2)), r, op1, op2)) return r } @@ -378,7 +378,7 @@ inst_OpTypeEvent :: #force_inline proc "contextless" (result: Id) -> Operation { type_event :: proc(b: ^Builder) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpTypeEvent(r)) + append_elem(&b.ops, inst_OpTypeEvent(r)) return r } @@ -388,7 +388,7 @@ inst_OpTypeDeviceEvent :: #force_inline proc "contextless" (result: Id) -> Opera type_device_event :: proc(b: ^Builder) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpTypeDeviceEvent(r)) + append_elem(&b.ops, inst_OpTypeDeviceEvent(r)) return r } @@ -398,7 +398,7 @@ inst_OpTypeReserveId :: #force_inline proc "contextless" (result: Id) -> Operati type_reserve_id :: proc(b: ^Builder) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpTypeReserveId(r)) + append_elem(&b.ops, inst_OpTypeReserveId(r)) return r } @@ -408,7 +408,7 @@ inst_OpTypeQueue :: #force_inline proc "contextless" (result: Id) -> Operation { type_queue :: proc(b: ^Builder) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpTypeQueue(r)) + append_elem(&b.ops, inst_OpTypeQueue(r)) return r } @@ -420,7 +420,7 @@ inst_OpTypePipe :: #force_inline proc "contextless" (buf: []Operand, result: Id, type_pipe :: proc(b: ^Builder, op1: Access_Qualifier) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpTypePipe(opbuf(b, 1), r, op1)) + append_elem(&b.ops, inst_OpTypePipe(opbuf(b, 1), r, op1)) return r } @@ -432,7 +432,7 @@ inst_OpTypeForwardPointer :: #force_inline proc "contextless" (buf: []Operand, o } type_forward_pointer :: proc(b: ^Builder, op1: Id, op2: Storage_Class) { - append(&b.ops, inst_OpTypeForwardPointer(opbuf(b, 1 + 1), op1, op2)) + append_elem(&b.ops, inst_OpTypeForwardPointer(opbuf(b, 1 + 1), op1, op2)) } inst_OpConstantTrue :: #force_inline proc "contextless" (result_type: Type_Ref, result: Id) -> Operation { @@ -441,7 +441,7 @@ inst_OpConstantTrue :: #force_inline proc "contextless" (result_type: Type_Ref, constant_true :: proc(b: ^Builder, result_type: Type_Ref) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpConstantTrue(result_type, r)) + append_elem(&b.ops, inst_OpConstantTrue(result_type, r)) return r } @@ -451,7 +451,7 @@ inst_OpConstantFalse :: #force_inline proc "contextless" (result_type: Type_Ref, constant_false :: proc(b: ^Builder, result_type: Type_Ref) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpConstantFalse(result_type, r)) + append_elem(&b.ops, inst_OpConstantFalse(result_type, r)) return r } @@ -463,7 +463,7 @@ inst_OpConstant :: #force_inline proc "contextless" (buf: []Operand, result_type constant :: proc(b: ^Builder, result_type: Type_Ref, op1: i64) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpConstant(opbuf(b, 1), result_type, r, op1)) + append_elem(&b.ops, inst_OpConstant(opbuf(b, 1), result_type, r, op1)) return r } @@ -475,7 +475,7 @@ inst_OpConstantComposite :: #force_inline proc "contextless" (buf: []Operand, re constant_composite :: proc(b: ^Builder, result_type: Type_Ref, op1: []Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpConstantComposite(opbuf(b, len(op1)), result_type, r, op1)) + append_elem(&b.ops, inst_OpConstantComposite(opbuf(b, len(op1)), result_type, r, op1)) return r } @@ -489,7 +489,7 @@ inst_OpConstantSampler :: #force_inline proc "contextless" (buf: []Operand, resu constant_sampler :: proc(b: ^Builder, result_type: Type_Ref, op1: Sampler_Addressing_Mode, op2: i64, op3: Sampler_Filter_Mode) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpConstantSampler(opbuf(b, 1 + 1 + 1), result_type, r, op1, op2, op3)) + append_elem(&b.ops, inst_OpConstantSampler(opbuf(b, 1 + 1 + 1), result_type, r, op1, op2, op3)) return r } @@ -499,7 +499,7 @@ inst_OpConstantNull :: #force_inline proc "contextless" (result_type: Type_Ref, constant_null :: proc(b: ^Builder, result_type: Type_Ref) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpConstantNull(result_type, r)) + append_elem(&b.ops, inst_OpConstantNull(result_type, r)) return r } @@ -509,7 +509,7 @@ inst_OpSpecConstantTrue :: #force_inline proc "contextless" (result_type: Type_R spec_constant_true :: proc(b: ^Builder, result_type: Type_Ref) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpSpecConstantTrue(result_type, r)) + append_elem(&b.ops, inst_OpSpecConstantTrue(result_type, r)) return r } @@ -519,7 +519,7 @@ inst_OpSpecConstantFalse :: #force_inline proc "contextless" (result_type: Type_ spec_constant_false :: proc(b: ^Builder, result_type: Type_Ref) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpSpecConstantFalse(result_type, r)) + append_elem(&b.ops, inst_OpSpecConstantFalse(result_type, r)) return r } @@ -531,7 +531,7 @@ inst_OpSpecConstant :: #force_inline proc "contextless" (buf: []Operand, result_ spec_constant :: proc(b: ^Builder, result_type: Type_Ref, op1: i64) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpSpecConstant(opbuf(b, 1), result_type, r, op1)) + append_elem(&b.ops, inst_OpSpecConstant(opbuf(b, 1), result_type, r, op1)) return r } @@ -543,7 +543,7 @@ inst_OpSpecConstantComposite :: #force_inline proc "contextless" (buf: []Operand spec_constant_composite :: proc(b: ^Builder, result_type: Type_Ref, op1: []Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpSpecConstantComposite(opbuf(b, len(op1)), result_type, r, op1)) + append_elem(&b.ops, inst_OpSpecConstantComposite(opbuf(b, len(op1)), result_type, r, op1)) return r } @@ -555,7 +555,7 @@ inst_OpSpecConstantOp :: #force_inline proc "contextless" (buf: []Operand, resul spec_constant_op :: proc(b: ^Builder, result_type: Type_Ref, op1: i64) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpSpecConstantOp(opbuf(b, 1), result_type, r, op1)) + append_elem(&b.ops, inst_OpSpecConstantOp(opbuf(b, 1), result_type, r, op1)) return r } @@ -568,7 +568,7 @@ inst_OpFunction :: #force_inline proc "contextless" (buf: []Operand, result_type function :: proc(b: ^Builder, result_type: Type_Ref, op1: Function_Control, op2: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpFunction(opbuf(b, 1 + 1), result_type, r, op1, op2)) + append_elem(&b.ops, inst_OpFunction(opbuf(b, 1 + 1), result_type, r, op1, op2)) return r } @@ -578,7 +578,7 @@ inst_OpFunctionParameter :: #force_inline proc "contextless" (result_type: Type_ function_parameter :: proc(b: ^Builder, result_type: Type_Ref) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpFunctionParameter(result_type, r)) + append_elem(&b.ops, inst_OpFunctionParameter(result_type, r)) return r } @@ -587,7 +587,7 @@ inst_OpFunctionEnd :: #force_inline proc "contextless" () -> Operation { } function_end :: proc(b: ^Builder) { - append(&b.ops, inst_OpFunctionEnd()) + append_elem(&b.ops, inst_OpFunctionEnd()) } inst_OpFunctionCall :: #force_inline proc "contextless" (buf: []Operand, result_type: Type_Ref, result: Id, op1: Id, op2: []Id) -> Operation { @@ -599,7 +599,7 @@ inst_OpFunctionCall :: #force_inline proc "contextless" (buf: []Operand, result_ function_call :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: []Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpFunctionCall(opbuf(b, 1 + len(op2)), result_type, r, op1, op2)) + append_elem(&b.ops, inst_OpFunctionCall(opbuf(b, 1 + len(op2)), result_type, r, op1, op2)) return r } @@ -612,7 +612,7 @@ inst_OpVariable :: #force_inline proc "contextless" (buf: []Operand, result_type variable :: proc(b: ^Builder, result_type: Type_Ref, op1: Storage_Class, op2: Maybe(Id)) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpVariable(opbuf(b, 1 + 1), result_type, r, op1, op2)) + append_elem(&b.ops, inst_OpVariable(opbuf(b, 1 + 1), result_type, r, op1, op2)) return r } @@ -626,7 +626,7 @@ inst_OpImageTexelPointer :: #force_inline proc "contextless" (buf: []Operand, re image_texel_pointer :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Id, op3: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpImageTexelPointer(opbuf(b, 1 + 1 + 1), result_type, r, op1, op2, op3)) + append_elem(&b.ops, inst_OpImageTexelPointer(opbuf(b, 1 + 1 + 1), result_type, r, op1, op2, op3)) return r } @@ -639,7 +639,7 @@ inst_OpLoad :: #force_inline proc "contextless" (buf: []Operand, result_type: Ty load :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Maybe(Memory_Access)) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpLoad(opbuf(b, 1 + 1), result_type, r, op1, op2)) + append_elem(&b.ops, inst_OpLoad(opbuf(b, 1 + 1), result_type, r, op1, op2)) return r } @@ -652,7 +652,7 @@ inst_OpStore :: #force_inline proc "contextless" (buf: []Operand, op1: Id, op2: } store :: proc(b: ^Builder, op1: Id, op2: Id, op3: Maybe(Memory_Access)) { - append(&b.ops, inst_OpStore(opbuf(b, 1 + 1 + 1), op1, op2, op3)) + append_elem(&b.ops, inst_OpStore(opbuf(b, 1 + 1 + 1), op1, op2, op3)) } inst_OpCopyMemory :: #force_inline proc "contextless" (buf: []Operand, op1: Id, op2: Id, op3: Maybe(Memory_Access), op4: Maybe(Memory_Access)) -> Operation { @@ -665,7 +665,7 @@ inst_OpCopyMemory :: #force_inline proc "contextless" (buf: []Operand, op1: Id, } copy_memory :: proc(b: ^Builder, op1: Id, op2: Id, op3: Maybe(Memory_Access), op4: Maybe(Memory_Access)) { - append(&b.ops, inst_OpCopyMemory(opbuf(b, 1 + 1 + 1 + 1), op1, op2, op3, op4)) + append_elem(&b.ops, inst_OpCopyMemory(opbuf(b, 1 + 1 + 1 + 1), op1, op2, op3, op4)) } inst_OpCopyMemorySized :: #force_inline proc "contextless" (buf: []Operand, op1: Id, op2: Id, op3: Id, op4: Maybe(Memory_Access), op5: Maybe(Memory_Access)) -> Operation { @@ -679,7 +679,7 @@ inst_OpCopyMemorySized :: #force_inline proc "contextless" (buf: []Operand, op1: } copy_memory_sized :: proc(b: ^Builder, op1: Id, op2: Id, op3: Id, op4: Maybe(Memory_Access), op5: Maybe(Memory_Access)) { - append(&b.ops, inst_OpCopyMemorySized(opbuf(b, 1 + 1 + 1 + 1 + 1), op1, op2, op3, op4, op5)) + append_elem(&b.ops, inst_OpCopyMemorySized(opbuf(b, 1 + 1 + 1 + 1 + 1), op1, op2, op3, op4, op5)) } inst_OpAccessChain :: #force_inline proc "contextless" (buf: []Operand, result_type: Type_Ref, result: Id, op1: Id, op2: []Id) -> Operation { @@ -691,7 +691,7 @@ inst_OpAccessChain :: #force_inline proc "contextless" (buf: []Operand, result_t access_chain :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: []Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpAccessChain(opbuf(b, 1 + len(op2)), result_type, r, op1, op2)) + append_elem(&b.ops, inst_OpAccessChain(opbuf(b, 1 + len(op2)), result_type, r, op1, op2)) return r } @@ -704,7 +704,7 @@ inst_OpInBoundsAccessChain :: #force_inline proc "contextless" (buf: []Operand, in_bounds_access_chain :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: []Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpInBoundsAccessChain(opbuf(b, 1 + len(op2)), result_type, r, op1, op2)) + append_elem(&b.ops, inst_OpInBoundsAccessChain(opbuf(b, 1 + len(op2)), result_type, r, op1, op2)) return r } @@ -718,7 +718,7 @@ inst_OpPtrAccessChain :: #force_inline proc "contextless" (buf: []Operand, resul ptr_access_chain :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Id, op3: []Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpPtrAccessChain(opbuf(b, 1 + 1 + len(op3)), result_type, r, op1, op2, op3)) + append_elem(&b.ops, inst_OpPtrAccessChain(opbuf(b, 1 + 1 + len(op3)), result_type, r, op1, op2, op3)) return r } @@ -731,7 +731,7 @@ inst_OpArrayLength :: #force_inline proc "contextless" (buf: []Operand, result_t array_length :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: i64) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpArrayLength(opbuf(b, 1 + 1), result_type, r, op1, op2)) + append_elem(&b.ops, inst_OpArrayLength(opbuf(b, 1 + 1), result_type, r, op1, op2)) return r } @@ -743,7 +743,7 @@ inst_OpGenericPtrMemSemantics :: #force_inline proc "contextless" (buf: []Operan generic_ptr_mem_semantics :: proc(b: ^Builder, result_type: Type_Ref, op1: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpGenericPtrMemSemantics(opbuf(b, 1), result_type, r, op1)) + append_elem(&b.ops, inst_OpGenericPtrMemSemantics(opbuf(b, 1), result_type, r, op1)) return r } @@ -757,7 +757,7 @@ inst_OpInBoundsPtrAccessChain :: #force_inline proc "contextless" (buf: []Operan in_bounds_ptr_access_chain :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Id, op3: []Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpInBoundsPtrAccessChain(opbuf(b, 1 + 1 + len(op3)), result_type, r, op1, op2, op3)) + append_elem(&b.ops, inst_OpInBoundsPtrAccessChain(opbuf(b, 1 + 1 + len(op3)), result_type, r, op1, op2, op3)) return r } @@ -769,7 +769,7 @@ inst_OpDecorate :: #force_inline proc "contextless" (buf: []Operand, op1: Id, op } decorate :: proc(b: ^Builder, op1: Id, op2: Decoration) { - append(&b.ops, inst_OpDecorate(opbuf(b, 1 + 1), op1, op2)) + append_elem(&b.ops, inst_OpDecorate(opbuf(b, 1 + 1), op1, op2)) } inst_OpMemberDecorate :: #force_inline proc "contextless" (buf: []Operand, op1: Id, op2: i64, op3: Decoration) -> Operation { @@ -781,7 +781,7 @@ inst_OpMemberDecorate :: #force_inline proc "contextless" (buf: []Operand, op1: } member_decorate :: proc(b: ^Builder, op1: Id, op2: i64, op3: Decoration) { - append(&b.ops, inst_OpMemberDecorate(opbuf(b, 1 + 1 + 1), op1, op2, op3)) + append_elem(&b.ops, inst_OpMemberDecorate(opbuf(b, 1 + 1 + 1), op1, op2, op3)) } inst_OpDecorationGroup :: #force_inline proc "contextless" (result: Id) -> Operation { @@ -790,7 +790,7 @@ inst_OpDecorationGroup :: #force_inline proc "contextless" (result: Id) -> Opera decoration_group :: proc(b: ^Builder) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpDecorationGroup(r)) + append_elem(&b.ops, inst_OpDecorationGroup(r)) return r } @@ -802,7 +802,7 @@ inst_OpGroupDecorate :: #force_inline proc "contextless" (buf: []Operand, op1: I } group_decorate :: proc(b: ^Builder, op1: Id, op2: []Id) { - append(&b.ops, inst_OpGroupDecorate(opbuf(b, 1 + len(op2)), op1, op2)) + append_elem(&b.ops, inst_OpGroupDecorate(opbuf(b, 1 + len(op2)), op1, op2)) } inst_OpGroupMemberDecorate :: #force_inline proc "contextless" (buf: []Operand, op1: Id, op2: []Pair_Id_Lit) -> Operation { @@ -813,7 +813,7 @@ inst_OpGroupMemberDecorate :: #force_inline proc "contextless" (buf: []Operand, } group_member_decorate :: proc(b: ^Builder, op1: Id, op2: []Pair_Id_Lit) { - append(&b.ops, inst_OpGroupMemberDecorate(opbuf(b, 1 + 2 * len(op2)), op1, op2)) + append_elem(&b.ops, inst_OpGroupMemberDecorate(opbuf(b, 1 + 2 * len(op2)), op1, op2)) } inst_OpVectorExtractDynamic :: #force_inline proc "contextless" (buf: []Operand, result_type: Type_Ref, result: Id, op1: Id, op2: Id) -> Operation { @@ -825,7 +825,7 @@ inst_OpVectorExtractDynamic :: #force_inline proc "contextless" (buf: []Operand, vector_extract_dynamic :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpVectorExtractDynamic(opbuf(b, 1 + 1), result_type, r, op1, op2)) + append_elem(&b.ops, inst_OpVectorExtractDynamic(opbuf(b, 1 + 1), result_type, r, op1, op2)) return r } @@ -839,7 +839,7 @@ inst_OpVectorInsertDynamic :: #force_inline proc "contextless" (buf: []Operand, vector_insert_dynamic :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Id, op3: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpVectorInsertDynamic(opbuf(b, 1 + 1 + 1), result_type, r, op1, op2, op3)) + append_elem(&b.ops, inst_OpVectorInsertDynamic(opbuf(b, 1 + 1 + 1), result_type, r, op1, op2, op3)) return r } @@ -853,7 +853,7 @@ inst_OpVectorShuffle :: #force_inline proc "contextless" (buf: []Operand, result vector_shuffle :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Id, op3: []i64) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpVectorShuffle(opbuf(b, 1 + 1 + len(op3)), result_type, r, op1, op2, op3)) + append_elem(&b.ops, inst_OpVectorShuffle(opbuf(b, 1 + 1 + len(op3)), result_type, r, op1, op2, op3)) return r } @@ -865,7 +865,7 @@ inst_OpCompositeConstruct :: #force_inline proc "contextless" (buf: []Operand, r composite_construct :: proc(b: ^Builder, result_type: Type_Ref, op1: []Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpCompositeConstruct(opbuf(b, len(op1)), result_type, r, op1)) + append_elem(&b.ops, inst_OpCompositeConstruct(opbuf(b, len(op1)), result_type, r, op1)) return r } @@ -878,7 +878,7 @@ inst_OpCompositeExtract :: #force_inline proc "contextless" (buf: []Operand, res composite_extract :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: []i64) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpCompositeExtract(opbuf(b, 1 + len(op2)), result_type, r, op1, op2)) + append_elem(&b.ops, inst_OpCompositeExtract(opbuf(b, 1 + len(op2)), result_type, r, op1, op2)) return r } @@ -892,7 +892,7 @@ inst_OpCompositeInsert :: #force_inline proc "contextless" (buf: []Operand, resu composite_insert :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Id, op3: []i64) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpCompositeInsert(opbuf(b, 1 + 1 + len(op3)), result_type, r, op1, op2, op3)) + append_elem(&b.ops, inst_OpCompositeInsert(opbuf(b, 1 + 1 + len(op3)), result_type, r, op1, op2, op3)) return r } @@ -904,7 +904,7 @@ inst_OpCopyObject :: #force_inline proc "contextless" (buf: []Operand, result_ty copy_object :: proc(b: ^Builder, result_type: Type_Ref, op1: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpCopyObject(opbuf(b, 1), result_type, r, op1)) + append_elem(&b.ops, inst_OpCopyObject(opbuf(b, 1), result_type, r, op1)) return r } @@ -916,7 +916,7 @@ inst_OpTranspose :: #force_inline proc "contextless" (buf: []Operand, result_typ transpose :: proc(b: ^Builder, result_type: Type_Ref, op1: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpTranspose(opbuf(b, 1), result_type, r, op1)) + append_elem(&b.ops, inst_OpTranspose(opbuf(b, 1), result_type, r, op1)) return r } @@ -929,7 +929,7 @@ inst_OpSampledImage :: #force_inline proc "contextless" (buf: []Operand, result_ sampled_image :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpSampledImage(opbuf(b, 1 + 1), result_type, r, op1, op2)) + append_elem(&b.ops, inst_OpSampledImage(opbuf(b, 1 + 1), result_type, r, op1, op2)) return r } @@ -943,7 +943,7 @@ inst_OpImageSampleImplicitLod :: #force_inline proc "contextless" (buf: []Operan image_sample_implicit_lod :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Id, op3: Maybe(Image_Operands)) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpImageSampleImplicitLod(opbuf(b, 1 + 1 + 1), result_type, r, op1, op2, op3)) + append_elem(&b.ops, inst_OpImageSampleImplicitLod(opbuf(b, 1 + 1 + 1), result_type, r, op1, op2, op3)) return r } @@ -957,7 +957,7 @@ inst_OpImageSampleExplicitLod :: #force_inline proc "contextless" (buf: []Operan image_sample_explicit_lod :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Id, op3: Image_Operands) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpImageSampleExplicitLod(opbuf(b, 1 + 1 + 1), result_type, r, op1, op2, op3)) + append_elem(&b.ops, inst_OpImageSampleExplicitLod(opbuf(b, 1 + 1 + 1), result_type, r, op1, op2, op3)) return r } @@ -972,7 +972,7 @@ inst_OpImageSampleDrefImplicitLod :: #force_inline proc "contextless" (buf: []Op image_sample_dref_implicit_lod :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Id, op3: Id, op4: Maybe(Image_Operands)) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpImageSampleDrefImplicitLod(opbuf(b, 1 + 1 + 1 + 1), result_type, r, op1, op2, op3, op4)) + append_elem(&b.ops, inst_OpImageSampleDrefImplicitLod(opbuf(b, 1 + 1 + 1 + 1), result_type, r, op1, op2, op3, op4)) return r } @@ -987,7 +987,7 @@ inst_OpImageSampleDrefExplicitLod :: #force_inline proc "contextless" (buf: []Op image_sample_dref_explicit_lod :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Id, op3: Id, op4: Image_Operands) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpImageSampleDrefExplicitLod(opbuf(b, 1 + 1 + 1 + 1), result_type, r, op1, op2, op3, op4)) + append_elem(&b.ops, inst_OpImageSampleDrefExplicitLod(opbuf(b, 1 + 1 + 1 + 1), result_type, r, op1, op2, op3, op4)) return r } @@ -1001,7 +1001,7 @@ inst_OpImageSampleProjImplicitLod :: #force_inline proc "contextless" (buf: []Op image_sample_proj_implicit_lod :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Id, op3: Maybe(Image_Operands)) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpImageSampleProjImplicitLod(opbuf(b, 1 + 1 + 1), result_type, r, op1, op2, op3)) + append_elem(&b.ops, inst_OpImageSampleProjImplicitLod(opbuf(b, 1 + 1 + 1), result_type, r, op1, op2, op3)) return r } @@ -1015,7 +1015,7 @@ inst_OpImageSampleProjExplicitLod :: #force_inline proc "contextless" (buf: []Op image_sample_proj_explicit_lod :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Id, op3: Image_Operands) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpImageSampleProjExplicitLod(opbuf(b, 1 + 1 + 1), result_type, r, op1, op2, op3)) + append_elem(&b.ops, inst_OpImageSampleProjExplicitLod(opbuf(b, 1 + 1 + 1), result_type, r, op1, op2, op3)) return r } @@ -1030,7 +1030,7 @@ inst_OpImageSampleProjDrefImplicitLod :: #force_inline proc "contextless" (buf: image_sample_proj_dref_implicit_lod :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Id, op3: Id, op4: Maybe(Image_Operands)) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpImageSampleProjDrefImplicitLod(opbuf(b, 1 + 1 + 1 + 1), result_type, r, op1, op2, op3, op4)) + append_elem(&b.ops, inst_OpImageSampleProjDrefImplicitLod(opbuf(b, 1 + 1 + 1 + 1), result_type, r, op1, op2, op3, op4)) return r } @@ -1045,7 +1045,7 @@ inst_OpImageSampleProjDrefExplicitLod :: #force_inline proc "contextless" (buf: image_sample_proj_dref_explicit_lod :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Id, op3: Id, op4: Image_Operands) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpImageSampleProjDrefExplicitLod(opbuf(b, 1 + 1 + 1 + 1), result_type, r, op1, op2, op3, op4)) + append_elem(&b.ops, inst_OpImageSampleProjDrefExplicitLod(opbuf(b, 1 + 1 + 1 + 1), result_type, r, op1, op2, op3, op4)) return r } @@ -1059,7 +1059,7 @@ inst_OpImageFetch :: #force_inline proc "contextless" (buf: []Operand, result_ty image_fetch :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Id, op3: Maybe(Image_Operands)) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpImageFetch(opbuf(b, 1 + 1 + 1), result_type, r, op1, op2, op3)) + append_elem(&b.ops, inst_OpImageFetch(opbuf(b, 1 + 1 + 1), result_type, r, op1, op2, op3)) return r } @@ -1074,7 +1074,7 @@ inst_OpImageGather :: #force_inline proc "contextless" (buf: []Operand, result_t image_gather :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Id, op3: Id, op4: Maybe(Image_Operands)) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpImageGather(opbuf(b, 1 + 1 + 1 + 1), result_type, r, op1, op2, op3, op4)) + append_elem(&b.ops, inst_OpImageGather(opbuf(b, 1 + 1 + 1 + 1), result_type, r, op1, op2, op3, op4)) return r } @@ -1089,7 +1089,7 @@ inst_OpImageDrefGather :: #force_inline proc "contextless" (buf: []Operand, resu image_dref_gather :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Id, op3: Id, op4: Maybe(Image_Operands)) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpImageDrefGather(opbuf(b, 1 + 1 + 1 + 1), result_type, r, op1, op2, op3, op4)) + append_elem(&b.ops, inst_OpImageDrefGather(opbuf(b, 1 + 1 + 1 + 1), result_type, r, op1, op2, op3, op4)) return r } @@ -1103,7 +1103,7 @@ inst_OpImageRead :: #force_inline proc "contextless" (buf: []Operand, result_typ image_read :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Id, op3: Maybe(Image_Operands)) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpImageRead(opbuf(b, 1 + 1 + 1), result_type, r, op1, op2, op3)) + append_elem(&b.ops, inst_OpImageRead(opbuf(b, 1 + 1 + 1), result_type, r, op1, op2, op3)) return r } @@ -1117,7 +1117,7 @@ inst_OpImageWrite :: #force_inline proc "contextless" (buf: []Operand, op1: Id, } image_write :: proc(b: ^Builder, op1: Id, op2: Id, op3: Id, op4: Maybe(Image_Operands)) { - append(&b.ops, inst_OpImageWrite(opbuf(b, 1 + 1 + 1 + 1), op1, op2, op3, op4)) + append_elem(&b.ops, inst_OpImageWrite(opbuf(b, 1 + 1 + 1 + 1), op1, op2, op3, op4)) } inst_OpImage :: #force_inline proc "contextless" (buf: []Operand, result_type: Type_Ref, result: Id, op1: Id) -> Operation { @@ -1128,7 +1128,7 @@ inst_OpImage :: #force_inline proc "contextless" (buf: []Operand, result_type: T image :: proc(b: ^Builder, result_type: Type_Ref, op1: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpImage(opbuf(b, 1), result_type, r, op1)) + append_elem(&b.ops, inst_OpImage(opbuf(b, 1), result_type, r, op1)) return r } @@ -1140,7 +1140,7 @@ inst_OpImageQueryFormat :: #force_inline proc "contextless" (buf: []Operand, res image_query_format :: proc(b: ^Builder, result_type: Type_Ref, op1: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpImageQueryFormat(opbuf(b, 1), result_type, r, op1)) + append_elem(&b.ops, inst_OpImageQueryFormat(opbuf(b, 1), result_type, r, op1)) return r } @@ -1152,7 +1152,7 @@ inst_OpImageQueryOrder :: #force_inline proc "contextless" (buf: []Operand, resu image_query_order :: proc(b: ^Builder, result_type: Type_Ref, op1: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpImageQueryOrder(opbuf(b, 1), result_type, r, op1)) + append_elem(&b.ops, inst_OpImageQueryOrder(opbuf(b, 1), result_type, r, op1)) return r } @@ -1165,7 +1165,7 @@ inst_OpImageQuerySizeLod :: #force_inline proc "contextless" (buf: []Operand, re image_query_size_lod :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpImageQuerySizeLod(opbuf(b, 1 + 1), result_type, r, op1, op2)) + append_elem(&b.ops, inst_OpImageQuerySizeLod(opbuf(b, 1 + 1), result_type, r, op1, op2)) return r } @@ -1177,7 +1177,7 @@ inst_OpImageQuerySize :: #force_inline proc "contextless" (buf: []Operand, resul image_query_size :: proc(b: ^Builder, result_type: Type_Ref, op1: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpImageQuerySize(opbuf(b, 1), result_type, r, op1)) + append_elem(&b.ops, inst_OpImageQuerySize(opbuf(b, 1), result_type, r, op1)) return r } @@ -1190,7 +1190,7 @@ inst_OpImageQueryLod :: #force_inline proc "contextless" (buf: []Operand, result image_query_lod :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpImageQueryLod(opbuf(b, 1 + 1), result_type, r, op1, op2)) + append_elem(&b.ops, inst_OpImageQueryLod(opbuf(b, 1 + 1), result_type, r, op1, op2)) return r } @@ -1202,7 +1202,7 @@ inst_OpImageQueryLevels :: #force_inline proc "contextless" (buf: []Operand, res image_query_levels :: proc(b: ^Builder, result_type: Type_Ref, op1: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpImageQueryLevels(opbuf(b, 1), result_type, r, op1)) + append_elem(&b.ops, inst_OpImageQueryLevels(opbuf(b, 1), result_type, r, op1)) return r } @@ -1214,7 +1214,7 @@ inst_OpImageQuerySamples :: #force_inline proc "contextless" (buf: []Operand, re image_query_samples :: proc(b: ^Builder, result_type: Type_Ref, op1: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpImageQuerySamples(opbuf(b, 1), result_type, r, op1)) + append_elem(&b.ops, inst_OpImageQuerySamples(opbuf(b, 1), result_type, r, op1)) return r } @@ -1226,7 +1226,7 @@ inst_OpConvertFToU :: #force_inline proc "contextless" (buf: []Operand, result_t convert_f_to_u :: proc(b: ^Builder, result_type: Type_Ref, op1: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpConvertFToU(opbuf(b, 1), result_type, r, op1)) + append_elem(&b.ops, inst_OpConvertFToU(opbuf(b, 1), result_type, r, op1)) return r } @@ -1238,7 +1238,7 @@ inst_OpConvertFToS :: #force_inline proc "contextless" (buf: []Operand, result_t convert_f_to_s :: proc(b: ^Builder, result_type: Type_Ref, op1: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpConvertFToS(opbuf(b, 1), result_type, r, op1)) + append_elem(&b.ops, inst_OpConvertFToS(opbuf(b, 1), result_type, r, op1)) return r } @@ -1250,7 +1250,7 @@ inst_OpConvertSToF :: #force_inline proc "contextless" (buf: []Operand, result_t convert_s_to_f :: proc(b: ^Builder, result_type: Type_Ref, op1: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpConvertSToF(opbuf(b, 1), result_type, r, op1)) + append_elem(&b.ops, inst_OpConvertSToF(opbuf(b, 1), result_type, r, op1)) return r } @@ -1262,7 +1262,7 @@ inst_OpConvertUToF :: #force_inline proc "contextless" (buf: []Operand, result_t convert_u_to_f :: proc(b: ^Builder, result_type: Type_Ref, op1: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpConvertUToF(opbuf(b, 1), result_type, r, op1)) + append_elem(&b.ops, inst_OpConvertUToF(opbuf(b, 1), result_type, r, op1)) return r } @@ -1274,7 +1274,7 @@ inst_OpUConvert :: #force_inline proc "contextless" (buf: []Operand, result_type u_convert :: proc(b: ^Builder, result_type: Type_Ref, op1: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpUConvert(opbuf(b, 1), result_type, r, op1)) + append_elem(&b.ops, inst_OpUConvert(opbuf(b, 1), result_type, r, op1)) return r } @@ -1286,7 +1286,7 @@ inst_OpSConvert :: #force_inline proc "contextless" (buf: []Operand, result_type s_convert :: proc(b: ^Builder, result_type: Type_Ref, op1: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpSConvert(opbuf(b, 1), result_type, r, op1)) + append_elem(&b.ops, inst_OpSConvert(opbuf(b, 1), result_type, r, op1)) return r } @@ -1298,7 +1298,7 @@ inst_OpFConvert :: #force_inline proc "contextless" (buf: []Operand, result_type f_convert :: proc(b: ^Builder, result_type: Type_Ref, op1: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpFConvert(opbuf(b, 1), result_type, r, op1)) + append_elem(&b.ops, inst_OpFConvert(opbuf(b, 1), result_type, r, op1)) return r } @@ -1310,7 +1310,7 @@ inst_OpQuantizeToF16 :: #force_inline proc "contextless" (buf: []Operand, result quantize_to_f16 :: proc(b: ^Builder, result_type: Type_Ref, op1: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpQuantizeToF16(opbuf(b, 1), result_type, r, op1)) + append_elem(&b.ops, inst_OpQuantizeToF16(opbuf(b, 1), result_type, r, op1)) return r } @@ -1322,7 +1322,7 @@ inst_OpConvertPtrToU :: #force_inline proc "contextless" (buf: []Operand, result convert_ptr_to_u :: proc(b: ^Builder, result_type: Type_Ref, op1: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpConvertPtrToU(opbuf(b, 1), result_type, r, op1)) + append_elem(&b.ops, inst_OpConvertPtrToU(opbuf(b, 1), result_type, r, op1)) return r } @@ -1334,7 +1334,7 @@ inst_OpSatConvertSToU :: #force_inline proc "contextless" (buf: []Operand, resul sat_convert_s_to_u :: proc(b: ^Builder, result_type: Type_Ref, op1: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpSatConvertSToU(opbuf(b, 1), result_type, r, op1)) + append_elem(&b.ops, inst_OpSatConvertSToU(opbuf(b, 1), result_type, r, op1)) return r } @@ -1346,7 +1346,7 @@ inst_OpSatConvertUToS :: #force_inline proc "contextless" (buf: []Operand, resul sat_convert_u_to_s :: proc(b: ^Builder, result_type: Type_Ref, op1: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpSatConvertUToS(opbuf(b, 1), result_type, r, op1)) + append_elem(&b.ops, inst_OpSatConvertUToS(opbuf(b, 1), result_type, r, op1)) return r } @@ -1358,7 +1358,7 @@ inst_OpConvertUToPtr :: #force_inline proc "contextless" (buf: []Operand, result convert_u_to_ptr :: proc(b: ^Builder, result_type: Type_Ref, op1: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpConvertUToPtr(opbuf(b, 1), result_type, r, op1)) + append_elem(&b.ops, inst_OpConvertUToPtr(opbuf(b, 1), result_type, r, op1)) return r } @@ -1370,7 +1370,7 @@ inst_OpPtrCastToGeneric :: #force_inline proc "contextless" (buf: []Operand, res ptr_cast_to_generic :: proc(b: ^Builder, result_type: Type_Ref, op1: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpPtrCastToGeneric(opbuf(b, 1), result_type, r, op1)) + append_elem(&b.ops, inst_OpPtrCastToGeneric(opbuf(b, 1), result_type, r, op1)) return r } @@ -1382,7 +1382,7 @@ inst_OpGenericCastToPtr :: #force_inline proc "contextless" (buf: []Operand, res generic_cast_to_ptr :: proc(b: ^Builder, result_type: Type_Ref, op1: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpGenericCastToPtr(opbuf(b, 1), result_type, r, op1)) + append_elem(&b.ops, inst_OpGenericCastToPtr(opbuf(b, 1), result_type, r, op1)) return r } @@ -1395,7 +1395,7 @@ inst_OpGenericCastToPtrExplicit :: #force_inline proc "contextless" (buf: []Oper generic_cast_to_ptr_explicit :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Storage_Class) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpGenericCastToPtrExplicit(opbuf(b, 1 + 1), result_type, r, op1, op2)) + append_elem(&b.ops, inst_OpGenericCastToPtrExplicit(opbuf(b, 1 + 1), result_type, r, op1, op2)) return r } @@ -1407,7 +1407,7 @@ inst_OpBitcast :: #force_inline proc "contextless" (buf: []Operand, result_type: bitcast :: proc(b: ^Builder, result_type: Type_Ref, op1: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpBitcast(opbuf(b, 1), result_type, r, op1)) + append_elem(&b.ops, inst_OpBitcast(opbuf(b, 1), result_type, r, op1)) return r } @@ -1419,7 +1419,7 @@ inst_OpSNegate :: #force_inline proc "contextless" (buf: []Operand, result_type: s_negate :: proc(b: ^Builder, result_type: Type_Ref, op1: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpSNegate(opbuf(b, 1), result_type, r, op1)) + append_elem(&b.ops, inst_OpSNegate(opbuf(b, 1), result_type, r, op1)) return r } @@ -1431,7 +1431,7 @@ inst_OpFNegate :: #force_inline proc "contextless" (buf: []Operand, result_type: f_negate :: proc(b: ^Builder, result_type: Type_Ref, op1: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpFNegate(opbuf(b, 1), result_type, r, op1)) + append_elem(&b.ops, inst_OpFNegate(opbuf(b, 1), result_type, r, op1)) return r } @@ -1444,7 +1444,7 @@ inst_OpIAdd :: #force_inline proc "contextless" (buf: []Operand, result_type: Ty i_add :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpIAdd(opbuf(b, 1 + 1), result_type, r, op1, op2)) + append_elem(&b.ops, inst_OpIAdd(opbuf(b, 1 + 1), result_type, r, op1, op2)) return r } @@ -1457,7 +1457,7 @@ inst_OpFAdd :: #force_inline proc "contextless" (buf: []Operand, result_type: Ty f_add :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpFAdd(opbuf(b, 1 + 1), result_type, r, op1, op2)) + append_elem(&b.ops, inst_OpFAdd(opbuf(b, 1 + 1), result_type, r, op1, op2)) return r } @@ -1470,7 +1470,7 @@ inst_OpISub :: #force_inline proc "contextless" (buf: []Operand, result_type: Ty i_sub :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpISub(opbuf(b, 1 + 1), result_type, r, op1, op2)) + append_elem(&b.ops, inst_OpISub(opbuf(b, 1 + 1), result_type, r, op1, op2)) return r } @@ -1483,7 +1483,7 @@ inst_OpFSub :: #force_inline proc "contextless" (buf: []Operand, result_type: Ty f_sub :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpFSub(opbuf(b, 1 + 1), result_type, r, op1, op2)) + append_elem(&b.ops, inst_OpFSub(opbuf(b, 1 + 1), result_type, r, op1, op2)) return r } @@ -1496,7 +1496,7 @@ inst_OpIMul :: #force_inline proc "contextless" (buf: []Operand, result_type: Ty i_mul :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpIMul(opbuf(b, 1 + 1), result_type, r, op1, op2)) + append_elem(&b.ops, inst_OpIMul(opbuf(b, 1 + 1), result_type, r, op1, op2)) return r } @@ -1509,7 +1509,7 @@ inst_OpFMul :: #force_inline proc "contextless" (buf: []Operand, result_type: Ty f_mul :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpFMul(opbuf(b, 1 + 1), result_type, r, op1, op2)) + append_elem(&b.ops, inst_OpFMul(opbuf(b, 1 + 1), result_type, r, op1, op2)) return r } @@ -1522,7 +1522,7 @@ inst_OpUDiv :: #force_inline proc "contextless" (buf: []Operand, result_type: Ty u_div :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpUDiv(opbuf(b, 1 + 1), result_type, r, op1, op2)) + append_elem(&b.ops, inst_OpUDiv(opbuf(b, 1 + 1), result_type, r, op1, op2)) return r } @@ -1535,7 +1535,7 @@ inst_OpSDiv :: #force_inline proc "contextless" (buf: []Operand, result_type: Ty s_div :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpSDiv(opbuf(b, 1 + 1), result_type, r, op1, op2)) + append_elem(&b.ops, inst_OpSDiv(opbuf(b, 1 + 1), result_type, r, op1, op2)) return r } @@ -1548,7 +1548,7 @@ inst_OpFDiv :: #force_inline proc "contextless" (buf: []Operand, result_type: Ty f_div :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpFDiv(opbuf(b, 1 + 1), result_type, r, op1, op2)) + append_elem(&b.ops, inst_OpFDiv(opbuf(b, 1 + 1), result_type, r, op1, op2)) return r } @@ -1561,7 +1561,7 @@ inst_OpUMod :: #force_inline proc "contextless" (buf: []Operand, result_type: Ty u_mod :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpUMod(opbuf(b, 1 + 1), result_type, r, op1, op2)) + append_elem(&b.ops, inst_OpUMod(opbuf(b, 1 + 1), result_type, r, op1, op2)) return r } @@ -1574,7 +1574,7 @@ inst_OpSRem :: #force_inline proc "contextless" (buf: []Operand, result_type: Ty s_rem :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpSRem(opbuf(b, 1 + 1), result_type, r, op1, op2)) + append_elem(&b.ops, inst_OpSRem(opbuf(b, 1 + 1), result_type, r, op1, op2)) return r } @@ -1587,7 +1587,7 @@ inst_OpSMod :: #force_inline proc "contextless" (buf: []Operand, result_type: Ty s_mod :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpSMod(opbuf(b, 1 + 1), result_type, r, op1, op2)) + append_elem(&b.ops, inst_OpSMod(opbuf(b, 1 + 1), result_type, r, op1, op2)) return r } @@ -1600,7 +1600,7 @@ inst_OpFRem :: #force_inline proc "contextless" (buf: []Operand, result_type: Ty f_rem :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpFRem(opbuf(b, 1 + 1), result_type, r, op1, op2)) + append_elem(&b.ops, inst_OpFRem(opbuf(b, 1 + 1), result_type, r, op1, op2)) return r } @@ -1613,7 +1613,7 @@ inst_OpFMod :: #force_inline proc "contextless" (buf: []Operand, result_type: Ty f_mod :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpFMod(opbuf(b, 1 + 1), result_type, r, op1, op2)) + append_elem(&b.ops, inst_OpFMod(opbuf(b, 1 + 1), result_type, r, op1, op2)) return r } @@ -1626,7 +1626,7 @@ inst_OpVectorTimesScalar :: #force_inline proc "contextless" (buf: []Operand, re vector_times_scalar :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpVectorTimesScalar(opbuf(b, 1 + 1), result_type, r, op1, op2)) + append_elem(&b.ops, inst_OpVectorTimesScalar(opbuf(b, 1 + 1), result_type, r, op1, op2)) return r } @@ -1639,7 +1639,7 @@ inst_OpMatrixTimesScalar :: #force_inline proc "contextless" (buf: []Operand, re matrix_times_scalar :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpMatrixTimesScalar(opbuf(b, 1 + 1), result_type, r, op1, op2)) + append_elem(&b.ops, inst_OpMatrixTimesScalar(opbuf(b, 1 + 1), result_type, r, op1, op2)) return r } @@ -1652,7 +1652,7 @@ inst_OpVectorTimesMatrix :: #force_inline proc "contextless" (buf: []Operand, re vector_times_matrix :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpVectorTimesMatrix(opbuf(b, 1 + 1), result_type, r, op1, op2)) + append_elem(&b.ops, inst_OpVectorTimesMatrix(opbuf(b, 1 + 1), result_type, r, op1, op2)) return r } @@ -1665,7 +1665,7 @@ inst_OpMatrixTimesVector :: #force_inline proc "contextless" (buf: []Operand, re matrix_times_vector :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpMatrixTimesVector(opbuf(b, 1 + 1), result_type, r, op1, op2)) + append_elem(&b.ops, inst_OpMatrixTimesVector(opbuf(b, 1 + 1), result_type, r, op1, op2)) return r } @@ -1678,7 +1678,7 @@ inst_OpMatrixTimesMatrix :: #force_inline proc "contextless" (buf: []Operand, re matrix_times_matrix :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpMatrixTimesMatrix(opbuf(b, 1 + 1), result_type, r, op1, op2)) + append_elem(&b.ops, inst_OpMatrixTimesMatrix(opbuf(b, 1 + 1), result_type, r, op1, op2)) return r } @@ -1691,7 +1691,7 @@ inst_OpOuterProduct :: #force_inline proc "contextless" (buf: []Operand, result_ outer_product :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpOuterProduct(opbuf(b, 1 + 1), result_type, r, op1, op2)) + append_elem(&b.ops, inst_OpOuterProduct(opbuf(b, 1 + 1), result_type, r, op1, op2)) return r } @@ -1704,7 +1704,7 @@ inst_OpDot :: #force_inline proc "contextless" (buf: []Operand, result_type: Typ dot :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpDot(opbuf(b, 1 + 1), result_type, r, op1, op2)) + append_elem(&b.ops, inst_OpDot(opbuf(b, 1 + 1), result_type, r, op1, op2)) return r } @@ -1717,7 +1717,7 @@ inst_OpIAddCarry :: #force_inline proc "contextless" (buf: []Operand, result_typ i_add_carry :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpIAddCarry(opbuf(b, 1 + 1), result_type, r, op1, op2)) + append_elem(&b.ops, inst_OpIAddCarry(opbuf(b, 1 + 1), result_type, r, op1, op2)) return r } @@ -1730,7 +1730,7 @@ inst_OpISubBorrow :: #force_inline proc "contextless" (buf: []Operand, result_ty i_sub_borrow :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpISubBorrow(opbuf(b, 1 + 1), result_type, r, op1, op2)) + append_elem(&b.ops, inst_OpISubBorrow(opbuf(b, 1 + 1), result_type, r, op1, op2)) return r } @@ -1743,7 +1743,7 @@ inst_OpUMulExtended :: #force_inline proc "contextless" (buf: []Operand, result_ u_mul_extended :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpUMulExtended(opbuf(b, 1 + 1), result_type, r, op1, op2)) + append_elem(&b.ops, inst_OpUMulExtended(opbuf(b, 1 + 1), result_type, r, op1, op2)) return r } @@ -1756,7 +1756,7 @@ inst_OpSMulExtended :: #force_inline proc "contextless" (buf: []Operand, result_ s_mul_extended :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpSMulExtended(opbuf(b, 1 + 1), result_type, r, op1, op2)) + append_elem(&b.ops, inst_OpSMulExtended(opbuf(b, 1 + 1), result_type, r, op1, op2)) return r } @@ -1768,7 +1768,7 @@ inst_OpAny :: #force_inline proc "contextless" (buf: []Operand, result_type: Typ any_ :: proc(b: ^Builder, result_type: Type_Ref, op1: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpAny(opbuf(b, 1), result_type, r, op1)) + append_elem(&b.ops, inst_OpAny(opbuf(b, 1), result_type, r, op1)) return r } @@ -1780,7 +1780,7 @@ inst_OpAll :: #force_inline proc "contextless" (buf: []Operand, result_type: Typ all :: proc(b: ^Builder, result_type: Type_Ref, op1: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpAll(opbuf(b, 1), result_type, r, op1)) + append_elem(&b.ops, inst_OpAll(opbuf(b, 1), result_type, r, op1)) return r } @@ -1792,7 +1792,7 @@ inst_OpIsNan :: #force_inline proc "contextless" (buf: []Operand, result_type: T is_nan :: proc(b: ^Builder, result_type: Type_Ref, op1: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpIsNan(opbuf(b, 1), result_type, r, op1)) + append_elem(&b.ops, inst_OpIsNan(opbuf(b, 1), result_type, r, op1)) return r } @@ -1804,7 +1804,7 @@ inst_OpIsInf :: #force_inline proc "contextless" (buf: []Operand, result_type: T is_inf :: proc(b: ^Builder, result_type: Type_Ref, op1: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpIsInf(opbuf(b, 1), result_type, r, op1)) + append_elem(&b.ops, inst_OpIsInf(opbuf(b, 1), result_type, r, op1)) return r } @@ -1816,7 +1816,7 @@ inst_OpIsFinite :: #force_inline proc "contextless" (buf: []Operand, result_type is_finite :: proc(b: ^Builder, result_type: Type_Ref, op1: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpIsFinite(opbuf(b, 1), result_type, r, op1)) + append_elem(&b.ops, inst_OpIsFinite(opbuf(b, 1), result_type, r, op1)) return r } @@ -1828,7 +1828,7 @@ inst_OpIsNormal :: #force_inline proc "contextless" (buf: []Operand, result_type is_normal :: proc(b: ^Builder, result_type: Type_Ref, op1: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpIsNormal(opbuf(b, 1), result_type, r, op1)) + append_elem(&b.ops, inst_OpIsNormal(opbuf(b, 1), result_type, r, op1)) return r } @@ -1840,7 +1840,7 @@ inst_OpSignBitSet :: #force_inline proc "contextless" (buf: []Operand, result_ty sign_bit_set :: proc(b: ^Builder, result_type: Type_Ref, op1: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpSignBitSet(opbuf(b, 1), result_type, r, op1)) + append_elem(&b.ops, inst_OpSignBitSet(opbuf(b, 1), result_type, r, op1)) return r } @@ -1853,7 +1853,7 @@ inst_OpLessOrGreater :: #force_inline proc "contextless" (buf: []Operand, result less_or_greater :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpLessOrGreater(opbuf(b, 1 + 1), result_type, r, op1, op2)) + append_elem(&b.ops, inst_OpLessOrGreater(opbuf(b, 1 + 1), result_type, r, op1, op2)) return r } @@ -1866,7 +1866,7 @@ inst_OpOrdered :: #force_inline proc "contextless" (buf: []Operand, result_type: ordered :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpOrdered(opbuf(b, 1 + 1), result_type, r, op1, op2)) + append_elem(&b.ops, inst_OpOrdered(opbuf(b, 1 + 1), result_type, r, op1, op2)) return r } @@ -1879,7 +1879,7 @@ inst_OpUnordered :: #force_inline proc "contextless" (buf: []Operand, result_typ unordered :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpUnordered(opbuf(b, 1 + 1), result_type, r, op1, op2)) + append_elem(&b.ops, inst_OpUnordered(opbuf(b, 1 + 1), result_type, r, op1, op2)) return r } @@ -1892,7 +1892,7 @@ inst_OpLogicalEqual :: #force_inline proc "contextless" (buf: []Operand, result_ logical_equal :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpLogicalEqual(opbuf(b, 1 + 1), result_type, r, op1, op2)) + append_elem(&b.ops, inst_OpLogicalEqual(opbuf(b, 1 + 1), result_type, r, op1, op2)) return r } @@ -1905,7 +1905,7 @@ inst_OpLogicalNotEqual :: #force_inline proc "contextless" (buf: []Operand, resu logical_not_equal :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpLogicalNotEqual(opbuf(b, 1 + 1), result_type, r, op1, op2)) + append_elem(&b.ops, inst_OpLogicalNotEqual(opbuf(b, 1 + 1), result_type, r, op1, op2)) return r } @@ -1918,7 +1918,7 @@ inst_OpLogicalOr :: #force_inline proc "contextless" (buf: []Operand, result_typ logical_or :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpLogicalOr(opbuf(b, 1 + 1), result_type, r, op1, op2)) + append_elem(&b.ops, inst_OpLogicalOr(opbuf(b, 1 + 1), result_type, r, op1, op2)) return r } @@ -1931,7 +1931,7 @@ inst_OpLogicalAnd :: #force_inline proc "contextless" (buf: []Operand, result_ty logical_and :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpLogicalAnd(opbuf(b, 1 + 1), result_type, r, op1, op2)) + append_elem(&b.ops, inst_OpLogicalAnd(opbuf(b, 1 + 1), result_type, r, op1, op2)) return r } @@ -1943,7 +1943,7 @@ inst_OpLogicalNot :: #force_inline proc "contextless" (buf: []Operand, result_ty logical_not :: proc(b: ^Builder, result_type: Type_Ref, op1: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpLogicalNot(opbuf(b, 1), result_type, r, op1)) + append_elem(&b.ops, inst_OpLogicalNot(opbuf(b, 1), result_type, r, op1)) return r } @@ -1957,7 +1957,7 @@ inst_OpSelect :: #force_inline proc "contextless" (buf: []Operand, result_type: select :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Id, op3: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpSelect(opbuf(b, 1 + 1 + 1), result_type, r, op1, op2, op3)) + append_elem(&b.ops, inst_OpSelect(opbuf(b, 1 + 1 + 1), result_type, r, op1, op2, op3)) return r } @@ -1970,7 +1970,7 @@ inst_OpIEqual :: #force_inline proc "contextless" (buf: []Operand, result_type: i_equal :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpIEqual(opbuf(b, 1 + 1), result_type, r, op1, op2)) + append_elem(&b.ops, inst_OpIEqual(opbuf(b, 1 + 1), result_type, r, op1, op2)) return r } @@ -1983,7 +1983,7 @@ inst_OpINotEqual :: #force_inline proc "contextless" (buf: []Operand, result_typ i_not_equal :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpINotEqual(opbuf(b, 1 + 1), result_type, r, op1, op2)) + append_elem(&b.ops, inst_OpINotEqual(opbuf(b, 1 + 1), result_type, r, op1, op2)) return r } @@ -1996,7 +1996,7 @@ inst_OpUGreaterThan :: #force_inline proc "contextless" (buf: []Operand, result_ u_greater_than :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpUGreaterThan(opbuf(b, 1 + 1), result_type, r, op1, op2)) + append_elem(&b.ops, inst_OpUGreaterThan(opbuf(b, 1 + 1), result_type, r, op1, op2)) return r } @@ -2009,7 +2009,7 @@ inst_OpSGreaterThan :: #force_inline proc "contextless" (buf: []Operand, result_ s_greater_than :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpSGreaterThan(opbuf(b, 1 + 1), result_type, r, op1, op2)) + append_elem(&b.ops, inst_OpSGreaterThan(opbuf(b, 1 + 1), result_type, r, op1, op2)) return r } @@ -2022,7 +2022,7 @@ inst_OpUGreaterThanEqual :: #force_inline proc "contextless" (buf: []Operand, re u_greater_than_equal :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpUGreaterThanEqual(opbuf(b, 1 + 1), result_type, r, op1, op2)) + append_elem(&b.ops, inst_OpUGreaterThanEqual(opbuf(b, 1 + 1), result_type, r, op1, op2)) return r } @@ -2035,7 +2035,7 @@ inst_OpSGreaterThanEqual :: #force_inline proc "contextless" (buf: []Operand, re s_greater_than_equal :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpSGreaterThanEqual(opbuf(b, 1 + 1), result_type, r, op1, op2)) + append_elem(&b.ops, inst_OpSGreaterThanEqual(opbuf(b, 1 + 1), result_type, r, op1, op2)) return r } @@ -2048,7 +2048,7 @@ inst_OpULessThan :: #force_inline proc "contextless" (buf: []Operand, result_typ u_less_than :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpULessThan(opbuf(b, 1 + 1), result_type, r, op1, op2)) + append_elem(&b.ops, inst_OpULessThan(opbuf(b, 1 + 1), result_type, r, op1, op2)) return r } @@ -2061,7 +2061,7 @@ inst_OpSLessThan :: #force_inline proc "contextless" (buf: []Operand, result_typ s_less_than :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpSLessThan(opbuf(b, 1 + 1), result_type, r, op1, op2)) + append_elem(&b.ops, inst_OpSLessThan(opbuf(b, 1 + 1), result_type, r, op1, op2)) return r } @@ -2074,7 +2074,7 @@ inst_OpULessThanEqual :: #force_inline proc "contextless" (buf: []Operand, resul u_less_than_equal :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpULessThanEqual(opbuf(b, 1 + 1), result_type, r, op1, op2)) + append_elem(&b.ops, inst_OpULessThanEqual(opbuf(b, 1 + 1), result_type, r, op1, op2)) return r } @@ -2087,7 +2087,7 @@ inst_OpSLessThanEqual :: #force_inline proc "contextless" (buf: []Operand, resul s_less_than_equal :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpSLessThanEqual(opbuf(b, 1 + 1), result_type, r, op1, op2)) + append_elem(&b.ops, inst_OpSLessThanEqual(opbuf(b, 1 + 1), result_type, r, op1, op2)) return r } @@ -2100,7 +2100,7 @@ inst_OpFOrdEqual :: #force_inline proc "contextless" (buf: []Operand, result_typ f_ord_equal :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpFOrdEqual(opbuf(b, 1 + 1), result_type, r, op1, op2)) + append_elem(&b.ops, inst_OpFOrdEqual(opbuf(b, 1 + 1), result_type, r, op1, op2)) return r } @@ -2113,7 +2113,7 @@ inst_OpFUnordEqual :: #force_inline proc "contextless" (buf: []Operand, result_t f_unord_equal :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpFUnordEqual(opbuf(b, 1 + 1), result_type, r, op1, op2)) + append_elem(&b.ops, inst_OpFUnordEqual(opbuf(b, 1 + 1), result_type, r, op1, op2)) return r } @@ -2126,7 +2126,7 @@ inst_OpFOrdNotEqual :: #force_inline proc "contextless" (buf: []Operand, result_ f_ord_not_equal :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpFOrdNotEqual(opbuf(b, 1 + 1), result_type, r, op1, op2)) + append_elem(&b.ops, inst_OpFOrdNotEqual(opbuf(b, 1 + 1), result_type, r, op1, op2)) return r } @@ -2139,7 +2139,7 @@ inst_OpFUnordNotEqual :: #force_inline proc "contextless" (buf: []Operand, resul f_unord_not_equal :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpFUnordNotEqual(opbuf(b, 1 + 1), result_type, r, op1, op2)) + append_elem(&b.ops, inst_OpFUnordNotEqual(opbuf(b, 1 + 1), result_type, r, op1, op2)) return r } @@ -2152,7 +2152,7 @@ inst_OpFOrdLessThan :: #force_inline proc "contextless" (buf: []Operand, result_ f_ord_less_than :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpFOrdLessThan(opbuf(b, 1 + 1), result_type, r, op1, op2)) + append_elem(&b.ops, inst_OpFOrdLessThan(opbuf(b, 1 + 1), result_type, r, op1, op2)) return r } @@ -2165,7 +2165,7 @@ inst_OpFUnordLessThan :: #force_inline proc "contextless" (buf: []Operand, resul f_unord_less_than :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpFUnordLessThan(opbuf(b, 1 + 1), result_type, r, op1, op2)) + append_elem(&b.ops, inst_OpFUnordLessThan(opbuf(b, 1 + 1), result_type, r, op1, op2)) return r } @@ -2178,7 +2178,7 @@ inst_OpFOrdGreaterThan :: #force_inline proc "contextless" (buf: []Operand, resu f_ord_greater_than :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpFOrdGreaterThan(opbuf(b, 1 + 1), result_type, r, op1, op2)) + append_elem(&b.ops, inst_OpFOrdGreaterThan(opbuf(b, 1 + 1), result_type, r, op1, op2)) return r } @@ -2191,7 +2191,7 @@ inst_OpFUnordGreaterThan :: #force_inline proc "contextless" (buf: []Operand, re f_unord_greater_than :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpFUnordGreaterThan(opbuf(b, 1 + 1), result_type, r, op1, op2)) + append_elem(&b.ops, inst_OpFUnordGreaterThan(opbuf(b, 1 + 1), result_type, r, op1, op2)) return r } @@ -2204,7 +2204,7 @@ inst_OpFOrdLessThanEqual :: #force_inline proc "contextless" (buf: []Operand, re f_ord_less_than_equal :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpFOrdLessThanEqual(opbuf(b, 1 + 1), result_type, r, op1, op2)) + append_elem(&b.ops, inst_OpFOrdLessThanEqual(opbuf(b, 1 + 1), result_type, r, op1, op2)) return r } @@ -2217,7 +2217,7 @@ inst_OpFUnordLessThanEqual :: #force_inline proc "contextless" (buf: []Operand, f_unord_less_than_equal :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpFUnordLessThanEqual(opbuf(b, 1 + 1), result_type, r, op1, op2)) + append_elem(&b.ops, inst_OpFUnordLessThanEqual(opbuf(b, 1 + 1), result_type, r, op1, op2)) return r } @@ -2230,7 +2230,7 @@ inst_OpFOrdGreaterThanEqual :: #force_inline proc "contextless" (buf: []Operand, f_ord_greater_than_equal :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpFOrdGreaterThanEqual(opbuf(b, 1 + 1), result_type, r, op1, op2)) + append_elem(&b.ops, inst_OpFOrdGreaterThanEqual(opbuf(b, 1 + 1), result_type, r, op1, op2)) return r } @@ -2243,7 +2243,7 @@ inst_OpFUnordGreaterThanEqual :: #force_inline proc "contextless" (buf: []Operan f_unord_greater_than_equal :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpFUnordGreaterThanEqual(opbuf(b, 1 + 1), result_type, r, op1, op2)) + append_elem(&b.ops, inst_OpFUnordGreaterThanEqual(opbuf(b, 1 + 1), result_type, r, op1, op2)) return r } @@ -2256,7 +2256,7 @@ inst_OpShiftRightLogical :: #force_inline proc "contextless" (buf: []Operand, re shift_right_logical :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpShiftRightLogical(opbuf(b, 1 + 1), result_type, r, op1, op2)) + append_elem(&b.ops, inst_OpShiftRightLogical(opbuf(b, 1 + 1), result_type, r, op1, op2)) return r } @@ -2269,7 +2269,7 @@ inst_OpShiftRightArithmetic :: #force_inline proc "contextless" (buf: []Operand, shift_right_arithmetic :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpShiftRightArithmetic(opbuf(b, 1 + 1), result_type, r, op1, op2)) + append_elem(&b.ops, inst_OpShiftRightArithmetic(opbuf(b, 1 + 1), result_type, r, op1, op2)) return r } @@ -2282,7 +2282,7 @@ inst_OpShiftLeftLogical :: #force_inline proc "contextless" (buf: []Operand, res shift_left_logical :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpShiftLeftLogical(opbuf(b, 1 + 1), result_type, r, op1, op2)) + append_elem(&b.ops, inst_OpShiftLeftLogical(opbuf(b, 1 + 1), result_type, r, op1, op2)) return r } @@ -2295,7 +2295,7 @@ inst_OpBitwiseOr :: #force_inline proc "contextless" (buf: []Operand, result_typ bitwise_or :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpBitwiseOr(opbuf(b, 1 + 1), result_type, r, op1, op2)) + append_elem(&b.ops, inst_OpBitwiseOr(opbuf(b, 1 + 1), result_type, r, op1, op2)) return r } @@ -2308,7 +2308,7 @@ inst_OpBitwiseXor :: #force_inline proc "contextless" (buf: []Operand, result_ty bitwise_xor :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpBitwiseXor(opbuf(b, 1 + 1), result_type, r, op1, op2)) + append_elem(&b.ops, inst_OpBitwiseXor(opbuf(b, 1 + 1), result_type, r, op1, op2)) return r } @@ -2321,7 +2321,7 @@ inst_OpBitwiseAnd :: #force_inline proc "contextless" (buf: []Operand, result_ty bitwise_and :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpBitwiseAnd(opbuf(b, 1 + 1), result_type, r, op1, op2)) + append_elem(&b.ops, inst_OpBitwiseAnd(opbuf(b, 1 + 1), result_type, r, op1, op2)) return r } @@ -2333,7 +2333,7 @@ inst_OpNot :: #force_inline proc "contextless" (buf: []Operand, result_type: Typ not :: proc(b: ^Builder, result_type: Type_Ref, op1: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpNot(opbuf(b, 1), result_type, r, op1)) + append_elem(&b.ops, inst_OpNot(opbuf(b, 1), result_type, r, op1)) return r } @@ -2348,7 +2348,7 @@ inst_OpBitFieldInsert :: #force_inline proc "contextless" (buf: []Operand, resul bit_field_insert :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Id, op3: Id, op4: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpBitFieldInsert(opbuf(b, 1 + 1 + 1 + 1), result_type, r, op1, op2, op3, op4)) + append_elem(&b.ops, inst_OpBitFieldInsert(opbuf(b, 1 + 1 + 1 + 1), result_type, r, op1, op2, op3, op4)) return r } @@ -2362,7 +2362,7 @@ inst_OpBitFieldSExtract :: #force_inline proc "contextless" (buf: []Operand, res bit_field_s_extract :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Id, op3: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpBitFieldSExtract(opbuf(b, 1 + 1 + 1), result_type, r, op1, op2, op3)) + append_elem(&b.ops, inst_OpBitFieldSExtract(opbuf(b, 1 + 1 + 1), result_type, r, op1, op2, op3)) return r } @@ -2376,7 +2376,7 @@ inst_OpBitFieldUExtract :: #force_inline proc "contextless" (buf: []Operand, res bit_field_u_extract :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Id, op3: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpBitFieldUExtract(opbuf(b, 1 + 1 + 1), result_type, r, op1, op2, op3)) + append_elem(&b.ops, inst_OpBitFieldUExtract(opbuf(b, 1 + 1 + 1), result_type, r, op1, op2, op3)) return r } @@ -2388,7 +2388,7 @@ inst_OpBitReverse :: #force_inline proc "contextless" (buf: []Operand, result_ty bit_reverse :: proc(b: ^Builder, result_type: Type_Ref, op1: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpBitReverse(opbuf(b, 1), result_type, r, op1)) + append_elem(&b.ops, inst_OpBitReverse(opbuf(b, 1), result_type, r, op1)) return r } @@ -2400,7 +2400,7 @@ inst_OpBitCount :: #force_inline proc "contextless" (buf: []Operand, result_type bit_count :: proc(b: ^Builder, result_type: Type_Ref, op1: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpBitCount(opbuf(b, 1), result_type, r, op1)) + append_elem(&b.ops, inst_OpBitCount(opbuf(b, 1), result_type, r, op1)) return r } @@ -2412,7 +2412,7 @@ inst_OpDPdx :: #force_inline proc "contextless" (buf: []Operand, result_type: Ty d_pdx :: proc(b: ^Builder, result_type: Type_Ref, op1: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpDPdx(opbuf(b, 1), result_type, r, op1)) + append_elem(&b.ops, inst_OpDPdx(opbuf(b, 1), result_type, r, op1)) return r } @@ -2424,7 +2424,7 @@ inst_OpDPdy :: #force_inline proc "contextless" (buf: []Operand, result_type: Ty d_pdy :: proc(b: ^Builder, result_type: Type_Ref, op1: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpDPdy(opbuf(b, 1), result_type, r, op1)) + append_elem(&b.ops, inst_OpDPdy(opbuf(b, 1), result_type, r, op1)) return r } @@ -2436,7 +2436,7 @@ inst_OpFwidth :: #force_inline proc "contextless" (buf: []Operand, result_type: fwidth :: proc(b: ^Builder, result_type: Type_Ref, op1: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpFwidth(opbuf(b, 1), result_type, r, op1)) + append_elem(&b.ops, inst_OpFwidth(opbuf(b, 1), result_type, r, op1)) return r } @@ -2448,7 +2448,7 @@ inst_OpDPdxFine :: #force_inline proc "contextless" (buf: []Operand, result_type d_pdx_fine :: proc(b: ^Builder, result_type: Type_Ref, op1: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpDPdxFine(opbuf(b, 1), result_type, r, op1)) + append_elem(&b.ops, inst_OpDPdxFine(opbuf(b, 1), result_type, r, op1)) return r } @@ -2460,7 +2460,7 @@ inst_OpDPdyFine :: #force_inline proc "contextless" (buf: []Operand, result_type d_pdy_fine :: proc(b: ^Builder, result_type: Type_Ref, op1: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpDPdyFine(opbuf(b, 1), result_type, r, op1)) + append_elem(&b.ops, inst_OpDPdyFine(opbuf(b, 1), result_type, r, op1)) return r } @@ -2472,7 +2472,7 @@ inst_OpFwidthFine :: #force_inline proc "contextless" (buf: []Operand, result_ty fwidth_fine :: proc(b: ^Builder, result_type: Type_Ref, op1: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpFwidthFine(opbuf(b, 1), result_type, r, op1)) + append_elem(&b.ops, inst_OpFwidthFine(opbuf(b, 1), result_type, r, op1)) return r } @@ -2484,7 +2484,7 @@ inst_OpDPdxCoarse :: #force_inline proc "contextless" (buf: []Operand, result_ty d_pdx_coarse :: proc(b: ^Builder, result_type: Type_Ref, op1: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpDPdxCoarse(opbuf(b, 1), result_type, r, op1)) + append_elem(&b.ops, inst_OpDPdxCoarse(opbuf(b, 1), result_type, r, op1)) return r } @@ -2496,7 +2496,7 @@ inst_OpDPdyCoarse :: #force_inline proc "contextless" (buf: []Operand, result_ty d_pdy_coarse :: proc(b: ^Builder, result_type: Type_Ref, op1: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpDPdyCoarse(opbuf(b, 1), result_type, r, op1)) + append_elem(&b.ops, inst_OpDPdyCoarse(opbuf(b, 1), result_type, r, op1)) return r } @@ -2508,7 +2508,7 @@ inst_OpFwidthCoarse :: #force_inline proc "contextless" (buf: []Operand, result_ fwidth_coarse :: proc(b: ^Builder, result_type: Type_Ref, op1: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpFwidthCoarse(opbuf(b, 1), result_type, r, op1)) + append_elem(&b.ops, inst_OpFwidthCoarse(opbuf(b, 1), result_type, r, op1)) return r } @@ -2517,7 +2517,7 @@ inst_OpEmitVertex :: #force_inline proc "contextless" () -> Operation { } emit_vertex :: proc(b: ^Builder) { - append(&b.ops, inst_OpEmitVertex()) + append_elem(&b.ops, inst_OpEmitVertex()) } inst_OpEndPrimitive :: #force_inline proc "contextless" () -> Operation { @@ -2525,7 +2525,7 @@ inst_OpEndPrimitive :: #force_inline proc "contextless" () -> Operation { } end_primitive :: proc(b: ^Builder) { - append(&b.ops, inst_OpEndPrimitive()) + append_elem(&b.ops, inst_OpEndPrimitive()) } inst_OpEmitStreamVertex :: #force_inline proc "contextless" (buf: []Operand, op1: Id) -> Operation { @@ -2535,7 +2535,7 @@ inst_OpEmitStreamVertex :: #force_inline proc "contextless" (buf: []Operand, op1 } emit_stream_vertex :: proc(b: ^Builder, op1: Id) { - append(&b.ops, inst_OpEmitStreamVertex(opbuf(b, 1), op1)) + append_elem(&b.ops, inst_OpEmitStreamVertex(opbuf(b, 1), op1)) } inst_OpEndStreamPrimitive :: #force_inline proc "contextless" (buf: []Operand, op1: Id) -> Operation { @@ -2545,7 +2545,7 @@ inst_OpEndStreamPrimitive :: #force_inline proc "contextless" (buf: []Operand, o } end_stream_primitive :: proc(b: ^Builder, op1: Id) { - append(&b.ops, inst_OpEndStreamPrimitive(opbuf(b, 1), op1)) + append_elem(&b.ops, inst_OpEndStreamPrimitive(opbuf(b, 1), op1)) } inst_OpControlBarrier :: #force_inline proc "contextless" (buf: []Operand, op1: Id, op2: Id, op3: Id) -> Operation { @@ -2557,7 +2557,7 @@ inst_OpControlBarrier :: #force_inline proc "contextless" (buf: []Operand, op1: } control_barrier :: proc(b: ^Builder, op1: Id, op2: Id, op3: Id) { - append(&b.ops, inst_OpControlBarrier(opbuf(b, 1 + 1 + 1), op1, op2, op3)) + append_elem(&b.ops, inst_OpControlBarrier(opbuf(b, 1 + 1 + 1), op1, op2, op3)) } inst_OpMemoryBarrier :: #force_inline proc "contextless" (buf: []Operand, op1: Id, op2: Id) -> Operation { @@ -2568,7 +2568,7 @@ inst_OpMemoryBarrier :: #force_inline proc "contextless" (buf: []Operand, op1: I } memory_barrier :: proc(b: ^Builder, op1: Id, op2: Id) { - append(&b.ops, inst_OpMemoryBarrier(opbuf(b, 1 + 1), op1, op2)) + append_elem(&b.ops, inst_OpMemoryBarrier(opbuf(b, 1 + 1), op1, op2)) } inst_OpAtomicLoad :: #force_inline proc "contextless" (buf: []Operand, result_type: Type_Ref, result: Id, op1: Id, op2: Id, op3: Id) -> Operation { @@ -2581,7 +2581,7 @@ inst_OpAtomicLoad :: #force_inline proc "contextless" (buf: []Operand, result_ty atomic_load :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Id, op3: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpAtomicLoad(opbuf(b, 1 + 1 + 1), result_type, r, op1, op2, op3)) + append_elem(&b.ops, inst_OpAtomicLoad(opbuf(b, 1 + 1 + 1), result_type, r, op1, op2, op3)) return r } @@ -2595,7 +2595,7 @@ inst_OpAtomicStore :: #force_inline proc "contextless" (buf: []Operand, op1: Id, } atomic_store :: proc(b: ^Builder, op1: Id, op2: Id, op3: Id, op4: Id) { - append(&b.ops, inst_OpAtomicStore(opbuf(b, 1 + 1 + 1 + 1), op1, op2, op3, op4)) + append_elem(&b.ops, inst_OpAtomicStore(opbuf(b, 1 + 1 + 1 + 1), op1, op2, op3, op4)) } inst_OpAtomicExchange :: #force_inline proc "contextless" (buf: []Operand, result_type: Type_Ref, result: Id, op1: Id, op2: Id, op3: Id, op4: Id) -> Operation { @@ -2609,7 +2609,7 @@ inst_OpAtomicExchange :: #force_inline proc "contextless" (buf: []Operand, resul atomic_exchange :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Id, op3: Id, op4: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpAtomicExchange(opbuf(b, 1 + 1 + 1 + 1), result_type, r, op1, op2, op3, op4)) + append_elem(&b.ops, inst_OpAtomicExchange(opbuf(b, 1 + 1 + 1 + 1), result_type, r, op1, op2, op3, op4)) return r } @@ -2626,7 +2626,7 @@ inst_OpAtomicCompareExchange :: #force_inline proc "contextless" (buf: []Operand atomic_compare_exchange :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Id, op3: Id, op4: Id, op5: Id, op6: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpAtomicCompareExchange(opbuf(b, 1 + 1 + 1 + 1 + 1 + 1), result_type, r, op1, op2, op3, op4, op5, op6)) + append_elem(&b.ops, inst_OpAtomicCompareExchange(opbuf(b, 1 + 1 + 1 + 1 + 1 + 1), result_type, r, op1, op2, op3, op4, op5, op6)) return r } @@ -2643,7 +2643,7 @@ inst_OpAtomicCompareExchangeWeak :: #force_inline proc "contextless" (buf: []Ope atomic_compare_exchange_weak :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Id, op3: Id, op4: Id, op5: Id, op6: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpAtomicCompareExchangeWeak(opbuf(b, 1 + 1 + 1 + 1 + 1 + 1), result_type, r, op1, op2, op3, op4, op5, op6)) + append_elem(&b.ops, inst_OpAtomicCompareExchangeWeak(opbuf(b, 1 + 1 + 1 + 1 + 1 + 1), result_type, r, op1, op2, op3, op4, op5, op6)) return r } @@ -2657,7 +2657,7 @@ inst_OpAtomicIIncrement :: #force_inline proc "contextless" (buf: []Operand, res atomic_i_increment :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Id, op3: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpAtomicIIncrement(opbuf(b, 1 + 1 + 1), result_type, r, op1, op2, op3)) + append_elem(&b.ops, inst_OpAtomicIIncrement(opbuf(b, 1 + 1 + 1), result_type, r, op1, op2, op3)) return r } @@ -2671,7 +2671,7 @@ inst_OpAtomicIDecrement :: #force_inline proc "contextless" (buf: []Operand, res atomic_i_decrement :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Id, op3: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpAtomicIDecrement(opbuf(b, 1 + 1 + 1), result_type, r, op1, op2, op3)) + append_elem(&b.ops, inst_OpAtomicIDecrement(opbuf(b, 1 + 1 + 1), result_type, r, op1, op2, op3)) return r } @@ -2686,7 +2686,7 @@ inst_OpAtomicIAdd :: #force_inline proc "contextless" (buf: []Operand, result_ty atomic_i_add :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Id, op3: Id, op4: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpAtomicIAdd(opbuf(b, 1 + 1 + 1 + 1), result_type, r, op1, op2, op3, op4)) + append_elem(&b.ops, inst_OpAtomicIAdd(opbuf(b, 1 + 1 + 1 + 1), result_type, r, op1, op2, op3, op4)) return r } @@ -2701,7 +2701,7 @@ inst_OpAtomicISub :: #force_inline proc "contextless" (buf: []Operand, result_ty atomic_i_sub :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Id, op3: Id, op4: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpAtomicISub(opbuf(b, 1 + 1 + 1 + 1), result_type, r, op1, op2, op3, op4)) + append_elem(&b.ops, inst_OpAtomicISub(opbuf(b, 1 + 1 + 1 + 1), result_type, r, op1, op2, op3, op4)) return r } @@ -2716,7 +2716,7 @@ inst_OpAtomicSMin :: #force_inline proc "contextless" (buf: []Operand, result_ty atomic_s_min :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Id, op3: Id, op4: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpAtomicSMin(opbuf(b, 1 + 1 + 1 + 1), result_type, r, op1, op2, op3, op4)) + append_elem(&b.ops, inst_OpAtomicSMin(opbuf(b, 1 + 1 + 1 + 1), result_type, r, op1, op2, op3, op4)) return r } @@ -2731,7 +2731,7 @@ inst_OpAtomicUMin :: #force_inline proc "contextless" (buf: []Operand, result_ty atomic_u_min :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Id, op3: Id, op4: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpAtomicUMin(opbuf(b, 1 + 1 + 1 + 1), result_type, r, op1, op2, op3, op4)) + append_elem(&b.ops, inst_OpAtomicUMin(opbuf(b, 1 + 1 + 1 + 1), result_type, r, op1, op2, op3, op4)) return r } @@ -2746,7 +2746,7 @@ inst_OpAtomicSMax :: #force_inline proc "contextless" (buf: []Operand, result_ty atomic_s_max :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Id, op3: Id, op4: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpAtomicSMax(opbuf(b, 1 + 1 + 1 + 1), result_type, r, op1, op2, op3, op4)) + append_elem(&b.ops, inst_OpAtomicSMax(opbuf(b, 1 + 1 + 1 + 1), result_type, r, op1, op2, op3, op4)) return r } @@ -2761,7 +2761,7 @@ inst_OpAtomicUMax :: #force_inline proc "contextless" (buf: []Operand, result_ty atomic_u_max :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Id, op3: Id, op4: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpAtomicUMax(opbuf(b, 1 + 1 + 1 + 1), result_type, r, op1, op2, op3, op4)) + append_elem(&b.ops, inst_OpAtomicUMax(opbuf(b, 1 + 1 + 1 + 1), result_type, r, op1, op2, op3, op4)) return r } @@ -2776,7 +2776,7 @@ inst_OpAtomicAnd :: #force_inline proc "contextless" (buf: []Operand, result_typ atomic_and :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Id, op3: Id, op4: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpAtomicAnd(opbuf(b, 1 + 1 + 1 + 1), result_type, r, op1, op2, op3, op4)) + append_elem(&b.ops, inst_OpAtomicAnd(opbuf(b, 1 + 1 + 1 + 1), result_type, r, op1, op2, op3, op4)) return r } @@ -2791,7 +2791,7 @@ inst_OpAtomicOr :: #force_inline proc "contextless" (buf: []Operand, result_type atomic_or :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Id, op3: Id, op4: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpAtomicOr(opbuf(b, 1 + 1 + 1 + 1), result_type, r, op1, op2, op3, op4)) + append_elem(&b.ops, inst_OpAtomicOr(opbuf(b, 1 + 1 + 1 + 1), result_type, r, op1, op2, op3, op4)) return r } @@ -2806,7 +2806,7 @@ inst_OpAtomicXor :: #force_inline proc "contextless" (buf: []Operand, result_typ atomic_xor :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Id, op3: Id, op4: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpAtomicXor(opbuf(b, 1 + 1 + 1 + 1), result_type, r, op1, op2, op3, op4)) + append_elem(&b.ops, inst_OpAtomicXor(opbuf(b, 1 + 1 + 1 + 1), result_type, r, op1, op2, op3, op4)) return r } @@ -2818,7 +2818,7 @@ inst_OpPhi :: #force_inline proc "contextless" (buf: []Operand, result_type: Typ phi :: proc(b: ^Builder, result_type: Type_Ref, op1: []Pair_Id_Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpPhi(opbuf(b, 2 * len(op1)), result_type, r, op1)) + append_elem(&b.ops, inst_OpPhi(opbuf(b, 2 * len(op1)), result_type, r, op1)) return r } @@ -2831,7 +2831,7 @@ inst_OpLoopMerge :: #force_inline proc "contextless" (buf: []Operand, op1: Id, o } loop_merge :: proc(b: ^Builder, op1: Id, op2: Id, op3: Loop_Control) { - append(&b.ops, inst_OpLoopMerge(opbuf(b, 1 + 1 + 1), op1, op2, op3)) + append_elem(&b.ops, inst_OpLoopMerge(opbuf(b, 1 + 1 + 1), op1, op2, op3)) } inst_OpSelectionMerge :: #force_inline proc "contextless" (buf: []Operand, op1: Id, op2: Selection_Control) -> Operation { @@ -2842,7 +2842,7 @@ inst_OpSelectionMerge :: #force_inline proc "contextless" (buf: []Operand, op1: } selection_merge :: proc(b: ^Builder, op1: Id, op2: Selection_Control) { - append(&b.ops, inst_OpSelectionMerge(opbuf(b, 1 + 1), op1, op2)) + append_elem(&b.ops, inst_OpSelectionMerge(opbuf(b, 1 + 1), op1, op2)) } inst_OpLabel :: #force_inline proc "contextless" (result: Id) -> Operation { @@ -2851,7 +2851,7 @@ inst_OpLabel :: #force_inline proc "contextless" (result: Id) -> Operation { label :: proc(b: ^Builder) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpLabel(r)) + append_elem(&b.ops, inst_OpLabel(r)) return r } @@ -2862,7 +2862,7 @@ inst_OpBranch :: #force_inline proc "contextless" (buf: []Operand, op1: Id) -> O } branch :: proc(b: ^Builder, op1: Id) { - append(&b.ops, inst_OpBranch(opbuf(b, 1), op1)) + append_elem(&b.ops, inst_OpBranch(opbuf(b, 1), op1)) } inst_OpBranchConditional :: #force_inline proc "contextless" (buf: []Operand, op1: Id, op2: Id, op3: Id, op4: []i64) -> Operation { @@ -2875,7 +2875,7 @@ inst_OpBranchConditional :: #force_inline proc "contextless" (buf: []Operand, op } branch_conditional :: proc(b: ^Builder, op1: Id, op2: Id, op3: Id, op4: []i64) { - append(&b.ops, inst_OpBranchConditional(opbuf(b, 1 + 1 + 1 + len(op4)), op1, op2, op3, op4)) + append_elem(&b.ops, inst_OpBranchConditional(opbuf(b, 1 + 1 + 1 + len(op4)), op1, op2, op3, op4)) } inst_OpSwitch :: #force_inline proc "contextless" (buf: []Operand, op1: Id, op2: Id, op3: []Pair_Lit_Id) -> Operation { @@ -2887,7 +2887,7 @@ inst_OpSwitch :: #force_inline proc "contextless" (buf: []Operand, op1: Id, op2: } switch_ :: proc(b: ^Builder, op1: Id, op2: Id, op3: []Pair_Lit_Id) { - append(&b.ops, inst_OpSwitch(opbuf(b, 1 + 1 + 2 * len(op3)), op1, op2, op3)) + append_elem(&b.ops, inst_OpSwitch(opbuf(b, 1 + 1 + 2 * len(op3)), op1, op2, op3)) } inst_OpKill :: #force_inline proc "contextless" () -> Operation { @@ -2895,7 +2895,7 @@ inst_OpKill :: #force_inline proc "contextless" () -> Operation { } kill :: proc(b: ^Builder) { - append(&b.ops, inst_OpKill()) + append_elem(&b.ops, inst_OpKill()) } inst_OpReturn :: #force_inline proc "contextless" () -> Operation { @@ -2903,7 +2903,7 @@ inst_OpReturn :: #force_inline proc "contextless" () -> Operation { } return_ :: proc(b: ^Builder) { - append(&b.ops, inst_OpReturn()) + append_elem(&b.ops, inst_OpReturn()) } inst_OpReturnValue :: #force_inline proc "contextless" (buf: []Operand, op1: Id) -> Operation { @@ -2913,7 +2913,7 @@ inst_OpReturnValue :: #force_inline proc "contextless" (buf: []Operand, op1: Id) } return_value :: proc(b: ^Builder, op1: Id) { - append(&b.ops, inst_OpReturnValue(opbuf(b, 1), op1)) + append_elem(&b.ops, inst_OpReturnValue(opbuf(b, 1), op1)) } inst_OpUnreachable :: #force_inline proc "contextless" () -> Operation { @@ -2921,7 +2921,7 @@ inst_OpUnreachable :: #force_inline proc "contextless" () -> Operation { } unreachable :: proc(b: ^Builder) { - append(&b.ops, inst_OpUnreachable()) + append_elem(&b.ops, inst_OpUnreachable()) } inst_OpLifetimeStart :: #force_inline proc "contextless" (buf: []Operand, op1: Id, op2: i64) -> Operation { @@ -2932,7 +2932,7 @@ inst_OpLifetimeStart :: #force_inline proc "contextless" (buf: []Operand, op1: I } lifetime_start :: proc(b: ^Builder, op1: Id, op2: i64) { - append(&b.ops, inst_OpLifetimeStart(opbuf(b, 1 + 1), op1, op2)) + append_elem(&b.ops, inst_OpLifetimeStart(opbuf(b, 1 + 1), op1, op2)) } inst_OpLifetimeStop :: #force_inline proc "contextless" (buf: []Operand, op1: Id, op2: i64) -> Operation { @@ -2943,7 +2943,7 @@ inst_OpLifetimeStop :: #force_inline proc "contextless" (buf: []Operand, op1: Id } lifetime_stop :: proc(b: ^Builder, op1: Id, op2: i64) { - append(&b.ops, inst_OpLifetimeStop(opbuf(b, 1 + 1), op1, op2)) + append_elem(&b.ops, inst_OpLifetimeStop(opbuf(b, 1 + 1), op1, op2)) } inst_OpGroupAsyncCopy :: #force_inline proc "contextless" (buf: []Operand, result_type: Type_Ref, result: Id, op1: Id, op2: Id, op3: Id, op4: Id, op5: Id, op6: Id) -> Operation { @@ -2959,7 +2959,7 @@ inst_OpGroupAsyncCopy :: #force_inline proc "contextless" (buf: []Operand, resul group_async_copy :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Id, op3: Id, op4: Id, op5: Id, op6: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpGroupAsyncCopy(opbuf(b, 1 + 1 + 1 + 1 + 1 + 1), result_type, r, op1, op2, op3, op4, op5, op6)) + append_elem(&b.ops, inst_OpGroupAsyncCopy(opbuf(b, 1 + 1 + 1 + 1 + 1 + 1), result_type, r, op1, op2, op3, op4, op5, op6)) return r } @@ -2972,7 +2972,7 @@ inst_OpGroupWaitEvents :: #force_inline proc "contextless" (buf: []Operand, op1: } group_wait_events :: proc(b: ^Builder, op1: Id, op2: Id, op3: Id) { - append(&b.ops, inst_OpGroupWaitEvents(opbuf(b, 1 + 1 + 1), op1, op2, op3)) + append_elem(&b.ops, inst_OpGroupWaitEvents(opbuf(b, 1 + 1 + 1), op1, op2, op3)) } inst_OpGroupAll :: #force_inline proc "contextless" (buf: []Operand, result_type: Type_Ref, result: Id, op1: Id, op2: Id) -> Operation { @@ -2984,7 +2984,7 @@ inst_OpGroupAll :: #force_inline proc "contextless" (buf: []Operand, result_type group_all :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpGroupAll(opbuf(b, 1 + 1), result_type, r, op1, op2)) + append_elem(&b.ops, inst_OpGroupAll(opbuf(b, 1 + 1), result_type, r, op1, op2)) return r } @@ -2997,7 +2997,7 @@ inst_OpGroupAny :: #force_inline proc "contextless" (buf: []Operand, result_type group_any :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpGroupAny(opbuf(b, 1 + 1), result_type, r, op1, op2)) + append_elem(&b.ops, inst_OpGroupAny(opbuf(b, 1 + 1), result_type, r, op1, op2)) return r } @@ -3011,7 +3011,7 @@ inst_OpGroupBroadcast :: #force_inline proc "contextless" (buf: []Operand, resul group_broadcast :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Id, op3: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpGroupBroadcast(opbuf(b, 1 + 1 + 1), result_type, r, op1, op2, op3)) + append_elem(&b.ops, inst_OpGroupBroadcast(opbuf(b, 1 + 1 + 1), result_type, r, op1, op2, op3)) return r } @@ -3025,7 +3025,7 @@ inst_OpGroupIAdd :: #force_inline proc "contextless" (buf: []Operand, result_typ group_i_add :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Group_Operation, op3: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpGroupIAdd(opbuf(b, 1 + 1 + 1), result_type, r, op1, op2, op3)) + append_elem(&b.ops, inst_OpGroupIAdd(opbuf(b, 1 + 1 + 1), result_type, r, op1, op2, op3)) return r } @@ -3039,7 +3039,7 @@ inst_OpGroupFAdd :: #force_inline proc "contextless" (buf: []Operand, result_typ group_f_add :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Group_Operation, op3: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpGroupFAdd(opbuf(b, 1 + 1 + 1), result_type, r, op1, op2, op3)) + append_elem(&b.ops, inst_OpGroupFAdd(opbuf(b, 1 + 1 + 1), result_type, r, op1, op2, op3)) return r } @@ -3053,7 +3053,7 @@ inst_OpGroupFMin :: #force_inline proc "contextless" (buf: []Operand, result_typ group_f_min :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Group_Operation, op3: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpGroupFMin(opbuf(b, 1 + 1 + 1), result_type, r, op1, op2, op3)) + append_elem(&b.ops, inst_OpGroupFMin(opbuf(b, 1 + 1 + 1), result_type, r, op1, op2, op3)) return r } @@ -3067,7 +3067,7 @@ inst_OpGroupUMin :: #force_inline proc "contextless" (buf: []Operand, result_typ group_u_min :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Group_Operation, op3: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpGroupUMin(opbuf(b, 1 + 1 + 1), result_type, r, op1, op2, op3)) + append_elem(&b.ops, inst_OpGroupUMin(opbuf(b, 1 + 1 + 1), result_type, r, op1, op2, op3)) return r } @@ -3081,7 +3081,7 @@ inst_OpGroupSMin :: #force_inline proc "contextless" (buf: []Operand, result_typ group_s_min :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Group_Operation, op3: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpGroupSMin(opbuf(b, 1 + 1 + 1), result_type, r, op1, op2, op3)) + append_elem(&b.ops, inst_OpGroupSMin(opbuf(b, 1 + 1 + 1), result_type, r, op1, op2, op3)) return r } @@ -3095,7 +3095,7 @@ inst_OpGroupFMax :: #force_inline proc "contextless" (buf: []Operand, result_typ group_f_max :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Group_Operation, op3: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpGroupFMax(opbuf(b, 1 + 1 + 1), result_type, r, op1, op2, op3)) + append_elem(&b.ops, inst_OpGroupFMax(opbuf(b, 1 + 1 + 1), result_type, r, op1, op2, op3)) return r } @@ -3109,7 +3109,7 @@ inst_OpGroupUMax :: #force_inline proc "contextless" (buf: []Operand, result_typ group_u_max :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Group_Operation, op3: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpGroupUMax(opbuf(b, 1 + 1 + 1), result_type, r, op1, op2, op3)) + append_elem(&b.ops, inst_OpGroupUMax(opbuf(b, 1 + 1 + 1), result_type, r, op1, op2, op3)) return r } @@ -3123,7 +3123,7 @@ inst_OpGroupSMax :: #force_inline proc "contextless" (buf: []Operand, result_typ group_s_max :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Group_Operation, op3: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpGroupSMax(opbuf(b, 1 + 1 + 1), result_type, r, op1, op2, op3)) + append_elem(&b.ops, inst_OpGroupSMax(opbuf(b, 1 + 1 + 1), result_type, r, op1, op2, op3)) return r } @@ -3138,7 +3138,7 @@ inst_OpReadPipe :: #force_inline proc "contextless" (buf: []Operand, result_type read_pipe :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Id, op3: Id, op4: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpReadPipe(opbuf(b, 1 + 1 + 1 + 1), result_type, r, op1, op2, op3, op4)) + append_elem(&b.ops, inst_OpReadPipe(opbuf(b, 1 + 1 + 1 + 1), result_type, r, op1, op2, op3, op4)) return r } @@ -3153,7 +3153,7 @@ inst_OpWritePipe :: #force_inline proc "contextless" (buf: []Operand, result_typ write_pipe :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Id, op3: Id, op4: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpWritePipe(opbuf(b, 1 + 1 + 1 + 1), result_type, r, op1, op2, op3, op4)) + append_elem(&b.ops, inst_OpWritePipe(opbuf(b, 1 + 1 + 1 + 1), result_type, r, op1, op2, op3, op4)) return r } @@ -3170,7 +3170,7 @@ inst_OpReservedReadPipe :: #force_inline proc "contextless" (buf: []Operand, res reserved_read_pipe :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Id, op3: Id, op4: Id, op5: Id, op6: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpReservedReadPipe(opbuf(b, 1 + 1 + 1 + 1 + 1 + 1), result_type, r, op1, op2, op3, op4, op5, op6)) + append_elem(&b.ops, inst_OpReservedReadPipe(opbuf(b, 1 + 1 + 1 + 1 + 1 + 1), result_type, r, op1, op2, op3, op4, op5, op6)) return r } @@ -3187,7 +3187,7 @@ inst_OpReservedWritePipe :: #force_inline proc "contextless" (buf: []Operand, re reserved_write_pipe :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Id, op3: Id, op4: Id, op5: Id, op6: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpReservedWritePipe(opbuf(b, 1 + 1 + 1 + 1 + 1 + 1), result_type, r, op1, op2, op3, op4, op5, op6)) + append_elem(&b.ops, inst_OpReservedWritePipe(opbuf(b, 1 + 1 + 1 + 1 + 1 + 1), result_type, r, op1, op2, op3, op4, op5, op6)) return r } @@ -3202,7 +3202,7 @@ inst_OpReserveReadPipePackets :: #force_inline proc "contextless" (buf: []Operan reserve_read_pipe_packets :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Id, op3: Id, op4: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpReserveReadPipePackets(opbuf(b, 1 + 1 + 1 + 1), result_type, r, op1, op2, op3, op4)) + append_elem(&b.ops, inst_OpReserveReadPipePackets(opbuf(b, 1 + 1 + 1 + 1), result_type, r, op1, op2, op3, op4)) return r } @@ -3217,7 +3217,7 @@ inst_OpReserveWritePipePackets :: #force_inline proc "contextless" (buf: []Opera reserve_write_pipe_packets :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Id, op3: Id, op4: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpReserveWritePipePackets(opbuf(b, 1 + 1 + 1 + 1), result_type, r, op1, op2, op3, op4)) + append_elem(&b.ops, inst_OpReserveWritePipePackets(opbuf(b, 1 + 1 + 1 + 1), result_type, r, op1, op2, op3, op4)) return r } @@ -3231,7 +3231,7 @@ inst_OpCommitReadPipe :: #force_inline proc "contextless" (buf: []Operand, op1: } commit_read_pipe :: proc(b: ^Builder, op1: Id, op2: Id, op3: Id, op4: Id) { - append(&b.ops, inst_OpCommitReadPipe(opbuf(b, 1 + 1 + 1 + 1), op1, op2, op3, op4)) + append_elem(&b.ops, inst_OpCommitReadPipe(opbuf(b, 1 + 1 + 1 + 1), op1, op2, op3, op4)) } inst_OpCommitWritePipe :: #force_inline proc "contextless" (buf: []Operand, op1: Id, op2: Id, op3: Id, op4: Id) -> Operation { @@ -3244,7 +3244,7 @@ inst_OpCommitWritePipe :: #force_inline proc "contextless" (buf: []Operand, op1: } commit_write_pipe :: proc(b: ^Builder, op1: Id, op2: Id, op3: Id, op4: Id) { - append(&b.ops, inst_OpCommitWritePipe(opbuf(b, 1 + 1 + 1 + 1), op1, op2, op3, op4)) + append_elem(&b.ops, inst_OpCommitWritePipe(opbuf(b, 1 + 1 + 1 + 1), op1, op2, op3, op4)) } inst_OpIsValidReserveId :: #force_inline proc "contextless" (buf: []Operand, result_type: Type_Ref, result: Id, op1: Id) -> Operation { @@ -3255,7 +3255,7 @@ inst_OpIsValidReserveId :: #force_inline proc "contextless" (buf: []Operand, res is_valid_reserve_id :: proc(b: ^Builder, result_type: Type_Ref, op1: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpIsValidReserveId(opbuf(b, 1), result_type, r, op1)) + append_elem(&b.ops, inst_OpIsValidReserveId(opbuf(b, 1), result_type, r, op1)) return r } @@ -3269,7 +3269,7 @@ inst_OpGetNumPipePackets :: #force_inline proc "contextless" (buf: []Operand, re get_num_pipe_packets :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Id, op3: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpGetNumPipePackets(opbuf(b, 1 + 1 + 1), result_type, r, op1, op2, op3)) + append_elem(&b.ops, inst_OpGetNumPipePackets(opbuf(b, 1 + 1 + 1), result_type, r, op1, op2, op3)) return r } @@ -3283,7 +3283,7 @@ inst_OpGetMaxPipePackets :: #force_inline proc "contextless" (buf: []Operand, re get_max_pipe_packets :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Id, op3: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpGetMaxPipePackets(opbuf(b, 1 + 1 + 1), result_type, r, op1, op2, op3)) + append_elem(&b.ops, inst_OpGetMaxPipePackets(opbuf(b, 1 + 1 + 1), result_type, r, op1, op2, op3)) return r } @@ -3299,7 +3299,7 @@ inst_OpGroupReserveReadPipePackets :: #force_inline proc "contextless" (buf: []O group_reserve_read_pipe_packets :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Id, op3: Id, op4: Id, op5: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpGroupReserveReadPipePackets(opbuf(b, 1 + 1 + 1 + 1 + 1), result_type, r, op1, op2, op3, op4, op5)) + append_elem(&b.ops, inst_OpGroupReserveReadPipePackets(opbuf(b, 1 + 1 + 1 + 1 + 1), result_type, r, op1, op2, op3, op4, op5)) return r } @@ -3315,7 +3315,7 @@ inst_OpGroupReserveWritePipePackets :: #force_inline proc "contextless" (buf: [] group_reserve_write_pipe_packets :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Id, op3: Id, op4: Id, op5: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpGroupReserveWritePipePackets(opbuf(b, 1 + 1 + 1 + 1 + 1), result_type, r, op1, op2, op3, op4, op5)) + append_elem(&b.ops, inst_OpGroupReserveWritePipePackets(opbuf(b, 1 + 1 + 1 + 1 + 1), result_type, r, op1, op2, op3, op4, op5)) return r } @@ -3330,7 +3330,7 @@ inst_OpGroupCommitReadPipe :: #force_inline proc "contextless" (buf: []Operand, } group_commit_read_pipe :: proc(b: ^Builder, op1: Id, op2: Id, op3: Id, op4: Id, op5: Id) { - append(&b.ops, inst_OpGroupCommitReadPipe(opbuf(b, 1 + 1 + 1 + 1 + 1), op1, op2, op3, op4, op5)) + append_elem(&b.ops, inst_OpGroupCommitReadPipe(opbuf(b, 1 + 1 + 1 + 1 + 1), op1, op2, op3, op4, op5)) } inst_OpGroupCommitWritePipe :: #force_inline proc "contextless" (buf: []Operand, op1: Id, op2: Id, op3: Id, op4: Id, op5: Id) -> Operation { @@ -3344,7 +3344,7 @@ inst_OpGroupCommitWritePipe :: #force_inline proc "contextless" (buf: []Operand, } group_commit_write_pipe :: proc(b: ^Builder, op1: Id, op2: Id, op3: Id, op4: Id, op5: Id) { - append(&b.ops, inst_OpGroupCommitWritePipe(opbuf(b, 1 + 1 + 1 + 1 + 1), op1, op2, op3, op4, op5)) + append_elem(&b.ops, inst_OpGroupCommitWritePipe(opbuf(b, 1 + 1 + 1 + 1 + 1), op1, op2, op3, op4, op5)) } inst_OpEnqueueMarker :: #force_inline proc "contextless" (buf: []Operand, result_type: Type_Ref, result: Id, op1: Id, op2: Id, op3: Id, op4: Id) -> Operation { @@ -3358,7 +3358,7 @@ inst_OpEnqueueMarker :: #force_inline proc "contextless" (buf: []Operand, result enqueue_marker :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Id, op3: Id, op4: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpEnqueueMarker(opbuf(b, 1 + 1 + 1 + 1), result_type, r, op1, op2, op3, op4)) + append_elem(&b.ops, inst_OpEnqueueMarker(opbuf(b, 1 + 1 + 1 + 1), result_type, r, op1, op2, op3, op4)) return r } @@ -3380,7 +3380,7 @@ inst_OpEnqueueKernel :: #force_inline proc "contextless" (buf: []Operand, result enqueue_kernel :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Id, op3: Id, op4: Id, op5: Id, op6: Id, op7: Id, op8: Id, op9: Id, op10: Id, op11: []Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpEnqueueKernel(opbuf(b, 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + len(op11)), result_type, r, op1, op2, op3, op4, op5, op6, op7, op8, op9, op10, op11)) + append_elem(&b.ops, inst_OpEnqueueKernel(opbuf(b, 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + len(op11)), result_type, r, op1, op2, op3, op4, op5, op6, op7, op8, op9, op10, op11)) return r } @@ -3396,7 +3396,7 @@ inst_OpGetKernelNDrangeSubGroupCount :: #force_inline proc "contextless" (buf: [ get_kernel_n_drange_sub_group_count :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Id, op3: Id, op4: Id, op5: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpGetKernelNDrangeSubGroupCount(opbuf(b, 1 + 1 + 1 + 1 + 1), result_type, r, op1, op2, op3, op4, op5)) + append_elem(&b.ops, inst_OpGetKernelNDrangeSubGroupCount(opbuf(b, 1 + 1 + 1 + 1 + 1), result_type, r, op1, op2, op3, op4, op5)) return r } @@ -3412,7 +3412,7 @@ inst_OpGetKernelNDrangeMaxSubGroupSize :: #force_inline proc "contextless" (buf: get_kernel_n_drange_max_sub_group_size :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Id, op3: Id, op4: Id, op5: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpGetKernelNDrangeMaxSubGroupSize(opbuf(b, 1 + 1 + 1 + 1 + 1), result_type, r, op1, op2, op3, op4, op5)) + append_elem(&b.ops, inst_OpGetKernelNDrangeMaxSubGroupSize(opbuf(b, 1 + 1 + 1 + 1 + 1), result_type, r, op1, op2, op3, op4, op5)) return r } @@ -3427,7 +3427,7 @@ inst_OpGetKernelWorkGroupSize :: #force_inline proc "contextless" (buf: []Operan get_kernel_work_group_size :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Id, op3: Id, op4: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpGetKernelWorkGroupSize(opbuf(b, 1 + 1 + 1 + 1), result_type, r, op1, op2, op3, op4)) + append_elem(&b.ops, inst_OpGetKernelWorkGroupSize(opbuf(b, 1 + 1 + 1 + 1), result_type, r, op1, op2, op3, op4)) return r } @@ -3442,7 +3442,7 @@ inst_OpGetKernelPreferredWorkGroupSizeMultiple :: #force_inline proc "contextles get_kernel_preferred_work_group_size_multiple :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Id, op3: Id, op4: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpGetKernelPreferredWorkGroupSizeMultiple(opbuf(b, 1 + 1 + 1 + 1), result_type, r, op1, op2, op3, op4)) + append_elem(&b.ops, inst_OpGetKernelPreferredWorkGroupSizeMultiple(opbuf(b, 1 + 1 + 1 + 1), result_type, r, op1, op2, op3, op4)) return r } @@ -3453,7 +3453,7 @@ inst_OpRetainEvent :: #force_inline proc "contextless" (buf: []Operand, op1: Id) } retain_event :: proc(b: ^Builder, op1: Id) { - append(&b.ops, inst_OpRetainEvent(opbuf(b, 1), op1)) + append_elem(&b.ops, inst_OpRetainEvent(opbuf(b, 1), op1)) } inst_OpReleaseEvent :: #force_inline proc "contextless" (buf: []Operand, op1: Id) -> Operation { @@ -3463,7 +3463,7 @@ inst_OpReleaseEvent :: #force_inline proc "contextless" (buf: []Operand, op1: Id } release_event :: proc(b: ^Builder, op1: Id) { - append(&b.ops, inst_OpReleaseEvent(opbuf(b, 1), op1)) + append_elem(&b.ops, inst_OpReleaseEvent(opbuf(b, 1), op1)) } inst_OpCreateUserEvent :: #force_inline proc "contextless" (result_type: Type_Ref, result: Id) -> Operation { @@ -3472,7 +3472,7 @@ inst_OpCreateUserEvent :: #force_inline proc "contextless" (result_type: Type_Re create_user_event :: proc(b: ^Builder, result_type: Type_Ref) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpCreateUserEvent(result_type, r)) + append_elem(&b.ops, inst_OpCreateUserEvent(result_type, r)) return r } @@ -3484,7 +3484,7 @@ inst_OpIsValidEvent :: #force_inline proc "contextless" (buf: []Operand, result_ is_valid_event :: proc(b: ^Builder, result_type: Type_Ref, op1: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpIsValidEvent(opbuf(b, 1), result_type, r, op1)) + append_elem(&b.ops, inst_OpIsValidEvent(opbuf(b, 1), result_type, r, op1)) return r } @@ -3496,7 +3496,7 @@ inst_OpSetUserEventStatus :: #force_inline proc "contextless" (buf: []Operand, o } set_user_event_status :: proc(b: ^Builder, op1: Id, op2: Id) { - append(&b.ops, inst_OpSetUserEventStatus(opbuf(b, 1 + 1), op1, op2)) + append_elem(&b.ops, inst_OpSetUserEventStatus(opbuf(b, 1 + 1), op1, op2)) } inst_OpCaptureEventProfilingInfo :: #force_inline proc "contextless" (buf: []Operand, op1: Id, op2: Id, op3: Id) -> Operation { @@ -3508,7 +3508,7 @@ inst_OpCaptureEventProfilingInfo :: #force_inline proc "contextless" (buf: []Ope } capture_event_profiling_info :: proc(b: ^Builder, op1: Id, op2: Id, op3: Id) { - append(&b.ops, inst_OpCaptureEventProfilingInfo(opbuf(b, 1 + 1 + 1), op1, op2, op3)) + append_elem(&b.ops, inst_OpCaptureEventProfilingInfo(opbuf(b, 1 + 1 + 1), op1, op2, op3)) } inst_OpGetDefaultQueue :: #force_inline proc "contextless" (result_type: Type_Ref, result: Id) -> Operation { @@ -3517,7 +3517,7 @@ inst_OpGetDefaultQueue :: #force_inline proc "contextless" (result_type: Type_Re get_default_queue :: proc(b: ^Builder, result_type: Type_Ref) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpGetDefaultQueue(result_type, r)) + append_elem(&b.ops, inst_OpGetDefaultQueue(result_type, r)) return r } @@ -3531,7 +3531,7 @@ inst_OpBuildNDRange :: #force_inline proc "contextless" (buf: []Operand, result_ build_nd_range :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Id, op3: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpBuildNDRange(opbuf(b, 1 + 1 + 1), result_type, r, op1, op2, op3)) + append_elem(&b.ops, inst_OpBuildNDRange(opbuf(b, 1 + 1 + 1), result_type, r, op1, op2, op3)) return r } @@ -3545,7 +3545,7 @@ inst_OpImageSparseSampleImplicitLod :: #force_inline proc "contextless" (buf: [] image_sparse_sample_implicit_lod :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Id, op3: Maybe(Image_Operands)) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpImageSparseSampleImplicitLod(opbuf(b, 1 + 1 + 1), result_type, r, op1, op2, op3)) + append_elem(&b.ops, inst_OpImageSparseSampleImplicitLod(opbuf(b, 1 + 1 + 1), result_type, r, op1, op2, op3)) return r } @@ -3559,7 +3559,7 @@ inst_OpImageSparseSampleExplicitLod :: #force_inline proc "contextless" (buf: [] image_sparse_sample_explicit_lod :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Id, op3: Image_Operands) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpImageSparseSampleExplicitLod(opbuf(b, 1 + 1 + 1), result_type, r, op1, op2, op3)) + append_elem(&b.ops, inst_OpImageSparseSampleExplicitLod(opbuf(b, 1 + 1 + 1), result_type, r, op1, op2, op3)) return r } @@ -3574,7 +3574,7 @@ inst_OpImageSparseSampleDrefImplicitLod :: #force_inline proc "contextless" (buf image_sparse_sample_dref_implicit_lod :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Id, op3: Id, op4: Maybe(Image_Operands)) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpImageSparseSampleDrefImplicitLod(opbuf(b, 1 + 1 + 1 + 1), result_type, r, op1, op2, op3, op4)) + append_elem(&b.ops, inst_OpImageSparseSampleDrefImplicitLod(opbuf(b, 1 + 1 + 1 + 1), result_type, r, op1, op2, op3, op4)) return r } @@ -3589,7 +3589,7 @@ inst_OpImageSparseSampleDrefExplicitLod :: #force_inline proc "contextless" (buf image_sparse_sample_dref_explicit_lod :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Id, op3: Id, op4: Image_Operands) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpImageSparseSampleDrefExplicitLod(opbuf(b, 1 + 1 + 1 + 1), result_type, r, op1, op2, op3, op4)) + append_elem(&b.ops, inst_OpImageSparseSampleDrefExplicitLod(opbuf(b, 1 + 1 + 1 + 1), result_type, r, op1, op2, op3, op4)) return r } @@ -3603,7 +3603,7 @@ inst_OpImageSparseSampleProjImplicitLod :: #force_inline proc "contextless" (buf image_sparse_sample_proj_implicit_lod :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Id, op3: Maybe(Image_Operands)) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpImageSparseSampleProjImplicitLod(opbuf(b, 1 + 1 + 1), result_type, r, op1, op2, op3)) + append_elem(&b.ops, inst_OpImageSparseSampleProjImplicitLod(opbuf(b, 1 + 1 + 1), result_type, r, op1, op2, op3)) return r } @@ -3617,7 +3617,7 @@ inst_OpImageSparseSampleProjExplicitLod :: #force_inline proc "contextless" (buf image_sparse_sample_proj_explicit_lod :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Id, op3: Image_Operands) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpImageSparseSampleProjExplicitLod(opbuf(b, 1 + 1 + 1), result_type, r, op1, op2, op3)) + append_elem(&b.ops, inst_OpImageSparseSampleProjExplicitLod(opbuf(b, 1 + 1 + 1), result_type, r, op1, op2, op3)) return r } @@ -3632,7 +3632,7 @@ inst_OpImageSparseSampleProjDrefImplicitLod :: #force_inline proc "contextless" image_sparse_sample_proj_dref_implicit_lod :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Id, op3: Id, op4: Maybe(Image_Operands)) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpImageSparseSampleProjDrefImplicitLod(opbuf(b, 1 + 1 + 1 + 1), result_type, r, op1, op2, op3, op4)) + append_elem(&b.ops, inst_OpImageSparseSampleProjDrefImplicitLod(opbuf(b, 1 + 1 + 1 + 1), result_type, r, op1, op2, op3, op4)) return r } @@ -3647,7 +3647,7 @@ inst_OpImageSparseSampleProjDrefExplicitLod :: #force_inline proc "contextless" image_sparse_sample_proj_dref_explicit_lod :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Id, op3: Id, op4: Image_Operands) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpImageSparseSampleProjDrefExplicitLod(opbuf(b, 1 + 1 + 1 + 1), result_type, r, op1, op2, op3, op4)) + append_elem(&b.ops, inst_OpImageSparseSampleProjDrefExplicitLod(opbuf(b, 1 + 1 + 1 + 1), result_type, r, op1, op2, op3, op4)) return r } @@ -3661,7 +3661,7 @@ inst_OpImageSparseFetch :: #force_inline proc "contextless" (buf: []Operand, res image_sparse_fetch :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Id, op3: Maybe(Image_Operands)) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpImageSparseFetch(opbuf(b, 1 + 1 + 1), result_type, r, op1, op2, op3)) + append_elem(&b.ops, inst_OpImageSparseFetch(opbuf(b, 1 + 1 + 1), result_type, r, op1, op2, op3)) return r } @@ -3676,7 +3676,7 @@ inst_OpImageSparseGather :: #force_inline proc "contextless" (buf: []Operand, re image_sparse_gather :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Id, op3: Id, op4: Maybe(Image_Operands)) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpImageSparseGather(opbuf(b, 1 + 1 + 1 + 1), result_type, r, op1, op2, op3, op4)) + append_elem(&b.ops, inst_OpImageSparseGather(opbuf(b, 1 + 1 + 1 + 1), result_type, r, op1, op2, op3, op4)) return r } @@ -3691,7 +3691,7 @@ inst_OpImageSparseDrefGather :: #force_inline proc "contextless" (buf: []Operand image_sparse_dref_gather :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Id, op3: Id, op4: Maybe(Image_Operands)) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpImageSparseDrefGather(opbuf(b, 1 + 1 + 1 + 1), result_type, r, op1, op2, op3, op4)) + append_elem(&b.ops, inst_OpImageSparseDrefGather(opbuf(b, 1 + 1 + 1 + 1), result_type, r, op1, op2, op3, op4)) return r } @@ -3703,7 +3703,7 @@ inst_OpImageSparseTexelsResident :: #force_inline proc "contextless" (buf: []Ope image_sparse_texels_resident :: proc(b: ^Builder, result_type: Type_Ref, op1: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpImageSparseTexelsResident(opbuf(b, 1), result_type, r, op1)) + append_elem(&b.ops, inst_OpImageSparseTexelsResident(opbuf(b, 1), result_type, r, op1)) return r } @@ -3712,7 +3712,7 @@ inst_OpNoLine :: #force_inline proc "contextless" () -> Operation { } no_line :: proc(b: ^Builder) { - append(&b.ops, inst_OpNoLine()) + append_elem(&b.ops, inst_OpNoLine()) } inst_OpAtomicFlagTestAndSet :: #force_inline proc "contextless" (buf: []Operand, result_type: Type_Ref, result: Id, op1: Id, op2: Id, op3: Id) -> Operation { @@ -3725,7 +3725,7 @@ inst_OpAtomicFlagTestAndSet :: #force_inline proc "contextless" (buf: []Operand, atomic_flag_test_and_set :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Id, op3: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpAtomicFlagTestAndSet(opbuf(b, 1 + 1 + 1), result_type, r, op1, op2, op3)) + append_elem(&b.ops, inst_OpAtomicFlagTestAndSet(opbuf(b, 1 + 1 + 1), result_type, r, op1, op2, op3)) return r } @@ -3738,7 +3738,7 @@ inst_OpAtomicFlagClear :: #force_inline proc "contextless" (buf: []Operand, op1: } atomic_flag_clear :: proc(b: ^Builder, op1: Id, op2: Id, op3: Id) { - append(&b.ops, inst_OpAtomicFlagClear(opbuf(b, 1 + 1 + 1), op1, op2, op3)) + append_elem(&b.ops, inst_OpAtomicFlagClear(opbuf(b, 1 + 1 + 1), op1, op2, op3)) } inst_OpImageSparseRead :: #force_inline proc "contextless" (buf: []Operand, result_type: Type_Ref, result: Id, op1: Id, op2: Id, op3: Maybe(Image_Operands)) -> Operation { @@ -3751,7 +3751,7 @@ inst_OpImageSparseRead :: #force_inline proc "contextless" (buf: []Operand, resu image_sparse_read :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Id, op3: Maybe(Image_Operands)) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpImageSparseRead(opbuf(b, 1 + 1 + 1), result_type, r, op1, op2, op3)) + append_elem(&b.ops, inst_OpImageSparseRead(opbuf(b, 1 + 1 + 1), result_type, r, op1, op2, op3)) return r } @@ -3763,7 +3763,7 @@ inst_OpSizeOf :: #force_inline proc "contextless" (buf: []Operand, result_type: size_of_ :: proc(b: ^Builder, result_type: Type_Ref, op1: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpSizeOf(opbuf(b, 1), result_type, r, op1)) + append_elem(&b.ops, inst_OpSizeOf(opbuf(b, 1), result_type, r, op1)) return r } @@ -3773,7 +3773,7 @@ inst_OpTypePipeStorage :: #force_inline proc "contextless" (result: Id) -> Opera type_pipe_storage :: proc(b: ^Builder) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpTypePipeStorage(r)) + append_elem(&b.ops, inst_OpTypePipeStorage(r)) return r } @@ -3787,7 +3787,7 @@ inst_OpConstantPipeStorage :: #force_inline proc "contextless" (buf: []Operand, constant_pipe_storage :: proc(b: ^Builder, result_type: Type_Ref, op1: i64, op2: i64, op3: i64) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpConstantPipeStorage(opbuf(b, 1 + 1 + 1), result_type, r, op1, op2, op3)) + append_elem(&b.ops, inst_OpConstantPipeStorage(opbuf(b, 1 + 1 + 1), result_type, r, op1, op2, op3)) return r } @@ -3799,7 +3799,7 @@ inst_OpCreatePipeFromPipeStorage :: #force_inline proc "contextless" (buf: []Ope create_pipe_from_pipe_storage :: proc(b: ^Builder, result_type: Type_Ref, op1: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpCreatePipeFromPipeStorage(opbuf(b, 1), result_type, r, op1)) + append_elem(&b.ops, inst_OpCreatePipeFromPipeStorage(opbuf(b, 1), result_type, r, op1)) return r } @@ -3815,7 +3815,7 @@ inst_OpGetKernelLocalSizeForSubgroupCount :: #force_inline proc "contextless" (b get_kernel_local_size_for_subgroup_count :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Id, op3: Id, op4: Id, op5: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpGetKernelLocalSizeForSubgroupCount(opbuf(b, 1 + 1 + 1 + 1 + 1), result_type, r, op1, op2, op3, op4, op5)) + append_elem(&b.ops, inst_OpGetKernelLocalSizeForSubgroupCount(opbuf(b, 1 + 1 + 1 + 1 + 1), result_type, r, op1, op2, op3, op4, op5)) return r } @@ -3830,7 +3830,7 @@ inst_OpGetKernelMaxNumSubgroups :: #force_inline proc "contextless" (buf: []Oper get_kernel_max_num_subgroups :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Id, op3: Id, op4: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpGetKernelMaxNumSubgroups(opbuf(b, 1 + 1 + 1 + 1), result_type, r, op1, op2, op3, op4)) + append_elem(&b.ops, inst_OpGetKernelMaxNumSubgroups(opbuf(b, 1 + 1 + 1 + 1), result_type, r, op1, op2, op3, op4)) return r } @@ -3840,7 +3840,7 @@ inst_OpTypeNamedBarrier :: #force_inline proc "contextless" (result: Id) -> Oper type_named_barrier :: proc(b: ^Builder) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpTypeNamedBarrier(r)) + append_elem(&b.ops, inst_OpTypeNamedBarrier(r)) return r } @@ -3852,7 +3852,7 @@ inst_OpNamedBarrierInitialize :: #force_inline proc "contextless" (buf: []Operan named_barrier_initialize :: proc(b: ^Builder, result_type: Type_Ref, op1: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpNamedBarrierInitialize(opbuf(b, 1), result_type, r, op1)) + append_elem(&b.ops, inst_OpNamedBarrierInitialize(opbuf(b, 1), result_type, r, op1)) return r } @@ -3865,7 +3865,7 @@ inst_OpMemoryNamedBarrier :: #force_inline proc "contextless" (buf: []Operand, o } memory_named_barrier :: proc(b: ^Builder, op1: Id, op2: Id, op3: Id) { - append(&b.ops, inst_OpMemoryNamedBarrier(opbuf(b, 1 + 1 + 1), op1, op2, op3)) + append_elem(&b.ops, inst_OpMemoryNamedBarrier(opbuf(b, 1 + 1 + 1), op1, op2, op3)) } inst_OpModuleProcessed :: #force_inline proc "contextless" (buf: []Operand, op1: string) -> Operation { @@ -3875,7 +3875,7 @@ inst_OpModuleProcessed :: #force_inline proc "contextless" (buf: []Operand, op1: } module_processed :: proc(b: ^Builder, op1: string) { - append(&b.ops, inst_OpModuleProcessed(opbuf(b, (len(op1) + 4) / 4), op1)) + append_elem(&b.ops, inst_OpModuleProcessed(opbuf(b, (len(op1) + 4) / 4), op1)) } inst_OpExecutionModeId :: #force_inline proc "contextless" (buf: []Operand, op1: Id, op2: Execution_Mode) -> Operation { @@ -3886,7 +3886,7 @@ inst_OpExecutionModeId :: #force_inline proc "contextless" (buf: []Operand, op1: } execution_mode_id :: proc(b: ^Builder, op1: Id, op2: Execution_Mode) { - append(&b.ops, inst_OpExecutionModeId(opbuf(b, 1 + 1), op1, op2)) + append_elem(&b.ops, inst_OpExecutionModeId(opbuf(b, 1 + 1), op1, op2)) } inst_OpDecorateId :: #force_inline proc "contextless" (buf: []Operand, op1: Id, op2: Decoration) -> Operation { @@ -3897,7 +3897,7 @@ inst_OpDecorateId :: #force_inline proc "contextless" (buf: []Operand, op1: Id, } decorate_id :: proc(b: ^Builder, op1: Id, op2: Decoration) { - append(&b.ops, inst_OpDecorateId(opbuf(b, 1 + 1), op1, op2)) + append_elem(&b.ops, inst_OpDecorateId(opbuf(b, 1 + 1), op1, op2)) } inst_OpGroupNonUniformElect :: #force_inline proc "contextless" (buf: []Operand, result_type: Type_Ref, result: Id, op1: Id) -> Operation { @@ -3908,7 +3908,7 @@ inst_OpGroupNonUniformElect :: #force_inline proc "contextless" (buf: []Operand, group_non_uniform_elect :: proc(b: ^Builder, result_type: Type_Ref, op1: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpGroupNonUniformElect(opbuf(b, 1), result_type, r, op1)) + append_elem(&b.ops, inst_OpGroupNonUniformElect(opbuf(b, 1), result_type, r, op1)) return r } @@ -3921,7 +3921,7 @@ inst_OpGroupNonUniformAll :: #force_inline proc "contextless" (buf: []Operand, r group_non_uniform_all :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpGroupNonUniformAll(opbuf(b, 1 + 1), result_type, r, op1, op2)) + append_elem(&b.ops, inst_OpGroupNonUniformAll(opbuf(b, 1 + 1), result_type, r, op1, op2)) return r } @@ -3934,7 +3934,7 @@ inst_OpGroupNonUniformAny :: #force_inline proc "contextless" (buf: []Operand, r group_non_uniform_any :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpGroupNonUniformAny(opbuf(b, 1 + 1), result_type, r, op1, op2)) + append_elem(&b.ops, inst_OpGroupNonUniformAny(opbuf(b, 1 + 1), result_type, r, op1, op2)) return r } @@ -3947,7 +3947,7 @@ inst_OpGroupNonUniformAllEqual :: #force_inline proc "contextless" (buf: []Opera group_non_uniform_all_equal :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpGroupNonUniformAllEqual(opbuf(b, 1 + 1), result_type, r, op1, op2)) + append_elem(&b.ops, inst_OpGroupNonUniformAllEqual(opbuf(b, 1 + 1), result_type, r, op1, op2)) return r } @@ -3961,7 +3961,7 @@ inst_OpGroupNonUniformBroadcast :: #force_inline proc "contextless" (buf: []Oper group_non_uniform_broadcast :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Id, op3: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpGroupNonUniformBroadcast(opbuf(b, 1 + 1 + 1), result_type, r, op1, op2, op3)) + append_elem(&b.ops, inst_OpGroupNonUniformBroadcast(opbuf(b, 1 + 1 + 1), result_type, r, op1, op2, op3)) return r } @@ -3974,7 +3974,7 @@ inst_OpGroupNonUniformBroadcastFirst :: #force_inline proc "contextless" (buf: [ group_non_uniform_broadcast_first :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpGroupNonUniformBroadcastFirst(opbuf(b, 1 + 1), result_type, r, op1, op2)) + append_elem(&b.ops, inst_OpGroupNonUniformBroadcastFirst(opbuf(b, 1 + 1), result_type, r, op1, op2)) return r } @@ -3987,7 +3987,7 @@ inst_OpGroupNonUniformBallot :: #force_inline proc "contextless" (buf: []Operand group_non_uniform_ballot :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpGroupNonUniformBallot(opbuf(b, 1 + 1), result_type, r, op1, op2)) + append_elem(&b.ops, inst_OpGroupNonUniformBallot(opbuf(b, 1 + 1), result_type, r, op1, op2)) return r } @@ -4000,7 +4000,7 @@ inst_OpGroupNonUniformInverseBallot :: #force_inline proc "contextless" (buf: [] group_non_uniform_inverse_ballot :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpGroupNonUniformInverseBallot(opbuf(b, 1 + 1), result_type, r, op1, op2)) + append_elem(&b.ops, inst_OpGroupNonUniformInverseBallot(opbuf(b, 1 + 1), result_type, r, op1, op2)) return r } @@ -4014,7 +4014,7 @@ inst_OpGroupNonUniformBallotBitExtract :: #force_inline proc "contextless" (buf: group_non_uniform_ballot_bit_extract :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Id, op3: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpGroupNonUniformBallotBitExtract(opbuf(b, 1 + 1 + 1), result_type, r, op1, op2, op3)) + append_elem(&b.ops, inst_OpGroupNonUniformBallotBitExtract(opbuf(b, 1 + 1 + 1), result_type, r, op1, op2, op3)) return r } @@ -4028,7 +4028,7 @@ inst_OpGroupNonUniformBallotBitCount :: #force_inline proc "contextless" (buf: [ group_non_uniform_ballot_bit_count :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Group_Operation, op3: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpGroupNonUniformBallotBitCount(opbuf(b, 1 + 1 + 1), result_type, r, op1, op2, op3)) + append_elem(&b.ops, inst_OpGroupNonUniformBallotBitCount(opbuf(b, 1 + 1 + 1), result_type, r, op1, op2, op3)) return r } @@ -4041,7 +4041,7 @@ inst_OpGroupNonUniformBallotFindLSB :: #force_inline proc "contextless" (buf: [] group_non_uniform_ballot_find_lsb :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpGroupNonUniformBallotFindLSB(opbuf(b, 1 + 1), result_type, r, op1, op2)) + append_elem(&b.ops, inst_OpGroupNonUniformBallotFindLSB(opbuf(b, 1 + 1), result_type, r, op1, op2)) return r } @@ -4054,7 +4054,7 @@ inst_OpGroupNonUniformBallotFindMSB :: #force_inline proc "contextless" (buf: [] group_non_uniform_ballot_find_msb :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpGroupNonUniformBallotFindMSB(opbuf(b, 1 + 1), result_type, r, op1, op2)) + append_elem(&b.ops, inst_OpGroupNonUniformBallotFindMSB(opbuf(b, 1 + 1), result_type, r, op1, op2)) return r } @@ -4068,7 +4068,7 @@ inst_OpGroupNonUniformShuffle :: #force_inline proc "contextless" (buf: []Operan group_non_uniform_shuffle :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Id, op3: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpGroupNonUniformShuffle(opbuf(b, 1 + 1 + 1), result_type, r, op1, op2, op3)) + append_elem(&b.ops, inst_OpGroupNonUniformShuffle(opbuf(b, 1 + 1 + 1), result_type, r, op1, op2, op3)) return r } @@ -4082,7 +4082,7 @@ inst_OpGroupNonUniformShuffleXor :: #force_inline proc "contextless" (buf: []Ope group_non_uniform_shuffle_xor :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Id, op3: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpGroupNonUniformShuffleXor(opbuf(b, 1 + 1 + 1), result_type, r, op1, op2, op3)) + append_elem(&b.ops, inst_OpGroupNonUniformShuffleXor(opbuf(b, 1 + 1 + 1), result_type, r, op1, op2, op3)) return r } @@ -4096,7 +4096,7 @@ inst_OpGroupNonUniformShuffleUp :: #force_inline proc "contextless" (buf: []Oper group_non_uniform_shuffle_up :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Id, op3: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpGroupNonUniformShuffleUp(opbuf(b, 1 + 1 + 1), result_type, r, op1, op2, op3)) + append_elem(&b.ops, inst_OpGroupNonUniformShuffleUp(opbuf(b, 1 + 1 + 1), result_type, r, op1, op2, op3)) return r } @@ -4110,7 +4110,7 @@ inst_OpGroupNonUniformShuffleDown :: #force_inline proc "contextless" (buf: []Op group_non_uniform_shuffle_down :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Id, op3: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpGroupNonUniformShuffleDown(opbuf(b, 1 + 1 + 1), result_type, r, op1, op2, op3)) + append_elem(&b.ops, inst_OpGroupNonUniformShuffleDown(opbuf(b, 1 + 1 + 1), result_type, r, op1, op2, op3)) return r } @@ -4125,7 +4125,7 @@ inst_OpGroupNonUniformIAdd :: #force_inline proc "contextless" (buf: []Operand, group_non_uniform_i_add :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Group_Operation, op3: Id, op4: Maybe(Id)) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpGroupNonUniformIAdd(opbuf(b, 1 + 1 + 1 + 1), result_type, r, op1, op2, op3, op4)) + append_elem(&b.ops, inst_OpGroupNonUniformIAdd(opbuf(b, 1 + 1 + 1 + 1), result_type, r, op1, op2, op3, op4)) return r } @@ -4140,7 +4140,7 @@ inst_OpGroupNonUniformFAdd :: #force_inline proc "contextless" (buf: []Operand, group_non_uniform_f_add :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Group_Operation, op3: Id, op4: Maybe(Id)) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpGroupNonUniformFAdd(opbuf(b, 1 + 1 + 1 + 1), result_type, r, op1, op2, op3, op4)) + append_elem(&b.ops, inst_OpGroupNonUniformFAdd(opbuf(b, 1 + 1 + 1 + 1), result_type, r, op1, op2, op3, op4)) return r } @@ -4155,7 +4155,7 @@ inst_OpGroupNonUniformIMul :: #force_inline proc "contextless" (buf: []Operand, group_non_uniform_i_mul :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Group_Operation, op3: Id, op4: Maybe(Id)) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpGroupNonUniformIMul(opbuf(b, 1 + 1 + 1 + 1), result_type, r, op1, op2, op3, op4)) + append_elem(&b.ops, inst_OpGroupNonUniformIMul(opbuf(b, 1 + 1 + 1 + 1), result_type, r, op1, op2, op3, op4)) return r } @@ -4170,7 +4170,7 @@ inst_OpGroupNonUniformFMul :: #force_inline proc "contextless" (buf: []Operand, group_non_uniform_f_mul :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Group_Operation, op3: Id, op4: Maybe(Id)) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpGroupNonUniformFMul(opbuf(b, 1 + 1 + 1 + 1), result_type, r, op1, op2, op3, op4)) + append_elem(&b.ops, inst_OpGroupNonUniformFMul(opbuf(b, 1 + 1 + 1 + 1), result_type, r, op1, op2, op3, op4)) return r } @@ -4185,7 +4185,7 @@ inst_OpGroupNonUniformSMin :: #force_inline proc "contextless" (buf: []Operand, group_non_uniform_s_min :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Group_Operation, op3: Id, op4: Maybe(Id)) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpGroupNonUniformSMin(opbuf(b, 1 + 1 + 1 + 1), result_type, r, op1, op2, op3, op4)) + append_elem(&b.ops, inst_OpGroupNonUniformSMin(opbuf(b, 1 + 1 + 1 + 1), result_type, r, op1, op2, op3, op4)) return r } @@ -4200,7 +4200,7 @@ inst_OpGroupNonUniformUMin :: #force_inline proc "contextless" (buf: []Operand, group_non_uniform_u_min :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Group_Operation, op3: Id, op4: Maybe(Id)) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpGroupNonUniformUMin(opbuf(b, 1 + 1 + 1 + 1), result_type, r, op1, op2, op3, op4)) + append_elem(&b.ops, inst_OpGroupNonUniformUMin(opbuf(b, 1 + 1 + 1 + 1), result_type, r, op1, op2, op3, op4)) return r } @@ -4215,7 +4215,7 @@ inst_OpGroupNonUniformFMin :: #force_inline proc "contextless" (buf: []Operand, group_non_uniform_f_min :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Group_Operation, op3: Id, op4: Maybe(Id)) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpGroupNonUniformFMin(opbuf(b, 1 + 1 + 1 + 1), result_type, r, op1, op2, op3, op4)) + append_elem(&b.ops, inst_OpGroupNonUniformFMin(opbuf(b, 1 + 1 + 1 + 1), result_type, r, op1, op2, op3, op4)) return r } @@ -4230,7 +4230,7 @@ inst_OpGroupNonUniformSMax :: #force_inline proc "contextless" (buf: []Operand, group_non_uniform_s_max :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Group_Operation, op3: Id, op4: Maybe(Id)) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpGroupNonUniformSMax(opbuf(b, 1 + 1 + 1 + 1), result_type, r, op1, op2, op3, op4)) + append_elem(&b.ops, inst_OpGroupNonUniformSMax(opbuf(b, 1 + 1 + 1 + 1), result_type, r, op1, op2, op3, op4)) return r } @@ -4245,7 +4245,7 @@ inst_OpGroupNonUniformUMax :: #force_inline proc "contextless" (buf: []Operand, group_non_uniform_u_max :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Group_Operation, op3: Id, op4: Maybe(Id)) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpGroupNonUniformUMax(opbuf(b, 1 + 1 + 1 + 1), result_type, r, op1, op2, op3, op4)) + append_elem(&b.ops, inst_OpGroupNonUniformUMax(opbuf(b, 1 + 1 + 1 + 1), result_type, r, op1, op2, op3, op4)) return r } @@ -4260,7 +4260,7 @@ inst_OpGroupNonUniformFMax :: #force_inline proc "contextless" (buf: []Operand, group_non_uniform_f_max :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Group_Operation, op3: Id, op4: Maybe(Id)) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpGroupNonUniformFMax(opbuf(b, 1 + 1 + 1 + 1), result_type, r, op1, op2, op3, op4)) + append_elem(&b.ops, inst_OpGroupNonUniformFMax(opbuf(b, 1 + 1 + 1 + 1), result_type, r, op1, op2, op3, op4)) return r } @@ -4275,7 +4275,7 @@ inst_OpGroupNonUniformBitwiseAnd :: #force_inline proc "contextless" (buf: []Ope group_non_uniform_bitwise_and :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Group_Operation, op3: Id, op4: Maybe(Id)) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpGroupNonUniformBitwiseAnd(opbuf(b, 1 + 1 + 1 + 1), result_type, r, op1, op2, op3, op4)) + append_elem(&b.ops, inst_OpGroupNonUniformBitwiseAnd(opbuf(b, 1 + 1 + 1 + 1), result_type, r, op1, op2, op3, op4)) return r } @@ -4290,7 +4290,7 @@ inst_OpGroupNonUniformBitwiseOr :: #force_inline proc "contextless" (buf: []Oper group_non_uniform_bitwise_or :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Group_Operation, op3: Id, op4: Maybe(Id)) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpGroupNonUniformBitwiseOr(opbuf(b, 1 + 1 + 1 + 1), result_type, r, op1, op2, op3, op4)) + append_elem(&b.ops, inst_OpGroupNonUniformBitwiseOr(opbuf(b, 1 + 1 + 1 + 1), result_type, r, op1, op2, op3, op4)) return r } @@ -4305,7 +4305,7 @@ inst_OpGroupNonUniformBitwiseXor :: #force_inline proc "contextless" (buf: []Ope group_non_uniform_bitwise_xor :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Group_Operation, op3: Id, op4: Maybe(Id)) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpGroupNonUniformBitwiseXor(opbuf(b, 1 + 1 + 1 + 1), result_type, r, op1, op2, op3, op4)) + append_elem(&b.ops, inst_OpGroupNonUniformBitwiseXor(opbuf(b, 1 + 1 + 1 + 1), result_type, r, op1, op2, op3, op4)) return r } @@ -4320,7 +4320,7 @@ inst_OpGroupNonUniformLogicalAnd :: #force_inline proc "contextless" (buf: []Ope group_non_uniform_logical_and :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Group_Operation, op3: Id, op4: Maybe(Id)) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpGroupNonUniformLogicalAnd(opbuf(b, 1 + 1 + 1 + 1), result_type, r, op1, op2, op3, op4)) + append_elem(&b.ops, inst_OpGroupNonUniformLogicalAnd(opbuf(b, 1 + 1 + 1 + 1), result_type, r, op1, op2, op3, op4)) return r } @@ -4335,7 +4335,7 @@ inst_OpGroupNonUniformLogicalOr :: #force_inline proc "contextless" (buf: []Oper group_non_uniform_logical_or :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Group_Operation, op3: Id, op4: Maybe(Id)) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpGroupNonUniformLogicalOr(opbuf(b, 1 + 1 + 1 + 1), result_type, r, op1, op2, op3, op4)) + append_elem(&b.ops, inst_OpGroupNonUniformLogicalOr(opbuf(b, 1 + 1 + 1 + 1), result_type, r, op1, op2, op3, op4)) return r } @@ -4350,7 +4350,7 @@ inst_OpGroupNonUniformLogicalXor :: #force_inline proc "contextless" (buf: []Ope group_non_uniform_logical_xor :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Group_Operation, op3: Id, op4: Maybe(Id)) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpGroupNonUniformLogicalXor(opbuf(b, 1 + 1 + 1 + 1), result_type, r, op1, op2, op3, op4)) + append_elem(&b.ops, inst_OpGroupNonUniformLogicalXor(opbuf(b, 1 + 1 + 1 + 1), result_type, r, op1, op2, op3, op4)) return r } @@ -4364,7 +4364,7 @@ inst_OpGroupNonUniformQuadBroadcast :: #force_inline proc "contextless" (buf: [] group_non_uniform_quad_broadcast :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Id, op3: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpGroupNonUniformQuadBroadcast(opbuf(b, 1 + 1 + 1), result_type, r, op1, op2, op3)) + append_elem(&b.ops, inst_OpGroupNonUniformQuadBroadcast(opbuf(b, 1 + 1 + 1), result_type, r, op1, op2, op3)) return r } @@ -4378,7 +4378,7 @@ inst_OpGroupNonUniformQuadSwap :: #force_inline proc "contextless" (buf: []Opera group_non_uniform_quad_swap :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Id, op3: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpGroupNonUniformQuadSwap(opbuf(b, 1 + 1 + 1), result_type, r, op1, op2, op3)) + append_elem(&b.ops, inst_OpGroupNonUniformQuadSwap(opbuf(b, 1 + 1 + 1), result_type, r, op1, op2, op3)) return r } @@ -4390,7 +4390,7 @@ inst_OpCopyLogical :: #force_inline proc "contextless" (buf: []Operand, result_t copy_logical :: proc(b: ^Builder, result_type: Type_Ref, op1: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpCopyLogical(opbuf(b, 1), result_type, r, op1)) + append_elem(&b.ops, inst_OpCopyLogical(opbuf(b, 1), result_type, r, op1)) return r } @@ -4403,7 +4403,7 @@ inst_OpPtrEqual :: #force_inline proc "contextless" (buf: []Operand, result_type ptr_equal :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpPtrEqual(opbuf(b, 1 + 1), result_type, r, op1, op2)) + append_elem(&b.ops, inst_OpPtrEqual(opbuf(b, 1 + 1), result_type, r, op1, op2)) return r } @@ -4416,7 +4416,7 @@ inst_OpPtrNotEqual :: #force_inline proc "contextless" (buf: []Operand, result_t ptr_not_equal :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpPtrNotEqual(opbuf(b, 1 + 1), result_type, r, op1, op2)) + append_elem(&b.ops, inst_OpPtrNotEqual(opbuf(b, 1 + 1), result_type, r, op1, op2)) return r } @@ -4429,7 +4429,7 @@ inst_OpPtrDiff :: #force_inline proc "contextless" (buf: []Operand, result_type: ptr_diff :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpPtrDiff(opbuf(b, 1 + 1), result_type, r, op1, op2)) + append_elem(&b.ops, inst_OpPtrDiff(opbuf(b, 1 + 1), result_type, r, op1, op2)) return r } @@ -4442,7 +4442,7 @@ inst_OpColorAttachmentReadEXT :: #force_inline proc "contextless" (buf: []Operan color_attachment_read_ext :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Maybe(Id)) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpColorAttachmentReadEXT(opbuf(b, 1 + 1), result_type, r, op1, op2)) + append_elem(&b.ops, inst_OpColorAttachmentReadEXT(opbuf(b, 1 + 1), result_type, r, op1, op2)) return r } @@ -4454,7 +4454,7 @@ inst_OpDepthAttachmentReadEXT :: #force_inline proc "contextless" (buf: []Operan depth_attachment_read_ext :: proc(b: ^Builder, result_type: Type_Ref, op1: Maybe(Id)) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpDepthAttachmentReadEXT(opbuf(b, 1), result_type, r, op1)) + append_elem(&b.ops, inst_OpDepthAttachmentReadEXT(opbuf(b, 1), result_type, r, op1)) return r } @@ -4466,7 +4466,7 @@ inst_OpStencilAttachmentReadEXT :: #force_inline proc "contextless" (buf: []Oper stencil_attachment_read_ext :: proc(b: ^Builder, result_type: Type_Ref, op1: Maybe(Id)) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpStencilAttachmentReadEXT(opbuf(b, 1), result_type, r, op1)) + append_elem(&b.ops, inst_OpStencilAttachmentReadEXT(opbuf(b, 1), result_type, r, op1)) return r } @@ -4480,7 +4480,7 @@ inst_OpTypeTensorARM :: #force_inline proc "contextless" (buf: []Operand, result type_tensor_arm :: proc(b: ^Builder, op1: Id, op2: Maybe(Id), op3: Maybe(Id)) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpTypeTensorARM(opbuf(b, 1 + 1 + 1), r, op1, op2, op3)) + append_elem(&b.ops, inst_OpTypeTensorARM(opbuf(b, 1 + 1 + 1), r, op1, op2, op3)) return r } @@ -4494,7 +4494,7 @@ inst_OpTensorReadARM :: #force_inline proc "contextless" (buf: []Operand, result tensor_read_arm :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Id, op3: Maybe(Tensor_Operands)) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpTensorReadARM(opbuf(b, 1 + 1 + 1), result_type, r, op1, op2, op3)) + append_elem(&b.ops, inst_OpTensorReadARM(opbuf(b, 1 + 1 + 1), result_type, r, op1, op2, op3)) return r } @@ -4508,7 +4508,7 @@ inst_OpTensorWriteARM :: #force_inline proc "contextless" (buf: []Operand, op1: } tensor_write_arm :: proc(b: ^Builder, op1: Id, op2: Id, op3: Id, op4: Maybe(Tensor_Operands)) { - append(&b.ops, inst_OpTensorWriteARM(opbuf(b, 1 + 1 + 1 + 1), op1, op2, op3, op4)) + append_elem(&b.ops, inst_OpTensorWriteARM(opbuf(b, 1 + 1 + 1 + 1), op1, op2, op3, op4)) } inst_OpTensorQuerySizeARM :: #force_inline proc "contextless" (buf: []Operand, result_type: Type_Ref, result: Id, op1: Id, op2: Id) -> Operation { @@ -4520,7 +4520,7 @@ inst_OpTensorQuerySizeARM :: #force_inline proc "contextless" (buf: []Operand, r tensor_query_size_arm :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpTensorQuerySizeARM(opbuf(b, 1 + 1), result_type, r, op1, op2)) + append_elem(&b.ops, inst_OpTensorQuerySizeARM(opbuf(b, 1 + 1), result_type, r, op1, op2)) return r } @@ -4532,7 +4532,7 @@ inst_OpGraphConstantARM :: #force_inline proc "contextless" (buf: []Operand, res graph_constant_arm :: proc(b: ^Builder, result_type: Type_Ref, op1: i64) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpGraphConstantARM(opbuf(b, 1), result_type, r, op1)) + append_elem(&b.ops, inst_OpGraphConstantARM(opbuf(b, 1), result_type, r, op1)) return r } @@ -4545,7 +4545,7 @@ inst_OpGraphEntryPointARM :: #force_inline proc "contextless" (buf: []Operand, o } graph_entry_point_arm :: proc(b: ^Builder, op1: Id, op2: string, op3: []Id) { - append(&b.ops, inst_OpGraphEntryPointARM(opbuf(b, 1 + (len(op2) + 4) / 4 + len(op3)), op1, op2, op3)) + append_elem(&b.ops, inst_OpGraphEntryPointARM(opbuf(b, 1 + (len(op2) + 4) / 4 + len(op3)), op1, op2, op3)) } inst_OpGraphARM :: #force_inline proc "contextless" (result_type: Type_Ref, result: Id) -> Operation { @@ -4554,7 +4554,7 @@ inst_OpGraphARM :: #force_inline proc "contextless" (result_type: Type_Ref, resu graph_arm :: proc(b: ^Builder, result_type: Type_Ref) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpGraphARM(result_type, r)) + append_elem(&b.ops, inst_OpGraphARM(result_type, r)) return r } @@ -4567,7 +4567,7 @@ inst_OpGraphInputARM :: #force_inline proc "contextless" (buf: []Operand, result graph_input_arm :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: []Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpGraphInputARM(opbuf(b, 1 + len(op2)), result_type, r, op1, op2)) + append_elem(&b.ops, inst_OpGraphInputARM(opbuf(b, 1 + len(op2)), result_type, r, op1, op2)) return r } @@ -4580,7 +4580,7 @@ inst_OpGraphSetOutputARM :: #force_inline proc "contextless" (buf: []Operand, op } graph_set_output_arm :: proc(b: ^Builder, op1: Id, op2: Id, op3: []Id) { - append(&b.ops, inst_OpGraphSetOutputARM(opbuf(b, 1 + 1 + len(op3)), op1, op2, op3)) + append_elem(&b.ops, inst_OpGraphSetOutputARM(opbuf(b, 1 + 1 + len(op3)), op1, op2, op3)) } inst_OpGraphEndARM :: #force_inline proc "contextless" () -> Operation { @@ -4588,7 +4588,7 @@ inst_OpGraphEndARM :: #force_inline proc "contextless" () -> Operation { } graph_end_arm :: proc(b: ^Builder) { - append(&b.ops, inst_OpGraphEndARM()) + append_elem(&b.ops, inst_OpGraphEndARM()) } inst_OpTypeGraphARM :: #force_inline proc "contextless" (buf: []Operand, result: Id, op1: i64, op2: []Id) -> Operation { @@ -4600,7 +4600,7 @@ inst_OpTypeGraphARM :: #force_inline proc "contextless" (buf: []Operand, result: type_graph_arm :: proc(b: ^Builder, op1: i64, op2: []Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpTypeGraphARM(opbuf(b, 1 + len(op2)), r, op1, op2)) + append_elem(&b.ops, inst_OpTypeGraphARM(opbuf(b, 1 + len(op2)), r, op1, op2)) return r } @@ -4609,7 +4609,7 @@ inst_OpTerminateInvocation :: #force_inline proc "contextless" () -> Operation { } terminate_invocation :: proc(b: ^Builder) { - append(&b.ops, inst_OpTerminateInvocation()) + append_elem(&b.ops, inst_OpTerminateInvocation()) } inst_OpTypeUntypedPointerKHR :: #force_inline proc "contextless" (buf: []Operand, result: Id, op1: Storage_Class) -> Operation { @@ -4620,7 +4620,7 @@ inst_OpTypeUntypedPointerKHR :: #force_inline proc "contextless" (buf: []Operand type_untyped_pointer_khr :: proc(b: ^Builder, op1: Storage_Class) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpTypeUntypedPointerKHR(opbuf(b, 1), r, op1)) + append_elem(&b.ops, inst_OpTypeUntypedPointerKHR(opbuf(b, 1), r, op1)) return r } @@ -4634,7 +4634,7 @@ inst_OpUntypedVariableKHR :: #force_inline proc "contextless" (buf: []Operand, r untyped_variable_khr :: proc(b: ^Builder, result_type: Type_Ref, op1: Storage_Class, op2: Maybe(Id), op3: Maybe(Id)) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpUntypedVariableKHR(opbuf(b, 1 + 1 + 1), result_type, r, op1, op2, op3)) + append_elem(&b.ops, inst_OpUntypedVariableKHR(opbuf(b, 1 + 1 + 1), result_type, r, op1, op2, op3)) return r } @@ -4648,7 +4648,7 @@ inst_OpUntypedAccessChainKHR :: #force_inline proc "contextless" (buf: []Operand untyped_access_chain_khr :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Id, op3: []Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpUntypedAccessChainKHR(opbuf(b, 1 + 1 + len(op3)), result_type, r, op1, op2, op3)) + append_elem(&b.ops, inst_OpUntypedAccessChainKHR(opbuf(b, 1 + 1 + len(op3)), result_type, r, op1, op2, op3)) return r } @@ -4662,7 +4662,7 @@ inst_OpUntypedInBoundsAccessChainKHR :: #force_inline proc "contextless" (buf: [ untyped_in_bounds_access_chain_khr :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Id, op3: []Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpUntypedInBoundsAccessChainKHR(opbuf(b, 1 + 1 + len(op3)), result_type, r, op1, op2, op3)) + append_elem(&b.ops, inst_OpUntypedInBoundsAccessChainKHR(opbuf(b, 1 + 1 + len(op3)), result_type, r, op1, op2, op3)) return r } @@ -4674,7 +4674,7 @@ inst_OpSubgroupBallotKHR :: #force_inline proc "contextless" (buf: []Operand, re subgroup_ballot_khr :: proc(b: ^Builder, result_type: Type_Ref, op1: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpSubgroupBallotKHR(opbuf(b, 1), result_type, r, op1)) + append_elem(&b.ops, inst_OpSubgroupBallotKHR(opbuf(b, 1), result_type, r, op1)) return r } @@ -4686,7 +4686,7 @@ inst_OpSubgroupFirstInvocationKHR :: #force_inline proc "contextless" (buf: []Op subgroup_first_invocation_khr :: proc(b: ^Builder, result_type: Type_Ref, op1: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpSubgroupFirstInvocationKHR(opbuf(b, 1), result_type, r, op1)) + append_elem(&b.ops, inst_OpSubgroupFirstInvocationKHR(opbuf(b, 1), result_type, r, op1)) return r } @@ -4701,7 +4701,7 @@ inst_OpUntypedPtrAccessChainKHR :: #force_inline proc "contextless" (buf: []Oper untyped_ptr_access_chain_khr :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Id, op3: Id, op4: []Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpUntypedPtrAccessChainKHR(opbuf(b, 1 + 1 + 1 + len(op4)), result_type, r, op1, op2, op3, op4)) + append_elem(&b.ops, inst_OpUntypedPtrAccessChainKHR(opbuf(b, 1 + 1 + 1 + len(op4)), result_type, r, op1, op2, op3, op4)) return r } @@ -4716,7 +4716,7 @@ inst_OpUntypedInBoundsPtrAccessChainKHR :: #force_inline proc "contextless" (buf untyped_in_bounds_ptr_access_chain_khr :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Id, op3: Id, op4: []Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpUntypedInBoundsPtrAccessChainKHR(opbuf(b, 1 + 1 + 1 + len(op4)), result_type, r, op1, op2, op3, op4)) + append_elem(&b.ops, inst_OpUntypedInBoundsPtrAccessChainKHR(opbuf(b, 1 + 1 + 1 + len(op4)), result_type, r, op1, op2, op3, op4)) return r } @@ -4730,7 +4730,7 @@ inst_OpUntypedArrayLengthKHR :: #force_inline proc "contextless" (buf: []Operand untyped_array_length_khr :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Id, op3: i64) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpUntypedArrayLengthKHR(opbuf(b, 1 + 1 + 1), result_type, r, op1, op2, op3)) + append_elem(&b.ops, inst_OpUntypedArrayLengthKHR(opbuf(b, 1 + 1 + 1), result_type, r, op1, op2, op3)) return r } @@ -4745,7 +4745,7 @@ inst_OpUntypedPrefetchKHR :: #force_inline proc "contextless" (buf: []Operand, o } untyped_prefetch_khr :: proc(b: ^Builder, op1: Id, op2: Id, op3: Maybe(Id), op4: Maybe(Id), op5: Maybe(Id)) { - append(&b.ops, inst_OpUntypedPrefetchKHR(opbuf(b, 1 + 1 + 1 + 1 + 1), op1, op2, op3, op4, op5)) + append_elem(&b.ops, inst_OpUntypedPrefetchKHR(opbuf(b, 1 + 1 + 1 + 1 + 1), op1, op2, op3, op4, op5)) } inst_OpFmaKHR :: #force_inline proc "contextless" (buf: []Operand, result_type: Type_Ref, result: Id, op1: Id, op2: Id, op3: Id) -> Operation { @@ -4758,7 +4758,7 @@ inst_OpFmaKHR :: #force_inline proc "contextless" (buf: []Operand, result_type: fma_khr :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Id, op3: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpFmaKHR(opbuf(b, 1 + 1 + 1), result_type, r, op1, op2, op3)) + append_elem(&b.ops, inst_OpFmaKHR(opbuf(b, 1 + 1 + 1), result_type, r, op1, op2, op3)) return r } @@ -4770,7 +4770,7 @@ inst_OpSubgroupAllKHR :: #force_inline proc "contextless" (buf: []Operand, resul subgroup_all_khr :: proc(b: ^Builder, result_type: Type_Ref, op1: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpSubgroupAllKHR(opbuf(b, 1), result_type, r, op1)) + append_elem(&b.ops, inst_OpSubgroupAllKHR(opbuf(b, 1), result_type, r, op1)) return r } @@ -4782,7 +4782,7 @@ inst_OpSubgroupAnyKHR :: #force_inline proc "contextless" (buf: []Operand, resul subgroup_any_khr :: proc(b: ^Builder, result_type: Type_Ref, op1: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpSubgroupAnyKHR(opbuf(b, 1), result_type, r, op1)) + append_elem(&b.ops, inst_OpSubgroupAnyKHR(opbuf(b, 1), result_type, r, op1)) return r } @@ -4794,7 +4794,7 @@ inst_OpSubgroupAllEqualKHR :: #force_inline proc "contextless" (buf: []Operand, subgroup_all_equal_khr :: proc(b: ^Builder, result_type: Type_Ref, op1: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpSubgroupAllEqualKHR(opbuf(b, 1), result_type, r, op1)) + append_elem(&b.ops, inst_OpSubgroupAllEqualKHR(opbuf(b, 1), result_type, r, op1)) return r } @@ -4809,7 +4809,7 @@ inst_OpGroupNonUniformRotateKHR :: #force_inline proc "contextless" (buf: []Oper group_non_uniform_rotate_khr :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Id, op3: Id, op4: Maybe(Id)) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpGroupNonUniformRotateKHR(opbuf(b, 1 + 1 + 1 + 1), result_type, r, op1, op2, op3, op4)) + append_elem(&b.ops, inst_OpGroupNonUniformRotateKHR(opbuf(b, 1 + 1 + 1 + 1), result_type, r, op1, op2, op3, op4)) return r } @@ -4822,7 +4822,7 @@ inst_OpSubgroupReadInvocationKHR :: #force_inline proc "contextless" (buf: []Ope subgroup_read_invocation_khr :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpSubgroupReadInvocationKHR(opbuf(b, 1 + 1), result_type, r, op1, op2)) + append_elem(&b.ops, inst_OpSubgroupReadInvocationKHR(opbuf(b, 1 + 1), result_type, r, op1, op2)) return r } @@ -4836,7 +4836,7 @@ inst_OpExtInstWithForwardRefsKHR :: #force_inline proc "contextless" (buf: []Ope ext_inst_with_forward_refs_khr :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: i64, op3: []Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpExtInstWithForwardRefsKHR(opbuf(b, 1 + 1 + len(op3)), result_type, r, op1, op2, op3)) + append_elem(&b.ops, inst_OpExtInstWithForwardRefsKHR(opbuf(b, 1 + 1 + len(op3)), result_type, r, op1, op2, op3)) return r } @@ -4856,7 +4856,7 @@ inst_OpUntypedGroupAsyncCopyKHR :: #force_inline proc "contextless" (buf: []Oper untyped_group_async_copy_khr :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Id, op3: Id, op4: Id, op5: Id, op6: Id, op7: Id, op8: Maybe(Memory_Access), op9: Maybe(Memory_Access)) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpUntypedGroupAsyncCopyKHR(opbuf(b, 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1), result_type, r, op1, op2, op3, op4, op5, op6, op7, op8, op9)) + append_elem(&b.ops, inst_OpUntypedGroupAsyncCopyKHR(opbuf(b, 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1), result_type, r, op1, op2, op3, op4, op5, op6, op7, op8, op9)) return r } @@ -4877,7 +4877,7 @@ inst_OpTraceRayKHR :: #force_inline proc "contextless" (buf: []Operand, op1: Id, } trace_ray_khr :: proc(b: ^Builder, op1: Id, op2: Id, op3: Id, op4: Id, op5: Id, op6: Id, op7: Id, op8: Id, op9: Id, op10: Id, op11: Id) { - append(&b.ops, inst_OpTraceRayKHR(opbuf(b, 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1), op1, op2, op3, op4, op5, op6, op7, op8, op9, op10, op11)) + append_elem(&b.ops, inst_OpTraceRayKHR(opbuf(b, 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1), op1, op2, op3, op4, op5, op6, op7, op8, op9, op10, op11)) } inst_OpExecuteCallableKHR :: #force_inline proc "contextless" (buf: []Operand, op1: Id, op2: Id) -> Operation { @@ -4888,7 +4888,7 @@ inst_OpExecuteCallableKHR :: #force_inline proc "contextless" (buf: []Operand, o } execute_callable_khr :: proc(b: ^Builder, op1: Id, op2: Id) { - append(&b.ops, inst_OpExecuteCallableKHR(opbuf(b, 1 + 1), op1, op2)) + append_elem(&b.ops, inst_OpExecuteCallableKHR(opbuf(b, 1 + 1), op1, op2)) } inst_OpConvertUToAccelerationStructureKHR :: #force_inline proc "contextless" (buf: []Operand, result_type: Type_Ref, result: Id, op1: Id) -> Operation { @@ -4899,7 +4899,7 @@ inst_OpConvertUToAccelerationStructureKHR :: #force_inline proc "contextless" (b convert_u_to_acceleration_structure_khr :: proc(b: ^Builder, result_type: Type_Ref, op1: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpConvertUToAccelerationStructureKHR(opbuf(b, 1), result_type, r, op1)) + append_elem(&b.ops, inst_OpConvertUToAccelerationStructureKHR(opbuf(b, 1), result_type, r, op1)) return r } @@ -4908,7 +4908,7 @@ inst_OpIgnoreIntersectionKHR :: #force_inline proc "contextless" () -> Operation } ignore_intersection_khr :: proc(b: ^Builder) { - append(&b.ops, inst_OpIgnoreIntersectionKHR()) + append_elem(&b.ops, inst_OpIgnoreIntersectionKHR()) } inst_OpTerminateRayKHR :: #force_inline proc "contextless" () -> Operation { @@ -4916,7 +4916,7 @@ inst_OpTerminateRayKHR :: #force_inline proc "contextless" () -> Operation { } terminate_ray_khr :: proc(b: ^Builder) { - append(&b.ops, inst_OpTerminateRayKHR()) + append_elem(&b.ops, inst_OpTerminateRayKHR()) } inst_OpSDot :: #force_inline proc "contextless" (buf: []Operand, result_type: Type_Ref, result: Id, op1: Id, op2: Id, op3: Maybe(Packed_Vector_Format)) -> Operation { @@ -4929,7 +4929,7 @@ inst_OpSDot :: #force_inline proc "contextless" (buf: []Operand, result_type: Ty s_dot :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Id, op3: Maybe(Packed_Vector_Format)) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpSDot(opbuf(b, 1 + 1 + 1), result_type, r, op1, op2, op3)) + append_elem(&b.ops, inst_OpSDot(opbuf(b, 1 + 1 + 1), result_type, r, op1, op2, op3)) return r } @@ -4943,7 +4943,7 @@ inst_OpUDot :: #force_inline proc "contextless" (buf: []Operand, result_type: Ty u_dot :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Id, op3: Maybe(Packed_Vector_Format)) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpUDot(opbuf(b, 1 + 1 + 1), result_type, r, op1, op2, op3)) + append_elem(&b.ops, inst_OpUDot(opbuf(b, 1 + 1 + 1), result_type, r, op1, op2, op3)) return r } @@ -4957,7 +4957,7 @@ inst_OpSUDot :: #force_inline proc "contextless" (buf: []Operand, result_type: T su_dot :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Id, op3: Maybe(Packed_Vector_Format)) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpSUDot(opbuf(b, 1 + 1 + 1), result_type, r, op1, op2, op3)) + append_elem(&b.ops, inst_OpSUDot(opbuf(b, 1 + 1 + 1), result_type, r, op1, op2, op3)) return r } @@ -4972,7 +4972,7 @@ inst_OpSDotAccSat :: #force_inline proc "contextless" (buf: []Operand, result_ty s_dot_acc_sat :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Id, op3: Id, op4: Maybe(Packed_Vector_Format)) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpSDotAccSat(opbuf(b, 1 + 1 + 1 + 1), result_type, r, op1, op2, op3, op4)) + append_elem(&b.ops, inst_OpSDotAccSat(opbuf(b, 1 + 1 + 1 + 1), result_type, r, op1, op2, op3, op4)) return r } @@ -4987,7 +4987,7 @@ inst_OpUDotAccSat :: #force_inline proc "contextless" (buf: []Operand, result_ty u_dot_acc_sat :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Id, op3: Id, op4: Maybe(Packed_Vector_Format)) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpUDotAccSat(opbuf(b, 1 + 1 + 1 + 1), result_type, r, op1, op2, op3, op4)) + append_elem(&b.ops, inst_OpUDotAccSat(opbuf(b, 1 + 1 + 1 + 1), result_type, r, op1, op2, op3, op4)) return r } @@ -5002,7 +5002,7 @@ inst_OpSUDotAccSat :: #force_inline proc "contextless" (buf: []Operand, result_t su_dot_acc_sat :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Id, op3: Id, op4: Maybe(Packed_Vector_Format)) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpSUDotAccSat(opbuf(b, 1 + 1 + 1 + 1), result_type, r, op1, op2, op3, op4)) + append_elem(&b.ops, inst_OpSUDotAccSat(opbuf(b, 1 + 1 + 1 + 1), result_type, r, op1, op2, op3, op4)) return r } @@ -5018,7 +5018,7 @@ inst_OpTypeCooperativeMatrixKHR :: #force_inline proc "contextless" (buf: []Oper type_cooperative_matrix_khr :: proc(b: ^Builder, op1: Id, op2: Id, op3: Id, op4: Id, op5: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpTypeCooperativeMatrixKHR(opbuf(b, 1 + 1 + 1 + 1 + 1), r, op1, op2, op3, op4, op5)) + append_elem(&b.ops, inst_OpTypeCooperativeMatrixKHR(opbuf(b, 1 + 1 + 1 + 1 + 1), r, op1, op2, op3, op4, op5)) return r } @@ -5033,7 +5033,7 @@ inst_OpCooperativeMatrixLoadKHR :: #force_inline proc "contextless" (buf: []Oper cooperative_matrix_load_khr :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Id, op3: Maybe(Id), op4: Maybe(Memory_Access)) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpCooperativeMatrixLoadKHR(opbuf(b, 1 + 1 + 1 + 1), result_type, r, op1, op2, op3, op4)) + append_elem(&b.ops, inst_OpCooperativeMatrixLoadKHR(opbuf(b, 1 + 1 + 1 + 1), result_type, r, op1, op2, op3, op4)) return r } @@ -5048,7 +5048,7 @@ inst_OpCooperativeMatrixStoreKHR :: #force_inline proc "contextless" (buf: []Ope } cooperative_matrix_store_khr :: proc(b: ^Builder, op1: Id, op2: Id, op3: Id, op4: Maybe(Id), op5: Maybe(Memory_Access)) { - append(&b.ops, inst_OpCooperativeMatrixStoreKHR(opbuf(b, 1 + 1 + 1 + 1 + 1), op1, op2, op3, op4, op5)) + append_elem(&b.ops, inst_OpCooperativeMatrixStoreKHR(opbuf(b, 1 + 1 + 1 + 1 + 1), op1, op2, op3, op4, op5)) } inst_OpCooperativeMatrixMulAddKHR :: #force_inline proc "contextless" (buf: []Operand, result_type: Type_Ref, result: Id, op1: Id, op2: Id, op3: Id, op4: Maybe(Cooperative_Matrix_Operands)) -> Operation { @@ -5062,7 +5062,7 @@ inst_OpCooperativeMatrixMulAddKHR :: #force_inline proc "contextless" (buf: []Op cooperative_matrix_mul_add_khr :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Id, op3: Id, op4: Maybe(Cooperative_Matrix_Operands)) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpCooperativeMatrixMulAddKHR(opbuf(b, 1 + 1 + 1 + 1), result_type, r, op1, op2, op3, op4)) + append_elem(&b.ops, inst_OpCooperativeMatrixMulAddKHR(opbuf(b, 1 + 1 + 1 + 1), result_type, r, op1, op2, op3, op4)) return r } @@ -5074,7 +5074,7 @@ inst_OpCooperativeMatrixLengthKHR :: #force_inline proc "contextless" (buf: []Op cooperative_matrix_length_khr :: proc(b: ^Builder, result_type: Type_Ref, op1: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpCooperativeMatrixLengthKHR(opbuf(b, 1), result_type, r, op1)) + append_elem(&b.ops, inst_OpCooperativeMatrixLengthKHR(opbuf(b, 1), result_type, r, op1)) return r } @@ -5086,7 +5086,7 @@ inst_OpConstantCompositeReplicateEXT :: #force_inline proc "contextless" (buf: [ constant_composite_replicate_ext :: proc(b: ^Builder, result_type: Type_Ref, op1: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpConstantCompositeReplicateEXT(opbuf(b, 1), result_type, r, op1)) + append_elem(&b.ops, inst_OpConstantCompositeReplicateEXT(opbuf(b, 1), result_type, r, op1)) return r } @@ -5098,7 +5098,7 @@ inst_OpSpecConstantCompositeReplicateEXT :: #force_inline proc "contextless" (bu spec_constant_composite_replicate_ext :: proc(b: ^Builder, result_type: Type_Ref, op1: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpSpecConstantCompositeReplicateEXT(opbuf(b, 1), result_type, r, op1)) + append_elem(&b.ops, inst_OpSpecConstantCompositeReplicateEXT(opbuf(b, 1), result_type, r, op1)) return r } @@ -5110,7 +5110,7 @@ inst_OpCompositeConstructReplicateEXT :: #force_inline proc "contextless" (buf: composite_construct_replicate_ext :: proc(b: ^Builder, result_type: Type_Ref, op1: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpCompositeConstructReplicateEXT(opbuf(b, 1), result_type, r, op1)) + append_elem(&b.ops, inst_OpCompositeConstructReplicateEXT(opbuf(b, 1), result_type, r, op1)) return r } @@ -5120,7 +5120,7 @@ inst_OpTypeRayQueryKHR :: #force_inline proc "contextless" (result: Id) -> Opera type_ray_query_khr :: proc(b: ^Builder) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpTypeRayQueryKHR(r)) + append_elem(&b.ops, inst_OpTypeRayQueryKHR(r)) return r } @@ -5138,7 +5138,7 @@ inst_OpRayQueryInitializeKHR :: #force_inline proc "contextless" (buf: []Operand } ray_query_initialize_khr :: proc(b: ^Builder, op1: Id, op2: Id, op3: Id, op4: Id, op5: Id, op6: Id, op7: Id, op8: Id) { - append(&b.ops, inst_OpRayQueryInitializeKHR(opbuf(b, 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1), op1, op2, op3, op4, op5, op6, op7, op8)) + append_elem(&b.ops, inst_OpRayQueryInitializeKHR(opbuf(b, 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1), op1, op2, op3, op4, op5, op6, op7, op8)) } inst_OpRayQueryTerminateKHR :: #force_inline proc "contextless" (buf: []Operand, op1: Id) -> Operation { @@ -5148,7 +5148,7 @@ inst_OpRayQueryTerminateKHR :: #force_inline proc "contextless" (buf: []Operand, } ray_query_terminate_khr :: proc(b: ^Builder, op1: Id) { - append(&b.ops, inst_OpRayQueryTerminateKHR(opbuf(b, 1), op1)) + append_elem(&b.ops, inst_OpRayQueryTerminateKHR(opbuf(b, 1), op1)) } inst_OpRayQueryGenerateIntersectionKHR :: #force_inline proc "contextless" (buf: []Operand, op1: Id, op2: Id) -> Operation { @@ -5159,7 +5159,7 @@ inst_OpRayQueryGenerateIntersectionKHR :: #force_inline proc "contextless" (buf: } ray_query_generate_intersection_khr :: proc(b: ^Builder, op1: Id, op2: Id) { - append(&b.ops, inst_OpRayQueryGenerateIntersectionKHR(opbuf(b, 1 + 1), op1, op2)) + append_elem(&b.ops, inst_OpRayQueryGenerateIntersectionKHR(opbuf(b, 1 + 1), op1, op2)) } inst_OpRayQueryConfirmIntersectionKHR :: #force_inline proc "contextless" (buf: []Operand, op1: Id) -> Operation { @@ -5169,7 +5169,7 @@ inst_OpRayQueryConfirmIntersectionKHR :: #force_inline proc "contextless" (buf: } ray_query_confirm_intersection_khr :: proc(b: ^Builder, op1: Id) { - append(&b.ops, inst_OpRayQueryConfirmIntersectionKHR(opbuf(b, 1), op1)) + append_elem(&b.ops, inst_OpRayQueryConfirmIntersectionKHR(opbuf(b, 1), op1)) } inst_OpRayQueryProceedKHR :: #force_inline proc "contextless" (buf: []Operand, result_type: Type_Ref, result: Id, op1: Id) -> Operation { @@ -5180,7 +5180,7 @@ inst_OpRayQueryProceedKHR :: #force_inline proc "contextless" (buf: []Operand, r ray_query_proceed_khr :: proc(b: ^Builder, result_type: Type_Ref, op1: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpRayQueryProceedKHR(opbuf(b, 1), result_type, r, op1)) + append_elem(&b.ops, inst_OpRayQueryProceedKHR(opbuf(b, 1), result_type, r, op1)) return r } @@ -5193,7 +5193,7 @@ inst_OpRayQueryGetIntersectionTypeKHR :: #force_inline proc "contextless" (buf: ray_query_get_intersection_type_khr :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpRayQueryGetIntersectionTypeKHR(opbuf(b, 1 + 1), result_type, r, op1, op2)) + append_elem(&b.ops, inst_OpRayQueryGetIntersectionTypeKHR(opbuf(b, 1 + 1), result_type, r, op1, op2)) return r } @@ -5207,7 +5207,7 @@ inst_OpImageSampleWeightedQCOM :: #force_inline proc "contextless" (buf: []Opera image_sample_weighted_qcom :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Id, op3: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpImageSampleWeightedQCOM(opbuf(b, 1 + 1 + 1), result_type, r, op1, op2, op3)) + append_elem(&b.ops, inst_OpImageSampleWeightedQCOM(opbuf(b, 1 + 1 + 1), result_type, r, op1, op2, op3)) return r } @@ -5221,7 +5221,7 @@ inst_OpImageBoxFilterQCOM :: #force_inline proc "contextless" (buf: []Operand, r image_box_filter_qcom :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Id, op3: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpImageBoxFilterQCOM(opbuf(b, 1 + 1 + 1), result_type, r, op1, op2, op3)) + append_elem(&b.ops, inst_OpImageBoxFilterQCOM(opbuf(b, 1 + 1 + 1), result_type, r, op1, op2, op3)) return r } @@ -5237,7 +5237,7 @@ inst_OpImageBlockMatchSSDQCOM :: #force_inline proc "contextless" (buf: []Operan image_block_match_ssdqcom :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Id, op3: Id, op4: Id, op5: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpImageBlockMatchSSDQCOM(opbuf(b, 1 + 1 + 1 + 1 + 1), result_type, r, op1, op2, op3, op4, op5)) + append_elem(&b.ops, inst_OpImageBlockMatchSSDQCOM(opbuf(b, 1 + 1 + 1 + 1 + 1), result_type, r, op1, op2, op3, op4, op5)) return r } @@ -5253,7 +5253,7 @@ inst_OpImageBlockMatchSADQCOM :: #force_inline proc "contextless" (buf: []Operan image_block_match_sadqcom :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Id, op3: Id, op4: Id, op5: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpImageBlockMatchSADQCOM(opbuf(b, 1 + 1 + 1 + 1 + 1), result_type, r, op1, op2, op3, op4, op5)) + append_elem(&b.ops, inst_OpImageBlockMatchSADQCOM(opbuf(b, 1 + 1 + 1 + 1 + 1), result_type, r, op1, op2, op3, op4, op5)) return r } @@ -5265,7 +5265,7 @@ inst_OpBitCastArrayQCOM :: #force_inline proc "contextless" (buf: []Operand, res bit_cast_array_qcom :: proc(b: ^Builder, result_type: Type_Ref, op1: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpBitCastArrayQCOM(opbuf(b, 1), result_type, r, op1)) + append_elem(&b.ops, inst_OpBitCastArrayQCOM(opbuf(b, 1), result_type, r, op1)) return r } @@ -5281,7 +5281,7 @@ inst_OpImageBlockMatchWindowSSDQCOM :: #force_inline proc "contextless" (buf: [] image_block_match_window_ssdqcom :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Id, op3: Id, op4: Id, op5: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpImageBlockMatchWindowSSDQCOM(opbuf(b, 1 + 1 + 1 + 1 + 1), result_type, r, op1, op2, op3, op4, op5)) + append_elem(&b.ops, inst_OpImageBlockMatchWindowSSDQCOM(opbuf(b, 1 + 1 + 1 + 1 + 1), result_type, r, op1, op2, op3, op4, op5)) return r } @@ -5297,7 +5297,7 @@ inst_OpImageBlockMatchWindowSADQCOM :: #force_inline proc "contextless" (buf: [] image_block_match_window_sadqcom :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Id, op3: Id, op4: Id, op5: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpImageBlockMatchWindowSADQCOM(opbuf(b, 1 + 1 + 1 + 1 + 1), result_type, r, op1, op2, op3, op4, op5)) + append_elem(&b.ops, inst_OpImageBlockMatchWindowSADQCOM(opbuf(b, 1 + 1 + 1 + 1 + 1), result_type, r, op1, op2, op3, op4, op5)) return r } @@ -5313,7 +5313,7 @@ inst_OpImageBlockMatchGatherSSDQCOM :: #force_inline proc "contextless" (buf: [] image_block_match_gather_ssdqcom :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Id, op3: Id, op4: Id, op5: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpImageBlockMatchGatherSSDQCOM(opbuf(b, 1 + 1 + 1 + 1 + 1), result_type, r, op1, op2, op3, op4, op5)) + append_elem(&b.ops, inst_OpImageBlockMatchGatherSSDQCOM(opbuf(b, 1 + 1 + 1 + 1 + 1), result_type, r, op1, op2, op3, op4, op5)) return r } @@ -5329,7 +5329,7 @@ inst_OpImageBlockMatchGatherSADQCOM :: #force_inline proc "contextless" (buf: [] image_block_match_gather_sadqcom :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Id, op3: Id, op4: Id, op5: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpImageBlockMatchGatherSADQCOM(opbuf(b, 1 + 1 + 1 + 1 + 1), result_type, r, op1, op2, op3, op4, op5)) + append_elem(&b.ops, inst_OpImageBlockMatchGatherSADQCOM(opbuf(b, 1 + 1 + 1 + 1 + 1), result_type, r, op1, op2, op3, op4, op5)) return r } @@ -5341,7 +5341,7 @@ inst_OpCompositeConstructCoopMatQCOM :: #force_inline proc "contextless" (buf: [ composite_construct_coop_mat_qcom :: proc(b: ^Builder, result_type: Type_Ref, op1: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpCompositeConstructCoopMatQCOM(opbuf(b, 1), result_type, r, op1)) + append_elem(&b.ops, inst_OpCompositeConstructCoopMatQCOM(opbuf(b, 1), result_type, r, op1)) return r } @@ -5353,7 +5353,7 @@ inst_OpCompositeExtractCoopMatQCOM :: #force_inline proc "contextless" (buf: []O composite_extract_coop_mat_qcom :: proc(b: ^Builder, result_type: Type_Ref, op1: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpCompositeExtractCoopMatQCOM(opbuf(b, 1), result_type, r, op1)) + append_elem(&b.ops, inst_OpCompositeExtractCoopMatQCOM(opbuf(b, 1), result_type, r, op1)) return r } @@ -5366,7 +5366,7 @@ inst_OpExtractSubArrayQCOM :: #force_inline proc "contextless" (buf: []Operand, extract_sub_array_qcom :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpExtractSubArrayQCOM(opbuf(b, 1 + 1), result_type, r, op1, op2)) + append_elem(&b.ops, inst_OpExtractSubArrayQCOM(opbuf(b, 1 + 1), result_type, r, op1, op2)) return r } @@ -5380,7 +5380,7 @@ inst_OpGroupIAddNonUniformAMD :: #force_inline proc "contextless" (buf: []Operan group_i_add_non_uniform_amd :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Group_Operation, op3: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpGroupIAddNonUniformAMD(opbuf(b, 1 + 1 + 1), result_type, r, op1, op2, op3)) + append_elem(&b.ops, inst_OpGroupIAddNonUniformAMD(opbuf(b, 1 + 1 + 1), result_type, r, op1, op2, op3)) return r } @@ -5394,7 +5394,7 @@ inst_OpGroupFAddNonUniformAMD :: #force_inline proc "contextless" (buf: []Operan group_f_add_non_uniform_amd :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Group_Operation, op3: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpGroupFAddNonUniformAMD(opbuf(b, 1 + 1 + 1), result_type, r, op1, op2, op3)) + append_elem(&b.ops, inst_OpGroupFAddNonUniformAMD(opbuf(b, 1 + 1 + 1), result_type, r, op1, op2, op3)) return r } @@ -5408,7 +5408,7 @@ inst_OpGroupFMinNonUniformAMD :: #force_inline proc "contextless" (buf: []Operan group_f_min_non_uniform_amd :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Group_Operation, op3: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpGroupFMinNonUniformAMD(opbuf(b, 1 + 1 + 1), result_type, r, op1, op2, op3)) + append_elem(&b.ops, inst_OpGroupFMinNonUniformAMD(opbuf(b, 1 + 1 + 1), result_type, r, op1, op2, op3)) return r } @@ -5422,7 +5422,7 @@ inst_OpGroupUMinNonUniformAMD :: #force_inline proc "contextless" (buf: []Operan group_u_min_non_uniform_amd :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Group_Operation, op3: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpGroupUMinNonUniformAMD(opbuf(b, 1 + 1 + 1), result_type, r, op1, op2, op3)) + append_elem(&b.ops, inst_OpGroupUMinNonUniformAMD(opbuf(b, 1 + 1 + 1), result_type, r, op1, op2, op3)) return r } @@ -5436,7 +5436,7 @@ inst_OpGroupSMinNonUniformAMD :: #force_inline proc "contextless" (buf: []Operan group_s_min_non_uniform_amd :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Group_Operation, op3: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpGroupSMinNonUniformAMD(opbuf(b, 1 + 1 + 1), result_type, r, op1, op2, op3)) + append_elem(&b.ops, inst_OpGroupSMinNonUniformAMD(opbuf(b, 1 + 1 + 1), result_type, r, op1, op2, op3)) return r } @@ -5450,7 +5450,7 @@ inst_OpGroupFMaxNonUniformAMD :: #force_inline proc "contextless" (buf: []Operan group_f_max_non_uniform_amd :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Group_Operation, op3: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpGroupFMaxNonUniformAMD(opbuf(b, 1 + 1 + 1), result_type, r, op1, op2, op3)) + append_elem(&b.ops, inst_OpGroupFMaxNonUniformAMD(opbuf(b, 1 + 1 + 1), result_type, r, op1, op2, op3)) return r } @@ -5464,7 +5464,7 @@ inst_OpGroupUMaxNonUniformAMD :: #force_inline proc "contextless" (buf: []Operan group_u_max_non_uniform_amd :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Group_Operation, op3: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpGroupUMaxNonUniformAMD(opbuf(b, 1 + 1 + 1), result_type, r, op1, op2, op3)) + append_elem(&b.ops, inst_OpGroupUMaxNonUniformAMD(opbuf(b, 1 + 1 + 1), result_type, r, op1, op2, op3)) return r } @@ -5478,7 +5478,7 @@ inst_OpGroupSMaxNonUniformAMD :: #force_inline proc "contextless" (buf: []Operan group_s_max_non_uniform_amd :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Group_Operation, op3: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpGroupSMaxNonUniformAMD(opbuf(b, 1 + 1 + 1), result_type, r, op1, op2, op3)) + append_elem(&b.ops, inst_OpGroupSMaxNonUniformAMD(opbuf(b, 1 + 1 + 1), result_type, r, op1, op2, op3)) return r } @@ -5491,7 +5491,7 @@ inst_OpFragmentMaskFetchAMD :: #force_inline proc "contextless" (buf: []Operand, fragment_mask_fetch_amd :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpFragmentMaskFetchAMD(opbuf(b, 1 + 1), result_type, r, op1, op2)) + append_elem(&b.ops, inst_OpFragmentMaskFetchAMD(opbuf(b, 1 + 1), result_type, r, op1, op2)) return r } @@ -5505,7 +5505,7 @@ inst_OpFragmentFetchAMD :: #force_inline proc "contextless" (buf: []Operand, res fragment_fetch_amd :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Id, op3: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpFragmentFetchAMD(opbuf(b, 1 + 1 + 1), result_type, r, op1, op2, op3)) + append_elem(&b.ops, inst_OpFragmentFetchAMD(opbuf(b, 1 + 1 + 1), result_type, r, op1, op2, op3)) return r } @@ -5517,7 +5517,7 @@ inst_OpReadClockKHR :: #force_inline proc "contextless" (buf: []Operand, result_ read_clock_khr :: proc(b: ^Builder, result_type: Type_Ref, op1: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpReadClockKHR(opbuf(b, 1), result_type, r, op1)) + append_elem(&b.ops, inst_OpReadClockKHR(opbuf(b, 1), result_type, r, op1)) return r } @@ -5531,7 +5531,7 @@ inst_OpAllocateNodePayloadsAMDX :: #force_inline proc "contextless" (buf: []Oper allocate_node_payloads_amdx :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Id, op3: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpAllocateNodePayloadsAMDX(opbuf(b, 1 + 1 + 1), result_type, r, op1, op2, op3)) + append_elem(&b.ops, inst_OpAllocateNodePayloadsAMDX(opbuf(b, 1 + 1 + 1), result_type, r, op1, op2, op3)) return r } @@ -5542,7 +5542,7 @@ inst_OpEnqueueNodePayloadsAMDX :: #force_inline proc "contextless" (buf: []Opera } enqueue_node_payloads_amdx :: proc(b: ^Builder, op1: Id) { - append(&b.ops, inst_OpEnqueueNodePayloadsAMDX(opbuf(b, 1), op1)) + append_elem(&b.ops, inst_OpEnqueueNodePayloadsAMDX(opbuf(b, 1), op1)) } inst_OpTypeNodePayloadArrayAMDX :: #force_inline proc "contextless" (buf: []Operand, result: Id, op1: Id) -> Operation { @@ -5553,7 +5553,7 @@ inst_OpTypeNodePayloadArrayAMDX :: #force_inline proc "contextless" (buf: []Oper type_node_payload_array_amdx :: proc(b: ^Builder, op1: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpTypeNodePayloadArrayAMDX(opbuf(b, 1), r, op1)) + append_elem(&b.ops, inst_OpTypeNodePayloadArrayAMDX(opbuf(b, 1), r, op1)) return r } @@ -5565,7 +5565,7 @@ inst_OpFinishWritingNodePayloadAMDX :: #force_inline proc "contextless" (buf: [] finish_writing_node_payload_amdx :: proc(b: ^Builder, result_type: Type_Ref, op1: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpFinishWritingNodePayloadAMDX(opbuf(b, 1), result_type, r, op1)) + append_elem(&b.ops, inst_OpFinishWritingNodePayloadAMDX(opbuf(b, 1), result_type, r, op1)) return r } @@ -5577,7 +5577,7 @@ inst_OpNodePayloadArrayLengthAMDX :: #force_inline proc "contextless" (buf: []Op node_payload_array_length_amdx :: proc(b: ^Builder, result_type: Type_Ref, op1: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpNodePayloadArrayLengthAMDX(opbuf(b, 1), result_type, r, op1)) + append_elem(&b.ops, inst_OpNodePayloadArrayLengthAMDX(opbuf(b, 1), result_type, r, op1)) return r } @@ -5590,7 +5590,7 @@ inst_OpIsNodePayloadValidAMDX :: #force_inline proc "contextless" (buf: []Operan is_node_payload_valid_amdx :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpIsNodePayloadValidAMDX(opbuf(b, 1 + 1), result_type, r, op1, op2)) + append_elem(&b.ops, inst_OpIsNodePayloadValidAMDX(opbuf(b, 1 + 1), result_type, r, op1, op2)) return r } @@ -5602,7 +5602,7 @@ inst_OpConstantStringAMDX :: #force_inline proc "contextless" (buf: []Operand, r constant_string_amdx :: proc(b: ^Builder, op1: string) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpConstantStringAMDX(opbuf(b, (len(op1) + 4) / 4), r, op1)) + append_elem(&b.ops, inst_OpConstantStringAMDX(opbuf(b, (len(op1) + 4) / 4), r, op1)) return r } @@ -5614,7 +5614,7 @@ inst_OpSpecConstantStringAMDX :: #force_inline proc "contextless" (buf: []Operan spec_constant_string_amdx :: proc(b: ^Builder, op1: string) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpSpecConstantStringAMDX(opbuf(b, (len(op1) + 4) / 4), r, op1)) + append_elem(&b.ops, inst_OpSpecConstantStringAMDX(opbuf(b, (len(op1) + 4) / 4), r, op1)) return r } @@ -5626,7 +5626,7 @@ inst_OpGroupNonUniformQuadAllKHR :: #force_inline proc "contextless" (buf: []Ope group_non_uniform_quad_all_khr :: proc(b: ^Builder, result_type: Type_Ref, op1: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpGroupNonUniformQuadAllKHR(opbuf(b, 1), result_type, r, op1)) + append_elem(&b.ops, inst_OpGroupNonUniformQuadAllKHR(opbuf(b, 1), result_type, r, op1)) return r } @@ -5638,7 +5638,7 @@ inst_OpGroupNonUniformQuadAnyKHR :: #force_inline proc "contextless" (buf: []Ope group_non_uniform_quad_any_khr :: proc(b: ^Builder, result_type: Type_Ref, op1: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpGroupNonUniformQuadAnyKHR(opbuf(b, 1), result_type, r, op1)) + append_elem(&b.ops, inst_OpGroupNonUniformQuadAnyKHR(opbuf(b, 1), result_type, r, op1)) return r } @@ -5650,7 +5650,7 @@ inst_OpTypeBufferEXT :: #force_inline proc "contextless" (buf: []Operand, result type_buffer_ext :: proc(b: ^Builder, op1: Storage_Class) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpTypeBufferEXT(opbuf(b, 1), r, op1)) + append_elem(&b.ops, inst_OpTypeBufferEXT(opbuf(b, 1), r, op1)) return r } @@ -5662,7 +5662,7 @@ inst_OpBufferPointerEXT :: #force_inline proc "contextless" (buf: []Operand, res buffer_pointer_ext :: proc(b: ^Builder, result_type: Type_Ref, op1: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpBufferPointerEXT(opbuf(b, 1), result_type, r, op1)) + append_elem(&b.ops, inst_OpBufferPointerEXT(opbuf(b, 1), result_type, r, op1)) return r } @@ -5674,7 +5674,7 @@ inst_OpAbortKHR :: #force_inline proc "contextless" (buf: []Operand, op1: Id, op } abort_khr :: proc(b: ^Builder, op1: Id, op2: Id) { - append(&b.ops, inst_OpAbortKHR(opbuf(b, 1 + 1), op1, op2)) + append_elem(&b.ops, inst_OpAbortKHR(opbuf(b, 1 + 1), op1, op2)) } inst_OpUntypedImageTexelPointerEXT :: #force_inline proc "contextless" (buf: []Operand, result_type: Type_Ref, result: Id, op1: Id, op2: Id, op3: Id, op4: Id) -> Operation { @@ -5688,7 +5688,7 @@ inst_OpUntypedImageTexelPointerEXT :: #force_inline proc "contextless" (buf: []O untyped_image_texel_pointer_ext :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Id, op3: Id, op4: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpUntypedImageTexelPointerEXT(opbuf(b, 1 + 1 + 1 + 1), result_type, r, op1, op2, op3, op4)) + append_elem(&b.ops, inst_OpUntypedImageTexelPointerEXT(opbuf(b, 1 + 1 + 1 + 1), result_type, r, op1, op2, op3, op4)) return r } @@ -5701,7 +5701,7 @@ inst_OpMemberDecorateIdEXT :: #force_inline proc "contextless" (buf: []Operand, } member_decorate_id_ext :: proc(b: ^Builder, op1: Id, op2: i64, op3: Decoration) { - append(&b.ops, inst_OpMemberDecorateIdEXT(opbuf(b, 1 + 1 + 1), op1, op2, op3)) + append_elem(&b.ops, inst_OpMemberDecorateIdEXT(opbuf(b, 1 + 1 + 1), op1, op2, op3)) } inst_OpConstantSizeOfEXT :: #force_inline proc "contextless" (buf: []Operand, result_type: Type_Ref, result: Id, op1: Id) -> Operation { @@ -5712,7 +5712,7 @@ inst_OpConstantSizeOfEXT :: #force_inline proc "contextless" (buf: []Operand, re constant_size_of_ext :: proc(b: ^Builder, result_type: Type_Ref, op1: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpConstantSizeOfEXT(opbuf(b, 1), result_type, r, op1)) + append_elem(&b.ops, inst_OpConstantSizeOfEXT(opbuf(b, 1), result_type, r, op1)) return r } @@ -5724,7 +5724,7 @@ inst_OpConstantDataKHR :: #force_inline proc "contextless" (buf: []Operand, resu constant_data_khr :: proc(b: ^Builder, result_type: Type_Ref, op1: []i64) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpConstantDataKHR(opbuf(b, len(op1)), result_type, r, op1)) + append_elem(&b.ops, inst_OpConstantDataKHR(opbuf(b, len(op1)), result_type, r, op1)) return r } @@ -5736,7 +5736,7 @@ inst_OpSpecConstantDataKHR :: #force_inline proc "contextless" (buf: []Operand, spec_constant_data_khr :: proc(b: ^Builder, result_type: Type_Ref, op1: []i64) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpSpecConstantDataKHR(opbuf(b, len(op1)), result_type, r, op1)) + append_elem(&b.ops, inst_OpSpecConstantDataKHR(opbuf(b, len(op1)), result_type, r, op1)) return r } @@ -5746,7 +5746,7 @@ inst_OpPoisonKHR :: #force_inline proc "contextless" (result_type: Type_Ref, res poison_khr :: proc(b: ^Builder, result_type: Type_Ref) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpPoisonKHR(result_type, r)) + append_elem(&b.ops, inst_OpPoisonKHR(result_type, r)) return r } @@ -5758,7 +5758,7 @@ inst_OpFreezeKHR :: #force_inline proc "contextless" (buf: []Operand, result_typ freeze_khr :: proc(b: ^Builder, result_type: Type_Ref, op1: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpFreezeKHR(opbuf(b, 1), result_type, r, op1)) + append_elem(&b.ops, inst_OpFreezeKHR(opbuf(b, 1), result_type, r, op1)) return r } @@ -5782,7 +5782,7 @@ inst_OpHitObjectRecordHitMotionNV :: #force_inline proc "contextless" (buf: []Op } hit_object_record_hit_motion_nv :: proc(b: ^Builder, op1: Id, op2: Id, op3: Id, op4: Id, op5: Id, op6: Id, op7: Id, op8: Id, op9: Id, op10: Id, op11: Id, op12: Id, op13: Id, op14: Id) { - append(&b.ops, inst_OpHitObjectRecordHitMotionNV(opbuf(b, 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1), op1, op2, op3, op4, op5, op6, op7, op8, op9, op10, op11, op12, op13, op14)) + append_elem(&b.ops, inst_OpHitObjectRecordHitMotionNV(opbuf(b, 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1), op1, op2, op3, op4, op5, op6, op7, op8, op9, op10, op11, op12, op13, op14)) } inst_OpHitObjectRecordHitWithIndexMotionNV :: #force_inline proc "contextless" (buf: []Operand, op1: Id, op2: Id, op3: Id, op4: Id, op5: Id, op6: Id, op7: Id, op8: Id, op9: Id, op10: Id, op11: Id, op12: Id, op13: Id) -> Operation { @@ -5804,7 +5804,7 @@ inst_OpHitObjectRecordHitWithIndexMotionNV :: #force_inline proc "contextless" ( } hit_object_record_hit_with_index_motion_nv :: proc(b: ^Builder, op1: Id, op2: Id, op3: Id, op4: Id, op5: Id, op6: Id, op7: Id, op8: Id, op9: Id, op10: Id, op11: Id, op12: Id, op13: Id) { - append(&b.ops, inst_OpHitObjectRecordHitWithIndexMotionNV(opbuf(b, 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1), op1, op2, op3, op4, op5, op6, op7, op8, op9, op10, op11, op12, op13)) + append_elem(&b.ops, inst_OpHitObjectRecordHitWithIndexMotionNV(opbuf(b, 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1), op1, op2, op3, op4, op5, op6, op7, op8, op9, op10, op11, op12, op13)) } inst_OpHitObjectRecordMissMotionNV :: #force_inline proc "contextless" (buf: []Operand, op1: Id, op2: Id, op3: Id, op4: Id, op5: Id, op6: Id, op7: Id) -> Operation { @@ -5820,7 +5820,7 @@ inst_OpHitObjectRecordMissMotionNV :: #force_inline proc "contextless" (buf: []O } hit_object_record_miss_motion_nv :: proc(b: ^Builder, op1: Id, op2: Id, op3: Id, op4: Id, op5: Id, op6: Id, op7: Id) { - append(&b.ops, inst_OpHitObjectRecordMissMotionNV(opbuf(b, 1 + 1 + 1 + 1 + 1 + 1 + 1), op1, op2, op3, op4, op5, op6, op7)) + append_elem(&b.ops, inst_OpHitObjectRecordMissMotionNV(opbuf(b, 1 + 1 + 1 + 1 + 1 + 1 + 1), op1, op2, op3, op4, op5, op6, op7)) } inst_OpHitObjectGetWorldToObjectNV :: #force_inline proc "contextless" (buf: []Operand, result_type: Type_Ref, result: Id, op1: Id) -> Operation { @@ -5831,7 +5831,7 @@ inst_OpHitObjectGetWorldToObjectNV :: #force_inline proc "contextless" (buf: []O hit_object_get_world_to_object_nv :: proc(b: ^Builder, result_type: Type_Ref, op1: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpHitObjectGetWorldToObjectNV(opbuf(b, 1), result_type, r, op1)) + append_elem(&b.ops, inst_OpHitObjectGetWorldToObjectNV(opbuf(b, 1), result_type, r, op1)) return r } @@ -5843,7 +5843,7 @@ inst_OpHitObjectGetObjectToWorldNV :: #force_inline proc "contextless" (buf: []O hit_object_get_object_to_world_nv :: proc(b: ^Builder, result_type: Type_Ref, op1: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpHitObjectGetObjectToWorldNV(opbuf(b, 1), result_type, r, op1)) + append_elem(&b.ops, inst_OpHitObjectGetObjectToWorldNV(opbuf(b, 1), result_type, r, op1)) return r } @@ -5855,7 +5855,7 @@ inst_OpHitObjectGetObjectRayDirectionNV :: #force_inline proc "contextless" (buf hit_object_get_object_ray_direction_nv :: proc(b: ^Builder, result_type: Type_Ref, op1: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpHitObjectGetObjectRayDirectionNV(opbuf(b, 1), result_type, r, op1)) + append_elem(&b.ops, inst_OpHitObjectGetObjectRayDirectionNV(opbuf(b, 1), result_type, r, op1)) return r } @@ -5867,7 +5867,7 @@ inst_OpHitObjectGetObjectRayOriginNV :: #force_inline proc "contextless" (buf: [ hit_object_get_object_ray_origin_nv :: proc(b: ^Builder, result_type: Type_Ref, op1: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpHitObjectGetObjectRayOriginNV(opbuf(b, 1), result_type, r, op1)) + append_elem(&b.ops, inst_OpHitObjectGetObjectRayOriginNV(opbuf(b, 1), result_type, r, op1)) return r } @@ -5890,7 +5890,7 @@ inst_OpHitObjectTraceRayMotionNV :: #force_inline proc "contextless" (buf: []Ope } hit_object_trace_ray_motion_nv :: proc(b: ^Builder, op1: Id, op2: Id, op3: Id, op4: Id, op5: Id, op6: Id, op7: Id, op8: Id, op9: Id, op10: Id, op11: Id, op12: Id, op13: Id) { - append(&b.ops, inst_OpHitObjectTraceRayMotionNV(opbuf(b, 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1), op1, op2, op3, op4, op5, op6, op7, op8, op9, op10, op11, op12, op13)) + append_elem(&b.ops, inst_OpHitObjectTraceRayMotionNV(opbuf(b, 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1), op1, op2, op3, op4, op5, op6, op7, op8, op9, op10, op11, op12, op13)) } inst_OpHitObjectGetShaderRecordBufferHandleNV :: #force_inline proc "contextless" (buf: []Operand, result_type: Type_Ref, result: Id, op1: Id) -> Operation { @@ -5901,7 +5901,7 @@ inst_OpHitObjectGetShaderRecordBufferHandleNV :: #force_inline proc "contextless hit_object_get_shader_record_buffer_handle_nv :: proc(b: ^Builder, result_type: Type_Ref, op1: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpHitObjectGetShaderRecordBufferHandleNV(opbuf(b, 1), result_type, r, op1)) + append_elem(&b.ops, inst_OpHitObjectGetShaderRecordBufferHandleNV(opbuf(b, 1), result_type, r, op1)) return r } @@ -5913,7 +5913,7 @@ inst_OpHitObjectGetShaderBindingTableRecordIndexNV :: #force_inline proc "contex hit_object_get_shader_binding_table_record_index_nv :: proc(b: ^Builder, result_type: Type_Ref, op1: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpHitObjectGetShaderBindingTableRecordIndexNV(opbuf(b, 1), result_type, r, op1)) + append_elem(&b.ops, inst_OpHitObjectGetShaderBindingTableRecordIndexNV(opbuf(b, 1), result_type, r, op1)) return r } @@ -5924,7 +5924,7 @@ inst_OpHitObjectRecordEmptyNV :: #force_inline proc "contextless" (buf: []Operan } hit_object_record_empty_nv :: proc(b: ^Builder, op1: Id) { - append(&b.ops, inst_OpHitObjectRecordEmptyNV(opbuf(b, 1), op1)) + append_elem(&b.ops, inst_OpHitObjectRecordEmptyNV(opbuf(b, 1), op1)) } inst_OpHitObjectTraceRayNV :: #force_inline proc "contextless" (buf: []Operand, op1: Id, op2: Id, op3: Id, op4: Id, op5: Id, op6: Id, op7: Id, op8: Id, op9: Id, op10: Id, op11: Id, op12: Id) -> Operation { @@ -5945,7 +5945,7 @@ inst_OpHitObjectTraceRayNV :: #force_inline proc "contextless" (buf: []Operand, } hit_object_trace_ray_nv :: proc(b: ^Builder, op1: Id, op2: Id, op3: Id, op4: Id, op5: Id, op6: Id, op7: Id, op8: Id, op9: Id, op10: Id, op11: Id, op12: Id) { - append(&b.ops, inst_OpHitObjectTraceRayNV(opbuf(b, 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1), op1, op2, op3, op4, op5, op6, op7, op8, op9, op10, op11, op12)) + append_elem(&b.ops, inst_OpHitObjectTraceRayNV(opbuf(b, 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1), op1, op2, op3, op4, op5, op6, op7, op8, op9, op10, op11, op12)) } inst_OpHitObjectRecordHitNV :: #force_inline proc "contextless" (buf: []Operand, op1: Id, op2: Id, op3: Id, op4: Id, op5: Id, op6: Id, op7: Id, op8: Id, op9: Id, op10: Id, op11: Id, op12: Id, op13: Id) -> Operation { @@ -5967,7 +5967,7 @@ inst_OpHitObjectRecordHitNV :: #force_inline proc "contextless" (buf: []Operand, } hit_object_record_hit_nv :: proc(b: ^Builder, op1: Id, op2: Id, op3: Id, op4: Id, op5: Id, op6: Id, op7: Id, op8: Id, op9: Id, op10: Id, op11: Id, op12: Id, op13: Id) { - append(&b.ops, inst_OpHitObjectRecordHitNV(opbuf(b, 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1), op1, op2, op3, op4, op5, op6, op7, op8, op9, op10, op11, op12, op13)) + append_elem(&b.ops, inst_OpHitObjectRecordHitNV(opbuf(b, 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1), op1, op2, op3, op4, op5, op6, op7, op8, op9, op10, op11, op12, op13)) } inst_OpHitObjectRecordHitWithIndexNV :: #force_inline proc "contextless" (buf: []Operand, op1: Id, op2: Id, op3: Id, op4: Id, op5: Id, op6: Id, op7: Id, op8: Id, op9: Id, op10: Id, op11: Id, op12: Id) -> Operation { @@ -5988,7 +5988,7 @@ inst_OpHitObjectRecordHitWithIndexNV :: #force_inline proc "contextless" (buf: [ } hit_object_record_hit_with_index_nv :: proc(b: ^Builder, op1: Id, op2: Id, op3: Id, op4: Id, op5: Id, op6: Id, op7: Id, op8: Id, op9: Id, op10: Id, op11: Id, op12: Id) { - append(&b.ops, inst_OpHitObjectRecordHitWithIndexNV(opbuf(b, 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1), op1, op2, op3, op4, op5, op6, op7, op8, op9, op10, op11, op12)) + append_elem(&b.ops, inst_OpHitObjectRecordHitWithIndexNV(opbuf(b, 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1), op1, op2, op3, op4, op5, op6, op7, op8, op9, op10, op11, op12)) } inst_OpHitObjectRecordMissNV :: #force_inline proc "contextless" (buf: []Operand, op1: Id, op2: Id, op3: Id, op4: Id, op5: Id, op6: Id) -> Operation { @@ -6003,7 +6003,7 @@ inst_OpHitObjectRecordMissNV :: #force_inline proc "contextless" (buf: []Operand } hit_object_record_miss_nv :: proc(b: ^Builder, op1: Id, op2: Id, op3: Id, op4: Id, op5: Id, op6: Id) { - append(&b.ops, inst_OpHitObjectRecordMissNV(opbuf(b, 1 + 1 + 1 + 1 + 1 + 1), op1, op2, op3, op4, op5, op6)) + append_elem(&b.ops, inst_OpHitObjectRecordMissNV(opbuf(b, 1 + 1 + 1 + 1 + 1 + 1), op1, op2, op3, op4, op5, op6)) } inst_OpHitObjectExecuteShaderNV :: #force_inline proc "contextless" (buf: []Operand, op1: Id, op2: Id) -> Operation { @@ -6014,7 +6014,7 @@ inst_OpHitObjectExecuteShaderNV :: #force_inline proc "contextless" (buf: []Oper } hit_object_execute_shader_nv :: proc(b: ^Builder, op1: Id, op2: Id) { - append(&b.ops, inst_OpHitObjectExecuteShaderNV(opbuf(b, 1 + 1), op1, op2)) + append_elem(&b.ops, inst_OpHitObjectExecuteShaderNV(opbuf(b, 1 + 1), op1, op2)) } inst_OpHitObjectGetCurrentTimeNV :: #force_inline proc "contextless" (buf: []Operand, result_type: Type_Ref, result: Id, op1: Id) -> Operation { @@ -6025,7 +6025,7 @@ inst_OpHitObjectGetCurrentTimeNV :: #force_inline proc "contextless" (buf: []Ope hit_object_get_current_time_nv :: proc(b: ^Builder, result_type: Type_Ref, op1: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpHitObjectGetCurrentTimeNV(opbuf(b, 1), result_type, r, op1)) + append_elem(&b.ops, inst_OpHitObjectGetCurrentTimeNV(opbuf(b, 1), result_type, r, op1)) return r } @@ -6037,7 +6037,7 @@ inst_OpHitObjectGetAttributesNV :: #force_inline proc "contextless" (buf: []Oper } hit_object_get_attributes_nv :: proc(b: ^Builder, op1: Id, op2: Id) { - append(&b.ops, inst_OpHitObjectGetAttributesNV(opbuf(b, 1 + 1), op1, op2)) + append_elem(&b.ops, inst_OpHitObjectGetAttributesNV(opbuf(b, 1 + 1), op1, op2)) } inst_OpHitObjectGetHitKindNV :: #force_inline proc "contextless" (buf: []Operand, result_type: Type_Ref, result: Id, op1: Id) -> Operation { @@ -6048,7 +6048,7 @@ inst_OpHitObjectGetHitKindNV :: #force_inline proc "contextless" (buf: []Operand hit_object_get_hit_kind_nv :: proc(b: ^Builder, result_type: Type_Ref, op1: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpHitObjectGetHitKindNV(opbuf(b, 1), result_type, r, op1)) + append_elem(&b.ops, inst_OpHitObjectGetHitKindNV(opbuf(b, 1), result_type, r, op1)) return r } @@ -6060,7 +6060,7 @@ inst_OpHitObjectGetPrimitiveIndexNV :: #force_inline proc "contextless" (buf: [] hit_object_get_primitive_index_nv :: proc(b: ^Builder, result_type: Type_Ref, op1: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpHitObjectGetPrimitiveIndexNV(opbuf(b, 1), result_type, r, op1)) + append_elem(&b.ops, inst_OpHitObjectGetPrimitiveIndexNV(opbuf(b, 1), result_type, r, op1)) return r } @@ -6072,7 +6072,7 @@ inst_OpHitObjectGetGeometryIndexNV :: #force_inline proc "contextless" (buf: []O hit_object_get_geometry_index_nv :: proc(b: ^Builder, result_type: Type_Ref, op1: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpHitObjectGetGeometryIndexNV(opbuf(b, 1), result_type, r, op1)) + append_elem(&b.ops, inst_OpHitObjectGetGeometryIndexNV(opbuf(b, 1), result_type, r, op1)) return r } @@ -6084,7 +6084,7 @@ inst_OpHitObjectGetInstanceIdNV :: #force_inline proc "contextless" (buf: []Oper hit_object_get_instance_id_nv :: proc(b: ^Builder, result_type: Type_Ref, op1: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpHitObjectGetInstanceIdNV(opbuf(b, 1), result_type, r, op1)) + append_elem(&b.ops, inst_OpHitObjectGetInstanceIdNV(opbuf(b, 1), result_type, r, op1)) return r } @@ -6096,7 +6096,7 @@ inst_OpHitObjectGetInstanceCustomIndexNV :: #force_inline proc "contextless" (bu hit_object_get_instance_custom_index_nv :: proc(b: ^Builder, result_type: Type_Ref, op1: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpHitObjectGetInstanceCustomIndexNV(opbuf(b, 1), result_type, r, op1)) + append_elem(&b.ops, inst_OpHitObjectGetInstanceCustomIndexNV(opbuf(b, 1), result_type, r, op1)) return r } @@ -6108,7 +6108,7 @@ inst_OpHitObjectGetWorldRayDirectionNV :: #force_inline proc "contextless" (buf: hit_object_get_world_ray_direction_nv :: proc(b: ^Builder, result_type: Type_Ref, op1: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpHitObjectGetWorldRayDirectionNV(opbuf(b, 1), result_type, r, op1)) + append_elem(&b.ops, inst_OpHitObjectGetWorldRayDirectionNV(opbuf(b, 1), result_type, r, op1)) return r } @@ -6120,7 +6120,7 @@ inst_OpHitObjectGetWorldRayOriginNV :: #force_inline proc "contextless" (buf: [] hit_object_get_world_ray_origin_nv :: proc(b: ^Builder, result_type: Type_Ref, op1: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpHitObjectGetWorldRayOriginNV(opbuf(b, 1), result_type, r, op1)) + append_elem(&b.ops, inst_OpHitObjectGetWorldRayOriginNV(opbuf(b, 1), result_type, r, op1)) return r } @@ -6132,7 +6132,7 @@ inst_OpHitObjectGetRayTMaxNV :: #force_inline proc "contextless" (buf: []Operand hit_object_get_ray_t_max_nv :: proc(b: ^Builder, result_type: Type_Ref, op1: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpHitObjectGetRayTMaxNV(opbuf(b, 1), result_type, r, op1)) + append_elem(&b.ops, inst_OpHitObjectGetRayTMaxNV(opbuf(b, 1), result_type, r, op1)) return r } @@ -6144,7 +6144,7 @@ inst_OpHitObjectGetRayTMinNV :: #force_inline proc "contextless" (buf: []Operand hit_object_get_ray_t_min_nv :: proc(b: ^Builder, result_type: Type_Ref, op1: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpHitObjectGetRayTMinNV(opbuf(b, 1), result_type, r, op1)) + append_elem(&b.ops, inst_OpHitObjectGetRayTMinNV(opbuf(b, 1), result_type, r, op1)) return r } @@ -6156,7 +6156,7 @@ inst_OpHitObjectIsEmptyNV :: #force_inline proc "contextless" (buf: []Operand, r hit_object_is_empty_nv :: proc(b: ^Builder, result_type: Type_Ref, op1: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpHitObjectIsEmptyNV(opbuf(b, 1), result_type, r, op1)) + append_elem(&b.ops, inst_OpHitObjectIsEmptyNV(opbuf(b, 1), result_type, r, op1)) return r } @@ -6168,7 +6168,7 @@ inst_OpHitObjectIsHitNV :: #force_inline proc "contextless" (buf: []Operand, res hit_object_is_hit_nv :: proc(b: ^Builder, result_type: Type_Ref, op1: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpHitObjectIsHitNV(opbuf(b, 1), result_type, r, op1)) + append_elem(&b.ops, inst_OpHitObjectIsHitNV(opbuf(b, 1), result_type, r, op1)) return r } @@ -6180,7 +6180,7 @@ inst_OpHitObjectIsMissNV :: #force_inline proc "contextless" (buf: []Operand, re hit_object_is_miss_nv :: proc(b: ^Builder, result_type: Type_Ref, op1: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpHitObjectIsMissNV(opbuf(b, 1), result_type, r, op1)) + append_elem(&b.ops, inst_OpHitObjectIsMissNV(opbuf(b, 1), result_type, r, op1)) return r } @@ -6193,7 +6193,7 @@ inst_OpReorderThreadWithHitObjectNV :: #force_inline proc "contextless" (buf: [] } reorder_thread_with_hit_object_nv :: proc(b: ^Builder, op1: Id, op2: Maybe(Id), op3: Maybe(Id)) { - append(&b.ops, inst_OpReorderThreadWithHitObjectNV(opbuf(b, 1 + 1 + 1), op1, op2, op3)) + append_elem(&b.ops, inst_OpReorderThreadWithHitObjectNV(opbuf(b, 1 + 1 + 1), op1, op2, op3)) } inst_OpReorderThreadWithHintNV :: #force_inline proc "contextless" (buf: []Operand, op1: Id, op2: Id) -> Operation { @@ -6204,7 +6204,7 @@ inst_OpReorderThreadWithHintNV :: #force_inline proc "contextless" (buf: []Opera } reorder_thread_with_hint_nv :: proc(b: ^Builder, op1: Id, op2: Id) { - append(&b.ops, inst_OpReorderThreadWithHintNV(opbuf(b, 1 + 1), op1, op2)) + append_elem(&b.ops, inst_OpReorderThreadWithHintNV(opbuf(b, 1 + 1), op1, op2)) } inst_OpTypeHitObjectNV :: #force_inline proc "contextless" (result: Id) -> Operation { @@ -6213,7 +6213,7 @@ inst_OpTypeHitObjectNV :: #force_inline proc "contextless" (result: Id) -> Opera type_hit_object_nv :: proc(b: ^Builder) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpTypeHitObjectNV(r)) + append_elem(&b.ops, inst_OpTypeHitObjectNV(r)) return r } @@ -6229,7 +6229,7 @@ inst_OpImageSampleFootprintNV :: #force_inline proc "contextless" (buf: []Operan image_sample_footprint_nv :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Id, op3: Id, op4: Id, op5: Maybe(Image_Operands)) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpImageSampleFootprintNV(opbuf(b, 1 + 1 + 1 + 1 + 1), result_type, r, op1, op2, op3, op4, op5)) + append_elem(&b.ops, inst_OpImageSampleFootprintNV(opbuf(b, 1 + 1 + 1 + 1 + 1), result_type, r, op1, op2, op3, op4, op5)) return r } @@ -6242,7 +6242,7 @@ inst_OpTypeVectorIdEXT :: #force_inline proc "contextless" (buf: []Operand, resu type_vector_id_ext :: proc(b: ^Builder, op1: Id, op2: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpTypeVectorIdEXT(opbuf(b, 1 + 1), r, op1, op2)) + append_elem(&b.ops, inst_OpTypeVectorIdEXT(opbuf(b, 1 + 1), r, op1, op2)) return r } @@ -6264,7 +6264,7 @@ inst_OpCooperativeVectorMatrixMulNV :: #force_inline proc "contextless" (buf: [] cooperative_vector_matrix_mul_nv :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Id, op3: Id, op4: Id, op5: Id, op6: Id, op7: Id, op8: Id, op9: Id, op10: Maybe(Id), op11: Maybe(Cooperative_Matrix_Operands)) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpCooperativeVectorMatrixMulNV(opbuf(b, 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1), result_type, r, op1, op2, op3, op4, op5, op6, op7, op8, op9, op10, op11)) + append_elem(&b.ops, inst_OpCooperativeVectorMatrixMulNV(opbuf(b, 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1), result_type, r, op1, op2, op3, op4, op5, op6, op7, op8, op9, op10, op11)) return r } @@ -6281,7 +6281,7 @@ inst_OpCooperativeVectorOuterProductAccumulateNV :: #force_inline proc "contextl } cooperative_vector_outer_product_accumulate_nv :: proc(b: ^Builder, op1: Id, op2: Id, op3: Id, op4: Id, op5: Id, op6: Id, op7: Maybe(Id)) { - append(&b.ops, inst_OpCooperativeVectorOuterProductAccumulateNV(opbuf(b, 1 + 1 + 1 + 1 + 1 + 1 + 1), op1, op2, op3, op4, op5, op6, op7)) + append_elem(&b.ops, inst_OpCooperativeVectorOuterProductAccumulateNV(opbuf(b, 1 + 1 + 1 + 1 + 1 + 1 + 1), op1, op2, op3, op4, op5, op6, op7)) } inst_OpCooperativeVectorReduceSumAccumulateNV :: #force_inline proc "contextless" (buf: []Operand, op1: Id, op2: Id, op3: Id) -> Operation { @@ -6293,7 +6293,7 @@ inst_OpCooperativeVectorReduceSumAccumulateNV :: #force_inline proc "contextless } cooperative_vector_reduce_sum_accumulate_nv :: proc(b: ^Builder, op1: Id, op2: Id, op3: Id) { - append(&b.ops, inst_OpCooperativeVectorReduceSumAccumulateNV(opbuf(b, 1 + 1 + 1), op1, op2, op3)) + append_elem(&b.ops, inst_OpCooperativeVectorReduceSumAccumulateNV(opbuf(b, 1 + 1 + 1), op1, op2, op3)) } inst_OpCooperativeVectorMatrixMulAddNV :: #force_inline proc "contextless" (buf: []Operand, result_type: Type_Ref, result: Id, op1: Id, op2: Id, op3: Id, op4: Id, op5: Id, op6: Id, op7: Id, op8: Id, op9: Id, op10: Id, op11: Id, op12: Id, op13: Maybe(Id), op14: Maybe(Cooperative_Matrix_Operands)) -> Operation { @@ -6317,7 +6317,7 @@ inst_OpCooperativeVectorMatrixMulAddNV :: #force_inline proc "contextless" (buf: cooperative_vector_matrix_mul_add_nv :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Id, op3: Id, op4: Id, op5: Id, op6: Id, op7: Id, op8: Id, op9: Id, op10: Id, op11: Id, op12: Id, op13: Maybe(Id), op14: Maybe(Cooperative_Matrix_Operands)) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpCooperativeVectorMatrixMulAddNV(opbuf(b, 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1), result_type, r, op1, op2, op3, op4, op5, op6, op7, op8, op9, op10, op11, op12, op13, op14)) + append_elem(&b.ops, inst_OpCooperativeVectorMatrixMulAddNV(opbuf(b, 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1), result_type, r, op1, op2, op3, op4, op5, op6, op7, op8, op9, op10, op11, op12, op13, op14)) return r } @@ -6329,7 +6329,7 @@ inst_OpCooperativeMatrixConvertNV :: #force_inline proc "contextless" (buf: []Op cooperative_matrix_convert_nv :: proc(b: ^Builder, result_type: Type_Ref, op1: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpCooperativeMatrixConvertNV(opbuf(b, 1), result_type, r, op1)) + append_elem(&b.ops, inst_OpCooperativeMatrixConvertNV(opbuf(b, 1), result_type, r, op1)) return r } @@ -6343,7 +6343,7 @@ inst_OpEmitMeshTasksEXT :: #force_inline proc "contextless" (buf: []Operand, op1 } emit_mesh_tasks_ext :: proc(b: ^Builder, op1: Id, op2: Id, op3: Id, op4: Maybe(Id)) { - append(&b.ops, inst_OpEmitMeshTasksEXT(opbuf(b, 1 + 1 + 1 + 1), op1, op2, op3, op4)) + append_elem(&b.ops, inst_OpEmitMeshTasksEXT(opbuf(b, 1 + 1 + 1 + 1), op1, op2, op3, op4)) } inst_OpSetMeshOutputsEXT :: #force_inline proc "contextless" (buf: []Operand, op1: Id, op2: Id) -> Operation { @@ -6354,7 +6354,7 @@ inst_OpSetMeshOutputsEXT :: #force_inline proc "contextless" (buf: []Operand, op } set_mesh_outputs_ext :: proc(b: ^Builder, op1: Id, op2: Id) { - append(&b.ops, inst_OpSetMeshOutputsEXT(opbuf(b, 1 + 1), op1, op2)) + append_elem(&b.ops, inst_OpSetMeshOutputsEXT(opbuf(b, 1 + 1), op1, op2)) } inst_OpGroupNonUniformPartitionEXT :: #force_inline proc "contextless" (buf: []Operand, result_type: Type_Ref, result: Id, op1: Id) -> Operation { @@ -6365,7 +6365,7 @@ inst_OpGroupNonUniformPartitionEXT :: #force_inline proc "contextless" (buf: []O group_non_uniform_partition_ext :: proc(b: ^Builder, result_type: Type_Ref, op1: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpGroupNonUniformPartitionEXT(opbuf(b, 1), result_type, r, op1)) + append_elem(&b.ops, inst_OpGroupNonUniformPartitionEXT(opbuf(b, 1), result_type, r, op1)) return r } @@ -6377,7 +6377,7 @@ inst_OpWritePackedPrimitiveIndices4x8NV :: #force_inline proc "contextless" (buf } write_packed_primitive_indices4x8_nv :: proc(b: ^Builder, op1: Id, op2: Id) { - append(&b.ops, inst_OpWritePackedPrimitiveIndices4x8NV(opbuf(b, 1 + 1), op1, op2)) + append_elem(&b.ops, inst_OpWritePackedPrimitiveIndices4x8NV(opbuf(b, 1 + 1), op1, op2)) } inst_OpFetchMicroTriangleVertexPositionNV :: #force_inline proc "contextless" (buf: []Operand, result_type: Type_Ref, result: Id, op1: Id, op2: Id, op3: Id, op4: Id, op5: Id) -> Operation { @@ -6392,7 +6392,7 @@ inst_OpFetchMicroTriangleVertexPositionNV :: #force_inline proc "contextless" (b fetch_micro_triangle_vertex_position_nv :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Id, op3: Id, op4: Id, op5: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpFetchMicroTriangleVertexPositionNV(opbuf(b, 1 + 1 + 1 + 1 + 1), result_type, r, op1, op2, op3, op4, op5)) + append_elem(&b.ops, inst_OpFetchMicroTriangleVertexPositionNV(opbuf(b, 1 + 1 + 1 + 1 + 1), result_type, r, op1, op2, op3, op4, op5)) return r } @@ -6408,7 +6408,7 @@ inst_OpFetchMicroTriangleVertexBarycentricNV :: #force_inline proc "contextless" fetch_micro_triangle_vertex_barycentric_nv :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Id, op3: Id, op4: Id, op5: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpFetchMicroTriangleVertexBarycentricNV(opbuf(b, 1 + 1 + 1 + 1 + 1), result_type, r, op1, op2, op3, op4, op5)) + append_elem(&b.ops, inst_OpFetchMicroTriangleVertexBarycentricNV(opbuf(b, 1 + 1 + 1 + 1 + 1), result_type, r, op1, op2, op3, op4, op5)) return r } @@ -6422,7 +6422,7 @@ inst_OpCooperativeVectorLoadNV :: #force_inline proc "contextless" (buf: []Opera cooperative_vector_load_nv :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Id, op3: Maybe(Memory_Access)) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpCooperativeVectorLoadNV(opbuf(b, 1 + 1 + 1), result_type, r, op1, op2, op3)) + append_elem(&b.ops, inst_OpCooperativeVectorLoadNV(opbuf(b, 1 + 1 + 1), result_type, r, op1, op2, op3)) return r } @@ -6436,7 +6436,7 @@ inst_OpCooperativeVectorStoreNV :: #force_inline proc "contextless" (buf: []Oper } cooperative_vector_store_nv :: proc(b: ^Builder, op1: Id, op2: Id, op3: Id, op4: Maybe(Memory_Access)) { - append(&b.ops, inst_OpCooperativeVectorStoreNV(opbuf(b, 1 + 1 + 1 + 1), op1, op2, op3, op4)) + append_elem(&b.ops, inst_OpCooperativeVectorStoreNV(opbuf(b, 1 + 1 + 1 + 1), op1, op2, op3, op4)) } inst_OpHitObjectRecordFromQueryEXT :: #force_inline proc "contextless" (buf: []Operand, op1: Id, op2: Id, op3: Id, op4: Id, op5: Maybe(Id)) -> Operation { @@ -6450,7 +6450,7 @@ inst_OpHitObjectRecordFromQueryEXT :: #force_inline proc "contextless" (buf: []O } hit_object_record_from_query_ext :: proc(b: ^Builder, op1: Id, op2: Id, op3: Id, op4: Id, op5: Maybe(Id)) { - append(&b.ops, inst_OpHitObjectRecordFromQueryEXT(opbuf(b, 1 + 1 + 1 + 1 + 1), op1, op2, op3, op4, op5)) + append_elem(&b.ops, inst_OpHitObjectRecordFromQueryEXT(opbuf(b, 1 + 1 + 1 + 1 + 1), op1, op2, op3, op4, op5)) } inst_OpHitObjectRecordMissEXT :: #force_inline proc "contextless" (buf: []Operand, op1: Id, op2: Id, op3: Id, op4: Id, op5: Id, op6: Id, op7: Id) -> Operation { @@ -6466,7 +6466,7 @@ inst_OpHitObjectRecordMissEXT :: #force_inline proc "contextless" (buf: []Operan } hit_object_record_miss_ext :: proc(b: ^Builder, op1: Id, op2: Id, op3: Id, op4: Id, op5: Id, op6: Id, op7: Id) { - append(&b.ops, inst_OpHitObjectRecordMissEXT(opbuf(b, 1 + 1 + 1 + 1 + 1 + 1 + 1), op1, op2, op3, op4, op5, op6, op7)) + append_elem(&b.ops, inst_OpHitObjectRecordMissEXT(opbuf(b, 1 + 1 + 1 + 1 + 1 + 1 + 1), op1, op2, op3, op4, op5, op6, op7)) } inst_OpHitObjectRecordMissMotionEXT :: #force_inline proc "contextless" (buf: []Operand, op1: Id, op2: Id, op3: Id, op4: Id, op5: Id, op6: Id, op7: Id, op8: Id) -> Operation { @@ -6483,7 +6483,7 @@ inst_OpHitObjectRecordMissMotionEXT :: #force_inline proc "contextless" (buf: [] } hit_object_record_miss_motion_ext :: proc(b: ^Builder, op1: Id, op2: Id, op3: Id, op4: Id, op5: Id, op6: Id, op7: Id, op8: Id) { - append(&b.ops, inst_OpHitObjectRecordMissMotionEXT(opbuf(b, 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1), op1, op2, op3, op4, op5, op6, op7, op8)) + append_elem(&b.ops, inst_OpHitObjectRecordMissMotionEXT(opbuf(b, 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1), op1, op2, op3, op4, op5, op6, op7, op8)) } inst_OpHitObjectGetIntersectionTriangleVertexPositionsEXT :: #force_inline proc "contextless" (buf: []Operand, result_type: Type_Ref, result: Id, op1: Id) -> Operation { @@ -6494,7 +6494,7 @@ inst_OpHitObjectGetIntersectionTriangleVertexPositionsEXT :: #force_inline proc hit_object_get_intersection_triangle_vertex_positions_ext :: proc(b: ^Builder, result_type: Type_Ref, op1: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpHitObjectGetIntersectionTriangleVertexPositionsEXT(opbuf(b, 1), result_type, r, op1)) + append_elem(&b.ops, inst_OpHitObjectGetIntersectionTriangleVertexPositionsEXT(opbuf(b, 1), result_type, r, op1)) return r } @@ -6506,7 +6506,7 @@ inst_OpHitObjectGetRayFlagsEXT :: #force_inline proc "contextless" (buf: []Opera hit_object_get_ray_flags_ext :: proc(b: ^Builder, result_type: Type_Ref, op1: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpHitObjectGetRayFlagsEXT(opbuf(b, 1), result_type, r, op1)) + append_elem(&b.ops, inst_OpHitObjectGetRayFlagsEXT(opbuf(b, 1), result_type, r, op1)) return r } @@ -6518,7 +6518,7 @@ inst_OpHitObjectSetShaderBindingTableRecordIndexEXT :: #force_inline proc "conte } hit_object_set_shader_binding_table_record_index_ext :: proc(b: ^Builder, op1: Id, op2: Id) { - append(&b.ops, inst_OpHitObjectSetShaderBindingTableRecordIndexEXT(opbuf(b, 1 + 1), op1, op2)) + append_elem(&b.ops, inst_OpHitObjectSetShaderBindingTableRecordIndexEXT(opbuf(b, 1 + 1), op1, op2)) } inst_OpHitObjectReorderExecuteShaderEXT :: #force_inline proc "contextless" (buf: []Operand, op1: Id, op2: Id, op3: Maybe(Id), op4: Maybe(Id)) -> Operation { @@ -6531,7 +6531,7 @@ inst_OpHitObjectReorderExecuteShaderEXT :: #force_inline proc "contextless" (buf } hit_object_reorder_execute_shader_ext :: proc(b: ^Builder, op1: Id, op2: Id, op3: Maybe(Id), op4: Maybe(Id)) { - append(&b.ops, inst_OpHitObjectReorderExecuteShaderEXT(opbuf(b, 1 + 1 + 1 + 1), op1, op2, op3, op4)) + append_elem(&b.ops, inst_OpHitObjectReorderExecuteShaderEXT(opbuf(b, 1 + 1 + 1 + 1), op1, op2, op3, op4)) } inst_OpHitObjectTraceReorderExecuteEXT :: #force_inline proc "contextless" (buf: []Operand, op1: Id, op2: Id, op3: Id, op4: Id, op5: Id, op6: Id, op7: Id, op8: Id, op9: Id, op10: Id, op11: Id, op12: Id, op13: Maybe(Id), op14: Maybe(Id)) -> Operation { @@ -6554,7 +6554,7 @@ inst_OpHitObjectTraceReorderExecuteEXT :: #force_inline proc "contextless" (buf: } hit_object_trace_reorder_execute_ext :: proc(b: ^Builder, op1: Id, op2: Id, op3: Id, op4: Id, op5: Id, op6: Id, op7: Id, op8: Id, op9: Id, op10: Id, op11: Id, op12: Id, op13: Maybe(Id), op14: Maybe(Id)) { - append(&b.ops, inst_OpHitObjectTraceReorderExecuteEXT(opbuf(b, 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1), op1, op2, op3, op4, op5, op6, op7, op8, op9, op10, op11, op12, op13, op14)) + append_elem(&b.ops, inst_OpHitObjectTraceReorderExecuteEXT(opbuf(b, 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1), op1, op2, op3, op4, op5, op6, op7, op8, op9, op10, op11, op12, op13, op14)) } inst_OpHitObjectTraceMotionReorderExecuteEXT :: #force_inline proc "contextless" (buf: []Operand, op1: Id, op2: Id, op3: Id, op4: Id, op5: Id, op6: Id, op7: Id, op8: Id, op9: Id, op10: Id, op11: Id, op12: Id, op13: Id, op14: Maybe(Id), op15: Maybe(Id)) -> Operation { @@ -6578,7 +6578,7 @@ inst_OpHitObjectTraceMotionReorderExecuteEXT :: #force_inline proc "contextless" } hit_object_trace_motion_reorder_execute_ext :: proc(b: ^Builder, op1: Id, op2: Id, op3: Id, op4: Id, op5: Id, op6: Id, op7: Id, op8: Id, op9: Id, op10: Id, op11: Id, op12: Id, op13: Id, op14: Maybe(Id), op15: Maybe(Id)) { - append(&b.ops, inst_OpHitObjectTraceMotionReorderExecuteEXT(opbuf(b, 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1), op1, op2, op3, op4, op5, op6, op7, op8, op9, op10, op11, op12, op13, op14, op15)) + append_elem(&b.ops, inst_OpHitObjectTraceMotionReorderExecuteEXT(opbuf(b, 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1), op1, op2, op3, op4, op5, op6, op7, op8, op9, op10, op11, op12, op13, op14, op15)) } inst_OpTypeHitObjectEXT :: #force_inline proc "contextless" (result: Id) -> Operation { @@ -6587,7 +6587,7 @@ inst_OpTypeHitObjectEXT :: #force_inline proc "contextless" (result: Id) -> Oper type_hit_object_ext :: proc(b: ^Builder) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpTypeHitObjectEXT(r)) + append_elem(&b.ops, inst_OpTypeHitObjectEXT(r)) return r } @@ -6599,7 +6599,7 @@ inst_OpReorderThreadWithHintEXT :: #force_inline proc "contextless" (buf: []Oper } reorder_thread_with_hint_ext :: proc(b: ^Builder, op1: Id, op2: Id) { - append(&b.ops, inst_OpReorderThreadWithHintEXT(opbuf(b, 1 + 1), op1, op2)) + append_elem(&b.ops, inst_OpReorderThreadWithHintEXT(opbuf(b, 1 + 1), op1, op2)) } inst_OpReorderThreadWithHitObjectEXT :: #force_inline proc "contextless" (buf: []Operand, op1: Id, op2: Maybe(Id), op3: Maybe(Id)) -> Operation { @@ -6611,7 +6611,7 @@ inst_OpReorderThreadWithHitObjectEXT :: #force_inline proc "contextless" (buf: [ } reorder_thread_with_hit_object_ext :: proc(b: ^Builder, op1: Id, op2: Maybe(Id), op3: Maybe(Id)) { - append(&b.ops, inst_OpReorderThreadWithHitObjectEXT(opbuf(b, 1 + 1 + 1), op1, op2, op3)) + append_elem(&b.ops, inst_OpReorderThreadWithHitObjectEXT(opbuf(b, 1 + 1 + 1), op1, op2, op3)) } inst_OpHitObjectTraceRayEXT :: #force_inline proc "contextless" (buf: []Operand, op1: Id, op2: Id, op3: Id, op4: Id, op5: Id, op6: Id, op7: Id, op8: Id, op9: Id, op10: Id, op11: Id, op12: Id) -> Operation { @@ -6632,7 +6632,7 @@ inst_OpHitObjectTraceRayEXT :: #force_inline proc "contextless" (buf: []Operand, } hit_object_trace_ray_ext :: proc(b: ^Builder, op1: Id, op2: Id, op3: Id, op4: Id, op5: Id, op6: Id, op7: Id, op8: Id, op9: Id, op10: Id, op11: Id, op12: Id) { - append(&b.ops, inst_OpHitObjectTraceRayEXT(opbuf(b, 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1), op1, op2, op3, op4, op5, op6, op7, op8, op9, op10, op11, op12)) + append_elem(&b.ops, inst_OpHitObjectTraceRayEXT(opbuf(b, 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1), op1, op2, op3, op4, op5, op6, op7, op8, op9, op10, op11, op12)) } inst_OpHitObjectTraceRayMotionEXT :: #force_inline proc "contextless" (buf: []Operand, op1: Id, op2: Id, op3: Id, op4: Id, op5: Id, op6: Id, op7: Id, op8: Id, op9: Id, op10: Id, op11: Id, op12: Id, op13: Id) -> Operation { @@ -6654,7 +6654,7 @@ inst_OpHitObjectTraceRayMotionEXT :: #force_inline proc "contextless" (buf: []Op } hit_object_trace_ray_motion_ext :: proc(b: ^Builder, op1: Id, op2: Id, op3: Id, op4: Id, op5: Id, op6: Id, op7: Id, op8: Id, op9: Id, op10: Id, op11: Id, op12: Id, op13: Id) { - append(&b.ops, inst_OpHitObjectTraceRayMotionEXT(opbuf(b, 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1), op1, op2, op3, op4, op5, op6, op7, op8, op9, op10, op11, op12, op13)) + append_elem(&b.ops, inst_OpHitObjectTraceRayMotionEXT(opbuf(b, 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1), op1, op2, op3, op4, op5, op6, op7, op8, op9, op10, op11, op12, op13)) } inst_OpHitObjectRecordEmptyEXT :: #force_inline proc "contextless" (buf: []Operand, op1: Id) -> Operation { @@ -6664,7 +6664,7 @@ inst_OpHitObjectRecordEmptyEXT :: #force_inline proc "contextless" (buf: []Opera } hit_object_record_empty_ext :: proc(b: ^Builder, op1: Id) { - append(&b.ops, inst_OpHitObjectRecordEmptyEXT(opbuf(b, 1), op1)) + append_elem(&b.ops, inst_OpHitObjectRecordEmptyEXT(opbuf(b, 1), op1)) } inst_OpHitObjectExecuteShaderEXT :: #force_inline proc "contextless" (buf: []Operand, op1: Id, op2: Id) -> Operation { @@ -6675,7 +6675,7 @@ inst_OpHitObjectExecuteShaderEXT :: #force_inline proc "contextless" (buf: []Ope } hit_object_execute_shader_ext :: proc(b: ^Builder, op1: Id, op2: Id) { - append(&b.ops, inst_OpHitObjectExecuteShaderEXT(opbuf(b, 1 + 1), op1, op2)) + append_elem(&b.ops, inst_OpHitObjectExecuteShaderEXT(opbuf(b, 1 + 1), op1, op2)) } inst_OpHitObjectGetCurrentTimeEXT :: #force_inline proc "contextless" (buf: []Operand, result_type: Type_Ref, result: Id, op1: Id) -> Operation { @@ -6686,7 +6686,7 @@ inst_OpHitObjectGetCurrentTimeEXT :: #force_inline proc "contextless" (buf: []Op hit_object_get_current_time_ext :: proc(b: ^Builder, result_type: Type_Ref, op1: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpHitObjectGetCurrentTimeEXT(opbuf(b, 1), result_type, r, op1)) + append_elem(&b.ops, inst_OpHitObjectGetCurrentTimeEXT(opbuf(b, 1), result_type, r, op1)) return r } @@ -6698,7 +6698,7 @@ inst_OpHitObjectGetAttributesEXT :: #force_inline proc "contextless" (buf: []Ope } hit_object_get_attributes_ext :: proc(b: ^Builder, op1: Id, op2: Id) { - append(&b.ops, inst_OpHitObjectGetAttributesEXT(opbuf(b, 1 + 1), op1, op2)) + append_elem(&b.ops, inst_OpHitObjectGetAttributesEXT(opbuf(b, 1 + 1), op1, op2)) } inst_OpHitObjectGetHitKindEXT :: #force_inline proc "contextless" (buf: []Operand, result_type: Type_Ref, result: Id, op1: Id) -> Operation { @@ -6709,7 +6709,7 @@ inst_OpHitObjectGetHitKindEXT :: #force_inline proc "contextless" (buf: []Operan hit_object_get_hit_kind_ext :: proc(b: ^Builder, result_type: Type_Ref, op1: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpHitObjectGetHitKindEXT(opbuf(b, 1), result_type, r, op1)) + append_elem(&b.ops, inst_OpHitObjectGetHitKindEXT(opbuf(b, 1), result_type, r, op1)) return r } @@ -6721,7 +6721,7 @@ inst_OpHitObjectGetPrimitiveIndexEXT :: #force_inline proc "contextless" (buf: [ hit_object_get_primitive_index_ext :: proc(b: ^Builder, result_type: Type_Ref, op1: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpHitObjectGetPrimitiveIndexEXT(opbuf(b, 1), result_type, r, op1)) + append_elem(&b.ops, inst_OpHitObjectGetPrimitiveIndexEXT(opbuf(b, 1), result_type, r, op1)) return r } @@ -6733,7 +6733,7 @@ inst_OpHitObjectGetGeometryIndexEXT :: #force_inline proc "contextless" (buf: [] hit_object_get_geometry_index_ext :: proc(b: ^Builder, result_type: Type_Ref, op1: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpHitObjectGetGeometryIndexEXT(opbuf(b, 1), result_type, r, op1)) + append_elem(&b.ops, inst_OpHitObjectGetGeometryIndexEXT(opbuf(b, 1), result_type, r, op1)) return r } @@ -6745,7 +6745,7 @@ inst_OpHitObjectGetInstanceIdEXT :: #force_inline proc "contextless" (buf: []Ope hit_object_get_instance_id_ext :: proc(b: ^Builder, result_type: Type_Ref, op1: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpHitObjectGetInstanceIdEXT(opbuf(b, 1), result_type, r, op1)) + append_elem(&b.ops, inst_OpHitObjectGetInstanceIdEXT(opbuf(b, 1), result_type, r, op1)) return r } @@ -6757,7 +6757,7 @@ inst_OpHitObjectGetInstanceCustomIndexEXT :: #force_inline proc "contextless" (b hit_object_get_instance_custom_index_ext :: proc(b: ^Builder, result_type: Type_Ref, op1: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpHitObjectGetInstanceCustomIndexEXT(opbuf(b, 1), result_type, r, op1)) + append_elem(&b.ops, inst_OpHitObjectGetInstanceCustomIndexEXT(opbuf(b, 1), result_type, r, op1)) return r } @@ -6769,7 +6769,7 @@ inst_OpHitObjectGetObjectRayOriginEXT :: #force_inline proc "contextless" (buf: hit_object_get_object_ray_origin_ext :: proc(b: ^Builder, result_type: Type_Ref, op1: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpHitObjectGetObjectRayOriginEXT(opbuf(b, 1), result_type, r, op1)) + append_elem(&b.ops, inst_OpHitObjectGetObjectRayOriginEXT(opbuf(b, 1), result_type, r, op1)) return r } @@ -6781,7 +6781,7 @@ inst_OpHitObjectGetObjectRayDirectionEXT :: #force_inline proc "contextless" (bu hit_object_get_object_ray_direction_ext :: proc(b: ^Builder, result_type: Type_Ref, op1: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpHitObjectGetObjectRayDirectionEXT(opbuf(b, 1), result_type, r, op1)) + append_elem(&b.ops, inst_OpHitObjectGetObjectRayDirectionEXT(opbuf(b, 1), result_type, r, op1)) return r } @@ -6793,7 +6793,7 @@ inst_OpHitObjectGetWorldRayDirectionEXT :: #force_inline proc "contextless" (buf hit_object_get_world_ray_direction_ext :: proc(b: ^Builder, result_type: Type_Ref, op1: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpHitObjectGetWorldRayDirectionEXT(opbuf(b, 1), result_type, r, op1)) + append_elem(&b.ops, inst_OpHitObjectGetWorldRayDirectionEXT(opbuf(b, 1), result_type, r, op1)) return r } @@ -6805,7 +6805,7 @@ inst_OpHitObjectGetWorldRayOriginEXT :: #force_inline proc "contextless" (buf: [ hit_object_get_world_ray_origin_ext :: proc(b: ^Builder, result_type: Type_Ref, op1: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpHitObjectGetWorldRayOriginEXT(opbuf(b, 1), result_type, r, op1)) + append_elem(&b.ops, inst_OpHitObjectGetWorldRayOriginEXT(opbuf(b, 1), result_type, r, op1)) return r } @@ -6817,7 +6817,7 @@ inst_OpHitObjectGetObjectToWorldEXT :: #force_inline proc "contextless" (buf: [] hit_object_get_object_to_world_ext :: proc(b: ^Builder, result_type: Type_Ref, op1: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpHitObjectGetObjectToWorldEXT(opbuf(b, 1), result_type, r, op1)) + append_elem(&b.ops, inst_OpHitObjectGetObjectToWorldEXT(opbuf(b, 1), result_type, r, op1)) return r } @@ -6829,7 +6829,7 @@ inst_OpHitObjectGetWorldToObjectEXT :: #force_inline proc "contextless" (buf: [] hit_object_get_world_to_object_ext :: proc(b: ^Builder, result_type: Type_Ref, op1: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpHitObjectGetWorldToObjectEXT(opbuf(b, 1), result_type, r, op1)) + append_elem(&b.ops, inst_OpHitObjectGetWorldToObjectEXT(opbuf(b, 1), result_type, r, op1)) return r } @@ -6841,7 +6841,7 @@ inst_OpHitObjectGetRayTMaxEXT :: #force_inline proc "contextless" (buf: []Operan hit_object_get_ray_t_max_ext :: proc(b: ^Builder, result_type: Type_Ref, op1: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpHitObjectGetRayTMaxEXT(opbuf(b, 1), result_type, r, op1)) + append_elem(&b.ops, inst_OpHitObjectGetRayTMaxEXT(opbuf(b, 1), result_type, r, op1)) return r } @@ -6854,7 +6854,7 @@ inst_OpReportIntersectionKHR :: #force_inline proc "contextless" (buf: []Operand report_intersection_khr :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpReportIntersectionKHR(opbuf(b, 1 + 1), result_type, r, op1, op2)) + append_elem(&b.ops, inst_OpReportIntersectionKHR(opbuf(b, 1 + 1), result_type, r, op1, op2)) return r } @@ -6863,7 +6863,7 @@ inst_OpIgnoreIntersectionNV :: #force_inline proc "contextless" () -> Operation } ignore_intersection_nv :: proc(b: ^Builder) { - append(&b.ops, inst_OpIgnoreIntersectionNV()) + append_elem(&b.ops, inst_OpIgnoreIntersectionNV()) } inst_OpTerminateRayNV :: #force_inline proc "contextless" () -> Operation { @@ -6871,7 +6871,7 @@ inst_OpTerminateRayNV :: #force_inline proc "contextless" () -> Operation { } terminate_ray_nv :: proc(b: ^Builder) { - append(&b.ops, inst_OpTerminateRayNV()) + append_elem(&b.ops, inst_OpTerminateRayNV()) } inst_OpTraceNV :: #force_inline proc "contextless" (buf: []Operand, op1: Id, op2: Id, op3: Id, op4: Id, op5: Id, op6: Id, op7: Id, op8: Id, op9: Id, op10: Id, op11: Id) -> Operation { @@ -6891,7 +6891,7 @@ inst_OpTraceNV :: #force_inline proc "contextless" (buf: []Operand, op1: Id, op2 } trace_nv :: proc(b: ^Builder, op1: Id, op2: Id, op3: Id, op4: Id, op5: Id, op6: Id, op7: Id, op8: Id, op9: Id, op10: Id, op11: Id) { - append(&b.ops, inst_OpTraceNV(opbuf(b, 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1), op1, op2, op3, op4, op5, op6, op7, op8, op9, op10, op11)) + append_elem(&b.ops, inst_OpTraceNV(opbuf(b, 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1), op1, op2, op3, op4, op5, op6, op7, op8, op9, op10, op11)) } inst_OpTraceMotionNV :: #force_inline proc "contextless" (buf: []Operand, op1: Id, op2: Id, op3: Id, op4: Id, op5: Id, op6: Id, op7: Id, op8: Id, op9: Id, op10: Id, op11: Id, op12: Id) -> Operation { @@ -6912,7 +6912,7 @@ inst_OpTraceMotionNV :: #force_inline proc "contextless" (buf: []Operand, op1: I } trace_motion_nv :: proc(b: ^Builder, op1: Id, op2: Id, op3: Id, op4: Id, op5: Id, op6: Id, op7: Id, op8: Id, op9: Id, op10: Id, op11: Id, op12: Id) { - append(&b.ops, inst_OpTraceMotionNV(opbuf(b, 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1), op1, op2, op3, op4, op5, op6, op7, op8, op9, op10, op11, op12)) + append_elem(&b.ops, inst_OpTraceMotionNV(opbuf(b, 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1), op1, op2, op3, op4, op5, op6, op7, op8, op9, op10, op11, op12)) } inst_OpTraceRayMotionNV :: #force_inline proc "contextless" (buf: []Operand, op1: Id, op2: Id, op3: Id, op4: Id, op5: Id, op6: Id, op7: Id, op8: Id, op9: Id, op10: Id, op11: Id, op12: Id) -> Operation { @@ -6933,7 +6933,7 @@ inst_OpTraceRayMotionNV :: #force_inline proc "contextless" (buf: []Operand, op1 } trace_ray_motion_nv :: proc(b: ^Builder, op1: Id, op2: Id, op3: Id, op4: Id, op5: Id, op6: Id, op7: Id, op8: Id, op9: Id, op10: Id, op11: Id, op12: Id) { - append(&b.ops, inst_OpTraceRayMotionNV(opbuf(b, 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1), op1, op2, op3, op4, op5, op6, op7, op8, op9, op10, op11, op12)) + append_elem(&b.ops, inst_OpTraceRayMotionNV(opbuf(b, 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1), op1, op2, op3, op4, op5, op6, op7, op8, op9, op10, op11, op12)) } inst_OpRayQueryGetIntersectionTriangleVertexPositionsKHR :: #force_inline proc "contextless" (buf: []Operand, result_type: Type_Ref, result: Id, op1: Id, op2: Id) -> Operation { @@ -6945,7 +6945,7 @@ inst_OpRayQueryGetIntersectionTriangleVertexPositionsKHR :: #force_inline proc " ray_query_get_intersection_triangle_vertex_positions_khr :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpRayQueryGetIntersectionTriangleVertexPositionsKHR(opbuf(b, 1 + 1), result_type, r, op1, op2)) + append_elem(&b.ops, inst_OpRayQueryGetIntersectionTriangleVertexPositionsKHR(opbuf(b, 1 + 1), result_type, r, op1, op2)) return r } @@ -6955,7 +6955,7 @@ inst_OpTypeAccelerationStructureKHR :: #force_inline proc "contextless" (result: type_acceleration_structure_khr :: proc(b: ^Builder) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpTypeAccelerationStructureKHR(r)) + append_elem(&b.ops, inst_OpTypeAccelerationStructureKHR(r)) return r } @@ -6967,7 +6967,7 @@ inst_OpExecuteCallableNV :: #force_inline proc "contextless" (buf: []Operand, op } execute_callable_nv :: proc(b: ^Builder, op1: Id, op2: Id) { - append(&b.ops, inst_OpExecuteCallableNV(opbuf(b, 1 + 1), op1, op2)) + append_elem(&b.ops, inst_OpExecuteCallableNV(opbuf(b, 1 + 1), op1, op2)) } inst_OpRayQueryGetIntersectionClusterIdNV :: #force_inline proc "contextless" (buf: []Operand, result_type: Type_Ref, result: Id, op1: Id, op2: Id) -> Operation { @@ -6979,7 +6979,7 @@ inst_OpRayQueryGetIntersectionClusterIdNV :: #force_inline proc "contextless" (b ray_query_get_intersection_cluster_id_nv :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpRayQueryGetIntersectionClusterIdNV(opbuf(b, 1 + 1), result_type, r, op1, op2)) + append_elem(&b.ops, inst_OpRayQueryGetIntersectionClusterIdNV(opbuf(b, 1 + 1), result_type, r, op1, op2)) return r } @@ -6991,7 +6991,7 @@ inst_OpHitObjectGetClusterIdNV :: #force_inline proc "contextless" (buf: []Opera hit_object_get_cluster_id_nv :: proc(b: ^Builder, result_type: Type_Ref, op1: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpHitObjectGetClusterIdNV(opbuf(b, 1), result_type, r, op1)) + append_elem(&b.ops, inst_OpHitObjectGetClusterIdNV(opbuf(b, 1), result_type, r, op1)) return r } @@ -7003,7 +7003,7 @@ inst_OpHitObjectGetRayTMinEXT :: #force_inline proc "contextless" (buf: []Operan hit_object_get_ray_t_min_ext :: proc(b: ^Builder, result_type: Type_Ref, op1: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpHitObjectGetRayTMinEXT(opbuf(b, 1), result_type, r, op1)) + append_elem(&b.ops, inst_OpHitObjectGetRayTMinEXT(opbuf(b, 1), result_type, r, op1)) return r } @@ -7015,7 +7015,7 @@ inst_OpHitObjectGetShaderBindingTableRecordIndexEXT :: #force_inline proc "conte hit_object_get_shader_binding_table_record_index_ext :: proc(b: ^Builder, result_type: Type_Ref, op1: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpHitObjectGetShaderBindingTableRecordIndexEXT(opbuf(b, 1), result_type, r, op1)) + append_elem(&b.ops, inst_OpHitObjectGetShaderBindingTableRecordIndexEXT(opbuf(b, 1), result_type, r, op1)) return r } @@ -7027,7 +7027,7 @@ inst_OpHitObjectGetShaderRecordBufferHandleEXT :: #force_inline proc "contextles hit_object_get_shader_record_buffer_handle_ext :: proc(b: ^Builder, result_type: Type_Ref, op1: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpHitObjectGetShaderRecordBufferHandleEXT(opbuf(b, 1), result_type, r, op1)) + append_elem(&b.ops, inst_OpHitObjectGetShaderRecordBufferHandleEXT(opbuf(b, 1), result_type, r, op1)) return r } @@ -7039,7 +7039,7 @@ inst_OpHitObjectIsEmptyEXT :: #force_inline proc "contextless" (buf: []Operand, hit_object_is_empty_ext :: proc(b: ^Builder, result_type: Type_Ref, op1: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpHitObjectIsEmptyEXT(opbuf(b, 1), result_type, r, op1)) + append_elem(&b.ops, inst_OpHitObjectIsEmptyEXT(opbuf(b, 1), result_type, r, op1)) return r } @@ -7051,7 +7051,7 @@ inst_OpHitObjectIsHitEXT :: #force_inline proc "contextless" (buf: []Operand, re hit_object_is_hit_ext :: proc(b: ^Builder, result_type: Type_Ref, op1: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpHitObjectIsHitEXT(opbuf(b, 1), result_type, r, op1)) + append_elem(&b.ops, inst_OpHitObjectIsHitEXT(opbuf(b, 1), result_type, r, op1)) return r } @@ -7063,7 +7063,7 @@ inst_OpHitObjectIsMissEXT :: #force_inline proc "contextless" (buf: []Operand, r hit_object_is_miss_ext :: proc(b: ^Builder, result_type: Type_Ref, op1: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpHitObjectIsMissEXT(opbuf(b, 1), result_type, r, op1)) + append_elem(&b.ops, inst_OpHitObjectIsMissEXT(opbuf(b, 1), result_type, r, op1)) return r } @@ -7078,7 +7078,7 @@ inst_OpTypeCooperativeMatrixNV :: #force_inline proc "contextless" (buf: []Opera type_cooperative_matrix_nv :: proc(b: ^Builder, op1: Id, op2: Id, op3: Id, op4: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpTypeCooperativeMatrixNV(opbuf(b, 1 + 1 + 1 + 1), r, op1, op2, op3, op4)) + append_elem(&b.ops, inst_OpTypeCooperativeMatrixNV(opbuf(b, 1 + 1 + 1 + 1), r, op1, op2, op3, op4)) return r } @@ -7093,7 +7093,7 @@ inst_OpCooperativeMatrixLoadNV :: #force_inline proc "contextless" (buf: []Opera cooperative_matrix_load_nv :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Id, op3: Id, op4: Maybe(Memory_Access)) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpCooperativeMatrixLoadNV(opbuf(b, 1 + 1 + 1 + 1), result_type, r, op1, op2, op3, op4)) + append_elem(&b.ops, inst_OpCooperativeMatrixLoadNV(opbuf(b, 1 + 1 + 1 + 1), result_type, r, op1, op2, op3, op4)) return r } @@ -7108,7 +7108,7 @@ inst_OpCooperativeMatrixStoreNV :: #force_inline proc "contextless" (buf: []Oper } cooperative_matrix_store_nv :: proc(b: ^Builder, op1: Id, op2: Id, op3: Id, op4: Id, op5: Maybe(Memory_Access)) { - append(&b.ops, inst_OpCooperativeMatrixStoreNV(opbuf(b, 1 + 1 + 1 + 1 + 1), op1, op2, op3, op4, op5)) + append_elem(&b.ops, inst_OpCooperativeMatrixStoreNV(opbuf(b, 1 + 1 + 1 + 1 + 1), op1, op2, op3, op4, op5)) } inst_OpCooperativeMatrixMulAddNV :: #force_inline proc "contextless" (buf: []Operand, result_type: Type_Ref, result: Id, op1: Id, op2: Id, op3: Id) -> Operation { @@ -7121,7 +7121,7 @@ inst_OpCooperativeMatrixMulAddNV :: #force_inline proc "contextless" (buf: []Ope cooperative_matrix_mul_add_nv :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Id, op3: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpCooperativeMatrixMulAddNV(opbuf(b, 1 + 1 + 1), result_type, r, op1, op2, op3)) + append_elem(&b.ops, inst_OpCooperativeMatrixMulAddNV(opbuf(b, 1 + 1 + 1), result_type, r, op1, op2, op3)) return r } @@ -7133,7 +7133,7 @@ inst_OpCooperativeMatrixLengthNV :: #force_inline proc "contextless" (buf: []Ope cooperative_matrix_length_nv :: proc(b: ^Builder, result_type: Type_Ref, op1: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpCooperativeMatrixLengthNV(opbuf(b, 1), result_type, r, op1)) + append_elem(&b.ops, inst_OpCooperativeMatrixLengthNV(opbuf(b, 1), result_type, r, op1)) return r } @@ -7142,7 +7142,7 @@ inst_OpBeginInvocationInterlockEXT :: #force_inline proc "contextless" () -> Ope } begin_invocation_interlock_ext :: proc(b: ^Builder) { - append(&b.ops, inst_OpBeginInvocationInterlockEXT()) + append_elem(&b.ops, inst_OpBeginInvocationInterlockEXT()) } inst_OpEndInvocationInterlockEXT :: #force_inline proc "contextless" () -> Operation { @@ -7150,7 +7150,7 @@ inst_OpEndInvocationInterlockEXT :: #force_inline proc "contextless" () -> Opera } end_invocation_interlock_ext :: proc(b: ^Builder) { - append(&b.ops, inst_OpEndInvocationInterlockEXT()) + append_elem(&b.ops, inst_OpEndInvocationInterlockEXT()) } inst_OpCooperativeMatrixReduceNV :: #force_inline proc "contextless" (buf: []Operand, result_type: Type_Ref, result: Id, op1: Id, op2: Cooperative_Matrix_Reduce, op3: Id) -> Operation { @@ -7163,7 +7163,7 @@ inst_OpCooperativeMatrixReduceNV :: #force_inline proc "contextless" (buf: []Ope cooperative_matrix_reduce_nv :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Cooperative_Matrix_Reduce, op3: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpCooperativeMatrixReduceNV(opbuf(b, 1 + 1 + 1), result_type, r, op1, op2, op3)) + append_elem(&b.ops, inst_OpCooperativeMatrixReduceNV(opbuf(b, 1 + 1 + 1), result_type, r, op1, op2, op3)) return r } @@ -7179,7 +7179,7 @@ inst_OpCooperativeMatrixLoadTensorNV :: #force_inline proc "contextless" (buf: [ cooperative_matrix_load_tensor_nv :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Id, op3: Id, op4: Memory_Access, op5: Tensor_Addressing_Operands) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpCooperativeMatrixLoadTensorNV(opbuf(b, 1 + 1 + 1 + 1 + 1), result_type, r, op1, op2, op3, op4, op5)) + append_elem(&b.ops, inst_OpCooperativeMatrixLoadTensorNV(opbuf(b, 1 + 1 + 1 + 1 + 1), result_type, r, op1, op2, op3, op4, op5)) return r } @@ -7194,7 +7194,7 @@ inst_OpCooperativeMatrixStoreTensorNV :: #force_inline proc "contextless" (buf: } cooperative_matrix_store_tensor_nv :: proc(b: ^Builder, op1: Id, op2: Id, op3: Id, op4: Memory_Access, op5: Tensor_Addressing_Operands) { - append(&b.ops, inst_OpCooperativeMatrixStoreTensorNV(opbuf(b, 1 + 1 + 1 + 1 + 1), op1, op2, op3, op4, op5)) + append_elem(&b.ops, inst_OpCooperativeMatrixStoreTensorNV(opbuf(b, 1 + 1 + 1 + 1 + 1), op1, op2, op3, op4, op5)) } inst_OpCooperativeMatrixPerElementOpNV :: #force_inline proc "contextless" (buf: []Operand, result_type: Type_Ref, result: Id, op1: Id, op2: Id, op3: []Id) -> Operation { @@ -7207,7 +7207,7 @@ inst_OpCooperativeMatrixPerElementOpNV :: #force_inline proc "contextless" (buf: cooperative_matrix_per_element_op_nv :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Id, op3: []Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpCooperativeMatrixPerElementOpNV(opbuf(b, 1 + 1 + len(op3)), result_type, r, op1, op2, op3)) + append_elem(&b.ops, inst_OpCooperativeMatrixPerElementOpNV(opbuf(b, 1 + 1 + len(op3)), result_type, r, op1, op2, op3)) return r } @@ -7220,7 +7220,7 @@ inst_OpTypeTensorLayoutNV :: #force_inline proc "contextless" (buf: []Operand, r type_tensor_layout_nv :: proc(b: ^Builder, op1: Id, op2: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpTypeTensorLayoutNV(opbuf(b, 1 + 1), r, op1, op2)) + append_elem(&b.ops, inst_OpTypeTensorLayoutNV(opbuf(b, 1 + 1), r, op1, op2)) return r } @@ -7234,7 +7234,7 @@ inst_OpTypeTensorViewNV :: #force_inline proc "contextless" (buf: []Operand, res type_tensor_view_nv :: proc(b: ^Builder, op1: Id, op2: Id, op3: []Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpTypeTensorViewNV(opbuf(b, 1 + 1 + len(op3)), r, op1, op2, op3)) + append_elem(&b.ops, inst_OpTypeTensorViewNV(opbuf(b, 1 + 1 + len(op3)), r, op1, op2, op3)) return r } @@ -7244,7 +7244,7 @@ inst_OpCreateTensorLayoutNV :: #force_inline proc "contextless" (result_type: Ty create_tensor_layout_nv :: proc(b: ^Builder, result_type: Type_Ref) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpCreateTensorLayoutNV(result_type, r)) + append_elem(&b.ops, inst_OpCreateTensorLayoutNV(result_type, r)) return r } @@ -7257,7 +7257,7 @@ inst_OpTensorLayoutSetDimensionNV :: #force_inline proc "contextless" (buf: []Op tensor_layout_set_dimension_nv :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: []Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpTensorLayoutSetDimensionNV(opbuf(b, 1 + len(op2)), result_type, r, op1, op2)) + append_elem(&b.ops, inst_OpTensorLayoutSetDimensionNV(opbuf(b, 1 + len(op2)), result_type, r, op1, op2)) return r } @@ -7270,7 +7270,7 @@ inst_OpTensorLayoutSetStrideNV :: #force_inline proc "contextless" (buf: []Opera tensor_layout_set_stride_nv :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: []Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpTensorLayoutSetStrideNV(opbuf(b, 1 + len(op2)), result_type, r, op1, op2)) + append_elem(&b.ops, inst_OpTensorLayoutSetStrideNV(opbuf(b, 1 + len(op2)), result_type, r, op1, op2)) return r } @@ -7283,7 +7283,7 @@ inst_OpTensorLayoutSliceNV :: #force_inline proc "contextless" (buf: []Operand, tensor_layout_slice_nv :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: []Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpTensorLayoutSliceNV(opbuf(b, 1 + len(op2)), result_type, r, op1, op2)) + append_elem(&b.ops, inst_OpTensorLayoutSliceNV(opbuf(b, 1 + len(op2)), result_type, r, op1, op2)) return r } @@ -7296,7 +7296,7 @@ inst_OpTensorLayoutSetClampValueNV :: #force_inline proc "contextless" (buf: []O tensor_layout_set_clamp_value_nv :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpTensorLayoutSetClampValueNV(opbuf(b, 1 + 1), result_type, r, op1, op2)) + append_elem(&b.ops, inst_OpTensorLayoutSetClampValueNV(opbuf(b, 1 + 1), result_type, r, op1, op2)) return r } @@ -7306,7 +7306,7 @@ inst_OpCreateTensorViewNV :: #force_inline proc "contextless" (result_type: Type create_tensor_view_nv :: proc(b: ^Builder, result_type: Type_Ref) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpCreateTensorViewNV(result_type, r)) + append_elem(&b.ops, inst_OpCreateTensorViewNV(result_type, r)) return r } @@ -7319,7 +7319,7 @@ inst_OpTensorViewSetDimensionNV :: #force_inline proc "contextless" (buf: []Oper tensor_view_set_dimension_nv :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: []Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpTensorViewSetDimensionNV(opbuf(b, 1 + len(op2)), result_type, r, op1, op2)) + append_elem(&b.ops, inst_OpTensorViewSetDimensionNV(opbuf(b, 1 + len(op2)), result_type, r, op1, op2)) return r } @@ -7332,7 +7332,7 @@ inst_OpTensorViewSetStrideNV :: #force_inline proc "contextless" (buf: []Operand tensor_view_set_stride_nv :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: []Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpTensorViewSetStrideNV(opbuf(b, 1 + len(op2)), result_type, r, op1, op2)) + append_elem(&b.ops, inst_OpTensorViewSetStrideNV(opbuf(b, 1 + len(op2)), result_type, r, op1, op2)) return r } @@ -7341,7 +7341,7 @@ inst_OpDemoteToHelperInvocation :: #force_inline proc "contextless" () -> Operat } demote_to_helper_invocation :: proc(b: ^Builder) { - append(&b.ops, inst_OpDemoteToHelperInvocation()) + append_elem(&b.ops, inst_OpDemoteToHelperInvocation()) } inst_OpIsHelperInvocationEXT :: #force_inline proc "contextless" (result_type: Type_Ref, result: Id) -> Operation { @@ -7350,7 +7350,7 @@ inst_OpIsHelperInvocationEXT :: #force_inline proc "contextless" (result_type: T is_helper_invocation_ext :: proc(b: ^Builder, result_type: Type_Ref) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpIsHelperInvocationEXT(result_type, r)) + append_elem(&b.ops, inst_OpIsHelperInvocationEXT(result_type, r)) return r } @@ -7366,7 +7366,7 @@ inst_OpTensorViewSetClipNV :: #force_inline proc "contextless" (buf: []Operand, tensor_view_set_clip_nv :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Id, op3: Id, op4: Id, op5: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpTensorViewSetClipNV(opbuf(b, 1 + 1 + 1 + 1 + 1), result_type, r, op1, op2, op3, op4, op5)) + append_elem(&b.ops, inst_OpTensorViewSetClipNV(opbuf(b, 1 + 1 + 1 + 1 + 1), result_type, r, op1, op2, op3, op4, op5)) return r } @@ -7379,7 +7379,7 @@ inst_OpTensorLayoutSetBlockSizeNV :: #force_inline proc "contextless" (buf: []Op tensor_layout_set_block_size_nv :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: []Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpTensorLayoutSetBlockSizeNV(opbuf(b, 1 + len(op2)), result_type, r, op1, op2)) + append_elem(&b.ops, inst_OpTensorLayoutSetBlockSizeNV(opbuf(b, 1 + len(op2)), result_type, r, op1, op2)) return r } @@ -7391,7 +7391,7 @@ inst_OpCooperativeMatrixTransposeNV :: #force_inline proc "contextless" (buf: [] cooperative_matrix_transpose_nv :: proc(b: ^Builder, result_type: Type_Ref, op1: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpCooperativeMatrixTransposeNV(opbuf(b, 1), result_type, r, op1)) + append_elem(&b.ops, inst_OpCooperativeMatrixTransposeNV(opbuf(b, 1), result_type, r, op1)) return r } @@ -7403,7 +7403,7 @@ inst_OpConvertUToImageNV :: #force_inline proc "contextless" (buf: []Operand, re convert_u_to_image_nv :: proc(b: ^Builder, result_type: Type_Ref, op1: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpConvertUToImageNV(opbuf(b, 1), result_type, r, op1)) + append_elem(&b.ops, inst_OpConvertUToImageNV(opbuf(b, 1), result_type, r, op1)) return r } @@ -7415,7 +7415,7 @@ inst_OpConvertUToSamplerNV :: #force_inline proc "contextless" (buf: []Operand, convert_u_to_sampler_nv :: proc(b: ^Builder, result_type: Type_Ref, op1: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpConvertUToSamplerNV(opbuf(b, 1), result_type, r, op1)) + append_elem(&b.ops, inst_OpConvertUToSamplerNV(opbuf(b, 1), result_type, r, op1)) return r } @@ -7427,7 +7427,7 @@ inst_OpConvertImageToUNV :: #force_inline proc "contextless" (buf: []Operand, re convert_image_to_unv :: proc(b: ^Builder, result_type: Type_Ref, op1: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpConvertImageToUNV(opbuf(b, 1), result_type, r, op1)) + append_elem(&b.ops, inst_OpConvertImageToUNV(opbuf(b, 1), result_type, r, op1)) return r } @@ -7439,7 +7439,7 @@ inst_OpConvertSamplerToUNV :: #force_inline proc "contextless" (buf: []Operand, convert_sampler_to_unv :: proc(b: ^Builder, result_type: Type_Ref, op1: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpConvertSamplerToUNV(opbuf(b, 1), result_type, r, op1)) + append_elem(&b.ops, inst_OpConvertSamplerToUNV(opbuf(b, 1), result_type, r, op1)) return r } @@ -7451,7 +7451,7 @@ inst_OpConvertUToSampledImageNV :: #force_inline proc "contextless" (buf: []Oper convert_u_to_sampled_image_nv :: proc(b: ^Builder, result_type: Type_Ref, op1: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpConvertUToSampledImageNV(opbuf(b, 1), result_type, r, op1)) + append_elem(&b.ops, inst_OpConvertUToSampledImageNV(opbuf(b, 1), result_type, r, op1)) return r } @@ -7463,7 +7463,7 @@ inst_OpConvertSampledImageToUNV :: #force_inline proc "contextless" (buf: []Oper convert_sampled_image_to_unv :: proc(b: ^Builder, result_type: Type_Ref, op1: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpConvertSampledImageToUNV(opbuf(b, 1), result_type, r, op1)) + append_elem(&b.ops, inst_OpConvertSampledImageToUNV(opbuf(b, 1), result_type, r, op1)) return r } @@ -7474,7 +7474,7 @@ inst_OpSamplerImageAddressingModeNV :: #force_inline proc "contextless" (buf: [] } sampler_image_addressing_mode_nv :: proc(b: ^Builder, op1: i64) { - append(&b.ops, inst_OpSamplerImageAddressingModeNV(opbuf(b, 1), op1)) + append_elem(&b.ops, inst_OpSamplerImageAddressingModeNV(opbuf(b, 1), op1)) } inst_OpRawAccessChainNV :: #force_inline proc "contextless" (buf: []Operand, result_type: Type_Ref, result: Id, op1: Id, op2: Id, op3: Id, op4: Id, op5: Maybe(Raw_Access_Chain_Operands)) -> Operation { @@ -7489,7 +7489,7 @@ inst_OpRawAccessChainNV :: #force_inline proc "contextless" (buf: []Operand, res raw_access_chain_nv :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Id, op3: Id, op4: Id, op5: Maybe(Raw_Access_Chain_Operands)) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpRawAccessChainNV(opbuf(b, 1 + 1 + 1 + 1 + 1), result_type, r, op1, op2, op3, op4, op5)) + append_elem(&b.ops, inst_OpRawAccessChainNV(opbuf(b, 1 + 1 + 1 + 1 + 1), result_type, r, op1, op2, op3, op4, op5)) return r } @@ -7502,7 +7502,7 @@ inst_OpRayQueryGetIntersectionSpherePositionNV :: #force_inline proc "contextles ray_query_get_intersection_sphere_position_nv :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpRayQueryGetIntersectionSpherePositionNV(opbuf(b, 1 + 1), result_type, r, op1, op2)) + append_elem(&b.ops, inst_OpRayQueryGetIntersectionSpherePositionNV(opbuf(b, 1 + 1), result_type, r, op1, op2)) return r } @@ -7515,7 +7515,7 @@ inst_OpRayQueryGetIntersectionSphereRadiusNV :: #force_inline proc "contextless" ray_query_get_intersection_sphere_radius_nv :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpRayQueryGetIntersectionSphereRadiusNV(opbuf(b, 1 + 1), result_type, r, op1, op2)) + append_elem(&b.ops, inst_OpRayQueryGetIntersectionSphereRadiusNV(opbuf(b, 1 + 1), result_type, r, op1, op2)) return r } @@ -7528,7 +7528,7 @@ inst_OpRayQueryGetIntersectionLSSPositionsNV :: #force_inline proc "contextless" ray_query_get_intersection_lss_positions_nv :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpRayQueryGetIntersectionLSSPositionsNV(opbuf(b, 1 + 1), result_type, r, op1, op2)) + append_elem(&b.ops, inst_OpRayQueryGetIntersectionLSSPositionsNV(opbuf(b, 1 + 1), result_type, r, op1, op2)) return r } @@ -7541,7 +7541,7 @@ inst_OpRayQueryGetIntersectionLSSRadiiNV :: #force_inline proc "contextless" (bu ray_query_get_intersection_lss_radii_nv :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpRayQueryGetIntersectionLSSRadiiNV(opbuf(b, 1 + 1), result_type, r, op1, op2)) + append_elem(&b.ops, inst_OpRayQueryGetIntersectionLSSRadiiNV(opbuf(b, 1 + 1), result_type, r, op1, op2)) return r } @@ -7554,7 +7554,7 @@ inst_OpRayQueryGetIntersectionLSSHitValueNV :: #force_inline proc "contextless" ray_query_get_intersection_lss_hit_value_nv :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpRayQueryGetIntersectionLSSHitValueNV(opbuf(b, 1 + 1), result_type, r, op1, op2)) + append_elem(&b.ops, inst_OpRayQueryGetIntersectionLSSHitValueNV(opbuf(b, 1 + 1), result_type, r, op1, op2)) return r } @@ -7566,7 +7566,7 @@ inst_OpHitObjectGetSpherePositionNV :: #force_inline proc "contextless" (buf: [] hit_object_get_sphere_position_nv :: proc(b: ^Builder, result_type: Type_Ref, op1: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpHitObjectGetSpherePositionNV(opbuf(b, 1), result_type, r, op1)) + append_elem(&b.ops, inst_OpHitObjectGetSpherePositionNV(opbuf(b, 1), result_type, r, op1)) return r } @@ -7578,7 +7578,7 @@ inst_OpHitObjectGetSphereRadiusNV :: #force_inline proc "contextless" (buf: []Op hit_object_get_sphere_radius_nv :: proc(b: ^Builder, result_type: Type_Ref, op1: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpHitObjectGetSphereRadiusNV(opbuf(b, 1), result_type, r, op1)) + append_elem(&b.ops, inst_OpHitObjectGetSphereRadiusNV(opbuf(b, 1), result_type, r, op1)) return r } @@ -7590,7 +7590,7 @@ inst_OpHitObjectGetLSSPositionsNV :: #force_inline proc "contextless" (buf: []Op hit_object_get_lss_positions_nv :: proc(b: ^Builder, result_type: Type_Ref, op1: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpHitObjectGetLSSPositionsNV(opbuf(b, 1), result_type, r, op1)) + append_elem(&b.ops, inst_OpHitObjectGetLSSPositionsNV(opbuf(b, 1), result_type, r, op1)) return r } @@ -7602,7 +7602,7 @@ inst_OpHitObjectGetLSSRadiiNV :: #force_inline proc "contextless" (buf: []Operan hit_object_get_lss_radii_nv :: proc(b: ^Builder, result_type: Type_Ref, op1: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpHitObjectGetLSSRadiiNV(opbuf(b, 1), result_type, r, op1)) + append_elem(&b.ops, inst_OpHitObjectGetLSSRadiiNV(opbuf(b, 1), result_type, r, op1)) return r } @@ -7614,7 +7614,7 @@ inst_OpHitObjectIsSphereHitNV :: #force_inline proc "contextless" (buf: []Operan hit_object_is_sphere_hit_nv :: proc(b: ^Builder, result_type: Type_Ref, op1: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpHitObjectIsSphereHitNV(opbuf(b, 1), result_type, r, op1)) + append_elem(&b.ops, inst_OpHitObjectIsSphereHitNV(opbuf(b, 1), result_type, r, op1)) return r } @@ -7626,7 +7626,7 @@ inst_OpHitObjectIsLSSHitNV :: #force_inline proc "contextless" (buf: []Operand, hit_object_is_lss_hit_nv :: proc(b: ^Builder, result_type: Type_Ref, op1: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpHitObjectIsLSSHitNV(opbuf(b, 1), result_type, r, op1)) + append_elem(&b.ops, inst_OpHitObjectIsLSSHitNV(opbuf(b, 1), result_type, r, op1)) return r } @@ -7639,7 +7639,7 @@ inst_OpRayQueryIsSphereHitNV :: #force_inline proc "contextless" (buf: []Operand ray_query_is_sphere_hit_nv :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpRayQueryIsSphereHitNV(opbuf(b, 1 + 1), result_type, r, op1, op2)) + append_elem(&b.ops, inst_OpRayQueryIsSphereHitNV(opbuf(b, 1 + 1), result_type, r, op1, op2)) return r } @@ -7652,7 +7652,7 @@ inst_OpRayQueryIsLSSHitNV :: #force_inline proc "contextless" (buf: []Operand, r ray_query_is_lss_hit_nv :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpRayQueryIsLSSHitNV(opbuf(b, 1 + 1), result_type, r, op1, op2)) + append_elem(&b.ops, inst_OpRayQueryIsLSSHitNV(opbuf(b, 1 + 1), result_type, r, op1, op2)) return r } @@ -7665,7 +7665,7 @@ inst_OpSubgroupShuffleINTEL :: #force_inline proc "contextless" (buf: []Operand, subgroup_shuffle_intel :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpSubgroupShuffleINTEL(opbuf(b, 1 + 1), result_type, r, op1, op2)) + append_elem(&b.ops, inst_OpSubgroupShuffleINTEL(opbuf(b, 1 + 1), result_type, r, op1, op2)) return r } @@ -7679,7 +7679,7 @@ inst_OpSubgroupShuffleDownINTEL :: #force_inline proc "contextless" (buf: []Oper subgroup_shuffle_down_intel :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Id, op3: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpSubgroupShuffleDownINTEL(opbuf(b, 1 + 1 + 1), result_type, r, op1, op2, op3)) + append_elem(&b.ops, inst_OpSubgroupShuffleDownINTEL(opbuf(b, 1 + 1 + 1), result_type, r, op1, op2, op3)) return r } @@ -7693,7 +7693,7 @@ inst_OpSubgroupShuffleUpINTEL :: #force_inline proc "contextless" (buf: []Operan subgroup_shuffle_up_intel :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Id, op3: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpSubgroupShuffleUpINTEL(opbuf(b, 1 + 1 + 1), result_type, r, op1, op2, op3)) + append_elem(&b.ops, inst_OpSubgroupShuffleUpINTEL(opbuf(b, 1 + 1 + 1), result_type, r, op1, op2, op3)) return r } @@ -7706,7 +7706,7 @@ inst_OpSubgroupShuffleXorINTEL :: #force_inline proc "contextless" (buf: []Opera subgroup_shuffle_xor_intel :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpSubgroupShuffleXorINTEL(opbuf(b, 1 + 1), result_type, r, op1, op2)) + append_elem(&b.ops, inst_OpSubgroupShuffleXorINTEL(opbuf(b, 1 + 1), result_type, r, op1, op2)) return r } @@ -7718,7 +7718,7 @@ inst_OpSubgroupBlockReadINTEL :: #force_inline proc "contextless" (buf: []Operan subgroup_block_read_intel :: proc(b: ^Builder, result_type: Type_Ref, op1: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpSubgroupBlockReadINTEL(opbuf(b, 1), result_type, r, op1)) + append_elem(&b.ops, inst_OpSubgroupBlockReadINTEL(opbuf(b, 1), result_type, r, op1)) return r } @@ -7730,7 +7730,7 @@ inst_OpSubgroupBlockWriteINTEL :: #force_inline proc "contextless" (buf: []Opera } subgroup_block_write_intel :: proc(b: ^Builder, op1: Id, op2: Id) { - append(&b.ops, inst_OpSubgroupBlockWriteINTEL(opbuf(b, 1 + 1), op1, op2)) + append_elem(&b.ops, inst_OpSubgroupBlockWriteINTEL(opbuf(b, 1 + 1), op1, op2)) } inst_OpSubgroupImageBlockReadINTEL :: #force_inline proc "contextless" (buf: []Operand, result_type: Type_Ref, result: Id, op1: Id, op2: Id) -> Operation { @@ -7742,7 +7742,7 @@ inst_OpSubgroupImageBlockReadINTEL :: #force_inline proc "contextless" (buf: []O subgroup_image_block_read_intel :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpSubgroupImageBlockReadINTEL(opbuf(b, 1 + 1), result_type, r, op1, op2)) + append_elem(&b.ops, inst_OpSubgroupImageBlockReadINTEL(opbuf(b, 1 + 1), result_type, r, op1, op2)) return r } @@ -7755,7 +7755,7 @@ inst_OpSubgroupImageBlockWriteINTEL :: #force_inline proc "contextless" (buf: [] } subgroup_image_block_write_intel :: proc(b: ^Builder, op1: Id, op2: Id, op3: Id) { - append(&b.ops, inst_OpSubgroupImageBlockWriteINTEL(opbuf(b, 1 + 1 + 1), op1, op2, op3)) + append_elem(&b.ops, inst_OpSubgroupImageBlockWriteINTEL(opbuf(b, 1 + 1 + 1), op1, op2, op3)) } inst_OpSubgroupImageMediaBlockReadINTEL :: #force_inline proc "contextless" (buf: []Operand, result_type: Type_Ref, result: Id, op1: Id, op2: Id, op3: Id, op4: Id) -> Operation { @@ -7769,7 +7769,7 @@ inst_OpSubgroupImageMediaBlockReadINTEL :: #force_inline proc "contextless" (buf subgroup_image_media_block_read_intel :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Id, op3: Id, op4: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpSubgroupImageMediaBlockReadINTEL(opbuf(b, 1 + 1 + 1 + 1), result_type, r, op1, op2, op3, op4)) + append_elem(&b.ops, inst_OpSubgroupImageMediaBlockReadINTEL(opbuf(b, 1 + 1 + 1 + 1), result_type, r, op1, op2, op3, op4)) return r } @@ -7784,7 +7784,7 @@ inst_OpSubgroupImageMediaBlockWriteINTEL :: #force_inline proc "contextless" (bu } subgroup_image_media_block_write_intel :: proc(b: ^Builder, op1: Id, op2: Id, op3: Id, op4: Id, op5: Id) { - append(&b.ops, inst_OpSubgroupImageMediaBlockWriteINTEL(opbuf(b, 1 + 1 + 1 + 1 + 1), op1, op2, op3, op4, op5)) + append_elem(&b.ops, inst_OpSubgroupImageMediaBlockWriteINTEL(opbuf(b, 1 + 1 + 1 + 1 + 1), op1, op2, op3, op4, op5)) } inst_OpUCountLeadingZerosINTEL :: #force_inline proc "contextless" (buf: []Operand, result_type: Type_Ref, result: Id, op1: Id) -> Operation { @@ -7795,7 +7795,7 @@ inst_OpUCountLeadingZerosINTEL :: #force_inline proc "contextless" (buf: []Opera u_count_leading_zeros_intel :: proc(b: ^Builder, result_type: Type_Ref, op1: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpUCountLeadingZerosINTEL(opbuf(b, 1), result_type, r, op1)) + append_elem(&b.ops, inst_OpUCountLeadingZerosINTEL(opbuf(b, 1), result_type, r, op1)) return r } @@ -7807,7 +7807,7 @@ inst_OpUCountTrailingZerosINTEL :: #force_inline proc "contextless" (buf: []Oper u_count_trailing_zeros_intel :: proc(b: ^Builder, result_type: Type_Ref, op1: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpUCountTrailingZerosINTEL(opbuf(b, 1), result_type, r, op1)) + append_elem(&b.ops, inst_OpUCountTrailingZerosINTEL(opbuf(b, 1), result_type, r, op1)) return r } @@ -7820,7 +7820,7 @@ inst_OpAbsISubINTEL :: #force_inline proc "contextless" (buf: []Operand, result_ abs_i_sub_intel :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpAbsISubINTEL(opbuf(b, 1 + 1), result_type, r, op1, op2)) + append_elem(&b.ops, inst_OpAbsISubINTEL(opbuf(b, 1 + 1), result_type, r, op1, op2)) return r } @@ -7833,7 +7833,7 @@ inst_OpAbsUSubINTEL :: #force_inline proc "contextless" (buf: []Operand, result_ abs_u_sub_intel :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpAbsUSubINTEL(opbuf(b, 1 + 1), result_type, r, op1, op2)) + append_elem(&b.ops, inst_OpAbsUSubINTEL(opbuf(b, 1 + 1), result_type, r, op1, op2)) return r } @@ -7846,7 +7846,7 @@ inst_OpIAddSatINTEL :: #force_inline proc "contextless" (buf: []Operand, result_ i_add_sat_intel :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpIAddSatINTEL(opbuf(b, 1 + 1), result_type, r, op1, op2)) + append_elem(&b.ops, inst_OpIAddSatINTEL(opbuf(b, 1 + 1), result_type, r, op1, op2)) return r } @@ -7859,7 +7859,7 @@ inst_OpUAddSatINTEL :: #force_inline proc "contextless" (buf: []Operand, result_ u_add_sat_intel :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpUAddSatINTEL(opbuf(b, 1 + 1), result_type, r, op1, op2)) + append_elem(&b.ops, inst_OpUAddSatINTEL(opbuf(b, 1 + 1), result_type, r, op1, op2)) return r } @@ -7872,7 +7872,7 @@ inst_OpIAverageINTEL :: #force_inline proc "contextless" (buf: []Operand, result i_average_intel :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpIAverageINTEL(opbuf(b, 1 + 1), result_type, r, op1, op2)) + append_elem(&b.ops, inst_OpIAverageINTEL(opbuf(b, 1 + 1), result_type, r, op1, op2)) return r } @@ -7885,7 +7885,7 @@ inst_OpUAverageINTEL :: #force_inline proc "contextless" (buf: []Operand, result u_average_intel :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpUAverageINTEL(opbuf(b, 1 + 1), result_type, r, op1, op2)) + append_elem(&b.ops, inst_OpUAverageINTEL(opbuf(b, 1 + 1), result_type, r, op1, op2)) return r } @@ -7898,7 +7898,7 @@ inst_OpIAverageRoundedINTEL :: #force_inline proc "contextless" (buf: []Operand, i_average_rounded_intel :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpIAverageRoundedINTEL(opbuf(b, 1 + 1), result_type, r, op1, op2)) + append_elem(&b.ops, inst_OpIAverageRoundedINTEL(opbuf(b, 1 + 1), result_type, r, op1, op2)) return r } @@ -7911,7 +7911,7 @@ inst_OpUAverageRoundedINTEL :: #force_inline proc "contextless" (buf: []Operand, u_average_rounded_intel :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpUAverageRoundedINTEL(opbuf(b, 1 + 1), result_type, r, op1, op2)) + append_elem(&b.ops, inst_OpUAverageRoundedINTEL(opbuf(b, 1 + 1), result_type, r, op1, op2)) return r } @@ -7924,7 +7924,7 @@ inst_OpISubSatINTEL :: #force_inline proc "contextless" (buf: []Operand, result_ i_sub_sat_intel :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpISubSatINTEL(opbuf(b, 1 + 1), result_type, r, op1, op2)) + append_elem(&b.ops, inst_OpISubSatINTEL(opbuf(b, 1 + 1), result_type, r, op1, op2)) return r } @@ -7937,7 +7937,7 @@ inst_OpUSubSatINTEL :: #force_inline proc "contextless" (buf: []Operand, result_ u_sub_sat_intel :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpUSubSatINTEL(opbuf(b, 1 + 1), result_type, r, op1, op2)) + append_elem(&b.ops, inst_OpUSubSatINTEL(opbuf(b, 1 + 1), result_type, r, op1, op2)) return r } @@ -7950,7 +7950,7 @@ inst_OpIMul32x16INTEL :: #force_inline proc "contextless" (buf: []Operand, resul i_mul32x16_intel :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpIMul32x16INTEL(opbuf(b, 1 + 1), result_type, r, op1, op2)) + append_elem(&b.ops, inst_OpIMul32x16INTEL(opbuf(b, 1 + 1), result_type, r, op1, op2)) return r } @@ -7963,7 +7963,7 @@ inst_OpUMul32x16INTEL :: #force_inline proc "contextless" (buf: []Operand, resul u_mul32x16_intel :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpUMul32x16INTEL(opbuf(b, 1 + 1), result_type, r, op1, op2)) + append_elem(&b.ops, inst_OpUMul32x16INTEL(opbuf(b, 1 + 1), result_type, r, op1, op2)) return r } @@ -7975,7 +7975,7 @@ inst_OpConstantFunctionPointerINTEL :: #force_inline proc "contextless" (buf: [] constant_function_pointer_intel :: proc(b: ^Builder, result_type: Type_Ref, op1: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpConstantFunctionPointerINTEL(opbuf(b, 1), result_type, r, op1)) + append_elem(&b.ops, inst_OpConstantFunctionPointerINTEL(opbuf(b, 1), result_type, r, op1)) return r } @@ -7987,7 +7987,7 @@ inst_OpFunctionPointerCallINTEL :: #force_inline proc "contextless" (buf: []Oper function_pointer_call_intel :: proc(b: ^Builder, result_type: Type_Ref, op1: []Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpFunctionPointerCallINTEL(opbuf(b, len(op1)), result_type, r, op1)) + append_elem(&b.ops, inst_OpFunctionPointerCallINTEL(opbuf(b, len(op1)), result_type, r, op1)) return r } @@ -7999,7 +7999,7 @@ inst_OpAsmTargetINTEL :: #force_inline proc "contextless" (buf: []Operand, resul asm_target_intel :: proc(b: ^Builder, op1: string) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpAsmTargetINTEL(opbuf(b, (len(op1) + 4) / 4), r, op1)) + append_elem(&b.ops, inst_OpAsmTargetINTEL(opbuf(b, (len(op1) + 4) / 4), r, op1)) return r } @@ -8014,7 +8014,7 @@ inst_OpAsmINTEL :: #force_inline proc "contextless" (buf: []Operand, result_type asm_intel :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Id, op3: string, op4: string) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpAsmINTEL(opbuf(b, 1 + 1 + (len(op3) + 4) / 4 + (len(op4) + 4) / 4), result_type, r, op1, op2, op3, op4)) + append_elem(&b.ops, inst_OpAsmINTEL(opbuf(b, 1 + 1 + (len(op3) + 4) / 4 + (len(op4) + 4) / 4), result_type, r, op1, op2, op3, op4)) return r } @@ -8027,7 +8027,7 @@ inst_OpAsmCallINTEL :: #force_inline proc "contextless" (buf: []Operand, result_ asm_call_intel :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: []Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpAsmCallINTEL(opbuf(b, 1 + len(op2)), result_type, r, op1, op2)) + append_elem(&b.ops, inst_OpAsmCallINTEL(opbuf(b, 1 + len(op2)), result_type, r, op1, op2)) return r } @@ -8042,7 +8042,7 @@ inst_OpAtomicFMinEXT :: #force_inline proc "contextless" (buf: []Operand, result atomic_f_min_ext :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Id, op3: Id, op4: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpAtomicFMinEXT(opbuf(b, 1 + 1 + 1 + 1), result_type, r, op1, op2, op3, op4)) + append_elem(&b.ops, inst_OpAtomicFMinEXT(opbuf(b, 1 + 1 + 1 + 1), result_type, r, op1, op2, op3, op4)) return r } @@ -8057,7 +8057,7 @@ inst_OpAtomicFMaxEXT :: #force_inline proc "contextless" (buf: []Operand, result atomic_f_max_ext :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Id, op3: Id, op4: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpAtomicFMaxEXT(opbuf(b, 1 + 1 + 1 + 1), result_type, r, op1, op2, op3, op4)) + append_elem(&b.ops, inst_OpAtomicFMaxEXT(opbuf(b, 1 + 1 + 1 + 1), result_type, r, op1, op2, op3, op4)) return r } @@ -8068,7 +8068,7 @@ inst_OpAssumeTrueKHR :: #force_inline proc "contextless" (buf: []Operand, op1: I } assume_true_khr :: proc(b: ^Builder, op1: Id) { - append(&b.ops, inst_OpAssumeTrueKHR(opbuf(b, 1), op1)) + append_elem(&b.ops, inst_OpAssumeTrueKHR(opbuf(b, 1), op1)) } inst_OpExpectKHR :: #force_inline proc "contextless" (buf: []Operand, result_type: Type_Ref, result: Id, op1: Id, op2: Id) -> Operation { @@ -8080,7 +8080,7 @@ inst_OpExpectKHR :: #force_inline proc "contextless" (buf: []Operand, result_typ expect_khr :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpExpectKHR(opbuf(b, 1 + 1), result_type, r, op1, op2)) + append_elem(&b.ops, inst_OpExpectKHR(opbuf(b, 1 + 1), result_type, r, op1, op2)) return r } @@ -8092,7 +8092,7 @@ inst_OpDecorateString :: #force_inline proc "contextless" (buf: []Operand, op1: } decorate_string :: proc(b: ^Builder, op1: Id, op2: Decoration) { - append(&b.ops, inst_OpDecorateString(opbuf(b, 1 + 1), op1, op2)) + append_elem(&b.ops, inst_OpDecorateString(opbuf(b, 1 + 1), op1, op2)) } inst_OpMemberDecorateString :: #force_inline proc "contextless" (buf: []Operand, op1: Id, op2: i64, op3: Decoration) -> Operation { @@ -8104,7 +8104,7 @@ inst_OpMemberDecorateString :: #force_inline proc "contextless" (buf: []Operand, } member_decorate_string :: proc(b: ^Builder, op1: Id, op2: i64, op3: Decoration) { - append(&b.ops, inst_OpMemberDecorateString(opbuf(b, 1 + 1 + 1), op1, op2, op3)) + append_elem(&b.ops, inst_OpMemberDecorateString(opbuf(b, 1 + 1 + 1), op1, op2, op3)) } inst_OpVmeImageINTEL :: #force_inline proc "contextless" (buf: []Operand, result_type: Type_Ref, result: Id, op1: Id, op2: Id) -> Operation { @@ -8116,7 +8116,7 @@ inst_OpVmeImageINTEL :: #force_inline proc "contextless" (buf: []Operand, result vme_image_intel :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpVmeImageINTEL(opbuf(b, 1 + 1), result_type, r, op1, op2)) + append_elem(&b.ops, inst_OpVmeImageINTEL(opbuf(b, 1 + 1), result_type, r, op1, op2)) return r } @@ -8128,7 +8128,7 @@ inst_OpTypeVmeImageINTEL :: #force_inline proc "contextless" (buf: []Operand, re type_vme_image_intel :: proc(b: ^Builder, op1: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpTypeVmeImageINTEL(opbuf(b, 1), r, op1)) + append_elem(&b.ops, inst_OpTypeVmeImageINTEL(opbuf(b, 1), r, op1)) return r } @@ -8138,7 +8138,7 @@ inst_OpTypeAvcImePayloadINTEL :: #force_inline proc "contextless" (result: Id) - type_avc_ime_payload_intel :: proc(b: ^Builder) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpTypeAvcImePayloadINTEL(r)) + append_elem(&b.ops, inst_OpTypeAvcImePayloadINTEL(r)) return r } @@ -8148,7 +8148,7 @@ inst_OpTypeAvcRefPayloadINTEL :: #force_inline proc "contextless" (result: Id) - type_avc_ref_payload_intel :: proc(b: ^Builder) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpTypeAvcRefPayloadINTEL(r)) + append_elem(&b.ops, inst_OpTypeAvcRefPayloadINTEL(r)) return r } @@ -8158,7 +8158,7 @@ inst_OpTypeAvcSicPayloadINTEL :: #force_inline proc "contextless" (result: Id) - type_avc_sic_payload_intel :: proc(b: ^Builder) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpTypeAvcSicPayloadINTEL(r)) + append_elem(&b.ops, inst_OpTypeAvcSicPayloadINTEL(r)) return r } @@ -8168,7 +8168,7 @@ inst_OpTypeAvcMcePayloadINTEL :: #force_inline proc "contextless" (result: Id) - type_avc_mce_payload_intel :: proc(b: ^Builder) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpTypeAvcMcePayloadINTEL(r)) + append_elem(&b.ops, inst_OpTypeAvcMcePayloadINTEL(r)) return r } @@ -8178,7 +8178,7 @@ inst_OpTypeAvcMceResultINTEL :: #force_inline proc "contextless" (result: Id) -> type_avc_mce_result_intel :: proc(b: ^Builder) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpTypeAvcMceResultINTEL(r)) + append_elem(&b.ops, inst_OpTypeAvcMceResultINTEL(r)) return r } @@ -8188,7 +8188,7 @@ inst_OpTypeAvcImeResultINTEL :: #force_inline proc "contextless" (result: Id) -> type_avc_ime_result_intel :: proc(b: ^Builder) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpTypeAvcImeResultINTEL(r)) + append_elem(&b.ops, inst_OpTypeAvcImeResultINTEL(r)) return r } @@ -8198,7 +8198,7 @@ inst_OpTypeAvcImeResultSingleReferenceStreamoutINTEL :: #force_inline proc "cont type_avc_ime_result_single_reference_streamout_intel :: proc(b: ^Builder) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpTypeAvcImeResultSingleReferenceStreamoutINTEL(r)) + append_elem(&b.ops, inst_OpTypeAvcImeResultSingleReferenceStreamoutINTEL(r)) return r } @@ -8208,7 +8208,7 @@ inst_OpTypeAvcImeResultDualReferenceStreamoutINTEL :: #force_inline proc "contex type_avc_ime_result_dual_reference_streamout_intel :: proc(b: ^Builder) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpTypeAvcImeResultDualReferenceStreamoutINTEL(r)) + append_elem(&b.ops, inst_OpTypeAvcImeResultDualReferenceStreamoutINTEL(r)) return r } @@ -8218,7 +8218,7 @@ inst_OpTypeAvcImeSingleReferenceStreaminINTEL :: #force_inline proc "contextless type_avc_ime_single_reference_streamin_intel :: proc(b: ^Builder) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpTypeAvcImeSingleReferenceStreaminINTEL(r)) + append_elem(&b.ops, inst_OpTypeAvcImeSingleReferenceStreaminINTEL(r)) return r } @@ -8228,7 +8228,7 @@ inst_OpTypeAvcImeDualReferenceStreaminINTEL :: #force_inline proc "contextless" type_avc_ime_dual_reference_streamin_intel :: proc(b: ^Builder) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpTypeAvcImeDualReferenceStreaminINTEL(r)) + append_elem(&b.ops, inst_OpTypeAvcImeDualReferenceStreaminINTEL(r)) return r } @@ -8238,7 +8238,7 @@ inst_OpTypeAvcRefResultINTEL :: #force_inline proc "contextless" (result: Id) -> type_avc_ref_result_intel :: proc(b: ^Builder) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpTypeAvcRefResultINTEL(r)) + append_elem(&b.ops, inst_OpTypeAvcRefResultINTEL(r)) return r } @@ -8248,7 +8248,7 @@ inst_OpTypeAvcSicResultINTEL :: #force_inline proc "contextless" (result: Id) -> type_avc_sic_result_intel :: proc(b: ^Builder) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpTypeAvcSicResultINTEL(r)) + append_elem(&b.ops, inst_OpTypeAvcSicResultINTEL(r)) return r } @@ -8261,7 +8261,7 @@ inst_OpSubgroupAvcMceGetDefaultInterBaseMultiReferencePenaltyINTEL :: #force_inl subgroup_avc_mce_get_default_inter_base_multi_reference_penalty_intel :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpSubgroupAvcMceGetDefaultInterBaseMultiReferencePenaltyINTEL(opbuf(b, 1 + 1), result_type, r, op1, op2)) + append_elem(&b.ops, inst_OpSubgroupAvcMceGetDefaultInterBaseMultiReferencePenaltyINTEL(opbuf(b, 1 + 1), result_type, r, op1, op2)) return r } @@ -8274,7 +8274,7 @@ inst_OpSubgroupAvcMceSetInterBaseMultiReferencePenaltyINTEL :: #force_inline pro subgroup_avc_mce_set_inter_base_multi_reference_penalty_intel :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpSubgroupAvcMceSetInterBaseMultiReferencePenaltyINTEL(opbuf(b, 1 + 1), result_type, r, op1, op2)) + append_elem(&b.ops, inst_OpSubgroupAvcMceSetInterBaseMultiReferencePenaltyINTEL(opbuf(b, 1 + 1), result_type, r, op1, op2)) return r } @@ -8287,7 +8287,7 @@ inst_OpSubgroupAvcMceGetDefaultInterShapePenaltyINTEL :: #force_inline proc "con subgroup_avc_mce_get_default_inter_shape_penalty_intel :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpSubgroupAvcMceGetDefaultInterShapePenaltyINTEL(opbuf(b, 1 + 1), result_type, r, op1, op2)) + append_elem(&b.ops, inst_OpSubgroupAvcMceGetDefaultInterShapePenaltyINTEL(opbuf(b, 1 + 1), result_type, r, op1, op2)) return r } @@ -8300,7 +8300,7 @@ inst_OpSubgroupAvcMceSetInterShapePenaltyINTEL :: #force_inline proc "contextles subgroup_avc_mce_set_inter_shape_penalty_intel :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpSubgroupAvcMceSetInterShapePenaltyINTEL(opbuf(b, 1 + 1), result_type, r, op1, op2)) + append_elem(&b.ops, inst_OpSubgroupAvcMceSetInterShapePenaltyINTEL(opbuf(b, 1 + 1), result_type, r, op1, op2)) return r } @@ -8313,7 +8313,7 @@ inst_OpSubgroupAvcMceGetDefaultInterDirectionPenaltyINTEL :: #force_inline proc subgroup_avc_mce_get_default_inter_direction_penalty_intel :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpSubgroupAvcMceGetDefaultInterDirectionPenaltyINTEL(opbuf(b, 1 + 1), result_type, r, op1, op2)) + append_elem(&b.ops, inst_OpSubgroupAvcMceGetDefaultInterDirectionPenaltyINTEL(opbuf(b, 1 + 1), result_type, r, op1, op2)) return r } @@ -8326,7 +8326,7 @@ inst_OpSubgroupAvcMceSetInterDirectionPenaltyINTEL :: #force_inline proc "contex subgroup_avc_mce_set_inter_direction_penalty_intel :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpSubgroupAvcMceSetInterDirectionPenaltyINTEL(opbuf(b, 1 + 1), result_type, r, op1, op2)) + append_elem(&b.ops, inst_OpSubgroupAvcMceSetInterDirectionPenaltyINTEL(opbuf(b, 1 + 1), result_type, r, op1, op2)) return r } @@ -8339,7 +8339,7 @@ inst_OpSubgroupAvcMceGetDefaultIntraLumaShapePenaltyINTEL :: #force_inline proc subgroup_avc_mce_get_default_intra_luma_shape_penalty_intel :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpSubgroupAvcMceGetDefaultIntraLumaShapePenaltyINTEL(opbuf(b, 1 + 1), result_type, r, op1, op2)) + append_elem(&b.ops, inst_OpSubgroupAvcMceGetDefaultIntraLumaShapePenaltyINTEL(opbuf(b, 1 + 1), result_type, r, op1, op2)) return r } @@ -8352,7 +8352,7 @@ inst_OpSubgroupAvcMceGetDefaultInterMotionVectorCostTableINTEL :: #force_inline subgroup_avc_mce_get_default_inter_motion_vector_cost_table_intel :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpSubgroupAvcMceGetDefaultInterMotionVectorCostTableINTEL(opbuf(b, 1 + 1), result_type, r, op1, op2)) + append_elem(&b.ops, inst_OpSubgroupAvcMceGetDefaultInterMotionVectorCostTableINTEL(opbuf(b, 1 + 1), result_type, r, op1, op2)) return r } @@ -8362,7 +8362,7 @@ inst_OpSubgroupAvcMceGetDefaultHighPenaltyCostTableINTEL :: #force_inline proc " subgroup_avc_mce_get_default_high_penalty_cost_table_intel :: proc(b: ^Builder, result_type: Type_Ref) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpSubgroupAvcMceGetDefaultHighPenaltyCostTableINTEL(result_type, r)) + append_elem(&b.ops, inst_OpSubgroupAvcMceGetDefaultHighPenaltyCostTableINTEL(result_type, r)) return r } @@ -8372,7 +8372,7 @@ inst_OpSubgroupAvcMceGetDefaultMediumPenaltyCostTableINTEL :: #force_inline proc subgroup_avc_mce_get_default_medium_penalty_cost_table_intel :: proc(b: ^Builder, result_type: Type_Ref) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpSubgroupAvcMceGetDefaultMediumPenaltyCostTableINTEL(result_type, r)) + append_elem(&b.ops, inst_OpSubgroupAvcMceGetDefaultMediumPenaltyCostTableINTEL(result_type, r)) return r } @@ -8382,7 +8382,7 @@ inst_OpSubgroupAvcMceGetDefaultLowPenaltyCostTableINTEL :: #force_inline proc "c subgroup_avc_mce_get_default_low_penalty_cost_table_intel :: proc(b: ^Builder, result_type: Type_Ref) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpSubgroupAvcMceGetDefaultLowPenaltyCostTableINTEL(result_type, r)) + append_elem(&b.ops, inst_OpSubgroupAvcMceGetDefaultLowPenaltyCostTableINTEL(result_type, r)) return r } @@ -8397,7 +8397,7 @@ inst_OpSubgroupAvcMceSetMotionVectorCostFunctionINTEL :: #force_inline proc "con subgroup_avc_mce_set_motion_vector_cost_function_intel :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Id, op3: Id, op4: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpSubgroupAvcMceSetMotionVectorCostFunctionINTEL(opbuf(b, 1 + 1 + 1 + 1), result_type, r, op1, op2, op3, op4)) + append_elem(&b.ops, inst_OpSubgroupAvcMceSetMotionVectorCostFunctionINTEL(opbuf(b, 1 + 1 + 1 + 1), result_type, r, op1, op2, op3, op4)) return r } @@ -8410,7 +8410,7 @@ inst_OpSubgroupAvcMceGetDefaultIntraLumaModePenaltyINTEL :: #force_inline proc " subgroup_avc_mce_get_default_intra_luma_mode_penalty_intel :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpSubgroupAvcMceGetDefaultIntraLumaModePenaltyINTEL(opbuf(b, 1 + 1), result_type, r, op1, op2)) + append_elem(&b.ops, inst_OpSubgroupAvcMceGetDefaultIntraLumaModePenaltyINTEL(opbuf(b, 1 + 1), result_type, r, op1, op2)) return r } @@ -8420,7 +8420,7 @@ inst_OpSubgroupAvcMceGetDefaultNonDcLumaIntraPenaltyINTEL :: #force_inline proc subgroup_avc_mce_get_default_non_dc_luma_intra_penalty_intel :: proc(b: ^Builder, result_type: Type_Ref) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpSubgroupAvcMceGetDefaultNonDcLumaIntraPenaltyINTEL(result_type, r)) + append_elem(&b.ops, inst_OpSubgroupAvcMceGetDefaultNonDcLumaIntraPenaltyINTEL(result_type, r)) return r } @@ -8430,7 +8430,7 @@ inst_OpSubgroupAvcMceGetDefaultIntraChromaModeBasePenaltyINTEL :: #force_inline subgroup_avc_mce_get_default_intra_chroma_mode_base_penalty_intel :: proc(b: ^Builder, result_type: Type_Ref) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpSubgroupAvcMceGetDefaultIntraChromaModeBasePenaltyINTEL(result_type, r)) + append_elem(&b.ops, inst_OpSubgroupAvcMceGetDefaultIntraChromaModeBasePenaltyINTEL(result_type, r)) return r } @@ -8442,7 +8442,7 @@ inst_OpSubgroupAvcMceSetAcOnlyHaarINTEL :: #force_inline proc "contextless" (buf subgroup_avc_mce_set_ac_only_haar_intel :: proc(b: ^Builder, result_type: Type_Ref, op1: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpSubgroupAvcMceSetAcOnlyHaarINTEL(opbuf(b, 1), result_type, r, op1)) + append_elem(&b.ops, inst_OpSubgroupAvcMceSetAcOnlyHaarINTEL(opbuf(b, 1), result_type, r, op1)) return r } @@ -8455,7 +8455,7 @@ inst_OpSubgroupAvcMceSetSourceInterlacedFieldPolarityINTEL :: #force_inline proc subgroup_avc_mce_set_source_interlaced_field_polarity_intel :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpSubgroupAvcMceSetSourceInterlacedFieldPolarityINTEL(opbuf(b, 1 + 1), result_type, r, op1, op2)) + append_elem(&b.ops, inst_OpSubgroupAvcMceSetSourceInterlacedFieldPolarityINTEL(opbuf(b, 1 + 1), result_type, r, op1, op2)) return r } @@ -8468,7 +8468,7 @@ inst_OpSubgroupAvcMceSetSingleReferenceInterlacedFieldPolarityINTEL :: #force_in subgroup_avc_mce_set_single_reference_interlaced_field_polarity_intel :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpSubgroupAvcMceSetSingleReferenceInterlacedFieldPolarityINTEL(opbuf(b, 1 + 1), result_type, r, op1, op2)) + append_elem(&b.ops, inst_OpSubgroupAvcMceSetSingleReferenceInterlacedFieldPolarityINTEL(opbuf(b, 1 + 1), result_type, r, op1, op2)) return r } @@ -8482,7 +8482,7 @@ inst_OpSubgroupAvcMceSetDualReferenceInterlacedFieldPolaritiesINTEL :: #force_in subgroup_avc_mce_set_dual_reference_interlaced_field_polarities_intel :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Id, op3: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpSubgroupAvcMceSetDualReferenceInterlacedFieldPolaritiesINTEL(opbuf(b, 1 + 1 + 1), result_type, r, op1, op2, op3)) + append_elem(&b.ops, inst_OpSubgroupAvcMceSetDualReferenceInterlacedFieldPolaritiesINTEL(opbuf(b, 1 + 1 + 1), result_type, r, op1, op2, op3)) return r } @@ -8494,7 +8494,7 @@ inst_OpSubgroupAvcMceConvertToImePayloadINTEL :: #force_inline proc "contextless subgroup_avc_mce_convert_to_ime_payload_intel :: proc(b: ^Builder, result_type: Type_Ref, op1: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpSubgroupAvcMceConvertToImePayloadINTEL(opbuf(b, 1), result_type, r, op1)) + append_elem(&b.ops, inst_OpSubgroupAvcMceConvertToImePayloadINTEL(opbuf(b, 1), result_type, r, op1)) return r } @@ -8506,7 +8506,7 @@ inst_OpSubgroupAvcMceConvertToImeResultINTEL :: #force_inline proc "contextless" subgroup_avc_mce_convert_to_ime_result_intel :: proc(b: ^Builder, result_type: Type_Ref, op1: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpSubgroupAvcMceConvertToImeResultINTEL(opbuf(b, 1), result_type, r, op1)) + append_elem(&b.ops, inst_OpSubgroupAvcMceConvertToImeResultINTEL(opbuf(b, 1), result_type, r, op1)) return r } @@ -8518,7 +8518,7 @@ inst_OpSubgroupAvcMceConvertToRefPayloadINTEL :: #force_inline proc "contextless subgroup_avc_mce_convert_to_ref_payload_intel :: proc(b: ^Builder, result_type: Type_Ref, op1: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpSubgroupAvcMceConvertToRefPayloadINTEL(opbuf(b, 1), result_type, r, op1)) + append_elem(&b.ops, inst_OpSubgroupAvcMceConvertToRefPayloadINTEL(opbuf(b, 1), result_type, r, op1)) return r } @@ -8530,7 +8530,7 @@ inst_OpSubgroupAvcMceConvertToRefResultINTEL :: #force_inline proc "contextless" subgroup_avc_mce_convert_to_ref_result_intel :: proc(b: ^Builder, result_type: Type_Ref, op1: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpSubgroupAvcMceConvertToRefResultINTEL(opbuf(b, 1), result_type, r, op1)) + append_elem(&b.ops, inst_OpSubgroupAvcMceConvertToRefResultINTEL(opbuf(b, 1), result_type, r, op1)) return r } @@ -8542,7 +8542,7 @@ inst_OpSubgroupAvcMceConvertToSicPayloadINTEL :: #force_inline proc "contextless subgroup_avc_mce_convert_to_sic_payload_intel :: proc(b: ^Builder, result_type: Type_Ref, op1: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpSubgroupAvcMceConvertToSicPayloadINTEL(opbuf(b, 1), result_type, r, op1)) + append_elem(&b.ops, inst_OpSubgroupAvcMceConvertToSicPayloadINTEL(opbuf(b, 1), result_type, r, op1)) return r } @@ -8554,7 +8554,7 @@ inst_OpSubgroupAvcMceConvertToSicResultINTEL :: #force_inline proc "contextless" subgroup_avc_mce_convert_to_sic_result_intel :: proc(b: ^Builder, result_type: Type_Ref, op1: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpSubgroupAvcMceConvertToSicResultINTEL(opbuf(b, 1), result_type, r, op1)) + append_elem(&b.ops, inst_OpSubgroupAvcMceConvertToSicResultINTEL(opbuf(b, 1), result_type, r, op1)) return r } @@ -8566,7 +8566,7 @@ inst_OpSubgroupAvcMceGetMotionVectorsINTEL :: #force_inline proc "contextless" ( subgroup_avc_mce_get_motion_vectors_intel :: proc(b: ^Builder, result_type: Type_Ref, op1: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpSubgroupAvcMceGetMotionVectorsINTEL(opbuf(b, 1), result_type, r, op1)) + append_elem(&b.ops, inst_OpSubgroupAvcMceGetMotionVectorsINTEL(opbuf(b, 1), result_type, r, op1)) return r } @@ -8578,7 +8578,7 @@ inst_OpSubgroupAvcMceGetInterDistortionsINTEL :: #force_inline proc "contextless subgroup_avc_mce_get_inter_distortions_intel :: proc(b: ^Builder, result_type: Type_Ref, op1: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpSubgroupAvcMceGetInterDistortionsINTEL(opbuf(b, 1), result_type, r, op1)) + append_elem(&b.ops, inst_OpSubgroupAvcMceGetInterDistortionsINTEL(opbuf(b, 1), result_type, r, op1)) return r } @@ -8590,7 +8590,7 @@ inst_OpSubgroupAvcMceGetBestInterDistortionsINTEL :: #force_inline proc "context subgroup_avc_mce_get_best_inter_distortions_intel :: proc(b: ^Builder, result_type: Type_Ref, op1: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpSubgroupAvcMceGetBestInterDistortionsINTEL(opbuf(b, 1), result_type, r, op1)) + append_elem(&b.ops, inst_OpSubgroupAvcMceGetBestInterDistortionsINTEL(opbuf(b, 1), result_type, r, op1)) return r } @@ -8602,7 +8602,7 @@ inst_OpSubgroupAvcMceGetInterMajorShapeINTEL :: #force_inline proc "contextless" subgroup_avc_mce_get_inter_major_shape_intel :: proc(b: ^Builder, result_type: Type_Ref, op1: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpSubgroupAvcMceGetInterMajorShapeINTEL(opbuf(b, 1), result_type, r, op1)) + append_elem(&b.ops, inst_OpSubgroupAvcMceGetInterMajorShapeINTEL(opbuf(b, 1), result_type, r, op1)) return r } @@ -8614,7 +8614,7 @@ inst_OpSubgroupAvcMceGetInterMinorShapeINTEL :: #force_inline proc "contextless" subgroup_avc_mce_get_inter_minor_shape_intel :: proc(b: ^Builder, result_type: Type_Ref, op1: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpSubgroupAvcMceGetInterMinorShapeINTEL(opbuf(b, 1), result_type, r, op1)) + append_elem(&b.ops, inst_OpSubgroupAvcMceGetInterMinorShapeINTEL(opbuf(b, 1), result_type, r, op1)) return r } @@ -8626,7 +8626,7 @@ inst_OpSubgroupAvcMceGetInterDirectionsINTEL :: #force_inline proc "contextless" subgroup_avc_mce_get_inter_directions_intel :: proc(b: ^Builder, result_type: Type_Ref, op1: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpSubgroupAvcMceGetInterDirectionsINTEL(opbuf(b, 1), result_type, r, op1)) + append_elem(&b.ops, inst_OpSubgroupAvcMceGetInterDirectionsINTEL(opbuf(b, 1), result_type, r, op1)) return r } @@ -8638,7 +8638,7 @@ inst_OpSubgroupAvcMceGetInterMotionVectorCountINTEL :: #force_inline proc "conte subgroup_avc_mce_get_inter_motion_vector_count_intel :: proc(b: ^Builder, result_type: Type_Ref, op1: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpSubgroupAvcMceGetInterMotionVectorCountINTEL(opbuf(b, 1), result_type, r, op1)) + append_elem(&b.ops, inst_OpSubgroupAvcMceGetInterMotionVectorCountINTEL(opbuf(b, 1), result_type, r, op1)) return r } @@ -8650,7 +8650,7 @@ inst_OpSubgroupAvcMceGetInterReferenceIdsINTEL :: #force_inline proc "contextles subgroup_avc_mce_get_inter_reference_ids_intel :: proc(b: ^Builder, result_type: Type_Ref, op1: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpSubgroupAvcMceGetInterReferenceIdsINTEL(opbuf(b, 1), result_type, r, op1)) + append_elem(&b.ops, inst_OpSubgroupAvcMceGetInterReferenceIdsINTEL(opbuf(b, 1), result_type, r, op1)) return r } @@ -8664,7 +8664,7 @@ inst_OpSubgroupAvcMceGetInterReferenceInterlacedFieldPolaritiesINTEL :: #force_i subgroup_avc_mce_get_inter_reference_interlaced_field_polarities_intel :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Id, op3: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpSubgroupAvcMceGetInterReferenceInterlacedFieldPolaritiesINTEL(opbuf(b, 1 + 1 + 1), result_type, r, op1, op2, op3)) + append_elem(&b.ops, inst_OpSubgroupAvcMceGetInterReferenceInterlacedFieldPolaritiesINTEL(opbuf(b, 1 + 1 + 1), result_type, r, op1, op2, op3)) return r } @@ -8678,7 +8678,7 @@ inst_OpSubgroupAvcImeInitializeINTEL :: #force_inline proc "contextless" (buf: [ subgroup_avc_ime_initialize_intel :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Id, op3: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpSubgroupAvcImeInitializeINTEL(opbuf(b, 1 + 1 + 1), result_type, r, op1, op2, op3)) + append_elem(&b.ops, inst_OpSubgroupAvcImeInitializeINTEL(opbuf(b, 1 + 1 + 1), result_type, r, op1, op2, op3)) return r } @@ -8692,7 +8692,7 @@ inst_OpSubgroupAvcImeSetSingleReferenceINTEL :: #force_inline proc "contextless" subgroup_avc_ime_set_single_reference_intel :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Id, op3: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpSubgroupAvcImeSetSingleReferenceINTEL(opbuf(b, 1 + 1 + 1), result_type, r, op1, op2, op3)) + append_elem(&b.ops, inst_OpSubgroupAvcImeSetSingleReferenceINTEL(opbuf(b, 1 + 1 + 1), result_type, r, op1, op2, op3)) return r } @@ -8707,7 +8707,7 @@ inst_OpSubgroupAvcImeSetDualReferenceINTEL :: #force_inline proc "contextless" ( subgroup_avc_ime_set_dual_reference_intel :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Id, op3: Id, op4: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpSubgroupAvcImeSetDualReferenceINTEL(opbuf(b, 1 + 1 + 1 + 1), result_type, r, op1, op2, op3, op4)) + append_elem(&b.ops, inst_OpSubgroupAvcImeSetDualReferenceINTEL(opbuf(b, 1 + 1 + 1 + 1), result_type, r, op1, op2, op3, op4)) return r } @@ -8720,7 +8720,7 @@ inst_OpSubgroupAvcImeRefWindowSizeINTEL :: #force_inline proc "contextless" (buf subgroup_avc_ime_ref_window_size_intel :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpSubgroupAvcImeRefWindowSizeINTEL(opbuf(b, 1 + 1), result_type, r, op1, op2)) + append_elem(&b.ops, inst_OpSubgroupAvcImeRefWindowSizeINTEL(opbuf(b, 1 + 1), result_type, r, op1, op2)) return r } @@ -8735,7 +8735,7 @@ inst_OpSubgroupAvcImeAdjustRefOffsetINTEL :: #force_inline proc "contextless" (b subgroup_avc_ime_adjust_ref_offset_intel :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Id, op3: Id, op4: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpSubgroupAvcImeAdjustRefOffsetINTEL(opbuf(b, 1 + 1 + 1 + 1), result_type, r, op1, op2, op3, op4)) + append_elem(&b.ops, inst_OpSubgroupAvcImeAdjustRefOffsetINTEL(opbuf(b, 1 + 1 + 1 + 1), result_type, r, op1, op2, op3, op4)) return r } @@ -8747,7 +8747,7 @@ inst_OpSubgroupAvcImeConvertToMcePayloadINTEL :: #force_inline proc "contextless subgroup_avc_ime_convert_to_mce_payload_intel :: proc(b: ^Builder, result_type: Type_Ref, op1: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpSubgroupAvcImeConvertToMcePayloadINTEL(opbuf(b, 1), result_type, r, op1)) + append_elem(&b.ops, inst_OpSubgroupAvcImeConvertToMcePayloadINTEL(opbuf(b, 1), result_type, r, op1)) return r } @@ -8760,7 +8760,7 @@ inst_OpSubgroupAvcImeSetMaxMotionVectorCountINTEL :: #force_inline proc "context subgroup_avc_ime_set_max_motion_vector_count_intel :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpSubgroupAvcImeSetMaxMotionVectorCountINTEL(opbuf(b, 1 + 1), result_type, r, op1, op2)) + append_elem(&b.ops, inst_OpSubgroupAvcImeSetMaxMotionVectorCountINTEL(opbuf(b, 1 + 1), result_type, r, op1, op2)) return r } @@ -8772,7 +8772,7 @@ inst_OpSubgroupAvcImeSetUnidirectionalMixDisableINTEL :: #force_inline proc "con subgroup_avc_ime_set_unidirectional_mix_disable_intel :: proc(b: ^Builder, result_type: Type_Ref, op1: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpSubgroupAvcImeSetUnidirectionalMixDisableINTEL(opbuf(b, 1), result_type, r, op1)) + append_elem(&b.ops, inst_OpSubgroupAvcImeSetUnidirectionalMixDisableINTEL(opbuf(b, 1), result_type, r, op1)) return r } @@ -8785,7 +8785,7 @@ inst_OpSubgroupAvcImeSetEarlySearchTerminationThresholdINTEL :: #force_inline pr subgroup_avc_ime_set_early_search_termination_threshold_intel :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpSubgroupAvcImeSetEarlySearchTerminationThresholdINTEL(opbuf(b, 1 + 1), result_type, r, op1, op2)) + append_elem(&b.ops, inst_OpSubgroupAvcImeSetEarlySearchTerminationThresholdINTEL(opbuf(b, 1 + 1), result_type, r, op1, op2)) return r } @@ -8798,7 +8798,7 @@ inst_OpSubgroupAvcImeSetWeightedSadINTEL :: #force_inline proc "contextless" (bu subgroup_avc_ime_set_weighted_sad_intel :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpSubgroupAvcImeSetWeightedSadINTEL(opbuf(b, 1 + 1), result_type, r, op1, op2)) + append_elem(&b.ops, inst_OpSubgroupAvcImeSetWeightedSadINTEL(opbuf(b, 1 + 1), result_type, r, op1, op2)) return r } @@ -8812,7 +8812,7 @@ inst_OpSubgroupAvcImeEvaluateWithSingleReferenceINTEL :: #force_inline proc "con subgroup_avc_ime_evaluate_with_single_reference_intel :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Id, op3: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpSubgroupAvcImeEvaluateWithSingleReferenceINTEL(opbuf(b, 1 + 1 + 1), result_type, r, op1, op2, op3)) + append_elem(&b.ops, inst_OpSubgroupAvcImeEvaluateWithSingleReferenceINTEL(opbuf(b, 1 + 1 + 1), result_type, r, op1, op2, op3)) return r } @@ -8827,7 +8827,7 @@ inst_OpSubgroupAvcImeEvaluateWithDualReferenceINTEL :: #force_inline proc "conte subgroup_avc_ime_evaluate_with_dual_reference_intel :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Id, op3: Id, op4: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpSubgroupAvcImeEvaluateWithDualReferenceINTEL(opbuf(b, 1 + 1 + 1 + 1), result_type, r, op1, op2, op3, op4)) + append_elem(&b.ops, inst_OpSubgroupAvcImeEvaluateWithDualReferenceINTEL(opbuf(b, 1 + 1 + 1 + 1), result_type, r, op1, op2, op3, op4)) return r } @@ -8842,7 +8842,7 @@ inst_OpSubgroupAvcImeEvaluateWithSingleReferenceStreaminINTEL :: #force_inline p subgroup_avc_ime_evaluate_with_single_reference_streamin_intel :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Id, op3: Id, op4: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpSubgroupAvcImeEvaluateWithSingleReferenceStreaminINTEL(opbuf(b, 1 + 1 + 1 + 1), result_type, r, op1, op2, op3, op4)) + append_elem(&b.ops, inst_OpSubgroupAvcImeEvaluateWithSingleReferenceStreaminINTEL(opbuf(b, 1 + 1 + 1 + 1), result_type, r, op1, op2, op3, op4)) return r } @@ -8858,7 +8858,7 @@ inst_OpSubgroupAvcImeEvaluateWithDualReferenceStreaminINTEL :: #force_inline pro subgroup_avc_ime_evaluate_with_dual_reference_streamin_intel :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Id, op3: Id, op4: Id, op5: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpSubgroupAvcImeEvaluateWithDualReferenceStreaminINTEL(opbuf(b, 1 + 1 + 1 + 1 + 1), result_type, r, op1, op2, op3, op4, op5)) + append_elem(&b.ops, inst_OpSubgroupAvcImeEvaluateWithDualReferenceStreaminINTEL(opbuf(b, 1 + 1 + 1 + 1 + 1), result_type, r, op1, op2, op3, op4, op5)) return r } @@ -8872,7 +8872,7 @@ inst_OpSubgroupAvcImeEvaluateWithSingleReferenceStreamoutINTEL :: #force_inline subgroup_avc_ime_evaluate_with_single_reference_streamout_intel :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Id, op3: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpSubgroupAvcImeEvaluateWithSingleReferenceStreamoutINTEL(opbuf(b, 1 + 1 + 1), result_type, r, op1, op2, op3)) + append_elem(&b.ops, inst_OpSubgroupAvcImeEvaluateWithSingleReferenceStreamoutINTEL(opbuf(b, 1 + 1 + 1), result_type, r, op1, op2, op3)) return r } @@ -8887,7 +8887,7 @@ inst_OpSubgroupAvcImeEvaluateWithDualReferenceStreamoutINTEL :: #force_inline pr subgroup_avc_ime_evaluate_with_dual_reference_streamout_intel :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Id, op3: Id, op4: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpSubgroupAvcImeEvaluateWithDualReferenceStreamoutINTEL(opbuf(b, 1 + 1 + 1 + 1), result_type, r, op1, op2, op3, op4)) + append_elem(&b.ops, inst_OpSubgroupAvcImeEvaluateWithDualReferenceStreamoutINTEL(opbuf(b, 1 + 1 + 1 + 1), result_type, r, op1, op2, op3, op4)) return r } @@ -8902,7 +8902,7 @@ inst_OpSubgroupAvcImeEvaluateWithSingleReferenceStreaminoutINTEL :: #force_inlin subgroup_avc_ime_evaluate_with_single_reference_streaminout_intel :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Id, op3: Id, op4: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpSubgroupAvcImeEvaluateWithSingleReferenceStreaminoutINTEL(opbuf(b, 1 + 1 + 1 + 1), result_type, r, op1, op2, op3, op4)) + append_elem(&b.ops, inst_OpSubgroupAvcImeEvaluateWithSingleReferenceStreaminoutINTEL(opbuf(b, 1 + 1 + 1 + 1), result_type, r, op1, op2, op3, op4)) return r } @@ -8918,7 +8918,7 @@ inst_OpSubgroupAvcImeEvaluateWithDualReferenceStreaminoutINTEL :: #force_inline subgroup_avc_ime_evaluate_with_dual_reference_streaminout_intel :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Id, op3: Id, op4: Id, op5: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpSubgroupAvcImeEvaluateWithDualReferenceStreaminoutINTEL(opbuf(b, 1 + 1 + 1 + 1 + 1), result_type, r, op1, op2, op3, op4, op5)) + append_elem(&b.ops, inst_OpSubgroupAvcImeEvaluateWithDualReferenceStreaminoutINTEL(opbuf(b, 1 + 1 + 1 + 1 + 1), result_type, r, op1, op2, op3, op4, op5)) return r } @@ -8930,7 +8930,7 @@ inst_OpSubgroupAvcImeConvertToMceResultINTEL :: #force_inline proc "contextless" subgroup_avc_ime_convert_to_mce_result_intel :: proc(b: ^Builder, result_type: Type_Ref, op1: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpSubgroupAvcImeConvertToMceResultINTEL(opbuf(b, 1), result_type, r, op1)) + append_elem(&b.ops, inst_OpSubgroupAvcImeConvertToMceResultINTEL(opbuf(b, 1), result_type, r, op1)) return r } @@ -8942,7 +8942,7 @@ inst_OpSubgroupAvcImeGetSingleReferenceStreaminINTEL :: #force_inline proc "cont subgroup_avc_ime_get_single_reference_streamin_intel :: proc(b: ^Builder, result_type: Type_Ref, op1: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpSubgroupAvcImeGetSingleReferenceStreaminINTEL(opbuf(b, 1), result_type, r, op1)) + append_elem(&b.ops, inst_OpSubgroupAvcImeGetSingleReferenceStreaminINTEL(opbuf(b, 1), result_type, r, op1)) return r } @@ -8954,7 +8954,7 @@ inst_OpSubgroupAvcImeGetDualReferenceStreaminINTEL :: #force_inline proc "contex subgroup_avc_ime_get_dual_reference_streamin_intel :: proc(b: ^Builder, result_type: Type_Ref, op1: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpSubgroupAvcImeGetDualReferenceStreaminINTEL(opbuf(b, 1), result_type, r, op1)) + append_elem(&b.ops, inst_OpSubgroupAvcImeGetDualReferenceStreaminINTEL(opbuf(b, 1), result_type, r, op1)) return r } @@ -8966,7 +8966,7 @@ inst_OpSubgroupAvcImeStripSingleReferenceStreamoutINTEL :: #force_inline proc "c subgroup_avc_ime_strip_single_reference_streamout_intel :: proc(b: ^Builder, result_type: Type_Ref, op1: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpSubgroupAvcImeStripSingleReferenceStreamoutINTEL(opbuf(b, 1), result_type, r, op1)) + append_elem(&b.ops, inst_OpSubgroupAvcImeStripSingleReferenceStreamoutINTEL(opbuf(b, 1), result_type, r, op1)) return r } @@ -8978,7 +8978,7 @@ inst_OpSubgroupAvcImeStripDualReferenceStreamoutINTEL :: #force_inline proc "con subgroup_avc_ime_strip_dual_reference_streamout_intel :: proc(b: ^Builder, result_type: Type_Ref, op1: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpSubgroupAvcImeStripDualReferenceStreamoutINTEL(opbuf(b, 1), result_type, r, op1)) + append_elem(&b.ops, inst_OpSubgroupAvcImeStripDualReferenceStreamoutINTEL(opbuf(b, 1), result_type, r, op1)) return r } @@ -8991,7 +8991,7 @@ inst_OpSubgroupAvcImeGetStreamoutSingleReferenceMajorShapeMotionVectorsINTEL :: subgroup_avc_ime_get_streamout_single_reference_major_shape_motion_vectors_intel :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpSubgroupAvcImeGetStreamoutSingleReferenceMajorShapeMotionVectorsINTEL(opbuf(b, 1 + 1), result_type, r, op1, op2)) + append_elem(&b.ops, inst_OpSubgroupAvcImeGetStreamoutSingleReferenceMajorShapeMotionVectorsINTEL(opbuf(b, 1 + 1), result_type, r, op1, op2)) return r } @@ -9004,7 +9004,7 @@ inst_OpSubgroupAvcImeGetStreamoutSingleReferenceMajorShapeDistortionsINTEL :: #f subgroup_avc_ime_get_streamout_single_reference_major_shape_distortions_intel :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpSubgroupAvcImeGetStreamoutSingleReferenceMajorShapeDistortionsINTEL(opbuf(b, 1 + 1), result_type, r, op1, op2)) + append_elem(&b.ops, inst_OpSubgroupAvcImeGetStreamoutSingleReferenceMajorShapeDistortionsINTEL(opbuf(b, 1 + 1), result_type, r, op1, op2)) return r } @@ -9017,7 +9017,7 @@ inst_OpSubgroupAvcImeGetStreamoutSingleReferenceMajorShapeReferenceIdsINTEL :: # subgroup_avc_ime_get_streamout_single_reference_major_shape_reference_ids_intel :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpSubgroupAvcImeGetStreamoutSingleReferenceMajorShapeReferenceIdsINTEL(opbuf(b, 1 + 1), result_type, r, op1, op2)) + append_elem(&b.ops, inst_OpSubgroupAvcImeGetStreamoutSingleReferenceMajorShapeReferenceIdsINTEL(opbuf(b, 1 + 1), result_type, r, op1, op2)) return r } @@ -9031,7 +9031,7 @@ inst_OpSubgroupAvcImeGetStreamoutDualReferenceMajorShapeMotionVectorsINTEL :: #f subgroup_avc_ime_get_streamout_dual_reference_major_shape_motion_vectors_intel :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Id, op3: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpSubgroupAvcImeGetStreamoutDualReferenceMajorShapeMotionVectorsINTEL(opbuf(b, 1 + 1 + 1), result_type, r, op1, op2, op3)) + append_elem(&b.ops, inst_OpSubgroupAvcImeGetStreamoutDualReferenceMajorShapeMotionVectorsINTEL(opbuf(b, 1 + 1 + 1), result_type, r, op1, op2, op3)) return r } @@ -9045,7 +9045,7 @@ inst_OpSubgroupAvcImeGetStreamoutDualReferenceMajorShapeDistortionsINTEL :: #for subgroup_avc_ime_get_streamout_dual_reference_major_shape_distortions_intel :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Id, op3: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpSubgroupAvcImeGetStreamoutDualReferenceMajorShapeDistortionsINTEL(opbuf(b, 1 + 1 + 1), result_type, r, op1, op2, op3)) + append_elem(&b.ops, inst_OpSubgroupAvcImeGetStreamoutDualReferenceMajorShapeDistortionsINTEL(opbuf(b, 1 + 1 + 1), result_type, r, op1, op2, op3)) return r } @@ -9059,7 +9059,7 @@ inst_OpSubgroupAvcImeGetStreamoutDualReferenceMajorShapeReferenceIdsINTEL :: #fo subgroup_avc_ime_get_streamout_dual_reference_major_shape_reference_ids_intel :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Id, op3: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpSubgroupAvcImeGetStreamoutDualReferenceMajorShapeReferenceIdsINTEL(opbuf(b, 1 + 1 + 1), result_type, r, op1, op2, op3)) + append_elem(&b.ops, inst_OpSubgroupAvcImeGetStreamoutDualReferenceMajorShapeReferenceIdsINTEL(opbuf(b, 1 + 1 + 1), result_type, r, op1, op2, op3)) return r } @@ -9072,7 +9072,7 @@ inst_OpSubgroupAvcImeGetBorderReachedINTEL :: #force_inline proc "contextless" ( subgroup_avc_ime_get_border_reached_intel :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpSubgroupAvcImeGetBorderReachedINTEL(opbuf(b, 1 + 1), result_type, r, op1, op2)) + append_elem(&b.ops, inst_OpSubgroupAvcImeGetBorderReachedINTEL(opbuf(b, 1 + 1), result_type, r, op1, op2)) return r } @@ -9084,7 +9084,7 @@ inst_OpSubgroupAvcImeGetTruncatedSearchIndicationINTEL :: #force_inline proc "co subgroup_avc_ime_get_truncated_search_indication_intel :: proc(b: ^Builder, result_type: Type_Ref, op1: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpSubgroupAvcImeGetTruncatedSearchIndicationINTEL(opbuf(b, 1), result_type, r, op1)) + append_elem(&b.ops, inst_OpSubgroupAvcImeGetTruncatedSearchIndicationINTEL(opbuf(b, 1), result_type, r, op1)) return r } @@ -9096,7 +9096,7 @@ inst_OpSubgroupAvcImeGetUnidirectionalEarlySearchTerminationINTEL :: #force_inli subgroup_avc_ime_get_unidirectional_early_search_termination_intel :: proc(b: ^Builder, result_type: Type_Ref, op1: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpSubgroupAvcImeGetUnidirectionalEarlySearchTerminationINTEL(opbuf(b, 1), result_type, r, op1)) + append_elem(&b.ops, inst_OpSubgroupAvcImeGetUnidirectionalEarlySearchTerminationINTEL(opbuf(b, 1), result_type, r, op1)) return r } @@ -9108,7 +9108,7 @@ inst_OpSubgroupAvcImeGetWeightingPatternMinimumMotionVectorINTEL :: #force_inlin subgroup_avc_ime_get_weighting_pattern_minimum_motion_vector_intel :: proc(b: ^Builder, result_type: Type_Ref, op1: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpSubgroupAvcImeGetWeightingPatternMinimumMotionVectorINTEL(opbuf(b, 1), result_type, r, op1)) + append_elem(&b.ops, inst_OpSubgroupAvcImeGetWeightingPatternMinimumMotionVectorINTEL(opbuf(b, 1), result_type, r, op1)) return r } @@ -9120,7 +9120,7 @@ inst_OpSubgroupAvcImeGetWeightingPatternMinimumDistortionINTEL :: #force_inline subgroup_avc_ime_get_weighting_pattern_minimum_distortion_intel :: proc(b: ^Builder, result_type: Type_Ref, op1: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpSubgroupAvcImeGetWeightingPatternMinimumDistortionINTEL(opbuf(b, 1), result_type, r, op1)) + append_elem(&b.ops, inst_OpSubgroupAvcImeGetWeightingPatternMinimumDistortionINTEL(opbuf(b, 1), result_type, r, op1)) return r } @@ -9138,7 +9138,7 @@ inst_OpSubgroupAvcFmeInitializeINTEL :: #force_inline proc "contextless" (buf: [ subgroup_avc_fme_initialize_intel :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Id, op3: Id, op4: Id, op5: Id, op6: Id, op7: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpSubgroupAvcFmeInitializeINTEL(opbuf(b, 1 + 1 + 1 + 1 + 1 + 1 + 1), result_type, r, op1, op2, op3, op4, op5, op6, op7)) + append_elem(&b.ops, inst_OpSubgroupAvcFmeInitializeINTEL(opbuf(b, 1 + 1 + 1 + 1 + 1 + 1 + 1), result_type, r, op1, op2, op3, op4, op5, op6, op7)) return r } @@ -9157,7 +9157,7 @@ inst_OpSubgroupAvcBmeInitializeINTEL :: #force_inline proc "contextless" (buf: [ subgroup_avc_bme_initialize_intel :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Id, op3: Id, op4: Id, op5: Id, op6: Id, op7: Id, op8: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpSubgroupAvcBmeInitializeINTEL(opbuf(b, 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1), result_type, r, op1, op2, op3, op4, op5, op6, op7, op8)) + append_elem(&b.ops, inst_OpSubgroupAvcBmeInitializeINTEL(opbuf(b, 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1), result_type, r, op1, op2, op3, op4, op5, op6, op7, op8)) return r } @@ -9169,7 +9169,7 @@ inst_OpSubgroupAvcRefConvertToMcePayloadINTEL :: #force_inline proc "contextless subgroup_avc_ref_convert_to_mce_payload_intel :: proc(b: ^Builder, result_type: Type_Ref, op1: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpSubgroupAvcRefConvertToMcePayloadINTEL(opbuf(b, 1), result_type, r, op1)) + append_elem(&b.ops, inst_OpSubgroupAvcRefConvertToMcePayloadINTEL(opbuf(b, 1), result_type, r, op1)) return r } @@ -9181,7 +9181,7 @@ inst_OpSubgroupAvcRefSetBidirectionalMixDisableINTEL :: #force_inline proc "cont subgroup_avc_ref_set_bidirectional_mix_disable_intel :: proc(b: ^Builder, result_type: Type_Ref, op1: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpSubgroupAvcRefSetBidirectionalMixDisableINTEL(opbuf(b, 1), result_type, r, op1)) + append_elem(&b.ops, inst_OpSubgroupAvcRefSetBidirectionalMixDisableINTEL(opbuf(b, 1), result_type, r, op1)) return r } @@ -9193,7 +9193,7 @@ inst_OpSubgroupAvcRefSetBilinearFilterEnableINTEL :: #force_inline proc "context subgroup_avc_ref_set_bilinear_filter_enable_intel :: proc(b: ^Builder, result_type: Type_Ref, op1: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpSubgroupAvcRefSetBilinearFilterEnableINTEL(opbuf(b, 1), result_type, r, op1)) + append_elem(&b.ops, inst_OpSubgroupAvcRefSetBilinearFilterEnableINTEL(opbuf(b, 1), result_type, r, op1)) return r } @@ -9207,7 +9207,7 @@ inst_OpSubgroupAvcRefEvaluateWithSingleReferenceINTEL :: #force_inline proc "con subgroup_avc_ref_evaluate_with_single_reference_intel :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Id, op3: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpSubgroupAvcRefEvaluateWithSingleReferenceINTEL(opbuf(b, 1 + 1 + 1), result_type, r, op1, op2, op3)) + append_elem(&b.ops, inst_OpSubgroupAvcRefEvaluateWithSingleReferenceINTEL(opbuf(b, 1 + 1 + 1), result_type, r, op1, op2, op3)) return r } @@ -9222,7 +9222,7 @@ inst_OpSubgroupAvcRefEvaluateWithDualReferenceINTEL :: #force_inline proc "conte subgroup_avc_ref_evaluate_with_dual_reference_intel :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Id, op3: Id, op4: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpSubgroupAvcRefEvaluateWithDualReferenceINTEL(opbuf(b, 1 + 1 + 1 + 1), result_type, r, op1, op2, op3, op4)) + append_elem(&b.ops, inst_OpSubgroupAvcRefEvaluateWithDualReferenceINTEL(opbuf(b, 1 + 1 + 1 + 1), result_type, r, op1, op2, op3, op4)) return r } @@ -9236,7 +9236,7 @@ inst_OpSubgroupAvcRefEvaluateWithMultiReferenceINTEL :: #force_inline proc "cont subgroup_avc_ref_evaluate_with_multi_reference_intel :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Id, op3: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpSubgroupAvcRefEvaluateWithMultiReferenceINTEL(opbuf(b, 1 + 1 + 1), result_type, r, op1, op2, op3)) + append_elem(&b.ops, inst_OpSubgroupAvcRefEvaluateWithMultiReferenceINTEL(opbuf(b, 1 + 1 + 1), result_type, r, op1, op2, op3)) return r } @@ -9251,7 +9251,7 @@ inst_OpSubgroupAvcRefEvaluateWithMultiReferenceInterlacedINTEL :: #force_inline subgroup_avc_ref_evaluate_with_multi_reference_interlaced_intel :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Id, op3: Id, op4: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpSubgroupAvcRefEvaluateWithMultiReferenceInterlacedINTEL(opbuf(b, 1 + 1 + 1 + 1), result_type, r, op1, op2, op3, op4)) + append_elem(&b.ops, inst_OpSubgroupAvcRefEvaluateWithMultiReferenceInterlacedINTEL(opbuf(b, 1 + 1 + 1 + 1), result_type, r, op1, op2, op3, op4)) return r } @@ -9263,7 +9263,7 @@ inst_OpSubgroupAvcRefConvertToMceResultINTEL :: #force_inline proc "contextless" subgroup_avc_ref_convert_to_mce_result_intel :: proc(b: ^Builder, result_type: Type_Ref, op1: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpSubgroupAvcRefConvertToMceResultINTEL(opbuf(b, 1), result_type, r, op1)) + append_elem(&b.ops, inst_OpSubgroupAvcRefConvertToMceResultINTEL(opbuf(b, 1), result_type, r, op1)) return r } @@ -9275,7 +9275,7 @@ inst_OpSubgroupAvcSicInitializeINTEL :: #force_inline proc "contextless" (buf: [ subgroup_avc_sic_initialize_intel :: proc(b: ^Builder, result_type: Type_Ref, op1: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpSubgroupAvcSicInitializeINTEL(opbuf(b, 1), result_type, r, op1)) + append_elem(&b.ops, inst_OpSubgroupAvcSicInitializeINTEL(opbuf(b, 1), result_type, r, op1)) return r } @@ -9292,7 +9292,7 @@ inst_OpSubgroupAvcSicConfigureSkcINTEL :: #force_inline proc "contextless" (buf: subgroup_avc_sic_configure_skc_intel :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Id, op3: Id, op4: Id, op5: Id, op6: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpSubgroupAvcSicConfigureSkcINTEL(opbuf(b, 1 + 1 + 1 + 1 + 1 + 1), result_type, r, op1, op2, op3, op4, op5, op6)) + append_elem(&b.ops, inst_OpSubgroupAvcSicConfigureSkcINTEL(opbuf(b, 1 + 1 + 1 + 1 + 1 + 1), result_type, r, op1, op2, op3, op4, op5, op6)) return r } @@ -9311,7 +9311,7 @@ inst_OpSubgroupAvcSicConfigureIpeLumaINTEL :: #force_inline proc "contextless" ( subgroup_avc_sic_configure_ipe_luma_intel :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Id, op3: Id, op4: Id, op5: Id, op6: Id, op7: Id, op8: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpSubgroupAvcSicConfigureIpeLumaINTEL(opbuf(b, 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1), result_type, r, op1, op2, op3, op4, op5, op6, op7, op8)) + append_elem(&b.ops, inst_OpSubgroupAvcSicConfigureIpeLumaINTEL(opbuf(b, 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1), result_type, r, op1, op2, op3, op4, op5, op6, op7, op8)) return r } @@ -9333,7 +9333,7 @@ inst_OpSubgroupAvcSicConfigureIpeLumaChromaINTEL :: #force_inline proc "contextl subgroup_avc_sic_configure_ipe_luma_chroma_intel :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Id, op3: Id, op4: Id, op5: Id, op6: Id, op7: Id, op8: Id, op9: Id, op10: Id, op11: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpSubgroupAvcSicConfigureIpeLumaChromaINTEL(opbuf(b, 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1), result_type, r, op1, op2, op3, op4, op5, op6, op7, op8, op9, op10, op11)) + append_elem(&b.ops, inst_OpSubgroupAvcSicConfigureIpeLumaChromaINTEL(opbuf(b, 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1), result_type, r, op1, op2, op3, op4, op5, op6, op7, op8, op9, op10, op11)) return r } @@ -9346,7 +9346,7 @@ inst_OpSubgroupAvcSicGetMotionVectorMaskINTEL :: #force_inline proc "contextless subgroup_avc_sic_get_motion_vector_mask_intel :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpSubgroupAvcSicGetMotionVectorMaskINTEL(opbuf(b, 1 + 1), result_type, r, op1, op2)) + append_elem(&b.ops, inst_OpSubgroupAvcSicGetMotionVectorMaskINTEL(opbuf(b, 1 + 1), result_type, r, op1, op2)) return r } @@ -9358,7 +9358,7 @@ inst_OpSubgroupAvcSicConvertToMcePayloadINTEL :: #force_inline proc "contextless subgroup_avc_sic_convert_to_mce_payload_intel :: proc(b: ^Builder, result_type: Type_Ref, op1: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpSubgroupAvcSicConvertToMcePayloadINTEL(opbuf(b, 1), result_type, r, op1)) + append_elem(&b.ops, inst_OpSubgroupAvcSicConvertToMcePayloadINTEL(opbuf(b, 1), result_type, r, op1)) return r } @@ -9371,7 +9371,7 @@ inst_OpSubgroupAvcSicSetIntraLumaShapePenaltyINTEL :: #force_inline proc "contex subgroup_avc_sic_set_intra_luma_shape_penalty_intel :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpSubgroupAvcSicSetIntraLumaShapePenaltyINTEL(opbuf(b, 1 + 1), result_type, r, op1, op2)) + append_elem(&b.ops, inst_OpSubgroupAvcSicSetIntraLumaShapePenaltyINTEL(opbuf(b, 1 + 1), result_type, r, op1, op2)) return r } @@ -9386,7 +9386,7 @@ inst_OpSubgroupAvcSicSetIntraLumaModeCostFunctionINTEL :: #force_inline proc "co subgroup_avc_sic_set_intra_luma_mode_cost_function_intel :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Id, op3: Id, op4: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpSubgroupAvcSicSetIntraLumaModeCostFunctionINTEL(opbuf(b, 1 + 1 + 1 + 1), result_type, r, op1, op2, op3, op4)) + append_elem(&b.ops, inst_OpSubgroupAvcSicSetIntraLumaModeCostFunctionINTEL(opbuf(b, 1 + 1 + 1 + 1), result_type, r, op1, op2, op3, op4)) return r } @@ -9399,7 +9399,7 @@ inst_OpSubgroupAvcSicSetIntraChromaModeCostFunctionINTEL :: #force_inline proc " subgroup_avc_sic_set_intra_chroma_mode_cost_function_intel :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpSubgroupAvcSicSetIntraChromaModeCostFunctionINTEL(opbuf(b, 1 + 1), result_type, r, op1, op2)) + append_elem(&b.ops, inst_OpSubgroupAvcSicSetIntraChromaModeCostFunctionINTEL(opbuf(b, 1 + 1), result_type, r, op1, op2)) return r } @@ -9411,7 +9411,7 @@ inst_OpSubgroupAvcSicSetBilinearFilterEnableINTEL :: #force_inline proc "context subgroup_avc_sic_set_bilinear_filter_enable_intel :: proc(b: ^Builder, result_type: Type_Ref, op1: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpSubgroupAvcSicSetBilinearFilterEnableINTEL(opbuf(b, 1), result_type, r, op1)) + append_elem(&b.ops, inst_OpSubgroupAvcSicSetBilinearFilterEnableINTEL(opbuf(b, 1), result_type, r, op1)) return r } @@ -9424,7 +9424,7 @@ inst_OpSubgroupAvcSicSetSkcForwardTransformEnableINTEL :: #force_inline proc "co subgroup_avc_sic_set_skc_forward_transform_enable_intel :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpSubgroupAvcSicSetSkcForwardTransformEnableINTEL(opbuf(b, 1 + 1), result_type, r, op1, op2)) + append_elem(&b.ops, inst_OpSubgroupAvcSicSetSkcForwardTransformEnableINTEL(opbuf(b, 1 + 1), result_type, r, op1, op2)) return r } @@ -9437,7 +9437,7 @@ inst_OpSubgroupAvcSicSetBlockBasedRawSkipSadINTEL :: #force_inline proc "context subgroup_avc_sic_set_block_based_raw_skip_sad_intel :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpSubgroupAvcSicSetBlockBasedRawSkipSadINTEL(opbuf(b, 1 + 1), result_type, r, op1, op2)) + append_elem(&b.ops, inst_OpSubgroupAvcSicSetBlockBasedRawSkipSadINTEL(opbuf(b, 1 + 1), result_type, r, op1, op2)) return r } @@ -9450,7 +9450,7 @@ inst_OpSubgroupAvcSicEvaluateIpeINTEL :: #force_inline proc "contextless" (buf: subgroup_avc_sic_evaluate_ipe_intel :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpSubgroupAvcSicEvaluateIpeINTEL(opbuf(b, 1 + 1), result_type, r, op1, op2)) + append_elem(&b.ops, inst_OpSubgroupAvcSicEvaluateIpeINTEL(opbuf(b, 1 + 1), result_type, r, op1, op2)) return r } @@ -9464,7 +9464,7 @@ inst_OpSubgroupAvcSicEvaluateWithSingleReferenceINTEL :: #force_inline proc "con subgroup_avc_sic_evaluate_with_single_reference_intel :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Id, op3: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpSubgroupAvcSicEvaluateWithSingleReferenceINTEL(opbuf(b, 1 + 1 + 1), result_type, r, op1, op2, op3)) + append_elem(&b.ops, inst_OpSubgroupAvcSicEvaluateWithSingleReferenceINTEL(opbuf(b, 1 + 1 + 1), result_type, r, op1, op2, op3)) return r } @@ -9479,7 +9479,7 @@ inst_OpSubgroupAvcSicEvaluateWithDualReferenceINTEL :: #force_inline proc "conte subgroup_avc_sic_evaluate_with_dual_reference_intel :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Id, op3: Id, op4: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpSubgroupAvcSicEvaluateWithDualReferenceINTEL(opbuf(b, 1 + 1 + 1 + 1), result_type, r, op1, op2, op3, op4)) + append_elem(&b.ops, inst_OpSubgroupAvcSicEvaluateWithDualReferenceINTEL(opbuf(b, 1 + 1 + 1 + 1), result_type, r, op1, op2, op3, op4)) return r } @@ -9493,7 +9493,7 @@ inst_OpSubgroupAvcSicEvaluateWithMultiReferenceINTEL :: #force_inline proc "cont subgroup_avc_sic_evaluate_with_multi_reference_intel :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Id, op3: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpSubgroupAvcSicEvaluateWithMultiReferenceINTEL(opbuf(b, 1 + 1 + 1), result_type, r, op1, op2, op3)) + append_elem(&b.ops, inst_OpSubgroupAvcSicEvaluateWithMultiReferenceINTEL(opbuf(b, 1 + 1 + 1), result_type, r, op1, op2, op3)) return r } @@ -9508,7 +9508,7 @@ inst_OpSubgroupAvcSicEvaluateWithMultiReferenceInterlacedINTEL :: #force_inline subgroup_avc_sic_evaluate_with_multi_reference_interlaced_intel :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Id, op3: Id, op4: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpSubgroupAvcSicEvaluateWithMultiReferenceInterlacedINTEL(opbuf(b, 1 + 1 + 1 + 1), result_type, r, op1, op2, op3, op4)) + append_elem(&b.ops, inst_OpSubgroupAvcSicEvaluateWithMultiReferenceInterlacedINTEL(opbuf(b, 1 + 1 + 1 + 1), result_type, r, op1, op2, op3, op4)) return r } @@ -9520,7 +9520,7 @@ inst_OpSubgroupAvcSicConvertToMceResultINTEL :: #force_inline proc "contextless" subgroup_avc_sic_convert_to_mce_result_intel :: proc(b: ^Builder, result_type: Type_Ref, op1: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpSubgroupAvcSicConvertToMceResultINTEL(opbuf(b, 1), result_type, r, op1)) + append_elem(&b.ops, inst_OpSubgroupAvcSicConvertToMceResultINTEL(opbuf(b, 1), result_type, r, op1)) return r } @@ -9532,7 +9532,7 @@ inst_OpSubgroupAvcSicGetIpeLumaShapeINTEL :: #force_inline proc "contextless" (b subgroup_avc_sic_get_ipe_luma_shape_intel :: proc(b: ^Builder, result_type: Type_Ref, op1: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpSubgroupAvcSicGetIpeLumaShapeINTEL(opbuf(b, 1), result_type, r, op1)) + append_elem(&b.ops, inst_OpSubgroupAvcSicGetIpeLumaShapeINTEL(opbuf(b, 1), result_type, r, op1)) return r } @@ -9544,7 +9544,7 @@ inst_OpSubgroupAvcSicGetBestIpeLumaDistortionINTEL :: #force_inline proc "contex subgroup_avc_sic_get_best_ipe_luma_distortion_intel :: proc(b: ^Builder, result_type: Type_Ref, op1: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpSubgroupAvcSicGetBestIpeLumaDistortionINTEL(opbuf(b, 1), result_type, r, op1)) + append_elem(&b.ops, inst_OpSubgroupAvcSicGetBestIpeLumaDistortionINTEL(opbuf(b, 1), result_type, r, op1)) return r } @@ -9556,7 +9556,7 @@ inst_OpSubgroupAvcSicGetBestIpeChromaDistortionINTEL :: #force_inline proc "cont subgroup_avc_sic_get_best_ipe_chroma_distortion_intel :: proc(b: ^Builder, result_type: Type_Ref, op1: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpSubgroupAvcSicGetBestIpeChromaDistortionINTEL(opbuf(b, 1), result_type, r, op1)) + append_elem(&b.ops, inst_OpSubgroupAvcSicGetBestIpeChromaDistortionINTEL(opbuf(b, 1), result_type, r, op1)) return r } @@ -9568,7 +9568,7 @@ inst_OpSubgroupAvcSicGetPackedIpeLumaModesINTEL :: #force_inline proc "contextle subgroup_avc_sic_get_packed_ipe_luma_modes_intel :: proc(b: ^Builder, result_type: Type_Ref, op1: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpSubgroupAvcSicGetPackedIpeLumaModesINTEL(opbuf(b, 1), result_type, r, op1)) + append_elem(&b.ops, inst_OpSubgroupAvcSicGetPackedIpeLumaModesINTEL(opbuf(b, 1), result_type, r, op1)) return r } @@ -9580,7 +9580,7 @@ inst_OpSubgroupAvcSicGetIpeChromaModeINTEL :: #force_inline proc "contextless" ( subgroup_avc_sic_get_ipe_chroma_mode_intel :: proc(b: ^Builder, result_type: Type_Ref, op1: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpSubgroupAvcSicGetIpeChromaModeINTEL(opbuf(b, 1), result_type, r, op1)) + append_elem(&b.ops, inst_OpSubgroupAvcSicGetIpeChromaModeINTEL(opbuf(b, 1), result_type, r, op1)) return r } @@ -9592,7 +9592,7 @@ inst_OpSubgroupAvcSicGetPackedSkcLumaCountThresholdINTEL :: #force_inline proc " subgroup_avc_sic_get_packed_skc_luma_count_threshold_intel :: proc(b: ^Builder, result_type: Type_Ref, op1: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpSubgroupAvcSicGetPackedSkcLumaCountThresholdINTEL(opbuf(b, 1), result_type, r, op1)) + append_elem(&b.ops, inst_OpSubgroupAvcSicGetPackedSkcLumaCountThresholdINTEL(opbuf(b, 1), result_type, r, op1)) return r } @@ -9604,7 +9604,7 @@ inst_OpSubgroupAvcSicGetPackedSkcLumaSumThresholdINTEL :: #force_inline proc "co subgroup_avc_sic_get_packed_skc_luma_sum_threshold_intel :: proc(b: ^Builder, result_type: Type_Ref, op1: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpSubgroupAvcSicGetPackedSkcLumaSumThresholdINTEL(opbuf(b, 1), result_type, r, op1)) + append_elem(&b.ops, inst_OpSubgroupAvcSicGetPackedSkcLumaSumThresholdINTEL(opbuf(b, 1), result_type, r, op1)) return r } @@ -9616,7 +9616,7 @@ inst_OpSubgroupAvcSicGetInterRawSadsINTEL :: #force_inline proc "contextless" (b subgroup_avc_sic_get_inter_raw_sads_intel :: proc(b: ^Builder, result_type: Type_Ref, op1: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpSubgroupAvcSicGetInterRawSadsINTEL(opbuf(b, 1), result_type, r, op1)) + append_elem(&b.ops, inst_OpSubgroupAvcSicGetInterRawSadsINTEL(opbuf(b, 1), result_type, r, op1)) return r } @@ -9628,7 +9628,7 @@ inst_OpVariableLengthArrayINTEL :: #force_inline proc "contextless" (buf: []Oper variable_length_array_intel :: proc(b: ^Builder, result_type: Type_Ref, op1: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpVariableLengthArrayINTEL(opbuf(b, 1), result_type, r, op1)) + append_elem(&b.ops, inst_OpVariableLengthArrayINTEL(opbuf(b, 1), result_type, r, op1)) return r } @@ -9638,7 +9638,7 @@ inst_OpSaveMemoryINTEL :: #force_inline proc "contextless" (result_type: Type_Re save_memory_intel :: proc(b: ^Builder, result_type: Type_Ref) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpSaveMemoryINTEL(result_type, r)) + append_elem(&b.ops, inst_OpSaveMemoryINTEL(result_type, r)) return r } @@ -9649,7 +9649,7 @@ inst_OpRestoreMemoryINTEL :: #force_inline proc "contextless" (buf: []Operand, o } restore_memory_intel :: proc(b: ^Builder, op1: Id) { - append(&b.ops, inst_OpRestoreMemoryINTEL(opbuf(b, 1), op1)) + append_elem(&b.ops, inst_OpRestoreMemoryINTEL(opbuf(b, 1), op1)) } inst_OpArbitraryFloatSinCosPiALTERA :: #force_inline proc "contextless" (buf: []Operand, result_type: Type_Ref, result: Id, op1: Id, op2: i64, op3: i64, op4: i64, op5: i64, op6: i64) -> Operation { @@ -9665,7 +9665,7 @@ inst_OpArbitraryFloatSinCosPiALTERA :: #force_inline proc "contextless" (buf: [] arbitrary_float_sin_cos_pi_altera :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: i64, op3: i64, op4: i64, op5: i64, op6: i64) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpArbitraryFloatSinCosPiALTERA(opbuf(b, 1 + 1 + 1 + 1 + 1 + 1), result_type, r, op1, op2, op3, op4, op5, op6)) + append_elem(&b.ops, inst_OpArbitraryFloatSinCosPiALTERA(opbuf(b, 1 + 1 + 1 + 1 + 1 + 1), result_type, r, op1, op2, op3, op4, op5, op6)) return r } @@ -9682,7 +9682,7 @@ inst_OpArbitraryFloatCastALTERA :: #force_inline proc "contextless" (buf: []Oper arbitrary_float_cast_altera :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: i64, op3: i64, op4: i64, op5: i64, op6: i64) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpArbitraryFloatCastALTERA(opbuf(b, 1 + 1 + 1 + 1 + 1 + 1), result_type, r, op1, op2, op3, op4, op5, op6)) + append_elem(&b.ops, inst_OpArbitraryFloatCastALTERA(opbuf(b, 1 + 1 + 1 + 1 + 1 + 1), result_type, r, op1, op2, op3, op4, op5, op6)) return r } @@ -9699,7 +9699,7 @@ inst_OpArbitraryFloatCastFromIntALTERA :: #force_inline proc "contextless" (buf: arbitrary_float_cast_from_int_altera :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: i64, op3: i64, op4: i64, op5: i64, op6: i64) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpArbitraryFloatCastFromIntALTERA(opbuf(b, 1 + 1 + 1 + 1 + 1 + 1), result_type, r, op1, op2, op3, op4, op5, op6)) + append_elem(&b.ops, inst_OpArbitraryFloatCastFromIntALTERA(opbuf(b, 1 + 1 + 1 + 1 + 1 + 1), result_type, r, op1, op2, op3, op4, op5, op6)) return r } @@ -9716,7 +9716,7 @@ inst_OpArbitraryFloatCastToIntALTERA :: #force_inline proc "contextless" (buf: [ arbitrary_float_cast_to_int_altera :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: i64, op3: i64, op4: i64, op5: i64, op6: i64) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpArbitraryFloatCastToIntALTERA(opbuf(b, 1 + 1 + 1 + 1 + 1 + 1), result_type, r, op1, op2, op3, op4, op5, op6)) + append_elem(&b.ops, inst_OpArbitraryFloatCastToIntALTERA(opbuf(b, 1 + 1 + 1 + 1 + 1 + 1), result_type, r, op1, op2, op3, op4, op5, op6)) return r } @@ -9735,7 +9735,7 @@ inst_OpArbitraryFloatAddALTERA :: #force_inline proc "contextless" (buf: []Opera arbitrary_float_add_altera :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: i64, op3: Id, op4: i64, op5: i64, op6: i64, op7: i64, op8: i64) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpArbitraryFloatAddALTERA(opbuf(b, 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1), result_type, r, op1, op2, op3, op4, op5, op6, op7, op8)) + append_elem(&b.ops, inst_OpArbitraryFloatAddALTERA(opbuf(b, 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1), result_type, r, op1, op2, op3, op4, op5, op6, op7, op8)) return r } @@ -9754,7 +9754,7 @@ inst_OpArbitraryFloatSubALTERA :: #force_inline proc "contextless" (buf: []Opera arbitrary_float_sub_altera :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: i64, op3: Id, op4: i64, op5: i64, op6: i64, op7: i64, op8: i64) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpArbitraryFloatSubALTERA(opbuf(b, 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1), result_type, r, op1, op2, op3, op4, op5, op6, op7, op8)) + append_elem(&b.ops, inst_OpArbitraryFloatSubALTERA(opbuf(b, 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1), result_type, r, op1, op2, op3, op4, op5, op6, op7, op8)) return r } @@ -9773,7 +9773,7 @@ inst_OpArbitraryFloatMulALTERA :: #force_inline proc "contextless" (buf: []Opera arbitrary_float_mul_altera :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: i64, op3: Id, op4: i64, op5: i64, op6: i64, op7: i64, op8: i64) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpArbitraryFloatMulALTERA(opbuf(b, 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1), result_type, r, op1, op2, op3, op4, op5, op6, op7, op8)) + append_elem(&b.ops, inst_OpArbitraryFloatMulALTERA(opbuf(b, 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1), result_type, r, op1, op2, op3, op4, op5, op6, op7, op8)) return r } @@ -9792,7 +9792,7 @@ inst_OpArbitraryFloatDivALTERA :: #force_inline proc "contextless" (buf: []Opera arbitrary_float_div_altera :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: i64, op3: Id, op4: i64, op5: i64, op6: i64, op7: i64, op8: i64) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpArbitraryFloatDivALTERA(opbuf(b, 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1), result_type, r, op1, op2, op3, op4, op5, op6, op7, op8)) + append_elem(&b.ops, inst_OpArbitraryFloatDivALTERA(opbuf(b, 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1), result_type, r, op1, op2, op3, op4, op5, op6, op7, op8)) return r } @@ -9807,7 +9807,7 @@ inst_OpArbitraryFloatGTALTERA :: #force_inline proc "contextless" (buf: []Operan arbitrary_float_gtaltera :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: i64, op3: Id, op4: i64) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpArbitraryFloatGTALTERA(opbuf(b, 1 + 1 + 1 + 1), result_type, r, op1, op2, op3, op4)) + append_elem(&b.ops, inst_OpArbitraryFloatGTALTERA(opbuf(b, 1 + 1 + 1 + 1), result_type, r, op1, op2, op3, op4)) return r } @@ -9822,7 +9822,7 @@ inst_OpArbitraryFloatGEALTERA :: #force_inline proc "contextless" (buf: []Operan arbitrary_float_gealtera :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: i64, op3: Id, op4: i64) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpArbitraryFloatGEALTERA(opbuf(b, 1 + 1 + 1 + 1), result_type, r, op1, op2, op3, op4)) + append_elem(&b.ops, inst_OpArbitraryFloatGEALTERA(opbuf(b, 1 + 1 + 1 + 1), result_type, r, op1, op2, op3, op4)) return r } @@ -9837,7 +9837,7 @@ inst_OpArbitraryFloatLTALTERA :: #force_inline proc "contextless" (buf: []Operan arbitrary_float_ltaltera :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: i64, op3: Id, op4: i64) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpArbitraryFloatLTALTERA(opbuf(b, 1 + 1 + 1 + 1), result_type, r, op1, op2, op3, op4)) + append_elem(&b.ops, inst_OpArbitraryFloatLTALTERA(opbuf(b, 1 + 1 + 1 + 1), result_type, r, op1, op2, op3, op4)) return r } @@ -9852,7 +9852,7 @@ inst_OpArbitraryFloatLEALTERA :: #force_inline proc "contextless" (buf: []Operan arbitrary_float_lealtera :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: i64, op3: Id, op4: i64) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpArbitraryFloatLEALTERA(opbuf(b, 1 + 1 + 1 + 1), result_type, r, op1, op2, op3, op4)) + append_elem(&b.ops, inst_OpArbitraryFloatLEALTERA(opbuf(b, 1 + 1 + 1 + 1), result_type, r, op1, op2, op3, op4)) return r } @@ -9867,7 +9867,7 @@ inst_OpArbitraryFloatEQALTERA :: #force_inline proc "contextless" (buf: []Operan arbitrary_float_eqaltera :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: i64, op3: Id, op4: i64) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpArbitraryFloatEQALTERA(opbuf(b, 1 + 1 + 1 + 1), result_type, r, op1, op2, op3, op4)) + append_elem(&b.ops, inst_OpArbitraryFloatEQALTERA(opbuf(b, 1 + 1 + 1 + 1), result_type, r, op1, op2, op3, op4)) return r } @@ -9884,7 +9884,7 @@ inst_OpArbitraryFloatRecipALTERA :: #force_inline proc "contextless" (buf: []Ope arbitrary_float_recip_altera :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: i64, op3: i64, op4: i64, op5: i64, op6: i64) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpArbitraryFloatRecipALTERA(opbuf(b, 1 + 1 + 1 + 1 + 1 + 1), result_type, r, op1, op2, op3, op4, op5, op6)) + append_elem(&b.ops, inst_OpArbitraryFloatRecipALTERA(opbuf(b, 1 + 1 + 1 + 1 + 1 + 1), result_type, r, op1, op2, op3, op4, op5, op6)) return r } @@ -9901,7 +9901,7 @@ inst_OpArbitraryFloatRSqrtALTERA :: #force_inline proc "contextless" (buf: []Ope arbitrary_float_r_sqrt_altera :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: i64, op3: i64, op4: i64, op5: i64, op6: i64) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpArbitraryFloatRSqrtALTERA(opbuf(b, 1 + 1 + 1 + 1 + 1 + 1), result_type, r, op1, op2, op3, op4, op5, op6)) + append_elem(&b.ops, inst_OpArbitraryFloatRSqrtALTERA(opbuf(b, 1 + 1 + 1 + 1 + 1 + 1), result_type, r, op1, op2, op3, op4, op5, op6)) return r } @@ -9918,7 +9918,7 @@ inst_OpArbitraryFloatCbrtALTERA :: #force_inline proc "contextless" (buf: []Oper arbitrary_float_cbrt_altera :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: i64, op3: i64, op4: i64, op5: i64, op6: i64) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpArbitraryFloatCbrtALTERA(opbuf(b, 1 + 1 + 1 + 1 + 1 + 1), result_type, r, op1, op2, op3, op4, op5, op6)) + append_elem(&b.ops, inst_OpArbitraryFloatCbrtALTERA(opbuf(b, 1 + 1 + 1 + 1 + 1 + 1), result_type, r, op1, op2, op3, op4, op5, op6)) return r } @@ -9937,7 +9937,7 @@ inst_OpArbitraryFloatHypotALTERA :: #force_inline proc "contextless" (buf: []Ope arbitrary_float_hypot_altera :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: i64, op3: Id, op4: i64, op5: i64, op6: i64, op7: i64, op8: i64) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpArbitraryFloatHypotALTERA(opbuf(b, 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1), result_type, r, op1, op2, op3, op4, op5, op6, op7, op8)) + append_elem(&b.ops, inst_OpArbitraryFloatHypotALTERA(opbuf(b, 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1), result_type, r, op1, op2, op3, op4, op5, op6, op7, op8)) return r } @@ -9954,7 +9954,7 @@ inst_OpArbitraryFloatSqrtALTERA :: #force_inline proc "contextless" (buf: []Oper arbitrary_float_sqrt_altera :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: i64, op3: i64, op4: i64, op5: i64, op6: i64) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpArbitraryFloatSqrtALTERA(opbuf(b, 1 + 1 + 1 + 1 + 1 + 1), result_type, r, op1, op2, op3, op4, op5, op6)) + append_elem(&b.ops, inst_OpArbitraryFloatSqrtALTERA(opbuf(b, 1 + 1 + 1 + 1 + 1 + 1), result_type, r, op1, op2, op3, op4, op5, op6)) return r } @@ -9971,7 +9971,7 @@ inst_OpArbitraryFloatLogINTEL :: #force_inline proc "contextless" (buf: []Operan arbitrary_float_log_intel :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: i64, op3: i64, op4: i64, op5: i64, op6: i64) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpArbitraryFloatLogINTEL(opbuf(b, 1 + 1 + 1 + 1 + 1 + 1), result_type, r, op1, op2, op3, op4, op5, op6)) + append_elem(&b.ops, inst_OpArbitraryFloatLogINTEL(opbuf(b, 1 + 1 + 1 + 1 + 1 + 1), result_type, r, op1, op2, op3, op4, op5, op6)) return r } @@ -9988,7 +9988,7 @@ inst_OpArbitraryFloatLog2INTEL :: #force_inline proc "contextless" (buf: []Opera arbitrary_float_log2_intel :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: i64, op3: i64, op4: i64, op5: i64, op6: i64) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpArbitraryFloatLog2INTEL(opbuf(b, 1 + 1 + 1 + 1 + 1 + 1), result_type, r, op1, op2, op3, op4, op5, op6)) + append_elem(&b.ops, inst_OpArbitraryFloatLog2INTEL(opbuf(b, 1 + 1 + 1 + 1 + 1 + 1), result_type, r, op1, op2, op3, op4, op5, op6)) return r } @@ -10005,7 +10005,7 @@ inst_OpArbitraryFloatLog10INTEL :: #force_inline proc "contextless" (buf: []Oper arbitrary_float_log10_intel :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: i64, op3: i64, op4: i64, op5: i64, op6: i64) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpArbitraryFloatLog10INTEL(opbuf(b, 1 + 1 + 1 + 1 + 1 + 1), result_type, r, op1, op2, op3, op4, op5, op6)) + append_elem(&b.ops, inst_OpArbitraryFloatLog10INTEL(opbuf(b, 1 + 1 + 1 + 1 + 1 + 1), result_type, r, op1, op2, op3, op4, op5, op6)) return r } @@ -10022,7 +10022,7 @@ inst_OpArbitraryFloatLog1pINTEL :: #force_inline proc "contextless" (buf: []Oper arbitrary_float_log1p_intel :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: i64, op3: i64, op4: i64, op5: i64, op6: i64) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpArbitraryFloatLog1pINTEL(opbuf(b, 1 + 1 + 1 + 1 + 1 + 1), result_type, r, op1, op2, op3, op4, op5, op6)) + append_elem(&b.ops, inst_OpArbitraryFloatLog1pINTEL(opbuf(b, 1 + 1 + 1 + 1 + 1 + 1), result_type, r, op1, op2, op3, op4, op5, op6)) return r } @@ -10039,7 +10039,7 @@ inst_OpArbitraryFloatExpINTEL :: #force_inline proc "contextless" (buf: []Operan arbitrary_float_exp_intel :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: i64, op3: i64, op4: i64, op5: i64, op6: i64) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpArbitraryFloatExpINTEL(opbuf(b, 1 + 1 + 1 + 1 + 1 + 1), result_type, r, op1, op2, op3, op4, op5, op6)) + append_elem(&b.ops, inst_OpArbitraryFloatExpINTEL(opbuf(b, 1 + 1 + 1 + 1 + 1 + 1), result_type, r, op1, op2, op3, op4, op5, op6)) return r } @@ -10056,7 +10056,7 @@ inst_OpArbitraryFloatExp2INTEL :: #force_inline proc "contextless" (buf: []Opera arbitrary_float_exp2_intel :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: i64, op3: i64, op4: i64, op5: i64, op6: i64) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpArbitraryFloatExp2INTEL(opbuf(b, 1 + 1 + 1 + 1 + 1 + 1), result_type, r, op1, op2, op3, op4, op5, op6)) + append_elem(&b.ops, inst_OpArbitraryFloatExp2INTEL(opbuf(b, 1 + 1 + 1 + 1 + 1 + 1), result_type, r, op1, op2, op3, op4, op5, op6)) return r } @@ -10073,7 +10073,7 @@ inst_OpArbitraryFloatExp10INTEL :: #force_inline proc "contextless" (buf: []Oper arbitrary_float_exp10_intel :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: i64, op3: i64, op4: i64, op5: i64, op6: i64) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpArbitraryFloatExp10INTEL(opbuf(b, 1 + 1 + 1 + 1 + 1 + 1), result_type, r, op1, op2, op3, op4, op5, op6)) + append_elem(&b.ops, inst_OpArbitraryFloatExp10INTEL(opbuf(b, 1 + 1 + 1 + 1 + 1 + 1), result_type, r, op1, op2, op3, op4, op5, op6)) return r } @@ -10090,7 +10090,7 @@ inst_OpArbitraryFloatExpm1INTEL :: #force_inline proc "contextless" (buf: []Oper arbitrary_float_expm1_intel :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: i64, op3: i64, op4: i64, op5: i64, op6: i64) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpArbitraryFloatExpm1INTEL(opbuf(b, 1 + 1 + 1 + 1 + 1 + 1), result_type, r, op1, op2, op3, op4, op5, op6)) + append_elem(&b.ops, inst_OpArbitraryFloatExpm1INTEL(opbuf(b, 1 + 1 + 1 + 1 + 1 + 1), result_type, r, op1, op2, op3, op4, op5, op6)) return r } @@ -10107,7 +10107,7 @@ inst_OpArbitraryFloatSinINTEL :: #force_inline proc "contextless" (buf: []Operan arbitrary_float_sin_intel :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: i64, op3: i64, op4: i64, op5: i64, op6: i64) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpArbitraryFloatSinINTEL(opbuf(b, 1 + 1 + 1 + 1 + 1 + 1), result_type, r, op1, op2, op3, op4, op5, op6)) + append_elem(&b.ops, inst_OpArbitraryFloatSinINTEL(opbuf(b, 1 + 1 + 1 + 1 + 1 + 1), result_type, r, op1, op2, op3, op4, op5, op6)) return r } @@ -10124,7 +10124,7 @@ inst_OpArbitraryFloatCosINTEL :: #force_inline proc "contextless" (buf: []Operan arbitrary_float_cos_intel :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: i64, op3: i64, op4: i64, op5: i64, op6: i64) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpArbitraryFloatCosINTEL(opbuf(b, 1 + 1 + 1 + 1 + 1 + 1), result_type, r, op1, op2, op3, op4, op5, op6)) + append_elem(&b.ops, inst_OpArbitraryFloatCosINTEL(opbuf(b, 1 + 1 + 1 + 1 + 1 + 1), result_type, r, op1, op2, op3, op4, op5, op6)) return r } @@ -10141,7 +10141,7 @@ inst_OpArbitraryFloatSinCosINTEL :: #force_inline proc "contextless" (buf: []Ope arbitrary_float_sin_cos_intel :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: i64, op3: i64, op4: i64, op5: i64, op6: i64) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpArbitraryFloatSinCosINTEL(opbuf(b, 1 + 1 + 1 + 1 + 1 + 1), result_type, r, op1, op2, op3, op4, op5, op6)) + append_elem(&b.ops, inst_OpArbitraryFloatSinCosINTEL(opbuf(b, 1 + 1 + 1 + 1 + 1 + 1), result_type, r, op1, op2, op3, op4, op5, op6)) return r } @@ -10158,7 +10158,7 @@ inst_OpArbitraryFloatSinPiINTEL :: #force_inline proc "contextless" (buf: []Oper arbitrary_float_sin_pi_intel :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: i64, op3: i64, op4: i64, op5: i64, op6: i64) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpArbitraryFloatSinPiINTEL(opbuf(b, 1 + 1 + 1 + 1 + 1 + 1), result_type, r, op1, op2, op3, op4, op5, op6)) + append_elem(&b.ops, inst_OpArbitraryFloatSinPiINTEL(opbuf(b, 1 + 1 + 1 + 1 + 1 + 1), result_type, r, op1, op2, op3, op4, op5, op6)) return r } @@ -10175,7 +10175,7 @@ inst_OpArbitraryFloatCosPiINTEL :: #force_inline proc "contextless" (buf: []Oper arbitrary_float_cos_pi_intel :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: i64, op3: i64, op4: i64, op5: i64, op6: i64) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpArbitraryFloatCosPiINTEL(opbuf(b, 1 + 1 + 1 + 1 + 1 + 1), result_type, r, op1, op2, op3, op4, op5, op6)) + append_elem(&b.ops, inst_OpArbitraryFloatCosPiINTEL(opbuf(b, 1 + 1 + 1 + 1 + 1 + 1), result_type, r, op1, op2, op3, op4, op5, op6)) return r } @@ -10192,7 +10192,7 @@ inst_OpArbitraryFloatASinINTEL :: #force_inline proc "contextless" (buf: []Opera arbitrary_float_a_sin_intel :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: i64, op3: i64, op4: i64, op5: i64, op6: i64) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpArbitraryFloatASinINTEL(opbuf(b, 1 + 1 + 1 + 1 + 1 + 1), result_type, r, op1, op2, op3, op4, op5, op6)) + append_elem(&b.ops, inst_OpArbitraryFloatASinINTEL(opbuf(b, 1 + 1 + 1 + 1 + 1 + 1), result_type, r, op1, op2, op3, op4, op5, op6)) return r } @@ -10209,7 +10209,7 @@ inst_OpArbitraryFloatASinPiINTEL :: #force_inline proc "contextless" (buf: []Ope arbitrary_float_a_sin_pi_intel :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: i64, op3: i64, op4: i64, op5: i64, op6: i64) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpArbitraryFloatASinPiINTEL(opbuf(b, 1 + 1 + 1 + 1 + 1 + 1), result_type, r, op1, op2, op3, op4, op5, op6)) + append_elem(&b.ops, inst_OpArbitraryFloatASinPiINTEL(opbuf(b, 1 + 1 + 1 + 1 + 1 + 1), result_type, r, op1, op2, op3, op4, op5, op6)) return r } @@ -10226,7 +10226,7 @@ inst_OpArbitraryFloatACosINTEL :: #force_inline proc "contextless" (buf: []Opera arbitrary_float_a_cos_intel :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: i64, op3: i64, op4: i64, op5: i64, op6: i64) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpArbitraryFloatACosINTEL(opbuf(b, 1 + 1 + 1 + 1 + 1 + 1), result_type, r, op1, op2, op3, op4, op5, op6)) + append_elem(&b.ops, inst_OpArbitraryFloatACosINTEL(opbuf(b, 1 + 1 + 1 + 1 + 1 + 1), result_type, r, op1, op2, op3, op4, op5, op6)) return r } @@ -10243,7 +10243,7 @@ inst_OpArbitraryFloatACosPiINTEL :: #force_inline proc "contextless" (buf: []Ope arbitrary_float_a_cos_pi_intel :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: i64, op3: i64, op4: i64, op5: i64, op6: i64) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpArbitraryFloatACosPiINTEL(opbuf(b, 1 + 1 + 1 + 1 + 1 + 1), result_type, r, op1, op2, op3, op4, op5, op6)) + append_elem(&b.ops, inst_OpArbitraryFloatACosPiINTEL(opbuf(b, 1 + 1 + 1 + 1 + 1 + 1), result_type, r, op1, op2, op3, op4, op5, op6)) return r } @@ -10260,7 +10260,7 @@ inst_OpArbitraryFloatATanINTEL :: #force_inline proc "contextless" (buf: []Opera arbitrary_float_a_tan_intel :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: i64, op3: i64, op4: i64, op5: i64, op6: i64) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpArbitraryFloatATanINTEL(opbuf(b, 1 + 1 + 1 + 1 + 1 + 1), result_type, r, op1, op2, op3, op4, op5, op6)) + append_elem(&b.ops, inst_OpArbitraryFloatATanINTEL(opbuf(b, 1 + 1 + 1 + 1 + 1 + 1), result_type, r, op1, op2, op3, op4, op5, op6)) return r } @@ -10277,7 +10277,7 @@ inst_OpArbitraryFloatATanPiINTEL :: #force_inline proc "contextless" (buf: []Ope arbitrary_float_a_tan_pi_intel :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: i64, op3: i64, op4: i64, op5: i64, op6: i64) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpArbitraryFloatATanPiINTEL(opbuf(b, 1 + 1 + 1 + 1 + 1 + 1), result_type, r, op1, op2, op3, op4, op5, op6)) + append_elem(&b.ops, inst_OpArbitraryFloatATanPiINTEL(opbuf(b, 1 + 1 + 1 + 1 + 1 + 1), result_type, r, op1, op2, op3, op4, op5, op6)) return r } @@ -10296,7 +10296,7 @@ inst_OpArbitraryFloatATan2INTEL :: #force_inline proc "contextless" (buf: []Oper arbitrary_float_a_tan2_intel :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: i64, op3: Id, op4: i64, op5: i64, op6: i64, op7: i64, op8: i64) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpArbitraryFloatATan2INTEL(opbuf(b, 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1), result_type, r, op1, op2, op3, op4, op5, op6, op7, op8)) + append_elem(&b.ops, inst_OpArbitraryFloatATan2INTEL(opbuf(b, 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1), result_type, r, op1, op2, op3, op4, op5, op6, op7, op8)) return r } @@ -10315,7 +10315,7 @@ inst_OpArbitraryFloatPowINTEL :: #force_inline proc "contextless" (buf: []Operan arbitrary_float_pow_intel :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: i64, op3: Id, op4: i64, op5: i64, op6: i64, op7: i64, op8: i64) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpArbitraryFloatPowINTEL(opbuf(b, 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1), result_type, r, op1, op2, op3, op4, op5, op6, op7, op8)) + append_elem(&b.ops, inst_OpArbitraryFloatPowINTEL(opbuf(b, 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1), result_type, r, op1, op2, op3, op4, op5, op6, op7, op8)) return r } @@ -10334,7 +10334,7 @@ inst_OpArbitraryFloatPowRINTEL :: #force_inline proc "contextless" (buf: []Opera arbitrary_float_pow_rintel :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: i64, op3: Id, op4: i64, op5: i64, op6: i64, op7: i64, op8: i64) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpArbitraryFloatPowRINTEL(opbuf(b, 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1), result_type, r, op1, op2, op3, op4, op5, op6, op7, op8)) + append_elem(&b.ops, inst_OpArbitraryFloatPowRINTEL(opbuf(b, 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1), result_type, r, op1, op2, op3, op4, op5, op6, op7, op8)) return r } @@ -10353,7 +10353,7 @@ inst_OpArbitraryFloatPowNINTEL :: #force_inline proc "contextless" (buf: []Opera arbitrary_float_pow_nintel :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: i64, op3: Id, op4: i64, op5: i64, op6: i64, op7: i64, op8: i64) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpArbitraryFloatPowNINTEL(opbuf(b, 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1), result_type, r, op1, op2, op3, op4, op5, op6, op7, op8)) + append_elem(&b.ops, inst_OpArbitraryFloatPowNINTEL(opbuf(b, 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1), result_type, r, op1, op2, op3, op4, op5, op6, op7, op8)) return r } @@ -10364,7 +10364,7 @@ inst_OpLoopControlINTEL :: #force_inline proc "contextless" (buf: []Operand, op1 } loop_control_intel :: proc(b: ^Builder, op1: []i64) { - append(&b.ops, inst_OpLoopControlINTEL(opbuf(b, len(op1)), op1)) + append_elem(&b.ops, inst_OpLoopControlINTEL(opbuf(b, len(op1)), op1)) } inst_OpAliasDomainDeclINTEL :: #force_inline proc "contextless" (buf: []Operand, result: Id, op1: Maybe(Id)) -> Operation { @@ -10375,7 +10375,7 @@ inst_OpAliasDomainDeclINTEL :: #force_inline proc "contextless" (buf: []Operand, alias_domain_decl_intel :: proc(b: ^Builder, op1: Maybe(Id)) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpAliasDomainDeclINTEL(opbuf(b, 1), r, op1)) + append_elem(&b.ops, inst_OpAliasDomainDeclINTEL(opbuf(b, 1), r, op1)) return r } @@ -10388,7 +10388,7 @@ inst_OpAliasScopeDeclINTEL :: #force_inline proc "contextless" (buf: []Operand, alias_scope_decl_intel :: proc(b: ^Builder, op1: Id, op2: Maybe(Id)) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpAliasScopeDeclINTEL(opbuf(b, 1 + 1), r, op1, op2)) + append_elem(&b.ops, inst_OpAliasScopeDeclINTEL(opbuf(b, 1 + 1), r, op1, op2)) return r } @@ -10400,7 +10400,7 @@ inst_OpAliasScopeListDeclINTEL :: #force_inline proc "contextless" (buf: []Opera alias_scope_list_decl_intel :: proc(b: ^Builder, op1: []Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpAliasScopeListDeclINTEL(opbuf(b, len(op1)), r, op1)) + append_elem(&b.ops, inst_OpAliasScopeListDeclINTEL(opbuf(b, len(op1)), r, op1)) return r } @@ -10417,7 +10417,7 @@ inst_OpFixedSqrtALTERA :: #force_inline proc "contextless" (buf: []Operand, resu fixed_sqrt_altera :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: i64, op3: i64, op4: i64, op5: i64, op6: i64) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpFixedSqrtALTERA(opbuf(b, 1 + 1 + 1 + 1 + 1 + 1), result_type, r, op1, op2, op3, op4, op5, op6)) + append_elem(&b.ops, inst_OpFixedSqrtALTERA(opbuf(b, 1 + 1 + 1 + 1 + 1 + 1), result_type, r, op1, op2, op3, op4, op5, op6)) return r } @@ -10434,7 +10434,7 @@ inst_OpFixedRecipALTERA :: #force_inline proc "contextless" (buf: []Operand, res fixed_recip_altera :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: i64, op3: i64, op4: i64, op5: i64, op6: i64) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpFixedRecipALTERA(opbuf(b, 1 + 1 + 1 + 1 + 1 + 1), result_type, r, op1, op2, op3, op4, op5, op6)) + append_elem(&b.ops, inst_OpFixedRecipALTERA(opbuf(b, 1 + 1 + 1 + 1 + 1 + 1), result_type, r, op1, op2, op3, op4, op5, op6)) return r } @@ -10451,7 +10451,7 @@ inst_OpFixedRsqrtALTERA :: #force_inline proc "contextless" (buf: []Operand, res fixed_rsqrt_altera :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: i64, op3: i64, op4: i64, op5: i64, op6: i64) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpFixedRsqrtALTERA(opbuf(b, 1 + 1 + 1 + 1 + 1 + 1), result_type, r, op1, op2, op3, op4, op5, op6)) + append_elem(&b.ops, inst_OpFixedRsqrtALTERA(opbuf(b, 1 + 1 + 1 + 1 + 1 + 1), result_type, r, op1, op2, op3, op4, op5, op6)) return r } @@ -10468,7 +10468,7 @@ inst_OpFixedSinALTERA :: #force_inline proc "contextless" (buf: []Operand, resul fixed_sin_altera :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: i64, op3: i64, op4: i64, op5: i64, op6: i64) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpFixedSinALTERA(opbuf(b, 1 + 1 + 1 + 1 + 1 + 1), result_type, r, op1, op2, op3, op4, op5, op6)) + append_elem(&b.ops, inst_OpFixedSinALTERA(opbuf(b, 1 + 1 + 1 + 1 + 1 + 1), result_type, r, op1, op2, op3, op4, op5, op6)) return r } @@ -10485,7 +10485,7 @@ inst_OpFixedCosALTERA :: #force_inline proc "contextless" (buf: []Operand, resul fixed_cos_altera :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: i64, op3: i64, op4: i64, op5: i64, op6: i64) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpFixedCosALTERA(opbuf(b, 1 + 1 + 1 + 1 + 1 + 1), result_type, r, op1, op2, op3, op4, op5, op6)) + append_elem(&b.ops, inst_OpFixedCosALTERA(opbuf(b, 1 + 1 + 1 + 1 + 1 + 1), result_type, r, op1, op2, op3, op4, op5, op6)) return r } @@ -10502,7 +10502,7 @@ inst_OpFixedSinCosALTERA :: #force_inline proc "contextless" (buf: []Operand, re fixed_sin_cos_altera :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: i64, op3: i64, op4: i64, op5: i64, op6: i64) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpFixedSinCosALTERA(opbuf(b, 1 + 1 + 1 + 1 + 1 + 1), result_type, r, op1, op2, op3, op4, op5, op6)) + append_elem(&b.ops, inst_OpFixedSinCosALTERA(opbuf(b, 1 + 1 + 1 + 1 + 1 + 1), result_type, r, op1, op2, op3, op4, op5, op6)) return r } @@ -10519,7 +10519,7 @@ inst_OpFixedSinPiALTERA :: #force_inline proc "contextless" (buf: []Operand, res fixed_sin_pi_altera :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: i64, op3: i64, op4: i64, op5: i64, op6: i64) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpFixedSinPiALTERA(opbuf(b, 1 + 1 + 1 + 1 + 1 + 1), result_type, r, op1, op2, op3, op4, op5, op6)) + append_elem(&b.ops, inst_OpFixedSinPiALTERA(opbuf(b, 1 + 1 + 1 + 1 + 1 + 1), result_type, r, op1, op2, op3, op4, op5, op6)) return r } @@ -10536,7 +10536,7 @@ inst_OpFixedCosPiALTERA :: #force_inline proc "contextless" (buf: []Operand, res fixed_cos_pi_altera :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: i64, op3: i64, op4: i64, op5: i64, op6: i64) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpFixedCosPiALTERA(opbuf(b, 1 + 1 + 1 + 1 + 1 + 1), result_type, r, op1, op2, op3, op4, op5, op6)) + append_elem(&b.ops, inst_OpFixedCosPiALTERA(opbuf(b, 1 + 1 + 1 + 1 + 1 + 1), result_type, r, op1, op2, op3, op4, op5, op6)) return r } @@ -10553,7 +10553,7 @@ inst_OpFixedSinCosPiALTERA :: #force_inline proc "contextless" (buf: []Operand, fixed_sin_cos_pi_altera :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: i64, op3: i64, op4: i64, op5: i64, op6: i64) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpFixedSinCosPiALTERA(opbuf(b, 1 + 1 + 1 + 1 + 1 + 1), result_type, r, op1, op2, op3, op4, op5, op6)) + append_elem(&b.ops, inst_OpFixedSinCosPiALTERA(opbuf(b, 1 + 1 + 1 + 1 + 1 + 1), result_type, r, op1, op2, op3, op4, op5, op6)) return r } @@ -10570,7 +10570,7 @@ inst_OpFixedLogALTERA :: #force_inline proc "contextless" (buf: []Operand, resul fixed_log_altera :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: i64, op3: i64, op4: i64, op5: i64, op6: i64) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpFixedLogALTERA(opbuf(b, 1 + 1 + 1 + 1 + 1 + 1), result_type, r, op1, op2, op3, op4, op5, op6)) + append_elem(&b.ops, inst_OpFixedLogALTERA(opbuf(b, 1 + 1 + 1 + 1 + 1 + 1), result_type, r, op1, op2, op3, op4, op5, op6)) return r } @@ -10587,7 +10587,7 @@ inst_OpFixedExpALTERA :: #force_inline proc "contextless" (buf: []Operand, resul fixed_exp_altera :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: i64, op3: i64, op4: i64, op5: i64, op6: i64) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpFixedExpALTERA(opbuf(b, 1 + 1 + 1 + 1 + 1 + 1), result_type, r, op1, op2, op3, op4, op5, op6)) + append_elem(&b.ops, inst_OpFixedExpALTERA(opbuf(b, 1 + 1 + 1 + 1 + 1 + 1), result_type, r, op1, op2, op3, op4, op5, op6)) return r } @@ -10599,7 +10599,7 @@ inst_OpPtrCastToCrossWorkgroupALTERA :: #force_inline proc "contextless" (buf: [ ptr_cast_to_cross_workgroup_altera :: proc(b: ^Builder, result_type: Type_Ref, op1: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpPtrCastToCrossWorkgroupALTERA(opbuf(b, 1), result_type, r, op1)) + append_elem(&b.ops, inst_OpPtrCastToCrossWorkgroupALTERA(opbuf(b, 1), result_type, r, op1)) return r } @@ -10611,7 +10611,7 @@ inst_OpCrossWorkgroupCastToPtrALTERA :: #force_inline proc "contextless" (buf: [ cross_workgroup_cast_to_ptr_altera :: proc(b: ^Builder, result_type: Type_Ref, op1: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpCrossWorkgroupCastToPtrALTERA(opbuf(b, 1), result_type, r, op1)) + append_elem(&b.ops, inst_OpCrossWorkgroupCastToPtrALTERA(opbuf(b, 1), result_type, r, op1)) return r } @@ -10625,7 +10625,7 @@ inst_OpReadPipeBlockingALTERA :: #force_inline proc "contextless" (buf: []Operan } read_pipe_blocking_altera :: proc(b: ^Builder, op1: Id, op2: Id, op3: Id, op4: Id) { - append(&b.ops, inst_OpReadPipeBlockingALTERA(opbuf(b, 1 + 1 + 1 + 1), op1, op2, op3, op4)) + append_elem(&b.ops, inst_OpReadPipeBlockingALTERA(opbuf(b, 1 + 1 + 1 + 1), op1, op2, op3, op4)) } inst_OpWritePipeBlockingALTERA :: #force_inline proc "contextless" (buf: []Operand, op1: Id, op2: Id, op3: Id, op4: Id) -> Operation { @@ -10638,7 +10638,7 @@ inst_OpWritePipeBlockingALTERA :: #force_inline proc "contextless" (buf: []Opera } write_pipe_blocking_altera :: proc(b: ^Builder, op1: Id, op2: Id, op3: Id, op4: Id) { - append(&b.ops, inst_OpWritePipeBlockingALTERA(opbuf(b, 1 + 1 + 1 + 1), op1, op2, op3, op4)) + append_elem(&b.ops, inst_OpWritePipeBlockingALTERA(opbuf(b, 1 + 1 + 1 + 1), op1, op2, op3, op4)) } inst_OpFPGARegALTERA :: #force_inline proc "contextless" (buf: []Operand, result_type: Type_Ref, result: Id, op1: Id) -> Operation { @@ -10649,7 +10649,7 @@ inst_OpFPGARegALTERA :: #force_inline proc "contextless" (buf: []Operand, result fpga_reg_altera :: proc(b: ^Builder, result_type: Type_Ref, op1: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpFPGARegALTERA(opbuf(b, 1), result_type, r, op1)) + append_elem(&b.ops, inst_OpFPGARegALTERA(opbuf(b, 1), result_type, r, op1)) return r } @@ -10661,7 +10661,7 @@ inst_OpRayQueryGetRayTMinKHR :: #force_inline proc "contextless" (buf: []Operand ray_query_get_ray_t_min_khr :: proc(b: ^Builder, result_type: Type_Ref, op1: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpRayQueryGetRayTMinKHR(opbuf(b, 1), result_type, r, op1)) + append_elem(&b.ops, inst_OpRayQueryGetRayTMinKHR(opbuf(b, 1), result_type, r, op1)) return r } @@ -10673,7 +10673,7 @@ inst_OpRayQueryGetRayFlagsKHR :: #force_inline proc "contextless" (buf: []Operan ray_query_get_ray_flags_khr :: proc(b: ^Builder, result_type: Type_Ref, op1: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpRayQueryGetRayFlagsKHR(opbuf(b, 1), result_type, r, op1)) + append_elem(&b.ops, inst_OpRayQueryGetRayFlagsKHR(opbuf(b, 1), result_type, r, op1)) return r } @@ -10686,7 +10686,7 @@ inst_OpRayQueryGetIntersectionTKHR :: #force_inline proc "contextless" (buf: []O ray_query_get_intersection_tkhr :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpRayQueryGetIntersectionTKHR(opbuf(b, 1 + 1), result_type, r, op1, op2)) + append_elem(&b.ops, inst_OpRayQueryGetIntersectionTKHR(opbuf(b, 1 + 1), result_type, r, op1, op2)) return r } @@ -10699,7 +10699,7 @@ inst_OpRayQueryGetIntersectionInstanceCustomIndexKHR :: #force_inline proc "cont ray_query_get_intersection_instance_custom_index_khr :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpRayQueryGetIntersectionInstanceCustomIndexKHR(opbuf(b, 1 + 1), result_type, r, op1, op2)) + append_elem(&b.ops, inst_OpRayQueryGetIntersectionInstanceCustomIndexKHR(opbuf(b, 1 + 1), result_type, r, op1, op2)) return r } @@ -10712,7 +10712,7 @@ inst_OpRayQueryGetIntersectionInstanceIdKHR :: #force_inline proc "contextless" ray_query_get_intersection_instance_id_khr :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpRayQueryGetIntersectionInstanceIdKHR(opbuf(b, 1 + 1), result_type, r, op1, op2)) + append_elem(&b.ops, inst_OpRayQueryGetIntersectionInstanceIdKHR(opbuf(b, 1 + 1), result_type, r, op1, op2)) return r } @@ -10725,7 +10725,7 @@ inst_OpRayQueryGetIntersectionInstanceShaderBindingTableRecordOffsetKHR :: #forc ray_query_get_intersection_instance_shader_binding_table_record_offset_khr :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpRayQueryGetIntersectionInstanceShaderBindingTableRecordOffsetKHR(opbuf(b, 1 + 1), result_type, r, op1, op2)) + append_elem(&b.ops, inst_OpRayQueryGetIntersectionInstanceShaderBindingTableRecordOffsetKHR(opbuf(b, 1 + 1), result_type, r, op1, op2)) return r } @@ -10738,7 +10738,7 @@ inst_OpRayQueryGetIntersectionGeometryIndexKHR :: #force_inline proc "contextles ray_query_get_intersection_geometry_index_khr :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpRayQueryGetIntersectionGeometryIndexKHR(opbuf(b, 1 + 1), result_type, r, op1, op2)) + append_elem(&b.ops, inst_OpRayQueryGetIntersectionGeometryIndexKHR(opbuf(b, 1 + 1), result_type, r, op1, op2)) return r } @@ -10751,7 +10751,7 @@ inst_OpRayQueryGetIntersectionPrimitiveIndexKHR :: #force_inline proc "contextle ray_query_get_intersection_primitive_index_khr :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpRayQueryGetIntersectionPrimitiveIndexKHR(opbuf(b, 1 + 1), result_type, r, op1, op2)) + append_elem(&b.ops, inst_OpRayQueryGetIntersectionPrimitiveIndexKHR(opbuf(b, 1 + 1), result_type, r, op1, op2)) return r } @@ -10764,7 +10764,7 @@ inst_OpRayQueryGetIntersectionBarycentricsKHR :: #force_inline proc "contextless ray_query_get_intersection_barycentrics_khr :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpRayQueryGetIntersectionBarycentricsKHR(opbuf(b, 1 + 1), result_type, r, op1, op2)) + append_elem(&b.ops, inst_OpRayQueryGetIntersectionBarycentricsKHR(opbuf(b, 1 + 1), result_type, r, op1, op2)) return r } @@ -10777,7 +10777,7 @@ inst_OpRayQueryGetIntersectionFrontFaceKHR :: #force_inline proc "contextless" ( ray_query_get_intersection_front_face_khr :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpRayQueryGetIntersectionFrontFaceKHR(opbuf(b, 1 + 1), result_type, r, op1, op2)) + append_elem(&b.ops, inst_OpRayQueryGetIntersectionFrontFaceKHR(opbuf(b, 1 + 1), result_type, r, op1, op2)) return r } @@ -10789,7 +10789,7 @@ inst_OpRayQueryGetIntersectionCandidateAABBOpaqueKHR :: #force_inline proc "cont ray_query_get_intersection_candidate_aabb_opaque_khr :: proc(b: ^Builder, result_type: Type_Ref, op1: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpRayQueryGetIntersectionCandidateAABBOpaqueKHR(opbuf(b, 1), result_type, r, op1)) + append_elem(&b.ops, inst_OpRayQueryGetIntersectionCandidateAABBOpaqueKHR(opbuf(b, 1), result_type, r, op1)) return r } @@ -10802,7 +10802,7 @@ inst_OpRayQueryGetIntersectionObjectRayDirectionKHR :: #force_inline proc "conte ray_query_get_intersection_object_ray_direction_khr :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpRayQueryGetIntersectionObjectRayDirectionKHR(opbuf(b, 1 + 1), result_type, r, op1, op2)) + append_elem(&b.ops, inst_OpRayQueryGetIntersectionObjectRayDirectionKHR(opbuf(b, 1 + 1), result_type, r, op1, op2)) return r } @@ -10815,7 +10815,7 @@ inst_OpRayQueryGetIntersectionObjectRayOriginKHR :: #force_inline proc "contextl ray_query_get_intersection_object_ray_origin_khr :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpRayQueryGetIntersectionObjectRayOriginKHR(opbuf(b, 1 + 1), result_type, r, op1, op2)) + append_elem(&b.ops, inst_OpRayQueryGetIntersectionObjectRayOriginKHR(opbuf(b, 1 + 1), result_type, r, op1, op2)) return r } @@ -10827,7 +10827,7 @@ inst_OpRayQueryGetWorldRayDirectionKHR :: #force_inline proc "contextless" (buf: ray_query_get_world_ray_direction_khr :: proc(b: ^Builder, result_type: Type_Ref, op1: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpRayQueryGetWorldRayDirectionKHR(opbuf(b, 1), result_type, r, op1)) + append_elem(&b.ops, inst_OpRayQueryGetWorldRayDirectionKHR(opbuf(b, 1), result_type, r, op1)) return r } @@ -10839,7 +10839,7 @@ inst_OpRayQueryGetWorldRayOriginKHR :: #force_inline proc "contextless" (buf: [] ray_query_get_world_ray_origin_khr :: proc(b: ^Builder, result_type: Type_Ref, op1: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpRayQueryGetWorldRayOriginKHR(opbuf(b, 1), result_type, r, op1)) + append_elem(&b.ops, inst_OpRayQueryGetWorldRayOriginKHR(opbuf(b, 1), result_type, r, op1)) return r } @@ -10852,7 +10852,7 @@ inst_OpRayQueryGetIntersectionObjectToWorldKHR :: #force_inline proc "contextles ray_query_get_intersection_object_to_world_khr :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpRayQueryGetIntersectionObjectToWorldKHR(opbuf(b, 1 + 1), result_type, r, op1, op2)) + append_elem(&b.ops, inst_OpRayQueryGetIntersectionObjectToWorldKHR(opbuf(b, 1 + 1), result_type, r, op1, op2)) return r } @@ -10865,7 +10865,7 @@ inst_OpRayQueryGetIntersectionWorldToObjectKHR :: #force_inline proc "contextles ray_query_get_intersection_world_to_object_khr :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpRayQueryGetIntersectionWorldToObjectKHR(opbuf(b, 1 + 1), result_type, r, op1, op2)) + append_elem(&b.ops, inst_OpRayQueryGetIntersectionWorldToObjectKHR(opbuf(b, 1 + 1), result_type, r, op1, op2)) return r } @@ -10880,7 +10880,7 @@ inst_OpAtomicFAddEXT :: #force_inline proc "contextless" (buf: []Operand, result atomic_f_add_ext :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Id, op3: Id, op4: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpAtomicFAddEXT(opbuf(b, 1 + 1 + 1 + 1), result_type, r, op1, op2, op3, op4)) + append_elem(&b.ops, inst_OpAtomicFAddEXT(opbuf(b, 1 + 1 + 1 + 1), result_type, r, op1, op2, op3, op4)) return r } @@ -10892,7 +10892,7 @@ inst_OpTypeBufferSurfaceINTEL :: #force_inline proc "contextless" (buf: []Operan type_buffer_surface_intel :: proc(b: ^Builder, op1: Access_Qualifier) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpTypeBufferSurfaceINTEL(opbuf(b, 1), r, op1)) + append_elem(&b.ops, inst_OpTypeBufferSurfaceINTEL(opbuf(b, 1), r, op1)) return r } @@ -10903,7 +10903,7 @@ inst_OpTypeStructContinuedINTEL :: #force_inline proc "contextless" (buf: []Oper } type_struct_continued_intel :: proc(b: ^Builder, op1: []Id) { - append(&b.ops, inst_OpTypeStructContinuedINTEL(opbuf(b, len(op1)), op1)) + append_elem(&b.ops, inst_OpTypeStructContinuedINTEL(opbuf(b, len(op1)), op1)) } inst_OpConstantCompositeContinuedINTEL :: #force_inline proc "contextless" (buf: []Operand, op1: []Id) -> Operation { @@ -10913,7 +10913,7 @@ inst_OpConstantCompositeContinuedINTEL :: #force_inline proc "contextless" (buf: } constant_composite_continued_intel :: proc(b: ^Builder, op1: []Id) { - append(&b.ops, inst_OpConstantCompositeContinuedINTEL(opbuf(b, len(op1)), op1)) + append_elem(&b.ops, inst_OpConstantCompositeContinuedINTEL(opbuf(b, len(op1)), op1)) } inst_OpSpecConstantCompositeContinuedINTEL :: #force_inline proc "contextless" (buf: []Operand, op1: []Id) -> Operation { @@ -10923,7 +10923,7 @@ inst_OpSpecConstantCompositeContinuedINTEL :: #force_inline proc "contextless" ( } spec_constant_composite_continued_intel :: proc(b: ^Builder, op1: []Id) { - append(&b.ops, inst_OpSpecConstantCompositeContinuedINTEL(opbuf(b, len(op1)), op1)) + append_elem(&b.ops, inst_OpSpecConstantCompositeContinuedINTEL(opbuf(b, len(op1)), op1)) } inst_OpCompositeConstructContinuedINTEL :: #force_inline proc "contextless" (buf: []Operand, op1: []Id) -> Operation { @@ -10933,7 +10933,7 @@ inst_OpCompositeConstructContinuedINTEL :: #force_inline proc "contextless" (buf } composite_construct_continued_intel :: proc(b: ^Builder, op1: []Id) { - append(&b.ops, inst_OpCompositeConstructContinuedINTEL(opbuf(b, len(op1)), op1)) + append_elem(&b.ops, inst_OpCompositeConstructContinuedINTEL(opbuf(b, len(op1)), op1)) } inst_OpConvertFToBF16INTEL :: #force_inline proc "contextless" (buf: []Operand, result_type: Type_Ref, result: Id, op1: Id) -> Operation { @@ -10944,7 +10944,7 @@ inst_OpConvertFToBF16INTEL :: #force_inline proc "contextless" (buf: []Operand, convert_f_to_bf16_intel :: proc(b: ^Builder, result_type: Type_Ref, op1: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpConvertFToBF16INTEL(opbuf(b, 1), result_type, r, op1)) + append_elem(&b.ops, inst_OpConvertFToBF16INTEL(opbuf(b, 1), result_type, r, op1)) return r } @@ -10956,7 +10956,7 @@ inst_OpConvertBF16ToFINTEL :: #force_inline proc "contextless" (buf: []Operand, convert_bf16_to_fintel :: proc(b: ^Builder, result_type: Type_Ref, op1: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpConvertBF16ToFINTEL(opbuf(b, 1), result_type, r, op1)) + append_elem(&b.ops, inst_OpConvertBF16ToFINTEL(opbuf(b, 1), result_type, r, op1)) return r } @@ -10969,7 +10969,7 @@ inst_OpControlBarrierArriveEXT :: #force_inline proc "contextless" (buf: []Opera } control_barrier_arrive_ext :: proc(b: ^Builder, op1: Id, op2: Id, op3: Id) { - append(&b.ops, inst_OpControlBarrierArriveEXT(opbuf(b, 1 + 1 + 1), op1, op2, op3)) + append_elem(&b.ops, inst_OpControlBarrierArriveEXT(opbuf(b, 1 + 1 + 1), op1, op2, op3)) } inst_OpControlBarrierWaitEXT :: #force_inline proc "contextless" (buf: []Operand, op1: Id, op2: Id, op3: Id) -> Operation { @@ -10981,7 +10981,7 @@ inst_OpControlBarrierWaitEXT :: #force_inline proc "contextless" (buf: []Operand } control_barrier_wait_ext :: proc(b: ^Builder, op1: Id, op2: Id, op3: Id) { - append(&b.ops, inst_OpControlBarrierWaitEXT(opbuf(b, 1 + 1 + 1), op1, op2, op3)) + append_elem(&b.ops, inst_OpControlBarrierWaitEXT(opbuf(b, 1 + 1 + 1), op1, op2, op3)) } inst_OpArithmeticFenceEXT :: #force_inline proc "contextless" (buf: []Operand, result_type: Type_Ref, result: Id, op1: Id) -> Operation { @@ -10992,7 +10992,7 @@ inst_OpArithmeticFenceEXT :: #force_inline proc "contextless" (buf: []Operand, r arithmetic_fence_ext :: proc(b: ^Builder, result_type: Type_Ref, op1: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpArithmeticFenceEXT(opbuf(b, 1), result_type, r, op1)) + append_elem(&b.ops, inst_OpArithmeticFenceEXT(opbuf(b, 1), result_type, r, op1)) return r } @@ -11008,7 +11008,7 @@ inst_OpTaskSequenceCreateALTERA :: #force_inline proc "contextless" (buf: []Oper task_sequence_create_altera :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: i64, op3: i64, op4: i64, op5: i64) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpTaskSequenceCreateALTERA(opbuf(b, 1 + 1 + 1 + 1 + 1), result_type, r, op1, op2, op3, op4, op5)) + append_elem(&b.ops, inst_OpTaskSequenceCreateALTERA(opbuf(b, 1 + 1 + 1 + 1 + 1), result_type, r, op1, op2, op3, op4, op5)) return r } @@ -11020,7 +11020,7 @@ inst_OpTaskSequenceAsyncALTERA :: #force_inline proc "contextless" (buf: []Opera } task_sequence_async_altera :: proc(b: ^Builder, op1: Id, op2: []Id) { - append(&b.ops, inst_OpTaskSequenceAsyncALTERA(opbuf(b, 1 + len(op2)), op1, op2)) + append_elem(&b.ops, inst_OpTaskSequenceAsyncALTERA(opbuf(b, 1 + len(op2)), op1, op2)) } inst_OpTaskSequenceGetALTERA :: #force_inline proc "contextless" (buf: []Operand, result_type: Type_Ref, result: Id, op1: Id) -> Operation { @@ -11031,7 +11031,7 @@ inst_OpTaskSequenceGetALTERA :: #force_inline proc "contextless" (buf: []Operand task_sequence_get_altera :: proc(b: ^Builder, result_type: Type_Ref, op1: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpTaskSequenceGetALTERA(opbuf(b, 1), result_type, r, op1)) + append_elem(&b.ops, inst_OpTaskSequenceGetALTERA(opbuf(b, 1), result_type, r, op1)) return r } @@ -11042,7 +11042,7 @@ inst_OpTaskSequenceReleaseALTERA :: #force_inline proc "contextless" (buf: []Ope } task_sequence_release_altera :: proc(b: ^Builder, op1: Id) { - append(&b.ops, inst_OpTaskSequenceReleaseALTERA(opbuf(b, 1), op1)) + append_elem(&b.ops, inst_OpTaskSequenceReleaseALTERA(opbuf(b, 1), op1)) } inst_OpTypeTaskSequenceALTERA :: #force_inline proc "contextless" (result: Id) -> Operation { @@ -11051,7 +11051,7 @@ inst_OpTypeTaskSequenceALTERA :: #force_inline proc "contextless" (result: Id) - type_task_sequence_altera :: proc(b: ^Builder) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpTypeTaskSequenceALTERA(r)) + append_elem(&b.ops, inst_OpTypeTaskSequenceALTERA(r)) return r } @@ -11064,7 +11064,7 @@ inst_OpSubgroupBlockPrefetchINTEL :: #force_inline proc "contextless" (buf: []Op } subgroup_block_prefetch_intel :: proc(b: ^Builder, op1: Id, op2: Id, op3: Maybe(Memory_Access)) { - append(&b.ops, inst_OpSubgroupBlockPrefetchINTEL(opbuf(b, 1 + 1 + 1), op1, op2, op3)) + append_elem(&b.ops, inst_OpSubgroupBlockPrefetchINTEL(opbuf(b, 1 + 1 + 1), op1, op2, op3)) } inst_OpSubgroup2DBlockLoadINTEL :: #force_inline proc "contextless" (buf: []Operand, op1: Id, op2: Id, op3: Id, op4: Id, op5: Id, op6: Id, op7: Id, op8: Id, op9: Id, op10: Id) -> Operation { @@ -11083,7 +11083,7 @@ inst_OpSubgroup2DBlockLoadINTEL :: #force_inline proc "contextless" (buf: []Oper } subgroup2_d_block_load_intel :: proc(b: ^Builder, op1: Id, op2: Id, op3: Id, op4: Id, op5: Id, op6: Id, op7: Id, op8: Id, op9: Id, op10: Id) { - append(&b.ops, inst_OpSubgroup2DBlockLoadINTEL(opbuf(b, 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1), op1, op2, op3, op4, op5, op6, op7, op8, op9, op10)) + append_elem(&b.ops, inst_OpSubgroup2DBlockLoadINTEL(opbuf(b, 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1), op1, op2, op3, op4, op5, op6, op7, op8, op9, op10)) } inst_OpSubgroup2DBlockLoadTransformINTEL :: #force_inline proc "contextless" (buf: []Operand, op1: Id, op2: Id, op3: Id, op4: Id, op5: Id, op6: Id, op7: Id, op8: Id, op9: Id, op10: Id) -> Operation { @@ -11102,7 +11102,7 @@ inst_OpSubgroup2DBlockLoadTransformINTEL :: #force_inline proc "contextless" (bu } subgroup2_d_block_load_transform_intel :: proc(b: ^Builder, op1: Id, op2: Id, op3: Id, op4: Id, op5: Id, op6: Id, op7: Id, op8: Id, op9: Id, op10: Id) { - append(&b.ops, inst_OpSubgroup2DBlockLoadTransformINTEL(opbuf(b, 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1), op1, op2, op3, op4, op5, op6, op7, op8, op9, op10)) + append_elem(&b.ops, inst_OpSubgroup2DBlockLoadTransformINTEL(opbuf(b, 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1), op1, op2, op3, op4, op5, op6, op7, op8, op9, op10)) } inst_OpSubgroup2DBlockLoadTransposeINTEL :: #force_inline proc "contextless" (buf: []Operand, op1: Id, op2: Id, op3: Id, op4: Id, op5: Id, op6: Id, op7: Id, op8: Id, op9: Id, op10: Id) -> Operation { @@ -11121,7 +11121,7 @@ inst_OpSubgroup2DBlockLoadTransposeINTEL :: #force_inline proc "contextless" (bu } subgroup2_d_block_load_transpose_intel :: proc(b: ^Builder, op1: Id, op2: Id, op3: Id, op4: Id, op5: Id, op6: Id, op7: Id, op8: Id, op9: Id, op10: Id) { - append(&b.ops, inst_OpSubgroup2DBlockLoadTransposeINTEL(opbuf(b, 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1), op1, op2, op3, op4, op5, op6, op7, op8, op9, op10)) + append_elem(&b.ops, inst_OpSubgroup2DBlockLoadTransposeINTEL(opbuf(b, 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1), op1, op2, op3, op4, op5, op6, op7, op8, op9, op10)) } inst_OpSubgroup2DBlockPrefetchINTEL :: #force_inline proc "contextless" (buf: []Operand, op1: Id, op2: Id, op3: Id, op4: Id, op5: Id, op6: Id, op7: Id, op8: Id, op9: Id) -> Operation { @@ -11139,7 +11139,7 @@ inst_OpSubgroup2DBlockPrefetchINTEL :: #force_inline proc "contextless" (buf: [] } subgroup2_d_block_prefetch_intel :: proc(b: ^Builder, op1: Id, op2: Id, op3: Id, op4: Id, op5: Id, op6: Id, op7: Id, op8: Id, op9: Id) { - append(&b.ops, inst_OpSubgroup2DBlockPrefetchINTEL(opbuf(b, 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1), op1, op2, op3, op4, op5, op6, op7, op8, op9)) + append_elem(&b.ops, inst_OpSubgroup2DBlockPrefetchINTEL(opbuf(b, 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1), op1, op2, op3, op4, op5, op6, op7, op8, op9)) } inst_OpSubgroup2DBlockStoreINTEL :: #force_inline proc "contextless" (buf: []Operand, op1: Id, op2: Id, op3: Id, op4: Id, op5: Id, op6: Id, op7: Id, op8: Id, op9: Id, op10: Id) -> Operation { @@ -11158,7 +11158,7 @@ inst_OpSubgroup2DBlockStoreINTEL :: #force_inline proc "contextless" (buf: []Ope } subgroup2_d_block_store_intel :: proc(b: ^Builder, op1: Id, op2: Id, op3: Id, op4: Id, op5: Id, op6: Id, op7: Id, op8: Id, op9: Id, op10: Id) { - append(&b.ops, inst_OpSubgroup2DBlockStoreINTEL(opbuf(b, 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1), op1, op2, op3, op4, op5, op6, op7, op8, op9, op10)) + append_elem(&b.ops, inst_OpSubgroup2DBlockStoreINTEL(opbuf(b, 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1), op1, op2, op3, op4, op5, op6, op7, op8, op9, op10)) } inst_OpSubgroupMatrixMultiplyAccumulateINTEL :: #force_inline proc "contextless" (buf: []Operand, result_type: Type_Ref, result: Id, op1: Id, op2: Id, op3: Id, op4: Id, op5: Maybe(Matrix_Multiply_Accumulate_Operands)) -> Operation { @@ -11173,7 +11173,7 @@ inst_OpSubgroupMatrixMultiplyAccumulateINTEL :: #force_inline proc "contextless" subgroup_matrix_multiply_accumulate_intel :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Id, op3: Id, op4: Id, op5: Maybe(Matrix_Multiply_Accumulate_Operands)) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpSubgroupMatrixMultiplyAccumulateINTEL(opbuf(b, 1 + 1 + 1 + 1 + 1), result_type, r, op1, op2, op3, op4, op5)) + append_elem(&b.ops, inst_OpSubgroupMatrixMultiplyAccumulateINTEL(opbuf(b, 1 + 1 + 1 + 1 + 1), result_type, r, op1, op2, op3, op4, op5)) return r } @@ -11188,7 +11188,7 @@ inst_OpBitwiseFunctionINTEL :: #force_inline proc "contextless" (buf: []Operand, bitwise_function_intel :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Id, op3: Id, op4: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpBitwiseFunctionINTEL(opbuf(b, 1 + 1 + 1 + 1), result_type, r, op1, op2, op3, op4)) + append_elem(&b.ops, inst_OpBitwiseFunctionINTEL(opbuf(b, 1 + 1 + 1 + 1), result_type, r, op1, op2, op3, op4)) return r } @@ -11201,7 +11201,7 @@ inst_OpUntypedVariableLengthArrayINTEL :: #force_inline proc "contextless" (buf: untyped_variable_length_array_intel :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpUntypedVariableLengthArrayINTEL(opbuf(b, 1 + 1), result_type, r, op1, op2)) + append_elem(&b.ops, inst_OpUntypedVariableLengthArrayINTEL(opbuf(b, 1 + 1), result_type, r, op1, op2)) return r } @@ -11213,7 +11213,7 @@ inst_OpConditionalExtensionINTEL :: #force_inline proc "contextless" (buf: []Ope } conditional_extension_intel :: proc(b: ^Builder, op1: Id, op2: string) { - append(&b.ops, inst_OpConditionalExtensionINTEL(opbuf(b, 1 + (len(op2) + 4) / 4), op1, op2)) + append_elem(&b.ops, inst_OpConditionalExtensionINTEL(opbuf(b, 1 + (len(op2) + 4) / 4), op1, op2)) } inst_OpConditionalEntryPointINTEL :: #force_inline proc "contextless" (buf: []Operand, op1: Id, op2: Execution_Model, op3: Id, op4: string, op5: []Id) -> Operation { @@ -11227,7 +11227,7 @@ inst_OpConditionalEntryPointINTEL :: #force_inline proc "contextless" (buf: []Op } conditional_entry_point_intel :: proc(b: ^Builder, op1: Id, op2: Execution_Model, op3: Id, op4: string, op5: []Id) { - append(&b.ops, inst_OpConditionalEntryPointINTEL(opbuf(b, 1 + 1 + 1 + (len(op4) + 4) / 4 + len(op5)), op1, op2, op3, op4, op5)) + append_elem(&b.ops, inst_OpConditionalEntryPointINTEL(opbuf(b, 1 + 1 + 1 + (len(op4) + 4) / 4 + len(op5)), op1, op2, op3, op4, op5)) } inst_OpConditionalCapabilityINTEL :: #force_inline proc "contextless" (buf: []Operand, op1: Id, op2: Capability) -> Operation { @@ -11238,7 +11238,7 @@ inst_OpConditionalCapabilityINTEL :: #force_inline proc "contextless" (buf: []Op } conditional_capability_intel :: proc(b: ^Builder, op1: Id, op2: Capability) { - append(&b.ops, inst_OpConditionalCapabilityINTEL(opbuf(b, 1 + 1), op1, op2)) + append_elem(&b.ops, inst_OpConditionalCapabilityINTEL(opbuf(b, 1 + 1), op1, op2)) } inst_OpSpecConstantTargetINTEL :: #force_inline proc "contextless" (buf: []Operand, result_type: Type_Ref, result: Id, op1: i64, op2: []i64) -> Operation { @@ -11250,7 +11250,7 @@ inst_OpSpecConstantTargetINTEL :: #force_inline proc "contextless" (buf: []Opera spec_constant_target_intel :: proc(b: ^Builder, result_type: Type_Ref, op1: i64, op2: []i64) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpSpecConstantTargetINTEL(opbuf(b, 1 + len(op2)), result_type, r, op1, op2)) + append_elem(&b.ops, inst_OpSpecConstantTargetINTEL(opbuf(b, 1 + len(op2)), result_type, r, op1, op2)) return r } @@ -11265,7 +11265,7 @@ inst_OpSpecConstantArchitectureINTEL :: #force_inline proc "contextless" (buf: [ spec_constant_architecture_intel :: proc(b: ^Builder, result_type: Type_Ref, op1: i64, op2: i64, op3: i64, op4: i64) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpSpecConstantArchitectureINTEL(opbuf(b, 1 + 1 + 1 + 1), result_type, r, op1, op2, op3, op4)) + append_elem(&b.ops, inst_OpSpecConstantArchitectureINTEL(opbuf(b, 1 + 1 + 1 + 1), result_type, r, op1, op2, op3, op4)) return r } @@ -11277,7 +11277,7 @@ inst_OpSpecConstantCapabilitiesINTEL :: #force_inline proc "contextless" (buf: [ spec_constant_capabilities_intel :: proc(b: ^Builder, result_type: Type_Ref, op1: []Capability) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpSpecConstantCapabilitiesINTEL(opbuf(b, len(op1)), result_type, r, op1)) + append_elem(&b.ops, inst_OpSpecConstantCapabilitiesINTEL(opbuf(b, len(op1)), result_type, r, op1)) return r } @@ -11289,7 +11289,7 @@ inst_OpConditionalCopyObjectINTEL :: #force_inline proc "contextless" (buf: []Op conditional_copy_object_intel :: proc(b: ^Builder, result_type: Type_Ref, op1: []Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpConditionalCopyObjectINTEL(opbuf(b, len(op1)), result_type, r, op1)) + append_elem(&b.ops, inst_OpConditionalCopyObjectINTEL(opbuf(b, len(op1)), result_type, r, op1)) return r } @@ -11304,7 +11304,7 @@ inst_OpPredicatedLoadINTEL :: #force_inline proc "contextless" (buf: []Operand, predicated_load_intel :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Id, op3: Id, op4: Maybe(Memory_Access)) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpPredicatedLoadINTEL(opbuf(b, 1 + 1 + 1 + 1), result_type, r, op1, op2, op3, op4)) + append_elem(&b.ops, inst_OpPredicatedLoadINTEL(opbuf(b, 1 + 1 + 1 + 1), result_type, r, op1, op2, op3, op4)) return r } @@ -11318,7 +11318,7 @@ inst_OpPredicatedStoreINTEL :: #force_inline proc "contextless" (buf: []Operand, } predicated_store_intel :: proc(b: ^Builder, op1: Id, op2: Id, op3: Id, op4: Maybe(Memory_Access)) { - append(&b.ops, inst_OpPredicatedStoreINTEL(opbuf(b, 1 + 1 + 1 + 1), op1, op2, op3, op4)) + append_elem(&b.ops, inst_OpPredicatedStoreINTEL(opbuf(b, 1 + 1 + 1 + 1), op1, op2, op3, op4)) } inst_OpGroupIMulKHR :: #force_inline proc "contextless" (buf: []Operand, result_type: Type_Ref, result: Id, op1: Id, op2: Group_Operation, op3: Id) -> Operation { @@ -11331,7 +11331,7 @@ inst_OpGroupIMulKHR :: #force_inline proc "contextless" (buf: []Operand, result_ group_i_mul_khr :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Group_Operation, op3: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpGroupIMulKHR(opbuf(b, 1 + 1 + 1), result_type, r, op1, op2, op3)) + append_elem(&b.ops, inst_OpGroupIMulKHR(opbuf(b, 1 + 1 + 1), result_type, r, op1, op2, op3)) return r } @@ -11345,7 +11345,7 @@ inst_OpGroupFMulKHR :: #force_inline proc "contextless" (buf: []Operand, result_ group_f_mul_khr :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Group_Operation, op3: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpGroupFMulKHR(opbuf(b, 1 + 1 + 1), result_type, r, op1, op2, op3)) + append_elem(&b.ops, inst_OpGroupFMulKHR(opbuf(b, 1 + 1 + 1), result_type, r, op1, op2, op3)) return r } @@ -11359,7 +11359,7 @@ inst_OpGroupBitwiseAndKHR :: #force_inline proc "contextless" (buf: []Operand, r group_bitwise_and_khr :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Group_Operation, op3: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpGroupBitwiseAndKHR(opbuf(b, 1 + 1 + 1), result_type, r, op1, op2, op3)) + append_elem(&b.ops, inst_OpGroupBitwiseAndKHR(opbuf(b, 1 + 1 + 1), result_type, r, op1, op2, op3)) return r } @@ -11373,7 +11373,7 @@ inst_OpGroupBitwiseOrKHR :: #force_inline proc "contextless" (buf: []Operand, re group_bitwise_or_khr :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Group_Operation, op3: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpGroupBitwiseOrKHR(opbuf(b, 1 + 1 + 1), result_type, r, op1, op2, op3)) + append_elem(&b.ops, inst_OpGroupBitwiseOrKHR(opbuf(b, 1 + 1 + 1), result_type, r, op1, op2, op3)) return r } @@ -11387,7 +11387,7 @@ inst_OpGroupBitwiseXorKHR :: #force_inline proc "contextless" (buf: []Operand, r group_bitwise_xor_khr :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Group_Operation, op3: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpGroupBitwiseXorKHR(opbuf(b, 1 + 1 + 1), result_type, r, op1, op2, op3)) + append_elem(&b.ops, inst_OpGroupBitwiseXorKHR(opbuf(b, 1 + 1 + 1), result_type, r, op1, op2, op3)) return r } @@ -11401,7 +11401,7 @@ inst_OpGroupLogicalAndKHR :: #force_inline proc "contextless" (buf: []Operand, r group_logical_and_khr :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Group_Operation, op3: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpGroupLogicalAndKHR(opbuf(b, 1 + 1 + 1), result_type, r, op1, op2, op3)) + append_elem(&b.ops, inst_OpGroupLogicalAndKHR(opbuf(b, 1 + 1 + 1), result_type, r, op1, op2, op3)) return r } @@ -11415,7 +11415,7 @@ inst_OpGroupLogicalOrKHR :: #force_inline proc "contextless" (buf: []Operand, re group_logical_or_khr :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Group_Operation, op3: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpGroupLogicalOrKHR(opbuf(b, 1 + 1 + 1), result_type, r, op1, op2, op3)) + append_elem(&b.ops, inst_OpGroupLogicalOrKHR(opbuf(b, 1 + 1 + 1), result_type, r, op1, op2, op3)) return r } @@ -11429,7 +11429,7 @@ inst_OpGroupLogicalXorKHR :: #force_inline proc "contextless" (buf: []Operand, r group_logical_xor_khr :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Group_Operation, op3: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpGroupLogicalXorKHR(opbuf(b, 1 + 1 + 1), result_type, r, op1, op2, op3)) + append_elem(&b.ops, inst_OpGroupLogicalXorKHR(opbuf(b, 1 + 1 + 1), result_type, r, op1, op2, op3)) return r } @@ -11441,7 +11441,7 @@ inst_OpRoundFToTF32INTEL :: #force_inline proc "contextless" (buf: []Operand, re round_f_to_tf32_intel :: proc(b: ^Builder, result_type: Type_Ref, op1: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpRoundFToTF32INTEL(opbuf(b, 1), result_type, r, op1)) + append_elem(&b.ops, inst_OpRoundFToTF32INTEL(opbuf(b, 1), result_type, r, op1)) return r } @@ -11456,7 +11456,7 @@ inst_OpMaskedGatherINTEL :: #force_inline proc "contextless" (buf: []Operand, re masked_gather_intel :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: i64, op3: Id, op4: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpMaskedGatherINTEL(opbuf(b, 1 + 1 + 1 + 1), result_type, r, op1, op2, op3, op4)) + append_elem(&b.ops, inst_OpMaskedGatherINTEL(opbuf(b, 1 + 1 + 1 + 1), result_type, r, op1, op2, op3, op4)) return r } @@ -11470,7 +11470,7 @@ inst_OpMaskedScatterINTEL :: #force_inline proc "contextless" (buf: []Operand, o } masked_scatter_intel :: proc(b: ^Builder, op1: Id, op2: Id, op3: i64, op4: Id) { - append(&b.ops, inst_OpMaskedScatterINTEL(opbuf(b, 1 + 1 + 1 + 1), op1, op2, op3, op4)) + append_elem(&b.ops, inst_OpMaskedScatterINTEL(opbuf(b, 1 + 1 + 1 + 1), op1, op2, op3, op4)) } inst_OpConvertHandleToImageINTEL :: #force_inline proc "contextless" (buf: []Operand, result_type: Type_Ref, result: Id, op1: Id) -> Operation { @@ -11481,7 +11481,7 @@ inst_OpConvertHandleToImageINTEL :: #force_inline proc "contextless" (buf: []Ope convert_handle_to_image_intel :: proc(b: ^Builder, result_type: Type_Ref, op1: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpConvertHandleToImageINTEL(opbuf(b, 1), result_type, r, op1)) + append_elem(&b.ops, inst_OpConvertHandleToImageINTEL(opbuf(b, 1), result_type, r, op1)) return r } @@ -11493,7 +11493,7 @@ inst_OpConvertHandleToSamplerINTEL :: #force_inline proc "contextless" (buf: []O convert_handle_to_sampler_intel :: proc(b: ^Builder, result_type: Type_Ref, op1: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpConvertHandleToSamplerINTEL(opbuf(b, 1), result_type, r, op1)) + append_elem(&b.ops, inst_OpConvertHandleToSamplerINTEL(opbuf(b, 1), result_type, r, op1)) return r } @@ -11505,7 +11505,7 @@ inst_OpConvertHandleToSampledImageINTEL :: #force_inline proc "contextless" (buf convert_handle_to_sampled_image_intel :: proc(b: ^Builder, result_type: Type_Ref, op1: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpConvertHandleToSampledImageINTEL(opbuf(b, 1), result_type, r, op1)) + append_elem(&b.ops, inst_OpConvertHandleToSampledImageINTEL(opbuf(b, 1), result_type, r, op1)) return r } @@ -11519,7 +11519,7 @@ inst_OpFDot2MixAcc32VALVE :: #force_inline proc "contextless" (buf: []Operand, r f_dot2_mix_acc32_valve :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Id, op3: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpFDot2MixAcc32VALVE(opbuf(b, 1 + 1 + 1), result_type, r, op1, op2, op3)) + append_elem(&b.ops, inst_OpFDot2MixAcc32VALVE(opbuf(b, 1 + 1 + 1), result_type, r, op1, op2, op3)) return r } @@ -11533,7 +11533,7 @@ inst_OpFDot2MixAcc16VALVE :: #force_inline proc "contextless" (buf: []Operand, r f_dot2_mix_acc16_valve :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Id, op3: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpFDot2MixAcc16VALVE(opbuf(b, 1 + 1 + 1), result_type, r, op1, op2, op3)) + append_elem(&b.ops, inst_OpFDot2MixAcc16VALVE(opbuf(b, 1 + 1 + 1), result_type, r, op1, op2, op3)) return r } @@ -11547,6 +11547,6 @@ inst_OpFDot4MixAcc32VALVE :: #force_inline proc "contextless" (buf: []Operand, r f_dot4_mix_acc32_valve :: proc(b: ^Builder, result_type: Type_Ref, op1: Id, op2: Id, op3: Id) -> Id { r := alloc_id(b) - append(&b.ops, inst_OpFDot4MixAcc32VALVE(opbuf(b, 1 + 1 + 1), result_type, r, op1, op2, op3)) + append_elem(&b.ops, inst_OpFDot4MixAcc32VALVE(opbuf(b, 1 + 1 + 1), result_type, r, op1, op2, op3)) return r } diff --git a/core/rexcode/ir/spirv/tablegen/gen.odin b/core/rexcode/ir/spirv/tablegen/gen.odin index 0b932296f..6681e1664 100644 --- a/core/rexcode/ir/spirv/tablegen/gen.odin +++ b/core/rexcode/ir/spirv/tablegen/gen.odin @@ -430,7 +430,7 @@ gen_one_builder :: proc(sb: ^strings.Builder, opname, verb: string, has_rt, has_ fmt.sbprintf(sb, "\n%s :: proc(%s)%s {{\n", verb, join(hl[:]), has_r ? " -> Id" : "") if has_r { strings.write_string(sb, "\tr := alloc_id(b)\n") } - fmt.sbprintf(sb, "\tappend(&b.ops, inst_%s(%s))\n", opname, join(call[:])) + fmt.sbprintf(sb, "\tappend_elem(&b.ops, inst_%s(%s))\n", opname, join(call[:])) if has_r { strings.write_string(sb, "\treturn r\n") } strings.write_string(sb, "}\n") } From 47ffc56d1a423330aef6ceef432090ab3426514c Mon Sep 17 00:00:00 2001 From: gingerBill Date: Wed, 30 Sep 2026 19:44:23 +0100 Subject: [PATCH 080/215] Handle anonymous parapoly unions better --- src/check_expr.cpp | 1 + src/check_type.cpp | 68 +++++++++++++++++++++++++++++++++++++--------- src/types.cpp | 3 ++ 3 files changed, 59 insertions(+), 13 deletions(-) diff --git a/src/check_expr.cpp b/src/check_expr.cpp index ad91599d5..383c388f9 100644 --- a/src/check_expr.cpp +++ b/src/check_expr.cpp @@ -13028,6 +13028,7 @@ gb_internal ExprKind check_expr_base_internal(CheckerContext *c, Operand *o, Ast case Ast_EnumType: case Ast_MapType: case Ast_BitSetType: + case Ast_BitFieldType: case Ast_MatrixType: case Ast_RelativeType: o->mode = Addressing_Type; diff --git a/src/check_type.cpp b/src/check_type.cpp index 1901dabbe..9f3186025 100644 --- a/src/check_type.cpp +++ b/src/check_type.cpp @@ -891,7 +891,15 @@ gb_internal void check_union_type(CheckerContext *ctx, Type *union_type, Ast *no } } else { for_array(j, variants) { - if (union_variant_index_types_equal(t, variants[j])) { + Type *other = variants[j]; + // Distinct polymorphic type variables (e.g. `$A`, `$B`) are distinct variants even + // though are_types_identical treats all unbound generics as equal. + if (other->kind == Type_Generic && t->kind == Type_Generic && + other->Generic.specialized == nullptr && t->Generic.specialized == nullptr && + !(other->Generic.interned_name == t->Generic.interned_name)) { + continue; + } + if (union_variant_index_types_equal(t, other)) { ok = false; ERROR_BLOCK(); gbString str = type_to_string(t); @@ -945,6 +953,18 @@ gb_internal void check_union_type(CheckerContext *ctx, Type *union_type, Ast *no } } + // An anonymous union with a polymorphic variant (e.g. `union{$T, int}`) is itself polymorphic. + // is_type_polymorphic(Union) only reads this flag (its variant loop is disabled to avoid a + // recursion bug), so compute it once here from the resolved variants. + if (!union_type->Union.is_polymorphic) { + for (Type *v : union_type->Union.variants) { + if (is_type_polymorphic(v)) { + union_type->Union.is_polymorphic = true; + break; + } + } + } + wait_signal_set(&union_type->Union.variants_wait_signal); } @@ -1140,7 +1160,10 @@ gb_internal void check_bit_field_type(CheckerContext *ctx, Type *bit_field_type, error(bf->backing_type, "Backing type for a bit_field must be an integer or an array of an integer"); return; } - if (!is_valid_bit_field_backing_type(backing_type)) { + // A polymorphic backing (e.g. `bit_field $T {...}`) has an unknown size/endianness until it is + // instantiated, so the backing-dependent validations below are skipped for it. + bool backing_is_polymorphic = is_type_polymorphic(backing_type); + if (!backing_is_polymorphic && !is_valid_bit_field_backing_type(backing_type)) { error(bf->backing_type, "Backing type for a bit_field must be an integer or an array of an integer"); return; } @@ -1149,7 +1172,7 @@ gb_internal void check_bit_field_type(CheckerContext *ctx, Type *bit_field_type, auto bit_sizes = array_make (permanent_allocator(), 0, bf->fields.count); auto tags = array_make (permanent_allocator(), 0, bf->fields.count); - u64 maximum_bit_size = 8 * type_size_of(backing_type); + u64 maximum_bit_size = backing_is_polymorphic ? ~cast(u64)0 : 8 * type_size_of(backing_type); u64 total_bit_size = 0; for_array(i, bf->fields) { @@ -1311,9 +1334,9 @@ gb_internal void check_bit_field_type(CheckerContext *ctx, Type *bit_field_type, return Endian_Native; }; - Type *backing_type_elem = core_array_type(backing_type); - i64 backing_type_elem_size = type_size_of(backing_type_elem); - EndianKind backing_type_endian_kind = determine_endian_kind(backing_type_elem); + Type *backing_type_elem = backing_is_polymorphic ? backing_type : core_array_type(backing_type); + i64 backing_type_elem_size = backing_is_polymorphic ? 0 : type_size_of(backing_type_elem); + EndianKind backing_type_endian_kind = backing_is_polymorphic ? Endian_Unknown : determine_endian_kind(backing_type_elem); EndianKind endian_kind = Endian_Unknown; for (Entity *f : fields) { EndianKind field_kind = determine_endian_kind(f->type); @@ -1924,19 +1947,21 @@ gb_internal SubstResult subst_unify(CheckerContext *c, Type *pattern, Type *sour } return Subst_NoMatch; case Type_Pointer: - // old code also allows struct subtyping and Pointer<->MultiPointer; only the plain elem match here + // Pointer<->MultiPointer conversions stay on the mutator; here only the same-kind elem match. if (source->kind != Type_Pointer) { return Subst_Unhandled; } - if (base_type(pattern->Pointer.elem)->kind == Type_Struct) { - return Subst_Unhandled; + if (base_type(pattern->Pointer.elem)->kind == Type_Struct && + check_is_assignable_to_using_subtype(source->Pointer.elem, pattern->Pointer.elem, 0, false, true) > 0) { + return Subst_Unhandled; // genuine subtype match (no binding), handled by the mutator } return subst_unify(c, pattern->Pointer.elem, source->Pointer.elem, subst); case Type_MultiPointer: if (source->kind != Type_MultiPointer) { return Subst_Unhandled; } - if (base_type(pattern->MultiPointer.elem)->kind == Type_Struct) { + if (base_type(pattern->MultiPointer.elem)->kind == Type_Struct && + check_is_assignable_to_using_subtype(source->MultiPointer.elem, pattern->MultiPointer.elem) > 0) { return Subst_Unhandled; } return subst_unify(c, pattern->MultiPointer.elem, source->MultiPointer.elem, subst); @@ -2162,8 +2187,9 @@ gb_internal SubstResult subst_unify(CheckerContext *c, Type *pattern, Type *sour if (source->kind != Type_SoaPointer) { return Subst_Unhandled; } - if (base_type(pattern->SoaPointer.elem)->kind == Type_Struct) { - return Subst_Unhandled; // subtype path, handled by the mutator + if (base_type(pattern->SoaPointer.elem)->kind == Type_Struct && + check_is_assignable_to_using_subtype(source->SoaPointer.elem, pattern->SoaPointer.elem, 0, false, true) > 0) { + return Subst_Unhandled; // genuine subtype match (no binding), handled by the mutator } return subst_unify(c, pattern->SoaPointer.elem, source->SoaPointer.elem, subst); case Type_FixedCapacityDynamicArray: @@ -2441,14 +2467,30 @@ gb_internal Type *subst_apply(CheckerContext *c, Type *pattern, Type *source, Po // resolved type is the (already concrete) source. return source; case Type_BitField: { + Type *backing = subst_apply(c, pattern->BitField.backing_type, source->BitField.backing_type, subst); Type *r = alloc_type_bit_field(); - r->BitField.backing_type = subst_apply(c, pattern->BitField.backing_type, source->BitField.backing_type, subst); + r->BitField.backing_type = backing; r->BitField.fields = pattern->BitField.fields; r->BitField.tags = pattern->BitField.tags; r->BitField.bit_sizes = pattern->BitField.bit_sizes; r->BitField.bit_offsets = pattern->BitField.bit_offsets; r->BitField.scope = pattern->BitField.scope; r->BitField.node = pattern->BitField.node; + // The backing-size check is deferred from check_bit_field_type for a polymorphic backing; run it + // now that the backing is concrete. + if (!c->no_polymorphic_errors && !c->hide_polymorphic_errors && !is_type_polymorphic(backing)) { + u64 total = 0; + for (u8 bs : r->BitField.bit_sizes) { + total += bs; + } + u64 maximum = 8 * cast(u64)type_size_of(backing); + if (total > maximum) { + gbString s = type_to_string(backing); + error(pattern->BitField.node, "The total bit size of a bit_field's fields (%llu) must fit into its backing type's (%s) bit size of %llu", + cast(unsigned long long)total, s, cast(unsigned long long)maximum); + gb_string_free(s); + } + } return r; } case Type_Struct: { diff --git a/src/types.cpp b/src/types.cpp index 69112268d..bcac2972a 100644 --- a/src/types.cpp +++ b/src/types.cpp @@ -2635,6 +2635,9 @@ gb_internal bool is_type_polymorphic(Type *t, bool or_specialized=false) { return true; } break; + + case Type_BitField: + return is_type_polymorphic(t->BitField.backing_type, or_specialized); } return false; } From 53c6e81ab652c2a5357e852d74dad691424edc04 Mon Sep 17 00:00:00 2001 From: gingerBill Date: Wed, 30 Sep 2026 19:52:03 +0100 Subject: [PATCH 081/215] Handle anonymous-record field polymorphis correctly for structs and bit fields. --- src/check_type.cpp | 45 +++++++++++++++++++++++++++++++++++++++------ 1 file changed, 39 insertions(+), 6 deletions(-) diff --git a/src/check_type.cpp b/src/check_type.cpp index 9f3186025..c10f7887b 100644 --- a/src/check_type.cpp +++ b/src/check_type.cpp @@ -153,8 +153,9 @@ gb_internal void check_struct_fields(CheckerContext *ctx, Ast *node, SliceStruct.is_polymorphic = true; - type = nullptr; } } if (type == nullptr) { @@ -2254,13 +2255,40 @@ gb_internal SubstResult subst_unify(CheckerContext *c, Type *pattern, Type *sour return Subst_NoMatch; } return subst_unify(c, pattern->BitField.backing_type, source->BitField.backing_type, subst); - case Type_Struct: - if (source->kind == Type_Struct && - pattern->Struct.soa_kind == source->Struct.soa_kind && - pattern->Struct.soa_kind != StructSoa_None) { + case Type_Struct: { + if (source->kind != Type_Struct) { + return Subst_NoMatch; + } + if (pattern->Struct.soa_kind != StructSoa_None || source->Struct.soa_kind != StructSoa_None) { + if (pattern->Struct.soa_kind != source->Struct.soa_kind) { + return Subst_NoMatch; + } return subst_unify(c, pattern->Struct.soa_elem, source->Struct.soa_elem, subst); } - return Subst_Unhandled; // plain anonymous struct / subtype, handled by the mutator + // Anonymous struct with field-level polymorphism (e.g. `struct{x: $T, y: [2]T}`): match fields + // positionally. Record subtyping is not attempted here, so it is left to the mutator. + if (pattern->Struct.is_raw_union != source->Struct.is_raw_union || + pattern->Struct.is_packed != source->Struct.is_packed) { + return Subst_Unhandled; + } + wait_signal_until_available(&pattern->Struct.fields_wait_signal); + wait_signal_until_available(&source->Struct.fields_wait_signal); + if (pattern->Struct.fields.count != source->Struct.fields.count) { + return Subst_NoMatch; + } + for_array(i, pattern->Struct.fields) { + Entity *pf = pattern->Struct.fields[i]; + Entity *sf = source->Struct.fields[i]; + if (pf->token.string != sf->token.string) { + return Subst_NoMatch; + } + SubstResult r = subst_unify(c, pf->type, sf->type, subst); + if (r != Subst_Matched) { + return Subst_Unhandled; // field context allows assignability/subtyping, defer to the mutator + } + } + return Subst_Matched; + } } return Subst_Unhandled; } @@ -2494,6 +2522,11 @@ gb_internal Type *subst_apply(CheckerContext *c, Type *pattern, Type *source, Po return r; } case Type_Struct: { + if (pattern->Struct.soa_kind == StructSoa_None) { + // Anonymous field-polymorphic struct: unify matched fields positionally, so the resolved + // type is the (already concrete) source. + return source; + } Type *elem = subst_apply(c, pattern->Struct.soa_elem, source->Struct.soa_elem, subst); switch (pattern->Struct.soa_kind) { case StructSoa_Fixed: return make_soa_struct_fixed(c, nullptr, pattern->Struct.node, elem, pattern->Struct.soa_count, nullptr); From 46a6df0d430dad2c0c0f756989525d1445366e99 Mon Sep 17 00:00:00 2001 From: gingerBill Date: Wed, 30 Sep 2026 20:19:14 +0100 Subject: [PATCH 082/215] Handle constrained generics in the poly-subst engine, match `$T/S` constraints in `subst_unify` --- src/check_type.cpp | 43 ++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 40 insertions(+), 3 deletions(-) diff --git a/src/check_type.cpp b/src/check_type.cpp index c10f7887b..91550cbbf 100644 --- a/src/check_type.cpp +++ b/src/check_type.cpp @@ -1929,6 +1929,19 @@ gb_internal bool poly_subst_bind_enum_array(PolySubst *s, Entity *key, Type *ea) return poly_subst_add(s, key, PolyBinding{nullptr, PolyBind_EnumArray, ea, 0, nullptr}); } +// True when `source` is an instantiation of the bare polymorphic record template `spec` (the form a +// `$T/Stack` constraint takes). Mirrors check_type_specialization_to's `polymorphic_parent` check. +gb_internal bool subst_source_is_template_instance(Type *source, Type *spec) { + Type *sb = base_type(source); + if (sb->kind == Type_Struct) { + return sb->Struct.polymorphic_parent == spec; + } + if (sb->kind == Type_Union) { + return sb->Union.polymorphic_parent == spec; + } + return false; +} + gb_internal SubstResult subst_unify(CheckerContext *c, Type *pattern, Type *source, PolySubst *subst) { if (pattern == nullptr || source == nullptr) { return Subst_Unhandled; @@ -1941,7 +1954,16 @@ gb_internal SubstResult subst_unify(CheckerContext *c, Type *pattern, Type *sour return Subst_NoMatch; case Type_Generic: if (pattern->Generic.specialized != nullptr) { - return Subst_Unhandled; + // Constrained generic `$T/S`: bind the nested vars of `S` against the source (e.g. `$U` in + // `$T/Stack($U)`, or `$T`/`$E` in `$P/proc($T)->$E`), then bind T. A bare template `$T/Stack` + // needs no nested binding, only that the source is an instantiation of it. + Type *spec = pattern->Generic.specialized; + if (!subst_source_is_template_instance(source, spec)) { + SubstResult r = subst_unify(c, spec, source, subst); + if (r != Subst_Matched) { + return Subst_Unhandled; + } + } } if (poly_subst_bind_type(subst, poly_generic_entity(pattern), default_type(source))){ return Subst_Matched; @@ -2118,10 +2140,22 @@ gb_internal SubstResult subst_unify(CheckerContext *c, Type *pattern, Type *sour Type *st = s_e->type; if (st->kind == Type_Generic) { Entity *ge = poly_generic_entity(st); - if (ge == nullptr || st->Generic.specialized != nullptr) { + if (ge == nullptr) { return Subst_Unhandled; } - if (t_e->kind == Entity_Constant) { + if (st->Generic.specialized != nullptr) { + // Constrained record param `$T/S`: bind the nested vars of the constraint, then T. + Type *spec = st->Generic.specialized; + if (!subst_source_is_template_instance(t_e->type, spec)) { + SubstResult r = subst_unify(c, spec, t_e->type, subst); + if (r != Subst_Matched) { + return Subst_Unhandled; + } + } + if (!poly_subst_bind_type(subst, ge, default_type(t_e->type))) { + return Subst_NoMatch; + } + } else if (t_e->kind == Entity_Constant) { if (t_e->Constant.value.kind != ExactValue_Integer) { return Subst_Unhandled; } @@ -2282,6 +2316,9 @@ gb_internal SubstResult subst_unify(CheckerContext *c, Type *pattern, Type *sour if (pf->token.string != sf->token.string) { return Subst_NoMatch; } + if ((pf->flags & EntityFlags_IsSubtype) != (sf->flags & EntityFlags_IsSubtype)) { + return Subst_NoMatch; // a `using`/subtype field must match one on the source + } SubstResult r = subst_unify(c, pf->type, sf->type, subst); if (r != Subst_Matched) { return Subst_Unhandled; // field context allows assignability/subtyping, defer to the mutator From 6e2f336d037b647493d86879bbc7da84d58105e2 Mon Sep 17 00:00:00 2001 From: gingerBill Date: Wed, 30 Sep 2026 20:27:59 +0100 Subject: [PATCH 083/215] Handle ^T <-> [^]T edge case with parapoly --- src/check_type.cpp | 50 ++++++++++++++++++++++++++++++++-------------- 1 file changed, 35 insertions(+), 15 deletions(-) diff --git a/src/check_type.cpp b/src/check_type.cpp index 91550cbbf..3a63330cf 100644 --- a/src/check_type.cpp +++ b/src/check_type.cpp @@ -1969,25 +1969,40 @@ gb_internal SubstResult subst_unify(CheckerContext *c, Type *pattern, Type *sour return Subst_Matched; } return Subst_NoMatch; - case Type_Pointer: - // Pointer<->MultiPointer conversions stay on the mutator; here only the same-kind elem match. - if (source->kind != Type_Pointer) { - return Subst_Unhandled; + case Type_Pointer: { + // A `^T` pattern also matches a `[^]T` source (the mutator allows ^<->[^] here). The subtype + // check mirrors the mutator: allow_polymorphic for a pointer source, plain for a multi-pointer. + Type *src_elem = nullptr; + bool allow_poly = false; + if (source->kind == Type_Pointer) { + src_elem = source->Pointer.elem; + allow_poly = true; + } else if (source->kind == Type_MultiPointer) { + src_elem = source->MultiPointer.elem; + } else { + return Subst_NoMatch; } if (base_type(pattern->Pointer.elem)->kind == Type_Struct && - check_is_assignable_to_using_subtype(source->Pointer.elem, pattern->Pointer.elem, 0, false, true) > 0) { + check_is_assignable_to_using_subtype(src_elem, pattern->Pointer.elem, 0, false, allow_poly) > 0) { return Subst_Unhandled; // genuine subtype match (no binding), handled by the mutator } - return subst_unify(c, pattern->Pointer.elem, source->Pointer.elem, subst); - case Type_MultiPointer: - if (source->kind != Type_MultiPointer) { - return Subst_Unhandled; + return subst_unify(c, pattern->Pointer.elem, src_elem, subst); + } + case Type_MultiPointer: { + Type *src_elem = nullptr; + if (source->kind == Type_MultiPointer) { + src_elem = source->MultiPointer.elem; + } else if (source->kind == Type_Pointer) { + src_elem = source->Pointer.elem; + } else { + return Subst_NoMatch; } if (base_type(pattern->MultiPointer.elem)->kind == Type_Struct && - check_is_assignable_to_using_subtype(source->MultiPointer.elem, pattern->MultiPointer.elem) > 0) { + check_is_assignable_to_using_subtype(src_elem, pattern->MultiPointer.elem) > 0) { return Subst_Unhandled; } - return subst_unify(c, pattern->MultiPointer.elem, source->MultiPointer.elem, subst); + return subst_unify(c, pattern->MultiPointer.elem, src_elem, subst); + } case Type_Slice: if (source->kind != Type_Slice) { return Subst_NoMatch; @@ -2422,10 +2437,15 @@ gb_internal Type *subst_apply(CheckerContext *c, Type *pattern, Type *source, Po GB_ASSERT(b != nullptr && b->kind == PolyBind_Type); return b->type; } - case Type_Pointer: - return alloc_type_pointer(subst_apply(c, pattern->Pointer.elem, source->Pointer.elem, subst)); - case Type_MultiPointer: - return alloc_type_multi_pointer(subst_apply(c, pattern->MultiPointer.elem, source->MultiPointer.elem, subst)); + case Type_Pointer: { + // result keeps the pattern's pointer kind; source may be `^` or `[^]` + Type *src_elem = (source->kind == Type_MultiPointer) ? source->MultiPointer.elem : source->Pointer.elem; + return alloc_type_pointer(subst_apply(c, pattern->Pointer.elem, src_elem, subst)); + } + case Type_MultiPointer: { + Type *src_elem = (source->kind == Type_Pointer) ? source->Pointer.elem : source->MultiPointer.elem; + return alloc_type_multi_pointer(subst_apply(c, pattern->MultiPointer.elem, src_elem, subst)); + } case Type_SoaPointer: return alloc_type_soa_pointer(subst_apply(c, pattern->SoaPointer.elem, source->SoaPointer.elem, subst)); case Type_Slice: From 48272ac2570b3619dae044193a5204c873d7e6e4 Mon Sep 17 00:00:00 2001 From: gingerBill Date: Wed, 30 Sep 2026 20:35:11 +0100 Subject: [PATCH 084/215] parapoly: Correct #sparse enumerated array support --- src/check_type.cpp | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/check_type.cpp b/src/check_type.cpp index 3a63330cf..1fda6dc81 100644 --- a/src/check_type.cpp +++ b/src/check_type.cpp @@ -2266,8 +2266,9 @@ gb_internal SubstResult subst_unify(CheckerContext *c, Type *pattern, Type *sour return Subst_NoMatch; } if (pattern->EnumeratedArray.op || source->EnumeratedArray.op) { - return Subst_Unhandled; // sparse/range form, defer to the mutator + return Subst_Unhandled; // range (`op`) form: currently never constructed; defer if it ever is } + // `#sparse` arrays flow through here and are handled; is_sparse is carried in subst_apply. SubstResult ir = subst_unify(c, pattern->EnumeratedArray.index, source->EnumeratedArray.index, subst); if (ir != Subst_Matched) { return ir; @@ -2489,9 +2490,11 @@ gb_internal Type *subst_apply(CheckerContext *c, Type *pattern, Type *source, Po case Type_EnumeratedArray: { Type *elem = subst_apply(c, pattern->EnumeratedArray.elem, source->EnumeratedArray.elem, subst); Type *index = subst_apply(c, pattern->EnumeratedArray.index, source->EnumeratedArray.index, subst); - return alloc_type_enumerated_array(elem, index, + Type *r = alloc_type_enumerated_array(elem, index, pattern->EnumeratedArray.min_value, pattern->EnumeratedArray.max_value, pattern->EnumeratedArray.count, pattern->EnumeratedArray.op); + r->EnumeratedArray.is_sparse = pattern->EnumeratedArray.is_sparse; // alloc defaults this to false + return r; } case Type_Matrix: { Type *elem = subst_apply(c, pattern->Matrix.elem, source->Matrix.elem, subst); From 93a3312a293bcab2385aafac6b5328f8123765ed Mon Sep 17 00:00:00 2001 From: gingerBill Date: Wed, 30 Sep 2026 20:49:28 +0100 Subject: [PATCH 085/215] Remove parapoly scaffolding and fix `map` internal generation --- src/check_expr.cpp | 5 ++++ src/check_type.cpp | 63 +++++++++++++++++++++++++--------------------- 2 files changed, 40 insertions(+), 28 deletions(-) diff --git a/src/check_expr.cpp b/src/check_expr.cpp index 383c388f9..69006f3c1 100644 --- a/src/check_expr.cpp +++ b/src/check_expr.cpp @@ -1475,6 +1475,11 @@ gb_internal bool polymorphic_assign_index(Type **gt_, i64 *dst_count, i64 source return false; } +// In-place matcher: mutates `poly` to bind its polymorphic vars to `source`. This is no longer the +// primary resolver (see the substitution engine in check_type.cpp). determine_type_from_polymorphic +// uses it only as a fallback for the patterns the engine reports Subst_Unhandled for (genuine +// subtyping, and the ^<->[^] case) and for the non-modify_type (no_polymorphic_errors) yes/no probe. +// The probe keeps every kind here reachable, so these cases are not dead code. gb_internal bool is_polymorphic_type_assignable(CheckerContext *c, Type *poly, Type *source, bool compound, bool modify_type) { Operand o = {Addressing_Value}; o.type = source; diff --git a/src/check_type.cpp b/src/check_type.cpp index 1fda6dc81..ba61fe8ca 100644 --- a/src/check_type.cpp +++ b/src/check_type.cpp @@ -1848,18 +1848,19 @@ gb_internal bool check_type_specialization_to(CheckerContext *ctx, Type *special } -// subst_unify matches a polymorphic pattern against a source PURELY (no node/entity mutation), -// accumulating bindings; subst_apply reconstructs the instantiated type by CONSTRUCTION. Guarded by -// PARAPOLY_VERIFY_SUBST, determine_type_from_polymorphic runs these alongside the existing in-place -// mutation and asserts the two agree, proving the constructive path before anything relies on it. -// Coverage is a slice (generic/basic/slice/dynamic-array/fixed [$N]$T); other kinds report -// Subst_Unhandled and are skipped. No behavior change. This is refactor scaffolding: it runs a -// second (constructive) match per instantiation, so set to 0 (or gate to debug) before release. -#define PARAPOLY_VERIFY_SUBST 1 -// When 1, the substitution is authoritative for handled patterns: determine_type_from_polymorphic -// binds the poly-scope entities from the PolySubst and returns the constructed type WITHOUT running -// the in-place mutation. When 0, the mutation runs and the subst path only verifies against it. -#define PARAPOLY_SUBST_AUTHORITATIVE 1 +// The substitution engine is the primary way a polymorphic parameter type is resolved: +// `subst_unify` matches a pattern against a source PURELY (no node/entity mutation), accumulating +// bindings; `subst_apply` reconstructs the instantiated type by CONSTRUCTION; `subst_bind_entities` +// binds the poly-scope entities. `determine_type_from_polymorphic` uses them for every pattern the +// engine reports `Subst_Matched` for. The in-place mutator `is_polymorphic_type_assignable` remains +// only as a fallback for the patterns the engine leaves `Subst_Unhandled` (genuine subtyping, and the +// `[^]<->^` handled-by-mutator case), and for the non-`modify_type` yes/no probe. +// +// PARAPOLY_DEBUG_VERIFY_SUBST is an off-by-default differential debug switch: it makes the old mutator +// authoritative and asserts the engine agrees with it (constructed type + entity bindings) on every +// instantiation. It compares types structurally via are_types_identical, so it CANNOT catch codegen +// state the engine must still set up (e.g. a map's internal types); those need build+run tests. +#define PARAPOLY_DEBUG_VERIFY_SUBST 0 enum SubstResult : u8 { Subst_Unhandled, @@ -2467,6 +2468,7 @@ gb_internal Type *subst_apply(CheckerContext *c, Type *pattern, Type *source, Po Type *m = alloc_type(Type_Map); m->Map.key = subst_apply(c, pattern->Map.key, source->Map.key, subst); m->Map.value = subst_apply(c, pattern->Map.value, source->Map.value, subst); + init_map_internal_types(m); // the mutator does this; without it codegen hits a t_invalid return m; } case Type_Array: { @@ -2645,7 +2647,7 @@ gb_internal void subst_bind_entities(PolySubst *subst) { } } -#if PARAPOLY_VERIFY_SUBST +#if PARAPOLY_DEBUG_VERIFY_SUBST // Read-only: assert that the in-place mutation bound each poly-scope entity to exactly what the // substitution captured. This is the entity-level analogue of the apply-reproduction check; once it // holds everywhere, entity binding can be driven from the PolySubst and the mutation removed. @@ -2694,7 +2696,26 @@ gb_internal Type *determine_type_from_polymorphic(CheckerContext *ctx, Type *pol return t_invalid; } -#if PARAPOLY_VERIFY_SUBST +#if !PARAPOLY_DEBUG_VERIFY_SUBST + // Primary path: the substitution engine constructs the instantiation and binds the poly-scope + // entities. Patterns it reports Subst_Unhandled for fall through to the mutator fallback below. + if (modify_type) { + PolySubst subst = {}; + subst.items.allocator = heap_allocator(); + defer (array_free(&subst.items)); + if (subst_unify(ctx, poly_type, operand.type, &subst) == Subst_Matched) { + Type *applied = subst_apply(ctx, poly_type, operand.type, &subst); + subst_bind_entities(&subst); + return applied; + } + } + // Fallback: the in-place mutator handles the deferred patterns (genuine subtyping) and the + // non-modify_type probe. A Subst_NoMatch also lands here and the mutator fails too -> error path. + if (is_polymorphic_type_assignable(ctx, poly_type, operand.type, false, modify_type)) { + return poly_type; + } +#else + // Debug differential: the mutator is authoritative and the engine is asserted to agree with it. PolySubst verify_subst = {}; verify_subst.items.allocator = heap_allocator(); defer (array_free(&verify_subst.items)); @@ -2706,19 +2727,7 @@ gb_internal Type *determine_type_from_polymorphic(CheckerContext *ctx, Type *pol verify_applied = subst_apply(ctx, poly_type, operand.type, &verify_subst); } } - #if PARAPOLY_SUBST_AUTHORITATIVE - if (verify_ur == Subst_Matched) { - // Substitution is authoritative: bind the poly-scope entities and return the constructed - // type; the in-place mutation is not run. (A handled NoMatch falls through and the mutation - // will also fail, reaching the error path.) - subst_bind_entities(&verify_subst); - return verify_applied; - } - #endif -#endif - if (is_polymorphic_type_assignable(ctx, poly_type, operand.type, false, modify_type)) { - #if PARAPOLY_VERIFY_SUBST && !PARAPOLY_SUBST_AUTHORITATIVE if (verify_ur == Subst_Matched) { GB_ASSERT_MSG(are_types_identical(verify_applied, poly_type), "parapoly subst mismatch: applied '%s' vs mutated '%s'", @@ -2728,10 +2737,8 @@ gb_internal Type *determine_type_from_polymorphic(CheckerContext *ctx, Type *pol } else if (verify_ur == Subst_NoMatch) { GB_PANIC("parapoly subst reported NoMatch but in-place match succeeded (result '%s')", type_to_string(poly_type)); } - #endif return poly_type; } -#if PARAPOLY_VERIFY_SUBST && !PARAPOLY_SUBST_AUTHORITATIVE if (verify_ur == Subst_Matched) { GB_PANIC("parapoly subst matched but in-place match failed"); } From 374024fc734bd0f70019e9ac3cc20a8946cf5b7a Mon Sep 17 00:00:00 2001 From: Louis Novy <101842021+louisnovy@users.noreply.github.com> Date: Wed, 30 Sep 2026 13:15:45 -0400 Subject: [PATCH 086/215] Parse integer literals without allocating per digit and reject non digits in their exponent --- src/big_int.cpp | 27 ++++++------------- src/libtommath.cpp | 4 +++ tests/issues/run.bat | 1 + tests/issues/run.sh | 7 +++++ .../test_issue_integer_literal_exponent.odin | 7 +++++ 5 files changed, 27 insertions(+), 19 deletions(-) create mode 100644 tests/issues/test_issue_integer_literal_exponent.odin diff --git a/src/big_int.cpp b/src/big_int.cpp index 9db4a8d55..36debb1e8 100644 --- a/src/big_int.cpp +++ b/src/big_int.cpp @@ -100,20 +100,15 @@ gb_internal void big_int_rem_eq(BigInt *dst, BigInt const *x); gb_internal bool big_int_is_neg(BigInt const *x); gb_internal void big_int_neg(BigInt *dst, BigInt const *x); +// NOTE: libtommath allows the output to alias an input, so `dst` is not copied first gb_internal void big_int_add_eq(BigInt *dst, BigInt const *x) { - BigInt res = {}; - big_int_init(&res, dst); - big_int_add(dst, &res, x); + big_int_add(dst, dst, x); } gb_internal void big_int_sub_eq(BigInt *dst, BigInt const *x) { - BigInt res = {}; - big_int_init(&res, dst); - big_int_sub(dst, &res, x); + big_int_sub(dst, dst, x); } gb_internal void big_int_shl_eq(BigInt *dst, BigInt const *x) { - BigInt res = {}; - big_int_init(&res, dst); - big_int_shl(dst, &res, x); + big_int_shl(dst, dst, x); } gb_internal void big_int_shr_eq(BigInt *dst, BigInt const *x) { BigInt res = {}; @@ -121,9 +116,7 @@ gb_internal void big_int_shr_eq(BigInt *dst, BigInt const *x) { big_int_shr(dst, &res, x); } gb_internal void big_int_mul_eq(BigInt *dst, BigInt const *x) { - BigInt res = {}; - big_int_init(&res, dst); - big_int_mul(dst, &res, x); + big_int_mul(dst, dst, x); } gb_internal void big_int_quo_eq(BigInt *dst, BigInt const *x) { BigInt res = {}; @@ -214,9 +207,6 @@ gb_internal void big_int_from_string(BigInt *dst, String const &s, bool *success mp_zero(dst); - BigInt digit = {}; - defer (big_int_dealloc(&digit)); - isize i = 0; isize digit_count = 0; for (; i < len; i++) { @@ -246,9 +236,8 @@ gb_internal void big_int_from_string(BigInt *dst, String const &s, bool *success digit_count += 1; } - big_int_from_u64(&digit, v); - big_int_mul_eq(dst, &b); - big_int_add_eq(dst, &digit); + mp_mul_d(dst, cast(mp_digit)base, dst); + mp_add_d(dst, cast(mp_digit)v, dst); } if (digit_count == 0) { // a base prefix with only digit separators after it, `0x_`, has no digits at all @@ -289,7 +278,7 @@ gb_internal void big_int_from_string(BigInt *dst, String const &s, bool *success v = u64_digit_value(r); } else { *success = false; - break; + return; } exp *= 10; exp += v; diff --git a/src/libtommath.cpp b/src/libtommath.cpp index c1e1cfe34..d43e9b22a 100644 --- a/src/libtommath.cpp +++ b/src/libtommath.cpp @@ -1,3 +1,7 @@ +// NOTE: the default is 32 digits (256 bytes), but nearly every constant fits in 64 bits and digits +// grow when needed. 4 is the minimum of 3 digits rounded up to MP_CALLOC's 16-byte alignment. +#define MP_DEFAULT_DIGIT_COUNT 4 + #include "libtommath/mp_2expt.c" #include "libtommath/mp_abs.c" #include "libtommath/mp_add.c" diff --git a/tests/issues/run.bat b/tests/issues/run.bat index dd101297e..c6e0c0c92 100644 --- a/tests/issues/run.bat +++ b/tests/issues/run.bat @@ -54,6 +54,7 @@ set COMMON=-define:ODIN_TEST_FANCY=false -file -vet -strict-style -ignore-unused ..\..\..\odin check ..\test_issue_ellipsis_type_call.odin -no-entry-point %COMMON% 2>&1 | find /c "Error:" | findstr /x "10" || exit /b ..\..\..\odin check ..\test_issue_foreign_redeclaration.odin -no-entry-point %COMMON% || exit /b ..\..\..\odin check ..\test_issue_foreign_redeclaration_mismatch.odin -no-entry-point %COMMON% 2>&1 | find /c "Error:" | findstr /x "1" || exit /b +..\..\..\odin check ..\test_issue_integer_literal_exponent.odin -no-entry-point %COMMON% 2>&1 | find /c "Error:" | findstr /x "1" || exit /b ..\..\..\odin doc ..\test_issue_asm_doc_category.odin -file 2>&1 | find /c "asm templates" | findstr /x "1" || exit /b ..\..\..\odin build ..\test_issue_7037.odin %COMMON% -o:none || exit /b ..\..\..\odin test ..\test_issue_7421.odin %COMMON% || exit /b diff --git a/tests/issues/run.sh b/tests/issues/run.sh index 5508b07cf..f7c9d6faf 100755 --- a/tests/issues/run.sh +++ b/tests/issues/run.sh @@ -137,6 +137,13 @@ else exit 1 fi +if [[ $($ODIN check ../test_issue_integer_literal_exponent.odin -no-entry-point $COMMON_CHECK 2>&1 >/dev/null | grep -c "Error:") -eq 1 ]]; then + echo "SUCCESSFUL 1/1" +else + echo "SUCCESSFUL 0/1" + exit 1 +fi + # `asm` templates are amd64-only, so this file is empty on every other architecture if [[ "$(uname -m)" == "x86_64" || "$(uname -m)" == "amd64" ]]; then if [[ $($ODIN doc ../test_issue_asm_doc_category.odin -file 2>&1 | grep -c "asm templates") -eq 1 ]]; then diff --git a/tests/issues/test_issue_integer_literal_exponent.odin b/tests/issues/test_issue_integer_literal_exponent.odin new file mode 100644 index 000000000..f1f6d4a4f --- /dev/null +++ b/tests/issues/test_issue_integer_literal_exponent.odin @@ -0,0 +1,7 @@ +package test_issues + +// A character that is not a digit in the exponent of an integer literal used to be ignored, so `1e1f` +// was accepted as 10. + +valid :: 1e3 +invalid :: 1e1f // Error From 9ba489ca07b6ce1aa2836dba6680936e6ca4dfea Mon Sep 17 00:00:00 2001 From: gingerBill Date: Wed, 30 Sep 2026 21:04:47 +0100 Subject: [PATCH 087/215] Begin removing the older substitution code --- src/check_type.cpp | 87 +++++++++++++++++++++++++++++++++------------- 1 file changed, 62 insertions(+), 25 deletions(-) diff --git a/src/check_type.cpp b/src/check_type.cpp index ba61fe8ca..d44f7b6b2 100644 --- a/src/check_type.cpp +++ b/src/check_type.cpp @@ -1,5 +1,6 @@ gb_internal ParameterValue handle_parameter_value(CheckerContext *ctx, Type *in_type, Type **out_type_, Ast *expr, bool allow_caller_location); gb_internal Type *determine_type_from_polymorphic(CheckerContext *ctx, Type *poly_type, Operand const &operand); +gb_internal bool subst_check_specialization(CheckerContext *ctx, Type *specialization, Type *type, bool modify_type); gb_internal Type *check_get_params(CheckerContext *ctx, Scope *scope, Ast *_params, bool *is_variadic_, isize *variadic_index_, bool *success_, isize *specialization_count_, Array const *operands); gb_internal void populate_using_entity_scope(CheckerContext *ctx, Ast *node, AstField *field, Type *t, isize level); @@ -521,7 +522,7 @@ gb_internal Type *check_record_polymorphic_params(CheckerContext *ctx, Ast *poly *is_polymorphic_ = true; can_check_fields = false; } else if (specialization && - !check_type_specialization_to(ctx, specialization, operand.type, false, /*modify_type*/true, /*finalize*/false)) { + !subst_check_specialization(ctx, specialization, operand.type, /*modify_type*/true)) { if (!ctx->no_polymorphic_errors) { gbString t = type_to_string(operand.type); gbString s = type_to_string(specialization); @@ -2647,6 +2648,35 @@ gb_internal void subst_bind_entities(PolySubst *subst) { } } +// Specialization-conformance check for a `$T: Constraint` record/proc parameter: does `type` conform +// to `specialization`, binding the constraint's nested vars when modify_type? The engine short-circuits +// a clean structural match (skipping the in-place matcher); everything else (bare templates, subtyping, +// assignability, definite non-matches) is left to check_type_specialization_to, so behavior is +// unchanged except that the common case no longer runs the mutator. +gb_internal bool subst_check_specialization(CheckerContext *ctx, Type *specialization, Type *type, bool modify_type) { + if (type == nullptr || type == t_invalid) { + return true; + } + PolySubst sub = {}; + sub.items.allocator = heap_allocator(); + defer (array_free(&sub.items)); + SubstResult ur = subst_unify(ctx, specialization, type, &sub); +#if PARAPOLY_DEBUG_VERIFY_SUBST + // Debug: the old check is authoritative; assert the engine's short-circuit agrees with it. + bool old = check_type_specialization_to(ctx, specialization, type, false, modify_type, /*finalize*/false); + GB_ASSERT_MSG(ur != Subst_Matched || old, "subst_check_specialization: engine matched but check_type_specialization_to did not"); + return old; +#else + if (ur == Subst_Matched) { + if (modify_type) { + subst_bind_entities(&sub); + } + return true; + } + return check_type_specialization_to(ctx, specialization, type, false, modify_type, /*finalize*/false); +#endif +} + #if PARAPOLY_DEBUG_VERIFY_SUBST // Read-only: assert that the in-place mutation bound each poly-scope entity to exactly what the // substitution captured. This is the entity-level analogue of the apply-reproduction check; once it @@ -2697,43 +2727,50 @@ gb_internal Type *determine_type_from_polymorphic(CheckerContext *ctx, Type *pol } #if !PARAPOLY_DEBUG_VERIFY_SUBST - // Primary path: the substitution engine constructs the instantiation and binds the poly-scope - // entities. Patterns it reports Subst_Unhandled for fall through to the mutator fallback below. - if (modify_type) { + // Primary path: the substitution engine both resolves (modify_type) and answers the yes/no probe + // (!modify_type). Only a Subst_Unhandled result falls to the in-place mutator, which now serves + // solely as the genuine-subtyping fallback. A Subst_NoMatch is a definite non-match, so the mutator + // is skipped (the debug build asserts that NoMatch invariant against the mutator). + { PolySubst subst = {}; subst.items.allocator = heap_allocator(); defer (array_free(&subst.items)); - if (subst_unify(ctx, poly_type, operand.type, &subst) == Subst_Matched) { - Type *applied = subst_apply(ctx, poly_type, operand.type, &subst); - subst_bind_entities(&subst); - return applied; + SubstResult ur = subst_unify(ctx, poly_type, operand.type, &subst); + if (ur == Subst_Matched) { + if (modify_type) { + Type *applied = subst_apply(ctx, poly_type, operand.type, &subst); + subst_bind_entities(&subst); + return applied; + } + return poly_type; // probe: matched, no construction/binding needed + } + if (ur == Subst_Unhandled && + is_polymorphic_type_assignable(ctx, poly_type, operand.type, false, modify_type)) { + return poly_type; } - } - // Fallback: the in-place mutator handles the deferred patterns (genuine subtyping) and the - // non-modify_type probe. A Subst_NoMatch also lands here and the mutator fails too -> error path. - if (is_polymorphic_type_assignable(ctx, poly_type, operand.type, false, modify_type)) { - return poly_type; } #else // Debug differential: the mutator is authoritative and the engine is asserted to agree with it. PolySubst verify_subst = {}; verify_subst.items.allocator = heap_allocator(); defer (array_free(&verify_subst.items)); - SubstResult verify_ur = Subst_Unhandled; + // Run the engine for both modify_type and the probe, so the NoMatch-skips-the-mutator invariant the + // production path relies on is covered here too. Only construct/bind for modify_type. + SubstResult verify_ur = subst_unify(ctx, poly_type, operand.type, &verify_subst); Type *verify_applied = nullptr; - if (modify_type) { - verify_ur = subst_unify(ctx, poly_type, operand.type, &verify_subst); - if (verify_ur == Subst_Matched) { - verify_applied = subst_apply(ctx, poly_type, operand.type, &verify_subst); - } + if (modify_type && verify_ur == Subst_Matched) { + verify_applied = subst_apply(ctx, poly_type, operand.type, &verify_subst); } if (is_polymorphic_type_assignable(ctx, poly_type, operand.type, false, modify_type)) { if (verify_ur == Subst_Matched) { - GB_ASSERT_MSG(are_types_identical(verify_applied, poly_type), - "parapoly subst mismatch: applied '%s' vs mutated '%s'", - type_to_string(verify_applied), type_to_string(poly_type)); - subst_verify_entities(&verify_subst); - return verify_applied; + if (modify_type) { + GB_ASSERT_MSG(are_types_identical(verify_applied, poly_type), + "parapoly subst mismatch: applied '%s' vs mutated '%s'", + type_to_string(verify_applied), type_to_string(poly_type)); + subst_verify_entities(&verify_subst); + return verify_applied; + } + return poly_type; } else if (verify_ur == Subst_NoMatch) { GB_PANIC("parapoly subst reported NoMatch but in-place match succeeded (result '%s')", type_to_string(poly_type)); } @@ -3181,7 +3218,7 @@ gb_internal Type *check_get_params(CheckerContext *ctx, Scope *scope, Ast *_para } bool modify_type = !ctx->no_polymorphic_errors; - if (specialization != nullptr && !check_type_specialization_to(ctx, specialization, type, false, modify_type, /*finalize*/false)) { + if (specialization != nullptr && !subst_check_specialization(ctx, specialization, type, modify_type)) { if (!ctx->no_polymorphic_errors) { gbString t = type_to_string(type); gbString s = type_to_string(specialization); From cb11ea891c1559132893c0ae4c79ec6287e14a46 Mon Sep 17 00:00:00 2001 From: gingerBill Date: Wed, 30 Sep 2026 21:24:04 +0100 Subject: [PATCH 088/215] parapoly: Handle `using`/`#subtype` correctly on a constraint generic field --- src/check_type.cpp | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/check_type.cpp b/src/check_type.cpp index d44f7b6b2..36c5c07ca 100644 --- a/src/check_type.cpp +++ b/src/check_type.cpp @@ -65,6 +65,10 @@ gb_internal void populate_using_entity_scope(CheckerContext *ctx, Ast *node, Ast } Type *original_type = t; t = base_type(type_deref(t)); + // Promote through a constrained generic (`$P/Spec`) using its specialization's member layout. + if (t->kind == Type_Generic && t->Generic.specialized != nullptr) { + t = base_type(t->Generic.specialized); + } if (t->kind == Type_Struct) { for (Entity *f : t->Struct.fields) { @@ -100,6 +104,11 @@ gb_internal void populate_using_entity_scope(CheckerContext *ctx, Ast *node, Ast gb_internal bool does_field_type_allow_using(Type *t) { t = base_type(t); + // A constrained generic field (`$P/Spec`) carries its member layout in the specialization, so + // `using`/`#subtype` can promote through it even though the generic itself is not yet concrete. + if (t->kind == Type_Generic && t->Generic.specialized != nullptr) { + t = base_type(t->Generic.specialized); + } if (is_type_struct(t)) { return true; } else if (is_type_array(t)) { From 255b3da8b5b91abcf4c8e5c637d03dffc438836c Mon Sep 17 00:00:00 2001 From: gingerBill Date: Wed, 30 Sep 2026 21:58:47 +0100 Subject: [PATCH 089/215] parapoly: match `$T/Constraint` through the subst engine --- src/check_expr.cpp | 15 ++++++++++----- src/check_type.cpp | 43 +++++++++++++++++++++++++++++++++---------- 2 files changed, 43 insertions(+), 15 deletions(-) diff --git a/src/check_expr.cpp b/src/check_expr.cpp index 69006f3c1..305e3fa68 100644 --- a/src/check_expr.cpp +++ b/src/check_expr.cpp @@ -1475,11 +1475,16 @@ gb_internal bool polymorphic_assign_index(Type **gt_, i64 *dst_count, i64 source return false; } -// In-place matcher: mutates `poly` to bind its polymorphic vars to `source`. This is no longer the -// primary resolver (see the substitution engine in check_type.cpp). determine_type_from_polymorphic -// uses it only as a fallback for the patterns the engine reports Subst_Unhandled for (genuine -// subtyping, and the ^<->[^] case) and for the non-modify_type (no_polymorphic_errors) yes/no probe. -// The probe keeps every kind here reachable, so these cases are not dead code. +// In-place matcher: mutates `poly` to bind its polymorphic vars to `source`. This is NOT the primary +// resolver — the substitution engine in check_type.cpp handles determine_type_from_polymorphic (both +// the resolve and the probe) and spec-conformance (subst_check_specialization / subst_unify_constraint), +// and as of the constraint fix it covers those completely: instrumentation shows this matcher produces +// no successful result in either path across the stdlib. It is still genuinely reached from: +// * check_distance_between_types (assignability scoring for overload resolution), +// * the type_is_specialization_of intrinsic (via check_type_specialization_to), +// * and as the never-succeeding Subst_Unhandled fallback of the two paths above (genuine subtyping and +// untyped/conversion cases the engine defers rather than resolves). +// Deleting it outright would require reimplementing subtyping and conversion matching in the engine. gb_internal bool is_polymorphic_type_assignable(CheckerContext *c, Type *poly, Type *source, bool compound, bool modify_type) { Operand o = {Addressing_Value}; o.type = source; diff --git a/src/check_type.cpp b/src/check_type.cpp index 36c5c07ca..78da710c5 100644 --- a/src/check_type.cpp +++ b/src/check_type.cpp @@ -1953,6 +1953,34 @@ gb_internal bool subst_source_is_template_instance(Type *source, Type *spec) { return false; } +gb_internal SubstResult subst_unify(CheckerContext *c, Type *pattern, Type *source, PolySubst *subst); + +// Match a constraint `spec` against `source` (does `$T/spec` accept `source`?), binding spec's nested +// vars. Mirrors check_type_specialization_to: bare template, record conformance (via the Named types), +// an untyped source's default type, or a base-typed structural match for everything else — so unlike a +// plain subst_unify it sees through named/distinct types (e.g. `[dynamic]$E` vs a `distinct [dynamic]V`). +// Anything it cannot cleanly resolve (subtyping, untyped conversions, cross-kind) is deferred as +// Subst_Unhandled to check_type_specialization_to. +gb_internal SubstResult subst_unify_constraint(CheckerContext *c, Type *spec, Type *source, PolySubst *subst) { + if (source == nullptr || source == t_invalid) { + return Subst_Matched; + } + if (subst_source_is_template_instance(source, spec)) { + return Subst_Matched; + } + Type *sb = base_type(spec); + Type *tb = base_type(source); + SubstResult r; + if (is_type_untyped(tb)) { + r = subst_unify(c, spec, default_type(source), subst); + } else if (sb->kind == Type_Struct || sb->kind == Type_Union) { + r = subst_unify(c, spec, source, subst); // record conformance keeps the Named types (match params) + } else { + r = subst_unify(c, sb, tb, subst); // general: base-typed structural match + } + return r == Subst_Matched ? Subst_Matched : Subst_Unhandled; +} + gb_internal SubstResult subst_unify(CheckerContext *c, Type *pattern, Type *source, PolySubst *subst) { if (pattern == nullptr || source == nullptr) { return Subst_Unhandled; @@ -1965,15 +1993,10 @@ gb_internal SubstResult subst_unify(CheckerContext *c, Type *pattern, Type *sour return Subst_NoMatch; case Type_Generic: if (pattern->Generic.specialized != nullptr) { - // Constrained generic `$T/S`: bind the nested vars of `S` against the source (e.g. `$U` in - // `$T/Stack($U)`, or `$T`/`$E` in `$P/proc($T)->$E`), then bind T. A bare template `$T/Stack` - // needs no nested binding, only that the source is an instantiation of it. - Type *spec = pattern->Generic.specialized; - if (!subst_source_is_template_instance(source, spec)) { - SubstResult r = subst_unify(c, spec, source, subst); - if (r != Subst_Matched) { - return Subst_Unhandled; - } + // Constrained generic `$T/S`: match the constraint (binding its nested vars, e.g. `$U` in + // `$T/Stack($U)` or `$T`/`$E` in `$P/proc($T)->$E`), then bind T. + if (subst_unify_constraint(c, pattern->Generic.specialized, source, subst) != Subst_Matched) { + return Subst_Unhandled; } } if (poly_subst_bind_type(subst, poly_generic_entity(pattern), default_type(source))){ @@ -2669,7 +2692,7 @@ gb_internal bool subst_check_specialization(CheckerContext *ctx, Type *specializ PolySubst sub = {}; sub.items.allocator = heap_allocator(); defer (array_free(&sub.items)); - SubstResult ur = subst_unify(ctx, specialization, type, &sub); + SubstResult ur = subst_unify_constraint(ctx, specialization, type, &sub); #if PARAPOLY_DEBUG_VERIFY_SUBST // Debug: the old check is authoritative; assert the engine's short-circuit agrees with it. bool old = check_type_specialization_to(ctx, specialization, type, false, modify_type, /*finalize*/false); From 12ba8a9d83757a26557274551f493409487660ff Mon Sep 17 00:00:00 2001 From: gingerBill Date: Wed, 30 Sep 2026 22:06:38 +0100 Subject: [PATCH 090/215] parapoly: add regression tests and the concurrency stress harness --- tests/parapoly/test_parapoly.odin | 133 ++++++++++ tests/parapoly_concurrency/.gitignore | 1 + tests/parapoly_concurrency/README.md | 66 +++++ tests/parapoly_concurrency/poly_stress.py | 301 ++++++++++++++++++++++ 4 files changed, 501 insertions(+) create mode 100644 tests/parapoly/test_parapoly.odin create mode 100644 tests/parapoly_concurrency/.gitignore create mode 100644 tests/parapoly_concurrency/README.md create mode 100644 tests/parapoly_concurrency/poly_stress.py diff --git a/tests/parapoly/test_parapoly.odin b/tests/parapoly/test_parapoly.odin new file mode 100644 index 000000000..f7c210a29 --- /dev/null +++ b/tests/parapoly/test_parapoly.odin @@ -0,0 +1,133 @@ +package test_parapoly + +// Regression tests for the parametric-polymorphism substitution engine. Each exercises a case that was +// fixed or newly supported; several are run *through codegen* (not just type-checked) because the bugs +// they guard against (e.g. a map's uninitialized internal types, a dropped #sparse flag) were invisible +// to type-checking and only surfaced at code generation / runtime. +// +// This package is intentionally NOT part of the CI test set (tests/internal, tests/core, ...); run it +// directly with: odin test tests/parapoly + +import "core:testing" +import "core:reflect" + +// --- helpers (package-level: polymorphic procs/types must be top-level) ----------------------------- + +PP_Dir :: enum { N, E, S, W } +PP_E :: enum { A = 1, B = 3, C = 7 } // non-contiguous -> requires #sparse + +PP_Stack :: struct($T: typeid) { data: [dynamic]T } +PP_Base :: struct($T: typeid) { x: T } +PP_Bar :: struct($X: typeid) { v: X } +PP_Foo :: struct($T: typeid) { item: T } +PP_DArr :: distinct [dynamic]int + +pp_map_use :: proc(m: ^map[$K]$V, k: K, v: V) -> (V, bool, int) { + m[k] = v + r, ok := m[k] + return r, ok, len(m^) +} +pp_sparse :: proc(a: #sparse[PP_E]$T) -> (T, bool) { + info := type_info_of(type_of(a)) + ea := info.variant.(reflect.Type_Info_Enumerated_Array) + return a[.C], ea.is_sparse +} +pp_union_first :: proc(u: union{$T, int}) -> T { v, _ := u.(T); return v } +pp_union_pair :: proc(u: union{$A, $B}) -> (typeid, typeid) { return A, B } +pp_struct_sum :: proc(s: struct{x: $T, y: T}) -> T { return s.x + s.y } +pp_struct_grid :: proc(s: struct{cell: $T, row: [3]T, tbl: [2][2]T}) -> typeid { return T } +pp_bitfield :: proc(b: bit_field $T { a: u8 | 3, c: u8 | 5 }) -> u8 { return b.a + b.c } +pp_grab :: proc(a: [$N]$T) -> T { for v in a { return v }; z: T; return z } +pp_ptr :: proc(p: ^$T) -> typeid { return T } +pp_mp :: proc(p: [^]$T) -> typeid { return T } +pp_cg_proc :: proc(f: $P/proc(_: $A) -> $R) -> (typeid, typeid) { return A, R } +pp_cg_stack :: proc(s: $T/PP_Stack($U)) -> typeid { return U } +pp_cg_bare :: proc(s: $T/PP_Stack) -> int { return len(s.data) } +pp_cg_record :: proc(f: PP_Foo($T/PP_Bar($U))) -> typeid { return U } +pp_cg_distinct :: proc(a: $T/[dynamic]$E) -> typeid { return E } +pp_using :: proc(s: struct{ using b: $P/PP_Base($T), z: int }) -> T { return s.x } +pp_ho :: proc(a: int) -> bool { return a > 0 } + +// --- tests ------------------------------------------------------------------------------------------ + +@test +parapoly_poly_map :: proc(t: ^testing.T) { // guards the map codegen crash (init_map_internal_types) + m := make(map[string]int); defer delete(m) + r, ok, n := pp_map_use(&m, "a", 7) + testing.expect(t, r == 7 && ok && n == 1, "poly map insert/lookup/len") + m["b"] = 3 + total := 0 + for _, v in m { total += v } + testing.expect(t, total == 10, "poly map for-range") +} + +@test +parapoly_sparse_enum_array :: proc(t: ^testing.T) { // guards the dropped is_sparse + x: #sparse[PP_E]int + x[.C] = 42 + v, is_sparse := pp_sparse(x) + testing.expect(t, v == 42, "sparse enum array indexing") + testing.expect(t, is_sparse, "resolved #sparse array keeps is_sparse") +} + +@test +parapoly_anon_union :: proc(t: ^testing.T) { + u: union{f32, int} = f32(2.5) + testing.expect(t, pp_union_first(u) == 2.5, "anon union $T inference + variant extract") + a, b := pp_union_pair(u) + testing.expect(t, a == f32 && b == int, "two-var anon union") +} + +@test +parapoly_anon_struct :: proc(t: ^testing.T) { + testing.expect(t, pp_struct_sum(struct{x: int, y: int}{3, 4}) == 7, "anon struct field poly + use") + g: struct{cell: u8, row: [3]u8, tbl: [2][2]u8} + testing.expect(t, pp_struct_grid(g) == u8, "anon struct reused var across nested compound") +} + +@test +parapoly_bit_field_backing :: proc(t: ^testing.T) { + x: bit_field u16 { a: u8 | 3, c: u8 | 5 } + x.a = 5; x.c = 9 + testing.expect(t, pp_bitfield(x) == 14, "poly bit_field backing + field access") +} + +@test +parapoly_array_enum_ambiguity :: proc(t: ^testing.T) { // the [$N]$T fixed-vs-enumerated ambiguity + testing.expect(t, pp_grab([3]int{10, 20, 30}) == 10, "[$N]$T fixed array") + ea: [PP_Dir]int + ea[.N] = 7 + testing.expect(t, pp_grab(ea) == 7, "[$N]$T enumerated array") +} + +@test +parapoly_ptr_multipointer :: proc(t: ^testing.T) { + x: int + arr: [4]int + m: [^]int = &arr[0] + testing.expect(t, pp_ptr(&x) == int, "^$T <- ^int") + testing.expect(t, pp_ptr(m) == int, "^$T <- [^]int (cross-kind)") + testing.expect(t, pp_mp(m) == int, "[^]$T <- [^]int") + testing.expect(t, pp_mp(&x) == int, "[^]$T <- ^int (cross-kind)") +} + +@test +parapoly_constrained_generics :: proc(t: ^testing.T) { + a, r := pp_cg_proc(pp_ho) + testing.expect(t, a == int && r == bool, "$P/proc($A)->$R") + s: PP_Stack(f32) + testing.expect(t, pp_cg_stack(s) == f32, "$T/PP_Stack($U)") + s2: PP_Stack(u8) + testing.expect(t, pp_cg_bare(s2) == 0, "$T/PP_Stack bare-template constraint") + f: PP_Foo(PP_Bar(int)) + testing.expect(t, pp_cg_record(f) == int, "PP_Foo($T/PP_Bar($U)) record-param constraint") + d: PP_DArr + testing.expect(t, pp_cg_distinct(d) == int, "$T/[dynamic]$E through a distinct type") +} + +@test +parapoly_using_constraint :: proc(t: ^testing.T) { // using on a constrained-generic field + v: struct{ using b: PP_Base(int), z: int } + v.x = 42 + testing.expect(t, pp_using(v) == 42, "using $P/PP_Base($T) + promoted-member access") +} diff --git a/tests/parapoly_concurrency/.gitignore b/tests/parapoly_concurrency/.gitignore new file mode 100644 index 000000000..e96b7d6ec --- /dev/null +++ b/tests/parapoly_concurrency/.gitignore @@ -0,0 +1 @@ +_work/ diff --git a/tests/parapoly_concurrency/README.md b/tests/parapoly_concurrency/README.md new file mode 100644 index 000000000..daace6558 --- /dev/null +++ b/tests/parapoly_concurrency/README.md @@ -0,0 +1,66 @@ +# Parametric-polymorphism concurrency harness + +`poly_stress.py` stress-tests the multithreaded checker's polymorphic instantiation paths and +checks that they are deterministic across thread counts. + +The checker instantiates polymorphic procedures and records on a thread pool, mutating and +caching shared `Type`/`Entity` nodes. That machinery is delicate, so this harness looks for: + +- **Deadlocks** — e.g. a cross-record ABBA on the per-record `gen_types` mutexes, hit when two + mutually-recursive generic records (`A(T)` referencing `^B(T)` and `B(T)` referencing `^A(T)`) + are instantiated concurrently. +- **Crashes** — asserts, stack overflows, or data races on shared nodes. +- **Nondeterminism** — duplicate or missing monomorphizations that leak into the emitted symbol + set (e.g. from a check-then-act race in a generated-entity cache). + +## How it works + +It generates a corpus of many polymorphic procedures and records — including many +mutually-recursive generic pairs, each entered from both directions by different procedures so +worker threads race on the two records' caches in crossing order. It builds the corpus with +`-build-mode:llvm` (checker + IR only; fast, no linking), then compares a **single-threaded +baseline** against many **multi-threaded** builds: + +- a per-run timeout is reported as a **deadlock**, +- a nonzero exit as a **crash**, +- a differing set of emitted `define` symbols as **nondeterminism**. + +The emitted `define` set is an order-independent fingerprint of the polymorphic *procedure* +instantiations; procedures parameterized over the records surface record-instantiation +differences there too. + +## Usage + +From this directory (adjust `--odin` to your built compiler): + +```sh +# struct pairs (default), heavy run: +python poly_stress.py all --odin ../../odin.exe --work ./_work \ + --kind struct --pairs 300 --procs 200 --threads 32 --iters 25 + +# union pairs: +python poly_stress.py all --odin ../../odin.exe --work ./_work --kind union --pairs 50 + +# specialization constraints ($V/Vec($T,$N)) — stresses the in-place memmove in +# check_type_specialization_to_internal: +python poly_stress.py all --odin ../../odin.exe --work ./_work --kind spec --pairs 120 + +# generate a corpus once, then run against it repeatedly: +python poly_stress.py gen --out ./_work/corpus --kind struct --pairs 300 +python poly_stress.py run --odin ../../odin.exe --corpus ./_work/corpus --work ./_work +``` + +`--work` is a scratch directory for the generated corpus and the emitted `.ll` output; it can be +deleted between runs. + +Exit code is `0` on pass, `1` on a deadlock/crash/nondeterminism, `2` if the baseline itself +fails to build. + +## Notes + +- `--kind union` currently exercises mutually-recursive generic *unions*, which reproduce a + pre-existing compile-time stack overflow (unions lack the "variants ready" wait-signal that + lets the struct version terminate its recursion through the instantiation cache). Use it to + validate a fix for that. +- Increase `--pairs`, `--threads`, `--width`, and `--iters` to widen the race window and raise + the chance of catching a rare interleaving. diff --git a/tests/parapoly_concurrency/poly_stress.py b/tests/parapoly_concurrency/poly_stress.py new file mode 100644 index 000000000..564967b0c --- /dev/null +++ b/tests/parapoly_concurrency/poly_stress.py @@ -0,0 +1,301 @@ +#!/usr/bin/env python3 +""" +Parametric-polymorphism concurrency stress / determinism harness for the Odin compiler. + +The checker instantiates polymorphic procedures and records on a thread pool. This harness +exercises those paths hard enough to surface: + + * DEADLOCKS - e.g. a cross-record ABBA on the per-record gen_types mutexes, hit by two + mutually-recursive generic records instantiated concurrently (A(T) has a + ^B(T) field/variant and B(T) has a ^A(T) one). + * CRASHES - asserts / stack overflows / data races on shared Type or Entity nodes. + * NONDETERMINISM - duplicate or missing monomorphizations that leak into the emitted symbol + set (e.g. from a check-then-act race in a gen cache). + +Method: generate a corpus that instantiates many polymorphic procedures and records, including +many mutually-recursive generic record pairs entered from both directions concurrently, build it +with -build-mode:llvm (checker + IR only, fast, no linking), and compare a single-threaded +baseline against many multi-threaded builds. A per-run timeout is treated as a deadlock, a +nonzero exit as a crash, and a differing set of emitted `define` symbols as nondeterminism. + +Examples +-------- + # struct pairs (the default), heavy: + python poly_stress.py all --odin ../../odin.exe --work ./_work \ + --kind struct --pairs 300 --procs 200 --threads 32 --iters 25 + + # union pairs (currently reproduces a pre-existing mutual-recursion crash): + python poly_stress.py all --odin ../../odin.exe --work ./_work --kind union --pairs 50 + + # generate once, then run repeatedly: + python poly_stress.py gen --out ./_work/corpus --kind struct --pairs 300 + python poly_stress.py run --odin ../../odin.exe --corpus ./_work/corpus --work ./_work +""" + +import argparse +import os +import re +import shutil +import subprocess +import sys +import time + +DEFINE_RE = re.compile(r'^define\b.*?(@"[^"]+"|@[\w.$]+)', re.MULTILINE) +TYPES = ["int", "u8", "u16", "u32", "i64", "f32", "f64", "uintptr"] + + +def _recursive_pair(kind, i, width): + """Emit a mutually-recursive generic record pair A_i(T) <-> B_i(T).""" + if kind == "struct": + fa = "".join(f" f{j}: Box({TYPES[j % len(TYPES)]}),\n" for j in range(width)) + fb = "".join(f" g{j}: Box({TYPES[(j + 1) % len(TYPES)]}),\n" for j in range(width)) + return [ + f"Node_A_{i} :: struct($T: typeid) {{\n val: T,\n{fa} other: ^Node_B_{i}(T),\n}}", + f"Node_B_{i} :: struct($T: typeid) {{\n val: T,\n{fb} other: ^Node_A_{i}(T),\n}}", + ] + # union: extra Box variants widen the "holding A, acquiring B" window + va = "".join(f" Box({TYPES[j % len(TYPES)]})," for j in range(width)) + vb = "".join(f" Box({TYPES[(j + 1) % len(TYPES)]})," for j in range(width)) + return [ + f"Node_A_{i} :: union($T: typeid) {{ T,{va} ^Node_B_{i}(T) }}", + f"Node_B_{i} :: union($T: typeid) {{ T,{vb} ^Node_A_{i}(T) }}", + ] + + +def _use_procs(kind, i, ty): + """Procs entering the pair from opposite directions with the same type arg. + Returns a list of (name, body) pairs. The two `use_*` procs trigger the + concurrent instantiation (ABBA bait). For unions the `read_*` procs additionally + perform variant operations (assign / type-switch / type-assert) that read the + in-progress union's variants, exercising the variants_wait_signal.""" + if kind == "struct": + return [ + (f"use_a_{i}", f"x: Node_A_{i}({ty}); x.val = 0; _ = x"), + (f"use_b_{i}", f"y: Node_B_{i}({ty}); y.val = 0; _ = y"), + ] + read = ( + f"x = {ty}(0)\n" + f" #partial switch v in x {{ case {ty}: _ = v }}\n" + f" if v, ok := x.({ty}); ok {{ _ = v }}" + ) + return [ + (f"use_a_{i}", f"x: Node_A_{i}({ty}); _ = x"), + (f"use_b_{i}", f"y: Node_B_{i}({ty}); _ = y"), + (f"read_a_{i}", f"x: Node_A_{i}({ty})\n {read}"), + (f"read_b_{i}", f"x: Node_B_{i}({ty})\n {read}"), + ] + + +def gen_corpus(out_dir, kind, pairs, procs, width): + os.makedirs(out_dir, exist_ok=True) + for f in os.listdir(out_dir): + if f.endswith(".odin"): + os.remove(os.path.join(out_dir, f)) + + if kind == "spec": + _write(out_dir, _spec_lines(pairs, procs)) + print(f"[gen] spec: {pairs} specialized record families, {procs} caller procs") + print(f"[gen] -> {os.path.join(out_dir, 'corpus.odin')}") + return + + L = ["package corpus\n"] + + # standalone polymorphic procedures + L += [ + "p_id :: proc(x: $T) -> T { return x }", + "p_sum :: proc(a: [$N]$T) -> T { t: T; for v in a { t += v }; return t }", + "p_len :: proc(m: map[$K]$V) -> int { return len(m) }", + "p_arr :: proc($T: typeid, $N: int) -> [N]T { a: [N]T; return a }", + "", + # simple polymorphic records + "Box :: struct($T: typeid) { value: T }", + "Pair :: struct($A: typeid, $B: typeid) { first: A, second: B }", + "Fixed :: struct($T: typeid, $N: int) { data: [N]T }", + "", + ] + + # mutually-recursive generic record pairs (ABBA bait) + for i in range(pairs): + L += _recursive_pair(kind, i, width) + L.append("") + + calls = [] + for i in range(pairs): + for name, body in _use_procs(kind, i, TYPES[i % len(TYPES)]): + L.append(f"{name} :: proc() {{\n {body}\n}}") + calls.append(f"{name}()") + + # extra generic-proc/record instantiation churn + for p in range(procs): + ty = TYPES[p % len(TYPES)] + n = (p % 6) + 1 + body = "\n".join([ + f" _ = p_id({ty}(0))", + f" _ = p_sum([{n}]{ty}{{}})", + f" b: Box({ty}); _ = b", + f" pr: Pair({ty}, {TYPES[(p + 1) % len(TYPES)]}); _ = pr", + f" fx: Fixed({ty}, {n}); _ = fx", + ]) + L.append(f"work_{p} :: proc() {{\n{body}\n}}") + calls.append(f"work_{p}()") + + L.append("main :: proc() {") + L += [f" {c}" for c in calls] + L.append("}") + + _write(out_dir, L) + print(f"[gen] {kind}: {pairs} recursive pairs, {procs} churn procs, width={width}") + print(f"[gen] -> {os.path.join(out_dir, 'corpus.odin')}") + + +def _write(out_dir, lines): + with open(os.path.join(out_dir, "corpus.odin"), "w", newline="\n") as fh: + fh.write("\n".join(lines) + "\n") + + +def _spec_lines(recs, procs): + """Specialization-constraint corpus: stresses the in-place memmove in + check_type_specialization_to_internal (constraint `$V/Vec($T,$N)` matching).""" + L = ["package corpus\n"] + for j in range(recs): + L.append(f"Vec_{j} :: struct($T: typeid, $N: int) {{ data: [N]T }}") + for j in range(recs): + L.append(f"Wrap_{j} :: struct($T: typeid, $N: int) {{ inner: Vec_{j}(T, N), tag: int }}") + L.append("") + for j in range(recs): + L.append(f"use_{j} :: proc(v: $V/Vec_{j}($T, $N)) -> T {{ t: T; for i in 0.. T {{ return use_{j}(w.inner) }}") + L.append("") + calls = [] + for p in range(procs): + j, ty, n = p % recs, TYPES[p % len(TYPES)], (p % 4) + 1 + L.append(f"work_{p} :: proc() {{\n" + f" v: Vec_{j}({ty}, {n}); _ = use_{j}(v)\n" + f" w: Wrap_{j}({ty}, {n}); _ = wuse_{j}(w)\n}}") + calls.append(f"work_{p}()") + L.append("main :: proc() {") + L += [f" {c}" for c in calls] + L.append("}") + return L + + +def defines_of(ll_dir): + syms = set() + if not os.path.isdir(ll_dir): + return syms + for f in os.listdir(ll_dir): + if not f.endswith(".ll"): + continue + if f.startswith("runtime-") or f in ("builtin.ll", "sanitizer.ll"): + continue # runtime modules are identical across runs, just noise + with open(os.path.join(ll_dir, f), "r", errors="replace") as fh: + for m in DEFINE_RE.finditer(fh.read()): + syms.add(m.group(1)) + return syms + + +def build_once(odin, corpus, out_dir, threads, timeout): + """Return (status, elapsed, defines); status in {ok, deadlock, crash}.""" + if os.path.isdir(out_dir): + shutil.rmtree(out_dir, ignore_errors=True) + os.makedirs(out_dir, exist_ok=True) + cmd = [odin, "build", corpus, "-build-mode:llvm", + f"-thread-count:{threads}", "-out:" + out_dir] + t0 = time.time() + try: + p = subprocess.run(cmd, capture_output=True, text=True, timeout=timeout) + except subprocess.TimeoutExpired: + return "deadlock", time.time() - t0, set() + elapsed = time.time() - t0 + if p.returncode != 0: + sys.stdout.write(p.stdout[-2000:]) + sys.stderr.write(p.stderr[-2000:]) + return "crash", elapsed, set() + return "ok", elapsed, defines_of(out_dir) + + +def run(odin, corpus, work, threads, iters, timeout): + print("[run] baseline build (thread-count:1) ...") + status, elapsed, base = build_once(odin, corpus, os.path.join(work, "ll_base"), 1, timeout) + if status != "ok": + print(f"[FAIL] baseline build failed: {status} ({elapsed:.1f}s)") + return 2 + print(f"[run] baseline ok in {elapsed:.2f}s, {len(base)} poly define symbols") + + fails = 0 + flaky = 0 + for i in range(iters): + d = os.path.join(work, f"ll_mt_{i}") + status, elapsed, syms = build_once(odin, corpus, d, threads, timeout) + tag = f"[{i + 1}/{iters}] threads={threads}" + # A timeout or nonzero exit can be transient system load (a starved build hitting the wall + # clock), not a real hang/crash. A genuine deadlock/crash reproduces deterministically, so + # retry once: if the retry is clean, treat it as a load artifact rather than a failure. + if status in ("deadlock", "crash"): + r = os.path.join(work, f"ll_mt_{i}_retry") + status, elapsed, syms = build_once(odin, corpus, r, threads, timeout) + if status == "ok" and syms == base: + print(f"{tag}: transient (cleared on retry, likely system load) — not counted") + flaky += 1 + shutil.rmtree(r, ignore_errors=True) + continue + if status == "deadlock": + print(f"{tag}: DEADLOCK (timed out after {timeout}s, twice) <<<"); fails += 1; continue + if status == "crash": + print(f"{tag}: CRASH (nonzero exit, twice) <<<"); fails += 1; continue + if syms != base: + print(f"{tag}: NONDETERMINISTIC symbol set (+{len(syms - base)} / -{len(base - syms)}) <<<") + miss, extra = sorted(base - syms)[:5], sorted(syms - base)[:5] + if miss: + print(f" missing vs baseline: {miss}") + if extra: + print(f" extra vs baseline: {extra}") + fails += 1 + continue + print(f"{tag}: ok ({elapsed:.2f}s, {len(syms)} syms)") + shutil.rmtree(d, ignore_errors=True) + + print("-" * 60) + flaky_note = f" ({flaky} transient, cleared on retry)" if flaky else "" + if fails == 0: + print(f"[PASS] {iters}/{iters} multi-threaded runs matched baseline, no hang/crash.{flaky_note}") + return 0 + print(f"[FAIL] {fails}/{iters} runs had a reproducible deadlock/crash/nondeterminism.{flaky_note}") + return 1 + + +def main(): + ap = argparse.ArgumentParser(description=__doc__, formatter_class=argparse.RawDescriptionHelpFormatter) + sub = ap.add_subparsers(dest="cmd", required=True) + + def add_gen_args(p): + p.add_argument("--kind", choices=("struct", "union", "spec"), default="struct") + p.add_argument("--pairs", type=int, default=300) + p.add_argument("--procs", type=int, default=200) + p.add_argument("--width", type=int, default=3) + + def add_run_args(p): + p.add_argument("--threads", type=int, default=16) + p.add_argument("--iters", type=int, default=20) + p.add_argument("--timeout", type=int, default=60) + + g = sub.add_parser("gen"); g.add_argument("--out", required=True); add_gen_args(g) + r = sub.add_parser("run") + r.add_argument("--odin", required=True); r.add_argument("--corpus", required=True) + r.add_argument("--work", required=True); add_run_args(r) + a = sub.add_parser("all") + a.add_argument("--odin", required=True); a.add_argument("--work", required=True) + add_gen_args(a); add_run_args(a) + + args = ap.parse_args() + if args.cmd == "gen": + gen_corpus(args.out, args.kind, args.pairs, args.procs, args.width); return 0 + if args.cmd == "run": + return run(args.odin, args.corpus, args.work, args.threads, args.iters, args.timeout) + corpus = os.path.join(args.work, "corpus") + gen_corpus(corpus, args.kind, args.pairs, args.procs, args.width) + return run(args.odin, corpus, args.work, args.threads, args.iters, args.timeout) + + +if __name__ == "__main__": + sys.exit(main()) From bbb2cf19a2f4510979b7f60f9fb9ef5347690f77 Mon Sep 17 00:00:00 2001 From: gingerBill Date: Wed, 30 Sep 2026 23:00:17 +0100 Subject: [PATCH 091/215] Begin work on deferring untyped compound literals in polymorphic call contexts --- src/check_expr.cpp | 86 +++++++++++++++++++++++++++++++++++++++++++--- src/checker.hpp | 1 + src/error.cpp | 28 +++++++++++++++ 3 files changed, 110 insertions(+), 5 deletions(-) diff --git a/src/check_expr.cpp b/src/check_expr.cpp index 305e3fa68..a2d052448 100644 --- a/src/check_expr.cpp +++ b/src/check_expr.cpp @@ -6686,6 +6686,10 @@ enum UnpackFlag : u32 { UnpackFlag_None = 0, UnpackFlag_AllowOk = 1<<0, UnpackFlag_AllowUndef = 1<<1, + // For calls to polymorphic procedures: a bare `{...}` argument with no concrete type hint is left + // unchecked as a deferred operand instead of erroring, to be resolved once the poly parameter's + // type is known (see materialize_deferred_compound_lit). + UnpackFlag_DeferUntypedCompoundLit = 1<<2, }; @@ -6756,7 +6760,18 @@ gb_internal bool check_unpack_arguments(CheckerContext *ctx, Entity **lhs, isize } Ast *rhs_expr = unparen_expr(rhs); - if (allow_undef && rhs_expr != nullptr && rhs_expr->kind == Ast_Uninit) { + bool defer_untyped_compound_lit = + (flags & UnpackFlag_DeferUntypedCompoundLit) != 0 && + rhs_expr != nullptr && rhs_expr->kind == Ast_CompoundLit && rhs_expr->CompoundLit.type == nullptr && + (type_hint == nullptr || is_type_polymorphic(type_hint)); + if (defer_untyped_compound_lit) { + // NOTE: Leave the literal unchecked; its type comes from the resolved poly parameter later. + // Kept as an "invalid" operand so polymorphic determination treats it as carrying no info. + o.mode = Addressing_Invalid; + o.type = t_invalid; + o.expr = rhs; + o.deferred_compound_lit = true; + } else if (allow_undef && rhs_expr != nullptr && rhs_expr->kind == Ast_Uninit) { // NOTE(bill): Just handle this very specific logic here o.type = t_untyped_uninit; o.mode = Addressing_Value; @@ -6891,6 +6906,39 @@ gb_internal isize lookup_procedure_parameter(Type *type, String const ¶meter return lookup_procedure_parameter(&type->Proc, parameter_name); } +// Resolve a deferred untyped compound-literal argument now that its parameter type is known. +// `param_type` is the concrete (post-substitution) parameter/element type for the slot. On success the +// operand is checked against it as if it had been written with that type; on failure it is marked +// invalid. When !show_error the check is muted (trial scoring of a procedure-group candidate) but its +// failure is still recorded, so the candidate can be rejected without printing anything. +gb_internal void materialize_deferred_compound_lit(CheckerContext *c, Operand *o, Type *param_type, bool show_error) { + GB_ASSERT(o->deferred_compound_lit); + o->deferred_compound_lit = false; + Ast *lit = o->expr; + + if (param_type == nullptr || param_type == t_invalid || is_type_polymorphic(param_type)) { + // The slot's type could not be determined from the other arguments, so the literal is genuinely + // untypable here (e.g. `proc(e: $E)` called with a bare `{...}`). Leave it invalid; polymorphic + // determination has already reported why the type could not be resolved. + o->mode = Addressing_Invalid; + o->type = t_invalid; + return; + } + + if (show_error) { + check_expr_base(c, o, lit, param_type); + } else { + i64 muted_before = error_mute_count(); + begin_error_mute(); + check_expr_base(c, o, lit, param_type); + end_error_mute(); + if (error_mute_count() != muted_before) { + o->mode = Addressing_Invalid; + o->type = t_invalid; + } + } +} + gb_internal CallArgumentError check_call_arguments_internal(CheckerContext *c, Ast *call, Entity *entity, Type *proc_type, Array positional_operands, Array const &named_operands, @@ -7232,6 +7280,9 @@ gb_internal CallArgumentError check_call_arguments_internal(CheckerContext *c, A for (isize i = 0; i < pt->param_count; i++) { Operand *o = &ordered_operands[i]; + if (o->deferred_compound_lit) { + materialize_deferred_compound_lit(c, o, pt->params->Tuple.variables[i]->type, show_error); + } if (o->mode == Addressing_Invalid) { continue; } @@ -7280,6 +7331,14 @@ gb_internal CallArgumentError check_call_arguments_internal(CheckerContext *c, A for_array(operand_index, variadic_operands) { Operand *o = &variadic_operands[operand_index]; + Operand deferred_local; + if (o->deferred_compound_lit) { + // `variadic_operands` aliases the shared operand buffer reused across candidates, so + // resolve into a local copy rather than mutating it in place. + deferred_local = *o; + materialize_deferred_compound_lit(c, &deferred_local, vari_expand ? slice : elem, show_error); + o = &deferred_local; + } if (vari_expand) { t = slice; if (operand_index > 0) { @@ -8391,13 +8450,17 @@ gb_internal CallArgumentData check_call_arguments(CheckerContext *c, Operand *op Entity **lhs = nullptr; isize lhs_count = -1; i32 variadic_index = -1; + UnpackFlags unpack_flags = UnpackFlag_None; if (pt != nullptr) { lhs = populate_proc_parameter_list(c, proc_type, &lhs_count); if (pt->variadic) { variadic_index = pt->variadic_index; } + if (pt->is_polymorphic) { + unpack_flags |= UnpackFlag_DeferUntypedCompoundLit; + } } - check_unpack_arguments(c, lhs, lhs_count, &positional_operands, positional_args, UnpackFlag_None, variadic_index); + check_unpack_arguments(c, lhs, lhs_count, &positional_operands, positional_args, unpack_flags, variadic_index); } if (named_args.count > 0) { @@ -8426,9 +8489,22 @@ gb_internal CallArgumentData check_call_arguments(CheckerContext *c, Operand *op } Operand o = {}; - check_expr_with_type_hint(c, &o, value, type_hint); - if (o.mode == Addressing_Invalid) { - any_failure = true; + Ast *value_expr = unparen_expr(value); + bool defer_untyped_compound_lit = + pt != nullptr && pt->is_polymorphic && + value_expr != nullptr && value_expr->kind == Ast_CompoundLit && value_expr->CompoundLit.type == nullptr && + (type_hint == nullptr || is_type_polymorphic(type_hint)); + if (defer_untyped_compound_lit) { + // Mirror the positional path: resolve the literal from the poly parameter's type later. + o.mode = Addressing_Invalid; + o.type = t_invalid; + o.expr = value; + o.deferred_compound_lit = true; + } else { + check_expr_with_type_hint(c, &o, value, type_hint); + if (o.mode == Addressing_Invalid) { + any_failure = true; + } } array_add(&named_operands, o); } diff --git a/src/checker.hpp b/src/checker.hpp index 81bcc8e25..9781e4c82 100644 --- a/src/checker.hpp +++ b/src/checker.hpp @@ -85,6 +85,7 @@ struct Operand { Ast * expr; BuiltinProcId builtin_id; Entity * proc_group; + bool deferred_compound_lit; // untyped `{...}` arg whose type is resolved from a poly param later }; diff --git a/src/error.cpp b/src/error.cpp index 277081459..3f7cb4aae 100644 --- a/src/error.cpp +++ b/src/error.cpp @@ -27,6 +27,26 @@ struct ErrorCollector { gb_global ErrorCollector global_error_collector; +// Scoped, per-thread error muting. While muted, error/warning emission is suppressed but still +// *counted*, so a caller can trial-check something (e.g. one branch of a procedure group) and learn +// whether it would have failed without printing anything. Muting nests. +gb_thread_local i32 global_error_mute_depth = 0; +gb_thread_local i64 global_error_mute_count = 0; + +gb_internal void begin_error_mute(void) { + global_error_mute_depth += 1; +} +gb_internal void end_error_mute(void) { + GB_ASSERT(global_error_mute_depth > 0); + global_error_mute_depth -= 1; +} +gb_internal i64 error_mute_count(void) { + return global_error_mute_count; +} +gb_internal bool is_error_muted(void) { + return global_error_mute_depth > 0; +} + gb_internal void push_error_value(TokenPos const &pos, ErrorValueKind kind = ErrorValue_Error) { GB_ASSERT_MSG(global_error_collector.curr_error_value_set.load() == false, "Possible race condition in error handling system, please report this with an issue"); @@ -542,6 +562,10 @@ gb_internal void error_out_coloured(char const *str, TerminalStyle style, Termin gb_internal void error_va(TokenPos const &pos, TokenPos end, char const *fmt, va_list va) { + if (global_error_mute_depth > 0) { + global_error_mute_count += 1; + return; + } global_error_collector.count.fetch_add(1); mutex_lock(&global_error_collector.mutex); if (global_error_collector.count > MAX_ERROR_COLLECTOR_COUNT()) { @@ -579,6 +603,10 @@ gb_internal void warning_va(TokenPos const &pos, TokenPos end, char const *fmt, if (global_ignore_warnings()) { return; } + if (global_error_mute_depth > 0) { + global_error_mute_count += 1; + return; + } global_error_collector.warning_count.fetch_add(1); mutex_lock(&global_error_collector.mutex); From a79cce3945f04cfce3ca8c65da8e8ae0674db5bd Mon Sep 17 00:00:00 2001 From: gingerBill Date: Wed, 30 Sep 2026 23:05:58 +0100 Subject: [PATCH 092/215] parapoly: Fix more cases of untyped expressions --- src/check_expr.cpp | 72 +++++++++++++++++++++++++++------------------- src/checker.hpp | 2 +- 2 files changed, 44 insertions(+), 30 deletions(-) diff --git a/src/check_expr.cpp b/src/check_expr.cpp index a2d052448..52a06bb9a 100644 --- a/src/check_expr.cpp +++ b/src/check_expr.cpp @@ -4418,6 +4418,21 @@ gb_internal bool is_ise_expr(Ast *node) { return node->kind == Ast_ImplicitSelectorExpr; } +// An argument expression that cannot be typed on its own and needs a target type. When passed to a +// polymorphic parameter whose type is only known after substitution, it is deferred and resolved once +// that type is determined (see materialize_deferred_untyped_arg). +gb_internal bool arg_is_deferrable_untyped_expr(Ast *node) { + node = unparen_expr(node); + if (node == nullptr) { + return false; + } + switch (node->kind) { + case Ast_CompoundLit: return node->CompoundLit.type == nullptr; + case Ast_ImplicitSelectorExpr: return true; + } + return false; +} + gb_internal bool can_use_other_type_as_type_hint(bool use_lhs_as_type_hint, Type *other_type) { if (use_lhs_as_type_hint) { // RHS in this case return other_type != nullptr && other_type != t_invalid && is_type_typed(other_type); @@ -6686,10 +6701,10 @@ enum UnpackFlag : u32 { UnpackFlag_None = 0, UnpackFlag_AllowOk = 1<<0, UnpackFlag_AllowUndef = 1<<1, - // For calls to polymorphic procedures: a bare `{...}` argument with no concrete type hint is left - // unchecked as a deferred operand instead of erroring, to be resolved once the poly parameter's - // type is known (see materialize_deferred_compound_lit). - UnpackFlag_DeferUntypedCompoundLit = 1<<2, + // For calls to polymorphic procedures: an argument that needs a target type (`{...}`, `.Member`) + // with no concrete type hint is left unchecked as a deferred operand instead of erroring, to be + // resolved once the poly parameter's type is known (see materialize_deferred_untyped_arg). + UnpackFlag_DeferUntypedArg = 1<<2, }; @@ -6760,17 +6775,17 @@ gb_internal bool check_unpack_arguments(CheckerContext *ctx, Entity **lhs, isize } Ast *rhs_expr = unparen_expr(rhs); - bool defer_untyped_compound_lit = - (flags & UnpackFlag_DeferUntypedCompoundLit) != 0 && - rhs_expr != nullptr && rhs_expr->kind == Ast_CompoundLit && rhs_expr->CompoundLit.type == nullptr && + bool defer_untyped_arg = + (flags & UnpackFlag_DeferUntypedArg) != 0 && + arg_is_deferrable_untyped_expr(rhs) && (type_hint == nullptr || is_type_polymorphic(type_hint)); - if (defer_untyped_compound_lit) { - // NOTE: Leave the literal unchecked; its type comes from the resolved poly parameter later. + if (defer_untyped_arg) { + // NOTE(bill): Leave the argument unchecked; its type comes from the resolved poly parameter later. // Kept as an "invalid" operand so polymorphic determination treats it as carrying no info. o.mode = Addressing_Invalid; o.type = t_invalid; o.expr = rhs; - o.deferred_compound_lit = true; + o.deferred_untyped_arg = true; } else if (allow_undef && rhs_expr != nullptr && rhs_expr->kind == Ast_Uninit) { // NOTE(bill): Just handle this very specific logic here o.type = t_untyped_uninit; @@ -6906,18 +6921,18 @@ gb_internal isize lookup_procedure_parameter(Type *type, String const ¶meter return lookup_procedure_parameter(&type->Proc, parameter_name); } -// Resolve a deferred untyped compound-literal argument now that its parameter type is known. +// Resolve a deferred untyped argument (`{...}`, `.Member`) now that its parameter type is known. // `param_type` is the concrete (post-substitution) parameter/element type for the slot. On success the // operand is checked against it as if it had been written with that type; on failure it is marked // invalid. When !show_error the check is muted (trial scoring of a procedure-group candidate) but its // failure is still recorded, so the candidate can be rejected without printing anything. -gb_internal void materialize_deferred_compound_lit(CheckerContext *c, Operand *o, Type *param_type, bool show_error) { - GB_ASSERT(o->deferred_compound_lit); - o->deferred_compound_lit = false; - Ast *lit = o->expr; +gb_internal void materialize_deferred_untyped_arg(CheckerContext *c, Operand *o, Type *param_type, bool show_error) { + GB_ASSERT(o->deferred_untyped_arg); + o->deferred_untyped_arg = false; + Ast *expr = o->expr; if (param_type == nullptr || param_type == t_invalid || is_type_polymorphic(param_type)) { - // The slot's type could not be determined from the other arguments, so the literal is genuinely + // The slot's type could not be determined from the other arguments, so the argument is genuinely // untypable here (e.g. `proc(e: $E)` called with a bare `{...}`). Leave it invalid; polymorphic // determination has already reported why the type could not be resolved. o->mode = Addressing_Invalid; @@ -6926,11 +6941,11 @@ gb_internal void materialize_deferred_compound_lit(CheckerContext *c, Operand *o } if (show_error) { - check_expr_base(c, o, lit, param_type); + check_expr_base(c, o, expr, param_type); } else { i64 muted_before = error_mute_count(); begin_error_mute(); - check_expr_base(c, o, lit, param_type); + check_expr_base(c, o, expr, param_type); end_error_mute(); if (error_mute_count() != muted_before) { o->mode = Addressing_Invalid; @@ -7280,8 +7295,8 @@ gb_internal CallArgumentError check_call_arguments_internal(CheckerContext *c, A for (isize i = 0; i < pt->param_count; i++) { Operand *o = &ordered_operands[i]; - if (o->deferred_compound_lit) { - materialize_deferred_compound_lit(c, o, pt->params->Tuple.variables[i]->type, show_error); + if (o->deferred_untyped_arg) { + materialize_deferred_untyped_arg(c, o, pt->params->Tuple.variables[i]->type, show_error); } if (o->mode == Addressing_Invalid) { continue; @@ -7332,11 +7347,11 @@ gb_internal CallArgumentError check_call_arguments_internal(CheckerContext *c, A for_array(operand_index, variadic_operands) { Operand *o = &variadic_operands[operand_index]; Operand deferred_local; - if (o->deferred_compound_lit) { + if (o->deferred_untyped_arg) { // `variadic_operands` aliases the shared operand buffer reused across candidates, so // resolve into a local copy rather than mutating it in place. deferred_local = *o; - materialize_deferred_compound_lit(c, &deferred_local, vari_expand ? slice : elem, show_error); + materialize_deferred_untyped_arg(c, &deferred_local, vari_expand ? slice : elem, show_error); o = &deferred_local; } if (vari_expand) { @@ -8457,7 +8472,7 @@ gb_internal CallArgumentData check_call_arguments(CheckerContext *c, Operand *op variadic_index = pt->variadic_index; } if (pt->is_polymorphic) { - unpack_flags |= UnpackFlag_DeferUntypedCompoundLit; + unpack_flags |= UnpackFlag_DeferUntypedArg; } } check_unpack_arguments(c, lhs, lhs_count, &positional_operands, positional_args, unpack_flags, variadic_index); @@ -8489,17 +8504,16 @@ gb_internal CallArgumentData check_call_arguments(CheckerContext *c, Operand *op } Operand o = {}; - Ast *value_expr = unparen_expr(value); - bool defer_untyped_compound_lit = + bool defer_untyped_arg = pt != nullptr && pt->is_polymorphic && - value_expr != nullptr && value_expr->kind == Ast_CompoundLit && value_expr->CompoundLit.type == nullptr && + arg_is_deferrable_untyped_expr(value) && (type_hint == nullptr || is_type_polymorphic(type_hint)); - if (defer_untyped_compound_lit) { - // Mirror the positional path: resolve the literal from the poly parameter's type later. + if (defer_untyped_arg) { + // Mirror the positional path: resolve the argument from the poly parameter's type later. o.mode = Addressing_Invalid; o.type = t_invalid; o.expr = value; - o.deferred_compound_lit = true; + o.deferred_untyped_arg = true; } else { check_expr_with_type_hint(c, &o, value, type_hint); if (o.mode == Addressing_Invalid) { diff --git a/src/checker.hpp b/src/checker.hpp index 9781e4c82..36d9aa6e4 100644 --- a/src/checker.hpp +++ b/src/checker.hpp @@ -85,7 +85,7 @@ struct Operand { Ast * expr; BuiltinProcId builtin_id; Entity * proc_group; - bool deferred_compound_lit; // untyped `{...}` arg whose type is resolved from a poly param later + bool deferred_untyped_arg; // untyped arg (`{...}`, `.Member`) whose type is resolved from a poly param later }; From e961edcea216510dd1101c785902db35498a9efe Mon Sep 17 00:00:00 2001 From: gingerBill Date: Wed, 30 Sep 2026 23:13:48 +0100 Subject: [PATCH 093/215] Handle ternary expressions when doing implicit parapoly determination --- src/check_expr.cpp | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/src/check_expr.cpp b/src/check_expr.cpp index 52a06bb9a..5efe88653 100644 --- a/src/check_expr.cpp +++ b/src/check_expr.cpp @@ -4418,17 +4418,25 @@ gb_internal bool is_ise_expr(Ast *node) { return node->kind == Ast_ImplicitSelectorExpr; } -// An argument expression that cannot be typed on its own and needs a target type. When passed to a -// polymorphic parameter whose type is only known after substitution, it is deferred and resolved once -// that type is determined (see materialize_deferred_untyped_arg). gb_internal bool arg_is_deferrable_untyped_expr(Ast *node) { + if (node == nullptr) { + return false; + } node = unparen_expr(node); if (node == nullptr) { return false; } switch (node->kind) { - case Ast_CompoundLit: return node->CompoundLit.type == nullptr; - case Ast_ImplicitSelectorExpr: return true; + case Ast_CompoundLit: + return node->CompoundLit.type == nullptr; + case Ast_ImplicitSelectorExpr: + return true; + case Ast_TernaryIfExpr: + return arg_is_deferrable_untyped_expr(node->TernaryIfExpr.x) && + arg_is_deferrable_untyped_expr(node->TernaryIfExpr.y); + case Ast_TernaryWhenExpr: + return arg_is_deferrable_untyped_expr(node->TernaryWhenExpr.x) && + arg_is_deferrable_untyped_expr(node->TernaryWhenExpr.y); } return false; } From 5621e4e829213beba0781bd25001b9fb514ce63a Mon Sep 17 00:00:00 2001 From: gingerBill Date: Wed, 30 Sep 2026 23:42:22 +0100 Subject: [PATCH 094/215] Allow `append(&a, {1, 2})` --- src/check_expr.cpp | 33 ++++++++++++++++++++++++++++----- src/check_type.cpp | 7 +++++++ 2 files changed, 35 insertions(+), 5 deletions(-) diff --git a/src/check_expr.cpp b/src/check_expr.cpp index 5efe88653..637a4c0a3 100644 --- a/src/check_expr.cpp +++ b/src/check_expr.cpp @@ -6949,11 +6949,16 @@ gb_internal void materialize_deferred_untyped_arg(CheckerContext *c, Operand *o, } if (show_error) { + // Commit (the chosen overload): check the real node so its type is recorded exactly once. check_expr_base(c, o, expr, param_type); } else { + // Trial (procedure-group scoring): check a *clone* so the real node's cached type is never + // polluted across candidates that may resolve the slot to different types. Errors are muted but + // still counted, so a candidate that the argument does not fit is rejected without printing. + Ast *trial = clone_ast(expr); i64 muted_before = error_mute_count(); begin_error_mute(); - check_expr_base(c, o, expr, param_type); + check_expr_base(c, o, trial, param_type); end_error_mute(); if (error_mute_count() != muted_before) { o->mode = Addressing_Invalid; @@ -7491,7 +7496,7 @@ gb_internal bool evaluate_where_clauses(CheckerContext *ctx, Ast *call_expr, Sco } else if (!o.value.value_bool) { if (print_err) { ERROR_BLOCK(); - + gbString str = expr_to_string(clause); error(clause, "'where' clause evaluated to false:\n\t%s", str); gb_string_free(str); @@ -7608,6 +7613,15 @@ gb_internal bool check_named_arguments(CheckerContext *c, Type *type, Sliceis_polymorphic && type_hint == nullptr && arg_is_deferrable_untyped_expr(value)) { + // Defer: resolved from the poly parameter's type later (see the positional path). + o.mode = Addressing_Invalid; + o.type = t_invalid; + o.expr = value; + o.deferred_untyped_arg = true; + array_add(named_operands, o); + continue; + } check_expr_with_type_hint(c, &o, value, type_hint); if (o.mode == Addressing_Invalid) { success = false; @@ -7799,7 +7813,7 @@ gb_internal CallArgumentData check_call_arguments_proc_group(CheckerContext *c, variadic_index = pt->Proc.variadic_index; } } - check_unpack_arguments(c, lhs, lhs_count, &positional_operands, positional_args, UnpackFlag_None, variadic_index); + check_unpack_arguments(c, lhs, lhs_count, &positional_operands, positional_args, UnpackFlag_DeferUntypedArg, variadic_index); if (check_named_arguments(c, e->type, named_args, &named_operands, true)) { check_call_arguments_single(c, call, operand, @@ -7865,7 +7879,7 @@ gb_internal CallArgumentData check_call_arguments_proc_group(CheckerContext *c, if (!(pt != nullptr && is_type_proc(pt))) { continue; } - + if (pt->Proc.is_polymorphic) { if (variadic_index == -1) { variadic_index = pt->Proc.variadic_index; @@ -7882,7 +7896,7 @@ gb_internal CallArgumentData check_call_arguments_proc_group(CheckerContext *c, } } - check_unpack_arguments(c, lhs, lhs_count, &positional_operands, positional_args, UnpackFlag_None, variadic_index); + check_unpack_arguments(c, lhs, lhs_count, &positional_operands, positional_args, UnpackFlag_DeferUntypedArg, variadic_index); for_array(i, named_args) { Ast *arg = named_args[i]; @@ -7911,6 +7925,15 @@ gb_internal CallArgumentData check_call_arguments_proc_group(CheckerContext *c, } } Operand o = {}; + if (arg_is_deferrable_untyped_expr(value) && (type_hint == nullptr || is_type_polymorphic(type_hint))) { + // Defer: resolved per candidate from each overload's parameter type (see the positional path). + o.mode = Addressing_Invalid; + o.type = t_invalid; + o.expr = value; + o.deferred_untyped_arg = true; + array_add(&named_operands, o); + continue; + } check_expr_with_type_hint(c, &o, value, type_hint); array_add(&named_operands, o); } diff --git a/src/check_type.cpp b/src/check_type.cpp index 78da710c5..6ea164e3f 100644 --- a/src/check_type.cpp +++ b/src/check_type.cpp @@ -2741,6 +2741,13 @@ gb_internal Type *determine_type_from_polymorphic(CheckerContext *ctx, Type *pol bool modify_type = !ctx->no_polymorphic_errors; bool show_error = modify_type && !ctx->hide_polymorphic_errors; if (!is_operand_value(operand)) { + if (operand.deferred_untyped_arg && !modify_type) { + // Probe pass (procedure-group candidate pre-check): a deferred untyped argument carries no + // type yet, so it cannot constrain this parameter. Treat it as a match and let the real + // binding pass resolve the parameter from the other arguments. If the parameter is left + // polymorphic there (nothing else determines it), that pass fails, as it should. + return poly_type; + } if (show_error) { ERROR_BLOCK(); From 668559beeb64e9c3dbb0792232ee82436a8e3035 Mon Sep 17 00:00:00 2001 From: gingerBill Date: Thu, 1 Oct 2026 00:10:56 +0100 Subject: [PATCH 095/215] Improve parapoly error messages for near misses and de-emphasize overloads whose first parameter cannot accept the first argument's container --- src/check_expr.cpp | 108 ++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 106 insertions(+), 2 deletions(-) diff --git a/src/check_expr.cpp b/src/check_expr.cpp index 637a4c0a3..b26f65e9a 100644 --- a/src/check_expr.cpp +++ b/src/check_expr.cpp @@ -8084,16 +8084,26 @@ gb_internal CallArgumentData check_call_arguments_proc_group(CheckerContext *c, // error_line(")\n"); // }; + // A deferred untyped argument has no type of its own yet; show the expression instead of 'invalid type'. + auto operand_type_string = [](Operand const &o) -> gbString { + if (o.deferred_untyped_arg) { + gbString e = expr_to_string(o.expr); + gbString s = gb_string_append_fmt(gb_string_make(heap_allocator(), ""), "%s (untyped)", e); + gb_string_free(e); + return s; + } + return type_to_string(o.type); + }; auto print_argument_types = [&]() { error_line("\tGiven argument types:\n"); for (Operand const &o : positional_operands) { - gbString type = type_to_string(o.type); + gbString type = operand_type_string(o); defer (gb_string_free(type)); error_line("\t • %s\n", type); } for_array(i, named_operands) { Operand const &o = named_operands[i]; - gbString type = type_to_string(o.type); + gbString type = operand_type_string(o); defer (gb_string_free(type)); if (i < ce->split_args->named.count) { @@ -8120,6 +8130,37 @@ gb_internal CallArgumentData check_call_arguments_proc_group(CheckerContext *c, print_argument_types(); } + if (positional_operands.count >= 2 && positional_operands[0].type != nullptr) { + Type *cont = base_type(type_deref(positional_operands[0].type)); + Type *elem = nullptr; + if (cont != nullptr) { + if (cont->kind == Type_DynamicArray) { + elem = cont->DynamicArray.elem; + } else if (cont->kind == Type_Slice) { + elem = cont->Slice.elem; + } + } + if (elem != nullptr && !is_type_polymorphic(elem)) { + for (isize i = 1; i < positional_operands.count; i++) { + Operand src = positional_operands[i]; + if (src.deferred_untyped_arg || src.mode == Addressing_Invalid || src.type == nullptr) { + continue; + } + // strict: no scalar broadcast, matching the `#no_broadcast` element parameter + if (check_is_assignable_to(c, &src, elem, false)) { + continue; + } + gbString es = type_to_string(elem); + gbString ss = type_to_string(src.type); + error_line(" \n"); + error_line("\tSuggestion: the element type is '%s', but argument #%td is '%s'\n", es, i+1, ss); + gb_string_free(ss); + gb_string_free(es); + break; + } + } + } + if (procs.count == 0) { procs = proc_group_entities_cloned(c, *operand); } @@ -8178,6 +8219,69 @@ gb_internal CallArgumentData check_call_arguments_proc_group(CheckerContext *c, } } + // NOTE(bill): De-emphasise overloads whose first parameter cannot accept the first argument's container, so + // the "Did you mean" list stays focused. E.g. appending a value to a plain `[dynamic]T` hides the + // `#soa`, fixed-capacity, and `[]u8`-element `append` overloads. Only affects what is displayed. + if (positional_operands.count >= 1 && positional_operands[0].type != nullptr) { + auto container_elem = [](Type *t) -> Type * { + switch (t->kind) { + case Type_DynamicArray: return t->DynamicArray.elem; + case Type_FixedCapacityDynamicArray: return t->FixedCapacityDynamicArray.elem; + case Type_Slice: return t->Slice.elem; + case Type_Array: return t->Array.elem; + } + return nullptr; + }; + Type *arg0 = base_type(type_deref(positional_operands[0].type)); + if (arg0 != nullptr && arg0->kind != Type_Generic && !is_type_polymorphic(arg0)) { + Type *arg0_elem = container_elem(arg0); + for_array(i, procs) { + if (possibly_ignore[i]) { + continue; + } + Entity *proc = procs[i]; + Type *t = base_type(proc->type); + if (t == nullptr || t->kind != Type_Proc || t->Proc.param_count == 0) { + continue; + } + Type *p0 = base_type(t->Proc.params->Tuple.variables[0]->type); + if (p0->kind == Type_Pointer) { + p0 = base_type(p0->Pointer.elem); + } else if (p0->kind == Type_MultiPointer) { + p0 = base_type(p0->MultiPointer.elem); + } + while (p0->kind == Type_Generic && p0->Generic.specialized != nullptr) { + p0 = base_type(p0->Generic.specialized); + } + if (p0->kind == Type_Generic) { + continue; // unconstrained `$T`: cannot tell, keep it + } + bool incompatible = false; + if (p0->kind != arg0->kind) { + incompatible = true; + } else if (arg0_elem != nullptr) { + // container kinds match; reject an overload that constrains the element type to + // something the argument's element cannot satisfy (e.g. `$E/u8`) + Type *p0_elem = container_elem(p0); + if (p0_elem != nullptr) { + Type *pe = base_type(p0_elem); + if (pe->kind == Type_Generic && pe->Generic.specialized != nullptr) { + Operand src = {Addressing_Value}; + src.type = arg0_elem; + if (!check_is_assignable_to(c, &src, base_type(pe->Generic.specialized), false)) { + incompatible = true; + } + } + } + } + if (incompatible) { + possibly_ignore[i] = true; + possibly_ignore_set += 1; + } + } + } + } + if (possibly_ignore_set == procs.count) { possibly_ignore_set = 0; } From 96dd7d22ec615fc8d828bda296f7bc3eac8d4317 Mon Sep 17 00:00:00 2001 From: gingerBill Date: Thu, 1 Oct 2026 00:17:12 +0100 Subject: [PATCH 096/215] Improve the the ambiguous calls stuff further by trying to find a confident diagnosis --- src/check_expr.cpp | 71 +++++++++++++++++++++++++++------------------- 1 file changed, 42 insertions(+), 29 deletions(-) diff --git a/src/check_expr.cpp b/src/check_expr.cpp index b26f65e9a..f2dcb3824 100644 --- a/src/check_expr.cpp +++ b/src/check_expr.cpp @@ -8123,23 +8123,29 @@ gb_internal CallArgumentData check_call_arguments_proc_group(CheckerContext *c, if (valids.count == 0) { ERROR_BLOCK(); - error(operand->expr, "No procedures or ambiguous call for procedure group '%s' that match with the given arguments", expr_name); - if (positional_operands.count == 0 && named_operands.count == 0) { - error_line("\tNo given arguments\n"); - } else { - print_argument_types(); - } + // element type of a container type, if any (dynamic array / slice / fixed(-capacity) array) + auto container_elem = [](Type *t) -> Type * { + if (t == nullptr) { + return nullptr; + } + switch (t->kind) { + case Type_DynamicArray: return t->DynamicArray.elem; + case Type_FixedCapacityDynamicArray: return t->FixedCapacityDynamicArray.elem; + case Type_Slice: return t->Slice.elem; + case Type_Array: return t->Array.elem; + } + return nullptr; + }; + // NOTE(bill): Check for a confident diagnosis + Ast *diag_expr = nullptr; + isize diag_index = -1; + Type *diag_elem = nullptr; + Type *diag_cont = nullptr; + gbString diag_arg_type = nullptr; if (positional_operands.count >= 2 && positional_operands[0].type != nullptr) { Type *cont = base_type(type_deref(positional_operands[0].type)); - Type *elem = nullptr; - if (cont != nullptr) { - if (cont->kind == Type_DynamicArray) { - elem = cont->DynamicArray.elem; - } else if (cont->kind == Type_Slice) { - elem = cont->Slice.elem; - } - } + Type *elem = container_elem(cont); if (elem != nullptr && !is_type_polymorphic(elem)) { for (isize i = 1; i < positional_operands.count; i++) { Operand src = positional_operands[i]; @@ -8150,17 +8156,33 @@ gb_internal CallArgumentData check_call_arguments_proc_group(CheckerContext *c, if (check_is_assignable_to(c, &src, elem, false)) { continue; } - gbString es = type_to_string(elem); - gbString ss = type_to_string(src.type); - error_line(" \n"); - error_line("\tSuggestion: the element type is '%s', but argument #%td is '%s'\n", es, i+1, ss); - gb_string_free(ss); - gb_string_free(es); + diag_expr = src.expr; + diag_index = i; + diag_elem = elem; + diag_cont = cont; + diag_arg_type = type_to_string(src.type); break; } } } + if (diag_expr != nullptr) { + gbString es = type_to_string(diag_elem); + error(diag_expr, "'%s' expected argument #%td to be of type '%s', got '%s'", expr_name, diag_index+1, es, diag_arg_type); + gbString cs = type_to_string(diag_cont); + error_line("\t'%s' is the element type of '%s'\n", es, cs); + gb_string_free(cs); + gb_string_free(es); + gb_string_free(diag_arg_type); + } else { + error(operand->expr, "No procedures or ambiguous call for procedure group '%s' that match with the given arguments", expr_name); + if (positional_operands.count == 0 && named_operands.count == 0) { + error_line("\tNo given arguments\n"); + } else { + print_argument_types(); + } + } + if (procs.count == 0) { procs = proc_group_entities_cloned(c, *operand); } @@ -8223,15 +8245,6 @@ gb_internal CallArgumentData check_call_arguments_proc_group(CheckerContext *c, // the "Did you mean" list stays focused. E.g. appending a value to a plain `[dynamic]T` hides the // `#soa`, fixed-capacity, and `[]u8`-element `append` overloads. Only affects what is displayed. if (positional_operands.count >= 1 && positional_operands[0].type != nullptr) { - auto container_elem = [](Type *t) -> Type * { - switch (t->kind) { - case Type_DynamicArray: return t->DynamicArray.elem; - case Type_FixedCapacityDynamicArray: return t->FixedCapacityDynamicArray.elem; - case Type_Slice: return t->Slice.elem; - case Type_Array: return t->Array.elem; - } - return nullptr; - }; Type *arg0 = base_type(type_deref(positional_operands[0].type)); if (arg0 != nullptr && arg0->kind != Type_Generic && !is_type_polymorphic(arg0)) { Type *arg0_elem = container_elem(arg0); From f65f3cd4daf9ab05b7b5f6324fdf422f015f6263 Mon Sep 17 00:00:00 2001 From: gingerBill Date: Thu, 1 Oct 2026 00:22:06 +0100 Subject: [PATCH 097/215] parapoly: Fix bug on error reporting when none of the parameters match in a parapoly procedure --- src/check_expr.cpp | 63 ++++++++++++++++++++++++++++++---------------- 1 file changed, 42 insertions(+), 21 deletions(-) diff --git a/src/check_expr.cpp b/src/check_expr.cpp index f2dcb3824..c4d7ab8d9 100644 --- a/src/check_expr.cpp +++ b/src/check_expr.cpp @@ -8136,8 +8136,36 @@ gb_internal CallArgumentData check_call_arguments_proc_group(CheckerContext *c, } return nullptr; }; + // NOTE)(bill): resolved container base of a candidate's first parameter, through a pointer and a `$T/...` + // constraint, e.g. `^$T/[dynamic]$E` -> the `[dynamic]$E` base type + auto first_param_container_base = [](Entity *proc) -> Type * { + if (proc == nullptr) { + return nullptr; + } + Type *t = base_type(proc->type); + if (t == nullptr || t->kind != Type_Proc || t->Proc.param_count == 0) { + return nullptr; + } + Type *p0 = base_type(t->Proc.params->Tuple.variables[0]->type); + if (p0->kind == Type_Pointer) { + p0 = base_type(p0->Pointer.elem); + } else if (p0->kind == Type_MultiPointer) { + p0 = base_type(p0->MultiPointer.elem); + } + while (p0->kind == Type_Generic && p0->Generic.specialized != nullptr) { + p0 = base_type(p0->Generic.specialized); + } + return p0; + }; - // NOTE(bill): Check for a confident diagnosis + if (procs.count == 0) { + procs = proc_group_entities_cloned(c, *operand); + } + + // NOTE(bill): Confident diagnosis: + // A container-first call (e.g. `append`) where the container matches some overload but a later argument does not match the container's element type. + // Only fire when an overload actually accepts this container kind, so an unrelated group (nothing close) still gets the generic message. + // The relevant overloads are still listed below. Ast *diag_expr = nullptr; isize diag_index = -1; Type *diag_elem = nullptr; @@ -8146,7 +8174,17 @@ gb_internal CallArgumentData check_call_arguments_proc_group(CheckerContext *c, if (positional_operands.count >= 2 && positional_operands[0].type != nullptr) { Type *cont = base_type(type_deref(positional_operands[0].type)); Type *elem = container_elem(cont); + bool container_matched = false; if (elem != nullptr && !is_type_polymorphic(elem)) { + for (Entity *proc : procs) { + Type *p0 = first_param_container_base(proc); + if (p0 != nullptr && p0->kind == cont->kind) { + container_matched = true; + break; + } + } + } + if (container_matched) { for (isize i = 1; i < positional_operands.count; i++) { Operand src = positional_operands[i]; if (src.deferred_untyped_arg || src.mode == Addressing_Invalid || src.type == nullptr) { @@ -8183,10 +8221,6 @@ gb_internal CallArgumentData check_call_arguments_proc_group(CheckerContext *c, } } - if (procs.count == 0) { - procs = proc_group_entities_cloned(c, *operand); - } - // Try to reduce the list further for `$T: typeid` like parameters bool *possibly_ignore = temporary_alloc_array(procs.count); isize possibly_ignore_set = 0; @@ -8252,22 +8286,9 @@ gb_internal CallArgumentData check_call_arguments_proc_group(CheckerContext *c, if (possibly_ignore[i]) { continue; } - Entity *proc = procs[i]; - Type *t = base_type(proc->type); - if (t == nullptr || t->kind != Type_Proc || t->Proc.param_count == 0) { - continue; - } - Type *p0 = base_type(t->Proc.params->Tuple.variables[0]->type); - if (p0->kind == Type_Pointer) { - p0 = base_type(p0->Pointer.elem); - } else if (p0->kind == Type_MultiPointer) { - p0 = base_type(p0->MultiPointer.elem); - } - while (p0->kind == Type_Generic && p0->Generic.specialized != nullptr) { - p0 = base_type(p0->Generic.specialized); - } - if (p0->kind == Type_Generic) { - continue; // unconstrained `$T`: cannot tell, keep it + Type *p0 = first_param_container_base(procs[i]); + if (p0 == nullptr || p0->kind == Type_Generic) { + continue; // unconstrained `$T` or no first parameter: cannot tell, keep it } bool incompatible = false; if (p0->kind != arg0->kind) { From 614b45e91974d0b4792f577d5efecaaf17243274 Mon Sep 17 00:00:00 2001 From: gingerBill Date: Thu, 1 Oct 2026 00:49:36 +0100 Subject: [PATCH 098/215] Add optional annotations for the next error source line. --- src/check_expr.cpp | 59 ++++++++++++++++++- src/error.cpp | 137 +++++++++++++++++++++++++++++++++++++++++++-- 2 files changed, 190 insertions(+), 6 deletions(-) diff --git a/src/check_expr.cpp b/src/check_expr.cpp index c4d7ab8d9..52b731efb 100644 --- a/src/check_expr.cpp +++ b/src/check_expr.cpp @@ -8204,14 +8204,69 @@ gb_internal CallArgumentData check_call_arguments_proc_group(CheckerContext *c, } } + // NOTE(bill): Missing `&`: a container argument passed by value where an overload wants a pointer + // to it. Detected only when the element-mismatch diagnosis did not fire. The `&x` suggestion is + // still printed below by the existing try-address block. + Ast *addr_expr = nullptr; + isize addr_index = -1; + if (diag_expr == nullptr) { + for (Entity *proc : procs) { + Type *t = base_type(proc->type); + if (t == nullptr || t->kind != Type_Proc || t->Proc.params == nullptr) { + continue; + } + isize n = gb_min(cast(isize)t->Proc.param_count, positional_operands.count); + for (isize i = 0; i < n; i++) { + Operand src = positional_operands[i]; + if (src.deferred_untyped_arg || src.mode == Addressing_Invalid || src.type == nullptr) { + continue; + } + Type *dst = t->Proc.params->Tuple.variables[i]->type; + if (check_is_assignable_to(c, &src, dst)) { + continue; + } + if (check_is_assignable_to(c, &src, type_deref(dst))) { + addr_expr = src.expr; + addr_index = i; + break; + } + } + if (addr_expr != nullptr) { + break; + } + } + } + if (diag_expr != nullptr) { gbString es = type_to_string(diag_elem); - error(diag_expr, "'%s' expected argument #%td to be of type '%s', got '%s'", expr_name, diag_index+1, es, diag_arg_type); gbString cs = type_to_string(diag_cont); - error_line("\t'%s' is the element type of '%s'\n", es, cs); + gbString label = gb_string_make(heap_allocator(), ""); + label = gb_string_append_fmt(label, "expected '%s', found '%s'", es, diag_arg_type); + set_caret_label(label); + // secondary span under the container argument, explaining where the element type comes from + Ast *cont_expr = positional_operands[0].expr; + gbString sec = gb_string_make(heap_allocator(), ""); + sec = gb_string_append_fmt(sec, "'%s', elements are '%s'", cs, es); + if (cont_expr != nullptr) { + set_caret_secondary(ast_token(cont_expr).pos, ast_end_pos(cont_expr), sec); + } + error(diag_expr, "mismatched argument #%td in call to '%s'", diag_index+1, expr_name); + gb_string_free(sec); + gb_string_free(label); gb_string_free(cs); gb_string_free(es); gb_string_free(diag_arg_type); + } else if (addr_expr != nullptr) { + Operand src = positional_operands[addr_index]; + gbString ft = type_to_string(src.type); + gbString ex = expr_to_string(src.expr); + gbString label = gb_string_make(heap_allocator(), ""); + label = gb_string_append_fmt(label, "expected '^%s', found '%s', pass '&%s'", ft, ft, ex); + set_caret_label_vertical(label); + error(src.expr, "mismatched argument #%td in call to '%s'", addr_index+1, expr_name); + gb_string_free(label); + gb_string_free(ex); + gb_string_free(ft); } else { error(operand->expr, "No procedures or ambiguous call for procedure group '%s' that match with the given arguments", expr_name); if (positional_operands.count == 0 && named_operands.count == 0) { diff --git a/src/error.cpp b/src/error.cpp index 3f7cb4aae..77fef3cea 100644 --- a/src/error.cpp +++ b/src/error.cpp @@ -47,6 +47,41 @@ gb_internal bool is_error_muted(void) { return global_error_mute_depth > 0; } +// Optional annotations for the next errored source line. +// All per-thread, so nothing leaks between concurrently-checked files. +// `show_error_on_line` snapshots and clears them. +// +// primary label, inline: primary label, vertical: secondary span (always vertical): +// append(&x, true) append(x, {1,2,3}) append(&x, true) +// ^~~^ expected '…', found '…' ^ ^^ ^~~^ expected '…', found '…' +// | | +// expected '^…', pass '&x' '[dynamic][3]int', elements are '[3]int' +gb_thread_local char global_caret_label_buf[512]; // primary label text +gb_thread_local bool global_caret_label_vertical; // render primary label as | + text below, not inline +gb_thread_local bool global_caret_sec_present; // a secondary span (to the left) is set +gb_thread_local TokenPos global_caret_sec_pos; +gb_thread_local TokenPos global_caret_sec_end; +gb_thread_local char global_caret_sec_label[512]; + +gb_internal void set_caret_label(char const *text) { + global_caret_label_vertical = false; + if (text == nullptr) { + global_caret_label_buf[0] = 0; + } else { + gb_snprintf(global_caret_label_buf, gb_size_of(global_caret_label_buf), "%s", text); + } +} +gb_internal void set_caret_label_vertical(char const *text) { + set_caret_label(text); + global_caret_label_vertical = true; +} +gb_internal void set_caret_secondary(TokenPos pos, TokenPos end, char const *text) { + global_caret_sec_present = text != nullptr; + global_caret_sec_pos = pos; + global_caret_sec_end = end; + gb_snprintf(global_caret_sec_label, gb_size_of(global_caret_sec_label), "%s", text ? text : ""); +} + gb_internal void push_error_value(TokenPos const &pos, ErrorValueKind kind = ErrorValue_Error) { GB_ASSERT_MSG(global_error_collector.curr_error_value_set.load() == false, "Possible race condition in error handling system, please report this with an issue"); @@ -308,6 +343,22 @@ gb_internal void terminal_reset_colours(void) { gb_internal isize show_error_on_line(TokenPos const &pos, TokenPos end) { get_error_value()->end = end; + + // Consume the caret annotations now, so they are cleared even on an early return and can never leak + // onto a later error's line. + char caret_label[512]; + gb_snprintf(caret_label, gb_size_of(caret_label), "%s", global_caret_label_buf); + bool caret_label_vertical = global_caret_label_vertical; + bool sec_present = global_caret_sec_present; + TokenPos sec_pos = global_caret_sec_pos; + TokenPos sec_end = global_caret_sec_end; + char sec_label[512]; + gb_snprintf(sec_label, gb_size_of(sec_label), "%s", global_caret_sec_label); + global_caret_label_buf[0] = 0; + global_caret_label_vertical = false; + global_caret_sec_present = false; + global_caret_sec_label[0] = 0; + if (!show_error_line()) { return -1; } @@ -512,13 +563,57 @@ gb_internal isize show_error_on_line(TokenPos const &pos, TokenPos end) { error_out(" ..."); } - error_out("\n\t"); - - for (i32 i = squiggle_padding; i > 0; i -= 1) { - error_out(" "); + // Secondary span (drawn to the left of the primary on the same line): compute its padding/width the + // same way as the primary's, and only draw it if it sits fully to the left within the window. + i32 sec_pad = 0; + i32 sec_len = 0; + bool draw_sec = sec_present && sec_pos.line == pos.line && sec_end.line == pos.line; + if (draw_sec) { + i32 sec_start_byte = error_start_index_bytes + (sec_pos.column - pos.column); + i32 sec_end_byte = error_start_index_bytes + (sec_end.column - pos.column); + if (window_open_bytes > 0) { + sec_pad += 4; + } + for (i32 i = 0; i < line_length_graphemes; i += 1) { + if (graphemes[i].byte_index < window_open_bytes) continue; + if (graphemes[i].byte_index >= sec_start_byte) break; + sec_pad += graphemes[i].width; + } + for (i32 i = 0; i < line_length_graphemes; i += 1) { + if (graphemes[i].byte_index < sec_start_byte) continue; + if (graphemes[i].byte_index >= sec_end_byte) break; + sec_len += graphemes[i].width; + } + if (sec_len < 1) { + sec_len = 1; + } + if (sec_start_byte >= error_start_index_bytes || sec_pad + sec_len > squiggle_padding) { + draw_sec = false; // overlaps or is not to the left; skip rather than misalign + } } + error_out("\n\t"); + + i32 printed = 0; terminal_set_colours(TerminalStyle_Bold, TerminalColour_Green); + if (draw_sec) { + for (i32 i = sec_pad - printed; i > 0; i -= 1) { + error_out(" "); + } + printed = sec_pad; + error_out("^"); + for (i32 k = sec_len - 2; k > 0; k -= 1) { + error_out("~"); + } + if (sec_len >= 2) { + error_out("^"); + } + printed += sec_len; + } + + for (i32 i = squiggle_padding - printed; i > 0; i -= 1) { + error_out(" "); + } if (squiggle_length > 0) { error_out("^"); @@ -535,12 +630,46 @@ gb_internal isize show_error_on_line(TokenPos const &pos, TokenPos end) { } } + if (caret_label[0] != 0 && !caret_label_vertical) { + terminal_set_colours(TerminalStyle_Normal, TerminalColour_Grey); + error_out(" %s", caret_label); + } + // NOTE(Feoramund): Specifically print a newline, then reset colours, // instead of the other way around. Otherwise the printing mechanism // will collapse the newline for reasons currently beyond my ken. error_out("\n"); terminal_reset_colours(); + // A vertical label hangs under its span: `|` then the text, aligned to the span's column. The + // secondary span takes priority (its label explains the primary); otherwise a vertical primary label. + i32 vpad = -1; + char const *vtext = nullptr; + if (draw_sec && sec_label[0] != 0) { + vpad = sec_pad; + vtext = sec_label; + } else if (caret_label_vertical && caret_label[0] != 0) { + vpad = squiggle_padding; + vtext = caret_label; + } + if (vpad >= 0 && vtext != nullptr && vtext[0] != 0) { + error_out("\t"); + for (i32 i = vpad; i > 0; i -= 1) { + error_out(" "); + } + terminal_set_colours(TerminalStyle_Bold, TerminalColour_Green); + error_out("|\n"); + terminal_reset_colours(); + + error_out("\t"); + for (i32 i = vpad; i > 0; i -= 1) { + error_out(" "); + } + terminal_set_colours(TerminalStyle_Normal, TerminalColour_Grey); + error_out("%s\n", vtext); + terminal_reset_colours(); + } + return squiggle_padding; } From d89709fea002aaa8c0fba3ae8bd2a362fb7c8b14 Mon Sep 17 00:00:00 2001 From: gingerBill Date: Thu, 1 Oct 2026 00:57:45 +0100 Subject: [PATCH 099/215] Allow untyped `{...}` against a union to be inferred correctly --- src/check_expr.cpp | 42 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) diff --git a/src/check_expr.cpp b/src/check_expr.cpp index 52b731efb..781203564 100644 --- a/src/check_expr.cpp +++ b/src/check_expr.cpp @@ -11332,6 +11332,48 @@ gb_internal ExprKind check_compound_literal(CheckerContext *c, Operand *o, Ast * return kind; } + // An untyped `{...}` against a union: infer which variant it is by trial-checking the literal against each variant (muted, on a clone). + // If exactly one matches, retarget to that variant and let the normal path build it (the surrounding assignment then wraps it into the union). + // Otherwise report a clear error. + if (t->kind == Type_Union && cl->type == nullptr && cl->elems.count > 0) { + wait_signal_until_available(&t->Union.variants_wait_signal); + auto matches = array_make(temporary_allocator(), 0, t->Union.variants.count); + for (Type *variant : t->Union.variants) { + Operand trial = {}; + i64 muted_before = error_mute_count(); + begin_error_mute(); + check_expr_base(c, &trial, clone_ast(node), variant); + end_error_mute(); + if (trial.mode != Addressing_Invalid && error_mute_count() == muted_before) { + array_add(&matches, variant); + } + } + if (matches.count == 1) { + type = matches[0]; + t = base_type(type); + } else { + gbString us = type_to_string(type); + if (matches.count == 0) { + error(node, "No variant of the union '%s' matches this compound literal", us); + } else { + ERROR_BLOCK(); + error(node, "Ambiguous compound literal for the union '%s'; it matches %td variants:", us, matches.count); + for (Type *m : matches) { + gbString ms = type_to_string(m); + error_line("\t%s\n", ms); + gb_string_free(ms); + } + gbString first = type_to_string(matches[0]); + error_line("\tSuggestion: name the intended variant, e.g. '%s{...}'\n", first); + gb_string_free(first); + } + gb_string_free(us); + o->expr = node; + o->type = type; + return kind; + } + } + switch (t->kind) { case Type_Struct: From 66111934c3af9583398efc08736cc6b0bfa4eaaa Mon Sep 17 00:00:00 2001 From: gingerBill Date: Thu, 1 Oct 2026 01:17:40 +0100 Subject: [PATCH 100/215] Allow parapoly procs to be in `@(deferred_*)` attributes --- src/check_expr.cpp | 46 ++++++++++++++++++++++++++++++++++++++++++++++ src/checker.cpp | 16 +++++++++++----- 2 files changed, 57 insertions(+), 5 deletions(-) diff --git a/src/check_expr.cpp b/src/check_expr.cpp index 781203564..3e1810e15 100644 --- a/src/check_expr.cpp +++ b/src/check_expr.cpp @@ -684,6 +684,52 @@ gb_internal bool find_or_generate_polymorphic_procedure(CheckerContext *old_c, E entity->Procedure.generated_from_polymorphic = proc_info->generated_from_polymorphic; } + if (base_entity->Procedure.deferred_procedure.entity != nullptr) { + DeferredProcedure dp = base_entity->Procedure.deferred_procedure; + Entity *dst = dp.entity; + // NOTE(bill): Skip self-deferral and chaining (both invalid, reported by check_deferred_procedures). + // handling them here would otherwise recurse through find_or_generate_polymorphic_procedure. + if (dst == nullptr || dst == base_entity || dst->Procedure.deferred_procedure.entity != nullptr) { + // Leave this instantiation without a deferred procedure + // The error is reported during validation + } else if (!is_type_polymorphic(dst->type)) { + entity->Procedure.deferred_procedure = dp; + } else { + bool by_ptr = dp.kind == DeferredProcedure_in_by_ptr || dp.kind == DeferredProcedure_out_by_ptr || dp.kind == DeferredProcedure_in_out_by_ptr; + bool use_in = dp.kind == DeferredProcedure_in || dp.kind == DeferredProcedure_in_by_ptr || dp.kind == DeferredProcedure_in_out || dp.kind == DeferredProcedure_in_out_by_ptr; + bool use_out = dp.kind == DeferredProcedure_out || dp.kind == DeferredProcedure_out_by_ptr || dp.kind == DeferredProcedure_in_out || dp.kind == DeferredProcedure_in_out_by_ptr; + + auto dst_ops = array_make(heap_allocator(), 0, operands.count + 4); + defer (array_free(&dst_ops)); + + if (use_in) { + for (Operand const &o : operands) { + Operand po = o; + if (by_ptr && po.type != nullptr) { + po.type = alloc_type_pointer(po.type); + } + array_add(&dst_ops, po); + } + } + if (use_out) { + Type *res = base_type(final_proc_type)->Proc.results; + if (res != nullptr && res->kind == Type_Tuple) { + for (Entity *rv : res->Tuple.variables) { + Operand po = {Addressing_Value}; + po.type = by_ptr ? alloc_type_pointer(rv->type) : rv->type; + po.expr = ident; + array_add(&dst_ops, po); + } + } + } + PolyProcData dpd = {}; + if (find_or_generate_polymorphic_procedure(&nctx, dst, nullptr, &dst_ops, poly_def_node, &dpd)) { + entity->Procedure.deferred_procedure.kind = dp.kind; + entity->Procedure.deferred_procedure.entity = dpd.gen_entity; + } + } + } + // NOTE(bill): Check the newly generated procedure body check_procedure_later(nctx.checker, proc_info); diff --git a/src/checker.cpp b/src/checker.cpp index fa95f763d..6273a8f7e 100644 --- a/src/checker.cpp +++ b/src/checker.cpp @@ -6964,8 +6964,14 @@ gb_internal void check_deferred_procedures(Checker *c) { continue; } - if (is_type_polymorphic(src->type) || is_type_polymorphic(dst->type)) { - error(src->token, "'%s' cannot be used with a polymorphic procedure", attribute); + bool src_poly = is_type_polymorphic(src->type); + bool dst_poly = is_type_polymorphic(dst->type); + if (dst_poly && !src_poly) { + error(src->token, "A polymorphic deferred procedure '%.*s' requires the initial procedure '%.*s' to be polymorphic as well", LIT(dst->token.string), LIT(src->token.string)); + continue; + } + if (dst_poly && dst_kind == DeferredProcedure_none) { + error(src->token, "'deferred_none' cannot be used with a polymorphic deferred procedure, as it has no inputs from which to determine its polymorphic types"); continue; } @@ -7027,7 +7033,7 @@ gb_internal void check_deferred_procedures(Checker *c) { GB_ASSERT(src_params->kind == Type_Tuple); GB_ASSERT(dst_params->kind == Type_Tuple); - if (are_types_identical(src_params, dst_params)) { + if (src_poly || dst_poly || are_types_identical(src_params, dst_params)) { // Okay! } else { gbString s = type_to_string(src_params); @@ -7057,7 +7063,7 @@ gb_internal void check_deferred_procedures(Checker *c) { GB_ASSERT(src_results->kind == Type_Tuple); GB_ASSERT(dst_params->kind == Type_Tuple); - if (are_types_identical(src_results, dst_params)) { + if (src_poly || dst_poly || are_types_identical(src_results, dst_params)) { // Okay! } else { gbString s = type_to_string(src_results); @@ -7114,7 +7120,7 @@ gb_internal void check_deferred_procedures(Checker *c) { GB_ASSERT(offset == len); - if (are_types_identical(tsrc, dst_params)) { + if (src_poly || dst_poly || are_types_identical(tsrc, dst_params)) { // Okay! } else { gbString s = type_to_string(tsrc); From bfcdc8f59edde0c988f2d3b15d26bc22549f5d4c Mon Sep 17 00:00:00 2001 From: dogue Date: Wed, 30 Sep 2026 20:25:29 -0400 Subject: [PATCH 101/215] fix alignment --- vendor/sdl2/sdl_render.odin | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vendor/sdl2/sdl_render.odin b/vendor/sdl2/sdl_render.odin index 0bec18d7d..4a6dd2ead 100644 --- a/vendor/sdl2/sdl_render.odin +++ b/vendor/sdl2/sdl_render.odin @@ -143,5 +143,5 @@ foreign lib { GL_UnbindTexture :: proc(texture: ^Texture) -> c.int --- RenderGetMetalLayer :: proc(renderer: ^Renderer) -> rawptr --- RenderGetMetalCommandEncoder :: proc(renderer: ^Renderer) -> rawptr --- - RenderSetVSync :: proc(renderer: ^Renderer, vsync: bool) -> c.int --- + RenderSetVSync :: proc(renderer: ^Renderer, vsync: bool) -> c.int --- } From 7c8dfd4cff47c97f626cf01aa24c6a02beb933c4 Mon Sep 17 00:00:00 2001 From: gingerBill Date: Thu, 1 Oct 2026 01:30:38 +0100 Subject: [PATCH 102/215] Improve mixed order ternary type inference and poly-determination diagnostics --- src/check_expr.cpp | 23 +++++++++++++++++------ src/check_type.cpp | 32 ++++++++++++++++++++++++-------- 2 files changed, 41 insertions(+), 14 deletions(-) diff --git a/src/check_expr.cpp b/src/check_expr.cpp index 3e1810e15..6ff54a624 100644 --- a/src/check_expr.cpp +++ b/src/check_expr.cpp @@ -10551,19 +10551,30 @@ gb_internal ExprKind check_ternary_if_expr(CheckerContext *c, Operand *o, Ast *n Operand x = {Addressing_Invalid}; Operand y = {Addressing_Invalid}; - check_expr_as_value_for_ternary(c, &x, te->x, type_hint); - node->viral_state_flags |= te->x->viral_state_flags; - if (te->y != nullptr) { + if (te->y == nullptr) { + check_expr_as_value_for_ternary(c, &x, te->x, type_hint); + node->viral_state_flags |= te->x->viral_state_flags; + error(node, "A ternary expression must have an else clause"); + return kind; + } + + if (type_hint == nullptr && arg_is_deferrable_untyped_expr(te->x)) { + check_expr_as_value_for_ternary(c, &y, te->y, nullptr); + node->viral_state_flags |= te->y->viral_state_flags; + Type *th = is_type_typed(y.type) ? y.type : nullptr; + check_expr_as_value_for_ternary(c, &x, te->x, th); + node->viral_state_flags |= te->x->viral_state_flags; + } else { + check_expr_as_value_for_ternary(c, &x, te->x, type_hint); + node->viral_state_flags |= te->x->viral_state_flags; + Type *th = type_hint; if (type_hint == nullptr && is_type_typed(x.type)) { th = x.type; } check_expr_as_value_for_ternary(c, &y, te->y, th); node->viral_state_flags |= te->y->viral_state_flags; - } else { - error(node, "A ternary expression must have an else clause"); - return kind; } if (te->x->viral_state_flags & ViralStateFlag_ContainsDeferredProcedure) { diff --git a/src/check_type.cpp b/src/check_type.cpp index 6ea164e3f..b4819979e 100644 --- a/src/check_type.cpp +++ b/src/check_type.cpp @@ -2752,15 +2752,21 @@ gb_internal Type *determine_type_from_polymorphic(CheckerContext *ctx, Type *pol ERROR_BLOCK(); gbString pts = type_to_string(poly_type); - gbString ots = type_to_string(operand.type, true); defer (gb_string_free(pts)); - defer (gb_string_free(ots)); - error(operand.expr, "Cannot determine polymorphic type from parameter: '%s' to '%s'", ots, pts); - - if (operand.mode == Addressing_Type) { - error_line("\tSuggestion: Are you trying to pass a type to a value parameter?\n"); + if (operand.deferred_untyped_arg) { + // An untyped argument (`{...}`, `.Member`, a both-untyped ternary) whose type is not + // pinned by any other argument, so the polymorphic type cannot be inferred from it. + set_caret_label("untyped; its type cannot be determined here"); + error(operand.expr, "Cannot infer the polymorphic type '%s' from this argument", pts); + error_line("\tname the type explicitly (e.g. 'T{...}'), or determine '%s' from another argument\n", pts); + } else { + gbString ots = type_to_string(operand.type, true); + defer (gb_string_free(ots)); + error(operand.expr, "Cannot determine polymorphic type from parameter: '%s' to '%s'", ots, pts); + if (operand.mode == Addressing_Type) { + error_line("\tSuggestion: Are you trying to pass a type to a value parameter?\n"); + } } - } return t_invalid; } @@ -2825,7 +2831,17 @@ gb_internal Type *determine_type_from_polymorphic(CheckerContext *ctx, Type *pol gbString ots = type_to_string(operand.type, true); defer (gb_string_free(pts)); defer (gb_string_free(ots)); - error(operand.expr, "Cannot determine polymorphic type from parameter: '%s' to '%s'", ots, pts); + if (poly_type->kind == Type_Generic && poly_type->Generic.specialized != nullptr) { + // Constrained generic (`$T/Constraint`): the argument's type does not satisfy the constraint. + gbString cs = type_to_string(poly_type->Generic.specialized); + gbString cl = gb_string_append_fmt(gb_string_make(heap_allocator(), ""), "'%s' is not a '%s'", ots, cs); + set_caret_label(cl); + error(operand.expr, "Argument's type '%s' does not satisfy the polymorphic constraint '%s'", ots, cs); + gb_string_free(cl); + gb_string_free(cs); + } else { + error(operand.expr, "Cannot determine polymorphic type from parameter: '%s' to '%s'", ots, pts); + } Type *pt = poly_type; while (pt && pt->kind == Type_Generic && pt->Generic.specialized) { From 9205bf3bb4d87007553c5c5dff700ba25c90927e Mon Sep 17 00:00:00 2001 From: gingerBill Date: Thu, 1 Oct 2026 01:42:25 +0100 Subject: [PATCH 103/215] Fix comparison with `#sparse` --- src/types.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/types.cpp b/src/types.cpp index bcac2972a..6408669b0 100644 --- a/src/types.cpp +++ b/src/types.cpp @@ -3257,7 +3257,9 @@ gb_internal bool are_types_identical_internal(Type *x, Type *y, bool check_tuple return x->Basic.kind == y->Basic.kind; case Type_EnumeratedArray: - return are_types_identical(x->EnumeratedArray.index, y->EnumeratedArray.index) && + return x->EnumeratedArray.count == y->EnumeratedArray.count && + x->EnumeratedArray.is_sparse == y->EnumeratedArray.is_sparse && + are_types_identical(x->EnumeratedArray.index, y->EnumeratedArray.index) && are_types_identical(x->EnumeratedArray.elem, y->EnumeratedArray.elem); case Type_Array: From 2b722879ce4be143a9ba1d9b48d31d306d9176b5 Mon Sep 17 00:00:00 2001 From: gingerBill Date: Thu, 1 Oct 2026 01:53:11 +0100 Subject: [PATCH 104/215] parapoly: If the source is already a concrete instantiation of this same record, use it directly. --- src/check_type.cpp | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/src/check_type.cpp b/src/check_type.cpp index b4819979e..6a2a36640 100644 --- a/src/check_type.cpp +++ b/src/check_type.cpp @@ -2644,6 +2644,21 @@ gb_internal Type *subst_apply(CheckerContext *c, Type *pattern, Type *source, Po orig = pb->Union.polymorphic_parent; } GB_ASSERT(orig != nullptr && p_tuple != nullptr); + + // If the source is already a concrete instantiation of this same record, use it directly. This + // is both faster and handles records whose polymorphic argument is itself a compound type (e.g. + // `Pair([2]$T)` or `Pair([E]$T)`), which the substitution-based lookup below cannot reconstruct + // (its parameter is an array, not a bare `$T`). + if (source != nullptr && !is_type_polymorphic(source)) { + Type *sb = base_type(source); + Type *sorig = (sb->kind == Type_Struct) ? sb->Struct.polymorphic_parent + : (sb->kind == Type_Union) ? sb->Union.polymorphic_parent + : nullptr; + if (sorig != nullptr && sorig == orig) { + return source; + } + } + GenTypesData *gt = ensure_polymorphic_record_entity_has_gen_types(c, orig); mutex_lock(>->mutex); Entity *found = find_polymorphic_record_by_subst(gt, p_tuple, subst); From a5bef5224cece7289521cb2b57b51d89576b3292 Mon Sep 17 00:00:00 2001 From: Ihor Antonov Date: Wed, 30 Sep 2026 19:17:47 -0700 Subject: [PATCH 105/215] core: add unpadded base64 encoding core:encoding/base64 can only produce padded output, so callers that need the canonical unpadded ("raw") form -- JOSE base64url, Go's RawStdEncoding/RawURLEncoding -- have to encode and then trim, which forces an extra allocation and cleanup dance around the returned string. Add an Encode_Options bit set, mirroring Decode_Options, and honor {.No_Padding} in `encode`, `encode_into_buf`, `encode_into`, and `encoded_len`. Existing calls and padded output are unchanged. Tests cover the RFC 4648 section 9 illustrations and section 10 test vectors across the standard and URL alphabets, padded and raw, plus Go's reference corpus. Newline characters are asserted to be rejected per RFC 4648 section 3.3. Comments in `encode_impl` document the 24-bit group packing and the padding decision for partial groups. --- core/encoding/base64/base64.odin | 90 +++++++-- tests/core/encoding/base64/base64.odin | 260 +++++++++++++++++++++++++ 2 files changed, 331 insertions(+), 19 deletions(-) diff --git a/core/encoding/base64/base64.odin b/core/encoding/base64/base64.odin index ecfe1adba..c1e2b6832 100644 --- a/core/encoding/base64/base64.odin +++ b/core/encoding/base64/base64.odin @@ -4,8 +4,10 @@ A secondary param can be used to supply a custom alphabet to `encode` and a matching decoding table to `decode`. If none is supplied it just uses the standard Base64 alphabet. -In case your specific version does not use padding, you may -truncate it from the encoded output. + +By default `encode` emits padding. Encode options can omit it: with +`{.No_Padding}` the output is the canonical unpadded ("raw") form of +RFC 4648 section 3.2, and `encoded_len` reports the shorter length. By default `decode` is lenient, accepting padded and unpadded input and not checking the trailing padding bits. Decode options can enable strict @@ -145,14 +147,25 @@ Decode_Option :: enum { // Decode_Options is a set of Decode_Option values. Decode_Options :: bit_set[Decode_Option; u8] -encode :: proc(data: []byte, ENC_TBL := ENC_TABLE, allocator := context.allocator) -> (encoded: string, err: runtime.Allocator_Error) #optional_allocator_error { - out_length := encoded_len(data) +// Encode_Option selects optional behavior of the encode routines. +Encode_Option :: enum { + // No_Padding omits the padding character from the output (RFC 4648 + // section 3.2), producing the canonical unpadded ("raw") form. + // Combine with ENC_URL_TABLE for unpadded base64url, as used by JOSE. + No_Padding, +} + +// Encode_Options is a set of Encode_Option values. +Encode_Options :: bit_set[Encode_Option; u8] + +encode :: proc(data: []byte, ENC_TBL := ENC_TABLE, allocator := context.allocator, options := Encode_Options{}) -> (encoded: string, err: runtime.Allocator_Error) #optional_allocator_error { + out_length := encoded_len(data, options) if out_length == 0 { return } out := make([]byte, out_length, allocator) or_return - _, ioerr := encode_impl(out, data, ENC_TBL) + _, ioerr := encode_impl(out, data, ENC_TBL, options) assert(ioerr == nil, "encode should not IO error") assert(len(out) == out_length, "buffer resized, `encoded_len` was wrong") @@ -161,25 +174,25 @@ encode :: proc(data: []byte, ENC_TBL := ENC_TABLE, allocator := context.allocato return } -encode_into_buf :: proc(dst, data: []byte, ENC_TBL := ENC_TABLE) -> (encoded: []byte, err: Error) { - out_length := encoded_len(data) +encode_into_buf :: proc(dst, data: []byte, ENC_TBL := ENC_TABLE, options := Encode_Options{}) -> (encoded: []byte, err: Error) { + out_length := encoded_len(data, options) if out_length == 0 { return } - return encode_impl(dst, data, ENC_TBL) + return encode_impl(dst, data, ENC_TBL, options) } -encode_into :: proc(w: io.Writer, data: []byte, ENC_TBL := ENC_TABLE) -> io.Error { - _, err := encode_impl(w, data, ENC_TBL) +encode_into :: proc(w: io.Writer, data: []byte, ENC_TBL := ENC_TABLE, options := Encode_Options{}) -> io.Error { + _, err := encode_impl(w, data, ENC_TBL, options) return err } @(private) -encode_impl :: proc(dst: $T, data: []byte, ENC_TBL := ENC_TABLE) -> ([]byte, io.Error) where T == io.Writer || T == []byte { +encode_impl :: proc(dst: $T, data: []byte, ENC_TBL := ENC_TABLE, options := Encode_Options{}) -> ([]byte, io.Error) where T == io.Writer || T == []byte { length := len(data) when T == []byte { - out_length := encoded_len(data) + out_length := encoded_len(data, options) if len(dst) < out_length { return nil, io.Error.Short_Buffer } @@ -191,7 +204,9 @@ encode_impl :: proc(dst: $T, data: []byte, ENC_TBL := ENC_TABLE) -> ([]byte, io. buf: [4]byte } - c0, c1, c2, block: int + // c0, c1, c2 are the group's input bytes; -1 marks a missing byte, which + // is how a partial (final) group is identified. + c0, c1, c2, block, write: int for i := 0; i < length; i += 3 { #no_bounds_check { c0, c1, c2 = int(data[i]), -1, -1 @@ -199,18 +214,44 @@ encode_impl :: proc(dst: $T, data: []byte, ENC_TBL := ENC_TABLE) -> ([]byte, io. if i + 1 < length { c1 = int(data[i + 1]) } if i + 2 < length { c2 = int(data[i + 2]) } + // Pack the group into a 24-bit value, most significant input + // byte first; missing bytes contribute zero bits, as RFC 4648 + // section 4 requires. block = (c0 << 16) | (max(c1, 0) << 8) | max(c2, 0) + // Characters the final block carries once padding is dropped: + // four for a full group, two (one input byte) or three (two + // input bytes) for a partial one. + emit := 4 + if c1 == -1 { + emit = 2 + } else if c2 == -1 { + emit = 3 + } + + // Padded output still writes a full four-character block, with + // PADDING where the group ran out of input bytes. + write = emit + if .No_Padding not_in options { + write = 4 + } + + // The output characters, most significant six bits first; + // PADDING replaces the characters a partial group lacks. buf[0] = ENC_TBL[block >> 18 & 63] buf[1] = ENC_TBL[block >> 12 & 63] - buf[2] = c1 == -1 ? PADDING : ENC_TBL[block >> 6 & 63] - buf[3] = c2 == -1 ? PADDING : ENC_TBL[block & 63] + if write > 2 { + buf[2] = c1 == -1 ? PADDING : ENC_TBL[block >> 6 & 63] + if write > 3 { + buf[3] = c2 == -1 ? PADDING : ENC_TBL[block & 63] + } + } when T == []byte { - buf = buf[4:] + buf = buf[write:] } } when T == io.Writer { - if _, err := io.write_full(dst, buf[:]); err != nil { + if _, err := io.write_full(dst, buf[:write]); err != nil { return nil, err } } @@ -223,13 +264,24 @@ encode_impl :: proc(dst: $T, data: []byte, ENC_TBL := ENC_TABLE) -> ([]byte, io. } } -encoded_len :: proc(data: []byte) -> int { +encoded_len :: proc(data: []byte, options := Encode_Options{}) -> int { length := len(data) if length == 0 { return 0 } - return ((4 * length / 3) + 3) &~ 3 + padded := ((4 * length / 3) + 3) &~ 3 + if .No_Padding not_in options { + return padded + } + + switch length % 3 { + case 1: + return padded - 2 + case 2: + return padded - 1 + } + return padded } @(private) diff --git a/tests/core/encoding/base64/base64.odin b/tests/core/encoding/base64/base64.odin index 0ef1e61cc..b842b0120 100644 --- a/tests/core/encoding/base64/base64.odin +++ b/tests/core/encoding/base64/base64.odin @@ -2,6 +2,7 @@ package test_encoding_base64 import "base:intrinsics" import "core:encoding/base64" +import "core:io" import "core:strings" import "core:testing" @@ -245,3 +246,262 @@ test_strict_is_optional :: proc(t: ^testing.T) { delete(decoded) } } + +@(test) +test_encoding_no_padding :: proc(t: ^testing.T) { + cases := []Test{ + {"", ""}, + {"f", "Zg"}, + {"fo", "Zm8"}, + {"foo", "Zm9v"}, + {"foob", "Zm9vYg"}, + {"fooba", "Zm9vYmE"}, + {"foobar", "Zm9vYmFy"}, + } + for c in cases { + v := base64.encode(transmute([]byte)c.vector, options = {.No_Padding}) + defer delete(v) + testing.expectf(t, v == c.base64, "encode(%q, raw): got %q, want %q", c.vector, v, c.base64) + } + + url_cases := []Test{ + {">>>", "Pj4-"}, + {"\xFB\xEF", "--8"}, + } + for c in url_cases { + v := base64.encode(transmute([]byte)c.vector, base64.ENC_URL_TABLE, options = {.No_Padding}) + defer delete(v) + testing.expectf(t, v == c.base64, "encode url(%q, raw): got %q, want %q", c.vector, v, c.base64) + } +} + +@(test) +test_encoding_no_padding_roundtrip :: proc(t: ^testing.T) { + values: [1024]u8 + for &v, i in values[:] { + v = u8(i) + } + + tables := []struct { + enc: [64]byte, + dec: [256]i8, + } { + {base64.ENC_TABLE, base64.DEC_TABLE}, + {base64.ENC_URL_TABLE, base64.DEC_URL_TABLE}, + } + + for table, ti in tables { + for n in 0 ..= len(values) { + data := values[:n] + + padded := base64.encode(data, table.enc) + raw := base64.encode(data, table.enc, options = {.No_Padding}) + + if !testing.expectf(t, raw == strings.trim_right(padded, "="), "table %d n=%d: raw %q, padded %q", ti, n, raw, padded) { + delete(padded) + delete(raw) + continue + } + testing.expectf(t, base64.encoded_len(data, {.No_Padding}) == len(raw), "table %d n=%d: encoded_len %d, raw len %d", ti, n, base64.encoded_len(data, {.No_Padding}), len(raw)) + testing.expectf(t, strings.index_byte(raw, '=') < 0, "table %d n=%d: raw output contains padding: %q", ti, n, raw) + + decoded, err := base64.decode(raw, table.dec, options = {.Strict, .No_Padding}) + if testing.expectf(t, err == nil, "table %d n=%d: strict raw decode: %v", ti, n, err) { + testing.expectf(t, string(decoded) == string(data), "table %d n=%d: raw roundtrip mismatch", ti, n) + delete(decoded) + } + + delete(padded) + delete(raw) + } + } +} + +@(test) +test_encoding_no_padding_into_buf :: proc(t: ^testing.T) { + data := []byte{0xFB, 0xEF, 0xFF, 0x01, 0x7A, 0x00} + + for n in 0 ..= len(data) { + raw_len := base64.encoded_len(data[:n], {.No_Padding}) + + // The tail is a canary: raw output must not write pad bytes past + // the advertised length, even with a buffer that covers them. + canary: [64]byte + for &b in canary { + b = 0xA5 + } + + encoded, err := base64.encode_into_buf(canary[:raw_len], data[:n], options = {.No_Padding}) + if !testing.expectf(t, err == nil, "n=%d: encode_into_buf: %v", n, err) { + continue + } + testing.expectf(t, len(encoded) == raw_len, "n=%d: returned %d bytes, want %d", n, len(encoded), raw_len) + + for b, i in canary[raw_len:] { + testing.expectf(t, b == 0xA5, "n=%d: byte %d past raw output overwritten: %x", n, raw_len + i, b) + } + + decoded, derr := base64.decode(string(encoded), options = {.Strict, .No_Padding}) + if testing.expectf(t, derr == nil, "n=%d: decode: %v", n, derr) { + testing.expectf(t, string(decoded) == string(data[:n]), "n=%d: roundtrip mismatch", n) + delete(decoded) + } + + if raw_len > 0 { + _, serr := base64.encode_into_buf(canary[:raw_len - 1], data[:n], options = {.No_Padding}) + testing.expectf(t, serr == io.Error.Short_Buffer, "n=%d: short buffer: %v", n, serr) + } + } +} + +@(test) +test_encoding_no_padding_into :: proc(t: ^testing.T) { + builder: strings.Builder + strings.builder_init(&builder) + defer strings.builder_destroy(&builder) + + foob := "foob" + err := base64.encode_into(strings.to_writer(&builder), transmute([]byte)foob, options = {.No_Padding}) + testing.expect_value(t, err, nil) + testing.expect_value(t, strings.to_string(builder), "Zm9vYg") + + // A full block followed by a two-character tail. + builder2: strings.Builder + strings.builder_init(&builder2) + defer strings.builder_destroy(&builder2) + + fooba := "fooba" + err = base64.encode_into(strings.to_writer(&builder2), transmute([]byte)fooba, base64.ENC_URL_TABLE, options = {.No_Padding}) + testing.expect_value(t, err, nil) + testing.expect_value(t, strings.to_string(builder2), "Zm9vYmE") + + // Empty input writes nothing. + builder3: strings.Builder + strings.builder_init(&builder3) + defer strings.builder_destroy(&builder3) + + err = base64.encode_into(strings.to_writer(&builder3), nil, options = {.No_Padding}) + testing.expect_value(t, err, nil) + testing.expect_value(t, strings.to_string(builder3), "") +} + +// Transforms a canonical padded standard-alphabet vector into the URL-safe +// alphabet (RFC 4648 section 5, Table 2) and/or the unpadded form (section +// 3.2), mirroring the reference-string converters of Go's encoding/base64 +// tests. The result lives in the temp allocator. +_transform_reference :: proc(encoded: string, url, raw: bool) -> string { + s := encoded + if url { + s, _ = strings.replace_all(s, "+", "-", allocator = context.temp_allocator) + s, _ = strings.replace_all(s, "/", "_", allocator = context.temp_allocator) + } + if raw { + s = strings.trim_right(s, "=") + } + return s +} + +@(test) +test_rfc4648_and_go_vectors :: proc(t: ^testing.T) { + vectors := []Test{ + // RFC 4648 section 9 illustrations (also the RFC 3548 examples in + // Go's encoding/base64 tests). These cover all three padding cases + // and exercise index 62 '+', which separates the URL alphabet. + {"\x14\xFB\x9C\x03\xD9\x7E", "FPucA9l+"}, + {"\x14\xFB\x9C\x03\xD9", "FPucA9k="}, + {"\x14\xFB\x9C\x03", "FPucAw=="}, + + // RFC 4648 section 10 test vectors. + {"", ""}, + {"f", "Zg=="}, + {"fo", "Zm8="}, + {"foo", "Zm9v"}, + {"foob", "Zm9vYg=="}, + {"fooba", "Zm9vYmE="}, + {"foobar", "Zm9vYmFy"}, + + // "Wikipedia examples", via Go's encoding/base64 tests. + {"sure.", "c3VyZS4="}, + {"sure", "c3VyZQ=="}, + {"sur", "c3Vy"}, + {"su", "c3U="}, + {"leasure.", "bGVhc3VyZS4="}, + {"easure.", "ZWFzdXJlLg=="}, + {"asure.", "YXN1cmUu"}, + + // Go's bigtest. + {"Twas brillig, and the slithy toves", "VHdhcyBicmlsbGlnLCBhbmQgdGhlIHNsaXRoeSB0b3Zlcw=="}, + } + + variants := []struct { + name: string, + enc: [64]byte, + dec: [256]i8, + options: base64.Encode_Options, + doptions: base64.Decode_Options, + url: bool, + raw: bool, + } { + {"std", base64.ENC_TABLE, base64.DEC_TABLE, {}, {.Strict}, false, false}, + {"url", base64.ENC_URL_TABLE, base64.DEC_URL_TABLE, {}, {.Strict}, true, false}, + {"raw", base64.ENC_TABLE, base64.DEC_TABLE, {.No_Padding}, {.Strict, .No_Padding}, false, true}, + {"raw url", base64.ENC_URL_TABLE, base64.DEC_URL_TABLE, {.No_Padding}, {.Strict, .No_Padding}, true, true}, + } + + for v in vectors { + for variant in variants { + expected := _transform_reference(v.base64, variant.url, variant.raw) + + encoded := base64.encode(transmute([]byte)v.vector, variant.enc, options = variant.options) + testing.expectf(t, encoded == expected, "%s encode(%q): got %q, want %q", variant.name, v.vector, encoded, expected) + testing.expectf(t, base64.encoded_len(transmute([]byte)v.vector, variant.options) == len(expected), "%s encoded_len(%q): got %d, want %d", variant.name, v.vector, base64.encoded_len(transmute([]byte)v.vector, variant.options), len(expected)) + delete(encoded) + + decoded, err := base64.decode(expected, variant.dec, options = variant.doptions) + if testing.expectf(t, err == nil, "%s decode(%q): %v", variant.name, expected, err) { + testing.expectf(t, string(decoded) == v.vector, "%s decode(%q): got %q, want %q", variant.name, expected, decoded, v.vector) + } + delete(decoded) + } + } +} + +@(test) +test_newline_rejected :: proc(t: ^testing.T) { + // Inputs from Go's TestNewLineCharacters. Go's decoder deliberately ignores + // "\r" and "\n" (MIME legacy); RFC 4648 section 3.3 says implementations + // MUST reject characters outside the alphabet, so Odin must not accept them. + // The strict validator checks structure before the alphabet, so only the + // fact of rejection is asserted here. + strict_cases := []string{ + "c3VyZQ==\r", + "c3VyZQ==\n", + "c3VyZQ==\r\n", + "c3VyZ\r\nQ==", + "c3V\ryZ\nQ==", + "c3V\nyZ\rQ==", + "c3VyZ\nQ==", + "c3VyZQ\n==", + "c3VyZQ=\n=", + "c3VyZQ=\r\n\r\n=", + } + for c in strict_cases { + decoded, err := base64.decode(c, options = {.Strict}) + testing.expectf(t, err != nil, "strict decode(%q): expected rejection, got %q", c, decoded) + delete(decoded) + } + + // Lenient mode only scans the input span `decoded_len` implies, so bytes + // past the decoded tail are not always inspected (e.g. "c3VyZQ\n==" + // currently decodes to "sure"); interior ones are always seen. + lenient_cases := []string{ + "c3VyZQ==\n", + "c3VyZQ=\n=", + "c3V\ryZ\rQ==", + } + for c in lenient_cases { + decoded, err := base64.decode(c) + testing.expectf(t, err == base64.Decode_Error.Invalid_Character, "lenient decode(%q): got %v, want Invalid_Character", c, err) + testing.expect(t, decoded == nil) + } +} From 98203dbd56d925574e916b3ff31c5d629ab109e0 Mon Sep 17 00:00:00 2001 From: gingerBill Date: Thu, 1 Oct 2026 09:27:34 +0100 Subject: [PATCH 106/215] parapoly: remove the in-place polymorphic match; substitution engine is now the only resolver --- src/check_builtin.cpp | 2 +- src/check_expr.cpp | 398 +----------------------------------------- src/check_type.cpp | 254 +++++---------------------- 3 files changed, 44 insertions(+), 610 deletions(-) diff --git a/src/check_builtin.cpp b/src/check_builtin.cpp index 5dcec083a..6777ca8b1 100644 --- a/src/check_builtin.cpp +++ b/src/check_builtin.cpp @@ -7496,7 +7496,7 @@ gb_internal bool check_builtin_procedure(CheckerContext *c, Operand *operand, As operand->type = t_untyped_bool; bool is_specialization = false; if (!are_types_identical(s, t)) { - is_specialization = check_type_specialization_to(c, s, t, false, false); + is_specialization = subst_check_specialization(c, s, t, /*modify_type*/false); } operand->value = exact_value_bool(is_specialization); diff --git a/src/check_expr.cpp b/src/check_expr.cpp index 6ff54a624..5e27cc82d 100644 --- a/src/check_expr.cpp +++ b/src/check_expr.cpp @@ -747,8 +747,8 @@ gb_internal bool find_or_generate_polymorphic_procedure_from_parameters(CheckerC return find_or_generate_polymorphic_procedure(c, base_entity, nullptr, operands, poly_def_node, poly_proc_data); } -gb_internal bool check_type_specialization_to(CheckerContext *c, Type *specialization, Type *type, bool compound, bool modify_type, bool finalize = true); -gb_internal bool is_polymorphic_type_assignable(CheckerContext *c, Type *poly, Type *source, bool compound, bool modify_type); +gb_internal bool subst_poly_assignable(CheckerContext *c, Type *pattern, Type *source, bool modify_type); +gb_internal bool subst_check_specialization(CheckerContext *ctx, Type *specialization, Type *type, bool modify_type); gb_internal bool check_cast_internal(CheckerContext *c, Operand *x, Type *type); gb_internal bool check_proc_params_assignable(CheckerContext *c, Type *x, Type *y); @@ -955,7 +955,7 @@ gb_internal i64 check_distance_between_types(CheckerContext *c, Operand *operand if (is_type_polymorphic(dst) && !is_type_polymorphic(src)) { bool modify_type = !c->no_polymorphic_errors; - if (is_polymorphic_type_assignable(c, type, s, false, modify_type)) { + if (subst_poly_assignable(c, type, s, modify_type)) { return 2; } } @@ -1521,398 +1521,6 @@ gb_internal bool polymorphic_assign_index(Type **gt_, i64 *dst_count, i64 source return false; } -// In-place matcher: mutates `poly` to bind its polymorphic vars to `source`. This is NOT the primary -// resolver — the substitution engine in check_type.cpp handles determine_type_from_polymorphic (both -// the resolve and the probe) and spec-conformance (subst_check_specialization / subst_unify_constraint), -// and as of the constraint fix it covers those completely: instrumentation shows this matcher produces -// no successful result in either path across the stdlib. It is still genuinely reached from: -// * check_distance_between_types (assignability scoring for overload resolution), -// * the type_is_specialization_of intrinsic (via check_type_specialization_to), -// * and as the never-succeeding Subst_Unhandled fallback of the two paths above (genuine subtyping and -// untyped/conversion cases the engine defers rather than resolves). -// Deleting it outright would require reimplementing subtyping and conversion matching in the engine. -gb_internal bool is_polymorphic_type_assignable(CheckerContext *c, Type *poly, Type *source, bool compound, bool modify_type) { - Operand o = {Addressing_Value}; - o.type = source; - switch (poly->kind) { - case Type_Basic: - if (compound) return are_types_identical(poly, source); - return check_is_assignable_to(c, &o, poly); - - case Type_Named: { - if (check_type_specialization_to(c, poly, source, compound, modify_type)) { - return true; - } - if (compound || !is_type_generic(poly)) { - return are_types_identical(poly, source); - } - return check_is_assignable_to(c, &o, poly); - } - - case Type_Generic: { - if (poly->Generic.specialized != nullptr) { - Type *s = poly->Generic.specialized; - if (!check_type_specialization_to(c, s, source, compound, modify_type)) { - return false; - } - } - if (modify_type) { - Type *ds = default_type(source); - gb_memmove(poly, ds, gb_size_of(Type)); - } - return true; - } - case Type_Pointer: - if (source->kind == Type_Pointer) { - isize level = check_is_assignable_to_using_subtype(source->Pointer.elem, poly->Pointer.elem, /*level*/0, /*src_is_ptr*/false, /*allow_polymorphic*/true); - if (level > 0) { - return true; - } - return is_polymorphic_type_assignable(c, poly->Pointer.elem, source->Pointer.elem, true, modify_type); - } else if (source->kind == Type_MultiPointer) { - isize level = check_is_assignable_to_using_subtype(source->MultiPointer.elem, poly->Pointer.elem); - if (level > 0) { - return true; - } - return is_polymorphic_type_assignable(c, poly->Pointer.elem, source->MultiPointer.elem, true, modify_type); - } - return false; - - case Type_MultiPointer: - if (source->kind == Type_MultiPointer) { - isize level = check_is_assignable_to_using_subtype(source->MultiPointer.elem, poly->MultiPointer.elem); - if (level > 0) { - return true; - } - return is_polymorphic_type_assignable(c, poly->MultiPointer.elem, source->MultiPointer.elem, true, modify_type); - } else if (source->kind == Type_Pointer) { - isize level = check_is_assignable_to_using_subtype(source->Pointer.elem, poly->MultiPointer.elem); - if (level > 0) { - return true; - } - return is_polymorphic_type_assignable(c, poly->MultiPointer.elem, source->Pointer.elem, true, modify_type); - } - return false; - - case Type_SoaPointer: - if (source->kind == Type_SoaPointer) { - isize level = check_is_assignable_to_using_subtype(source->SoaPointer.elem, poly->SoaPointer.elem, /*level*/0, /*src_is_ptr*/false, /*allow_polymorphic*/true); - if (level > 0) { - return true; - } - return is_polymorphic_type_assignable(c, poly->SoaPointer.elem, source->SoaPointer.elem, true, modify_type); - } - return false; - - case Type_Array: - if (source->kind == Type_Array) { - Type *generic_count = poly->Array.generic_count; - i64 count = poly->Array.count; - if (generic_count != nullptr) { - if (!polymorphic_assign_index(&generic_count, &count, source->Array.count, modify_type)) { - return false; - } - if (modify_type) { - poly->Array.generic_count = generic_count; - poly->Array.count = count; - } - } - if (count == source->Array.count) { - return is_polymorphic_type_assignable(c, poly->Array.elem, source->Array.elem, true, modify_type); - } - } else if (source->kind == Type_EnumeratedArray) { - if (poly->Array.generic_count != nullptr) { - Type *gt = poly->Array.generic_count; - GB_ASSERT(gt->kind == Type_Generic); - Entity *e = scope_lookup(gt->Generic.scope, gt->Generic.interned_name, 0); - GB_ASSERT(e != nullptr); - if (e->kind == Entity_TypeName) { - Type *index = source->EnumeratedArray.index; - Type *it = base_type(index); - if (it->kind != Type_Enum) { - return false; - } - if (!modify_type) { - return is_polymorphic_type_assignable(c, poly->Array.elem, source->EnumeratedArray.elem, true, false); - } - - // Resolve `[$N]$T` to an enumerated array by constructing the concrete node - // (keeping the $T element node) and finalizing poly to it, rather than rewriting - // poly's kind and fields one at a time. - Type *poly_elem = poly->Array.elem; - Type *ea = alloc_type_enumerated_array(poly_elem, index, - source->EnumeratedArray.min_value, source->EnumeratedArray.max_value, - source->EnumeratedArray.count, source->EnumeratedArray.op); - ea->flags.exchange(source->flags); - gb_memmove(poly, ea, gb_size_of(Type)); - - e->kind = Entity_TypeName; - e->TypeName.is_type_alias = true; - e->type = index; - - if (poly->EnumeratedArray.count == source->EnumeratedArray.count) { - return is_polymorphic_type_assignable(c, poly->EnumeratedArray.elem, source->EnumeratedArray.elem, true, modify_type); - } - } - } - } - return false; - case Type_EnumeratedArray: - if (source->kind == Type_EnumeratedArray) { - if (poly->EnumeratedArray.op != source->EnumeratedArray.op) { - return false; - } - if (poly->EnumeratedArray.op) { - if (poly->EnumeratedArray.count != source->EnumeratedArray.count) { - return false; - } - if (compare_exact_values(Token_NotEq, *poly->EnumeratedArray.min_value, *source->EnumeratedArray.min_value)) { - return false; - } - if (compare_exact_values(Token_NotEq, *poly->EnumeratedArray.max_value, *source->EnumeratedArray.max_value)) { - return false; - } - return is_polymorphic_type_assignable(c, poly->EnumeratedArray.index, source->EnumeratedArray.index, true, modify_type); - } - // Evaluate both (for modify_type side effects) but require both to match. - bool index = is_polymorphic_type_assignable(c, poly->EnumeratedArray.index, source->EnumeratedArray.index, true, modify_type); - bool elem = is_polymorphic_type_assignable(c, poly->EnumeratedArray.elem, source->EnumeratedArray.elem, true, modify_type); - return index && elem; - } - return false; - - case Type_DynamicArray: - if (source->kind == Type_DynamicArray) { - return is_polymorphic_type_assignable(c, poly->DynamicArray.elem, source->DynamicArray.elem, true, modify_type); - } - return false; - - case Type_FixedCapacityDynamicArray: - if (source->kind == Type_FixedCapacityDynamicArray) { - Type *generic_capacity = poly->FixedCapacityDynamicArray.generic_capacity; - i64 capacity = poly->FixedCapacityDynamicArray.capacity; - if (generic_capacity != nullptr) { - if (!polymorphic_assign_index(&generic_capacity, &capacity, source->FixedCapacityDynamicArray.capacity, modify_type)) { - return false; - } - if (modify_type) { - poly->FixedCapacityDynamicArray.generic_capacity = generic_capacity; - poly->FixedCapacityDynamicArray.capacity = capacity; - } - } - if (capacity == source->FixedCapacityDynamicArray.capacity) { - return is_polymorphic_type_assignable(c, poly->FixedCapacityDynamicArray.elem, source->FixedCapacityDynamicArray.elem, true, modify_type); - } - } - return false; - - case Type_Slice: - if (source->kind == Type_Slice) { - return is_polymorphic_type_assignable(c, poly->Slice.elem, source->Slice.elem, true, modify_type); - } - return false; - - case Type_Enum: - return false; - - case Type_BitSet: - if (source->kind == Type_BitSet) { - if (!is_type_polymorphic(poly->BitSet.elem)) { - if (poly->BitSet.upper != source->BitSet.upper || poly->BitSet.lower != source->BitSet.lower) { - return false; - } - } - if (!is_polymorphic_type_assignable(c, poly->BitSet.elem, source->BitSet.elem, true, modify_type)) { - return false; - } - - // For generic types like bit_set[$T] the upper and lower of the poly type will be zeroes since - // it could not figure that stuff out when the poly type was created. - if (poly->BitSet.upper == 0 && modify_type) { - poly->BitSet.upper = source->BitSet.upper; - } - if (poly->BitSet.lower == 0 && modify_type) { - poly->BitSet.lower = source->BitSet.lower; - } - - if (poly->BitSet.underlying == nullptr) { - if (modify_type) { - poly->BitSet.underlying = source->BitSet.underlying; - } - } else if (!is_polymorphic_type_assignable(c, poly->BitSet.underlying, source->BitSet.underlying, true, modify_type)) { - return false; - } - return true; - } - return false; - - case Type_Union: - if (source->kind == Type_Union) { - TypeUnion *x = &poly->Union; - TypeUnion *y = &source->Union; - if (x->variants.count != y->variants.count) { - return false; - } - for_array(i, x->variants) { - Type *a = x->variants[i]; - Type *b = y->variants[i]; - bool ok = is_polymorphic_type_assignable(c, a, b, false, modify_type); - if (!ok) return false; - } - return true; - } - return false; - - case Type_Struct: - if (source->kind == Type_Struct) { - if (poly->Struct.soa_kind == source->Struct.soa_kind && - poly->Struct.soa_kind != StructSoa_None) { - bool ok = is_polymorphic_type_assignable(c, poly->Struct.soa_elem, source->Struct.soa_elem, true, modify_type); - if (ok) switch (source->Struct.soa_kind) { - case StructSoa_None: - default: - GB_PANIC("Unhandled SOA Kind"); - break; - case StructSoa_Fixed: - if (modify_type) { - Type *type = make_soa_struct_fixed(c, nullptr, poly->Struct.node, poly->Struct.soa_elem, poly->Struct.soa_count, nullptr); - gb_memmove(poly, type, gb_size_of(*type)); - } - break; - case StructSoa_Slice: - if (modify_type) { - Type *type = make_soa_struct_slice(c, nullptr, poly->Struct.node, poly->Struct.soa_elem); - gb_memmove(poly, type, gb_size_of(*type)); - } - break; - case StructSoa_Dynamic: - if (modify_type) { - Type *type = make_soa_struct_dynamic_array(c, nullptr, poly->Struct.node, poly->Struct.soa_elem); - gb_memmove(poly, type, gb_size_of(*type)); - } - break; - } - return ok; - - } - - // NOTE(bill): Check for subtypes of - // return check_is_assignable_to(c, &o, poly); // && is_type_subtype_of_and_allow_polymorphic(o.type, poly); - } - return false; - - case Type_BitField: - if (source->kind == Type_BitField) { - return is_polymorphic_type_assignable(c, poly->BitField.backing_type, source->BitField.backing_type, true, modify_type); - } - return false; - - case Type_Tuple: - GB_PANIC("This should never happen"); - return false; - case Type_Proc: - if (source->kind == Type_Proc) { - TypeProc *x = &poly->Proc; - TypeProc *y = &source->Proc; - if (x->calling_convention != y->calling_convention) { - return false; - } - if (x->c_vararg != y->c_vararg) { - return false; - } - if (x->variadic != y->variadic) { - return false; - } - if (x->param_count != y->param_count) { - return false; - } - if (x->result_count != y->result_count) { - return false; - } - - for (isize i = 0; i < x->param_count; i++) { - Entity *a = x->params->Tuple.variables[i]; - Entity *b = y->params->Tuple.variables[i]; - bool ok = is_polymorphic_type_assignable(c, a->type, b->type, false, modify_type); - if (!ok) return false; - } - for (isize i = 0; i < x->result_count; i++) { - Entity *a = x->results->Tuple.variables[i]; - Entity *b = y->results->Tuple.variables[i]; - bool ok = is_polymorphic_type_assignable(c, a->type, b->type, false, modify_type); - if (!ok) return false; - } - - return true; - } - return false; - case Type_Map: - if (source->kind == Type_Map) { - // Evaluate both (for modify_type side effects) but require both to match. - bool key = is_polymorphic_type_assignable(c, poly->Map.key, source->Map.key, true, modify_type); - bool value = is_polymorphic_type_assignable(c, poly->Map.value, source->Map.value, true, modify_type); - if (key && value) { - if (modify_type) { - poly->Map.lookup_result_type = nullptr; - init_map_internal_types(poly); - } - return true; - } - } - return false; - - case Type_Matrix: - if (source->kind == Type_Matrix) { - Type *generic_row_count = poly->Matrix.generic_row_count; - Type *generic_column_count = poly->Matrix.generic_column_count; - i64 row_count = poly->Matrix.row_count; - i64 column_count = poly->Matrix.column_count; - if (generic_row_count != nullptr) { - if (!polymorphic_assign_index(&generic_row_count, &row_count, source->Matrix.row_count, modify_type)) { - return false; - } - } - if (generic_column_count != nullptr) { - if (!polymorphic_assign_index(&generic_column_count, &column_count, source->Matrix.column_count, modify_type)) { - return false; - } - } - if (modify_type && (poly->Matrix.generic_row_count != nullptr || poly->Matrix.generic_column_count != nullptr)) { - poly->Matrix.generic_row_count = generic_row_count; - poly->Matrix.generic_column_count = generic_column_count; - poly->Matrix.row_count = row_count; - poly->Matrix.column_count = column_count; - poly->Matrix.stride_in_bytes = 0; - } - if (row_count == source->Matrix.row_count && - column_count == source->Matrix.column_count) { - return is_polymorphic_type_assignable(c, poly->Matrix.elem, source->Matrix.elem, true, modify_type); - } - } - return false; - - case Type_SimdVector: - if (source->kind == Type_SimdVector) { - Type *generic_count = poly->SimdVector.generic_count; - i64 count = poly->SimdVector.count; - if (generic_count != nullptr) { - if (!polymorphic_assign_index(&generic_count, &count, source->SimdVector.count, modify_type)) { - return false; - } - if (modify_type) { - poly->SimdVector.generic_count = generic_count; - poly->SimdVector.count = count; - } - } - if (count == source->SimdVector.count) { - return is_polymorphic_type_assignable(c, poly->SimdVector.elem, source->SimdVector.elem, true, modify_type); - } - } - return false; - } - return false; -} - gb_internal bool check_cycle(CheckerContext *c, Entity *curr, bool report) { if (curr->state != EntityState_InProgress) { return false; diff --git a/src/check_type.cpp b/src/check_type.cpp index 6a2a36640..bfeeb287e 100644 --- a/src/check_type.cpp +++ b/src/check_type.cpp @@ -1743,134 +1743,20 @@ gb_internal GenTypesData *gen_types_data_of_specialization(Type *specialization) return nullptr; } -gb_internal bool check_type_specialization_to_internal(CheckerContext *ctx, Type *specialization, Type *type, TypeTuple *s_tuple, TypeTuple *t_tuple, bool modify_type, bool finalize) { - GB_ASSERT(t_tuple->variables.count == s_tuple->variables.count); - for_array(i, s_tuple->variables) { - Entity *s_e = s_tuple->variables[i]; - Entity *t_e = t_tuple->variables[i]; - Type *st = s_e->type; - Type *tt = t_e->type; - - // NOTE(bill, 2018-12-14): This is needed to override polymorphic named constants in types - if (st->kind == Type_Generic && t_e->kind == Entity_Constant) { - Entity *e = scope_lookup(st->Generic.scope, st->Generic.interned_name, 0); - GB_ASSERT(e != nullptr); - if (modify_type) { - e->kind = Entity_Constant; - e->Constant.value = t_e->Constant.value; - e->type = t_e->type; - } - } else { - if (st->kind == Type_Basic && tt->kind == Type_Basic && - s_e->kind == Entity_Constant && t_e->kind == Entity_Constant) { - if (!compare_exact_values(Token_CmpEq, s_e->Constant.value, t_e->Constant.value)) - return false; - } else { - bool ok = is_polymorphic_type_assignable(ctx, st, tt, true, modify_type); - if (!ok) { - // TODO(bill, 2021-08-19): is this logic correct? - return false; - } - } - } - } - - if (modify_type && finalize) { - // NOTE(bill): This is needed in order to change the actual type but still have the types defined within it. - // `specialization` may already be published in a polymorphic record's gen_types cache; - // finalize it under that record's (recursive) gen_types mutex so a concurrent - // find_polymorphic_record_entity on another thread cannot observe a torn Type. - GenTypesData *gen_types = gen_types_data_of_specialization(specialization); - if (gen_types != nullptr) mutex_lock(&gen_types->mutex); - gb_memmove(specialization, type, gb_size_of(Type)); - if (gen_types != nullptr) mutex_unlock(&gen_types->mutex); - } - - return true; -} - -gb_internal bool check_type_specialization_to(CheckerContext *ctx, Type *specialization, Type *type, bool compound, bool modify_type, bool finalize) { - if (type == nullptr || - type == t_invalid) { - return true; - } - - Type *t = base_type(type); - Type *s = base_type(specialization); - if (t->kind != s->kind) { - if (t->kind == Type_EnumeratedArray && s->kind == Type_Array) { - // Might be okay, check later - } else { - return false; - } - } - - if (is_type_untyped(t)) { - Operand o = {Addressing_Value}; - o.type = default_type(type); - bool can_convert = check_cast_internal(ctx, &o, specialization); - return can_convert; - } else if (t->kind == Type_Struct) { - if (t->Struct.polymorphic_parent == nullptr && - t == s) { - return true; - } - if (t->Struct.polymorphic_parent == specialization) { - return true; - } - - if (t->Struct.polymorphic_parent == s->Struct.polymorphic_parent && - s->Struct.polymorphic_params != nullptr && - t->Struct.polymorphic_params != nullptr) { - - TypeTuple *s_tuple = get_record_polymorphic_params(s); - TypeTuple *t_tuple = get_record_polymorphic_params(t); - return check_type_specialization_to_internal(ctx, specialization, type, s_tuple, t_tuple, modify_type, finalize); - } - } else if (t->kind == Type_Union) { - if (t->Union.polymorphic_parent == nullptr && - t == s) { - return true; - } - if (t->Union.polymorphic_parent == specialization) { - return true; - } - - if (t->Union.polymorphic_parent == s->Union.polymorphic_parent && - s->Union.polymorphic_params != nullptr && - t->Union.polymorphic_params != nullptr) { - - TypeTuple *s_tuple = get_record_polymorphic_params(s); - TypeTuple *t_tuple = get_record_polymorphic_params(t); - return check_type_specialization_to_internal(ctx, specialization, type, s_tuple, t_tuple, modify_type, finalize); - } - } - - if (specialization->kind == Type_Named && - type->kind != Type_Named) { - return false; - } - if (is_polymorphic_type_assignable(ctx, base_type(specialization), base_type(type), compound, modify_type)) { - return true; - } - - return false; -} - - -// The substitution engine is the primary way a polymorphic parameter type is resolved: -// `subst_unify` matches a pattern against a source PURELY (no node/entity mutation), accumulating -// bindings; `subst_apply` reconstructs the instantiated type by CONSTRUCTION; `subst_bind_entities` -// binds the poly-scope entities. `determine_type_from_polymorphic` uses them for every pattern the -// engine reports `Subst_Matched` for. The in-place mutator `is_polymorphic_type_assignable` remains -// only as a fallback for the patterns the engine leaves `Subst_Unhandled` (genuine subtyping, and the -// `[^]<->^` handled-by-mutator case), and for the non-`modify_type` yes/no probe. +// NOTE(bill: 2026-10-01) // -// PARAPOLY_DEBUG_VERIFY_SUBST is an off-by-default differential debug switch: it makes the old mutator -// authoritative and asserts the engine agrees with it (constructed type + entity bindings) on every -// instantiation. It compares types structurally via are_types_identical, so it CANNOT catch codegen -// state the engine must still set up (e.g. a map's internal types); those need build+run tests. -#define PARAPOLY_DEBUG_VERIFY_SUBST 0 +// The substitution engine is the way a polymorphic parameter type is resolved or a `$T: Constraint` specialization is checked: +// `subst_unify` matches a pattern against a source PURELY (no node/entity mutation), accumulating bindings +// `subst_apply` reconstructs the instantiated type by CONSTRUCTION +// `subst_bind_entities` binds the poly-scope entities +// `subst_unify_constraint` handles specialization conformance +// +// +// The old in-place mutator (is_polymorphic_type_assignable / check_type_specialization_to) +// has been removed a pattern the engine cannot match is a definite non-match, +// surfaced as a call-site error rather than silently mishandled. +// The old mutator a lovely mess of `memmove` nonsense which was quite fragile, +// so changing it to this should make things a heck of a lot more stable in the long run. enum SubstResult : u8 { Subst_Unhandled, @@ -1941,7 +1827,7 @@ gb_internal bool poly_subst_bind_enum_array(PolySubst *s, Entity *key, Type *ea) } // True when `source` is an instantiation of the bare polymorphic record template `spec` (the form a -// `$T/Stack` constraint takes). Mirrors check_type_specialization_to's `polymorphic_parent` check. +// `$T/Stack` constraint takes), via its `polymorphic_parent` link. gb_internal bool subst_source_is_template_instance(Type *source, Type *spec) { Type *sb = base_type(source); if (sb->kind == Type_Struct) { @@ -1956,11 +1842,11 @@ gb_internal bool subst_source_is_template_instance(Type *source, Type *spec) { gb_internal SubstResult subst_unify(CheckerContext *c, Type *pattern, Type *source, PolySubst *subst); // Match a constraint `spec` against `source` (does `$T/spec` accept `source`?), binding spec's nested -// vars. Mirrors check_type_specialization_to: bare template, record conformance (via the Named types), -// an untyped source's default type, or a base-typed structural match for everything else — so unlike a -// plain subst_unify it sees through named/distinct types (e.g. `[dynamic]$E` vs a `distinct [dynamic]V`). -// Anything it cannot cleanly resolve (subtyping, untyped conversions, cross-kind) is deferred as -// Subst_Unhandled to check_type_specialization_to. +// vars. Covers: a bare template, record conformance (via the Named types), an untyped source's default +// type, or a base-typed structural match for everything else — so unlike a plain subst_unify it sees +// through named/distinct types (e.g. `[dynamic]$E` vs a `distinct [dynamic]V`). Anything it cannot +// cleanly resolve (subtyping, untyped conversions, cross-kind) is returned as Subst_Unhandled, which the +// caller treats as a definite non-match. gb_internal SubstResult subst_unify_constraint(CheckerContext *c, Type *spec, Type *source, PolySubst *subst) { if (source == nullptr || source == t_invalid) { return Subst_Matched; @@ -2696,10 +2582,10 @@ gb_internal void subst_bind_entities(PolySubst *subst) { } // Specialization-conformance check for a `$T: Constraint` record/proc parameter: does `type` conform -// to `specialization`, binding the constraint's nested vars when modify_type? The engine short-circuits -// a clean structural match (skipping the in-place matcher); everything else (bare templates, subtyping, -// assignability, definite non-matches) is left to check_type_specialization_to, so behavior is -// unchanged except that the common case no longer runs the mutator. +// to `specialization`, binding the constraint's nested vars when modify_type? Handled entirely by the +// substitution engine (subst_unify_constraint). A non-match is a definite non-conformance; if the engine +// is ever incomplete for some constraint the result is a loud "does not satisfy constraint" error at the +// call site, never a silent miscompile. gb_internal bool subst_check_specialization(CheckerContext *ctx, Type *specialization, Type *type, bool modify_type) { if (type == nullptr || type == t_invalid) { return true; @@ -2707,50 +2593,31 @@ gb_internal bool subst_check_specialization(CheckerContext *ctx, Type *specializ PolySubst sub = {}; sub.items.allocator = heap_allocator(); defer (array_free(&sub.items)); - SubstResult ur = subst_unify_constraint(ctx, specialization, type, &sub); -#if PARAPOLY_DEBUG_VERIFY_SUBST - // Debug: the old check is authoritative; assert the engine's short-circuit agrees with it. - bool old = check_type_specialization_to(ctx, specialization, type, false, modify_type, /*finalize*/false); - GB_ASSERT_MSG(ur != Subst_Matched || old, "subst_check_specialization: engine matched but check_type_specialization_to did not"); - return old; -#else - if (ur == Subst_Matched) { + if (subst_unify_constraint(ctx, specialization, type, &sub) == Subst_Matched) { if (modify_type) { subst_bind_entities(&sub); } return true; } - return check_type_specialization_to(ctx, specialization, type, false, modify_type, /*finalize*/false); -#endif + return false; } -#if PARAPOLY_DEBUG_VERIFY_SUBST -// Read-only: assert that the in-place mutation bound each poly-scope entity to exactly what the -// substitution captured. This is the entity-level analogue of the apply-reproduction check; once it -// holds everywhere, entity binding can be driven from the PolySubst and the mutation removed. -gb_internal void subst_verify_entities(PolySubst *subst) { - for (PolyBinding &b : subst->items) { - Entity *e = b.key; - switch (b.kind) { - case PolyBind_Type: - GB_ASSERT_MSG(e->type != nullptr && are_types_identical(e->type, b.type), - "parapoly subst entity type mismatch for '%.*s'", LIT(e->token.string)); - break; - case PolyBind_Value: - GB_ASSERT_MSG(e->kind == Entity_Constant && e->Constant.value.kind == ExactValue_Integer && - big_int_to_i64(&e->Constant.value.value_integer) == b.value && - are_types_identical(e->type, b.value_type), - "parapoly subst entity value mismatch for '%.*s'", LIT(e->token.string)); - break; - case PolyBind_EnumArray: - GB_ASSERT_MSG(e->kind == Entity_TypeName && e->type != nullptr && - are_types_identical(e->type, b.type->EnumeratedArray.index), - "parapoly subst entity enum-array mismatch for '%.*s'", LIT(e->token.string)); - break; +// Match `source` against the polymorphic `pattern` with the substitution engine. When they unify and +// `modify_type` is set, bind the captured poly-scope entities (the side effect the old in-place matcher +// produced); returns whether they unified. This is the subst-based replacement for the overload-scoring +// use of is_polymorphic_type_assignable. Exposed as a plain bool for earlier unity-build translation units. +gb_internal bool subst_poly_assignable(CheckerContext *c, Type *pattern, Type *source, bool modify_type) { + PolySubst subst = {}; + subst.items.allocator = heap_allocator(); + defer (array_free(&subst.items)); + if (subst_unify(c, pattern, source, &subst) == Subst_Matched) { + if (modify_type) { + subst_bind_entities(&subst); } + return true; } + return false; } -#endif gb_internal Type *determine_type_from_polymorphic(CheckerContext *ctx, Type *poly_type, Operand const &operand) { bool modify_type = !ctx->no_polymorphic_errors; @@ -2786,17 +2653,11 @@ gb_internal Type *determine_type_from_polymorphic(CheckerContext *ctx, Type *pol return t_invalid; } -#if !PARAPOLY_DEBUG_VERIFY_SUBST - // Primary path: the substitution engine both resolves (modify_type) and answers the yes/no probe - // (!modify_type). Only a Subst_Unhandled result falls to the in-place mutator, which now serves - // solely as the genuine-subtyping fallback. A Subst_NoMatch is a definite non-match, so the mutator - // is skipped (the debug build asserts that NoMatch invariant against the mutator). { PolySubst subst = {}; subst.items.allocator = heap_allocator(); defer (array_free(&subst.items)); - SubstResult ur = subst_unify(ctx, poly_type, operand.type, &subst); - if (ur == Subst_Matched) { + if (subst_unify(ctx, poly_type, operand.type, &subst) == Subst_Matched) { if (modify_type) { Type *applied = subst_apply(ctx, poly_type, operand.type, &subst); subst_bind_entities(&subst); @@ -2804,42 +2665,7 @@ gb_internal Type *determine_type_from_polymorphic(CheckerContext *ctx, Type *pol } return poly_type; // probe: matched, no construction/binding needed } - if (ur == Subst_Unhandled && - is_polymorphic_type_assignable(ctx, poly_type, operand.type, false, modify_type)) { - return poly_type; - } } -#else - // Debug differential: the mutator is authoritative and the engine is asserted to agree with it. - PolySubst verify_subst = {}; - verify_subst.items.allocator = heap_allocator(); - defer (array_free(&verify_subst.items)); - // Run the engine for both modify_type and the probe, so the NoMatch-skips-the-mutator invariant the - // production path relies on is covered here too. Only construct/bind for modify_type. - SubstResult verify_ur = subst_unify(ctx, poly_type, operand.type, &verify_subst); - Type *verify_applied = nullptr; - if (modify_type && verify_ur == Subst_Matched) { - verify_applied = subst_apply(ctx, poly_type, operand.type, &verify_subst); - } - if (is_polymorphic_type_assignable(ctx, poly_type, operand.type, false, modify_type)) { - if (verify_ur == Subst_Matched) { - if (modify_type) { - GB_ASSERT_MSG(are_types_identical(verify_applied, poly_type), - "parapoly subst mismatch: applied '%s' vs mutated '%s'", - type_to_string(verify_applied), type_to_string(poly_type)); - subst_verify_entities(&verify_subst); - return verify_applied; - } - return poly_type; - } else if (verify_ur == Subst_NoMatch) { - GB_PANIC("parapoly subst reported NoMatch but in-place match succeeded (result '%s')", type_to_string(poly_type)); - } - return poly_type; - } - if (verify_ur == Subst_Matched) { - GB_PANIC("parapoly subst matched but in-place match failed"); - } -#endif if (show_error) { ERROR_BLOCK(); gbString pts = type_to_string(poly_type); @@ -2875,7 +2701,7 @@ gb_internal Type *determine_type_from_polymorphic(CheckerContext *ctx, Type *pol gb_string_free(os); } } else if (is_type_pointer(poly_type)) { - if (is_polymorphic_type_assignable(ctx, type_deref(poly_type), operand.type, /*compound*/false, /*modify_type*/false)) { + if (subst_poly_assignable(ctx, type_deref(poly_type), operand.type, /*modify_type*/false)) { gbString os = expr_to_string(operand.expr); error_line("\tSuggestion: Did you mean '&%s'?\n", os); gb_string_free(os); From 21302f84df81ecb69c49af1a2957d586445109cb Mon Sep 17 00:00:00 2001 From: gingerBill Date: Thu, 1 Oct 2026 09:40:14 +0100 Subject: [PATCH 107/215] Fix bodge of using `i64` instead of `ExactValue` in `PolyBinding` --- src/check_type.cpp | 49 ++++++++++++++++++++++++---------------------- 1 file changed, 26 insertions(+), 23 deletions(-) diff --git a/src/check_type.cpp b/src/check_type.cpp index bfeeb287e..679e9db58 100644 --- a/src/check_type.cpp +++ b/src/check_type.cpp @@ -1774,8 +1774,8 @@ struct PolyBinding { Entity * key; PolyBindKind kind; Type * type; // PolyBind_Type: bound type; PolyBind_EnumArray: source EnumeratedArray - i64 value; // PolyBind_Value: array count - Type * value_type; // PolyBind_Value: entity type the mutation gives the count constant + ExactValue value; // PolyBind_Value: the constant (array/matrix/simd count, or a record const param of any type) + Type * value_type; // PolyBind_Value: entity type the binding gives the constant }; struct PolySubst { Array items; @@ -1807,7 +1807,7 @@ gb_internal bool poly_subst_add(PolySubst *s, Entity *key, PolyBinding b) { } switch (b.kind) { case PolyBind_Type: return are_types_identical(prev->type, b.type); - case PolyBind_Value: return prev->value == b.value; + case PolyBind_Value: return compare_exact_values(Token_CmpEq, prev->value, b.value); case PolyBind_EnumArray: return are_types_identical(prev->type, b.type); } return false; @@ -1817,13 +1817,18 @@ gb_internal bool poly_subst_add(PolySubst *s, Entity *key, PolyBinding b) { return true; } gb_internal bool poly_subst_bind_type(PolySubst *s, Entity *key, Type *t) { - return poly_subst_add(s, key, PolyBinding{nullptr, PolyBind_Type, t, 0, nullptr}); + return poly_subst_add(s, key, PolyBinding{nullptr, PolyBind_Type, t, {}, nullptr}); } -gb_internal bool poly_subst_bind_value(PolySubst *s, Entity *key, i64 v, Type *value_type) { +gb_internal bool poly_subst_bind_value(PolySubst *s, Entity *key, ExactValue v, Type *value_type) { return poly_subst_add(s, key, PolyBinding{nullptr, PolyBind_Value, nullptr, v, value_type}); } gb_internal bool poly_subst_bind_enum_array(PolySubst *s, Entity *key, Type *ea) { - return poly_subst_add(s, key, PolyBinding{nullptr, PolyBind_EnumArray, ea, 0, nullptr}); + return poly_subst_add(s, key, PolyBinding{nullptr, PolyBind_EnumArray, ea, {}, nullptr}); +} +// Integer payload of a PolyBind_Value used as a count (array/matrix/simd dimension). +gb_internal i64 poly_binding_count(PolyBinding const *b) { + GB_ASSERT(b->kind == PolyBind_Value && b->value.kind == ExactValue_Integer); + return big_int_to_i64(&b->value.value_integer); } // True when `source` is an instantiation of the bare polymorphic record template `spec` (the form a @@ -1953,7 +1958,7 @@ gb_internal SubstResult subst_unify(CheckerContext *c, Type *pattern, Type *sour if (ne == nullptr) { return Subst_Unhandled; } - if (!poly_subst_bind_value(subst, ne, source->Array.count, t_untyped_integer)) { + if (!poly_subst_bind_value(subst, ne, exact_value_i64(source->Array.count), t_untyped_integer)) { return Subst_NoMatch; } } else if (pattern->Array.count != source->Array.count) { @@ -1995,7 +2000,7 @@ gb_internal SubstResult subst_unify(CheckerContext *c, Type *pattern, Type *sour if (re == nullptr) { return Subst_Unhandled; } - if (!poly_subst_bind_value(subst, re, source->Matrix.row_count, t_untyped_integer)) { + if (!poly_subst_bind_value(subst, re, exact_value_i64(source->Matrix.row_count), t_untyped_integer)) { return Subst_NoMatch; } } else if (pattern->Matrix.row_count != source->Matrix.row_count) { @@ -2009,7 +2014,7 @@ gb_internal SubstResult subst_unify(CheckerContext *c, Type *pattern, Type *sour if (ce == nullptr) { return Subst_Unhandled; } - if (!poly_subst_bind_value(subst, ce, source->Matrix.column_count, t_untyped_integer)) { + if (!poly_subst_bind_value(subst, ce, exact_value_i64(source->Matrix.column_count), t_untyped_integer)) { return Subst_NoMatch; } } else if (pattern->Matrix.column_count != source->Matrix.column_count) { @@ -2029,7 +2034,7 @@ gb_internal SubstResult subst_unify(CheckerContext *c, Type *pattern, Type *sour if (ne == nullptr) { return Subst_Unhandled; } - if (!poly_subst_bind_value(subst, ne, source->SimdVector.count, t_untyped_integer)) { + if (!poly_subst_bind_value(subst, ne, exact_value_i64(source->SimdVector.count), t_untyped_integer)) { return Subst_NoMatch; } } else if (pattern->SimdVector.count != source->SimdVector.count) { @@ -2091,10 +2096,8 @@ gb_internal SubstResult subst_unify(CheckerContext *c, Type *pattern, Type *sour return Subst_NoMatch; } } else if (t_e->kind == Entity_Constant) { - if (t_e->Constant.value.kind != ExactValue_Integer) { - return Subst_Unhandled; - } - if (!poly_subst_bind_value(subst, ge, big_int_to_i64(&t_e->Constant.value.value_integer), t_e->type)) { + // A record's polymorphic constant parameter, of any type (int, string, bool, ...). + if (!poly_subst_bind_value(subst, ge, t_e->Constant.value, t_e->type)) { return Subst_NoMatch; } } else { @@ -2174,7 +2177,7 @@ gb_internal SubstResult subst_unify(CheckerContext *c, Type *pattern, Type *sour if (ne == nullptr) { return Subst_Unhandled; } - if (!poly_subst_bind_value(subst, ne, source->FixedCapacityDynamicArray.capacity, t_untyped_integer)) { + if (!poly_subst_bind_value(subst, ne, exact_value_i64(source->FixedCapacityDynamicArray.capacity), t_untyped_integer)) { return Subst_NoMatch; } } else if (pattern->FixedCapacityDynamicArray.capacity != source->FixedCapacityDynamicArray.capacity) { @@ -2289,8 +2292,8 @@ gb_internal Entity *find_polymorphic_record_by_subst(GenTypesData *gt, TypeTuple break; } if (b->kind == PolyBind_Value) { - if (ep->kind != Entity_Constant || ep->Constant.value.kind != ExactValue_Integer || - big_int_to_i64(&ep->Constant.value.value_integer) != b->value) { + if (ep->kind != Entity_Constant || + !compare_exact_values(Token_CmpEq, ep->Constant.value, b->value)) { match = false; break; } @@ -2379,7 +2382,7 @@ gb_internal Type *subst_apply(CheckerContext *c, Type *pattern, Type *source, Po if (pattern->FixedCapacityDynamicArray.generic_capacity != nullptr) { PolyBinding *b = poly_subst_find(subst, poly_generic_entity(pattern->FixedCapacityDynamicArray.generic_capacity)); GB_ASSERT(b != nullptr && b->kind == PolyBind_Value); - cap = b->value; + cap = poly_binding_count(b); } return alloc_type_fixed_capacity_dynamic_array(elem, cap, nullptr); } @@ -2404,7 +2407,7 @@ gb_internal Type *subst_apply(CheckerContext *c, Type *pattern, Type *source, Po return r; } GB_ASSERT(b->kind == PolyBind_Value); - return alloc_type_array(subst_apply(c, pattern->Array.elem, source->Array.elem, subst), b->value, nullptr); + return alloc_type_array(subst_apply(c, pattern->Array.elem, source->Array.elem, subst), poly_binding_count(b), nullptr); } return alloc_type_array(subst_apply(c, pattern->Array.elem, source->Array.elem, subst), pattern->Array.count, nullptr); } @@ -2424,12 +2427,12 @@ gb_internal Type *subst_apply(CheckerContext *c, Type *pattern, Type *source, Po if (pattern->Matrix.generic_row_count != nullptr) { PolyBinding *b = poly_subst_find(subst, poly_generic_entity(pattern->Matrix.generic_row_count)); GB_ASSERT(b != nullptr && b->kind == PolyBind_Value); - rc = b->value; + rc = poly_binding_count(b); } if (pattern->Matrix.generic_column_count != nullptr) { PolyBinding *b = poly_subst_find(subst, poly_generic_entity(pattern->Matrix.generic_column_count)); GB_ASSERT(b != nullptr && b->kind == PolyBind_Value); - cc = b->value; + cc = poly_binding_count(b); } return alloc_type_matrix(elem, rc, cc, nullptr, nullptr, pattern->Matrix.is_row_major); } @@ -2439,7 +2442,7 @@ gb_internal Type *subst_apply(CheckerContext *c, Type *pattern, Type *source, Po if (pattern->SimdVector.generic_count != nullptr) { PolyBinding *b = poly_subst_find(subst, poly_generic_entity(pattern->SimdVector.generic_count)); GB_ASSERT(b != nullptr && b->kind == PolyBind_Value); - count = b->value; + count = poly_binding_count(b); } return alloc_type_simd_vector(count, elem, nullptr); } @@ -2569,7 +2572,7 @@ gb_internal void subst_bind_entities(PolySubst *subst) { break; case PolyBind_Value: e->kind = Entity_Constant; - e->Constant.value = exact_value_i64(b.value); + e->Constant.value = b.value; e->type = b.value_type; break; case PolyBind_EnumArray: From 4e49db59a892a168e2409b4d0841258d80015da4 Mon Sep 17 00:00:00 2001 From: gingerBill Date: Thu, 1 Oct 2026 09:54:10 +0100 Subject: [PATCH 108/215] parapoly: default untyped args against a still-polymoprhic parameter --- src/check_expr.cpp | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/check_expr.cpp b/src/check_expr.cpp index 5e27cc82d..b9d5e3108 100644 --- a/src/check_expr.cpp +++ b/src/check_expr.cpp @@ -6851,6 +6851,15 @@ gb_internal CallArgumentError check_call_arguments_internal(CheckerContext *c, A auto eval_param_and_score = [](CheckerContext *c, Operand *o, Type *param_type, CallArgumentError &err, bool param_is_variadic, Entity *e, bool show_error) -> i64 { bool allow_array_programming = !(e && (e->flags & EntityFlag_NoBroadcast)); + // NOTE(bill): If the parameter type is still polymorphic here, the callee was not instantiated for this call (e.g. a disabled polymorphic proc, whose body is elided). + // A polymorphic '$T' gives an untyped argument nothing concrete to convert to, so default it to its own type rather than reporting a nonsense "cannot convert untyped value to '$T'". + if (show_error && is_type_polymorphic(param_type) && o->mode != Addressing_Invalid && is_type_untyped(o->type)) { + Type *dt = default_type(o->type); + if (dt != nullptr && is_type_typed(dt)) { + update_untyped_expr_type(c, o->expr, dt, true); + o->type = dt; + } + } i64 s = 0; if (!check_is_assignable_to_with_score(c, o, param_type, &s, param_is_variadic, allow_array_programming)) { bool ok = false; From efe87b06ec95c72b2f3413e3ccb559fc8eb64fc9 Mon Sep 17 00:00:00 2001 From: gingerBill Date: Thu, 1 Oct 2026 10:26:24 +0100 Subject: [PATCH 109/215] parapoly: determine a polymorphic element type from a bare compound literal --- src/check_type.cpp | 112 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 112 insertions(+) diff --git a/src/check_type.cpp b/src/check_type.cpp index 679e9db58..b37f50ae0 100644 --- a/src/check_type.cpp +++ b/src/check_type.cpp @@ -2622,10 +2622,122 @@ gb_internal bool subst_poly_assignable(CheckerContext *c, Type *pattern, Type *s return false; } +gb_internal bool ast_is_context_free_constant(Ast *e) { + if (e == nullptr) { + return false; + } + e = unparen_expr(e); + if (e == nullptr) { + return false; + } + switch (e->kind) { + case Ast_BasicLit: + return true; + case Ast_UnaryExpr: + return ast_is_context_free_constant(e->UnaryExpr.expr); + case Ast_BinaryExpr: + return ast_is_context_free_constant(e->BinaryExpr.left) && + ast_is_context_free_constant(e->BinaryExpr.right); + } + return false; +} + +gb_internal Type *determine_poly_elem_from_compound_lit(CheckerContext *ctx, Type *poly_type, Ast *expr) { + if (expr == nullptr) { + return nullptr; + } + expr = unparen_expr(expr); + if (expr == nullptr || expr->kind != Ast_CompoundLit || expr->CompoundLit.type != nullptr) { + return nullptr; + } + + Type *bt = base_type(poly_type); + Type *elem_pattern = nullptr; + switch (bt->kind) { + case Type_Array: + if (bt->Array.generic_count != nullptr) { + // NOTE(bill): polymorphic count (`[$N]$T`) is not currently supported + return nullptr; + } + elem_pattern = bt->Array.elem; + break; + case Type_Slice: elem_pattern = bt->Slice.elem; break; + case Type_DynamicArray: elem_pattern = bt->DynamicArray.elem; break; + default: + return nullptr; + } + // NOTE(bill): Only a bare `$T` element keeps determination unambiguous and construction trivial + if (elem_pattern == nullptr || elem_pattern->kind != Type_Generic || elem_pattern->Generic.specialized != nullptr) { + return nullptr; + } + + Slice const &elems = expr->CompoundLit.elems; + if (elems.count == 0) { + // `{}` cannot determine an element type + return nullptr; + } + + + Type *elem_type = nullptr; + for (Ast *e : elems) { + if (!ast_is_context_free_constant(e)) { + return nullptr; + } + Operand o = {}; + Ast *trial = clone_ast(e); + i64 muted_before = error_mute_count(); + begin_error_mute(); + check_expr(ctx, &o, trial); + end_error_mute(); + if (o.mode == Addressing_Invalid || o.type == nullptr || o.type == t_invalid || + error_mute_count() != muted_before) { + return nullptr; + } + Type *et = is_type_untyped(o.type) ? default_type(o.type) : o.type; + if (et == nullptr || et == t_invalid || is_type_polymorphic(et)) { + return nullptr; + } + if (elem_type == nullptr) { + elem_type = et; + } else if (!are_types_identical(elem_type, et)) { + // non-homogeneous: fall back to the explicit-type error + return nullptr; + } + } + if (elem_type == nullptr) { + return nullptr; + } + + Type *source = nullptr; + switch (bt->kind) { + case Type_Array: source = alloc_type_array(elem_type, bt->Array.count, nullptr); break; + case Type_Slice: source = alloc_type_slice(elem_type); break; + case Type_DynamicArray: source = alloc_type_dynamic_array(elem_type); break; + } + if (source == nullptr) { + return nullptr; + } + + PolySubst subst = {}; + subst.items.allocator = heap_allocator(); + defer (array_free(&subst.items)); + if (subst_unify(ctx, poly_type, source, &subst) != Subst_Matched) { + return nullptr; + } + Type *applied = subst_apply(ctx, poly_type, source, &subst); + subst_bind_entities(&subst); + return applied; +} + gb_internal Type *determine_type_from_polymorphic(CheckerContext *ctx, Type *poly_type, Operand const &operand) { bool modify_type = !ctx->no_polymorphic_errors; bool show_error = modify_type && !ctx->hide_polymorphic_errors; if (!is_operand_value(operand)) { + if (operand.deferred_untyped_arg && modify_type) { + if (Type *determined = determine_poly_elem_from_compound_lit(ctx, poly_type, operand.expr)) { + return determined; + } + } if (operand.deferred_untyped_arg && !modify_type) { // Probe pass (procedure-group candidate pre-check): a deferred untyped argument carries no // type yet, so it cannot constrain this parameter. Treat it as a match and let the real From 3551707607cef57b62b4a77d24c3e6123bbbccb6 Mon Sep 17 00:00:00 2001 From: gingerBill Date: Thu, 1 Oct 2026 10:53:29 +0100 Subject: [PATCH 110/215] parapoly: allow a constant default value for a polymorphic parameter --- src/check_expr.cpp | 20 +++++++++++++++----- src/check_type.cpp | 6 ++++++ 2 files changed, 21 insertions(+), 5 deletions(-) diff --git a/src/check_expr.cpp b/src/check_expr.cpp index b9d5e3108..c56f1fe15 100644 --- a/src/check_expr.cpp +++ b/src/check_expr.cpp @@ -6814,11 +6814,21 @@ gb_internal CallArgumentError check_call_arguments_internal(CheckerContext *c, A } if (!context_allocator_error) { - ordered_operands[i].mode = Addressing_Value; - ordered_operands[i].type = e->type; - if (e->Variable.param_value.kind == ParameterValue_Nil) - ordered_operands[i].type = t_untyped_nil; - ordered_operands[i].expr = e->Variable.param_value.original_ast_expr; + if (is_type_polymorphic(e->type) && e->Variable.param_value.kind == ParameterValue_Constant) { + // NOTE(bill): The parameter type is still polymorphic, so a constant default (e.g. `y: T = 0`) cannot be typed as '$T' here. + // Defer it like an untyped argument: determination resolves the parameter from the other arguments, + // then the default is materialized against the concrete type (reporting a clear error if it does not fit). + ordered_operands[i].mode = Addressing_Invalid; + ordered_operands[i].type = t_invalid; + ordered_operands[i].expr = e->Variable.param_value.original_ast_expr; + ordered_operands[i].deferred_untyped_arg = true; + } else { + ordered_operands[i].mode = Addressing_Value; + ordered_operands[i].type = e->type; + if (e->Variable.param_value.kind == ParameterValue_Nil) + ordered_operands[i].type = t_untyped_nil; + ordered_operands[i].expr = e->Variable.param_value.original_ast_expr; + } dummy_argument_count += 1; score += assign_score_function(1); diff --git a/src/check_type.cpp b/src/check_type.cpp index b37f50ae0..968281b07 100644 --- a/src/check_type.cpp +++ b/src/check_type.cpp @@ -3108,6 +3108,12 @@ gb_internal Type *check_get_params(CheckerContext *ctx, Scope *scope, Ast *_para if (default_value != nullptr) { if (type_expr != nullptr && type_expr->kind == Ast_TypeidType) { error(type_expr, "A type parameter may not have a default value"); + } else if (is_type_polymorphic(type)) { + // NOTE(bill): The parameter type is still polymorphic (`$T`, `[N]$T`, ...), + // so the default value cannot be checked against it yet. + // Evaluate it as a constant now without the assignment check. + // It is validated against the concrete parameter type when the procedure is instantiated (which re-runs this with a non-polymorphic `type`). + param_value = handle_parameter_value(ctx, nullptr, nullptr, default_value, true); } else { param_value = handle_parameter_value(ctx, type, nullptr, default_value, true); } From 3c09d0242f8160ad69e2aa50577d63f57c0308a5 Mon Sep 17 00:00:00 2001 From: gingerBill Date: Thu, 1 Oct 2026 11:01:08 +0100 Subject: [PATCH 111/215] parapoly: determine a polymorphic array count from a bare compound literal --- src/check_type.cpp | 90 ++++++++++++++++++++++++++++------------------ 1 file changed, 56 insertions(+), 34 deletions(-) diff --git a/src/check_type.cpp b/src/check_type.cpp index 968281b07..2a955b189 100644 --- a/src/check_type.cpp +++ b/src/check_type.cpp @@ -2653,11 +2653,14 @@ gb_internal Type *determine_poly_elem_from_compound_lit(CheckerContext *ctx, Typ Type *bt = base_type(poly_type); Type *elem_pattern = nullptr; + bool generic_count = false; switch (bt->kind) { case Type_Array: if (bt->Array.generic_count != nullptr) { - // NOTE(bill): polymorphic count (`[$N]$T`) is not currently supported - return nullptr; + if (bt->Array.generic_count->Generic.specialized != nullptr) { + return nullptr; // a constrained count `$N/...` is out of scope + } + generic_count = true; // `[$N]...` binds N to the literal's element count } elem_pattern = bt->Array.elem; break; @@ -2666,53 +2669,72 @@ gb_internal Type *determine_poly_elem_from_compound_lit(CheckerContext *ctx, Typ default: return nullptr; } - // NOTE(bill): Only a bare `$T` element keeps determination unambiguous and construction trivial - if (elem_pattern == nullptr || elem_pattern->kind != Type_Generic || elem_pattern->Generic.specialized != nullptr) { + + // A polymorphic element must be a bare `$T` (unambiguous element determination); otherwise the only + // thing left to determine is a polymorphic count. + bool elem_is_poly = is_type_polymorphic(elem_pattern); + if (elem_is_poly) { + if (elem_pattern->kind != Type_Generic || elem_pattern->Generic.specialized != nullptr) { + return nullptr; + } + } else if (!generic_count) { return nullptr; } Slice const &elems = expr->CompoundLit.elems; if (elems.count == 0) { - // `{}` cannot determine an element type - return nullptr; + return nullptr; // `{}` determines neither an element type nor a meaningful count } - - Type *elem_type = nullptr; - for (Ast *e : elems) { - if (!ast_is_context_free_constant(e)) { - return nullptr; - } - Operand o = {}; - Ast *trial = clone_ast(e); - i64 muted_before = error_mute_count(); - begin_error_mute(); - check_expr(ctx, &o, trial); - end_error_mute(); - if (o.mode == Addressing_Invalid || o.type == nullptr || o.type == t_invalid || - error_mute_count() != muted_before) { - return nullptr; - } - Type *et = is_type_untyped(o.type) ? default_type(o.type) : o.type; - if (et == nullptr || et == t_invalid || is_type_polymorphic(et)) { - return nullptr; + Type *elem_type = elem_is_poly ? nullptr : elem_pattern; + if (elem_is_poly) { + // Determine the element type from the (homogeneous, context-free) elements. + for (Ast *e : elems) { + if (!ast_is_context_free_constant(e)) { + return nullptr; + } + Operand o = {}; + Ast *trial = clone_ast(e); + i64 muted_before = error_mute_count(); + begin_error_mute(); + check_expr(ctx, &o, trial); + end_error_mute(); + if (o.mode == Addressing_Invalid || o.type == nullptr || o.type == t_invalid || + error_mute_count() != muted_before) { + return nullptr; + } + Type *et = is_type_untyped(o.type) ? default_type(o.type) : o.type; + if (et == nullptr || et == t_invalid || is_type_polymorphic(et)) { + return nullptr; + } + if (elem_type == nullptr) { + elem_type = et; + } else if (!are_types_identical(elem_type, et)) { + return nullptr; // non-homogeneous: fall back to the explicit-type error + } } if (elem_type == nullptr) { - elem_type = et; - } else if (!are_types_identical(elem_type, et)) { - // non-homogeneous: fall back to the explicit-type error return nullptr; } - } - if (elem_type == nullptr) { - return nullptr; + } else { + // NOTE(bill): Count-only (`[$N]ConcreteElem`): the element content is validated later by materialize + for (Ast *e : elems) { + Ast *ue = unparen_expr(e); + if (ue != nullptr && ue->kind == Ast_FieldValue) { + return nullptr; + } + } } Type *source = nullptr; switch (bt->kind) { - case Type_Array: source = alloc_type_array(elem_type, bt->Array.count, nullptr); break; - case Type_Slice: source = alloc_type_slice(elem_type); break; - case Type_DynamicArray: source = alloc_type_dynamic_array(elem_type); break; + case Type_Array: { + i64 count = generic_count ? cast(i64)elems.count : bt->Array.count; + source = alloc_type_array(elem_type, count, nullptr); + break; + } + case Type_Slice: source = alloc_type_slice(elem_type); break; + case Type_DynamicArray: source = alloc_type_dynamic_array(elem_type); break; } if (source == nullptr) { return nullptr; From 9602f57513557663e319cdf849987bde801f181e Mon Sep 17 00:00:00 2001 From: gingerBill Date: Thu, 1 Oct 2026 11:03:10 +0100 Subject: [PATCH 112/215] Minor refactor for `visited` sections --- src/check_expr.cpp | 180 +++++++++++++++++++++++---------------------- 1 file changed, 91 insertions(+), 89 deletions(-) diff --git a/src/check_expr.cpp b/src/check_expr.cpp index c56f1fe15..a12b184eb 100644 --- a/src/check_expr.cpp +++ b/src/check_expr.cpp @@ -6747,14 +6747,15 @@ gb_internal CallArgumentError check_call_arguments_internal(CheckerContext *c, A bool actually_variadic = false; if (variadic) { - if (visited[pt->variadic_index] && - positional_operand_count < positional_operands.count) { - if (show_error) { - String name = pt->params->Tuple.variables[pt->variadic_index]->token.string; - error(call, "Variadic parameters already handled with a named argument '%.*s' in procedure call", LIT(name)); + if (visited[pt->variadic_index]) { + if (positional_operand_count < positional_operands.count) { + if (show_error) { + String name = pt->params->Tuple.variables[pt->variadic_index]->token.string; + error(call, "Variadic parameters already handled with a named argument '%.*s' in procedure call", LIT(name)); + } + err = CallArgumentError_DuplicateParameter; } - err = CallArgumentError_DuplicateParameter; - } else if (!visited[pt->variadic_index]) { + } else { visited[pt->variadic_index] = true; Operand *variadic_operand = &ordered_operands[pt->variadic_index]; @@ -6789,74 +6790,74 @@ gb_internal CallArgumentError check_call_arguments_internal(CheckerContext *c, A *variadic_operand = o; } } - } for (isize i = 0; i < pt->param_count; i++) { - if (!visited[i]) { - Entity *e = pt->params->Tuple.variables[i]; - bool context_allocator_error = false; - if (e->kind == Entity_Variable) { - if (e->Variable.param_value.kind != ParameterValue_Invalid) { - if (ast_file_vet_explicit_allocators(c->file) && !checking_proc_group) { - // NOTE(lucas): check if we are trying to default to context.allocator or context.temp_allocator - if (e->Variable.param_value.original_ast_expr->kind == Ast_SelectorExpr) { - auto& expr = e->Variable.param_value.original_ast_expr->SelectorExpr.expr; - auto& selector = e->Variable.param_value.original_ast_expr->SelectorExpr.selector; - if (expr->kind == Ast_Implicit && - expr->Implicit.string == STR_LIT("context") && - selector->kind == Ast_Ident && - (selector->Ident.token.string == STR_LIT("allocator") || - selector->Ident.token.string == STR_LIT("temp_allocator"))) { - context_allocator_error = true; - } - } - } - - if (!context_allocator_error) { - if (is_type_polymorphic(e->type) && e->Variable.param_value.kind == ParameterValue_Constant) { - // NOTE(bill): The parameter type is still polymorphic, so a constant default (e.g. `y: T = 0`) cannot be typed as '$T' here. - // Defer it like an untyped argument: determination resolves the parameter from the other arguments, - // then the default is materialized against the concrete type (reporting a clear error if it does not fit). - ordered_operands[i].mode = Addressing_Invalid; - ordered_operands[i].type = t_invalid; - ordered_operands[i].expr = e->Variable.param_value.original_ast_expr; - ordered_operands[i].deferred_untyped_arg = true; - } else { - ordered_operands[i].mode = Addressing_Value; - ordered_operands[i].type = e->type; - if (e->Variable.param_value.kind == ParameterValue_Nil) - ordered_operands[i].type = t_untyped_nil; - ordered_operands[i].expr = e->Variable.param_value.original_ast_expr; - } - - dummy_argument_count += 1; - score += assign_score_function(1); - continue; - } - } - } - - if (show_error) { - if (context_allocator_error) { - gbString str = type_to_string(e->type); - error(call, "Parameter '%.*s' of type '%s' must be explicitly provided in procedure call", - LIT(e->token.string), str); - gb_string_free(str); - } else if (e->kind == Entity_TypeName) { - error(call, "Type parameter '%.*s' is missing in procedure call", - LIT(e->token.string)); - } else if (e->kind == Entity_Constant && e->Constant.value.kind != ExactValue_Invalid) { - // Ignore - } else { - gbString str = type_to_string(e->type); - error(call, "Parameter '%.*s' of type '%s' is missing in procedure call", - LIT(e->token.string), str); - gb_string_free(str); - } - } - err = CallArgumentError_ParameterMissing; + if (visited[i]) { + continue; } + Entity *e = pt->params->Tuple.variables[i]; + bool context_allocator_error = false; + if (e->kind == Entity_Variable) { + if (e->Variable.param_value.kind != ParameterValue_Invalid) { + if (ast_file_vet_explicit_allocators(c->file) && !checking_proc_group) { + // NOTE(lucas): check if we are trying to default to context.allocator or context.temp_allocator + if (e->Variable.param_value.original_ast_expr->kind == Ast_SelectorExpr) { + auto& expr = e->Variable.param_value.original_ast_expr->SelectorExpr.expr; + auto& selector = e->Variable.param_value.original_ast_expr->SelectorExpr.selector; + if (expr->kind == Ast_Implicit && + expr->Implicit.string == STR_LIT("context") && + selector->kind == Ast_Ident && + (selector->Ident.token.string == STR_LIT("allocator") || + selector->Ident.token.string == STR_LIT("temp_allocator"))) { + context_allocator_error = true; + } + } + } + + if (!context_allocator_error) { + if (is_type_polymorphic(e->type) && e->Variable.param_value.kind == ParameterValue_Constant) { + // NOTE(bill): The parameter type is still polymorphic, so a constant default (e.g. `y: T = 0`) cannot be typed as '$T' here. + // Defer it like an untyped argument: determination resolves the parameter from the other arguments, + // then the default is materialized against the concrete type (reporting a clear error if it does not fit). + ordered_operands[i].mode = Addressing_Invalid; + ordered_operands[i].type = t_invalid; + ordered_operands[i].expr = e->Variable.param_value.original_ast_expr; + ordered_operands[i].deferred_untyped_arg = true; + } else { + ordered_operands[i].mode = Addressing_Value; + ordered_operands[i].type = e->type; + if (e->Variable.param_value.kind == ParameterValue_Nil) + ordered_operands[i].type = t_untyped_nil; + ordered_operands[i].expr = e->Variable.param_value.original_ast_expr; + } + + dummy_argument_count += 1; + score += assign_score_function(1); + continue; + } + } + } + + if (show_error) { + if (context_allocator_error) { + gbString str = type_to_string(e->type); + error(call, "Parameter '%.*s' of type '%s' must be explicitly provided in procedure call", + LIT(e->token.string), str); + gb_string_free(str); + } else if (e->kind == Entity_TypeName) { + error(call, "Type parameter '%.*s' is missing in procedure call", + LIT(e->token.string)); + } else if (e->kind == Entity_Constant && e->Constant.value.kind != ExactValue_Invalid) { + // Ignore + } else { + gbString str = type_to_string(e->type); + error(call, "Parameter '%.*s' of type '%s' is missing in procedure call", + LIT(e->token.string), str); + gb_string_free(str); + } + } + err = CallArgumentError_ParameterMissing; } auto eval_param_and_score = [](CheckerContext *c, Operand *o, Type *param_type, CallArgumentError &err, bool param_is_variadic, Entity *e, bool show_error) -> i64 { @@ -8598,25 +8599,26 @@ gb_internal CallArgumentError check_polymorphic_record_type(CheckerContext *c, O } for (isize i = 0; i < param_count; i++) { - if (!visited[i]) { - Entity *e = tuple->variables[i]; - if (is_blank_ident(e->token)) { - continue; - } - - if (show_error) { - if (e->kind == Entity_TypeName) { - error(call, "Type parameter '%.*s' is missing in polymorphic type call", - LIT(e->token.string)); - } else { - gbString str = type_to_string(e->type); - error(call, "Parameter '%.*s' of type '%s' is missing in polymorphic type call", - LIT(e->token.string), str); - gb_string_free(str); - } - } - err = CallArgumentError_ParameterMissing; + if (visited[i]) { + continue; } + Entity *e = tuple->variables[i]; + if (is_blank_ident(e->token)) { + continue; + } + + if (show_error) { + if (e->kind == Entity_TypeName) { + error(call, "Type parameter '%.*s' is missing in polymorphic type call", + LIT(e->token.string)); + } else { + gbString str = type_to_string(e->type); + error(call, "Parameter '%.*s' of type '%s' is missing in polymorphic type call", + LIT(e->token.string), str); + gb_string_free(str); + } + } + err = CallArgumentError_ParameterMissing; } } From ac5087776f574d9f259ec6b226e8431c0d795e76 Mon Sep 17 00:00:00 2001 From: gingerBill Date: Thu, 1 Oct 2026 13:04:40 +0100 Subject: [PATCH 113/215] Add test_parapoly.odin --- tests/parapoly/test_parapoly.odin | 168 ++++++++++++++++++++++++++++++ 1 file changed, 168 insertions(+) diff --git a/tests/parapoly/test_parapoly.odin b/tests/parapoly/test_parapoly.odin index f7c210a29..ff8db850a 100644 --- a/tests/parapoly/test_parapoly.odin +++ b/tests/parapoly/test_parapoly.odin @@ -131,3 +131,171 @@ parapoly_using_constraint :: proc(t: ^testing.T) { // using on a constrained-gen v.x = 42 testing.expect(t, pp_using(v) == 42, "using $P/PP_Base($T) + promoted-member access") } + +// --- deferred untyped-argument inference ------------------------------------------------------------ +// An untyped argument (`{...}`, `.Member`, or a ternary whose branches are both untyped) passed to a +// polymorphic parameter whose type is only known after substitution is left unchecked and resolved +// from that parameter's type once it is determined from the other arguments. Covers single procedures, +// procedure groups (including the `append` builtin), variadics, named/reversed arguments, and the +// nested/ternary/implicit-selector forms. All run through codegen. + +pp_def_push :: proc(a: ^[dynamic]$E, e: E) { append(a, e) } +pp_def_two :: proc(a: ^[dynamic]$E, x: E, y: E) { append(a, x); append(a, y) } +pp_def_var :: proc(a: ^[dynamic]$E, xs: ..E) { for x in xs { append(a, x) } } +pp_def_one :: proc(a: ^[dynamic]$E, e: E) -> string { append(a, e); return "one" } +pp_def_many :: proc(a: ^[dynamic]$E, e: ..E) -> string { for x in e { append(a, x) }; return "many" } +pp_def_group :: proc{pp_def_one, pp_def_many} + +@test +parapoly_deferred_single :: proc(t: ^testing.T) { // untyped `{...}` resolved from a poly parameter + a: [dynamic][3]int; defer delete(a) + pp_def_push(&a, {1, 2, 3}) // positional + pp_def_push(a = &a, e = {4, 5, 6}) // named + pp_def_push(e = {7, 8, 9}, a = &a) // reversed: literal before the determining arg + testing.expect(t, len(a) == 3, "single-proc deferred literal count") + testing.expect(t, a[0] == [3]int{1, 2, 3} && a[2] == [3]int{7, 8, 9}, "single-proc deferred literal values") +} + +@test +parapoly_deferred_multiple :: proc(t: ^testing.T) { // several untyped literals in one call + a: [dynamic][2]int; defer delete(a) + pp_def_two(&a, {1, 2}, {3, 4}) // two positional, shared elem type + pp_def_var(&a, {5, 6}, {7, 8}, {9, 10}) // variadic, three literals + testing.expect(t, len(a) == 5, "multiple deferred literals count") + testing.expect(t, a[1] == [2]int{3, 4} && a[4] == [2]int{9, 10}, "multiple deferred literals values") +} + +@test +parapoly_deferred_ternary :: proc(t: ^testing.T) { // both-branch-untyped ternaries as the deferred arg + a: [dynamic][2]int; defer delete(a) + c := true + pp_def_push(&a, c ? {1, 2} : {3, 4}) // ?: + pp_def_push(&a, {5, 6} if !c else {7, 8}) // if/else + pp_def_push(&a, {9, 9} when ODIN_DEBUG else {8, 8}) // when (a[2], value depends on build) + pp_def_push(&a, c ? {1, 1} : (c ? {2, 2} : {3, 3})) // nested + testing.expect(t, a[0] == [2]int{1, 2}, "ternary ?: deferred arg") + testing.expect(t, a[1] == [2]int{7, 8}, "ternary if/else deferred arg") + testing.expect(t, a[3] == [2]int{1, 1}, "nested ternary deferred arg") +} + +@test +parapoly_deferred_implicit_selector :: proc(t: ^testing.T) { // `.Member` resolved from a poly parameter + a: [dynamic]PP_Dir; defer delete(a) + c := false + pp_def_push(&a, .E) // implicit selector + pp_def_push(&a, c ? .N : .W) // ternary of selectors + testing.expect(t, a[0] == .E && a[1] == .W, "implicit-selector deferred arg") +} + +@test +parapoly_deferred_empty :: proc(t: ^testing.T) { // empty `{}` -> zero value of the resolved type + a: [dynamic][3]int; defer delete(a) + pp_def_push(&a, {}) + testing.expect(t, a[0] == [3]int{0, 0, 0}, "empty compound literal deferred arg") +} + +@test +parapoly_deferred_append_group :: proc(t: ^testing.T) { // the `append` builtin (procedure group) + a: [dynamic][3]int; defer delete(a) + append(&a, {1, 2, 3}) // positional -> append_elem + append(&a, {4, 5, 6}, {7, 8, 9}) // variadic -> append_elems + append(array = &a, arg = {10, 11, 12}) // named + testing.expect(t, len(a) == 4, "append group deferred literal count") + testing.expect(t, a[0] == [3]int{1, 2, 3} && a[3] == [3]int{10, 11, 12}, "append group deferred literal values") +} + +@test +parapoly_deferred_group_ranking :: proc(t: ^testing.T) { // variadic vs non-variadic overload ranking + a: [dynamic][2]int; defer delete(a) + r1 := pp_def_group(&a, {1, 2}) // one literal -> non-variadic wins (variadic score penalty) + r2 := pp_def_group(&a, {3, 4}, {5, 6}) // two literals -> only the variadic overload fits the arity + testing.expect(t, r1 == "one", "single deferred literal picks non-variadic overload") + testing.expect(t, r2 == "many", "multiple deferred literals pick variadic overload") +} + +@test +parapoly_deferred_or_else :: proc(t: ^testing.T) { // or_else default self-types from the left operand + m := make(map[string][2]int); defer delete(m) + m["p"] = {1, 2} + a: [dynamic][2]int; defer delete(a) + pp_def_push(&a, m["p"] or_else {9, 9}) // present -> {1,2} + pp_def_push(&a, m["absent"] or_else {7, 8}) // missing -> {7,8} + testing.expect(t, a[0] == [2]int{1, 2} && a[1] == [2]int{7, 8}, "or_else default resolved") +} + +pp_is_sparse :: proc(x: $T) -> bool { + #partial switch v in type_info_of(T).variant { + case reflect.Type_Info_Enumerated_Array: return v.is_sparse + } + return false +} + +@test +parapoly_sparse_dense_dedup :: proc(t: ^testing.T) { // guards are_types_identical merging [E]T and #sparse[E]T + dense: [PP_Dir]int + sparse: #sparse[PP_Dir]int + testing.expect(t, pp_is_sparse(dense) == false, "[E]T instantiation is not sparse") + testing.expect(t, pp_is_sparse(sparse) == true, "#sparse[E]T not merged with the dense instantiation") +} + +pp_rec_arr :: proc(x: PP_Bar([2]$T)) -> typeid { return T } +pp_rec_earr :: proc(x: PP_Bar([PP_Dir]$T)) -> typeid { return T } + +@test +parapoly_record_compound_arg :: proc(t: ^testing.T) { // record whose polymorphic argument is a compound type + v: PP_Bar([2]int) // PP_Bar :: struct($X){ v: X } + w: PP_Bar([PP_Dir]f32) + testing.expect(t, pp_rec_arr(v) == int, "Record([2]$T) determination (was a subst_apply crash)") + testing.expect(t, pp_rec_earr(w) == f32, "Record([E]$T) determination") +} + +PP_Vec :: struct($N: int, $name: string, $signed: bool) { data: [N]int } // non-type poly const params +pp_vec_name :: proc(v: PP_Vec($N, $name, $signed)) -> string { return name } +pp_vec_n :: proc(v: PP_Vec($N, $name, $signed)) -> int { return N } +pp_vec_signed :: proc(v: PP_Vec($N, $name, $signed)) -> bool { return signed } + +@test +parapoly_record_nonint_const :: proc(t: ^testing.T) { // determine non-integer const params of a record arg + v: PP_Vec(3, "hello", true) + testing.expect(t, pp_vec_name(v) == "hello", "string poly-const param determined from record arg") + testing.expect(t, pp_vec_n(v) == 3, "int poly-const param determined alongside a string one") + testing.expect(t, pp_vec_signed(v) == true, "bool poly-const param determined from record arg") +} + +// Tier-A: a bare compound literal determines a polymorphic ELEMENT type (`[K]$T`, `[]$T`), count fixed. +pp_elem_arr :: proc(a: [3]$T) -> typeid { return T } +pp_elem_sli :: proc(s: []$T) -> typeid { return T } + +@test +parapoly_elem_from_compound_lit :: proc(t: ^testing.T) { + testing.expect(t, pp_elem_arr({1, 2, 3}) == int, "[3]$T element determined from literal") + testing.expect(t, pp_elem_arr({-1, 2, 3}) == int, "[3]$T element from unary-over-literal") + testing.expect(t, pp_elem_sli({1, 2, 3}) == int, "[]$T element determined from literal") + testing.expect(t, pp_elem_sli({1.5, 2.5}) == f64, "[]$T element defaults untyped float to f64") +} + +// A bare compound literal also determines a polymorphic COUNT (`[$N]$T`, `[$N]int`) from its length. +pp_cnt_both :: proc(a: [$N]$T) -> (int, typeid) { return N, T } +pp_cnt_int :: proc(a: [$N]int) -> int { return N } + +@test +parapoly_count_from_compound_lit :: proc(t: ^testing.T) { + n1, e1 := pp_cnt_both({1, 2, 3}) + testing.expect(t, n1 == 3 && e1 == int, "[$N]$T binds N=3 and T=int from literal") + n2, e2 := pp_cnt_both({1.5, 2.5}) + testing.expect(t, n2 == 2 && e2 == f64, "[$N]$T binds N=2 and T=f64 from literal") + testing.expect(t, pp_cnt_int({10, 20, 30, 40}) == 4, "[$N]int binds N=4 (concrete element)") + v := 7 + testing.expect(t, pp_cnt_int({v, v}) == 2, "[$N]int count works with non-literal elements") +} + +// A constant default value for a polymorphic parameter, validated against the concrete type at instantiation. +pp_def :: proc(x: $T, y: T = 0) -> T { return y } + +@test +parapoly_poly_param_default :: proc(t: ^testing.T) { + testing.expect(t, pp_def(5) == 0, "untyped default resolves to the concrete param type") + testing.expect(t, pp_def(5, 9) == 9, "explicit argument overrides the default") + testing.expect(t, pp_def(2.5) == 0.0, "same default against a different instantiation (f64)") + testing.expect(t, pp_def(2.5, 3) == 3.0, "explicit float argument") +} From 016414cc888bf0f231719e201c777c587e9c39b8 Mon Sep 17 00:00:00 2001 From: Mihail Moskov <28909106+corleypc@users.noreply.github.com> Date: Thu, 1 Oct 2026 15:09:24 +0300 Subject: [PATCH 114/215] disallows odin cc with #must_tail --- src/check_expr.cpp | 7 ++++++- src/types.cpp | 8 ++++++++ 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/src/check_expr.cpp b/src/check_expr.cpp index 13b578084..28713880f 100644 --- a/src/check_expr.cpp +++ b/src/check_expr.cpp @@ -9274,7 +9274,12 @@ gb_internal ExprKind check_call_expr(CheckerContext *c, Operand *operand, Ast *c break; case ProcTailing_must_tail: is_call_tailed = true; - if (c->curr_proc_sig == nullptr || !are_types_identical(c->curr_proc_sig, pt)) { + if (pt->kind == Type_Proc && !is_calling_convention_must_tail_allowed(pt->Proc.calling_convention)) { + ERROR_BLOCK(); + error(call, "'#must_tail' cannot be applied to a call of a procedure with the \"%s\" calling convention", + proc_calling_convention_strings[pt->Proc.calling_convention]); + error_line("\tSuggestion: Use the \"preserve/none\" calling convention\n"); + } else if (c->curr_proc_sig == nullptr || !are_types_identical(c->curr_proc_sig, pt)) { ERROR_BLOCK(); gbString a = type_to_string(pt); gbString b = type_to_string(c->curr_proc_sig); diff --git a/src/types.cpp b/src/types.cpp index d39fcb901..808d4aebf 100644 --- a/src/types.cpp +++ b/src/types.cpp @@ -1224,6 +1224,14 @@ gb_internal bool is_calling_convention_odin(ProcCallingConvention calling_conven return false; } +gb_internal bool is_calling_convention_must_tail_allowed(ProcCallingConvention calling_convention) { + switch (calling_convention) { + case ProcCC_Odin: + return false; + } + return true; +} + gb_internal Type *alloc_type_tuple() { Type *t = alloc_type(Type_Tuple); return t; From b06c5ffa70e175983c2ff22047294d019a1c4313 Mon Sep 17 00:00:00 2001 From: gingerBill Date: Thu, 1 Oct 2026 13:42:32 +0100 Subject: [PATCH 115/215] Add `-internal-global-entity-graph`; Fix union type inference bug --- src/build_settings.cpp | 1 + src/check_decl.cpp | 2 ++ src/check_expr.cpp | 2 ++ src/checker.cpp | 18 ++++++++++++++++++ src/main.cpp | 5 +++++ 5 files changed, 28 insertions(+) diff --git a/src/build_settings.cpp b/src/build_settings.cpp index ef582b4ed..f6ebd5755 100644 --- a/src/build_settings.cpp +++ b/src/build_settings.cpp @@ -598,6 +598,7 @@ struct BuildContext { bool internal_weak_monomorphization; bool internal_ignore_llvm_verification; bool internal_llvm_no_sroa; + bool internal_global_entity_graph; bool enable_rvo; diff --git a/src/check_decl.cpp b/src/check_decl.cpp index 63bf99b48..6280fc63b 100644 --- a/src/check_decl.cpp +++ b/src/check_decl.cpp @@ -2137,6 +2137,7 @@ gb_internal void check_entity_decl(CheckerContext *ctx, Entity *e, DeclInfo *d, if (e->state == EntityState_Resolved) { return; } + GlobalEntityTimingFrame timing_frame = global_entity_timing_begin(e); if (e->flags & EntityFlag_Lazy) { mutex_lock(&ctx->info->lazy_mutex); } @@ -2222,6 +2223,7 @@ gb_internal void check_entity_decl(CheckerContext *ctx, Entity *e, DeclInfo *d, } end:; + global_entity_timing_end(timing_frame, e); // NOTE(bill): Add it to the list of checked entities if (e->flags & EntityFlag_Lazy) { array_add(&ctx->info->entities, e); diff --git a/src/check_expr.cpp b/src/check_expr.cpp index a12b184eb..5f7523134 100644 --- a/src/check_expr.cpp +++ b/src/check_expr.cpp @@ -13112,6 +13112,8 @@ gb_internal ExprKind check_expr_base(CheckerContext *c, Operand *o, Ast *node, T Type *elem_type = core_broadcastable_elem_type(type_hint); if (is_type_untyped(o->type)) { if (is_type_union(elem_type)) { + // NOTE: record it first so convert_to_typed's final update keeps a constant that becomes a value (e.g. broadcast to an array variant) + add_untyped(c, node, o->mode, o->type, o->value); convert_to_typed(c, o, elem_type); } } diff --git a/src/checker.cpp b/src/checker.cpp index 6273a8f7e..3cb10f95b 100644 --- a/src/checker.cpp +++ b/src/checker.cpp @@ -4599,6 +4599,7 @@ gb_internal DECL_ATTRIBUTE_PROC(asm_decl_attribute) { return false; } +#include "checker_global_graph.cpp" #include "check_expr.cpp" #include "check_builtin.cpp" #include "check_type.cpp" @@ -5384,6 +5385,7 @@ gb_internal void check_all_global_entities(Checker *c) { continue; } DeclInfo *d = e->decl_info; + GlobalEntityTimingFrame timing_frame = global_entity_timing_begin(e); check_single_global_entity(c, e, d); if (e->type != nullptr && is_type_typed(e->type)) { for (Type *t = nullptr; mpsc_dequeue(&c->soa_types_to_complete, &t); /**/) { @@ -5393,6 +5395,7 @@ gb_internal void check_all_global_entities(Checker *c) { (void)type_size_of(e->type); (void)type_align_of(e->type); } + global_entity_timing_end(timing_frame, e); } in_single_threaded_checker_stage.store(false, std::memory_order_relaxed); @@ -6279,6 +6282,7 @@ gb_internal void check_import_entities(Checker *c) { defer (map_destroy(&untyped)); isize min_pkg_index = 0; + u64 stage_start = global_import_stage_begin(); for (isize pkg_index = 0; pkg_index < package_order.count; pkg_index++) { ImportGraphNode *node = package_order[pkg_index]; AstPackage *pkg = node->pkg; @@ -6309,6 +6313,7 @@ gb_internal void check_import_entities(Checker *c) { } min_pkg_index = pkg_index; } + global_import_stage_end(GlobalImportStage_CollectFileDecls, stage_start); TIME_SECTION("check_import_entities - check delayed entities"); for (isize pkg_index = 0; pkg_index < package_order.count; pkg_index++) { @@ -6316,6 +6321,7 @@ gb_internal void check_import_entities(Checker *c) { GB_ASSERT(node->scope->flags&ScopeFlag_Pkg); AstPackage *pkg = node->scope->pkg; + stage_start = global_import_stage_begin(); for_array(i, pkg->files) { AstFile *f = pkg->files[i]; reset_checker_context(&ctx, f, &untyped); @@ -6326,13 +6332,17 @@ gb_internal void check_import_entities(Checker *c) { array_clear(&f->delayed_decls_queues[AstDelayQueue_Import]); add_untyped_expressions(ctx.info, &untyped); } + global_import_stage_end(GlobalImportStage_Imports, stage_start); + stage_start = global_import_stage_begin(); for_array(i, pkg->files) { AstFile *f = pkg->files[i]; reset_checker_context(&ctx, f, &untyped); correct_type_aliases_in_scope(&ctx, pkg->scope); } + global_import_stage_end(GlobalImportStage_TypeAliases, stage_start); + stage_start = global_import_stage_begin(); for_array(i, pkg->files) { AstFile *f = pkg->files[i]; reset_checker_context(&ctx, f, &untyped); @@ -6354,7 +6364,9 @@ gb_internal void check_import_entities(Checker *c) { array_clear(&f->delayed_decls_queues[AstDelayQueue_ForeignBlock]); } + global_import_stage_end(GlobalImportStage_ForeignBlocks, stage_start); + stage_start = global_import_stage_begin(); for_array(i, pkg->files) { AstFile *f = pkg->files[i]; reset_checker_context(&ctx, f, &untyped); @@ -6367,6 +6379,7 @@ gb_internal void check_import_entities(Checker *c) { add_untyped_expressions(ctx.info, &untyped); } + global_import_stage_end(GlobalImportStage_DelayedExprs, stage_start); } } @@ -7767,6 +7780,11 @@ gb_internal void check_parsed_files(Checker *c) { TIME_SECTION("check all global entities"); check_all_global_entities(c); + if (build_context.internal_global_entity_graph) { + TIME_SECTION("print global entity graph"); + print_global_entity_graph(c); + } + TIME_SECTION("init preload"); init_preload(c); diff --git a/src/main.cpp b/src/main.cpp index 9560bb384..ca56c40f8 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -532,6 +532,7 @@ enum BuildFlagKind { BuildFlag_InternalLLVMVerification, BuildFlag_InternalLLVMNoSROA, BuildFlag_InternalEnableRVO, + BuildFlag_InternalGlobalEntityGraph, BuildFlag_Sanitize, BuildFlag_LTO, @@ -793,6 +794,7 @@ gb_internal bool parse_build_flags(Array args) { add_flag(&build_flags, BuildFlag_InternalLLVMVerification, str_lit("internal-ignore-llvm-verification"), BuildFlagParam_None, Command_all); add_flag(&build_flags, BuildFlag_InternalLLVMNoSROA, str_lit("internal-llvm-no-sroa"), BuildFlagParam_None, Command_all); add_flag(&build_flags, BuildFlag_InternalEnableRVO, str_lit("internal-enable-rvo"), BuildFlagParam_None, Command_all); + add_flag(&build_flags, BuildFlag_InternalGlobalEntityGraph, str_lit("internal-global-entity-graph"), BuildFlagParam_None, Command__does_check); add_flag(&build_flags, BuildFlag_Sanitize, str_lit("sanitize"), BuildFlagParam_String, Command__does_build, true); @@ -1841,6 +1843,9 @@ gb_internal bool parse_build_flags(Array args) { case BuildFlag_InternalEnableRVO: build_context.enable_rvo = true; break; + case BuildFlag_InternalGlobalEntityGraph: + build_context.internal_global_entity_graph = true; + break; case BuildFlag_Sanitize: From c6b9f8d9980be2e11ba5dd924a11aa6ef3fffa0c Mon Sep 17 00:00:00 2001 From: gingerBill Date: Thu, 1 Oct 2026 13:51:40 +0100 Subject: [PATCH 116/215] Try to fix the `#+lazy` entities --- src/check_decl.cpp | 22 +- src/check_expr.cpp | 13 +- src/checker.hpp | 1 + src/checker_global_graph.cpp | 539 +++++++++++++++++++++++++++++++++++ 4 files changed, 568 insertions(+), 7 deletions(-) create mode 100644 src/checker_global_graph.cpp diff --git a/src/check_decl.cpp b/src/check_decl.cpp index 6280fc63b..48865d890 100644 --- a/src/check_decl.cpp +++ b/src/check_decl.cpp @@ -2137,10 +2137,16 @@ gb_internal void check_entity_decl(CheckerContext *ctx, Entity *e, DeclInfo *d, if (e->state == EntityState_Resolved) { return; } - GlobalEntityTimingFrame timing_frame = global_entity_timing_begin(e); - if (e->flags & EntityFlag_Lazy) { + bool is_lazy = (e->flags & EntityFlag_Lazy) != 0; + if (is_lazy) { mutex_lock(&ctx->info->lazy_mutex); + if (e->state == EntityState_Resolved) { + // NOTE: another thread checked it whilst this one waited + mutex_unlock(&ctx->info->lazy_mutex); + return; + } } + GlobalEntityTimingFrame timing_frame = global_entity_timing_begin(e); String name = e->token.string; @@ -2225,12 +2231,22 @@ gb_internal void check_entity_decl(CheckerContext *ctx, Entity *e, DeclInfo *d, end:; global_entity_timing_end(timing_frame, e); // NOTE(bill): Add it to the list of checked entities - if (e->flags & EntityFlag_Lazy) { + if (is_lazy) { array_add(&ctx->info->entities, e); mutex_unlock(&ctx->info->lazy_mutex); } } +// A lazy entity is only ever in progress on the thread holding `lazy_mutex`, so taking it (it is +// recursive) waits out another thread and is a no-op on the thread that is checking it +gb_internal void wait_for_lazy_entity(CheckerContext *ctx, Entity *e) { + if ((e->flags & EntityFlag_Lazy) == 0 || e->state == EntityState_Resolved) { + return; + } + mutex_lock(&ctx->info->lazy_mutex); + mutex_unlock(&ctx->info->lazy_mutex); +} + gb_internal void add_deps_from_child_to_parent(DeclInfo *decl) { if (decl && decl->parent) { diff --git a/src/check_expr.cpp b/src/check_expr.cpp index 5f7523134..98c3e7051 100644 --- a/src/check_expr.cpp +++ b/src/check_expr.cpp @@ -1677,6 +1677,8 @@ gb_internal Entity *check_ident(CheckerContext *c, Operand *o, Ast *n, Type *nam add_entity_use(c, n, e); if (e->state == EntityState_Unresolved) { check_entity_decl(c, e, nullptr, named_type); + } else { + wait_for_lazy_entity(c, e); } switch (e->kind) { case Entity_Constant: @@ -5701,11 +5703,14 @@ gb_internal Entity *check_entity_from_ident_or_selector(CheckerContext *c, Ast * } } else */if (node->kind == Ast_Ident) { Entity *e = node->Ident.entity.load(); - if (e != nullptr) { - return e; + if (e == nullptr) { + e = scope_lookup(c->scope, node->Ident.interned, node->Ident.hash); } - String name = node->Ident.token.string; - return scope_lookup(c->scope, node->Ident.interned, node->Ident.hash); + if (e != nullptr) { + // its kind and type are read by the caller + wait_for_lazy_entity(c, e); + } + return e; } else if (!ident_only) if (node->kind == Ast_SelectorExpr) { ast_node(se, SelectorExpr, node); if (se->token.kind == Token_ArrowRight) { diff --git a/src/checker.hpp b/src/checker.hpp index 36d9aa6e4..c382d28fe 100644 --- a/src/checker.hpp +++ b/src/checker.hpp @@ -916,6 +916,7 @@ gb_internal void check_add_foreign_import_decl(CheckerContext *c, Ast *decl); gb_internal void check_entity_decl(CheckerContext *c, Entity *e, DeclInfo *d, Type *named_type); +gb_internal void wait_for_lazy_entity(CheckerContext *c, Entity *e); gb_internal void check_const_decl(CheckerContext *c, Entity *e, Ast *type_expr, Ast *init_expr, Type *named_type); gb_internal void check_type_decl(CheckerContext *c, Entity *e, Ast *type_expr, Type *def); diff --git a/src/checker_global_graph.cpp b/src/checker_global_graph.cpp new file mode 100644 index 000000000..d639297ac --- /dev/null +++ b/src/checker_global_graph.cpp @@ -0,0 +1,539 @@ +// -internal-global-entity-graph: per-entity self time of global declaration checking, +// plus statistics of the dependency graph between global entities (DeclInfo::deps) + +struct GlobalEntityTime { + u64 ticks; + bool in_global_loop; +}; + +struct GlobalEntityTimingFrame { + u64 start; + u64 saved_child_ticks; + bool active; +}; + +enum GlobalImportStagePart { + GlobalImportStage_CollectFileDecls, + GlobalImportStage_Imports, + GlobalImportStage_TypeAliases, + GlobalImportStage_ForeignBlocks, + GlobalImportStage_DelayedExprs, + + GlobalImportStage_COUNT, +}; + +gb_global char const *global_import_stage_names[GlobalImportStage_COUNT] = { + "collect file decls ('when')", + "delayed imports", + "type alias correction", + "foreign blocks", + "delayed expressions (#assert etc.)", +}; + +gb_global u64 global_import_stage_ticks[GlobalImportStage_COUNT]; + +gb_internal u64 global_import_stage_begin(void) { + return build_context.internal_global_entity_graph ? time_stamp_time_now() : 0; +} + +gb_internal void global_import_stage_end(GlobalImportStagePart part, u64 start) { + if (build_context.internal_global_entity_graph) { + global_import_stage_ticks[part] += time_stamp_time_now() - start; + } +} + +gb_global BlockingMutex global_entity_time_mutex; +gb_global PtrMap global_entity_times; +gb_thread_local u64 global_entity_child_ticks; + +gb_internal GlobalEntityTimingFrame global_entity_timing_begin(Entity *e) { + GlobalEntityTimingFrame f = {}; + if (!build_context.internal_global_entity_graph) { + return f; + } + if (e->scope == nullptr || (e->scope->flags & ScopeFlag_File) == 0) { + return f; + } + f.active = true; + f.saved_child_ticks = global_entity_child_ticks; + global_entity_child_ticks = 0; + f.start = time_stamp_time_now(); + return f; +} + +gb_internal void global_entity_timing_end(GlobalEntityTimingFrame const &f, Entity *e) { + if (!f.active) { + return; + } + u64 total = time_stamp_time_now() - f.start; + u64 self = total - gb_min(total, global_entity_child_ticks); + global_entity_child_ticks = f.saved_child_ticks + total; + + bool in_global_loop = in_single_threaded_checker_stage.load(std::memory_order_relaxed); + + MUTEX_GUARD(&global_entity_time_mutex); + GlobalEntityTime *found = map_get(&global_entity_times, e); + if (found) { + found->ticks += self; + } else { + map_set(&global_entity_times, e, GlobalEntityTime{self, in_global_loop}); + } +} + + +// Iterative Tarjan; components are numbered so that every edge v->w has comp(w) <= comp(v) +gb_internal i32 global_graph_scc(i32 node_count, Array const &offsets, Array const &targets, Array *comp_of_) { + struct Frame { + i32 v; + i32 pos; + }; + + auto index = array_make(heap_allocator(), node_count); + auto low = array_make(heap_allocator(), node_count); + auto on_stack = array_make(heap_allocator(), node_count); + auto stack = array_make(heap_allocator(), 0, node_count); + auto frames = array_make(heap_allocator(), 0, 64); + defer (array_free(&index)); + defer (array_free(&low)); + defer (array_free(&on_stack)); + defer (array_free(&stack)); + defer (array_free(&frames)); + + Array &comp_of = *comp_of_; + for (i32 v = 0; v < node_count; v++) { + index[v] = -1; + low[v] = 0; + on_stack[v] = false; + comp_of[v] = -1; + } + + i32 counter = 0; + i32 comp_count = 0; + for (i32 root = 0; root < node_count; root++) { + if (index[root] >= 0) { + continue; + } + index[root] = low[root] = counter++; + array_add(&stack, root); + on_stack[root] = true; + array_add(&frames, Frame{root, 0}); + + while (frames.count > 0) { + Frame *top = &frames[frames.count-1]; + i32 v = top->v; + if (offsets[v] + top->pos < offsets[v+1]) { + i32 w = targets[offsets[v] + top->pos]; + top->pos += 1; + if (index[w] < 0) { + index[w] = low[w] = counter++; + array_add(&stack, w); + on_stack[w] = true; + array_add(&frames, Frame{w, 0}); + } else if (on_stack[w]) { + low[v] = gb_min(low[v], index[w]); + } + continue; + } + + if (low[v] == index[v]) { + for (;;) { + i32 w = array_pop(&stack); + on_stack[w] = false; + comp_of[w] = comp_count; + if (w == v) { + break; + } + } + comp_count += 1; + } + array_pop(&frames); + if (frames.count > 0) { + i32 u = frames[frames.count-1].v; + low[u] = gb_min(low[u], low[v]); + } + } + } + return comp_count; +} + +struct GlobalGraphComp { + i32 start; // into the member order array + i32 count; + u64 ticks; + u64 path_ticks; // heaviest dependency chain ending at this component, inclusive + i32 path_len; + i32 path_prev; + bool has_self_edge; +}; + +struct GlobalGraphSortItem { + u64 key; + i32 id; +}; + +gb_internal GB_COMPARE_PROC(global_graph_sort_item_desc) { + GlobalGraphSortItem const *x = cast(GlobalGraphSortItem const *)a; + GlobalGraphSortItem const *y = cast(GlobalGraphSortItem const *)b; + if (x->key != y->key) { + return x->key > y->key ? -1 : +1; + } + return i32_cmp(x->id, y->id); +} + +// Fills `comps` (indexed by component) and `order` (node indices grouped by component) +gb_internal void global_graph_condense(i32 node_count, Array const &offsets, Array const &targets, Array const &node_ticks, + Array const &comp_of, i32 comp_count, Array *comps_, Array *order_) { + Array &comps = *comps_; + Array &order = *order_; + for (i32 i = 0; i < comp_count; i++) { + comps[i] = {}; + comps[i].path_prev = -1; + } + for (i32 v = 0; v < node_count; v++) { + GlobalGraphComp *g = &comps[comp_of[v]]; + g->count += 1; + g->ticks += node_ticks[v]; + } + i32 start = 0; + for (i32 i = 0; i < comp_count; i++) { + comps[i].start = start; + start += comps[i].count; + comps[i].count = 0; + } + for (i32 v = 0; v < node_count; v++) { + GlobalGraphComp *g = &comps[comp_of[v]]; + order[g->start + g->count] = v; + g->count += 1; + } + + for (i32 ci = 0; ci < comp_count; ci++) { + GlobalGraphComp *g = &comps[ci]; + u64 best_ticks = 0; + i32 best_len = 0; + i32 best_prev = -1; + for (i32 k = 0; k < g->count; k++) { + i32 v = order[g->start + k]; + for (i32 e = offsets[v]; e < offsets[v+1]; e++) { + i32 w = targets[e]; + if (w == v) { + g->has_self_edge = true; + } + i32 cw = comp_of[w]; + if (cw == ci) { + continue; + } + GB_ASSERT(cw < ci); + GlobalGraphComp *d = &comps[cw]; + if (best_prev < 0 || d->path_ticks > best_ticks) { + best_ticks = d->path_ticks; + best_prev = cw; + } + best_len = gb_max(best_len, d->path_len); + } + } + g->path_ticks = g->ticks + best_ticks; + g->path_len = 1 + best_len; + g->path_prev = best_prev; + } +} + +gb_internal f64 global_graph_ms(u64 ticks, u64 freq) { + return 1000.0 * cast(f64)ticks / cast(f64)freq; +} + +gb_internal void global_graph_print_entity(Entity *e) { + String pkg = e->pkg ? e->pkg->name : str_lit("?"); + String file = e->file ? filename_without_directory(e->file->fullpath) : str_lit("?"); + gb_printf_err("%.*s.%.*s (%.*s:%d)", LIT(pkg), LIT(e->token.string), LIT(file), e->token.pos.line); +} + +gb_internal void global_graph_print_comp(Array const &nodes, Array const &order, GlobalGraphComp const *g, u64 ticks, u64 freq, isize max_names) { + gb_printf_err(" %10.3f ms %7d entities ", global_graph_ms(ticks, freq), g->count); + for (i32 k = 0; k < g->count && k < max_names; k++) { + if (k > 0) { + gb_printf_err(", "); + } + global_graph_print_entity(nodes[order[g->start + k]]); + } + if (g->count > max_names) { + gb_printf_err(", ..."); + } + gb_printf_err("\n"); +} + +gb_internal void print_global_entity_graph(Checker *c) { + u64 const freq = time_stamp__freq(); + + // Nodes + auto nodes = array_make(heap_allocator(), 0, c->info.entities.count); + defer (array_free(&nodes)); + PtrMap node_index = {}; + map_init(&node_index, c->info.entities.count); + defer (map_destroy(&node_index)); + + for (Entity *e : c->info.entities) { + if (e->decl_info == nullptr || e->scope == nullptr || (e->scope->flags & ScopeFlag_File) == 0) { + continue; + } + if (map_get(&node_index, e) != nullptr) { + continue; + } + map_set(&node_index, e, cast(i32)nodes.count); + array_add(&nodes, e); + } + i32 node_count = cast(i32)nodes.count; + + // Edges, from what each declaration actually used while being checked + auto offsets = array_make(heap_allocator(), node_count+1); + auto targets = array_make(heap_allocator(), 0, node_count*4); + defer (array_free(&offsets)); + defer (array_free(&targets)); + isize self_edges = 0; + for (i32 v = 0; v < node_count; v++) { + offsets[v] = cast(i32)targets.count; + DeclInfo *d = nodes[v]->decl_info; + FOR_PTR_SET(dep, d->deps) { + i32 *w = map_get(&node_index, dep); + if (w != nullptr) { + array_add(&targets, *w); + self_edges += *w == v; + } + } + } + offsets[node_count] = cast(i32)targets.count; + + // Weights + auto node_ticks = array_make(heap_allocator(), node_count); + defer (array_free(&node_ticks)); + u64 total_ticks = 0; + u64 when_ticks = 0; + isize untimed = 0; + mutex_lock(&global_entity_time_mutex); + for (i32 v = 0; v < node_count; v++) { + GlobalEntityTime *t = map_get(&global_entity_times, nodes[v]); + node_ticks[v] = t ? t->ticks : 0; + total_ticks += node_ticks[v]; + if (t == nullptr) { + untimed += 1; + } else if (!t->in_global_loop) { + when_ticks += t->ticks; + } + } + mutex_unlock(&global_entity_time_mutex); + + // Entity groups + auto comp_of = array_make(heap_allocator(), node_count); + defer (array_free(&comp_of)); + i32 comp_count = global_graph_scc(node_count, offsets, targets, &comp_of); + + auto comps = array_make(heap_allocator(), comp_count); + auto order = array_make(heap_allocator(), node_count); + defer (array_free(&comps)); + defer (array_free(&order)); + global_graph_condense(node_count, offsets, targets, node_ticks, comp_of, comp_count, &comps, &order); + + i32 critical = -1; + i32 largest = -1; + isize cyclic_comps = 0; + for (i32 ci = 0; ci < comp_count; ci++) { + GlobalGraphComp *g = &comps[ci]; + if (critical < 0 || g->path_ticks > comps[critical].path_ticks) { + critical = ci; + } + if (largest < 0 || g->count > comps[largest].count) { + largest = ci; + } + cyclic_comps += g->count > 1 || g->has_self_edge; + } + + // Packages, weighted by the entities they own + PtrMap pkg_index = {}; + map_init(&pkg_index, c->info.packages.count); + defer (map_destroy(&pkg_index)); + auto pkgs = array_make(heap_allocator(), 0, c->info.packages.count); + defer (array_free(&pkgs)); + auto node_pkg = array_make(heap_allocator(), node_count); + defer (array_free(&node_pkg)); + for (i32 v = 0; v < node_count; v++) { + AstPackage *p = nodes[v]->pkg; + i32 *found = map_get(&pkg_index, p); + if (found == nullptr) { + map_set(&pkg_index, p, cast(i32)pkgs.count); + node_pkg[v] = cast(i32)pkgs.count; + array_add(&pkgs, p); + } else { + node_pkg[v] = *found; + } + } + i32 pkg_count = cast(i32)pkgs.count; + + auto pkg_ticks = array_make(heap_allocator(), pkg_count); + auto pkg_entities = array_make(heap_allocator(), pkg_count); + defer (array_free(&pkg_ticks)); + defer (array_free(&pkg_entities)); + for (i32 p = 0; p < pkg_count; p++) { + pkg_ticks[p] = 0; + pkg_entities[p] = 0; + } + for (i32 v = 0; v < node_count; v++) { + pkg_ticks[node_pkg[v]] += node_ticks[v]; + pkg_entities[node_pkg[v]] += 1; + } + + auto pkg_offsets = array_make(heap_allocator(), pkg_count+1); + auto pkg_targets = array_make(heap_allocator(), 0, pkg_count*4); + defer (array_free(&pkg_offsets)); + defer (array_free(&pkg_targets)); + { + auto pkg_edges = array_make>(heap_allocator(), pkg_count); + PtrMap seen = {}; + map_init(&seen); + for (i32 p = 0; p < pkg_count; p++) { + pkg_edges[p] = array_make(heap_allocator()); + } + for (i32 v = 0; v < node_count; v++) { + for (i32 e = offsets[v]; e < offsets[v+1]; e++) { + i32 pv = node_pkg[v]; + i32 pw = node_pkg[targets[e]]; + if (pv == pw) { + continue; + } + u64 key = (cast(u64)(pv+1) << 32) | cast(u64)(pw+1); + if (map_get(&seen, key) == nullptr) { + map_set(&seen, key, true); + array_add(&pkg_edges[pv], pw); + } + } + } + for (i32 p = 0; p < pkg_count; p++) { + pkg_offsets[p] = cast(i32)pkg_targets.count; + for (i32 w : pkg_edges[p]) { + array_add(&pkg_targets, w); + } + array_free(&pkg_edges[p]); + } + pkg_offsets[pkg_count] = cast(i32)pkg_targets.count; + array_free(&pkg_edges); + map_destroy(&seen); + } + + auto pkg_comp_of = array_make(heap_allocator(), pkg_count); + defer (array_free(&pkg_comp_of)); + i32 pkg_comp_count = global_graph_scc(pkg_count, pkg_offsets, pkg_targets, &pkg_comp_of); + auto pkg_comps = array_make(heap_allocator(), pkg_comp_count); + auto pkg_order = array_make(heap_allocator(), pkg_count); + defer (array_free(&pkg_comps)); + defer (array_free(&pkg_order)); + global_graph_condense(pkg_count, pkg_offsets, pkg_targets, pkg_ticks, pkg_comp_of, pkg_comp_count, &pkg_comps, &pkg_order); + u64 pkg_critical_ticks = 0; + isize pkg_cyclic = 0; + for (i32 ci = 0; ci < pkg_comp_count; ci++) { + pkg_critical_ticks = gb_max(pkg_critical_ticks, pkg_comps[ci].path_ticks); + pkg_cyclic += pkg_comps[ci].count > 1; + } + + // Report + f64 total_ms = global_graph_ms(total_ticks, freq); + f64 critical_ms = critical >= 0 ? global_graph_ms(comps[critical].path_ticks, freq) : 0; + f64 pkg_critical_ms = global_graph_ms(pkg_critical_ticks, freq); + + gb_printf_err("Global entity graph\n"); + gb_printf_err(" entities: %td (%td not timed), dependency edges: %td (%td self edges)\n", nodes.count, untimed, targets.count, self_edges); + gb_printf_err(" self time: %.3f ms total; %.3f ms during 'when' resolution, %.3f ms in the global loop\n", + total_ms, global_graph_ms(when_ticks, freq), global_graph_ms(total_ticks - when_ticks, freq)); + gb_printf_err(" groups: %d (%td with a cycle), largest has %d entities\n", + comp_count, cyclic_comps, largest >= 0 ? comps[largest].count : 0); + gb_printf_err(" critical path (entity groups): %.3f ms over %d groups -> at most %.2fx speedup\n", + critical_ms, critical >= 0 ? comps[critical].path_len : 0, critical_ms > 0 ? total_ms/critical_ms : 0.0); + gb_printf_err(" critical path (packages): %.3f ms -> at most %.2fx speedup (%d packages, %td package cycles)\n", + pkg_critical_ms, pkg_critical_ms > 0 ? total_ms/pkg_critical_ms : 0.0, pkg_count, pkg_cyclic); + + gb_printf_err(" check_import_entities (sequential, includes entity checks it triggers):\n"); + for (isize i = 0; i < GlobalImportStage_COUNT; i++) { + gb_printf_err(" %10.3f ms %s\n", global_graph_ms(global_import_stage_ticks[i], freq), global_import_stage_names[i]); + } + + { + i32 const BUCKET_COUNT = 10; + i32 const bucket_max[BUCKET_COUNT] = {1, 2, 4, 8, 16, 64, 256, 1024, 4096, 0x7fffffff}; + char const *bucket_name[BUCKET_COUNT] = {"1", "2", "3-4", "5-8", "9-16", "17-64", "65-256", "257-1024", "1025-4096", ">4096"}; + isize bucket_groups[BUCKET_COUNT] = {}; + isize bucket_entities[BUCKET_COUNT] = {}; + u64 bucket_ticks[BUCKET_COUNT] = {}; + for (i32 ci = 0; ci < comp_count; ci++) { + GlobalGraphComp *g = &comps[ci]; + for (i32 b = 0; b < BUCKET_COUNT; b++) { + if (g->count <= bucket_max[b]) { + bucket_groups[b] += 1; + bucket_entities[b] += g->count; + bucket_ticks[b] += g->ticks; + break; + } + } + } + gb_printf_err(" group sizes:\n"); + gb_printf_err(" %10s %9s %10s %12s\n", "size", "groups", "entities", "self time"); + for (i32 b = 0; b < BUCKET_COUNT; b++) { + if (bucket_groups[b] == 0) { + continue; + } + gb_printf_err(" %10s %9td %10td %9.3f ms\n", bucket_name[b], bucket_groups[b], bucket_entities[b], global_graph_ms(bucket_ticks[b], freq)); + } + } + + auto items = array_make(heap_allocator(), 0, gb_max(comp_count, pkg_count)); + defer (array_free(&items)); + + isize const TOP = 10; + isize const MAX_NAMES = 4; + + array_clear(&items); + for (i32 ci = 0; ci < comp_count; ci++) { + array_add(&items, GlobalGraphSortItem{comps[ci].ticks, ci}); + } + array_sort(items, global_graph_sort_item_desc); + gb_printf_err(" slowest groups:\n"); + for (isize i = 0; i < items.count && i < TOP; i++) { + GlobalGraphComp *g = &comps[items[i].id]; + global_graph_print_comp(nodes, order, g, g->ticks, freq, MAX_NAMES); + } + + array_clear(&items); + for (i32 ci = 0; ci < comp_count; ci++) { + if (comps[ci].count > 1) { + array_add(&items, GlobalGraphSortItem{cast(u64)comps[ci].count, ci}); + } + } + array_sort(items, global_graph_sort_item_desc); + gb_printf_err(" largest groups:\n"); + for (isize i = 0; i < items.count && i < TOP; i++) { + GlobalGraphComp *g = &comps[items[i].id]; + global_graph_print_comp(nodes, order, g, g->ticks, freq, MAX_NAMES); + } + + gb_printf_err(" critical path, last group first:\n"); + { + isize printed = 0; + for (i32 ci = critical; ci >= 0; ci = comps[ci].path_prev) { + if (printed == 30) { + gb_printf_err(" ... %d more groups\n", comps[ci].path_len); + break; + } + global_graph_print_comp(nodes, order, &comps[ci], comps[ci].ticks, freq, 2); + printed += 1; + } + } + + array_clear(&items); + for (i32 p = 0; p < pkg_count; p++) { + array_add(&items, GlobalGraphSortItem{pkg_ticks[p], p}); + } + array_sort(items, global_graph_sort_item_desc); + gb_printf_err(" slowest packages:\n"); + for (isize i = 0; i < items.count && i < TOP; i++) { + i32 p = items[i].id; + AstPackage *pkg = pkgs[p]; + String name = pkg ? pkg->name : str_lit("?"); + gb_printf_err(" %10.3f ms %7d entities %.*s\n", global_graph_ms(pkg_ticks[p], freq), pkg_entities[p], LIT(name)); + } +} From 38fa57e9072b91a94adff585cf304675ab33f1e9 Mon Sep 17 00:00:00 2001 From: gingerBill Date: Thu, 1 Oct 2026 15:01:14 +0100 Subject: [PATCH 117/215] Make global checking and codegen order-independent --- src/build_settings.cpp | 1 + src/check_decl.cpp | 3 + src/check_expr.cpp | 76 +++++++++- src/checker.cpp | 263 +++++++++++++++-------------------- src/checker.hpp | 2 + src/llvm_backend.cpp | 7 +- src/llvm_backend_const.cpp | 28 ++-- src/llvm_backend_general.cpp | 22 ++- src/llvm_backend_proc.cpp | 13 +- src/llvm_backend_stmt.cpp | 30 +++- src/main.cpp | 8 +- 11 files changed, 275 insertions(+), 178 deletions(-) diff --git a/src/build_settings.cpp b/src/build_settings.cpp index f6ebd5755..041622a30 100644 --- a/src/build_settings.cpp +++ b/src/build_settings.cpp @@ -599,6 +599,7 @@ struct BuildContext { bool internal_ignore_llvm_verification; bool internal_llvm_no_sroa; bool internal_global_entity_graph; + u64 internal_shuffle_global_entities; // seed, 0 = no shuffle bool enable_rvo; diff --git a/src/check_decl.cpp b/src/check_decl.cpp index 48865d890..472daaf6f 100644 --- a/src/check_decl.cpp +++ b/src/check_decl.cpp @@ -996,6 +996,9 @@ gb_internal Entity *init_entity_foreign_library(CheckerContext *ctx, Entity *e) } else { String name = ident->Ident.token.string; Entity *found = scope_lookup(ctx->scope, ident->Ident.interned, ident->Ident.hash); + if (found != nullptr) { + found = resolve_alias_entity(ctx, found, nullptr); + } if (found == nullptr) { if (is_blank_ident(name)) { diff --git a/src/check_expr.cpp b/src/check_expr.cpp index 98c3e7051..2985c8c67 100644 --- a/src/check_expr.cpp +++ b/src/check_expr.cpp @@ -1592,6 +1592,45 @@ gb_internal CIdentSuggestion const c_ident_suggestions[] = { {str_lit("float64_t"), str_lit("'f64'?")}, }; +gb_internal Entity *resolve_alias_entity(CheckerContext *c, Entity *e, Type *named_type) { + if (e->kind == Entity_Constant && e->state == EntityState_Unresolved) { + check_entity_decl(c, e, nullptr, named_type); + } + while ((e->flags & EntityFlag_Overridden) && e->aliased_of != nullptr) { + e = e->aliased_of; + } + return e; +} + +gb_thread_local Array in_progress_alias_expansions; + +gb_internal Type *check_in_progress_type_alias(CheckerContext *c, Entity *e) { + for (Entity *other : in_progress_alias_expansions) { + if (other == e) { + // NOTE(bill): an alias-only cycle, which it is to be left to the usual error + return nullptr; + } + } + DeclInfo *d = decl_info_of_entity(e); + if (d == nullptr || d->init_expr == nullptr) { + return nullptr; + } + + CheckerContext nc = *c; + nc.scope = d->scope; + nc.decl = d; + nc.type_level = 0; + nc.curr_proc_calling_convention = ProcCC_Contextless; + + if (in_progress_alias_expansions.allocator.proc == nullptr) { + in_progress_alias_expansions = array_make(heap_allocator()); + } + array_add(&in_progress_alias_expansions, e); + Type *t = check_type(&nc, remove_type_alias_clutter(d->init_expr)); + array_pop(&in_progress_alias_expansions); + return t; +} + gb_internal Entity *check_ident(CheckerContext *c, Operand *o, Ast *n, Type *named_type, Type *type_hint, bool allow_import_name) { GB_ASSERT(n->kind == Ast_Ident); o->mode = Addressing_Invalid; @@ -1637,6 +1676,8 @@ gb_internal Entity *check_ident(CheckerContext *c, Operand *o, Ast *n, Type *nam } } + e = resolve_alias_entity(c, e, named_type); + if (e->kind == Entity_ProcGroup) { auto *pge = &e->ProcGroup; @@ -1760,6 +1801,9 @@ gb_internal Entity *check_ident(CheckerContext *c, Operand *o, Ast *n, Type *nam } if (o->type != nullptr && o->type->kind == Type_Named && o->type->Named.type_name->TypeName.is_type_alias) { Type *bt = base_type(o->type); + if (bt == nullptr && e->state == EntityState_InProgress) { + bt = check_in_progress_type_alias(c, e); + } // Keep struct aliases named so recursive fields retain their alias edge. if (bt != nullptr && bt->kind != Type_Struct) { o->type = bt; @@ -5754,6 +5798,7 @@ gb_internal Entity *check_entity_from_ident_or_selector(CheckerContext *c, Ast * return nullptr; } + entity = resolve_alias_entity(c, entity, nullptr); check_entity_decl(c, entity, nullptr, nullptr); if (entity->kind == Entity_ProcGroup) { return entity; @@ -5884,6 +5929,7 @@ gb_internal Entity *check_selector(CheckerContext *c, Operand *operand, Ast *nod // return nullptr; } + entity = resolve_alias_entity(c, entity, nullptr); check_entity_decl(c, entity, nullptr, nullptr); if (entity->kind == Entity_ProcGroup) { operand->mode = Addressing_ProcGroup; @@ -8486,11 +8532,14 @@ gb_internal CallArgumentError check_polymorphic_record_type(CheckerContext *c, O // NOTE(bill, 2019-10-26): Allow a cycle in the parameters but not in the fields themselves auto prev_type_path = c->type_path; + bool prev_allow_in_progress = c->allow_in_progress_type_operand; c->type_path = new_checker_type_path(); + c->allow_in_progress_type_operand = true; defer ({ destroy_checker_type_path(c->type_path); c->type_path = prev_type_path; + c->allow_in_progress_type_operand = prev_allow_in_progress; }); TEMPORARY_ALLOCATOR_GUARD(); @@ -9014,6 +9063,11 @@ gb_internal void check_objc_call_expr(CheckerContext *c, Operand *operand, Ast * } gb_internal ExprKind check_call_expr(CheckerContext *c, Operand *operand, Ast *call, Ast *proc, Slice const &args, ProcInlining inlining, ProcTailing tailing, Type *type_hint) { + // NOTE(bill): only the direct arguments of a polymorphic record call may name a type still being checked + bool prev_allow_in_progress = c->allow_in_progress_type_operand; + c->allow_in_progress_type_operand = false; + defer (c->allow_in_progress_type_operand = prev_allow_in_progress); + if (proc != nullptr && proc->kind == Ast_BasicDirective) { ast_node(bd, BasicDirective, proc); @@ -13100,9 +13154,21 @@ gb_internal ExprKind check_expr_base_internal(CheckerContext *c, Operand *o, Ast +gb_internal bool is_in_progress_type_operand(CheckerContext *c, Operand *o, Ast *node) { + if (!c->allow_in_progress_type_operand || o->mode != Addressing_Type || o->type->kind != Type_Named) { + return false; + } + node = unparen_expr(node); + if (node == nullptr || (node->kind != Ast_Ident && node->kind != Ast_SelectorExpr)) { + return false; + } + Entity *e = o->type->Named.type_name; + return e != nullptr && e->state == EntityState_InProgress; +} + gb_internal ExprKind check_expr_base(CheckerContext *c, Operand *o, Ast *node, Type *type_hint) { ExprKind kind = check_expr_base_internal(c, o, node, type_hint); - if (o->type != nullptr && core_type(o->type) == nullptr) { + if (o->type != nullptr && core_type(o->type) == nullptr && !is_in_progress_type_operand(c, o, node)) { o->type = t_invalid; gbString xs = expr_to_string(o->expr); if (o->mode == Addressing_Type) { @@ -13490,9 +13556,13 @@ gb_internal gbString write_expr_to_string(gbString str, Ast *node, bool shorthan // NOTE(tf2spi): // Two proc literals with the same signature output the same expr above // which poses challenges for name canonicalization. Include the below - // discriminator with the file ID and offset to help with this. + // discriminator with the file and offset to help with this. + // NOTE: the file by package and name, not its ID, as IDs follow the order files were parsed in TokenPos pos = ast_token(node).pos; - str = gb_string_append_fmt(str, " /* %d!%d */", pos.file_id, pos.offset); + AstFile *pl_file = node->file(); + String pl_pkg = (pl_file && pl_file->pkg) ? pl_file->pkg->name : String{}; + String pl_name = pl_file ? filename_without_directory(pl_file->fullpath) : String{}; + str = gb_string_append_fmt(str, " /* %.*s:%.*s!%d */", LIT(pl_pkg), LIT(pl_name), pos.offset); case_end; case_ast_node(cl, CompoundLit, node); diff --git a/src/checker.cpp b/src/checker.cpp index 3cb10f95b..36d294352 100644 --- a/src/checker.cpp +++ b/src/checker.cpp @@ -82,18 +82,45 @@ gb_internal void entity_graph_node_destroy(EntityGraphNode *n, gbAllocator a) { } +gb_internal int entity_source_order_cmp(Entity *x, Entity *y) { + if (x == y) { + return 0; + } + int cmp = 0; + if (x->pkg != y->pkg) { + isize order_x = x->pkg ? x->pkg->order : 0; + isize order_y = y->pkg ? y->pkg->order : 0; + cmp = isize_cmp(order_x, order_y); + if (cmp) { + return cmp; + } + } + if (x->file != y->file) { + String fullpath_x = x->file ? x->file->fullpath : (String{}); + String fullpath_y = y->file ? y->file->fullpath : (String{}); + String file_x = filename_from_path(fullpath_x); + String file_y = filename_from_path(fullpath_y); + + cmp = string_compare(file_x, file_y); + if (cmp) { + return cmp; + } + } + + cmp = u64_cmp(x->order_in_src, y->order_in_src); + if (cmp) { + return cmp; + } + return i32_cmp(x->token.pos.offset, y->token.pos.offset); +} + gb_internal int entity_graph_node_cmp(EntityGraphNode **data, isize i, isize j) { EntityGraphNode *x = data[i]; EntityGraphNode *y = data[j]; - u64 a = x->entity->order_in_src; - u64 b = y->entity->order_in_src; - if (x->dep_count < y->dep_count) { - return -1; + if (x->dep_count != y->dep_count) { + return x->dep_count < y->dep_count ? -1 : +1; } - if (x->dep_count == y->dep_count) { - return a < b ? -1 : b > a; - } - return +1; + return entity_source_order_cmp(x->entity, y->entity); } gb_internal void entity_graph_node_swap(EntityGraphNode **data, isize i, isize j) { @@ -147,10 +174,10 @@ gb_internal int import_graph_node_cmp(ImportGraphNode **data, isize i, isize j) bool xg = (x->scope->flags&ScopeFlag_Global) != 0; bool yg = (y->scope->flags&ScopeFlag_Global) != 0; if (xg != yg) return xg ? -1 : +1; - if (xg && yg) return x->pkg->id < y->pkg->id ? +1 : -1; if (x->dep_count < y->dep_count) return -1; if (x->dep_count > y->dep_count) return +1; - return 0; + // NOTE: a total order, so the package order does not depend on parsing or hashing order + return string_compare(x->pkg->fullpath, y->pkg->fullpath); } gb_internal void import_graph_node_swap(ImportGraphNode **data, isize i, isize j) { @@ -360,8 +387,9 @@ gb_internal void check_open_scope(CheckerContext *c, Ast *node) { break; } if (c->decl && c->decl->proc_lit) { - // Number the scopes within a procedure body depth-first - scope->index = c->decl->scope_index++; + // NOTE: numbered by position rather than in checking order, as that order varies (e.g. with + // which caller instantiates a record first); 0 is the procedure's own scope + scope->index = node->kind == Ast_ProcType ? 0 : 1 + ast_token(node).pos.offset; } c->scope = scope; c->state_flags |= StateFlag_bounds_check; @@ -3246,43 +3274,44 @@ gb_internal gb_inline bool is_entity_a_dependency(Entity *e) { } gb_internal Array generate_entity_dependency_graph(CheckerInfo *info, Arena *arena) { - PtrMap M_procs = {}; - PtrMap M_vars = {}; - PtrMap M_other = {}; - - map_init(&M_procs, info->entities.count); - defer (map_destroy(&M_procs)); - + PtrMap M_vars = {}; map_init(&M_vars, info->entities.count); defer (map_destroy(&M_vars)); - map_init(&M_other, info->entities.count); - defer (map_destroy(&M_other)); - - for_array(i, info->entities) { - Entity *e = info->entities[i]; - if (e == nullptr || !is_entity_a_dependency(e)) { + auto G = array_make(arena_allocator(arena), 0, info->entities.count); + for (Entity *e : info->entities) { + if (e == nullptr || e->kind != Entity_Variable || !is_entity_a_dependency(e)) { continue; } EntityGraphNode *n = arena_alloc_item(arena); n->entity = e; - switch (e->kind) { - case Entity_Procedure: map_set(&M_procs, e, n); break; - case Entity_Variable: map_set(&M_vars, e, n); break; - default: map_set(&M_other, e, n); break; - } + map_set(&M_vars, e, n); + array_add(&G, n); } - TIME_SECTION("generate_entity_dependency_graph: Calculate edges for graph M - Part 1"); - // Calculate edges for graph M - for (auto const &entry : M_procs) { - EntityGraphNode *n = entry.value; - Entity *e = n->entity; + TIME_SECTION("generate_entity_dependency_graph: Calculate edges"); - DeclInfo *decl = decl_info_of_entity(e); - GB_ASSERT(decl != nullptr); + // NOTE(bill): A variable depends on every variable reachable from its declaration through procedures and constants, + // as its initializer may read any of them. Variables are not walked through, as they are ordered by their own edges. + PtrSet visited = {}; + defer (ptr_set_destroy(&visited)); + auto stack = array_make(heap_allocator(), 0, 64); + defer (array_free(&stack)); + for (EntityGraphNode *n : G) { + ptr_set_clear(&visited); + array_clear(&stack); + + DeclInfo *decl = decl_info_of_entity(n->entity); + if (decl == nullptr) { + continue; + } FOR_PTR_SET(dep, decl->deps) { + array_add(&stack, dep); + } + + while (stack.count > 0) { + Entity *dep = array_pop(&stack); GB_ASSERT(dep != nullptr); if (dep->flags & EntityFlag_Field) { continue; @@ -3290,67 +3319,26 @@ gb_internal Array generate_entity_dependency_graph(CheckerInf if (!is_entity_a_dependency(dep)) { continue; } - EntityGraphNode *m = nullptr; - - switch (dep->kind) { - case Entity_Procedure: m = map_must_get(&M_procs, dep); break; - case Entity_Variable: m = map_must_get(&M_vars, dep); break; - default: m = map_must_get(&M_other, dep); break; - } - entity_graph_node_set_add(&n->succ, m); - entity_graph_node_set_add(&m->pred, n); - } - } - - TIME_SECTION("generate_entity_dependency_graph: Calculate edges for graph M - Part 2a (init)"); - - auto G = array_make(arena_allocator(arena), 0, M_procs.count + M_vars.count + M_other.count); - - TIME_SECTION("generate_entity_dependency_graph: Calculate edges for graph M - Part 2b (procs)"); - - for (auto const &m_entry : M_procs) { - EntityGraphNode *n = m_entry.value; - - // Connect each pred 'p' of 'n' with each succ 's' and from - // the procedure node - FOR_PTR_SET(p, n->pred) { - // Ignore self-cycles - if (p == n) { + if (dep->kind == Entity_Variable) { + EntityGraphNode **m = map_get(&M_vars, dep); + if (m != nullptr) { + entity_graph_node_set_add(&n->succ, *m); + entity_graph_node_set_add(&(*m)->pred, n); + } continue; } - // Each succ 's' of 'n' becomes a succ of 'p', and - // each pred 'p' of 'n' becomes a pred of 's' - FOR_PTR_SET(s, n->succ) { - // Ignore self-cycles - if (s == n) { - continue; - } - if (p->entity->kind == Entity_Procedure && - s->entity->kind == Entity_Procedure) { - // NOTE(bill, 2020-11-15): Only care about variable initialization ordering - // TODO(bill): This is probably wrong!!!! - continue; - } - // IMPORTANT NOTE/TODO(bill, 2020-11-15): These three calls take the majority of the - // the time to process - entity_graph_node_set_add(&p->succ, s); - entity_graph_node_set_add(&s->pred, p); - // Remove edge to 'n' - entity_graph_node_set_remove(&s->pred, n); + if (ptr_set_update(&visited, dep)) { + continue; + } + DeclInfo *dep_decl = decl_info_of_entity(dep); + if (dep_decl != nullptr) { + FOR_PTR_SET(next, dep_decl->deps) { + array_add(&stack, next); + } } - - // Remove edge to 'n' - entity_graph_node_set_remove(&p->succ, n); } } - TIME_SECTION("generate_entity_dependency_graph: Calculate edges for graph M - Part 2c (vars)"); - - for (auto const &m_entry : M_vars) { - EntityGraphNode *n = m_entry.value; - array_add(&G, n); - } - TIME_SECTION("generate_entity_dependency_graph: Dependency Count Checker"); for_array(i, G) { EntityGraphNode *n = G[i]; @@ -3359,28 +3347,6 @@ gb_internal Array generate_entity_dependency_graph(CheckerInf GB_ASSERT(n->dep_count >= 0); } - // f64 succ_count = 0.0; - // f64 pred_count = 0.0; - // f64 succ_capacity = 0.0; - // f64 pred_capacity = 0.0; - // f64 succ_max = 0.0; - // f64 pred_max = 0.0; - // for_array(i, G) { - // EntityGraphNode *n = G[i]; - // succ_count += n->succ.entries.count; - // pred_count += n->pred.entries.count; - // succ_capacity += n->succ.entries.capacity; - // pred_capacity += n->pred.entries.capacity; - - // succ_max = gb_max(succ_max, n->succ.entries.capacity); - // pred_max = gb_max(pred_max, n->pred.entries.capacity); - - // } - // f64 count = cast(f64)G.count; - // gb_printf_err(">>>count pred: %f succ: %f\n", pred_count/count, succ_count/count); - // gb_printf_err(">>>capacity pred: %f succ: %f\n", pred_capacity/count, succ_capacity/count); - // gb_printf_err(">>>max pred: %f succ: %f\n", pred_max, succ_max); - return G; } @@ -5342,14 +5308,15 @@ gb_internal CheckerContext *create_checker_context(Checker *c) { gb_internal void check_single_global_entity(Checker *c, Entity *e, DeclInfo *d) { GB_ASSERT(e != nullptr); + if (e->state == EntityState_Resolved) { + // NOTE: also an alias already overridden by what it aliases, which may have no `DeclInfo` + return; + } GB_ASSERT(d != nullptr); if (d->scope != e->scope) { return; } - if (e->state == EntityState_Resolved) { - return; - } CheckerContext *ctx = create_checker_context(c); @@ -5373,13 +5340,32 @@ gb_internal void check_single_global_entity(Checker *c, Entity *e, DeclInfo *d) check_entity_decl(ctx, e, d, nullptr); } +// for `-internal-shuffle-global-entities` +// visit globals in a seeded random order, so that any result depending on the visiting order shows up without needing threads +gb_internal void shuffle_global_entities(Array *entities, u64 seed) { + if (seed == 0) { + return; + } + u64 state = seed; + for (isize i = entities->count-1; i > 0; i--) { + state = state*6364136223846793005ull + 1442695040888963407ull; + isize j = cast(isize)((state >> 33) % cast(u64)(i+1)); + Entity *tmp = (*entities)[i]; + (*entities)[i] = (*entities)[j]; + (*entities)[j] = tmp; + } +} + gb_internal void check_all_global_entities(Checker *c) { in_single_threaded_checker_stage.store(true, std::memory_order_relaxed); + auto order = array_clone(heap_allocator(), c->info.entities); + defer (array_free(&order)); + shuffle_global_entities(&order, build_context.internal_shuffle_global_entities); + // NOTE(bill): This must be single threaded // Don't bother trying - for_array(i, c->info.entities) { - Entity *e = c->info.entities[i]; + for (Entity *e : order) { GB_ASSERT(e != nullptr); if (e->flags & EntityFlag_Lazy) { continue; @@ -7537,40 +7523,7 @@ gb_internal void check_merge_queues_into_arrays(Checker *c) { } gb_internal GB_COMPARE_PROC(init_procedures_cmp) { - int cmp = 0; - Entity *x = *(Entity **)a; - Entity *y = *(Entity **)b; - if (x == y) { - cmp = 0; - return cmp; - } - - if (x->pkg != y->pkg) { - isize order_x = x->pkg ? x->pkg->order : 0; - isize order_y = y->pkg ? y->pkg->order : 0; - cmp = isize_cmp(order_x, order_y); - if (cmp) { - return cmp; - } - } - if (x->file != y->file) { - String fullpath_x = x->file ? x->file->fullpath : (String{}); - String fullpath_y = y->file ? y->file->fullpath : (String{}); - String file_x = filename_from_path(fullpath_x); - String file_y = filename_from_path(fullpath_y); - - cmp = string_compare(file_x, file_y); - if (cmp) { - return cmp; - } - } - - - cmp = u64_cmp(x->order_in_src, y->order_in_src); - if (cmp) { - return cmp; - } - return i32_cmp(x->token.pos.offset, y->token.pos.offset); + return entity_source_order_cmp(*(Entity **)a, *(Entity **)b); } gb_internal GB_COMPARE_PROC(fini_procedures_cmp) { @@ -7777,6 +7730,10 @@ gb_internal void check_parsed_files(Checker *c) { TIME_SECTION("add entities from packages"); check_merge_queues_into_arrays(c); + TIME_SECTION("sort global entities"); + // NOTE: the queues are filled by parallel workers, so their order differs between runs + array_sort(c->info.entities, init_procedures_cmp); + TIME_SECTION("check all global entities"); check_all_global_entities(c); diff --git a/src/checker.hpp b/src/checker.hpp index c382d28fe..e51b48da3 100644 --- a/src/checker.hpp +++ b/src/checker.hpp @@ -846,6 +846,7 @@ struct CheckerContext { bool in_polymorphic_specialization; bool allow_arrow_right_selector_expr; bool allow_c_vararg_param; + bool allow_in_progress_type_operand; // a bare type name may still be being checked (polymorphic record arguments) u8 bit_field_bit_size; Scope * polymorphic_scope; @@ -917,6 +918,7 @@ gb_internal void check_add_foreign_import_decl(CheckerContext *c, Ast *decl); gb_internal void check_entity_decl(CheckerContext *c, Entity *e, DeclInfo *d, Type *named_type); gb_internal void wait_for_lazy_entity(CheckerContext *c, Entity *e); +gb_internal Ast *remove_type_alias_clutter(Ast *node); gb_internal void check_const_decl(CheckerContext *c, Entity *e, Ast *type_expr, Ast *init_expr, Type *named_type); gb_internal void check_type_decl(CheckerContext *c, Entity *e, Ast *type_expr, Type *def); diff --git a/src/llvm_backend.cpp b/src/llvm_backend.cpp index 6ff3d182a..a0d87630c 100644 --- a/src/llvm_backend.cpp +++ b/src/llvm_backend.cpp @@ -2254,10 +2254,13 @@ gb_internal GB_COMPARE_PROC(llvm_global_entity_cmp) { i32 cmp = 0; cmp = token_pos_cmp(x->token.pos, y->token.pos); - if (!cmp) { + if (cmp) { return cmp; } - return cmp; + // NOTE(bill): polymorphic instances share their declaration's token, + // so order them by their type, otherwise their order (and every name numbered after them) + // follows the checking order + return lb_entity_type_cmp(x, y); } gb_internal void lb_create_global_procedures_and_types(lbGenerator *gen, CheckerInfo *info, bool do_threading) { diff --git a/src/llvm_backend_const.cpp b/src/llvm_backend_const.cpp index 49d59d62f..7a53e3fb1 100644 --- a/src/llvm_backend_const.cpp +++ b/src/llvm_backend_const.cpp @@ -427,25 +427,35 @@ gb_internal String lb_source_code_location_gen_name(lbProcedure *p, Ast *node) { -gb_internal lbValue lb_emit_source_code_location_as_global_ptr(lbProcedure *p, String const &procedure, TokenPos const &pos) { - lbValue loc = lb_emit_source_code_location_const(p, procedure, pos); - lbAddr addr = lb_add_global_generated_with_name(p->module, loc.type, loc, lb_source_code_location_gen_name(procedure, pos)); +gb_internal lbValue lb_source_code_location_global_ptr(lbModule *m, lbValue loc, String const &name) { + // NOTE(bill): every polymorphic instance of a procedure produces the same location under the same name. + // Reuse it rather than letting LLVM rename the duplicate, as which instance got the new name depended + // on the order the instances were generated in. + LLVMValueRef found = LLVMGetNamedGlobal(m->mod, alloc_cstring(temporary_allocator(), name)); + if (found != nullptr && LLVMGetInitializer(found) == loc.value) { + lbValue g = {}; + g.type = alloc_type_pointer(default_type(loc.type)); + g.value = LLVMConstPointerCast(found, lb_type(m, g.type)); + return g; + } + lbAddr addr = lb_add_global_generated_with_name(m, loc.type, loc, name); lb_make_global_private_const(addr); return addr.addr; } +gb_internal lbValue lb_emit_source_code_location_as_global_ptr(lbProcedure *p, String const &procedure, TokenPos const &pos) { + lbValue loc = lb_emit_source_code_location_const(p, procedure, pos); + return lb_source_code_location_global_ptr(p->module, loc, lb_source_code_location_gen_name(procedure, pos)); +} + gb_internal lbValue lb_const_source_code_location_as_global_ptr(lbModule *m, String const &procedure, TokenPos const &pos) { lbValue loc = lb_const_source_code_location_const(m, procedure, pos); - lbAddr addr = lb_add_global_generated_with_name(m, loc.type, loc, lb_source_code_location_gen_name(procedure, pos)); - lb_make_global_private_const(addr); - return addr.addr; + return lb_source_code_location_global_ptr(m, loc, lb_source_code_location_gen_name(procedure, pos)); } gb_internal lbValue lb_emit_source_code_location_as_global_ptr(lbProcedure *p, Ast *node) { lbValue loc = lb_emit_source_code_location_const(p, node); - lbAddr addr = lb_add_global_generated_with_name(p->module, loc.type, loc, lb_source_code_location_gen_name(p, node)); - lb_make_global_private_const(addr); - return addr.addr; + return lb_source_code_location_global_ptr(p->module, loc, lb_source_code_location_gen_name(p, node)); } diff --git a/src/llvm_backend_general.cpp b/src/llvm_backend_general.cpp index 9a45899d4..84e1c015d 100644 --- a/src/llvm_backend_general.cpp +++ b/src/llvm_backend_general.cpp @@ -3647,11 +3647,25 @@ gb_internal lbValue lb_generate_anonymous_proc_lit(lbModule *m, String const &pr TokenPos pos = ast_token(expr).pos; // NOTE(bill): Generate a new name - // parent$count - isize name_len = prefix_name.len + 6 + 11; + // parent$anon-pkg:file:offset + // NOTE(bill): named by position rather than a counter, as the order these are generated in varies + String prefix = prefix_name; + if (parent == nullptr) { + // NOTE(bill): a literal inside a polymorphic procedure exists once per instance at the same position, so name it after the enclosing procedure + for (DeclInfo *d = pl->decl->parent; d != nullptr; d = d->parent) { + Entity *pe = d->entity.load(); + if (pe != nullptr && pe->kind == Entity_Procedure) { + prefix = lb_get_entity_name(m, pe); + break; + } + } + } + AstFile *lit_file = expr->file(); + String lit_pkg = (lit_file && lit_file->pkg) ? lit_file->pkg->name : str_lit(""); + String lit_name = lit_file ? filename_without_directory(lit_file->fullpath) : str_lit(""); + isize name_len = prefix.len + lit_pkg.len + lit_name.len + 6 + 2 + 11 + 1; char *name_text = gb_alloc_array(permanent_allocator(), char, name_len); - static std::atomic name_id; - name_len = gb_snprintf(name_text, name_len, "%.*s$anon-%d", LIT(prefix_name), 1+name_id.fetch_add(1)); + name_len = gb_snprintf(name_text, name_len, "%.*s$anon-%.*s:%.*s:%d", LIT(prefix), LIT(lit_pkg), LIT(lit_name), pos.offset); String name = make_string((u8 *)name_text, name_len-1); Type *type = type_of_expr(expr); diff --git a/src/llvm_backend_proc.cpp b/src/llvm_backend_proc.cpp index 1d2cf6c7e..902a43e36 100644 --- a/src/llvm_backend_proc.cpp +++ b/src/llvm_backend_proc.cpp @@ -886,11 +886,18 @@ gb_internal void lb_build_nested_proc(lbProcedure *p, AstProcLit *pd, Entity *e) } - isize name_len = p->name.len + 1 + pd_name.len + 1 + 10 + 1; + isize name_len = p->name.len + 1 + pd_name.len + 1 + 10 + 1 + 16 + 1; char *name_text = gb_alloc_array(permanent_allocator(), char, name_len); - i32 guid = cast(i32)p->children.count; - name_len = gb_snprintf(name_text, name_len, "%.*s" ABI_PKG_NAME_SEPARATOR "%.*s-%d", LIT(p->name), LIT(pd_name), guid); + // NOTE(bill): named by declaration position (and type, for polymorphic instances, which share it) + // rather than by how many children were built before it, as that order varies + i32 guid = e->token.pos.offset; + if (e->decl_info != nullptr && e->decl_info->para_poly_original != nullptr) { + name_len = gb_snprintf(name_text, name_len, "%.*s" ABI_PKG_NAME_SEPARATOR "%.*s-%d-%llx", LIT(p->name), LIT(pd_name), guid, + cast(unsigned long long)type_hash_canonical_type(e->type)); + } else { + name_len = gb_snprintf(name_text, name_len, "%.*s" ABI_PKG_NAME_SEPARATOR "%.*s-%d", LIT(p->name), LIT(pd_name), guid); + } String name = make_string(cast(u8 *)name_text, name_len-1); e->Procedure.link_name = name; diff --git a/src/llvm_backend_stmt.cpp b/src/llvm_backend_stmt.cpp index cab4615af..e8a86ce8b 100644 --- a/src/llvm_backend_stmt.cpp +++ b/src/llvm_backend_stmt.cpp @@ -1,6 +1,26 @@ #define LB_ENABLE_BASIC_RVO true #define LB_ENABLE_ADVANCED_RVO build_context.enable_rvo +// NOTE(bill): Orders entities by their canonical type +gb_internal i32 lb_entity_type_cmp(Entity *x, Entity *y) { + if (x->type == y->type || x->type == nullptr || y->type == nullptr) { + return 0; + } + u64 hx = type_hash_canonical_type(x->type); + u64 hy = type_hash_canonical_type(y->type); + if (hx != hy) { + return hx < hy ? -1 : +1; + } + // NOTE(bill): Polymorphic instances share their declaration's token, so this is what tells them apart deterministically + TEMPORARY_ALLOCATOR_GUARD(); + return string_compare(type_to_canonical_string(temporary_allocator(), x->type), + type_to_canonical_string(temporary_allocator(), y->type)); +} + +gb_internal GB_COMPARE_PROC(lb_polymorphic_instance_cmp) { + return lb_entity_type_cmp(*cast(Entity **)a, *cast(Entity **)b); +} + gb_internal LLVMValueRef lb_coerce_fields_load(lbProcedure *p, lbValue x, lbArgType const *arg); // NOTE(bill): @RVO Check if a call expression returns by sret with a return type matching dst_type. @@ -180,14 +200,18 @@ gb_internal void lb_build_constant_value_decl(lbProcedure *p, AstValueDecl *vd) GenProcsData *gpd = e->Procedure.gen_procs; if (gpd) { rw_mutex_shared_lock(&gpd->mutex); - for (Entity *e : gpd->procs) { + // NOTE)bill):: build the instances by type, not in the order they were instantiated, which varies + TEMPORARY_ALLOCATOR_GUARD(); + auto procs = array_clone(temporary_allocator(), gpd->procs); + rw_mutex_shared_unlock(&gpd->mutex); + array_sort(procs, lb_polymorphic_instance_cmp); + for (Entity *e : procs) { if (e->min_dep_count.load(std::memory_order_relaxed) == 0) { continue; } DeclInfo *d = decl_info_of_entity(e); lb_build_nested_proc(p, &d->proc_lit->ProcLit, e); } - rw_mutex_shared_unlock(&gpd->mutex); } else { lb_build_nested_proc(p, pl, e); } @@ -2447,7 +2471,7 @@ gb_internal void lb_build_static_variables(lbProcedure *p, AstValueDecl *vd) { { gbString str = gb_string_make_length(permanent_allocator(), p->name.text, p->name.len); str = gb_string_appendc(str, "-"); - str = gb_string_append_fmt(str, ".%.*s-%llu", LIT(name), cast(long long)e->id); + str = gb_string_append_fmt(str, ".%.*s-%d", LIT(name), e->token.pos.offset); mangled_name.text = cast(u8 *)str; mangled_name.len = gb_string_length(str); } diff --git a/src/main.cpp b/src/main.cpp index ca56c40f8..6f0308cfb 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -533,6 +533,7 @@ enum BuildFlagKind { BuildFlag_InternalLLVMNoSROA, BuildFlag_InternalEnableRVO, BuildFlag_InternalGlobalEntityGraph, + BuildFlag_InternalShuffleGlobalEntities, BuildFlag_Sanitize, BuildFlag_LTO, @@ -795,6 +796,7 @@ gb_internal bool parse_build_flags(Array args) { add_flag(&build_flags, BuildFlag_InternalLLVMNoSROA, str_lit("internal-llvm-no-sroa"), BuildFlagParam_None, Command_all); add_flag(&build_flags, BuildFlag_InternalEnableRVO, str_lit("internal-enable-rvo"), BuildFlagParam_None, Command_all); add_flag(&build_flags, BuildFlag_InternalGlobalEntityGraph, str_lit("internal-global-entity-graph"), BuildFlagParam_None, Command__does_check); + add_flag(&build_flags, BuildFlag_InternalShuffleGlobalEntities, str_lit("internal-shuffle-global-entities"), BuildFlagParam_Integer, Command__does_check); add_flag(&build_flags, BuildFlag_Sanitize, str_lit("sanitize"), BuildFlagParam_String, Command__does_build, true); @@ -1846,6 +1848,10 @@ gb_internal bool parse_build_flags(Array args) { case BuildFlag_InternalGlobalEntityGraph: build_context.internal_global_entity_graph = true; break; + case BuildFlag_InternalShuffleGlobalEntities: + GB_ASSERT(value.kind == ExactValue_Integer); + build_context.internal_shuffle_global_entities = cast(u64)big_int_to_i64(&value.value_integer); + break; case BuildFlag_Sanitize: @@ -2542,7 +2548,7 @@ gb_internal void export_dependencies(Checker *c) { } array_add(&load_files, cache); } - array_sort(files, file_cache_sort_cmp); + array_sort(load_files, file_cache_sort_cmp); if (build_context.export_dependencies_format == DependenciesExportMake) { String exe_name = path_to_string(heap_allocator(), build_context.build_paths[BuildPath_Output]); From 8609eb3e4aec7ed4ea04bdcb8d370730469ee97f Mon Sep 17 00:00:00 2001 From: gingerBill Date: Thu, 1 Oct 2026 15:17:16 +0100 Subject: [PATCH 118/215] Fix #7693 muted error follow-up lines; Fix distinct records against `$T/Record` constraints --- src/check_type.cpp | 5 +++++ src/error.cpp | 11 +++++++++++ 2 files changed, 16 insertions(+) diff --git a/src/check_type.cpp b/src/check_type.cpp index 2a955b189..61f5a7b3a 100644 --- a/src/check_type.cpp +++ b/src/check_type.cpp @@ -1865,6 +1865,11 @@ gb_internal SubstResult subst_unify_constraint(CheckerContext *c, Type *spec, Ty if (is_type_untyped(tb)) { r = subst_unify(c, spec, default_type(source), subst); } else if (sb->kind == Type_Struct || sb->kind == Type_Union) { + if (tb == sb && + ((tb->kind == Type_Struct && tb->Struct.polymorphic_parent == nullptr) || + (tb->kind == Type_Union && tb->Union.polymorphic_parent == nullptr))) { + return Subst_Matched; + } r = subst_unify(c, spec, source, subst); // record conformance keeps the Named types (match params) } else { r = subst_unify(c, sb, tb, subst); // general: base-typed structural match diff --git a/src/error.cpp b/src/error.cpp index 77fef3cea..5879fbeec 100644 --- a/src/error.cpp +++ b/src/error.cpp @@ -251,6 +251,10 @@ gb_internal void print_all_errors(void); typedef ERROR_OUT_PROC(ErrorOutProc); gb_internal ERROR_OUT_PROC(default_error_out_va) { + if (global_error_mute_depth > 0) { + // NOTE(bill): the error this would continue was muted, so there is no current error value + return; + } char buf[4096] = {}; isize len = gb_snprintf_va(buf, gb_size_of(buf), fmt, va); isize n = len-1; @@ -765,10 +769,17 @@ gb_internal void warning_va(TokenPos const &pos, TokenPos end, char const *fmt, gb_internal void error_line_va(char const *fmt, va_list va) { + if (global_error_mute_depth > 0) { + return; + } error_out_va(fmt, va); } gb_internal void error_no_newline_va(TokenPos const &pos, char const *fmt, va_list va) { + if (global_error_mute_depth > 0) { + global_error_mute_count += 1; + return; + } global_error_collector.count.fetch_add(1); mutex_lock(&global_error_collector.mutex); if (global_error_collector.count.load() > MAX_ERROR_COLLECTOR_COUNT()) { From 5f6e95a6203c48687ddb6d00d53227b35dd5f2ee Mon Sep 17 00:00:00 2001 From: gingerBill Date: Thu, 1 Oct 2026 15:26:45 +0100 Subject: [PATCH 119/215] Don't treat a global naming itself as an initialization cycle (fixes test_issue_6621) --- src/checker.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/checker.cpp b/src/checker.cpp index 36d294352..e87c2ad59 100644 --- a/src/checker.cpp +++ b/src/checker.cpp @@ -3321,7 +3321,8 @@ gb_internal Array generate_entity_dependency_graph(CheckerInf } if (dep->kind == Entity_Variable) { EntityGraphNode **m = map_get(&M_vars, dep); - if (m != nullptr) { + // NOTE(bill): a variable naming itself, e.g. `t: struct { next: ^type_of(t) }`, is not an initialization cycle + if (m != nullptr && *m != n) { entity_graph_node_set_add(&n->succ, *m); entity_graph_node_set_add(&(*m)->pred, n); } From 2b90b616e19068c23bb92ca7cf1ccfbd600a70be Mon Sep 17 00:00:00 2001 From: gingerBill Date: Thu, 1 Oct 2026 16:24:01 +0100 Subject: [PATCH 120/215] Add `-vet-when-shadowing`; Resolve global `when`s and `foreign` blocks on demand via name placeholders --- src/build_settings.cpp | 5 +- src/checker.cpp | 289 +++------------------ src/checker.hpp | 2 +- src/checker_global_graph.cpp | 10 +- src/checker_global_when.cpp | 474 +++++++++++++++++++++++++++++++++++ src/main.cpp | 8 + src/parser.cpp | 1 + src/parser.hpp | 1 - 8 files changed, 529 insertions(+), 261 deletions(-) create mode 100644 src/checker_global_when.cpp diff --git a/src/build_settings.cpp b/src/build_settings.cpp index 041622a30..7f4da5140 100644 --- a/src/build_settings.cpp +++ b/src/build_settings.cpp @@ -317,10 +317,11 @@ enum VetFlags : u64 { VetFlag_Tabs = 1u<<9, VetFlag_UnusedProcedures = 1u<<10, VetFlag_ExplicitAllocators = 1u<<11, + VetFlag_WhenShadowing = 1u<<12, VetFlag_Unused = VetFlag_UnusedVariables|VetFlag_UnusedImports, - VetFlag_All = VetFlag_Unused|VetFlag_Shadowing|VetFlag_UsingStmt|VetFlag_Deprecated|VetFlag_Cast, + VetFlag_All = VetFlag_Unused|VetFlag_Shadowing|VetFlag_UsingStmt|VetFlag_Deprecated|VetFlag_Cast|VetFlag_WhenShadowing, VetFlag_Using = VetFlag_UsingStmt|VetFlag_UsingParam, }; @@ -352,6 +353,8 @@ u64 get_vet_flag_from_name(String const &name) { return VetFlag_UnusedProcedures; } else if (name == "explicit-allocators") { return VetFlag_ExplicitAllocators; + } else if (name == "when-shadowing") { + return VetFlag_WhenShadowing; } return VetFlag_NONE; } diff --git a/src/checker.cpp b/src/checker.cpp index e87c2ad59..27ef4b147 100644 --- a/src/checker.cpp +++ b/src/checker.cpp @@ -400,6 +400,8 @@ gb_internal void check_close_scope(CheckerContext *c) { } +gb_internal Entity *force_scope_placeholders(Scope *s, InternedString name, u32 hash); + gb_internal Entity *scope_lookup_current(Scope *s, InternedString name, u32 hash) { // Entity **found = string_map_get(&s->elements, name); if (hash == 0) { @@ -409,6 +411,9 @@ gb_internal Entity *scope_lookup_current(Scope *s, InternedString name, u32 hash if (found) { return found; } + if (s->placeholders != nullptr) { + return force_scope_placeholders(s, name, hash); + } return nullptr; } @@ -428,6 +433,9 @@ gb_internal void scope_lookup_parent(Scope *scope, InternedString name, Scope ** if (!is_single_threaded) rw_mutex_shared_lock(&s->mutex); found = scope_map_get(&s->elements, name, hash); if (!is_single_threaded) rw_mutex_shared_unlock(&s->mutex); + if (found == nullptr && s->placeholders != nullptr) { + found = force_scope_placeholders(s, name, hash); + } if (found) { Entity *e = found; if (gone_thru_proc) { @@ -5127,9 +5135,7 @@ gb_internal void check_collect_value_decl(CheckerContext *c, Ast *decl) { } } -gb_internal bool collect_file_decls(CheckerContext *ctx, Slice const &decls); - -gb_internal bool check_add_foreign_block_decl(CheckerContext *ctx, Ast *decl) { +gb_internal void check_add_foreign_block_decl(CheckerContext *ctx, Ast *decl) { ast_node(fb, ForeignBlockDecl, decl); Ast *foreign_library = fb->foreign_library; @@ -5144,11 +5150,7 @@ gb_internal bool check_add_foreign_block_decl(CheckerContext *ctx, Ast *decl) { check_decl_attributes(&c, fb->attributes, foreign_block_decl_attribute, nullptr); ast_node(block, BlockStmt, fb->body); - if (c.collect_delayed_decls && (c.scope->flags&ScopeFlag_File) != 0) { - return collect_file_decls(&c, block->stmts); - } check_collect_entities(&c, block->stmts); - return false; } gb_internal bool correct_single_type_alias(CheckerContext *c, Entity *e) { @@ -5156,7 +5158,11 @@ gb_internal bool correct_single_type_alias(CheckerContext *c, Entity *e) { DeclInfo *d = e->decl_info; if (d != nullptr && d->init_expr != nullptr) { Ast *init = d->init_expr; + // NOTE: in the scope of its own file, as a package's files may bind a name differently + Scope *prev_scope = c->scope; + c->scope = d->scope; Entity *alias_of = check_entity_from_ident_or_selector(c, init, true); + c->scope = prev_scope; if (alias_of != nullptr && alias_of->kind == Entity_TypeName) { e->kind = Entity_TypeName; return true; @@ -5189,7 +5195,7 @@ gb_internal bool correct_type_alias_in_scope_forwards(CheckerContext *c, Scope * } -gb_internal void correct_type_aliases_in_scope(CheckerContext *c, Scope *s) { +gb_internal void correct_type_aliases_in_package(CheckerContext *c, AstPackage *pkg) { // NOTE(bill, 2022-02-04): This is used to solve the problem caused by type aliases // of type aliases being "confused" as constants // @@ -5200,8 +5206,12 @@ gb_internal void correct_type_aliases_in_scope(CheckerContext *c, Scope *s) { // See @TypeAliasingProblem for more information for (;;) { bool corrections = false; - corrections |= correct_type_alias_in_scope_backwards(c, s); - corrections |= correct_type_alias_in_scope_forwards(c, s); + corrections |= correct_type_alias_in_scope_backwards(c, pkg->scope); + corrections |= correct_type_alias_in_scope_forwards(c, pkg->scope); + for (AstFile *f : pkg->files) { + corrections |= correct_type_alias_in_scope_backwards(c, f->scope); + corrections |= correct_type_alias_in_scope_forwards(c, f->scope); + } if (!corrections) { return; } @@ -5220,17 +5230,7 @@ gb_internal void check_collect_entities(CheckerContext *c, Slice const &n for_array(decl_index, nodes) { Ast *decl = nodes[decl_index]; if (!is_ast_decl(decl) && !is_ast_when_stmt(decl)) { - if (curr_file && decl->kind == Ast_ExprStmt) { - Ast *expr = decl->ExprStmt.expr; - if (expr->kind == Ast_CallExpr && expr->CallExpr.proc->kind == Ast_BasicDirective) { - if (c->collect_delayed_decls) { - if (decl->state_flags & StateFlag_BeenHandled) return; - decl->state_flags |= StateFlag_BeenHandled; - array_add(&curr_file->delayed_decls_queues[AstDelayQueue_Expr], expr); - } - continue; - } - } + // NOTE: global directives such as '#assert' are queued by `scan_global_decl_sources` continue; } @@ -5266,9 +5266,7 @@ gb_internal void check_collect_entities(CheckerContext *c, Slice const &n case_end; case_ast_node(fb, ForeignBlockDecl, decl); - if (curr_file != nullptr) { - array_add(&curr_file->delayed_decls_queues[AstDelayQueue_ForeignBlock], decl); - } + // NOTE: global ones are resolved like global 'when's, see `resolve_global_decl_sources` case_end; default: @@ -5785,7 +5783,6 @@ gb_internal void check_foreign_import_fullpaths(Checker *c) { AstFile *f = decl->file(); reset_checker_context(&ctx, f, &untyped); - ctx.collect_delayed_decls = false; GB_ASSERT(ctx.scope == e->scope); @@ -5935,165 +5932,6 @@ gb_internal void check_add_foreign_import_decl(CheckerContext *ctx, Ast *decl) { } -// Returns true if a new package is present -gb_internal bool collect_file_decls(CheckerContext *ctx, Slice const &decls); -gb_internal bool collect_file_decls_from_when_stmt(CheckerContext *ctx, AstWhenStmt *ws); - -gb_internal bool collect_when_stmt_from_file(CheckerContext *ctx, AstWhenStmt *ws) { - Operand operand = {Addressing_Invalid}; - if (!ws->is_cond_determined) { - check_expr(ctx, &operand, ws->cond); - if (operand.mode != Addressing_Invalid && !is_type_boolean(operand.type)) { - error(ws->cond, "Non-boolean condition in 'when' statement"); - } - if (operand.mode != Addressing_Constant) { - error(ws->cond, "Non-constant condition in 'when' statement"); - } - - ws->is_cond_determined = true; - ws->determined_cond = operand.value.kind == ExactValue_Bool && operand.value.value_bool; - } - - if (ws->body == nullptr || ws->body->kind != Ast_BlockStmt) { - error(ws->cond, "Invalid body for 'when' statement"); - } else { - if (ws->determined_cond) { - check_collect_entities(ctx, ws->body->BlockStmt.stmts); - return true; - } else if (ws->else_stmt) { - switch (ws->else_stmt->kind) { - case Ast_BlockStmt: - check_collect_entities(ctx, ws->else_stmt->BlockStmt.stmts); - return true; - case Ast_WhenStmt: - collect_when_stmt_from_file(ctx, &ws->else_stmt->WhenStmt); - return true; - default: - error(ws->else_stmt, "Invalid 'else' statement in 'when' statement"); - break; - } - } - } - - return false; -} - -gb_internal bool collect_file_decls_from_when_stmt(CheckerContext *ctx, AstWhenStmt *ws) { - Operand operand = {Addressing_Invalid}; - if (!ws->is_cond_determined) { - check_expr(ctx, &operand, ws->cond); - if (operand.mode != Addressing_Invalid && !is_type_boolean(operand.type)) { - error(ws->cond, "Non-boolean condition in 'when' statement"); - } - if (operand.mode != Addressing_Constant) { - error(ws->cond, "Non-constant condition in 'when' statement"); - } - - ws->is_cond_determined = true; - ws->determined_cond = operand.value.kind == ExactValue_Bool && operand.value.value_bool; - } - - if (ws->body == nullptr || ws->body->kind != Ast_BlockStmt) { - error(ws->cond, "Invalid body for 'when' statement"); - } else { - if (ws->determined_cond) { - return collect_file_decls(ctx, ws->body->BlockStmt.stmts); - } else if (ws->else_stmt) { - switch (ws->else_stmt->kind) { - case Ast_BlockStmt: - return collect_file_decls(ctx, ws->else_stmt->BlockStmt.stmts); - case Ast_WhenStmt: - return collect_file_decls_from_when_stmt(ctx, &ws->else_stmt->WhenStmt); - default: - error(ws->else_stmt, "Invalid 'else' statement in 'when' statement"); - break; - } - } - } - - return false; -} - - -gb_internal bool collect_file_decl(CheckerContext *ctx, Ast *decl) { - GB_ASSERT(ctx->scope->flags&ScopeFlag_File); - - AstFile *curr_file = ctx->scope->file; - GB_ASSERT(curr_file != nullptr); - - if (decl->state_flags & StateFlag_BeenHandled) { - return false; - } - - switch (decl->kind) { - case_ast_node(vd, ValueDecl, decl); - check_collect_value_decl(ctx, decl); - case_end; - - case_ast_node(id, ImportDecl, decl); - check_add_import_decl(ctx, decl); - case_end; - - case_ast_node(fl, ForeignImportDecl, decl); - check_add_foreign_import_decl(ctx, decl); - case_end; - - case_ast_node(fb, ForeignBlockDecl, decl); - GB_ASSERT(ctx->collect_delayed_decls); - decl->state_flags |= StateFlag_BeenHandled; - array_add(&curr_file->delayed_decls_queues[AstDelayQueue_ForeignBlock], decl); - case_end; - - case_ast_node(ws, WhenStmt, decl); - if (!ws->is_cond_determined) { - if (collect_when_stmt_from_file(ctx, ws)) { - return true; - } - - CheckerContext nctx = *ctx; - nctx.collect_delayed_decls = true; - - if (collect_file_decls_from_when_stmt(&nctx, ws)) { - return true; - } - } else { - CheckerContext nctx = *ctx; - nctx.collect_delayed_decls = true; - - if (collect_file_decls_from_when_stmt(&nctx, ws)) { - return true; - } - } - case_end; - - case_ast_node(es, ExprStmt, decl); - GB_ASSERT(ctx->collect_delayed_decls); - decl->state_flags |= StateFlag_BeenHandled; - if (es->expr->kind == Ast_CallExpr) { - ast_node(ce, CallExpr, es->expr); - if (ce->proc->kind == Ast_BasicDirective) { - array_add(&curr_file->delayed_decls_queues[AstDelayQueue_Expr], es->expr); - } - } - case_end; - } - - return false; -} - -gb_internal bool collect_file_decls(CheckerContext *ctx, Slice const &decls) { - GB_ASSERT(ctx->scope->flags&ScopeFlag_File); - - for_array(i, decls) { - if (collect_file_decl(ctx, decls[i])) { - correct_type_aliases_in_scope(ctx, ctx->scope); - return true; - } - } - correct_type_aliases_in_scope(ctx, ctx->scope); - return false; -} - gb_internal GB_COMPARE_PROC(sort_file_by_name) { AstFile const *x = *cast(AstFile const **)a; AstFile const *y = *cast(AstFile const **)b; @@ -6140,7 +5978,6 @@ gb_internal WORKER_TASK_PROC(check_collect_entities_all_worker_proc) { reset_checker_context(ctx, f, untyped); check_collect_entities(ctx, f->decls); - GB_ASSERT(ctx->collect_delayed_decls == false); add_untyped_expressions(&c->info, ctx->untyped); @@ -6205,6 +6042,8 @@ gb_internal void check_export_entities(Checker *c) { thread_pool_wait(); } +#include "checker_global_when.cpp" + gb_internal void check_import_entities(Checker *c) { TEMPORARY_ALLOCATOR_GUARD(); @@ -6261,101 +6100,45 @@ gb_internal void check_import_entities(Checker *c) { array_add(&package_order, n); } - TIME_SECTION("check_import_entities - collect file decls"); CheckerContext ctx = {}; init_checker_context(&ctx, c); + defer (destroy_checker_context(&ctx)); UntypedExprInfoMap untyped = {}; defer (map_destroy(&untyped)); - isize min_pkg_index = 0; + TIME_SECTION("check_import_entities - imports"); + // NOTE(bill): every import first, as resolving a 'when' may check declarations in any package u64 stage_start = global_import_stage_begin(); for (isize pkg_index = 0; pkg_index < package_order.count; pkg_index++) { - ImportGraphNode *node = package_order[pkg_index]; - AstPackage *pkg = node->pkg; + AstPackage *pkg = package_order[pkg_index]->pkg; pkg->order = 1+pkg_index; - for_array(i, pkg->files) { - AstFile *f = pkg->files[i]; - + for (AstFile *f : pkg->files) { reset_checker_context(&ctx, f, &untyped); - ctx.collect_delayed_decls = true; - - // Check import declarations first to simplify things for (Ast *decl : f->delayed_decls_queues[AstDelayQueue_Import]) { check_add_import_decl(&ctx, decl); } array_clear(&f->delayed_decls_queues[AstDelayQueue_Import]); - - if (collect_file_decls(&ctx, f->decls)) { - check_export_entities_in_pkg(&ctx, pkg, &untyped); - pkg_index = min_pkg_index-1; - break; - } - add_untyped_expressions(ctx.info, &untyped); } - if (pkg_index < 0) { - continue; - } - min_pkg_index = pkg_index; } - global_import_stage_end(GlobalImportStage_CollectFileDecls, stage_start); + global_import_stage_end(GlobalImportStage_Imports, stage_start); + + TIME_SECTION("check_import_entities - resolve 'when' and 'foreign' blocks"); + resolve_global_decl_sources(c, package_order); TIME_SECTION("check_import_entities - check delayed entities"); - for (isize pkg_index = 0; pkg_index < package_order.count; pkg_index++) { - ImportGraphNode *node = package_order[pkg_index]; + for (ImportGraphNode *node : package_order) { GB_ASSERT(node->scope->flags&ScopeFlag_Pkg); AstPackage *pkg = node->scope->pkg; stage_start = global_import_stage_begin(); - for_array(i, pkg->files) { - AstFile *f = pkg->files[i]; - reset_checker_context(&ctx, f, &untyped); - - for (Ast *decl : f->delayed_decls_queues[AstDelayQueue_Import]) { - check_add_import_decl(&ctx, decl); - } - array_clear(&f->delayed_decls_queues[AstDelayQueue_Import]); - add_untyped_expressions(ctx.info, &untyped); - } - global_import_stage_end(GlobalImportStage_Imports, stage_start); - - stage_start = global_import_stage_begin(); - for_array(i, pkg->files) { - AstFile *f = pkg->files[i]; - reset_checker_context(&ctx, f, &untyped); - correct_type_aliases_in_scope(&ctx, pkg->scope); - } + correct_type_aliases_in_package(&ctx, pkg); global_import_stage_end(GlobalImportStage_TypeAliases, stage_start); stage_start = global_import_stage_begin(); - for_array(i, pkg->files) { - AstFile *f = pkg->files[i]; - reset_checker_context(&ctx, f, &untyped); - - ctx.collect_delayed_decls = true; - - bool will_recheck_foreign_block = false; - for (Ast *decl : f->delayed_decls_queues[AstDelayQueue_ForeignBlock]) { - if (check_add_foreign_block_decl(&ctx, decl)) { - pkg_index -= 1; // Re-check package - will_recheck_foreign_block = true; - break; - } - } - - if (will_recheck_foreign_block) { - break; - } - - array_clear(&f->delayed_decls_queues[AstDelayQueue_ForeignBlock]); - } - global_import_stage_end(GlobalImportStage_ForeignBlocks, stage_start); - - stage_start = global_import_stage_begin(); - for_array(i, pkg->files) { - AstFile *f = pkg->files[i]; + for (AstFile *f : pkg->files) { reset_checker_context(&ctx, f, &untyped); for (Ast *expr : f->delayed_decls_queues[AstDelayQueue_Expr]) { diff --git a/src/checker.hpp b/src/checker.hpp index e51b48da3..9643fa683 100644 --- a/src/checker.hpp +++ b/src/checker.hpp @@ -564,6 +564,7 @@ struct Scope { RwMutex mutex; ScopeMap elements; PtrSet imported; + PtrMap *placeholders; // multi-map; names a global 'when' or 'foreign' block may declare, until all are resolved DeclInfo *decl_info; @@ -838,7 +839,6 @@ struct CheckerContext { u32 stmt_flags; bool in_enum_type; bool in_proc_group; - bool collect_delayed_decls; bool allow_polymorphic_types; bool disallow_polymorphic_return_types; // NOTE(zen3ger): no poly type decl in return types bool no_polymorphic_errors; diff --git a/src/checker_global_graph.cpp b/src/checker_global_graph.cpp index d639297ac..67a2c7c07 100644 --- a/src/checker_global_graph.cpp +++ b/src/checker_global_graph.cpp @@ -13,20 +13,20 @@ struct GlobalEntityTimingFrame { }; enum GlobalImportStagePart { - GlobalImportStage_CollectFileDecls, GlobalImportStage_Imports, + GlobalImportStage_Placeholders, + GlobalImportStage_DeclSources, GlobalImportStage_TypeAliases, - GlobalImportStage_ForeignBlocks, GlobalImportStage_DelayedExprs, GlobalImportStage_COUNT, }; gb_global char const *global_import_stage_names[GlobalImportStage_COUNT] = { - "collect file decls ('when')", - "delayed imports", + "imports", + "'when' and 'foreign' placeholders", + "resolve 'when' and 'foreign' blocks", "type alias correction", - "foreign blocks", "delayed expressions (#assert etc.)", }; diff --git a/src/checker_global_when.cpp b/src/checker_global_when.cpp new file mode 100644 index 000000000..2b4187b68 --- /dev/null +++ b/src/checker_global_when.cpp @@ -0,0 +1,474 @@ +// Global 'when's and 'foreign' blocks: every name one may declare is a placeholder in its scope, and the +// first lookup of a placeholder resolves them, so the order of files and declarations does not matter + +struct GlobalDeclSource { + Ast * node; // WhenStmt or ForeignBlockDecl + AstFile * file; + GlobalDeclSource *parent; + bool in_else; // within the else branch of `parent` + bool reachable; + bool reported_cycle; + EntityState state; + ForeignContext foreign_context; // of a resolved 'foreign' block +}; + +struct GlobalDeclSourceFrame { + GlobalDeclSource *source; + InternedString needs; // the placeholder being resolved for it +}; + +gb_global Array global_decl_sources; +gb_global Array global_decl_source_stack; +gb_global Array global_placeholder_scopes; +gb_global CheckerContext global_decl_source_export_ctx; +gb_global UntypedExprInfoMap global_decl_source_export_untyped; + +enum : u8 { + PlaceholderScope_File = 1<<0, + PlaceholderScope_Pkg = 1<<1, +}; + +// -1 when 'private' has a value that is not a string literal +gb_internal i32 syntactic_visibility(Array const &attributes) { + for (Ast *attr : attributes) { + if (attr->kind != Ast_Attribute) { + continue; + } + for (Ast *elem : attr->Attribute.elems) { + if (elem->kind == Ast_Ident && elem->Ident.token.string == "private") { + return EntityVisiblity_PrivateToPackage; + } + if (elem->kind == Ast_FieldValue && + elem->FieldValue.field->kind == Ast_Ident && + elem->FieldValue.field->Ident.token.string == "private") { + Ast *value = elem->FieldValue.value; + if (value != nullptr && value->tav.value.kind == ExactValue_String) { + return value->tav.value.value_string == "file" ? EntityVisiblity_PrivateToFile : EntityVisiblity_PrivateToPackage; + } + return -1; + } + } + } + return EntityVisiblity_Public; +} + +gb_internal bool has_syntactic_attribute(Array const &attributes, String const &name) { + for (Ast *attr : attributes) { + if (attr->kind != Ast_Attribute) { + continue; + } + for (Ast *elem : attr->Attribute.elems) { + Ast *field = elem->kind == Ast_FieldValue ? elem->FieldValue.field : elem; + if (field->kind == Ast_Ident && field->Ident.token.string == name) { + return true; + } + } + } + return false; +} + +gb_internal void add_placeholder(Scope *s, InternedString name, GlobalDeclSource *src) { + if (name.value == 0 || name.is_blank()) { + return; + } + if (s->placeholders == nullptr) { + s->placeholders = permanent_alloc_item>(); + map_init(s->placeholders); + array_add(&global_placeholder_scopes, s); + } + u64 key = name.value; + for (auto *e = multi_map_find_first(s->placeholders, key); e != nullptr; e = multi_map_find_next(s->placeholders, e)) { + if (e->value == src) { + return; + } + } + multi_map_insert(s->placeholders, key, src); +} + +gb_internal void add_placeholders(AstFile *f, u8 scopes, InternedString name, GlobalDeclSource *src) { + if (scopes & PlaceholderScope_File) { + add_placeholder(f->scope, name, src); + } + if (scopes & PlaceholderScope_Pkg) { + add_placeholder(f->pkg->scope, name, src); + } +} + +gb_internal GlobalDeclSource *add_global_decl_source(Ast *node, AstFile *f, GlobalDeclSource *parent, bool in_else) { + GlobalDeclSource *src = permanent_alloc_item(); + src->node = node; + src->file = f; + src->parent = parent; + src->in_else = in_else; + src->reachable = true; + src->state = EntityState_Unresolved; + array_add(&global_decl_sources, src); + return src; +} + +gb_internal void scan_global_decl_sources(AstFile *f, Slice const &stmts, GlobalDeclSource *owner, bool in_else, i32 foreign_visibility); + +gb_internal void scan_global_when_stmt(AstFile *f, Ast *node, GlobalDeclSource *parent, bool in_else, i32 foreign_visibility) { + ast_node(ws, WhenStmt, node); + GlobalDeclSource *src = add_global_decl_source(node, f, parent, in_else); + if (ws->body != nullptr && ws->body->kind == Ast_BlockStmt) { + scan_global_decl_sources(f, ws->body->BlockStmt.stmts, src, false, foreign_visibility); + } + if (ws->else_stmt != nullptr) { + switch (ws->else_stmt->kind) { + case Ast_BlockStmt: + scan_global_decl_sources(f, ws->else_stmt->BlockStmt.stmts, src, true, foreign_visibility); + break; + case Ast_WhenStmt: + scan_global_when_stmt(f, ws->else_stmt, src, true, foreign_visibility); + break; + } + } +} + +gb_internal void scan_global_decl_sources(AstFile *f, Slice const &stmts, GlobalDeclSource *owner, bool in_else, i32 foreign_visibility) { + // NOTE(bill): `owner == nullptr` is the file scope itself, whose other declarations are already collected + for (Ast *decl : stmts) { + switch (decl->kind) { + case_ast_node(vd, ValueDecl, decl); + if (owner == nullptr) { + break; + } + i32 visibility = syntactic_visibility(vd->attributes); + if (visibility == EntityVisiblity_Public) { + visibility = foreign_visibility; + } + if (visibility == EntityVisiblity_Public && (f->flags & AstFile_IsPrivateFile)) { + visibility = EntityVisiblity_PrivateToFile; + } + u8 scopes = PlaceholderScope_Pkg; + if (visibility == EntityVisiblity_PrivateToFile) { + scopes = PlaceholderScope_File; + } else if (visibility < 0) { + scopes = PlaceholderScope_File|PlaceholderScope_Pkg; + } + for (Ast *name : vd->names) { + if (name->kind == Ast_Ident) { + add_placeholders(f, scopes, name->Ident.interned, owner); + } + } + case_end; + + case_ast_node(fl, ForeignImportDecl, decl); + if (owner == nullptr) { + break; + } + String library_name = fl->library_name.string; + if (library_name.len == 0 && fl->fullpaths.count != 0) { + library_name = path_to_entity_name(fl->library_name.string, fl->fullpaths[0]); + } + if (library_name.len != 0) { + u8 scopes = has_syntactic_attribute(fl->attributes, str_lit("export")) ? PlaceholderScope_Pkg : PlaceholderScope_File; + add_placeholders(f, scopes, string_interner_insert(library_name), owner); + } + case_end; + + case_ast_node(fb, ForeignBlockDecl, decl); + GlobalDeclSource *src = add_global_decl_source(decl, f, owner, in_else); + if (fb->body != nullptr && fb->body->kind == Ast_BlockStmt) { + scan_global_decl_sources(f, fb->body->BlockStmt.stmts, src, false, syntactic_visibility(fb->attributes)); + } + case_end; + + case_ast_node(ws, WhenStmt, decl); + scan_global_when_stmt(f, decl, owner, in_else, foreign_visibility); + case_end; + + case_ast_node(es, ExprStmt, decl); + if (owner == nullptr && es->expr->kind == Ast_CallExpr && + es->expr->CallExpr.proc->kind == Ast_BasicDirective && + (decl->state_flags & StateFlag_BeenHandled) == 0) { + decl->state_flags |= StateFlag_BeenHandled; + array_add(&f->delayed_decls_queues[AstDelayQueue_Expr], es->expr); + } + case_end; + } + } +} + +gb_internal bool is_global_decl_source_in_when(GlobalDeclSource *src) { + for (; src != nullptr; src = src->parent) { + if (src->node->kind == Ast_WhenStmt) { + return true; + } + } + return false; +} + +gb_internal Slice global_decl_source_taken_stmts(GlobalDeclSource *src) { + if (src->node->kind == Ast_ForeignBlockDecl) { + Ast *body = src->node->ForeignBlockDecl.body; + if (body != nullptr && body->kind == Ast_BlockStmt) { + return body->BlockStmt.stmts; + } + return {}; + } + ast_node(ws, WhenStmt, src->node); + if (ws->determined_cond) { + if (ws->body != nullptr && ws->body->kind == Ast_BlockStmt) { + return ws->body->BlockStmt.stmts; + } + } else if (ws->else_stmt != nullptr && ws->else_stmt->kind == Ast_BlockStmt) { + return ws->else_stmt->BlockStmt.stmts; + } + return {}; +} + +gb_internal void collect_global_decl_source_stmts(CheckerContext *ctx, Slice const &stmts) { + AstFile *f = ctx->file; + for (Ast *decl : stmts) { + if (decl->kind == Ast_ValueDecl) { + check_collect_value_decl(ctx, decl); + } + } + check_export_entities_in_pkg(&global_decl_source_export_ctx, f->pkg, &global_decl_source_export_untyped); + + // NOTE(bill): after the value declarations, as their attributes are evaluated + for (Ast *decl : stmts) { + switch (decl->kind) { + case_ast_node(fl, ForeignImportDecl, decl); + check_add_foreign_import_decl(ctx, decl); + case_end; + + case_ast_node(es, ExprStmt, decl); + if (es->expr->kind == Ast_CallExpr && es->expr->CallExpr.proc->kind == Ast_BasicDirective && + (decl->state_flags & StateFlag_BeenHandled) == 0) { + decl->state_flags |= StateFlag_BeenHandled; + array_add(&f->delayed_decls_queues[AstDelayQueue_Expr], es->expr); + } + case_end; + } + } +} + +gb_internal Token global_decl_source_token(GlobalDeclSource *src) { + if (src->node->kind == Ast_WhenStmt) { + return src->node->WhenStmt.token; + } + return src->node->ForeignBlockDecl.token; +} + +gb_internal void report_global_decl_source_cycle(GlobalDeclSource *src, InternedString needed) { + if (src->reported_cycle) { + return; + } + src->reported_cycle = true; + + isize start = 0; + for (isize i = global_decl_source_stack.count-1; i >= 0; i--) { + if (global_decl_source_stack[i].source == src) { + start = i; + break; + } + } + + ERROR_BLOCK(); + Token token = global_decl_source_token(src); + error(token, "Cyclic dependency between global '%.*s' declarations", LIT(token.string)); + for (isize i = start; i < global_decl_source_stack.count; i++) { + Token t = global_decl_source_token(global_decl_source_stack[i].source); + InternedString name = i+1 < global_decl_source_stack.count ? global_decl_source_stack[i].needs : needed; + error_line("\t'%.*s' at %s needs '%s', which may be declared by\n", LIT(t.string), token_pos_to_string(t.pos), name.cstring()); + } + error_line("\t'%.*s' at %s\n", LIT(token.string), token_pos_to_string(token.pos)); +} + +gb_internal void resolve_global_decl_source(GlobalDeclSource *src, InternedString needed) { + if (src->state == EntityState_Resolved) { + return; + } + if (src->state == EntityState_InProgress) { + report_global_decl_source_cycle(src, needed); + return; + } + + GlobalDeclSource *foreign_block = nullptr; + if (src->parent != nullptr) { + GlobalDeclSource *parent = src->parent; + resolve_global_decl_source(parent, needed); + if (parent->state != EntityState_Resolved) { + return; + } + bool reachable = parent->reachable; + if (parent->node->kind == Ast_WhenStmt) { + reachable = reachable && parent->node->WhenStmt.determined_cond != src->in_else; + } + if (!reachable) { + src->reachable = false; + src->state = EntityState_Resolved; + return; + } + for (GlobalDeclSource *p = parent; p != nullptr; p = p->parent) { + if (p->node->kind == Ast_ForeignBlockDecl) { + foreign_block = p; + break; + } + } + } + + src->state = EntityState_InProgress; + array_add(&global_decl_source_stack, GlobalDeclSourceFrame{src, {}}); + + CheckerContext ctx = {}; + init_checker_context(&ctx, global_checker_ptr.load(std::memory_order_relaxed)); + UntypedExprInfoMap untyped = {}; + reset_checker_context(&ctx, src->file, &untyped); + if (foreign_block != nullptr) { + ctx.foreign_context = foreign_block->foreign_context; + } + + if (src->node->kind == Ast_WhenStmt) { + ast_node(ws, WhenStmt, src->node); + Operand operand = {Addressing_Invalid}; + check_expr(&ctx, &operand, ws->cond); + if (operand.mode != Addressing_Invalid && !is_type_boolean(operand.type)) { + error(ws->cond, "Non-boolean condition in 'when' statement"); + } + if (operand.mode != Addressing_Constant) { + error(ws->cond, "Non-constant condition in 'when' statement"); + } + ws->is_cond_determined = true; + ws->determined_cond = operand.value.kind == ExactValue_Bool && operand.value.value_bool; + if (ws->body == nullptr || ws->body->kind != Ast_BlockStmt) { + error(ws->cond, "Invalid body for 'when' statement"); + } else if (ws->else_stmt != nullptr && ws->else_stmt->kind != Ast_BlockStmt && ws->else_stmt->kind != Ast_WhenStmt) { + error(ws->else_stmt, "Invalid 'else' statement in 'when' statement"); + } + } else { + ast_node(fb, ForeignBlockDecl, src->node); + if (fb->foreign_library->kind == Ast_Ident) { + ctx.foreign_context.curr_library = fb->foreign_library; + } else { + error(fb->foreign_library, "Foreign block name must be an identifier or 'export'"); + ctx.foreign_context.curr_library = nullptr; + } + check_decl_attributes(&ctx, fb->attributes, foreign_block_decl_attribute, nullptr); + src->foreign_context = ctx.foreign_context; + } + + // NOTE: resolved before its declarations are collected, which evaluates the attributes of 'foreign import's + src->state = EntityState_Resolved; + array_pop(&global_decl_source_stack); + + collect_global_decl_source_stmts(&ctx, global_decl_source_taken_stmts(src)); + + add_untyped_expressions(ctx.info, &untyped); + map_destroy(&untyped); + destroy_checker_context(&ctx); +} + +gb_internal Entity *force_scope_placeholders(Scope *s, InternedString name, u32 hash) { + PtrMap *m = s->placeholders; + bool forced = false; + for (auto *e = multi_map_find_first(m, cast(u64)name.value); e != nullptr; e = multi_map_find_next(m, e)) { + GlobalDeclSource *src = e->value; + if (src->state != EntityState_Resolved) { + if (global_decl_source_stack.count > 0) { + global_decl_source_stack[global_decl_source_stack.count-1].needs = name; + } + resolve_global_decl_source(src, name); + forced = true; + } + } + if (!forced) { + return nullptr; + } + rw_mutex_shared_lock(&s->mutex); + Entity *found = scope_map_get(&s->elements, name, hash); + rw_mutex_shared_unlock(&s->mutex); + return found; +} + +gb_internal void check_vet_when_shadowing_entity(Entity *e) { + if (e == nullptr || e->scope == nullptr || (e->scope->flags & ScopeFlag_File) == 0) { + return; + } + InternedString name = entity_interned_name(e); + u32 hash = e->interned_name_hash.load(std::memory_order_relaxed); + Scope *outer = e->scope->parent; + if (scope_map_get(&e->scope->elements, name, hash) != e) { + outer = outer->parent; // in the package scope + } + if (outer == nullptr) { + return; + } + Entity *shadowed = scope_lookup(outer, name, hash); + if (shadowed == nullptr || shadowed == e) { + return; + } + if (shadowed->scope == builtin_pkg->scope) { + error(e->token, "Declaration of '%.*s' within a global 'when' shadows the builtin '%.*s'", LIT(e->token.string), LIT(e->token.string)); + } else { + error(e->token, "Declaration of '%.*s' within a global 'when' shadows the declaration at %s", LIT(e->token.string), token_pos_to_string(shadowed->token.pos)); + } +} + +gb_internal void check_vet_when_shadowing(void) { + for (GlobalDeclSource *src : global_decl_sources) { + if (!src->reachable || src->state != EntityState_Resolved) { + continue; + } + if ((ast_file_vet_flags(src->file) & VetFlag_WhenShadowing) == 0 || !is_global_decl_source_in_when(src)) { + continue; + } + for (Ast *decl : global_decl_source_taken_stmts(src)) { + if (decl->kind == Ast_ValueDecl) { + for (Ast *name : decl->ValueDecl.names) { + if (name->kind == Ast_Ident) { + check_vet_when_shadowing_entity(name->Ident.entity.load()); + } + } + } else if (decl->kind == Ast_ForeignImportDecl) { + Token token = decl->ForeignImportDecl.library_name; + InternedString name = string_interner_insert(token.string); + for (Scope *s = src->file->scope; s != nullptr && s != builtin_pkg->scope; s = s->parent) { + Entity *e = scope_map_get(&s->elements, name, name.hash()); + if (e != nullptr && e->kind == Entity_LibraryName && e->LibraryName.decl == decl) { + check_vet_when_shadowing_entity(e); + break; + } + } + } + } + } +} + +// Placeholders for every file, then every source resolved in package, file and source order, which +// only matters for which errors are reported +gb_internal void resolve_global_decl_sources(Checker *c, Array const &package_order) { + array_init(&global_decl_sources, heap_allocator()); + array_init(&global_decl_source_stack, heap_allocator()); + array_init(&global_placeholder_scopes, heap_allocator()); + init_checker_context(&global_decl_source_export_ctx, c); + defer (destroy_checker_context(&global_decl_source_export_ctx)); + + u64 stage_start = global_import_stage_begin(); + for (ImportGraphNode *node : package_order) { + for (AstFile *f : node->pkg->files) { + scan_global_decl_sources(f, f->decls, nullptr, false, EntityVisiblity_Public); + } + } + global_import_stage_end(GlobalImportStage_Placeholders, stage_start); + + stage_start = global_import_stage_begin(); + for (GlobalDeclSource *src : global_decl_sources) { + resolve_global_decl_source(src, {}); + } + GB_ASSERT(global_decl_source_stack.count == 0); + + for (Scope *s : global_placeholder_scopes) { + map_destroy(s->placeholders); + s->placeholders = nullptr; + } + array_clear(&global_placeholder_scopes); + + check_vet_when_shadowing(); + global_import_stage_end(GlobalImportStage_DeclSources, stage_start); + + map_destroy(&global_decl_source_export_untyped); +} diff --git a/src/main.cpp b/src/main.cpp index 6f0308cfb..5a3f4e3da 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -460,6 +460,7 @@ enum BuildFlagKind { BuildFlag_VetSemicolon, BuildFlag_VetCast, BuildFlag_VetTabs, + BuildFlag_VetWhenShadowing, BuildFlag_VetPackages, BuildFlag_CustomAttribute, @@ -725,6 +726,7 @@ gb_internal bool parse_build_flags(Array args) { add_flag(&build_flags, BuildFlag_VetSemicolon, str_lit("vet-semicolon"), BuildFlagParam_None, Command__does_check); add_flag(&build_flags, BuildFlag_VetCast, str_lit("vet-cast"), BuildFlagParam_None, Command__does_check); add_flag(&build_flags, BuildFlag_VetTabs, str_lit("vet-tabs"), BuildFlagParam_None, Command__does_check); + add_flag(&build_flags, BuildFlag_VetWhenShadowing, str_lit("vet-when-shadowing"), BuildFlagParam_None, Command__does_check); add_flag(&build_flags, BuildFlag_VetPackages, str_lit("vet-packages"), BuildFlagParam_String, Command__does_check); add_flag(&build_flags, BuildFlag_CustomAttribute, str_lit("custom-attribute"), BuildFlagParam_String, Command__does_check, true); @@ -1493,6 +1495,7 @@ gb_internal bool parse_build_flags(Array args) { case BuildFlag_VetSemicolon: build_context.vet_flags |= VetFlag_Semicolon; break; case BuildFlag_VetCast: build_context.vet_flags |= VetFlag_Cast; break; case BuildFlag_VetTabs: build_context.vet_flags |= VetFlag_Tabs; break; + case BuildFlag_VetWhenShadowing: build_context.vet_flags |= VetFlag_WhenShadowing; break; case BuildFlag_VetUnusedProcedures: build_context.vet_flags |= VetFlag_UnusedProcedures; break; case BuildFlag_VetPackages: @@ -3408,6 +3411,7 @@ gb_internal int print_show_help(String const arg0, String command, String option print_usage_line(3, "-vet-unused-imports"); print_usage_line(3, "-vet-shadowing"); print_usage_line(3, "-vet-using-stmt"); + print_usage_line(3, "-vet-when-shadowing"); } if (print_flag("-vet-cast")) { @@ -3467,6 +3471,10 @@ gb_internal int print_show_help(String const arg0, String command, String option print_usage_line(2, "Checks for the use of 'using' as a statement."); print_usage_line(2, "'using' is considered bad practice outside of immediate refactoring."); } + + if (print_flag("-vet-when-shadowing")) { + print_usage_line(2, "Checks for declarations within a global 'when' that shadow a builtin or package-level name."); + } } if (check) { diff --git a/src/parser.cpp b/src/parser.cpp index 8f4cc99ec..3f6578ab4 100644 --- a/src/parser.cpp +++ b/src/parser.cpp @@ -7243,6 +7243,7 @@ gb_internal u64 parse_vet_tag(Token token_for_pos, String s, u64 base_vet_flags) error_line("\tcast\n"); error_line("\ttabs\n"); error_line("\texplicit-allocators\n"); + error_line("\twhen-shadowing\n"); return vet_flags; } } diff --git a/src/parser.hpp b/src/parser.hpp index 08811c37a..f9d8da6af 100644 --- a/src/parser.hpp +++ b/src/parser.hpp @@ -101,7 +101,6 @@ enum AstFileFlag : u32 { enum AstDelayQueueKind { AstDelayQueue_Import, AstDelayQueue_Expr, - AstDelayQueue_ForeignBlock, AstDelayQueue_COUNT, }; From 98e9aba1fa404381cb1175442e05eb56db54e34a Mon Sep 17 00:00:00 2001 From: gingerBill Date: Thu, 1 Oct 2026 16:28:45 +0100 Subject: [PATCH 121/215] Add loads of global when tests --- tests/issues/run.bat | 6 ++++ tests/issues/run.sh | 21 +++++++++++ .../test_issue_const_array_broadcast.odin | 35 +++++++++++++++++++ .../issues/test_issue_global_when_cycle.odin | 14 ++++++++ .../issues/test_issue_global_when_order.odin | 35 +++++++++++++++++++ .../test_issue_global_when_shadowing.odin | 6 ++++ 6 files changed, 117 insertions(+) create mode 100644 tests/issues/test_issue_global_when_cycle.odin create mode 100644 tests/issues/test_issue_global_when_order.odin create mode 100644 tests/issues/test_issue_global_when_shadowing.odin diff --git a/tests/issues/run.bat b/tests/issues/run.bat index dd101297e..991a87d7f 100644 --- a/tests/issues/run.bat +++ b/tests/issues/run.bat @@ -49,7 +49,13 @@ set COMMON=-define:ODIN_TEST_FANCY=false -file -vet -strict-style -ignore-unused ..\..\..\odin test ..\test_issue_bool_to_be_conversion.odin %COMMON% || exit /b ..\..\..\odin test ..\test_issue_bool_comparison_truthiness.odin %COMMON% || exit /b ..\..\..\odin test ..\test_issue_const_array_broadcast.odin %COMMON% || exit /b +..\..\..\odin test ..\test_issue_decl_order.odin %COMMON% || exit /b +..\..\..\odin test ..\test_issue_distinct_constraint.odin %COMMON% || exit /b +..\..\..\odin check ..\test_issue_ambiguous_union_literal.odin %COMMON% 2>&1 | find /c "Error:" | findstr /x "1" || exit /b ..\..\..\odin test ..\test_issue_proc_constant_instantiation.odin %COMMON% || exit /b +..\..\..\odin test ..\test_issue_global_when_order.odin %COMMON% || exit /b +..\..\..\odin check ..\test_issue_global_when_cycle.odin -no-entry-point %COMMON% 2>&1 | find /c "Cyclic dependency between global" | findstr /x "3" || exit /b +..\..\..\odin check ..\test_issue_global_when_shadowing.odin -no-entry-point %COMMON% 2>&1 | find /c "within a global" | findstr /x "2" || exit /b ..\..\..\odin check ..\test_issue_7336.odin -no-entry-point %COMMON% || exit /b ..\..\..\odin check ..\test_issue_ellipsis_type_call.odin -no-entry-point %COMMON% 2>&1 | find /c "Error:" | findstr /x "10" || exit /b ..\..\..\odin check ..\test_issue_foreign_redeclaration.odin -no-entry-point %COMMON% || exit /b diff --git a/tests/issues/run.sh b/tests/issues/run.sh index 5508b07cf..41f108d4d 100755 --- a/tests/issues/run.sh +++ b/tests/issues/run.sh @@ -119,8 +119,29 @@ $ODIN check ../test_issue_7260.odin -no-entry-point $COMMON_CHECK $ODIN test ../test_issue_bool_to_be_conversion.odin $COMMON $ODIN test ../test_issue_bool_comparison_truthiness.odin $COMMON $ODIN test ../test_issue_const_array_broadcast.odin $COMMON +$ODIN test ../test_issue_decl_order.odin $COMMON +$ODIN test ../test_issue_distinct_constraint.odin $COMMON +if [[ $($ODIN check ../test_issue_ambiguous_union_literal.odin $COMMON_CHECK 2>&1 >/dev/null | grep -c "Error:") -eq 1 ]]; then + echo "SUCCESSFUL 1/1" +else + echo "SUCCESSFUL 0/1" + exit 1 +fi $ODIN test ../test_issue_proc_constant_instantiation.odin $COMMON $ODIN test ../test_issue_swizzle_multi_assign.odin $COMMON +$ODIN test ../test_issue_global_when_order.odin $COMMON +if [[ $($ODIN check ../test_issue_global_when_cycle.odin -no-entry-point $COMMON_CHECK 2>&1 >/dev/null | grep -c "Cyclic dependency between global") -eq 3 ]]; then + echo "SUCCESSFUL 1/1" +else + echo "SUCCESSFUL 0/1" + exit 1 +fi +if [[ $($ODIN check ../test_issue_global_when_shadowing.odin -no-entry-point $COMMON_CHECK 2>&1 >/dev/null | grep -c "within a global 'when' shadows") -eq 2 ]]; then + echo "SUCCESSFUL 1/1" +else + echo "SUCCESSFUL 0/1" + exit 1 +fi $ODIN check ../test_issue_foreign_redeclaration.odin -no-entry-point $COMMON_CHECK if [[ $($ODIN check ../test_issue_foreign_redeclaration_mismatch.odin -no-entry-point $COMMON_CHECK 2>&1 >/dev/null | grep -c "Error:") -eq 1 ]]; then diff --git a/tests/issues/test_issue_const_array_broadcast.odin b/tests/issues/test_issue_const_array_broadcast.odin index 5960e2f0c..b32ed12a8 100644 --- a/tests/issues/test_issue_const_array_broadcast.odin +++ b/tests/issues/test_issue_const_array_broadcast.odin @@ -67,6 +67,41 @@ const_array_broadcast_union :: proc(t: ^testing.T) { testing.expect_value(t, union_local, union_global) } +// A named untyped constant against a union hint, broadcast into an array variant, lost its +// constant value and the backend then tried to load the constant entity as a variable. + +@(private="file") +Target :: union { + []Item, + [2]u32, +} + +@(private="file") +TARGET_SIZE :: 8192 + +@(private="file") +take_target :: proc(target: Target, count: u32) -> Target { + return target +} + +@(test) +const_array_broadcast_into_union_variant :: proc(t: ^testing.T) { + expected := [2]u32{TARGET_SIZE, TARGET_SIZE} + + assigned: Target = TARGET_SIZE + testing.expect_value(t, assigned.([2]u32), expected) + + named := take_target(target = TARGET_SIZE, count = 3) + testing.expect_value(t, named.([2]u32), expected) + + positional := take_target(TARGET_SIZE*2, 3) + testing.expect_value(t, positional.([2]u32), [2]u32{2*TARGET_SIZE, 2*TARGET_SIZE}) + + elems := [2]Target{TARGET_SIZE, {}} + testing.expect_value(t, elems[0].([2]u32), expected) + testing.expect(t, elems[1] == nil, "the second element should be nil") +} + @(test) const_array_literals_unchanged :: proc(t: ^testing.T) { // a literal for the array's own type is not a broadcast diff --git a/tests/issues/test_issue_global_when_cycle.odin b/tests/issues/test_issue_global_when_cycle.odin new file mode 100644 index 000000000..77f83a028 --- /dev/null +++ b/tests/issues/test_issue_global_when_cycle.odin @@ -0,0 +1,14 @@ +// Each of these global 'when's needs a name it may declare itself, so all three are cycles +package test_issues + +// each 'when' needs a name the other may declare +when size_of(int) == 8 { A :: 1 } +when A == 1 { int :: i32 } + +// a 'when' needing a name it may declare +when B == 1 { B :: 1 } + +// or one declared by a 'when' within it +when C == 1 { + when true { C :: 1 } +} diff --git a/tests/issues/test_issue_global_when_order.odin b/tests/issues/test_issue_global_when_order.odin new file mode 100644 index 000000000..2f58aa844 --- /dev/null +++ b/tests/issues/test_issue_global_when_order.odin @@ -0,0 +1,35 @@ +// Global 'when's are resolved when a lookup needs a name they may declare, whatever the source order +package test_issues + +import "core:testing" + +// needs a name declared by a later 'when' +when HAS_FOO { X :: 1 } else { X :: 2 } +when true { HAS_FOO :: true } + +// nested 'when's and 'else when' chains +when A_ENABLED { + when B_VALUE == 3 { NESTED :: "three" } else { NESTED :: "other" } +} +when false { B_VALUE :: 1 } else when true { B_VALUE :: 3 } else { B_VALUE :: 4 } +A_ENABLED :: B_VALUE > 0 + +// file private names +when PRIV == 5 { FROM_PRIV :: true } else { FROM_PRIV :: false } +when true { @(private="file") PRIV :: 5 } + +// a 'when' within a 'foreign' block +when size_of(type_of(foreign_proc)) == size_of(rawptr) { FOREIGN_OK :: true } else { FOREIGN_OK :: false } +foreign { + when true { + foreign_proc :: proc "c" () --- + } +} + +@(test) +test_global_when_order :: proc(t: ^testing.T) { + testing.expect_value(t, X, 1) + testing.expect_value(t, NESTED, "three") + testing.expect_value(t, FROM_PRIV, true) + testing.expect_value(t, FOREIGN_OK, true) +} diff --git a/tests/issues/test_issue_global_when_shadowing.odin b/tests/issues/test_issue_global_when_shadowing.odin new file mode 100644 index 000000000..eb5797429 --- /dev/null +++ b/tests/issues/test_issue_global_when_shadowing.odin @@ -0,0 +1,6 @@ +// -vet-when-shadowing, enabled by -vet: a global 'when' declaring a builtin name +package test_issues + +when true { uint :: u32 } +when true { @(private="file") byte :: u16 } +when true { not_shadowing :: 1 } From 379261331ff6865249dfe4142330cd205e12b6b2 Mon Sep 17 00:00:00 2001 From: gingerBill Date: Thu, 1 Oct 2026 16:29:04 +0100 Subject: [PATCH 122/215] Add more tests --- tests/issues/test_issue_decl_order.odin | 80 +++++++++++++++++++ .../test_issue_distinct_constraint.odin | 21 +++++ 2 files changed, 101 insertions(+) create mode 100644 tests/issues/test_issue_decl_order.odin create mode 100644 tests/issues/test_issue_distinct_constraint.odin diff --git a/tests/issues/test_issue_decl_order.odin b/tests/issues/test_issue_decl_order.odin new file mode 100644 index 000000000..0f27a72b2 --- /dev/null +++ b/tests/issues/test_issue_decl_order.odin @@ -0,0 +1,80 @@ +// Global declarations whose result used to depend on which declaration was checked first. +// Each case puts the declaration that used to break first in source order. +package test_issues + +import "core:testing" + +// A global's initializer reads other globals, directly and through procedures, so they must be +// initialized in dependency order rather than source order. +@(private="file") init_a := init_b + 1 +@(private="file") init_b := init_c * 2 +@(private="file") init_c := init_f() +@(private="file") init_f :: proc "contextless" () -> int { return 3 } + +@(private="file") init_v := init_p1() +@(private="file") init_p1 :: proc "contextless" () -> int { return init_p2() } +@(private="file") init_p2 :: proc "contextless" () -> int { return init_p3() } +@(private="file") init_p3 :: proc "contextless" () -> int { return init_w } +@(private="file") init_w := init_g() +@(private="file") init_g :: proc "contextless" () -> int { return 42 } + +@(test) +global_init_order :: proc(t: ^testing.T) { + testing.expect_value(t, init_a, 7) + testing.expect_value(t, init_b, 6) + testing.expect_value(t, init_c, 3) + testing.expect_value(t, init_v, 42) + testing.expect_value(t, init_w, 42) +} + +// An alias of an alias of a procedure group, used before the inner alias is checked. +@(private="file") group_a :: proc(x: int) -> int { return x } +@(private="file") group_b :: proc(x: string) -> int { return len(x) } +@(private="file") group :: proc{group_a, group_b} +@(private="file") outer_alias :: inner_alias +@(private="file") inner_alias :: group + +@(test) +alias_of_procedure_group_alias :: proc(t: ^testing.T) { + testing.expect_value(t, outer_alias(3), 3) + testing.expect_value(t, outer_alias("hi"), 2) +} + +// A type alias in a cycle through a pointer, checked before the union that closes the cycle. +@(private="file") Map :: []Map_Entry +@(private="file") Map_Entry :: struct { key: Value } +@(private="file") Value :: union { int, ^Map } + +@(test) +alias_in_pointer_cycle :: proc(t: ^testing.T) { + m := new(Map) + defer free(m) + v: Value = m + _, ok := v.(^Map) + testing.expect(t, ok, "the union should hold the ^Map variant") +} + +// A type still being checked, used as a polymorphic record argument behind a pointer. +@(private="file") Box :: struct($T: typeid) { value: T } +@(private="file") Queued :: distinct [dynamic]^Future +@(private="file") Queue_Context :: struct { queued: ^Box(Queued) } +@(private="file") Future :: struct { ctx: ^Queue_Context, id: int } + +@(test) +in_progress_type_as_polymorphic_argument :: proc(t: ^testing.T) { + b: Box(Queued) + c := Queue_Context{queued = &b} + testing.expect_value(t, len(c.queued.value), 0) +} + +// A foreign library alias declared after the foreign block that uses it. +foreign lib { + @(link_name="odin_test_issue_decl_order_never_called") + never_called :: proc "c" () --- +} +when ODIN_OS == .Windows { + foreign import lib_ "system:kernel32.lib" +} else { + foreign import lib_ "system:c" +} +lib :: lib_ diff --git a/tests/issues/test_issue_distinct_constraint.odin b/tests/issues/test_issue_distinct_constraint.odin new file mode 100644 index 000000000..f702a5781 --- /dev/null +++ b/tests/issues/test_issue_distinct_constraint.odin @@ -0,0 +1,21 @@ +// A `distinct` copy of a record satisfies a `$T/Record` constraint, as it shares its base record. +package test_issues + +import "core:testing" + +@(private="file") Foo :: struct { a: int } +@(private="file") Bar :: distinct Foo +@(private="file") Baz :: distinct Bar +@(private="file") U :: union { int, f32 } +@(private="file") DU :: distinct U + +@(private="file") take_foo :: proc(foo: $T/Foo) -> int { return foo.a } +@(private="file") take_u :: proc(u: $T/U) -> bool { return u != nil } + +@(test) +distinct_record_satisfies_constraint :: proc(t: ^testing.T) { + testing.expect_value(t, take_foo(Foo{1}), 1) + testing.expect_value(t, take_foo(Bar{2}), 2) + testing.expect_value(t, take_foo(Baz{3}), 3) + testing.expect(t, take_u(DU(2)), "a distinct union satisfies its constraint") +} From 84f06ee6a814d323f0efcd7f78d3d65a9d37fc89 Mon Sep 17 00:00:00 2001 From: gingerBill Date: Thu, 1 Oct 2026 16:30:48 +0100 Subject: [PATCH 123/215] Add test_issue_ambiguous_union_literal.odin --- tests/issues/test_issue_ambiguous_union_literal.odin | 12 ++++++++++++ 1 file changed, 12 insertions(+) create mode 100644 tests/issues/test_issue_ambiguous_union_literal.odin diff --git a/tests/issues/test_issue_ambiguous_union_literal.odin b/tests/issues/test_issue_ambiguous_union_literal.odin new file mode 100644 index 000000000..1b2e11040 --- /dev/null +++ b/tests/issues/test_issue_ambiguous_union_literal.odin @@ -0,0 +1,12 @@ +// An untyped compound literal that matches two union variants is one ambiguity error. Trying the +// overloads of `append` muted the error but not its follow-up lines, which crashed the error system. +package test_issues + +A :: struct { x: int } +B :: struct { x: int } +U :: union { A, B } + +main :: proc() { + d: [dynamic]U + append(&d, {x = 1}) +} From ce6aac3028f8fe5b7b1fc2ffc2a357f4e9daf881 Mon Sep 17 00:00:00 2001 From: Alexander Zhura Date: Thu, 1 Oct 2026 19:21:35 +0300 Subject: [PATCH 124/215] Impl simd x86 avx512 typo fix --- core/simd/x86/avx512f.odin | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/simd/x86/avx512f.odin b/core/simd/x86/avx512f.odin index 279273ae0..764f47106 100644 --- a/core/simd/x86/avx512f.odin +++ b/core/simd/x86/avx512f.odin @@ -76,6 +76,6 @@ _mm512_or_si512 :: #force_inline proc "c" (a, b: __m512i) -> __m512i { // // [Intel's documentation](https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm512_xor_si512) @(require_results, enable_target_feature="avx512f,evex512") -_mm512_xor_si512 :: #force_inline proc "c" (a, b: __m256i) -> __m256i { +_mm512_xor_si512 :: #force_inline proc "c" (a, b: __m512i) -> __m512i { return simd.bit_xor(a, b) } From 63bd49c88bc04fc5d0523a5e8e8d66e11ba54ef1 Mon Sep 17 00:00:00 2001 From: gingerBill Date: Thu, 1 Oct 2026 17:28:38 +0100 Subject: [PATCH 125/215] Add `-internal-check-global-edges`; Check global entities in dependency-ordered groups of a syntactic graph --- src/build_settings.cpp | 1 + src/check_decl.cpp | 1 + src/checker.cpp | 50 +-- src/checker.hpp | 1 + src/checker_global_groups.cpp | 769 ++++++++++++++++++++++++++++++++++ src/main.cpp | 5 + 6 files changed, 780 insertions(+), 47 deletions(-) create mode 100644 src/checker_global_groups.cpp diff --git a/src/build_settings.cpp b/src/build_settings.cpp index 7f4da5140..7add7d37e 100644 --- a/src/build_settings.cpp +++ b/src/build_settings.cpp @@ -603,6 +603,7 @@ struct BuildContext { bool internal_llvm_no_sroa; bool internal_global_entity_graph; u64 internal_shuffle_global_entities; // seed, 0 = no shuffle + bool internal_check_global_edges; bool enable_rvo; diff --git a/src/check_decl.cpp b/src/check_decl.cpp index 472daaf6f..fd9672f21 100644 --- a/src/check_decl.cpp +++ b/src/check_decl.cpp @@ -2183,6 +2183,7 @@ gb_internal void check_entity_decl(CheckerContext *ctx, Entity *e, DeclInfo *d, c.scope->flags &= ~ScopeFlag_ContextDefined; } + global_group_check_edge(ctx, e); e->parent_proc_decl = c.curr_proc_decl; e->state = EntityState_InProgress; diff --git a/src/checker.cpp b/src/checker.cpp index 27ef4b147..fa454f404 100644 --- a/src/checker.cpp +++ b/src/checker.cpp @@ -5339,53 +5339,7 @@ gb_internal void check_single_global_entity(Checker *c, Entity *e, DeclInfo *d) check_entity_decl(ctx, e, d, nullptr); } -// for `-internal-shuffle-global-entities` -// visit globals in a seeded random order, so that any result depending on the visiting order shows up without needing threads -gb_internal void shuffle_global_entities(Array *entities, u64 seed) { - if (seed == 0) { - return; - } - u64 state = seed; - for (isize i = entities->count-1; i > 0; i--) { - state = state*6364136223846793005ull + 1442695040888963407ull; - isize j = cast(isize)((state >> 33) % cast(u64)(i+1)); - Entity *tmp = (*entities)[i]; - (*entities)[i] = (*entities)[j]; - (*entities)[j] = tmp; - } -} - -gb_internal void check_all_global_entities(Checker *c) { - in_single_threaded_checker_stage.store(true, std::memory_order_relaxed); - - auto order = array_clone(heap_allocator(), c->info.entities); - defer (array_free(&order)); - shuffle_global_entities(&order, build_context.internal_shuffle_global_entities); - - // NOTE(bill): This must be single threaded - // Don't bother trying - for (Entity *e : order) { - GB_ASSERT(e != nullptr); - if (e->flags & EntityFlag_Lazy) { - continue; - } - DeclInfo *d = e->decl_info; - GlobalEntityTimingFrame timing_frame = global_entity_timing_begin(e); - check_single_global_entity(c, e, d); - if (e->type != nullptr && is_type_typed(e->type)) { - for (Type *t = nullptr; mpsc_dequeue(&c->soa_types_to_complete, &t); /**/) { - complete_soa_type(c, t, false); - } - - (void)type_size_of(e->type); - (void)type_align_of(e->type); - } - global_entity_timing_end(timing_frame, e); - } - - in_single_threaded_checker_stage.store(false, std::memory_order_relaxed); -} - +#include "checker_global_groups.cpp" gb_internal bool is_string_an_identifier(String s) { isize offset = 0; @@ -7524,7 +7478,9 @@ gb_internal void check_parsed_files(Checker *c) { if (build_context.internal_global_entity_graph) { TIME_SECTION("print global entity graph"); print_global_entity_graph(c); + print_global_groups(&global_groups); } + destroy_global_groups(&global_groups); TIME_SECTION("init preload"); init_preload(c); diff --git a/src/checker.hpp b/src/checker.hpp index 9643fa683..8eecdb6e4 100644 --- a/src/checker.hpp +++ b/src/checker.hpp @@ -917,6 +917,7 @@ gb_internal void check_add_foreign_import_decl(CheckerContext *c, Ast *decl); gb_internal void check_entity_decl(CheckerContext *c, Entity *e, DeclInfo *d, Type *named_type); +gb_internal void global_group_check_edge(CheckerContext *ctx, Entity *e); gb_internal void wait_for_lazy_entity(CheckerContext *c, Entity *e); gb_internal Ast *remove_type_alias_clutter(Ast *node); gb_internal void check_const_decl(CheckerContext *c, Entity *e, Ast *type_expr, Ast *init_expr, Type *named_type); diff --git a/src/checker_global_groups.cpp b/src/checker_global_groups.cpp new file mode 100644 index 000000000..cf3e3924e --- /dev/null +++ b/src/checker_global_groups.cpp @@ -0,0 +1,769 @@ +// Global entities are checked in groups: the strongly connected components of a dependency graph built +// from syntax, in dependency order. A group only names entities of its own or of finished groups, which +// `-internal-check-global-edges` verifies + +struct GlobalGroup { + i32 start; // into `GlobalGroupGraph::members` + i32 count; + bool done; +}; + +struct GlobalGroupGraph { + Array nodes; + PtrMap node_of; + Array offsets; // node -> the nodes it names, as `targets[offsets[v]..offsets[v+1]]` + Array targets; + Array group_of; + Array groups; // every dependency of a group has a lower index + Array members; // nodes, by group, in source order + + bool active; + i32 current_group; + Entity *current_entity; + isize missing_edges; +}; + +gb_global GlobalGroupGraph global_groups; + +struct GlobalGraphWalk { + Scope *scope; + Array *refs; +}; + +gb_internal void global_graph_walk(GlobalGraphWalk *w, Ast *node); + +gb_internal void global_graph_walk_slice(GlobalGraphWalk *w, Slice const &nodes) { + for (Ast *node : nodes) { + global_graph_walk(w, node); + } +} + +gb_internal void global_graph_add_ref(GlobalGraphWalk *w, Entity *e) { + if (e != nullptr) { + array_add(w->refs, e); + } +} + +// NOTE: names bound within the expression (parameters, fields, '$T') are also looked up globally, which at +// worst adds an edge; only procedure bodies are skipped, as they are checked after this stage +gb_internal void global_graph_walk(GlobalGraphWalk *w, Ast *node) { + if (node == nullptr) { + return; + } + switch (node->kind) { + case Ast_Ident: + global_graph_add_ref(w, scope_lookup(w->scope, node->Ident.interned, node->Ident.hash)); + break; + + case Ast_SelectorExpr: { + Ast *expr = node->SelectorExpr.expr; + Ast *selector = node->SelectorExpr.selector; + if (expr != nullptr && expr->kind == Ast_Ident) { + Entity *e = scope_lookup(w->scope, expr->Ident.interned, expr->Ident.hash); + if (e != nullptr && e->kind == Entity_ImportName && selector != nullptr && selector->kind == Ast_Ident) { + global_graph_add_ref(w, scope_lookup_current(e->ImportName.scope, selector->Ident.interned, selector->Ident.hash)); + } else { + global_graph_add_ref(w, e); + } + } else { + global_graph_walk(w, expr); + } + } break; + + case Ast_PolyType: + global_graph_walk(w, node->PolyType.specialization); + break; + case Ast_Ellipsis: + global_graph_walk(w, node->Ellipsis.expr); + break; + case Ast_ProcGroup: + global_graph_walk_slice(w, node->ProcGroup.args); + break; + case Ast_AsmGroup: + global_graph_walk_slice(w, node->AsmGroup.args); + break; + case Ast_ProcLit: + global_graph_walk(w, node->ProcLit.type); + global_graph_walk_slice(w, node->ProcLit.where_clauses); + break; + case Ast_CompoundLit: + global_graph_walk(w, node->CompoundLit.type); + global_graph_walk_slice(w, node->CompoundLit.elems); + global_graph_walk(w, node->CompoundLit.tag); + break; + case Ast_TagExpr: + global_graph_walk(w, node->TagExpr.expr); + break; + case Ast_UnaryExpr: + global_graph_walk(w, node->UnaryExpr.expr); + break; + case Ast_BinaryExpr: + global_graph_walk(w, node->BinaryExpr.left); + global_graph_walk(w, node->BinaryExpr.right); + break; + case Ast_ParenExpr: + global_graph_walk(w, node->ParenExpr.expr); + break; + case Ast_SelectorCallExpr: + global_graph_walk(w, node->SelectorCallExpr.expr); + global_graph_walk(w, node->SelectorCallExpr.call); + break; + case Ast_IndexExpr: + global_graph_walk(w, node->IndexExpr.expr); + global_graph_walk(w, node->IndexExpr.index); + break; + case Ast_MatrixIndexExpr: + global_graph_walk(w, node->MatrixIndexExpr.expr); + global_graph_walk(w, node->MatrixIndexExpr.row_index); + global_graph_walk(w, node->MatrixIndexExpr.column_index); + break; + case Ast_DerefExpr: + global_graph_walk(w, node->DerefExpr.expr); + break; + case Ast_SliceExpr: + global_graph_walk(w, node->SliceExpr.expr); + global_graph_walk(w, node->SliceExpr.low); + global_graph_walk(w, node->SliceExpr.high); + break; + case Ast_CallExpr: + global_graph_walk(w, node->CallExpr.proc); + global_graph_walk_slice(w, node->CallExpr.args); + break; + case Ast_FieldValue: + global_graph_walk(w, node->FieldValue.field); + global_graph_walk(w, node->FieldValue.value); + break; + case Ast_EnumFieldValue: + global_graph_walk(w, node->EnumFieldValue.value); + break; + case Ast_TernaryIfExpr: + global_graph_walk(w, node->TernaryIfExpr.x); + global_graph_walk(w, node->TernaryIfExpr.cond); + global_graph_walk(w, node->TernaryIfExpr.y); + break; + case Ast_TernaryWhenExpr: + global_graph_walk(w, node->TernaryWhenExpr.x); + global_graph_walk(w, node->TernaryWhenExpr.cond); + global_graph_walk(w, node->TernaryWhenExpr.y); + break; + case Ast_OrElseExpr: + global_graph_walk(w, node->OrElseExpr.x); + global_graph_walk(w, node->OrElseExpr.y); + break; + case Ast_OrReturnExpr: + global_graph_walk(w, node->OrReturnExpr.expr); + break; + case Ast_OrBranchExpr: + global_graph_walk(w, node->OrBranchExpr.expr); + break; + case Ast_TypeAssertion: + global_graph_walk(w, node->TypeAssertion.expr); + global_graph_walk(w, node->TypeAssertion.type); + break; + case Ast_TypeCast: + global_graph_walk(w, node->TypeCast.type); + global_graph_walk(w, node->TypeCast.expr); + break; + case Ast_AutoCast: + global_graph_walk(w, node->AutoCast.expr); + break; + + case Ast_Field: + global_graph_walk(w, node->Field.type); + global_graph_walk(w, node->Field.default_value); + break; + case Ast_BitFieldField: + global_graph_walk(w, node->BitFieldField.type); + global_graph_walk(w, node->BitFieldField.bit_size); + break; + case Ast_FieldList: + global_graph_walk_slice(w, node->FieldList.list); + break; + + case Ast_TypeidType: + global_graph_walk(w, node->TypeidType.specialization); + break; + case Ast_HelperType: + global_graph_walk(w, node->HelperType.type); + break; + case Ast_DistinctType: + global_graph_walk(w, node->DistinctType.type); + break; + case Ast_ProcType: + global_graph_walk(w, node->ProcType.params); + global_graph_walk(w, node->ProcType.results); + break; + case Ast_RelativeType: + global_graph_walk(w, node->RelativeType.tag); + global_graph_walk(w, node->RelativeType.type); + break; + case Ast_PointerType: + global_graph_walk(w, node->PointerType.type); + global_graph_walk(w, node->PointerType.tag); + break; + case Ast_MultiPointerType: + global_graph_walk(w, node->MultiPointerType.type); + break; + case Ast_ArrayType: + global_graph_walk(w, node->ArrayType.count); + global_graph_walk(w, node->ArrayType.elem); + global_graph_walk(w, node->ArrayType.tag); + break; + case Ast_DynamicArrayType: + global_graph_walk(w, node->DynamicArrayType.elem); + global_graph_walk(w, node->DynamicArrayType.tag); + break; + case Ast_FixedCapacityDynamicArrayType: + global_graph_walk(w, node->FixedCapacityDynamicArrayType.elem); + global_graph_walk(w, node->FixedCapacityDynamicArrayType.capacity); + global_graph_walk(w, node->FixedCapacityDynamicArrayType.tag); + break; + case Ast_StructType: + global_graph_walk_slice(w, node->StructType.fields); + global_graph_walk(w, node->StructType.polymorphic_params); + global_graph_walk(w, node->StructType.align); + global_graph_walk(w, node->StructType.min_field_align); + global_graph_walk(w, node->StructType.max_field_align); + global_graph_walk_slice(w, node->StructType.where_clauses); + break; + case Ast_UnionType: + global_graph_walk_slice(w, node->UnionType.variants); + global_graph_walk(w, node->UnionType.polymorphic_params); + global_graph_walk_slice(w, node->UnionType.where_clauses); + break; + case Ast_EnumType: + global_graph_walk(w, node->EnumType.base_type); + for (Ast *field : node->EnumType.fields) { + if (field->kind == Ast_EnumFieldValue) { + global_graph_walk(w, field->EnumFieldValue.value); + } + } + break; + case Ast_BitSetType: + global_graph_walk(w, node->BitSetType.elem); + global_graph_walk(w, node->BitSetType.underlying); + break; + case Ast_BitFieldType: + global_graph_walk(w, node->BitFieldType.backing_type); + global_graph_walk_slice(w, node->BitFieldType.fields); + break; + case Ast_MapType: + global_graph_walk(w, node->MapType.count); + global_graph_walk(w, node->MapType.key); + global_graph_walk(w, node->MapType.value); + break; + case Ast_MatrixType: + global_graph_walk(w, node->MatrixType.row_count); + global_graph_walk(w, node->MatrixType.column_count); + global_graph_walk(w, node->MatrixType.elem); + break; + + case Ast_AsmTemplate: + global_graph_walk(w, node->AsmTemplate.signature); + global_graph_walk_slice(w, node->AsmTemplate.specs); + global_graph_walk_slice(w, node->AsmTemplate.clobbers); + global_graph_walk_slice(w, node->AsmTemplate.instructions); + break; + case Ast_AsmSpec: + global_graph_walk(w, node->AsmSpec.type); + global_graph_walk(w, node->AsmSpec.value); + for (Ast *d : node->AsmSpec.directives) { + global_graph_walk(w, d); + } + break; + case Ast_AsmClobber: + global_graph_walk(w, node->AsmClobber.value); + break; + case Ast_AsmInstruction: + global_graph_walk_slice(w, node->AsmInstruction.operands); + break; + case Ast_AsmMemoryTerm: + global_graph_walk(w, node->AsmMemoryTerm.operand); + global_graph_walk(w, node->AsmMemoryTerm.scale); + break; + case Ast_AsmMemoryOperand: + global_graph_walk(w, node->AsmMemoryOperand.segment_override); + global_graph_walk_slice(w, node->AsmMemoryOperand.terms); + global_graph_walk(w, node->AsmMemoryOperand.type); + break; + case Ast_AsmRegisterGroup: + for (Ast *r : node->AsmRegisterGroup.registers) { + global_graph_walk(w, r); + } + global_graph_walk(w, node->AsmRegisterGroup.type); + break; + case Ast_AsmDirective: + global_graph_walk_slice(w, node->AsmDirective.operands); + break; + } +} + +gb_internal void global_graph_walk_entity(GlobalGraphWalk *w, Entity *e, DeclInfo *d) { + w->scope = d->scope; + global_graph_walk(w, d->type_expr); + global_graph_walk(w, d->init_expr); + for (Ast *attr : d->attributes) { + if (attr->kind != Ast_Attribute) { + continue; + } + for (Ast *elem : attr->Attribute.elems) { + if (elem->kind == Ast_FieldValue) { + global_graph_walk(w, elem->FieldValue.value); + } + } + } + if (e->kind == Entity_Procedure) { + global_graph_walk(w, e->Procedure.foreign_library_ident); + } else if (e->kind == Entity_Variable) { + global_graph_walk(w, e->Variable.foreign_library_ident); + } +} + +gb_internal bool is_global_graph_node(Entity *e) { + if (e->state == EntityState_Resolved) { + return false; + } + DeclInfo *d = e->decl_info; + if (d == nullptr || e->scope == nullptr || d->scope != e->scope || (e->scope->flags & ScopeFlag_File) == 0) { + return false; + } + switch (e->kind) { + case Entity_Constant: + case Entity_TypeName: + case Entity_Variable: + case Entity_Procedure: + case Entity_ProcGroup: + case Entity_AsmTemplate: + return true; + } + return false; +} + +gb_internal i32 global_graph_add_node(GlobalGroupGraph *g, Entity *e) { + i32 *found = map_get(&g->node_of, e); + if (found != nullptr) { + return *found; + } + i32 v = cast(i32)g->nodes.count; + map_set(&g->node_of, e, v); + array_add(&g->nodes, e); + return v; +} + +gb_internal u64 global_group_random(u64 *state) { + *state = *state*6364136223846793005ull + 1442695040888963407ull; + return *state >> 33; +} + +// The nodes `[lo, hi)` walked on one thread; a name that is not a node yet is kept as an entity in `refs` +struct GlobalGraphWalkChunk { + GlobalGroupGraph *g; + i32 lo, hi; + Array targets; + Array target_ends; // per node + Array refs; + Array ref_ends; // per node +}; + +gb_internal WORKER_TASK_PROC(global_graph_walk_worker) { + GlobalGraphWalkChunk *chunk = cast(GlobalGraphWalkChunk *)data; + GlobalGroupGraph *g = chunk->g; + + auto refs = array_make(heap_allocator(), 0, 64); + defer (array_free(&refs)); + GlobalGraphWalk w = {}; + w.refs = &refs; + for (i32 v = chunk->lo; v < chunk->hi; v++) { + Entity *e = g->nodes[v]; + array_clear(&refs); + global_graph_walk_entity(&w, e, e->decl_info); + for (Entity *r : refs) { + i32 *found = map_get(&g->node_of, r); + if (found != nullptr) { + array_add(&chunk->targets, *found); + } else if (r->flags & EntityFlag_Lazy) { + array_add(&chunk->refs, r); + } + } + array_add(&chunk->target_ends, cast(i32)chunk->targets.count); + array_add(&chunk->ref_ends, cast(i32)chunk->refs.count); + } + return 0; +} + +gb_internal void build_global_groups(Checker *c, GlobalGroupGraph *g) { + array_init(&g->nodes, heap_allocator(), 0, c->info.entities.count); + map_init(&g->node_of, c->info.entities.count); + for (Entity *e : c->info.entities) { + if ((e->flags & EntityFlag_Lazy) == 0 && is_global_graph_node(e)) { + global_graph_add_node(g, e); + } + } + + // NOTE: walked in parallel, as nothing writes to the scopes now + i32 const CHUNK_SIZE = 64; + i32 initial_count = cast(i32)g->nodes.count; + auto chunks = array_make(heap_allocator(), (initial_count + CHUNK_SIZE-1)/CHUNK_SIZE); + defer (array_free(&chunks)); + for (isize i = 0; i < chunks.count; i++) { + GlobalGraphWalkChunk *chunk = &chunks[i]; + *chunk = {}; + chunk->g = g; + chunk->lo = cast(i32)(i*CHUNK_SIZE); + chunk->hi = gb_min(chunk->lo + CHUNK_SIZE, initial_count); + array_init(&chunk->targets, heap_allocator(), 0, 4*CHUNK_SIZE); + array_init(&chunk->target_ends, heap_allocator(), 0, CHUNK_SIZE); + array_init(&chunk->refs, heap_allocator(), 0); + array_init(&chunk->ref_ends, heap_allocator(), 0, CHUNK_SIZE); + thread_pool_add_task(global_graph_walk_worker, chunk); + } + thread_pool_wait(); + + auto edge_from = array_make(heap_allocator(), 0, 4*g->nodes.count); + auto edge_to = array_make(heap_allocator(), 0, 4*g->nodes.count); + auto refs = array_make(heap_allocator(), 0, 64); + defer (array_free(&edge_from)); + defer (array_free(&edge_to)); + defer (array_free(&refs)); + + auto add_ref = [&](i32 v, Entity *r) { + i32 *found = map_get(&g->node_of, r); + if (found != nullptr) { + array_add(&edge_from, v); + array_add(&edge_to, *found); + } else if ((r->flags & EntityFlag_Lazy) && is_global_graph_node(r)) { + // NOTE: a lazy entity becomes a node once a node names it + array_add(&edge_from, v); + array_add(&edge_to, global_graph_add_node(g, r)); + } + }; + + GlobalGraphWalk w = {}; + w.refs = &refs; + i32 first_of_decl = -1; + for (i32 v = 0; v < g->nodes.count; v++) { + Entity *e = g->nodes[v]; + DeclInfo *d = e->decl_info; + + // NOTE: entities sharing one declaration share its AST, e.g. `a, b: struct{x: int}`, so they share a group; + // in source order they are adjacent, and lazy ones are only checked under `lazy_mutex` + if (first_of_decl >= 0 && d->decl_node != nullptr && g->nodes[first_of_decl]->decl_info->decl_node == d->decl_node) { + array_add(&edge_from, v); + array_add(&edge_to, first_of_decl); + array_add(&edge_from, first_of_decl); + array_add(&edge_to, v); + } else { + first_of_decl = v; + } + + if (v < initial_count) { + GlobalGraphWalkChunk *chunk = &chunks[v / CHUNK_SIZE]; + i32 k = v - chunk->lo; + for (i32 i = k > 0 ? chunk->target_ends[k-1] : 0; i < chunk->target_ends[k]; i++) { + array_add(&edge_from, v); + array_add(&edge_to, chunk->targets[i]); + } + for (i32 i = k > 0 ? chunk->ref_ends[k-1] : 0; i < chunk->ref_ends[k]; i++) { + add_ref(v, chunk->refs[i]); + } + } else { + array_clear(&refs); + global_graph_walk_entity(&w, e, d); + for (Entity *r : refs) { + add_ref(v, r); + } + } + } + for (GlobalGraphWalkChunk &chunk : chunks) { + array_free(&chunk.targets); + array_free(&chunk.target_ends); + array_free(&chunk.refs); + array_free(&chunk.ref_ends); + } + + i32 node_count = cast(i32)g->nodes.count; + array_init(&g->offsets, heap_allocator(), node_count+1); + array_init(&g->targets, heap_allocator(), edge_to.count); + for (i32 v = 0; v <= node_count; v++) { + g->offsets[v] = 0; + } + for (i32 from : edge_from) { + g->offsets[from+1] += 1; + } + for (i32 v = 0; v < node_count; v++) { + g->offsets[v+1] += g->offsets[v]; + } + { + auto fill = array_clone(heap_allocator(), g->offsets); + defer (array_free(&fill)); + for (isize i = 0; i < edge_from.count; i++) { + g->targets[fill[edge_from[i]]++] = edge_to[i]; + } + } + + array_init(&g->group_of, heap_allocator(), node_count); + i32 group_count = global_graph_scc(node_count, g->offsets, g->targets, &g->group_of); + + array_init(&g->groups, heap_allocator(), group_count); + array_init(&g->members, heap_allocator(), node_count); + for (i32 gi = 0; gi < group_count; gi++) { + g->groups[gi] = {}; + } + for (i32 v = 0; v < node_count; v++) { + g->groups[g->group_of[v]].count += 1; + } + i32 start = 0; + for (i32 gi = 0; gi < group_count; gi++) { + g->groups[gi].start = start; + start += g->groups[gi].count; + g->groups[gi].count = 0; + } + // NOTE: in source order, as `c->info.entities` is sorted; lazy nodes come last, but are not checked here + for (i32 v = 0; v < node_count; v++) { + GlobalGroup *group = &g->groups[g->group_of[v]]; + g->members[group->start + group->count++] = v; + } +} + +gb_internal void global_group_print_entity(Entity *e) { + if (e == nullptr) { + gb_printf_err("?"); + return; + } + global_graph_print_entity(e); +} + +// Called when `e` starts being checked: it must be in the current group or a finished one +gb_internal void global_group_check_edge(CheckerContext *ctx, Entity *e) { + GlobalGroupGraph *g = &global_groups; + if (!g->active) { + return; + } + i32 *v = map_get(&g->node_of, e); + if (v == nullptr) { + if (!is_global_graph_node(e)) { + return; + } + } else { + i32 gi = g->group_of[*v]; + if (gi == g->current_group || g->groups[gi].done) { + return; + } + } + + g->missing_edges += 1; + if (build_context.internal_check_global_edges) { + Entity *by = ctx->decl ? ctx->decl->entity.load() : nullptr; + gb_printf_err("Missing global dependency: "); + global_group_print_entity(by); + gb_printf_err(" needs "); + global_group_print_entity(e); + gb_printf_err(v == nullptr ? ", which is not in the graph" : ""); + if (g->current_entity != by) { + gb_printf_err(", while checking "); + global_group_print_entity(g->current_entity); + } + gb_printf_err("\n"); + } +} + +// NOTE: members in a fixed order, as which member of a cycle is entered first can decide whether it checks, +// e.g. an enum whose values are `union_variant_index`es of a union with pointers back to it +gb_internal void check_global_group(Checker *c, GlobalGroupGraph *g, i32 gi) { + GlobalGroup *group = &g->groups[gi]; + i32 *members = g->members.data + group->start; + + g->current_group = gi; + for (i32 k = 0; k < group->count; k++) { + Entity *e = g->nodes[members[k]]; + if (e->flags & EntityFlag_Lazy) { + // NOTE: only checked when something uses it; the group orders it after what it names + continue; + } + g->current_entity = e; + GlobalEntityTimingFrame timing_frame = global_entity_timing_begin(e); + check_single_global_entity(c, e, e->decl_info); + if (e->type != nullptr && is_type_typed(e->type)) { + for (Type *t = nullptr; mpsc_dequeue(&c->soa_types_to_complete, &t); /**/) { + complete_soa_type(c, t, false); + } + + (void)type_size_of(e->type); + (void)type_align_of(e->type); + } + global_entity_timing_end(timing_frame, e); + } + group->done = true; + g->current_group = -1; + g->current_entity = nullptr; +} + +// Groups in dependency order; with `-internal-shuffle-global-entities`, a random one of the groups whose +// dependencies are done, as a parallel checker might +gb_internal void check_global_groups(Checker *c, GlobalGroupGraph *g) { + i32 group_count = cast(i32)g->groups.count; + u64 seed = build_context.internal_shuffle_global_entities; + if (seed == 0) { + for (i32 gi = 0; gi < group_count; gi++) { + check_global_group(c, g, gi); + } + return; + } + + auto dependents = array_make >(heap_allocator(), group_count); + auto dep_count = array_make (heap_allocator(), group_count); + auto seen = array_make (heap_allocator(), group_count); + auto ready = array_make (heap_allocator(), 0, group_count); + defer ({ + for (auto &d : dependents) { + array_free(&d); + } + array_free(&dependents); + }); + defer (array_free(&dep_count)); + defer (array_free(&seen)); + defer (array_free(&ready)); + + for (i32 gi = 0; gi < group_count; gi++) { + dep_count[gi] = 0; + dependents[gi] = {}; + seen[gi] = -1; + } + for (i32 gi = 0; gi < group_count; gi++) { + GlobalGroup const &group = g->groups[gi]; + for (i32 k = 0; k < group.count; k++) { + i32 v = g->members[group.start + k]; + for (i32 i = g->offsets[v]; i < g->offsets[v+1]; i++) { + i32 dep = g->group_of[g->targets[i]]; + if (dep != gi && seen[dep] != gi) { + seen[dep] = gi; + dep_count[gi] += 1; + if (dependents[dep].allocator.proc == nullptr) { + array_init(&dependents[dep], heap_allocator()); + } + array_add(&dependents[dep], gi); + } + } + } + if (dep_count[gi] == 0) { + array_add(&ready, gi); + } + } + + u64 state = seed; + isize checked = 0; + while (ready.count > 0) { + isize i = cast(isize)(global_group_random(&state) % cast(u64)ready.count); + i32 gi = ready[i]; + ready[i] = ready[ready.count-1]; + array_pop(&ready); + + check_global_group(c, g, gi); + checked += 1; + for (i32 next : dependents[gi]) { + if (--dep_count[next] == 0) { + array_add(&ready, next); + } + } + } + GB_ASSERT(checked == group_count); +} + +gb_internal void destroy_global_groups(GlobalGroupGraph *g) { + array_free(&g->nodes); + map_destroy(&g->node_of); + array_free(&g->offsets); + array_free(&g->targets); + array_free(&g->group_of); + array_free(&g->groups); + array_free(&g->members); +} + +// -internal-global-entity-graph: the graph the groups come from, weighted by the measured self times +gb_internal void print_global_groups(GlobalGroupGraph *g) { + u64 const freq = time_stamp__freq(); + i32 group_count = cast(i32)g->groups.count; + + auto ticks = array_make(heap_allocator(), group_count); + auto path = array_make(heap_allocator(), group_count); + auto seen = array_make(heap_allocator(), group_count); + defer (array_free(&ticks)); + defer (array_free(&path)); + defer (array_free(&seen)); + + u64 total = 0; + i32 largest = 0; + isize cyclic = 0; + mutex_lock(&global_entity_time_mutex); + for (i32 gi = 0; gi < group_count; gi++) { + GlobalGroup const &group = g->groups[gi]; + ticks[gi] = 0; + seen[gi] = -1; + for (i32 k = 0; k < group.count; k++) { + GlobalEntityTime *t = map_get(&global_entity_times, g->nodes[g->members[group.start + k]]); + ticks[gi] += t ? t->ticks : 0; + } + total += ticks[gi]; + largest = gb_max(largest, group.count); + cyclic += group.count > 1; + } + mutex_unlock(&global_entity_time_mutex); + + u64 critical = 0; + for (i32 gi = 0; gi < group_count; gi++) { + GlobalGroup const &group = g->groups[gi]; + u64 longest = 0; + for (i32 k = 0; k < group.count; k++) { + i32 v = g->members[group.start + k]; + for (i32 i = g->offsets[v]; i < g->offsets[v+1]; i++) { + i32 dep = g->group_of[g->targets[i]]; + if (dep != gi && seen[dep] != gi) { + seen[dep] = gi; + longest = gb_max(longest, path[dep]); + } + } + } + path[gi] = ticks[gi] + longest; + critical = gb_max(critical, path[gi]); + } + + f64 total_ms = global_graph_ms(total, freq); + f64 critical_ms = global_graph_ms(critical, freq); + gb_printf_err("Global groups (syntactic graph, as scheduled)\n"); + gb_printf_err(" nodes: %td, edges: %td, groups: %d (%td with a cycle), largest has %d entities\n", + g->nodes.count, g->targets.count, group_count, cyclic, largest); + gb_printf_err(" critical path: %.3f ms of %.3f ms -> at most %.2fx speedup\n", + critical_ms, total_ms, critical_ms > 0 ? total_ms/critical_ms : 0.0); + gb_printf_err(" missing edges: %td\n", g->missing_edges); +} + +gb_internal void check_all_global_entities(Checker *c) { + in_single_threaded_checker_stage.store(true, std::memory_order_relaxed); + + // NOTE(bill): the runtime types the checker looks up by name rather than through a declaration + init_preload(c); + { + u32 hash = 0; + InternedString name = string_interner_insert(str_lit("Load_Directory_File"), 0, &hash); + if (scope_lookup_current(c->info.runtime_package->scope, name, hash) != nullptr) { + init_core_load_directory_file(c); + } + } + + TIME_SECTION("check all global entities - build groups"); + GlobalGroupGraph *g = &global_groups; + build_global_groups(c, g); + + TIME_SECTION("check all global entities - check groups"); + g->active = true; + g->current_group = -1; + check_global_groups(c, g); + g->active = false; + + if (build_context.internal_check_global_edges && g->missing_edges > 0) { + gb_printf_err("%td missing global dependencies\n", g->missing_edges); + gb_exit(1); + } + + in_single_threaded_checker_stage.store(false, std::memory_order_relaxed); +} diff --git a/src/main.cpp b/src/main.cpp index 5a3f4e3da..9d661bb16 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -535,6 +535,7 @@ enum BuildFlagKind { BuildFlag_InternalEnableRVO, BuildFlag_InternalGlobalEntityGraph, BuildFlag_InternalShuffleGlobalEntities, + BuildFlag_InternalCheckGlobalEdges, BuildFlag_Sanitize, BuildFlag_LTO, @@ -799,6 +800,7 @@ gb_internal bool parse_build_flags(Array args) { add_flag(&build_flags, BuildFlag_InternalEnableRVO, str_lit("internal-enable-rvo"), BuildFlagParam_None, Command_all); add_flag(&build_flags, BuildFlag_InternalGlobalEntityGraph, str_lit("internal-global-entity-graph"), BuildFlagParam_None, Command__does_check); add_flag(&build_flags, BuildFlag_InternalShuffleGlobalEntities, str_lit("internal-shuffle-global-entities"), BuildFlagParam_Integer, Command__does_check); + add_flag(&build_flags, BuildFlag_InternalCheckGlobalEdges, str_lit("internal-check-global-edges"), BuildFlagParam_None, Command__does_check); add_flag(&build_flags, BuildFlag_Sanitize, str_lit("sanitize"), BuildFlagParam_String, Command__does_build, true); @@ -1855,6 +1857,9 @@ gb_internal bool parse_build_flags(Array args) { GB_ASSERT(value.kind == ExactValue_Integer); build_context.internal_shuffle_global_entities = cast(u64)big_int_to_i64(&value.value_integer); break; + case BuildFlag_InternalCheckGlobalEdges: + build_context.internal_check_global_edges = true; + break; case BuildFlag_Sanitize: From 8fe3b9b57bb28fcafd5e9a8b96c2f14b20fbe064 Mon Sep 17 00:00:00 2001 From: Louis Novy <101842021+louisnovy@users.noreply.github.com> Date: Tue, 29 Sep 2026 02:50:32 -0400 Subject: [PATCH 126/215] Fix compound literals of array backed bit_fields --- src/llvm_backend_const.cpp | 8 ++++---- src/llvm_backend_expr.cpp | 8 ++++---- tests/internal/test_bit_field.odin | 16 ++++++++++++++++ 3 files changed, 24 insertions(+), 8 deletions(-) diff --git a/src/llvm_backend_const.cpp b/src/llvm_backend_const.cpp index 7a53e3fb1..df674b913 100644 --- a/src/llvm_backend_const.cpp +++ b/src/llvm_backend_const.cpp @@ -801,14 +801,14 @@ gb_internal lbValue lb_const_value_bit_field(lbModule *m, Type *type, Ast *value GB_ASSERT(mask_width > 0); bits_to_set -= mask_width; - LLVMValueRef mask = lb_const_low_bits_mask(vt, mask_width); + LLVMValueRef mask = lb_const_low_bits_mask(lit, mask_width); - LLVMValueRef to_set = LLVMBuildAnd(m->const_dummy_builder, val, mask, ""); + LLVMValueRef to_set = LLVMBuildIntCast2(m->const_dummy_builder, val, lit, false, ""); + to_set = LLVMBuildAnd(m->const_dummy_builder, to_set, mask, ""); if (elem_bit_offset != 0) { - to_set = LLVMBuildShl(m->const_dummy_builder, to_set, LLVMConstInt(vt, elem_bit_offset, false), ""); + to_set = LLVMBuildShl(m->const_dummy_builder, to_set, LLVMConstInt(lit, elem_bit_offset, false), ""); } - to_set = LLVMBuildTrunc(m->const_dummy_builder, to_set, lit, ""); if (LLVMIsNull(elems[elem_idx])) { elems[elem_idx] = to_set; // don't even bother doing `0 | to_set` diff --git a/src/llvm_backend_expr.cpp b/src/llvm_backend_expr.cpp index 0e90d8d74..f7096b795 100644 --- a/src/llvm_backend_expr.cpp +++ b/src/llvm_backend_expr.cpp @@ -6273,14 +6273,14 @@ gb_internal lbAddr lb_build_addr_compound_lit(lbProcedure *p, Ast *expr) { GB_ASSERT(mask_width > 0); bits_to_set -= mask_width; - LLVMValueRef mask = lb_const_low_bits_mask(vt, mask_width); + LLVMValueRef mask = lb_const_low_bits_mask(lit, mask_width); - LLVMValueRef to_set = LLVMBuildAnd(p->builder, val, mask, ""); + LLVMValueRef to_set = LLVMBuildIntCast2(p->builder, val, lit, false, ""); + to_set = LLVMBuildAnd(p->builder, to_set, mask, ""); if (elem_bit_offset != 0) { - to_set = LLVMBuildShl(p->builder, to_set, LLVMConstInt(vt, elem_bit_offset, false), ""); + to_set = LLVMBuildShl(p->builder, to_set, LLVMConstInt(lit, elem_bit_offset, false), ""); } - to_set = LLVMBuildTrunc(p->builder, to_set, lit, ""); if (LLVMIsNull(elems[elem_idx])) { elems[elem_idx] = to_set; // don't even bother doing `0 | to_set` diff --git a/tests/internal/test_bit_field.odin b/tests/internal/test_bit_field.odin index 71e77c3e0..a6fd3d363 100644 --- a/tests/internal/test_bit_field.odin +++ b/tests/internal/test_bit_field.odin @@ -196,3 +196,19 @@ bit_field_constant_field_access :: proc(t: ^testing.T) { testing.expect_value(t, v.c, FULL.c) testing.expect_value(t, v.d, FULL.d) } + +// a compound literal of an array backed bit_field used to generate invalid LLVM IR for a field set from +// a variable and would lose the high bits of a field narrower than the array's elements +@(test) +bit_field_array_backed_compound_literal :: proc(t: ^testing.T) { + BF :: bit_field [2]u16 { a: u8 | 5, b: u8 | 5 } + + v := u8(31) + x := BF{ b = v, a = 1 } + testing.expect_value(t, x.a, 1) + testing.expect_value(t, x.b, 31) + + y := BF{ b = 31, a = 1 } + testing.expect_value(t, y.a, 1) + testing.expect_value(t, y.b, 31) +} From f7ee910f936f88d446d5454fa0075d69892dc2fb Mon Sep 17 00:00:00 2001 From: gingerBill Date: Thu, 1 Oct 2026 17:40:27 +0100 Subject: [PATCH 127/215] Merge `checker_global_*.cpp` into `checker_global.cpp`; base `-internal-global-entity-graph` on the scheduled groups --- src/checker.cpp | 5 +- src/checker.hpp | 9 + src/checker_global.cpp | 1570 +++++++++++++++++++++++++++++++++ src/checker_global_graph.cpp | 539 ----------- src/checker_global_groups.cpp | 769 ---------------- src/checker_global_when.cpp | 474 ---------- 6 files changed, 1580 insertions(+), 1786 deletions(-) create mode 100644 src/checker_global.cpp delete mode 100644 src/checker_global_graph.cpp delete mode 100644 src/checker_global_groups.cpp delete mode 100644 src/checker_global_when.cpp diff --git a/src/checker.cpp b/src/checker.cpp index fa454f404..7acd8f3f8 100644 --- a/src/checker.cpp +++ b/src/checker.cpp @@ -4574,7 +4574,6 @@ gb_internal DECL_ATTRIBUTE_PROC(asm_decl_attribute) { return false; } -#include "checker_global_graph.cpp" #include "check_expr.cpp" #include "check_builtin.cpp" #include "check_type.cpp" @@ -5339,7 +5338,6 @@ gb_internal void check_single_global_entity(Checker *c, Entity *e, DeclInfo *d) check_entity_decl(ctx, e, d, nullptr); } -#include "checker_global_groups.cpp" gb_internal bool is_string_an_identifier(String s) { isize offset = 0; @@ -5996,7 +5994,7 @@ gb_internal void check_export_entities(Checker *c) { thread_pool_wait(); } -#include "checker_global_when.cpp" +#include "checker_global.cpp" gb_internal void check_import_entities(Checker *c) { TEMPORARY_ALLOCATOR_GUARD(); @@ -7477,7 +7475,6 @@ gb_internal void check_parsed_files(Checker *c) { if (build_context.internal_global_entity_graph) { TIME_SECTION("print global entity graph"); - print_global_entity_graph(c); print_global_groups(&global_groups); } destroy_global_groups(&global_groups); diff --git a/src/checker.hpp b/src/checker.hpp index 8eecdb6e4..05eed75ef 100644 --- a/src/checker.hpp +++ b/src/checker.hpp @@ -918,6 +918,15 @@ gb_internal void check_add_foreign_import_decl(CheckerContext *c, Ast *decl); gb_internal void check_entity_decl(CheckerContext *c, Entity *e, DeclInfo *d, Type *named_type); gb_internal void global_group_check_edge(CheckerContext *ctx, Entity *e); + +// -internal-global-entity-graph +struct GlobalEntityTimingFrame { + u64 start; + u64 saved_child_ticks; + bool active; +}; +gb_internal GlobalEntityTimingFrame global_entity_timing_begin(Entity *e); +gb_internal void global_entity_timing_end(GlobalEntityTimingFrame const &f, Entity *e); gb_internal void wait_for_lazy_entity(CheckerContext *c, Entity *e); gb_internal Ast *remove_type_alias_clutter(Ast *node); gb_internal void check_const_decl(CheckerContext *c, Entity *e, Ast *type_expr, Ast *init_expr, Type *named_type); diff --git a/src/checker_global.cpp b/src/checker_global.cpp new file mode 100644 index 000000000..cf9bb6e84 --- /dev/null +++ b/src/checker_global.cpp @@ -0,0 +1,1570 @@ +// Global declarations: 'when's and 'foreign' blocks resolved on demand in `check_import_entities`, then the +// global entities checked in groups of a dependency graph, plus what `-internal-global-entity-graph` reports + +// Timing for -internal-global-entity-graph: the self time of each global entity, and the parts of +// `check_import_entities` + +struct GlobalEntityTime { + u64 ticks; + bool in_global_loop; +}; + +enum GlobalImportStagePart { + GlobalImportStage_Imports, + GlobalImportStage_Placeholders, + GlobalImportStage_DeclSources, + GlobalImportStage_TypeAliases, + GlobalImportStage_DelayedExprs, + + GlobalImportStage_COUNT, +}; + +gb_global char const *global_import_stage_names[GlobalImportStage_COUNT] = { + "imports", + "'when' and 'foreign' placeholders", + "resolve 'when' and 'foreign' blocks", + "type alias correction", + "delayed expressions (#assert etc.)", +}; + +gb_global u64 global_import_stage_ticks[GlobalImportStage_COUNT]; + +gb_internal u64 global_import_stage_begin(void) { + return build_context.internal_global_entity_graph ? time_stamp_time_now() : 0; +} + +gb_internal void global_import_stage_end(GlobalImportStagePart part, u64 start) { + if (build_context.internal_global_entity_graph) { + global_import_stage_ticks[part] += time_stamp_time_now() - start; + } +} + +gb_global BlockingMutex global_entity_time_mutex; +gb_global PtrMap global_entity_times; +gb_thread_local u64 global_entity_child_ticks; + +gb_internal GlobalEntityTimingFrame global_entity_timing_begin(Entity *e) { + GlobalEntityTimingFrame f = {}; + if (!build_context.internal_global_entity_graph) { + return f; + } + if (e->scope == nullptr || (e->scope->flags & ScopeFlag_File) == 0) { + return f; + } + + f.saved_child_ticks = global_entity_child_ticks; + global_entity_child_ticks = 0; + + f.active = true; + f.start = time_stamp_time_now(); + return f; +} + +gb_internal void global_entity_timing_end(GlobalEntityTimingFrame const &f, Entity *e) { + if (!f.active) { + return; + } + u64 total = time_stamp_time_now() - f.start; + u64 self = total - gb_min(total, global_entity_child_ticks); + global_entity_child_ticks = f.saved_child_ticks + total; + + bool in_global_loop = in_single_threaded_checker_stage.load(std::memory_order_relaxed); + + MUTEX_GUARD(&global_entity_time_mutex); + GlobalEntityTime *found = map_get(&global_entity_times, e); + if (found) { + found->ticks += self; + } else { + map_set(&global_entity_times, e, GlobalEntityTime{self, in_global_loop}); + } +} + + +// Global 'when's and 'foreign' blocks: every name one may declare is a placeholder in its scope, and the +// first lookup of a placeholder resolves them, so the order of files and declarations does not matter + +struct GlobalDeclSource { + Ast * node; // WhenStmt or ForeignBlockDecl + AstFile * file; + GlobalDeclSource *parent; + bool in_else; // within the else branch of `parent` + bool reachable; + bool reported_cycle; + EntityState state; + ForeignContext foreign_context; // of a resolved 'foreign' block +}; + +struct GlobalDeclSourceFrame { + GlobalDeclSource *source; + InternedString needs; // the placeholder being resolved for it +}; + +gb_global Array global_decl_sources; +gb_global Array global_decl_source_stack; +gb_global Array global_placeholder_scopes; +gb_global CheckerContext global_decl_source_export_ctx; +gb_global UntypedExprInfoMap global_decl_source_export_untyped; + +enum : u8 { + PlaceholderScope_File = 1<<0, + PlaceholderScope_Pkg = 1<<1, +}; + +// -1 when 'private' has a value that is not a string literal +gb_internal i32 syntactic_visibility(Array const &attributes) { + for (Ast *attr : attributes) { + if (attr->kind != Ast_Attribute) { + continue; + } + for (Ast *elem : attr->Attribute.elems) { + if (elem->kind == Ast_Ident && elem->Ident.token.string == "private") { + return EntityVisiblity_PrivateToPackage; + } + if (elem->kind == Ast_FieldValue && + elem->FieldValue.field->kind == Ast_Ident && + elem->FieldValue.field->Ident.token.string == "private") { + Ast *value = elem->FieldValue.value; + if (value != nullptr && value->tav.value.kind == ExactValue_String) { + return value->tav.value.value_string == "file" ? EntityVisiblity_PrivateToFile : EntityVisiblity_PrivateToPackage; + } + return -1; + } + } + } + return EntityVisiblity_Public; +} + +gb_internal bool has_syntactic_attribute(Array const &attributes, String const &name) { + for (Ast *attr : attributes) { + if (attr->kind != Ast_Attribute) { + continue; + } + for (Ast *elem : attr->Attribute.elems) { + Ast *field = elem->kind == Ast_FieldValue ? elem->FieldValue.field : elem; + if (field->kind == Ast_Ident && field->Ident.token.string == name) { + return true; + } + } + } + return false; +} + +gb_internal void add_placeholder(Scope *s, InternedString name, GlobalDeclSource *src) { + if (name.value == 0 || name.is_blank()) { + return; + } + if (s->placeholders == nullptr) { + s->placeholders = permanent_alloc_item>(); + map_init(s->placeholders); + array_add(&global_placeholder_scopes, s); + } + u64 key = name.value; + for (auto *e = multi_map_find_first(s->placeholders, key); e != nullptr; e = multi_map_find_next(s->placeholders, e)) { + if (e->value == src) { + return; + } + } + multi_map_insert(s->placeholders, key, src); +} + +gb_internal void add_placeholders(AstFile *f, u8 scopes, InternedString name, GlobalDeclSource *src) { + if (scopes & PlaceholderScope_File) { + add_placeholder(f->scope, name, src); + } + if (scopes & PlaceholderScope_Pkg) { + add_placeholder(f->pkg->scope, name, src); + } +} + +gb_internal GlobalDeclSource *add_global_decl_source(Ast *node, AstFile *f, GlobalDeclSource *parent, bool in_else) { + GlobalDeclSource *src = permanent_alloc_item(); + src->node = node; + src->file = f; + src->parent = parent; + src->in_else = in_else; + src->reachable = true; + src->state = EntityState_Unresolved; + array_add(&global_decl_sources, src); + return src; +} + +gb_internal void scan_global_decl_sources(AstFile *f, Slice const &stmts, GlobalDeclSource *owner, bool in_else, i32 foreign_visibility); + +gb_internal void scan_global_when_stmt(AstFile *f, Ast *node, GlobalDeclSource *parent, bool in_else, i32 foreign_visibility) { + ast_node(ws, WhenStmt, node); + GlobalDeclSource *src = add_global_decl_source(node, f, parent, in_else); + if (ws->body != nullptr && ws->body->kind == Ast_BlockStmt) { + scan_global_decl_sources(f, ws->body->BlockStmt.stmts, src, false, foreign_visibility); + } + if (ws->else_stmt != nullptr) { + switch (ws->else_stmt->kind) { + case Ast_BlockStmt: + scan_global_decl_sources(f, ws->else_stmt->BlockStmt.stmts, src, true, foreign_visibility); + break; + case Ast_WhenStmt: + scan_global_when_stmt(f, ws->else_stmt, src, true, foreign_visibility); + break; + } + } +} + +gb_internal void scan_global_decl_sources(AstFile *f, Slice const &stmts, GlobalDeclSource *owner, bool in_else, i32 foreign_visibility) { + // NOTE(bill): `owner == nullptr` is the file scope itself, whose other declarations are already collected + for (Ast *decl : stmts) { + switch (decl->kind) { + case_ast_node(vd, ValueDecl, decl); + if (owner == nullptr) { + break; + } + i32 visibility = syntactic_visibility(vd->attributes); + if (visibility == EntityVisiblity_Public) { + visibility = foreign_visibility; + } + if (visibility == EntityVisiblity_Public && (f->flags & AstFile_IsPrivateFile)) { + visibility = EntityVisiblity_PrivateToFile; + } + u8 scopes = PlaceholderScope_Pkg; + if (visibility == EntityVisiblity_PrivateToFile) { + scopes = PlaceholderScope_File; + } else if (visibility < 0) { + scopes = PlaceholderScope_File|PlaceholderScope_Pkg; + } + for (Ast *name : vd->names) { + if (name->kind == Ast_Ident) { + add_placeholders(f, scopes, name->Ident.interned, owner); + } + } + case_end; + + case_ast_node(fl, ForeignImportDecl, decl); + if (owner == nullptr) { + break; + } + String library_name = fl->library_name.string; + if (library_name.len == 0 && fl->fullpaths.count != 0) { + library_name = path_to_entity_name(fl->library_name.string, fl->fullpaths[0]); + } + if (library_name.len != 0) { + u8 scopes = has_syntactic_attribute(fl->attributes, str_lit("export")) ? PlaceholderScope_Pkg : PlaceholderScope_File; + add_placeholders(f, scopes, string_interner_insert(library_name), owner); + } + case_end; + + case_ast_node(fb, ForeignBlockDecl, decl); + GlobalDeclSource *src = add_global_decl_source(decl, f, owner, in_else); + if (fb->body != nullptr && fb->body->kind == Ast_BlockStmt) { + scan_global_decl_sources(f, fb->body->BlockStmt.stmts, src, false, syntactic_visibility(fb->attributes)); + } + case_end; + + case_ast_node(ws, WhenStmt, decl); + scan_global_when_stmt(f, decl, owner, in_else, foreign_visibility); + case_end; + + case_ast_node(es, ExprStmt, decl); + if (owner == nullptr && es->expr->kind == Ast_CallExpr && + es->expr->CallExpr.proc->kind == Ast_BasicDirective && + (decl->state_flags & StateFlag_BeenHandled) == 0) { + decl->state_flags |= StateFlag_BeenHandled; + array_add(&f->delayed_decls_queues[AstDelayQueue_Expr], es->expr); + } + case_end; + } + } +} + +gb_internal bool is_global_decl_source_in_when(GlobalDeclSource *src) { + for (; src != nullptr; src = src->parent) { + if (src->node->kind == Ast_WhenStmt) { + return true; + } + } + return false; +} + +gb_internal Slice global_decl_source_taken_stmts(GlobalDeclSource *src) { + if (src->node->kind == Ast_ForeignBlockDecl) { + Ast *body = src->node->ForeignBlockDecl.body; + if (body != nullptr && body->kind == Ast_BlockStmt) { + return body->BlockStmt.stmts; + } + return {}; + } + ast_node(ws, WhenStmt, src->node); + if (ws->determined_cond) { + if (ws->body != nullptr && ws->body->kind == Ast_BlockStmt) { + return ws->body->BlockStmt.stmts; + } + } else if (ws->else_stmt != nullptr && ws->else_stmt->kind == Ast_BlockStmt) { + return ws->else_stmt->BlockStmt.stmts; + } + return {}; +} + +gb_internal void collect_global_decl_source_stmts(CheckerContext *ctx, Slice const &stmts) { + AstFile *f = ctx->file; + for (Ast *decl : stmts) { + if (decl->kind == Ast_ValueDecl) { + check_collect_value_decl(ctx, decl); + } + } + check_export_entities_in_pkg(&global_decl_source_export_ctx, f->pkg, &global_decl_source_export_untyped); + + // NOTE(bill): after the value declarations, as their attributes are evaluated + for (Ast *decl : stmts) { + switch (decl->kind) { + case_ast_node(fl, ForeignImportDecl, decl); + check_add_foreign_import_decl(ctx, decl); + case_end; + + case_ast_node(es, ExprStmt, decl); + if (es->expr->kind == Ast_CallExpr && es->expr->CallExpr.proc->kind == Ast_BasicDirective && + (decl->state_flags & StateFlag_BeenHandled) == 0) { + decl->state_flags |= StateFlag_BeenHandled; + array_add(&f->delayed_decls_queues[AstDelayQueue_Expr], es->expr); + } + case_end; + } + } +} + +gb_internal Token global_decl_source_token(GlobalDeclSource *src) { + if (src->node->kind == Ast_WhenStmt) { + return src->node->WhenStmt.token; + } + return src->node->ForeignBlockDecl.token; +} + +gb_internal void report_global_decl_source_cycle(GlobalDeclSource *src, InternedString needed) { + if (src->reported_cycle) { + return; + } + src->reported_cycle = true; + + isize start = 0; + for (isize i = global_decl_source_stack.count-1; i >= 0; i--) { + if (global_decl_source_stack[i].source == src) { + start = i; + break; + } + } + + ERROR_BLOCK(); + Token token = global_decl_source_token(src); + error(token, "Cyclic dependency between global '%.*s' declarations", LIT(token.string)); + for (isize i = start; i < global_decl_source_stack.count; i++) { + Token t = global_decl_source_token(global_decl_source_stack[i].source); + InternedString name = i+1 < global_decl_source_stack.count ? global_decl_source_stack[i].needs : needed; + error_line("\t'%.*s' at %s needs '%s', which may be declared by\n", LIT(t.string), token_pos_to_string(t.pos), name.cstring()); + } + error_line("\t'%.*s' at %s\n", LIT(token.string), token_pos_to_string(token.pos)); +} + +gb_internal void resolve_global_decl_source(GlobalDeclSource *src, InternedString needed) { + if (src->state == EntityState_Resolved) { + return; + } + if (src->state == EntityState_InProgress) { + report_global_decl_source_cycle(src, needed); + return; + } + + GlobalDeclSource *foreign_block = nullptr; + if (src->parent != nullptr) { + GlobalDeclSource *parent = src->parent; + resolve_global_decl_source(parent, needed); + if (parent->state != EntityState_Resolved) { + return; + } + bool reachable = parent->reachable; + if (parent->node->kind == Ast_WhenStmt) { + reachable = reachable && parent->node->WhenStmt.determined_cond != src->in_else; + } + if (!reachable) { + src->reachable = false; + src->state = EntityState_Resolved; + return; + } + for (GlobalDeclSource *p = parent; p != nullptr; p = p->parent) { + if (p->node->kind == Ast_ForeignBlockDecl) { + foreign_block = p; + break; + } + } + } + + src->state = EntityState_InProgress; + array_add(&global_decl_source_stack, GlobalDeclSourceFrame{src, {}}); + + CheckerContext ctx = {}; + init_checker_context(&ctx, global_checker_ptr.load(std::memory_order_relaxed)); + UntypedExprInfoMap untyped = {}; + reset_checker_context(&ctx, src->file, &untyped); + if (foreign_block != nullptr) { + ctx.foreign_context = foreign_block->foreign_context; + } + + if (src->node->kind == Ast_WhenStmt) { + ast_node(ws, WhenStmt, src->node); + Operand operand = {Addressing_Invalid}; + check_expr(&ctx, &operand, ws->cond); + if (operand.mode != Addressing_Invalid && !is_type_boolean(operand.type)) { + error(ws->cond, "Non-boolean condition in 'when' statement"); + } + if (operand.mode != Addressing_Constant) { + error(ws->cond, "Non-constant condition in 'when' statement"); + } + ws->is_cond_determined = true; + ws->determined_cond = operand.value.kind == ExactValue_Bool && operand.value.value_bool; + if (ws->body == nullptr || ws->body->kind != Ast_BlockStmt) { + error(ws->cond, "Invalid body for 'when' statement"); + } else if (ws->else_stmt != nullptr && ws->else_stmt->kind != Ast_BlockStmt && ws->else_stmt->kind != Ast_WhenStmt) { + error(ws->else_stmt, "Invalid 'else' statement in 'when' statement"); + } + } else { + ast_node(fb, ForeignBlockDecl, src->node); + if (fb->foreign_library->kind == Ast_Ident) { + ctx.foreign_context.curr_library = fb->foreign_library; + } else { + error(fb->foreign_library, "Foreign block name must be an identifier or 'export'"); + ctx.foreign_context.curr_library = nullptr; + } + check_decl_attributes(&ctx, fb->attributes, foreign_block_decl_attribute, nullptr); + src->foreign_context = ctx.foreign_context; + } + + // NOTE: resolved before its declarations are collected, which evaluates the attributes of 'foreign import's + src->state = EntityState_Resolved; + array_pop(&global_decl_source_stack); + + collect_global_decl_source_stmts(&ctx, global_decl_source_taken_stmts(src)); + + add_untyped_expressions(ctx.info, &untyped); + map_destroy(&untyped); + destroy_checker_context(&ctx); +} + +gb_internal Entity *force_scope_placeholders(Scope *s, InternedString name, u32 hash) { + PtrMap *m = s->placeholders; + bool forced = false; + for (auto *e = multi_map_find_first(m, cast(u64)name.value); e != nullptr; e = multi_map_find_next(m, e)) { + GlobalDeclSource *src = e->value; + if (src->state != EntityState_Resolved) { + if (global_decl_source_stack.count > 0) { + global_decl_source_stack[global_decl_source_stack.count-1].needs = name; + } + resolve_global_decl_source(src, name); + forced = true; + } + } + if (!forced) { + return nullptr; + } + rw_mutex_shared_lock(&s->mutex); + Entity *found = scope_map_get(&s->elements, name, hash); + rw_mutex_shared_unlock(&s->mutex); + return found; +} + +gb_internal void check_vet_when_shadowing_entity(Entity *e) { + if (e == nullptr || e->scope == nullptr || (e->scope->flags & ScopeFlag_File) == 0) { + return; + } + InternedString name = entity_interned_name(e); + u32 hash = e->interned_name_hash.load(std::memory_order_relaxed); + Scope *outer = e->scope->parent; + if (scope_map_get(&e->scope->elements, name, hash) != e) { + outer = outer->parent; // in the package scope + } + if (outer == nullptr) { + return; + } + Entity *shadowed = scope_lookup(outer, name, hash); + if (shadowed == nullptr || shadowed == e) { + return; + } + if (shadowed->scope == builtin_pkg->scope) { + error(e->token, "Declaration of '%.*s' within a global 'when' shadows the builtin '%.*s'", LIT(e->token.string), LIT(e->token.string)); + } else { + error(e->token, "Declaration of '%.*s' within a global 'when' shadows the declaration at %s", LIT(e->token.string), token_pos_to_string(shadowed->token.pos)); + } +} + +gb_internal void check_vet_when_shadowing(void) { + for (GlobalDeclSource *src : global_decl_sources) { + if (!src->reachable || src->state != EntityState_Resolved) { + continue; + } + if ((ast_file_vet_flags(src->file) & VetFlag_WhenShadowing) == 0 || !is_global_decl_source_in_when(src)) { + continue; + } + for (Ast *decl : global_decl_source_taken_stmts(src)) { + if (decl->kind == Ast_ValueDecl) { + for (Ast *name : decl->ValueDecl.names) { + if (name->kind == Ast_Ident) { + check_vet_when_shadowing_entity(name->Ident.entity.load()); + } + } + } else if (decl->kind == Ast_ForeignImportDecl) { + Token token = decl->ForeignImportDecl.library_name; + InternedString name = string_interner_insert(token.string); + for (Scope *s = src->file->scope; s != nullptr && s != builtin_pkg->scope; s = s->parent) { + Entity *e = scope_map_get(&s->elements, name, name.hash()); + if (e != nullptr && e->kind == Entity_LibraryName && e->LibraryName.decl == decl) { + check_vet_when_shadowing_entity(e); + break; + } + } + } + } + } +} + +// Placeholders for every file, then every source resolved in package, file and source order, which +// only matters for which errors are reported +gb_internal void resolve_global_decl_sources(Checker *c, Array const &package_order) { + array_init(&global_decl_sources, heap_allocator()); + array_init(&global_decl_source_stack, heap_allocator()); + array_init(&global_placeholder_scopes, heap_allocator()); + init_checker_context(&global_decl_source_export_ctx, c); + defer (destroy_checker_context(&global_decl_source_export_ctx)); + + u64 stage_start = global_import_stage_begin(); + for (ImportGraphNode *node : package_order) { + for (AstFile *f : node->pkg->files) { + scan_global_decl_sources(f, f->decls, nullptr, false, EntityVisiblity_Public); + } + } + global_import_stage_end(GlobalImportStage_Placeholders, stage_start); + + stage_start = global_import_stage_begin(); + for (GlobalDeclSource *src : global_decl_sources) { + resolve_global_decl_source(src, {}); + } + GB_ASSERT(global_decl_source_stack.count == 0); + + for (Scope *s : global_placeholder_scopes) { + map_destroy(s->placeholders); + s->placeholders = nullptr; + } + array_clear(&global_placeholder_scopes); + + check_vet_when_shadowing(); + global_import_stage_end(GlobalImportStage_DeclSources, stage_start); + + map_destroy(&global_decl_source_export_untyped); +} + + +// Global entities are checked in groups: the strongly connected components of a dependency graph built +// from syntax, in dependency order. A group only names entities of its own or of finished groups, which +// `-internal-check-global-edges` verifies + +// Iterative Tarjan; components are numbered so that every edge v->w has comp(w) <= comp(v) +gb_internal i32 global_graph_scc(i32 node_count, Array const &offsets, Array const &targets, Array *comp_of_) { + struct Frame { + i32 v; + i32 pos; + }; + + auto index = array_make(heap_allocator(), node_count); + auto low = array_make(heap_allocator(), node_count); + auto on_stack = array_make(heap_allocator(), node_count); + auto stack = array_make(heap_allocator(), 0, node_count); + auto frames = array_make(heap_allocator(), 0, 64); + defer (array_free(&index)); + defer (array_free(&low)); + defer (array_free(&on_stack)); + defer (array_free(&stack)); + defer (array_free(&frames)); + + Array &comp_of = *comp_of_; + for (i32 v = 0; v < node_count; v++) { + index[v] = -1; + low[v] = 0; + on_stack[v] = false; + comp_of[v] = -1; + } + + i32 counter = 0; + i32 comp_count = 0; + for (i32 root = 0; root < node_count; root++) { + if (index[root] >= 0) { + continue; + } + index[root] = low[root] = counter++; + array_add(&stack, root); + on_stack[root] = true; + array_add(&frames, Frame{root, 0}); + + while (frames.count > 0) { + Frame *top = &frames[frames.count-1]; + i32 v = top->v; + if (offsets[v] + top->pos < offsets[v+1]) { + i32 w = targets[offsets[v] + top->pos]; + top->pos += 1; + if (index[w] < 0) { + index[w] = low[w] = counter++; + array_add(&stack, w); + on_stack[w] = true; + array_add(&frames, Frame{w, 0}); + } else if (on_stack[w]) { + low[v] = gb_min(low[v], index[w]); + } + continue; + } + + if (low[v] == index[v]) { + for (;;) { + i32 w = array_pop(&stack); + on_stack[w] = false; + comp_of[w] = comp_count; + if (w == v) { + break; + } + } + comp_count += 1; + } + array_pop(&frames); + if (frames.count > 0) { + i32 u = frames[frames.count-1].v; + low[u] = gb_min(low[u], low[v]); + } + } + } + return comp_count; +} + +gb_internal void global_graph_print_entity(Entity *e) { + if (e == nullptr) { + gb_printf_err("?"); + return; + } + String pkg = e->pkg ? e->pkg->name : str_lit("?"); + String file = e->file ? filename_without_directory(e->file->fullpath) : str_lit("?"); + gb_printf_err("%.*s.%.*s (%.*s:%d)", LIT(pkg), LIT(e->token.string), LIT(file), e->token.pos.line); +} + + + + +struct GlobalGroup { + i32 start; // into `GlobalGroupGraph::members` + i32 count; + bool done; +}; + +struct GlobalGroupGraph { + Array nodes; + PtrMap node_of; + Array offsets; // node -> the nodes it names, as `targets[offsets[v]..offsets[v+1]]` + Array targets; + Array group_of; + Array groups; // every dependency of a group has a lower index + Array members; // nodes, by group, in source order + + bool active; + i32 current_group; + Entity *current_entity; + isize missing_edges; +}; + +gb_global GlobalGroupGraph global_groups; + +struct GlobalGraphWalk { + Scope *scope; + Array *refs; +}; + +gb_internal void global_graph_walk(GlobalGraphWalk *w, Ast *node); + +gb_internal void global_graph_walk_slice(GlobalGraphWalk *w, Slice const &nodes) { + for (Ast *node : nodes) { + global_graph_walk(w, node); + } +} + +gb_internal void global_graph_add_ref(GlobalGraphWalk *w, Entity *e) { + if (e != nullptr) { + array_add(w->refs, e); + } +} + +// NOTE: names bound within the expression (parameters, fields, '$T') are also looked up globally, which at +// worst adds an edge; only procedure bodies are skipped, as they are checked after this stage +gb_internal void global_graph_walk(GlobalGraphWalk *w, Ast *node) { + if (node == nullptr) { + return; + } + switch (node->kind) { + case Ast_Ident: + global_graph_add_ref(w, scope_lookup(w->scope, node->Ident.interned, node->Ident.hash)); + break; + + case Ast_SelectorExpr: { + Ast *expr = node->SelectorExpr.expr; + Ast *selector = node->SelectorExpr.selector; + if (expr != nullptr && expr->kind == Ast_Ident) { + Entity *e = scope_lookup(w->scope, expr->Ident.interned, expr->Ident.hash); + if (e != nullptr && e->kind == Entity_ImportName && selector != nullptr && selector->kind == Ast_Ident) { + global_graph_add_ref(w, scope_lookup_current(e->ImportName.scope, selector->Ident.interned, selector->Ident.hash)); + } else { + global_graph_add_ref(w, e); + } + } else { + global_graph_walk(w, expr); + } + } break; + + case Ast_PolyType: + global_graph_walk(w, node->PolyType.specialization); + break; + case Ast_Ellipsis: + global_graph_walk(w, node->Ellipsis.expr); + break; + case Ast_ProcGroup: + global_graph_walk_slice(w, node->ProcGroup.args); + break; + case Ast_AsmGroup: + global_graph_walk_slice(w, node->AsmGroup.args); + break; + case Ast_ProcLit: + global_graph_walk(w, node->ProcLit.type); + global_graph_walk_slice(w, node->ProcLit.where_clauses); + break; + case Ast_CompoundLit: + global_graph_walk(w, node->CompoundLit.type); + global_graph_walk_slice(w, node->CompoundLit.elems); + global_graph_walk(w, node->CompoundLit.tag); + break; + case Ast_TagExpr: + global_graph_walk(w, node->TagExpr.expr); + break; + case Ast_UnaryExpr: + global_graph_walk(w, node->UnaryExpr.expr); + break; + case Ast_BinaryExpr: + global_graph_walk(w, node->BinaryExpr.left); + global_graph_walk(w, node->BinaryExpr.right); + break; + case Ast_ParenExpr: + global_graph_walk(w, node->ParenExpr.expr); + break; + case Ast_SelectorCallExpr: + global_graph_walk(w, node->SelectorCallExpr.expr); + global_graph_walk(w, node->SelectorCallExpr.call); + break; + case Ast_IndexExpr: + global_graph_walk(w, node->IndexExpr.expr); + global_graph_walk(w, node->IndexExpr.index); + break; + case Ast_MatrixIndexExpr: + global_graph_walk(w, node->MatrixIndexExpr.expr); + global_graph_walk(w, node->MatrixIndexExpr.row_index); + global_graph_walk(w, node->MatrixIndexExpr.column_index); + break; + case Ast_DerefExpr: + global_graph_walk(w, node->DerefExpr.expr); + break; + case Ast_SliceExpr: + global_graph_walk(w, node->SliceExpr.expr); + global_graph_walk(w, node->SliceExpr.low); + global_graph_walk(w, node->SliceExpr.high); + break; + case Ast_CallExpr: + global_graph_walk(w, node->CallExpr.proc); + global_graph_walk_slice(w, node->CallExpr.args); + break; + case Ast_FieldValue: + global_graph_walk(w, node->FieldValue.field); + global_graph_walk(w, node->FieldValue.value); + break; + case Ast_EnumFieldValue: + global_graph_walk(w, node->EnumFieldValue.value); + break; + case Ast_TernaryIfExpr: + global_graph_walk(w, node->TernaryIfExpr.x); + global_graph_walk(w, node->TernaryIfExpr.cond); + global_graph_walk(w, node->TernaryIfExpr.y); + break; + case Ast_TernaryWhenExpr: + global_graph_walk(w, node->TernaryWhenExpr.x); + global_graph_walk(w, node->TernaryWhenExpr.cond); + global_graph_walk(w, node->TernaryWhenExpr.y); + break; + case Ast_OrElseExpr: + global_graph_walk(w, node->OrElseExpr.x); + global_graph_walk(w, node->OrElseExpr.y); + break; + case Ast_OrReturnExpr: + global_graph_walk(w, node->OrReturnExpr.expr); + break; + case Ast_OrBranchExpr: + global_graph_walk(w, node->OrBranchExpr.expr); + break; + case Ast_TypeAssertion: + global_graph_walk(w, node->TypeAssertion.expr); + global_graph_walk(w, node->TypeAssertion.type); + break; + case Ast_TypeCast: + global_graph_walk(w, node->TypeCast.type); + global_graph_walk(w, node->TypeCast.expr); + break; + case Ast_AutoCast: + global_graph_walk(w, node->AutoCast.expr); + break; + + case Ast_Field: + global_graph_walk(w, node->Field.type); + global_graph_walk(w, node->Field.default_value); + break; + case Ast_BitFieldField: + global_graph_walk(w, node->BitFieldField.type); + global_graph_walk(w, node->BitFieldField.bit_size); + break; + case Ast_FieldList: + global_graph_walk_slice(w, node->FieldList.list); + break; + + case Ast_TypeidType: + global_graph_walk(w, node->TypeidType.specialization); + break; + case Ast_HelperType: + global_graph_walk(w, node->HelperType.type); + break; + case Ast_DistinctType: + global_graph_walk(w, node->DistinctType.type); + break; + case Ast_ProcType: + global_graph_walk(w, node->ProcType.params); + global_graph_walk(w, node->ProcType.results); + break; + case Ast_RelativeType: + global_graph_walk(w, node->RelativeType.tag); + global_graph_walk(w, node->RelativeType.type); + break; + case Ast_PointerType: + global_graph_walk(w, node->PointerType.type); + global_graph_walk(w, node->PointerType.tag); + break; + case Ast_MultiPointerType: + global_graph_walk(w, node->MultiPointerType.type); + break; + case Ast_ArrayType: + global_graph_walk(w, node->ArrayType.count); + global_graph_walk(w, node->ArrayType.elem); + global_graph_walk(w, node->ArrayType.tag); + break; + case Ast_DynamicArrayType: + global_graph_walk(w, node->DynamicArrayType.elem); + global_graph_walk(w, node->DynamicArrayType.tag); + break; + case Ast_FixedCapacityDynamicArrayType: + global_graph_walk(w, node->FixedCapacityDynamicArrayType.elem); + global_graph_walk(w, node->FixedCapacityDynamicArrayType.capacity); + global_graph_walk(w, node->FixedCapacityDynamicArrayType.tag); + break; + case Ast_StructType: + global_graph_walk_slice(w, node->StructType.fields); + global_graph_walk(w, node->StructType.polymorphic_params); + global_graph_walk(w, node->StructType.align); + global_graph_walk(w, node->StructType.min_field_align); + global_graph_walk(w, node->StructType.max_field_align); + global_graph_walk_slice(w, node->StructType.where_clauses); + break; + case Ast_UnionType: + global_graph_walk_slice(w, node->UnionType.variants); + global_graph_walk(w, node->UnionType.polymorphic_params); + global_graph_walk_slice(w, node->UnionType.where_clauses); + break; + case Ast_EnumType: + global_graph_walk(w, node->EnumType.base_type); + for (Ast *field : node->EnumType.fields) { + if (field->kind == Ast_EnumFieldValue) { + global_graph_walk(w, field->EnumFieldValue.value); + } + } + break; + case Ast_BitSetType: + global_graph_walk(w, node->BitSetType.elem); + global_graph_walk(w, node->BitSetType.underlying); + break; + case Ast_BitFieldType: + global_graph_walk(w, node->BitFieldType.backing_type); + global_graph_walk_slice(w, node->BitFieldType.fields); + break; + case Ast_MapType: + global_graph_walk(w, node->MapType.count); + global_graph_walk(w, node->MapType.key); + global_graph_walk(w, node->MapType.value); + break; + case Ast_MatrixType: + global_graph_walk(w, node->MatrixType.row_count); + global_graph_walk(w, node->MatrixType.column_count); + global_graph_walk(w, node->MatrixType.elem); + break; + + case Ast_AsmTemplate: + global_graph_walk(w, node->AsmTemplate.signature); + global_graph_walk_slice(w, node->AsmTemplate.specs); + global_graph_walk_slice(w, node->AsmTemplate.clobbers); + global_graph_walk_slice(w, node->AsmTemplate.instructions); + break; + case Ast_AsmSpec: + global_graph_walk(w, node->AsmSpec.type); + global_graph_walk(w, node->AsmSpec.value); + for (Ast *d : node->AsmSpec.directives) { + global_graph_walk(w, d); + } + break; + case Ast_AsmClobber: + global_graph_walk(w, node->AsmClobber.value); + break; + case Ast_AsmInstruction: + global_graph_walk_slice(w, node->AsmInstruction.operands); + break; + case Ast_AsmMemoryTerm: + global_graph_walk(w, node->AsmMemoryTerm.operand); + global_graph_walk(w, node->AsmMemoryTerm.scale); + break; + case Ast_AsmMemoryOperand: + global_graph_walk(w, node->AsmMemoryOperand.segment_override); + global_graph_walk_slice(w, node->AsmMemoryOperand.terms); + global_graph_walk(w, node->AsmMemoryOperand.type); + break; + case Ast_AsmRegisterGroup: + for (Ast *r : node->AsmRegisterGroup.registers) { + global_graph_walk(w, r); + } + global_graph_walk(w, node->AsmRegisterGroup.type); + break; + case Ast_AsmDirective: + global_graph_walk_slice(w, node->AsmDirective.operands); + break; + } +} + +gb_internal void global_graph_walk_entity(GlobalGraphWalk *w, Entity *e, DeclInfo *d) { + w->scope = d->scope; + global_graph_walk(w, d->type_expr); + global_graph_walk(w, d->init_expr); + for (Ast *attr : d->attributes) { + if (attr->kind != Ast_Attribute) { + continue; + } + for (Ast *elem : attr->Attribute.elems) { + if (elem->kind == Ast_FieldValue) { + global_graph_walk(w, elem->FieldValue.value); + } + } + } + if (e->kind == Entity_Procedure) { + global_graph_walk(w, e->Procedure.foreign_library_ident); + } else if (e->kind == Entity_Variable) { + global_graph_walk(w, e->Variable.foreign_library_ident); + } +} + +gb_internal bool is_global_graph_node(Entity *e) { + if (e->state == EntityState_Resolved) { + return false; + } + DeclInfo *d = e->decl_info; + if (d == nullptr || e->scope == nullptr || d->scope != e->scope || (e->scope->flags & ScopeFlag_File) == 0) { + return false; + } + switch (e->kind) { + case Entity_Constant: + case Entity_TypeName: + case Entity_Variable: + case Entity_Procedure: + case Entity_ProcGroup: + case Entity_AsmTemplate: + return true; + } + return false; +} + +gb_internal i32 global_graph_add_node(GlobalGroupGraph *g, Entity *e) { + i32 *found = map_get(&g->node_of, e); + if (found != nullptr) { + return *found; + } + i32 v = cast(i32)g->nodes.count; + map_set(&g->node_of, e, v); + array_add(&g->nodes, e); + return v; +} + +gb_internal u64 global_group_random(u64 *state) { + *state = *state*6364136223846793005ull + 1442695040888963407ull; + return *state >> 33; +} + +// The nodes `[lo, hi)` walked on one thread; a name that is not a node yet is kept as an entity in `refs` +struct GlobalGraphWalkChunk { + GlobalGroupGraph *g; + i32 lo; + i32 hi; + Array targets; + Array target_ends; // per node + Array refs; + Array ref_ends; // per node +}; + +gb_internal WORKER_TASK_PROC(global_graph_walk_worker) { + GlobalGraphWalkChunk *chunk = cast(GlobalGraphWalkChunk *)data; + GlobalGroupGraph *g = chunk->g; + + auto refs = array_make(heap_allocator(), 0, 64); + defer (array_free(&refs)); + GlobalGraphWalk w = {}; + w.refs = &refs; + for (i32 v = chunk->lo; v < chunk->hi; v++) { + Entity *e = g->nodes[v]; + array_clear(&refs); + global_graph_walk_entity(&w, e, e->decl_info); + for (Entity *r : refs) { + i32 *found = map_get(&g->node_of, r); + if (found != nullptr) { + array_add(&chunk->targets, *found); + } else if (r->flags & EntityFlag_Lazy) { + array_add(&chunk->refs, r); + } + } + array_add(&chunk->target_ends, cast(i32)chunk->targets.count); + array_add(&chunk->ref_ends, cast(i32)chunk->refs.count); + } + return 0; +} + +gb_internal void build_global_groups(Checker *c, GlobalGroupGraph *g) { + array_init(&g->nodes, heap_allocator(), 0, c->info.entities.count); + map_init(&g->node_of, c->info.entities.count); + for (Entity *e : c->info.entities) { + if ((e->flags & EntityFlag_Lazy) == 0 && is_global_graph_node(e)) { + global_graph_add_node(g, e); + } + } + + // NOTE: walked in parallel, as nothing writes to the scopes now + i32 const CHUNK_SIZE = 64; + i32 initial_count = cast(i32)g->nodes.count; + auto chunks = array_make(heap_allocator(), (initial_count + CHUNK_SIZE-1)/CHUNK_SIZE); + defer (array_free(&chunks)); + for (isize i = 0; i < chunks.count; i++) { + GlobalGraphWalkChunk *chunk = &chunks[i]; + *chunk = {}; + chunk->g = g; + chunk->lo = cast(i32)(i*CHUNK_SIZE); + chunk->hi = gb_min(chunk->lo + CHUNK_SIZE, initial_count); + array_init(&chunk->targets, heap_allocator(), 0, 4*CHUNK_SIZE); + array_init(&chunk->target_ends, heap_allocator(), 0, CHUNK_SIZE); + array_init(&chunk->refs, heap_allocator(), 0); + array_init(&chunk->ref_ends, heap_allocator(), 0, CHUNK_SIZE); + thread_pool_add_task(global_graph_walk_worker, chunk); + } + thread_pool_wait(); + + auto edge_from = array_make(heap_allocator(), 0, 4*g->nodes.count); + auto edge_to = array_make(heap_allocator(), 0, 4*g->nodes.count); + auto refs = array_make(heap_allocator(), 0, 64); + defer (array_free(&edge_from)); + defer (array_free(&edge_to)); + defer (array_free(&refs)); + + auto add_ref = [&](i32 v, Entity *r) { + i32 *found = map_get(&g->node_of, r); + if (found != nullptr) { + array_add(&edge_from, v); + array_add(&edge_to, *found); + } else if ((r->flags & EntityFlag_Lazy) && is_global_graph_node(r)) { + // NOTE: a lazy entity becomes a node once a node names it + array_add(&edge_from, v); + array_add(&edge_to, global_graph_add_node(g, r)); + } + }; + + GlobalGraphWalk w = {}; + w.refs = &refs; + i32 first_of_decl = -1; + for (i32 v = 0; v < g->nodes.count; v++) { + Entity *e = g->nodes[v]; + DeclInfo *d = e->decl_info; + + // NOTE: entities sharing one declaration share its AST, e.g. `a, b: struct{x: int}`, so they share a group; + // in source order they are adjacent, and lazy ones are only checked under `lazy_mutex` + if (first_of_decl >= 0 && d->decl_node != nullptr && g->nodes[first_of_decl]->decl_info->decl_node == d->decl_node) { + array_add(&edge_from, v); + array_add(&edge_to, first_of_decl); + array_add(&edge_from, first_of_decl); + array_add(&edge_to, v); + } else { + first_of_decl = v; + } + + if (v < initial_count) { + GlobalGraphWalkChunk *chunk = &chunks[v / CHUNK_SIZE]; + i32 k = v - chunk->lo; + for (i32 i = k > 0 ? chunk->target_ends[k-1] : 0; i < chunk->target_ends[k]; i++) { + array_add(&edge_from, v); + array_add(&edge_to, chunk->targets[i]); + } + for (i32 i = k > 0 ? chunk->ref_ends[k-1] : 0; i < chunk->ref_ends[k]; i++) { + add_ref(v, chunk->refs[i]); + } + } else { + array_clear(&refs); + global_graph_walk_entity(&w, e, d); + for (Entity *r : refs) { + add_ref(v, r); + } + } + } + for (GlobalGraphWalkChunk &chunk : chunks) { + array_free(&chunk.targets); + array_free(&chunk.target_ends); + array_free(&chunk.refs); + array_free(&chunk.ref_ends); + } + + i32 node_count = cast(i32)g->nodes.count; + array_init(&g->offsets, heap_allocator(), node_count+1); + array_init(&g->targets, heap_allocator(), edge_to.count); + for (i32 v = 0; v <= node_count; v++) { + g->offsets[v] = 0; + } + for (i32 from : edge_from) { + g->offsets[from+1] += 1; + } + for (i32 v = 0; v < node_count; v++) { + g->offsets[v+1] += g->offsets[v]; + } + { + auto fill = array_clone(heap_allocator(), g->offsets); + defer (array_free(&fill)); + for (isize i = 0; i < edge_from.count; i++) { + g->targets[fill[edge_from[i]]++] = edge_to[i]; + } + } + + array_init(&g->group_of, heap_allocator(), node_count); + i32 group_count = global_graph_scc(node_count, g->offsets, g->targets, &g->group_of); + + array_init(&g->groups, heap_allocator(), group_count); + array_init(&g->members, heap_allocator(), node_count); + for (i32 gi = 0; gi < group_count; gi++) { + g->groups[gi] = {}; + } + for (i32 v = 0; v < node_count; v++) { + g->groups[g->group_of[v]].count += 1; + } + i32 start = 0; + for (i32 gi = 0; gi < group_count; gi++) { + g->groups[gi].start = start; + start += g->groups[gi].count; + g->groups[gi].count = 0; + } + // NOTE: in source order, as `c->info.entities` is sorted; lazy nodes come last, but are not checked here + for (i32 v = 0; v < node_count; v++) { + GlobalGroup *group = &g->groups[g->group_of[v]]; + g->members[group->start + group->count++] = v; + } +} + +// Called when `e` starts being checked: it must be in the current group or a finished one +gb_internal void global_group_check_edge(CheckerContext *ctx, Entity *e) { + GlobalGroupGraph *g = &global_groups; + if (!g->active) { + return; + } + i32 *v = map_get(&g->node_of, e); + if (v == nullptr) { + if (!is_global_graph_node(e)) { + return; + } + } else { + i32 gi = g->group_of[*v]; + if (gi == g->current_group || g->groups[gi].done) { + return; + } + } + + g->missing_edges += 1; + if (build_context.internal_check_global_edges) { + Entity *by = ctx->decl ? ctx->decl->entity.load() : nullptr; + gb_printf_err("Missing global dependency: "); + global_graph_print_entity(by); + gb_printf_err(" needs "); + global_graph_print_entity(e); + gb_printf_err(v == nullptr ? ", which is not in the graph" : ""); + if (g->current_entity != by) { + gb_printf_err(", while checking "); + global_graph_print_entity(g->current_entity); + } + gb_printf_err("\n"); + } +} + +// NOTE: members in a fixed order, as which member of a cycle is entered first can decide whether it checks, +// e.g. an enum whose values are `union_variant_index`es of a union with pointers back to it +gb_internal void check_global_group(Checker *c, GlobalGroupGraph *g, i32 gi) { + GlobalGroup *group = &g->groups[gi]; + i32 *members = g->members.data + group->start; + + g->current_group = gi; + for (i32 k = 0; k < group->count; k++) { + Entity *e = g->nodes[members[k]]; + if (e->flags & EntityFlag_Lazy) { + // NOTE: only checked when something uses it; the group orders it after what it names + continue; + } + g->current_entity = e; + GlobalEntityTimingFrame timing_frame = global_entity_timing_begin(e); + check_single_global_entity(c, e, e->decl_info); + if (e->type != nullptr && is_type_typed(e->type)) { + for (Type *t = nullptr; mpsc_dequeue(&c->soa_types_to_complete, &t); /**/) { + complete_soa_type(c, t, false); + } + + (void)type_size_of(e->type); + (void)type_align_of(e->type); + } + global_entity_timing_end(timing_frame, e); + } + group->done = true; + g->current_group = -1; + g->current_entity = nullptr; +} + +// Groups in dependency order; with `-internal-shuffle-global-entities`, a random one of the groups whose +// dependencies are done, as a parallel checker might +gb_internal void check_global_groups(Checker *c, GlobalGroupGraph *g) { + i32 group_count = cast(i32)g->groups.count; + u64 seed = build_context.internal_shuffle_global_entities; + if (seed == 0) { + for (i32 gi = 0; gi < group_count; gi++) { + check_global_group(c, g, gi); + } + return; + } + + auto dependents = array_make >(heap_allocator(), group_count); + auto dep_count = array_make (heap_allocator(), group_count); + auto seen = array_make (heap_allocator(), group_count); + auto ready = array_make (heap_allocator(), 0, group_count); + defer ({ + for (auto &d : dependents) { + array_free(&d); + } + array_free(&dependents); + }); + defer (array_free(&dep_count)); + defer (array_free(&seen)); + defer (array_free(&ready)); + + for (i32 gi = 0; gi < group_count; gi++) { + dep_count[gi] = 0; + dependents[gi] = {}; + seen[gi] = -1; + } + for (i32 gi = 0; gi < group_count; gi++) { + GlobalGroup const &group = g->groups[gi]; + for (i32 k = 0; k < group.count; k++) { + i32 v = g->members[group.start + k]; + for (i32 i = g->offsets[v]; i < g->offsets[v+1]; i++) { + i32 dep = g->group_of[g->targets[i]]; + if (dep != gi && seen[dep] != gi) { + seen[dep] = gi; + dep_count[gi] += 1; + if (dependents[dep].allocator.proc == nullptr) { + array_init(&dependents[dep], heap_allocator()); + } + array_add(&dependents[dep], gi); + } + } + } + if (dep_count[gi] == 0) { + array_add(&ready, gi); + } + } + + u64 state = seed; + isize checked = 0; + while (ready.count > 0) { + isize i = cast(isize)(global_group_random(&state) % cast(u64)ready.count); + i32 gi = ready[i]; + ready[i] = ready[ready.count-1]; + array_pop(&ready); + + check_global_group(c, g, gi); + checked += 1; + for (i32 next : dependents[gi]) { + if (--dep_count[next] == 0) { + array_add(&ready, next); + } + } + } + GB_ASSERT(checked == group_count); +} + +gb_internal void destroy_global_groups(GlobalGroupGraph *g) { + array_free(&g->nodes); + map_destroy(&g->node_of); + array_free(&g->offsets); + array_free(&g->targets); + array_free(&g->group_of); + array_free(&g->groups); + array_free(&g->members); +} + +gb_internal void check_all_global_entities(Checker *c) { + in_single_threaded_checker_stage.store(true, std::memory_order_relaxed); + + // NOTE(bill): the runtime types the checker looks up by name rather than through a declaration + init_preload(c); + { + u32 hash = 0; + InternedString name = string_interner_insert(str_lit("Load_Directory_File"), 0, &hash); + if (scope_lookup_current(c->info.runtime_package->scope, name, hash) != nullptr) { + init_core_load_directory_file(c); + } + } + + TIME_SECTION("check all global entities - build groups"); + GlobalGroupGraph *g = &global_groups; + build_global_groups(c, g); + + TIME_SECTION("check all global entities - check groups"); + g->active = true; + g->current_group = -1; + check_global_groups(c, g); + g->active = false; + + if (build_context.internal_check_global_edges && g->missing_edges > 0) { + gb_printf_err("%td missing global dependencies\n", g->missing_edges); + gb_exit(1); + } + + in_single_threaded_checker_stage.store(false, std::memory_order_relaxed); +} + + +// -internal-global-entity-graph: the groups, weighted by the measured self time of their entities + +struct GlobalGraphSortItem { + u64 key; + i32 id; +}; + +gb_internal GB_COMPARE_PROC(global_graph_sort_item_desc) { + GlobalGraphSortItem const *x = cast(GlobalGraphSortItem const *)a; + GlobalGraphSortItem const *y = cast(GlobalGraphSortItem const *)b; + if (x->key != y->key) { + return x->key > y->key ? -1 : +1; + } + return i32_cmp(x->id, y->id); +} + +gb_internal f64 global_graph_ms(u64 ticks, u64 freq) { + return 1000.0 * cast(f64)ticks / cast(f64)freq; +} + +gb_internal void print_global_group(GlobalGroupGraph *g, i32 gi, u64 ticks, u64 freq, isize max_names) { + GlobalGroup const &group = g->groups[gi]; + gb_printf_err(" %10.3f ms %7d entities ", global_graph_ms(ticks, freq), group.count); + for (i32 k = 0; k < group.count && k < max_names; k++) { + if (k > 0) { + gb_printf_err(", "); + } + global_graph_print_entity(g->nodes[g->members[group.start + k]]); + } + if (group.count > max_names) { + gb_printf_err(", ..."); + } + gb_printf_err("\n"); +} + +gb_internal void print_global_groups(GlobalGroupGraph *g) { + u64 const freq = time_stamp__freq(); + i32 group_count = cast(i32)g->groups.count; + + auto ticks = array_make(heap_allocator(), group_count); + auto path = array_make(heap_allocator(), group_count); // heaviest chain of dependencies ending at a group + auto len = array_make(heap_allocator(), group_count); + auto prev = array_make(heap_allocator(), group_count); + auto seen = array_make(heap_allocator(), group_count); + defer (array_free(&ticks)); + defer (array_free(&path)); + defer (array_free(&len)); + defer (array_free(&prev)); + defer (array_free(&seen)); + + auto pkgs = array_make(heap_allocator(), 0, 64); + auto pkg_ticks = array_make(heap_allocator(), 0, 64); + auto pkg_entities = array_make(heap_allocator(), 0, 64); + PtrMap pkg_index = {}; + map_init(&pkg_index); + defer (array_free(&pkgs)); + defer (array_free(&pkg_ticks)); + defer (array_free(&pkg_entities)); + defer (map_destroy(&pkg_index)); + + u64 total_ticks = 0; + u64 when_ticks = 0; + isize untimed = 0; + i32 largest = -1; + isize cyclic = 0; + + mutex_lock(&global_entity_time_mutex); + for (auto const &entry : global_entity_times) { + if (!entry.value.in_global_loop) { + when_ticks += entry.value.ticks; + } + } + for (i32 gi = 0; gi < group_count; gi++) { + GlobalGroup const &group = g->groups[gi]; + ticks[gi] = 0; + for (i32 k = 0; k < group.count; k++) { + Entity *e = g->nodes[g->members[group.start + k]]; + GlobalEntityTime *t = map_get(&global_entity_times, e); + untimed += t == nullptr; + u64 et = t ? t->ticks : 0; + ticks[gi] += et; + + i32 *p = map_get(&pkg_index, e->pkg); + if (p == nullptr) { + map_set(&pkg_index, e->pkg, cast(i32)pkgs.count); + array_add(&pkgs, e->pkg); + array_add(&pkg_ticks, et); + array_add(&pkg_entities, 1); + } else { + pkg_ticks[*p] += et; + pkg_entities[*p] += 1; + } + } + total_ticks += ticks[gi]; + if (largest < 0 || group.count > g->groups[largest].count) { + largest = gi; + } + cyclic += group.count > 1; + } + mutex_unlock(&global_entity_time_mutex); + + // NOTE: every dependency of a group has a lower index + i32 critical = -1; + for (i32 gi = 0; gi < group_count; gi++) { + seen[gi] = -1; + } + for (i32 gi = 0; gi < group_count; gi++) { + GlobalGroup const &group = g->groups[gi]; + prev[gi] = -1; + for (i32 k = 0; k < group.count; k++) { + i32 v = g->members[group.start + k]; + for (i32 i = g->offsets[v]; i < g->offsets[v+1]; i++) { + i32 dep = g->group_of[g->targets[i]]; + if (dep != gi && seen[dep] != gi) { + seen[dep] = gi; + if (prev[gi] < 0 || path[dep] > path[prev[gi]]) { + prev[gi] = dep; + } + } + } + } + path[gi] = ticks[gi] + (prev[gi] >= 0 ? path[prev[gi]] : 0); + len[gi] = 1 + (prev[gi] >= 0 ? len[prev[gi]] : 0); + if (critical < 0 || path[gi] > path[critical]) { + critical = gi; + } + } + + f64 total_ms = global_graph_ms(total_ticks, freq); + f64 critical_ms = critical >= 0 ? global_graph_ms(path[critical], freq) : 0; + + gb_printf_err("Global entity groups\n"); + gb_printf_err(" entities: %td (%td not timed), dependency edges: %td, missing edges: %td\n", g->nodes.count, untimed, g->targets.count, g->missing_edges); + gb_printf_err(" self time: %.3f ms in the groups, %.3f ms during 'when' resolution\n", total_ms, global_graph_ms(when_ticks, freq)); + gb_printf_err(" groups: %d (%td with a cycle), largest has %d entities\n", group_count, cyclic, largest >= 0 ? g->groups[largest].count : 0); + gb_printf_err(" critical path: %.3f ms over %d groups -> at most %.2fx speedup\n", + critical_ms, critical >= 0 ? len[critical] : 0, critical_ms > 0 ? total_ms/critical_ms : 0.0); + + gb_printf_err(" check_import_entities (sequential, includes entity checks it triggers):\n"); + for (isize i = 0; i < GlobalImportStage_COUNT; i++) { + gb_printf_err(" %10.3f ms %s\n", global_graph_ms(global_import_stage_ticks[i], freq), global_import_stage_names[i]); + } + + { + i32 const BUCKET_COUNT = 10; + i32 const bucket_max [BUCKET_COUNT] = {1, 2, 4, 8, 16, 64, 256, 1024, 4096, 0x7fffffff}; + char const *bucket_name [BUCKET_COUNT] = {"1", "2", "3-4", "5-8", "9-16", "17-64", "65-256", "257-1024", "1025-4096", ">4096"}; + isize bucket_groups [BUCKET_COUNT] = {}; + isize bucket_entities[BUCKET_COUNT] = {}; + u64 bucket_ticks [BUCKET_COUNT] = {}; + for (i32 gi = 0; gi < group_count; gi++) { + i32 count = g->groups[gi].count; + for (i32 b = 0; b < BUCKET_COUNT; b++) { + if (count <= bucket_max[b]) { + bucket_groups[b] += 1; + bucket_entities[b] += count; + bucket_ticks[b] += ticks[gi]; + break; + } + } + } + gb_printf_err(" group sizes:\n"); + gb_printf_err(" %10s %9s %10s %12s\n", "size", "groups", "entities", "self time"); + for (i32 b = 0; b < BUCKET_COUNT; b++) { + if (bucket_groups[b] != 0) { + gb_printf_err(" %10s %9td %10td %9.3f ms\n", bucket_name[b], bucket_groups[b], bucket_entities[b], global_graph_ms(bucket_ticks[b], freq)); + } + } + } + + auto items = array_make(heap_allocator(), 0, gb_max(group_count, cast(i32)pkgs.count)); + defer (array_free(&items)); + isize const TOP = 10; + + for (i32 gi = 0; gi < group_count; gi++) { + array_add(&items, GlobalGraphSortItem{ticks[gi], gi}); + } + array_sort(items, global_graph_sort_item_desc); + gb_printf_err(" slowest groups:\n"); + for (isize i = 0; i < items.count && i < TOP; i++) { + print_global_group(g, items[i].id, items[i].key, freq, 4); + } + + array_clear(&items); + for (i32 gi = 0; gi < group_count; gi++) { + if (g->groups[gi].count > 1) { + array_add(&items, GlobalGraphSortItem{cast(u64)g->groups[gi].count, gi}); + } + } + array_sort(items, global_graph_sort_item_desc); + gb_printf_err(" largest groups:\n"); + for (isize i = 0; i < items.count && i < TOP; i++) { + print_global_group(g, items[i].id, ticks[items[i].id], freq, 4); + } + + gb_printf_err(" critical path, last group first:\n"); + isize printed = 0; + for (i32 gi = critical; gi >= 0; gi = prev[gi]) { + if (printed == 30) { + gb_printf_err(" ... %d more groups\n", len[gi]); + break; + } + print_global_group(g, gi, ticks[gi], freq, 2); + printed += 1; + } + + array_clear(&items); + for (i32 p = 0; p < pkgs.count; p++) { + array_add(&items, GlobalGraphSortItem{pkg_ticks[p], p}); + } + array_sort(items, global_graph_sort_item_desc); + gb_printf_err(" slowest packages:\n"); + for (isize i = 0; i < items.count && i < TOP; i++) { + i32 p = items[i].id; + String name = pkgs[p] ? pkgs[p]->name : str_lit("?"); + gb_printf_err(" %10.3f ms %7d entities %.*s\n", global_graph_ms(pkg_ticks[p], freq), pkg_entities[p], LIT(name)); + } +} diff --git a/src/checker_global_graph.cpp b/src/checker_global_graph.cpp deleted file mode 100644 index 67a2c7c07..000000000 --- a/src/checker_global_graph.cpp +++ /dev/null @@ -1,539 +0,0 @@ -// -internal-global-entity-graph: per-entity self time of global declaration checking, -// plus statistics of the dependency graph between global entities (DeclInfo::deps) - -struct GlobalEntityTime { - u64 ticks; - bool in_global_loop; -}; - -struct GlobalEntityTimingFrame { - u64 start; - u64 saved_child_ticks; - bool active; -}; - -enum GlobalImportStagePart { - GlobalImportStage_Imports, - GlobalImportStage_Placeholders, - GlobalImportStage_DeclSources, - GlobalImportStage_TypeAliases, - GlobalImportStage_DelayedExprs, - - GlobalImportStage_COUNT, -}; - -gb_global char const *global_import_stage_names[GlobalImportStage_COUNT] = { - "imports", - "'when' and 'foreign' placeholders", - "resolve 'when' and 'foreign' blocks", - "type alias correction", - "delayed expressions (#assert etc.)", -}; - -gb_global u64 global_import_stage_ticks[GlobalImportStage_COUNT]; - -gb_internal u64 global_import_stage_begin(void) { - return build_context.internal_global_entity_graph ? time_stamp_time_now() : 0; -} - -gb_internal void global_import_stage_end(GlobalImportStagePart part, u64 start) { - if (build_context.internal_global_entity_graph) { - global_import_stage_ticks[part] += time_stamp_time_now() - start; - } -} - -gb_global BlockingMutex global_entity_time_mutex; -gb_global PtrMap global_entity_times; -gb_thread_local u64 global_entity_child_ticks; - -gb_internal GlobalEntityTimingFrame global_entity_timing_begin(Entity *e) { - GlobalEntityTimingFrame f = {}; - if (!build_context.internal_global_entity_graph) { - return f; - } - if (e->scope == nullptr || (e->scope->flags & ScopeFlag_File) == 0) { - return f; - } - f.active = true; - f.saved_child_ticks = global_entity_child_ticks; - global_entity_child_ticks = 0; - f.start = time_stamp_time_now(); - return f; -} - -gb_internal void global_entity_timing_end(GlobalEntityTimingFrame const &f, Entity *e) { - if (!f.active) { - return; - } - u64 total = time_stamp_time_now() - f.start; - u64 self = total - gb_min(total, global_entity_child_ticks); - global_entity_child_ticks = f.saved_child_ticks + total; - - bool in_global_loop = in_single_threaded_checker_stage.load(std::memory_order_relaxed); - - MUTEX_GUARD(&global_entity_time_mutex); - GlobalEntityTime *found = map_get(&global_entity_times, e); - if (found) { - found->ticks += self; - } else { - map_set(&global_entity_times, e, GlobalEntityTime{self, in_global_loop}); - } -} - - -// Iterative Tarjan; components are numbered so that every edge v->w has comp(w) <= comp(v) -gb_internal i32 global_graph_scc(i32 node_count, Array const &offsets, Array const &targets, Array *comp_of_) { - struct Frame { - i32 v; - i32 pos; - }; - - auto index = array_make(heap_allocator(), node_count); - auto low = array_make(heap_allocator(), node_count); - auto on_stack = array_make(heap_allocator(), node_count); - auto stack = array_make(heap_allocator(), 0, node_count); - auto frames = array_make(heap_allocator(), 0, 64); - defer (array_free(&index)); - defer (array_free(&low)); - defer (array_free(&on_stack)); - defer (array_free(&stack)); - defer (array_free(&frames)); - - Array &comp_of = *comp_of_; - for (i32 v = 0; v < node_count; v++) { - index[v] = -1; - low[v] = 0; - on_stack[v] = false; - comp_of[v] = -1; - } - - i32 counter = 0; - i32 comp_count = 0; - for (i32 root = 0; root < node_count; root++) { - if (index[root] >= 0) { - continue; - } - index[root] = low[root] = counter++; - array_add(&stack, root); - on_stack[root] = true; - array_add(&frames, Frame{root, 0}); - - while (frames.count > 0) { - Frame *top = &frames[frames.count-1]; - i32 v = top->v; - if (offsets[v] + top->pos < offsets[v+1]) { - i32 w = targets[offsets[v] + top->pos]; - top->pos += 1; - if (index[w] < 0) { - index[w] = low[w] = counter++; - array_add(&stack, w); - on_stack[w] = true; - array_add(&frames, Frame{w, 0}); - } else if (on_stack[w]) { - low[v] = gb_min(low[v], index[w]); - } - continue; - } - - if (low[v] == index[v]) { - for (;;) { - i32 w = array_pop(&stack); - on_stack[w] = false; - comp_of[w] = comp_count; - if (w == v) { - break; - } - } - comp_count += 1; - } - array_pop(&frames); - if (frames.count > 0) { - i32 u = frames[frames.count-1].v; - low[u] = gb_min(low[u], low[v]); - } - } - } - return comp_count; -} - -struct GlobalGraphComp { - i32 start; // into the member order array - i32 count; - u64 ticks; - u64 path_ticks; // heaviest dependency chain ending at this component, inclusive - i32 path_len; - i32 path_prev; - bool has_self_edge; -}; - -struct GlobalGraphSortItem { - u64 key; - i32 id; -}; - -gb_internal GB_COMPARE_PROC(global_graph_sort_item_desc) { - GlobalGraphSortItem const *x = cast(GlobalGraphSortItem const *)a; - GlobalGraphSortItem const *y = cast(GlobalGraphSortItem const *)b; - if (x->key != y->key) { - return x->key > y->key ? -1 : +1; - } - return i32_cmp(x->id, y->id); -} - -// Fills `comps` (indexed by component) and `order` (node indices grouped by component) -gb_internal void global_graph_condense(i32 node_count, Array const &offsets, Array const &targets, Array const &node_ticks, - Array const &comp_of, i32 comp_count, Array *comps_, Array *order_) { - Array &comps = *comps_; - Array &order = *order_; - for (i32 i = 0; i < comp_count; i++) { - comps[i] = {}; - comps[i].path_prev = -1; - } - for (i32 v = 0; v < node_count; v++) { - GlobalGraphComp *g = &comps[comp_of[v]]; - g->count += 1; - g->ticks += node_ticks[v]; - } - i32 start = 0; - for (i32 i = 0; i < comp_count; i++) { - comps[i].start = start; - start += comps[i].count; - comps[i].count = 0; - } - for (i32 v = 0; v < node_count; v++) { - GlobalGraphComp *g = &comps[comp_of[v]]; - order[g->start + g->count] = v; - g->count += 1; - } - - for (i32 ci = 0; ci < comp_count; ci++) { - GlobalGraphComp *g = &comps[ci]; - u64 best_ticks = 0; - i32 best_len = 0; - i32 best_prev = -1; - for (i32 k = 0; k < g->count; k++) { - i32 v = order[g->start + k]; - for (i32 e = offsets[v]; e < offsets[v+1]; e++) { - i32 w = targets[e]; - if (w == v) { - g->has_self_edge = true; - } - i32 cw = comp_of[w]; - if (cw == ci) { - continue; - } - GB_ASSERT(cw < ci); - GlobalGraphComp *d = &comps[cw]; - if (best_prev < 0 || d->path_ticks > best_ticks) { - best_ticks = d->path_ticks; - best_prev = cw; - } - best_len = gb_max(best_len, d->path_len); - } - } - g->path_ticks = g->ticks + best_ticks; - g->path_len = 1 + best_len; - g->path_prev = best_prev; - } -} - -gb_internal f64 global_graph_ms(u64 ticks, u64 freq) { - return 1000.0 * cast(f64)ticks / cast(f64)freq; -} - -gb_internal void global_graph_print_entity(Entity *e) { - String pkg = e->pkg ? e->pkg->name : str_lit("?"); - String file = e->file ? filename_without_directory(e->file->fullpath) : str_lit("?"); - gb_printf_err("%.*s.%.*s (%.*s:%d)", LIT(pkg), LIT(e->token.string), LIT(file), e->token.pos.line); -} - -gb_internal void global_graph_print_comp(Array const &nodes, Array const &order, GlobalGraphComp const *g, u64 ticks, u64 freq, isize max_names) { - gb_printf_err(" %10.3f ms %7d entities ", global_graph_ms(ticks, freq), g->count); - for (i32 k = 0; k < g->count && k < max_names; k++) { - if (k > 0) { - gb_printf_err(", "); - } - global_graph_print_entity(nodes[order[g->start + k]]); - } - if (g->count > max_names) { - gb_printf_err(", ..."); - } - gb_printf_err("\n"); -} - -gb_internal void print_global_entity_graph(Checker *c) { - u64 const freq = time_stamp__freq(); - - // Nodes - auto nodes = array_make(heap_allocator(), 0, c->info.entities.count); - defer (array_free(&nodes)); - PtrMap node_index = {}; - map_init(&node_index, c->info.entities.count); - defer (map_destroy(&node_index)); - - for (Entity *e : c->info.entities) { - if (e->decl_info == nullptr || e->scope == nullptr || (e->scope->flags & ScopeFlag_File) == 0) { - continue; - } - if (map_get(&node_index, e) != nullptr) { - continue; - } - map_set(&node_index, e, cast(i32)nodes.count); - array_add(&nodes, e); - } - i32 node_count = cast(i32)nodes.count; - - // Edges, from what each declaration actually used while being checked - auto offsets = array_make(heap_allocator(), node_count+1); - auto targets = array_make(heap_allocator(), 0, node_count*4); - defer (array_free(&offsets)); - defer (array_free(&targets)); - isize self_edges = 0; - for (i32 v = 0; v < node_count; v++) { - offsets[v] = cast(i32)targets.count; - DeclInfo *d = nodes[v]->decl_info; - FOR_PTR_SET(dep, d->deps) { - i32 *w = map_get(&node_index, dep); - if (w != nullptr) { - array_add(&targets, *w); - self_edges += *w == v; - } - } - } - offsets[node_count] = cast(i32)targets.count; - - // Weights - auto node_ticks = array_make(heap_allocator(), node_count); - defer (array_free(&node_ticks)); - u64 total_ticks = 0; - u64 when_ticks = 0; - isize untimed = 0; - mutex_lock(&global_entity_time_mutex); - for (i32 v = 0; v < node_count; v++) { - GlobalEntityTime *t = map_get(&global_entity_times, nodes[v]); - node_ticks[v] = t ? t->ticks : 0; - total_ticks += node_ticks[v]; - if (t == nullptr) { - untimed += 1; - } else if (!t->in_global_loop) { - when_ticks += t->ticks; - } - } - mutex_unlock(&global_entity_time_mutex); - - // Entity groups - auto comp_of = array_make(heap_allocator(), node_count); - defer (array_free(&comp_of)); - i32 comp_count = global_graph_scc(node_count, offsets, targets, &comp_of); - - auto comps = array_make(heap_allocator(), comp_count); - auto order = array_make(heap_allocator(), node_count); - defer (array_free(&comps)); - defer (array_free(&order)); - global_graph_condense(node_count, offsets, targets, node_ticks, comp_of, comp_count, &comps, &order); - - i32 critical = -1; - i32 largest = -1; - isize cyclic_comps = 0; - for (i32 ci = 0; ci < comp_count; ci++) { - GlobalGraphComp *g = &comps[ci]; - if (critical < 0 || g->path_ticks > comps[critical].path_ticks) { - critical = ci; - } - if (largest < 0 || g->count > comps[largest].count) { - largest = ci; - } - cyclic_comps += g->count > 1 || g->has_self_edge; - } - - // Packages, weighted by the entities they own - PtrMap pkg_index = {}; - map_init(&pkg_index, c->info.packages.count); - defer (map_destroy(&pkg_index)); - auto pkgs = array_make(heap_allocator(), 0, c->info.packages.count); - defer (array_free(&pkgs)); - auto node_pkg = array_make(heap_allocator(), node_count); - defer (array_free(&node_pkg)); - for (i32 v = 0; v < node_count; v++) { - AstPackage *p = nodes[v]->pkg; - i32 *found = map_get(&pkg_index, p); - if (found == nullptr) { - map_set(&pkg_index, p, cast(i32)pkgs.count); - node_pkg[v] = cast(i32)pkgs.count; - array_add(&pkgs, p); - } else { - node_pkg[v] = *found; - } - } - i32 pkg_count = cast(i32)pkgs.count; - - auto pkg_ticks = array_make(heap_allocator(), pkg_count); - auto pkg_entities = array_make(heap_allocator(), pkg_count); - defer (array_free(&pkg_ticks)); - defer (array_free(&pkg_entities)); - for (i32 p = 0; p < pkg_count; p++) { - pkg_ticks[p] = 0; - pkg_entities[p] = 0; - } - for (i32 v = 0; v < node_count; v++) { - pkg_ticks[node_pkg[v]] += node_ticks[v]; - pkg_entities[node_pkg[v]] += 1; - } - - auto pkg_offsets = array_make(heap_allocator(), pkg_count+1); - auto pkg_targets = array_make(heap_allocator(), 0, pkg_count*4); - defer (array_free(&pkg_offsets)); - defer (array_free(&pkg_targets)); - { - auto pkg_edges = array_make>(heap_allocator(), pkg_count); - PtrMap seen = {}; - map_init(&seen); - for (i32 p = 0; p < pkg_count; p++) { - pkg_edges[p] = array_make(heap_allocator()); - } - for (i32 v = 0; v < node_count; v++) { - for (i32 e = offsets[v]; e < offsets[v+1]; e++) { - i32 pv = node_pkg[v]; - i32 pw = node_pkg[targets[e]]; - if (pv == pw) { - continue; - } - u64 key = (cast(u64)(pv+1) << 32) | cast(u64)(pw+1); - if (map_get(&seen, key) == nullptr) { - map_set(&seen, key, true); - array_add(&pkg_edges[pv], pw); - } - } - } - for (i32 p = 0; p < pkg_count; p++) { - pkg_offsets[p] = cast(i32)pkg_targets.count; - for (i32 w : pkg_edges[p]) { - array_add(&pkg_targets, w); - } - array_free(&pkg_edges[p]); - } - pkg_offsets[pkg_count] = cast(i32)pkg_targets.count; - array_free(&pkg_edges); - map_destroy(&seen); - } - - auto pkg_comp_of = array_make(heap_allocator(), pkg_count); - defer (array_free(&pkg_comp_of)); - i32 pkg_comp_count = global_graph_scc(pkg_count, pkg_offsets, pkg_targets, &pkg_comp_of); - auto pkg_comps = array_make(heap_allocator(), pkg_comp_count); - auto pkg_order = array_make(heap_allocator(), pkg_count); - defer (array_free(&pkg_comps)); - defer (array_free(&pkg_order)); - global_graph_condense(pkg_count, pkg_offsets, pkg_targets, pkg_ticks, pkg_comp_of, pkg_comp_count, &pkg_comps, &pkg_order); - u64 pkg_critical_ticks = 0; - isize pkg_cyclic = 0; - for (i32 ci = 0; ci < pkg_comp_count; ci++) { - pkg_critical_ticks = gb_max(pkg_critical_ticks, pkg_comps[ci].path_ticks); - pkg_cyclic += pkg_comps[ci].count > 1; - } - - // Report - f64 total_ms = global_graph_ms(total_ticks, freq); - f64 critical_ms = critical >= 0 ? global_graph_ms(comps[critical].path_ticks, freq) : 0; - f64 pkg_critical_ms = global_graph_ms(pkg_critical_ticks, freq); - - gb_printf_err("Global entity graph\n"); - gb_printf_err(" entities: %td (%td not timed), dependency edges: %td (%td self edges)\n", nodes.count, untimed, targets.count, self_edges); - gb_printf_err(" self time: %.3f ms total; %.3f ms during 'when' resolution, %.3f ms in the global loop\n", - total_ms, global_graph_ms(when_ticks, freq), global_graph_ms(total_ticks - when_ticks, freq)); - gb_printf_err(" groups: %d (%td with a cycle), largest has %d entities\n", - comp_count, cyclic_comps, largest >= 0 ? comps[largest].count : 0); - gb_printf_err(" critical path (entity groups): %.3f ms over %d groups -> at most %.2fx speedup\n", - critical_ms, critical >= 0 ? comps[critical].path_len : 0, critical_ms > 0 ? total_ms/critical_ms : 0.0); - gb_printf_err(" critical path (packages): %.3f ms -> at most %.2fx speedup (%d packages, %td package cycles)\n", - pkg_critical_ms, pkg_critical_ms > 0 ? total_ms/pkg_critical_ms : 0.0, pkg_count, pkg_cyclic); - - gb_printf_err(" check_import_entities (sequential, includes entity checks it triggers):\n"); - for (isize i = 0; i < GlobalImportStage_COUNT; i++) { - gb_printf_err(" %10.3f ms %s\n", global_graph_ms(global_import_stage_ticks[i], freq), global_import_stage_names[i]); - } - - { - i32 const BUCKET_COUNT = 10; - i32 const bucket_max[BUCKET_COUNT] = {1, 2, 4, 8, 16, 64, 256, 1024, 4096, 0x7fffffff}; - char const *bucket_name[BUCKET_COUNT] = {"1", "2", "3-4", "5-8", "9-16", "17-64", "65-256", "257-1024", "1025-4096", ">4096"}; - isize bucket_groups[BUCKET_COUNT] = {}; - isize bucket_entities[BUCKET_COUNT] = {}; - u64 bucket_ticks[BUCKET_COUNT] = {}; - for (i32 ci = 0; ci < comp_count; ci++) { - GlobalGraphComp *g = &comps[ci]; - for (i32 b = 0; b < BUCKET_COUNT; b++) { - if (g->count <= bucket_max[b]) { - bucket_groups[b] += 1; - bucket_entities[b] += g->count; - bucket_ticks[b] += g->ticks; - break; - } - } - } - gb_printf_err(" group sizes:\n"); - gb_printf_err(" %10s %9s %10s %12s\n", "size", "groups", "entities", "self time"); - for (i32 b = 0; b < BUCKET_COUNT; b++) { - if (bucket_groups[b] == 0) { - continue; - } - gb_printf_err(" %10s %9td %10td %9.3f ms\n", bucket_name[b], bucket_groups[b], bucket_entities[b], global_graph_ms(bucket_ticks[b], freq)); - } - } - - auto items = array_make(heap_allocator(), 0, gb_max(comp_count, pkg_count)); - defer (array_free(&items)); - - isize const TOP = 10; - isize const MAX_NAMES = 4; - - array_clear(&items); - for (i32 ci = 0; ci < comp_count; ci++) { - array_add(&items, GlobalGraphSortItem{comps[ci].ticks, ci}); - } - array_sort(items, global_graph_sort_item_desc); - gb_printf_err(" slowest groups:\n"); - for (isize i = 0; i < items.count && i < TOP; i++) { - GlobalGraphComp *g = &comps[items[i].id]; - global_graph_print_comp(nodes, order, g, g->ticks, freq, MAX_NAMES); - } - - array_clear(&items); - for (i32 ci = 0; ci < comp_count; ci++) { - if (comps[ci].count > 1) { - array_add(&items, GlobalGraphSortItem{cast(u64)comps[ci].count, ci}); - } - } - array_sort(items, global_graph_sort_item_desc); - gb_printf_err(" largest groups:\n"); - for (isize i = 0; i < items.count && i < TOP; i++) { - GlobalGraphComp *g = &comps[items[i].id]; - global_graph_print_comp(nodes, order, g, g->ticks, freq, MAX_NAMES); - } - - gb_printf_err(" critical path, last group first:\n"); - { - isize printed = 0; - for (i32 ci = critical; ci >= 0; ci = comps[ci].path_prev) { - if (printed == 30) { - gb_printf_err(" ... %d more groups\n", comps[ci].path_len); - break; - } - global_graph_print_comp(nodes, order, &comps[ci], comps[ci].ticks, freq, 2); - printed += 1; - } - } - - array_clear(&items); - for (i32 p = 0; p < pkg_count; p++) { - array_add(&items, GlobalGraphSortItem{pkg_ticks[p], p}); - } - array_sort(items, global_graph_sort_item_desc); - gb_printf_err(" slowest packages:\n"); - for (isize i = 0; i < items.count && i < TOP; i++) { - i32 p = items[i].id; - AstPackage *pkg = pkgs[p]; - String name = pkg ? pkg->name : str_lit("?"); - gb_printf_err(" %10.3f ms %7d entities %.*s\n", global_graph_ms(pkg_ticks[p], freq), pkg_entities[p], LIT(name)); - } -} diff --git a/src/checker_global_groups.cpp b/src/checker_global_groups.cpp deleted file mode 100644 index cf3e3924e..000000000 --- a/src/checker_global_groups.cpp +++ /dev/null @@ -1,769 +0,0 @@ -// Global entities are checked in groups: the strongly connected components of a dependency graph built -// from syntax, in dependency order. A group only names entities of its own or of finished groups, which -// `-internal-check-global-edges` verifies - -struct GlobalGroup { - i32 start; // into `GlobalGroupGraph::members` - i32 count; - bool done; -}; - -struct GlobalGroupGraph { - Array nodes; - PtrMap node_of; - Array offsets; // node -> the nodes it names, as `targets[offsets[v]..offsets[v+1]]` - Array targets; - Array group_of; - Array groups; // every dependency of a group has a lower index - Array members; // nodes, by group, in source order - - bool active; - i32 current_group; - Entity *current_entity; - isize missing_edges; -}; - -gb_global GlobalGroupGraph global_groups; - -struct GlobalGraphWalk { - Scope *scope; - Array *refs; -}; - -gb_internal void global_graph_walk(GlobalGraphWalk *w, Ast *node); - -gb_internal void global_graph_walk_slice(GlobalGraphWalk *w, Slice const &nodes) { - for (Ast *node : nodes) { - global_graph_walk(w, node); - } -} - -gb_internal void global_graph_add_ref(GlobalGraphWalk *w, Entity *e) { - if (e != nullptr) { - array_add(w->refs, e); - } -} - -// NOTE: names bound within the expression (parameters, fields, '$T') are also looked up globally, which at -// worst adds an edge; only procedure bodies are skipped, as they are checked after this stage -gb_internal void global_graph_walk(GlobalGraphWalk *w, Ast *node) { - if (node == nullptr) { - return; - } - switch (node->kind) { - case Ast_Ident: - global_graph_add_ref(w, scope_lookup(w->scope, node->Ident.interned, node->Ident.hash)); - break; - - case Ast_SelectorExpr: { - Ast *expr = node->SelectorExpr.expr; - Ast *selector = node->SelectorExpr.selector; - if (expr != nullptr && expr->kind == Ast_Ident) { - Entity *e = scope_lookup(w->scope, expr->Ident.interned, expr->Ident.hash); - if (e != nullptr && e->kind == Entity_ImportName && selector != nullptr && selector->kind == Ast_Ident) { - global_graph_add_ref(w, scope_lookup_current(e->ImportName.scope, selector->Ident.interned, selector->Ident.hash)); - } else { - global_graph_add_ref(w, e); - } - } else { - global_graph_walk(w, expr); - } - } break; - - case Ast_PolyType: - global_graph_walk(w, node->PolyType.specialization); - break; - case Ast_Ellipsis: - global_graph_walk(w, node->Ellipsis.expr); - break; - case Ast_ProcGroup: - global_graph_walk_slice(w, node->ProcGroup.args); - break; - case Ast_AsmGroup: - global_graph_walk_slice(w, node->AsmGroup.args); - break; - case Ast_ProcLit: - global_graph_walk(w, node->ProcLit.type); - global_graph_walk_slice(w, node->ProcLit.where_clauses); - break; - case Ast_CompoundLit: - global_graph_walk(w, node->CompoundLit.type); - global_graph_walk_slice(w, node->CompoundLit.elems); - global_graph_walk(w, node->CompoundLit.tag); - break; - case Ast_TagExpr: - global_graph_walk(w, node->TagExpr.expr); - break; - case Ast_UnaryExpr: - global_graph_walk(w, node->UnaryExpr.expr); - break; - case Ast_BinaryExpr: - global_graph_walk(w, node->BinaryExpr.left); - global_graph_walk(w, node->BinaryExpr.right); - break; - case Ast_ParenExpr: - global_graph_walk(w, node->ParenExpr.expr); - break; - case Ast_SelectorCallExpr: - global_graph_walk(w, node->SelectorCallExpr.expr); - global_graph_walk(w, node->SelectorCallExpr.call); - break; - case Ast_IndexExpr: - global_graph_walk(w, node->IndexExpr.expr); - global_graph_walk(w, node->IndexExpr.index); - break; - case Ast_MatrixIndexExpr: - global_graph_walk(w, node->MatrixIndexExpr.expr); - global_graph_walk(w, node->MatrixIndexExpr.row_index); - global_graph_walk(w, node->MatrixIndexExpr.column_index); - break; - case Ast_DerefExpr: - global_graph_walk(w, node->DerefExpr.expr); - break; - case Ast_SliceExpr: - global_graph_walk(w, node->SliceExpr.expr); - global_graph_walk(w, node->SliceExpr.low); - global_graph_walk(w, node->SliceExpr.high); - break; - case Ast_CallExpr: - global_graph_walk(w, node->CallExpr.proc); - global_graph_walk_slice(w, node->CallExpr.args); - break; - case Ast_FieldValue: - global_graph_walk(w, node->FieldValue.field); - global_graph_walk(w, node->FieldValue.value); - break; - case Ast_EnumFieldValue: - global_graph_walk(w, node->EnumFieldValue.value); - break; - case Ast_TernaryIfExpr: - global_graph_walk(w, node->TernaryIfExpr.x); - global_graph_walk(w, node->TernaryIfExpr.cond); - global_graph_walk(w, node->TernaryIfExpr.y); - break; - case Ast_TernaryWhenExpr: - global_graph_walk(w, node->TernaryWhenExpr.x); - global_graph_walk(w, node->TernaryWhenExpr.cond); - global_graph_walk(w, node->TernaryWhenExpr.y); - break; - case Ast_OrElseExpr: - global_graph_walk(w, node->OrElseExpr.x); - global_graph_walk(w, node->OrElseExpr.y); - break; - case Ast_OrReturnExpr: - global_graph_walk(w, node->OrReturnExpr.expr); - break; - case Ast_OrBranchExpr: - global_graph_walk(w, node->OrBranchExpr.expr); - break; - case Ast_TypeAssertion: - global_graph_walk(w, node->TypeAssertion.expr); - global_graph_walk(w, node->TypeAssertion.type); - break; - case Ast_TypeCast: - global_graph_walk(w, node->TypeCast.type); - global_graph_walk(w, node->TypeCast.expr); - break; - case Ast_AutoCast: - global_graph_walk(w, node->AutoCast.expr); - break; - - case Ast_Field: - global_graph_walk(w, node->Field.type); - global_graph_walk(w, node->Field.default_value); - break; - case Ast_BitFieldField: - global_graph_walk(w, node->BitFieldField.type); - global_graph_walk(w, node->BitFieldField.bit_size); - break; - case Ast_FieldList: - global_graph_walk_slice(w, node->FieldList.list); - break; - - case Ast_TypeidType: - global_graph_walk(w, node->TypeidType.specialization); - break; - case Ast_HelperType: - global_graph_walk(w, node->HelperType.type); - break; - case Ast_DistinctType: - global_graph_walk(w, node->DistinctType.type); - break; - case Ast_ProcType: - global_graph_walk(w, node->ProcType.params); - global_graph_walk(w, node->ProcType.results); - break; - case Ast_RelativeType: - global_graph_walk(w, node->RelativeType.tag); - global_graph_walk(w, node->RelativeType.type); - break; - case Ast_PointerType: - global_graph_walk(w, node->PointerType.type); - global_graph_walk(w, node->PointerType.tag); - break; - case Ast_MultiPointerType: - global_graph_walk(w, node->MultiPointerType.type); - break; - case Ast_ArrayType: - global_graph_walk(w, node->ArrayType.count); - global_graph_walk(w, node->ArrayType.elem); - global_graph_walk(w, node->ArrayType.tag); - break; - case Ast_DynamicArrayType: - global_graph_walk(w, node->DynamicArrayType.elem); - global_graph_walk(w, node->DynamicArrayType.tag); - break; - case Ast_FixedCapacityDynamicArrayType: - global_graph_walk(w, node->FixedCapacityDynamicArrayType.elem); - global_graph_walk(w, node->FixedCapacityDynamicArrayType.capacity); - global_graph_walk(w, node->FixedCapacityDynamicArrayType.tag); - break; - case Ast_StructType: - global_graph_walk_slice(w, node->StructType.fields); - global_graph_walk(w, node->StructType.polymorphic_params); - global_graph_walk(w, node->StructType.align); - global_graph_walk(w, node->StructType.min_field_align); - global_graph_walk(w, node->StructType.max_field_align); - global_graph_walk_slice(w, node->StructType.where_clauses); - break; - case Ast_UnionType: - global_graph_walk_slice(w, node->UnionType.variants); - global_graph_walk(w, node->UnionType.polymorphic_params); - global_graph_walk_slice(w, node->UnionType.where_clauses); - break; - case Ast_EnumType: - global_graph_walk(w, node->EnumType.base_type); - for (Ast *field : node->EnumType.fields) { - if (field->kind == Ast_EnumFieldValue) { - global_graph_walk(w, field->EnumFieldValue.value); - } - } - break; - case Ast_BitSetType: - global_graph_walk(w, node->BitSetType.elem); - global_graph_walk(w, node->BitSetType.underlying); - break; - case Ast_BitFieldType: - global_graph_walk(w, node->BitFieldType.backing_type); - global_graph_walk_slice(w, node->BitFieldType.fields); - break; - case Ast_MapType: - global_graph_walk(w, node->MapType.count); - global_graph_walk(w, node->MapType.key); - global_graph_walk(w, node->MapType.value); - break; - case Ast_MatrixType: - global_graph_walk(w, node->MatrixType.row_count); - global_graph_walk(w, node->MatrixType.column_count); - global_graph_walk(w, node->MatrixType.elem); - break; - - case Ast_AsmTemplate: - global_graph_walk(w, node->AsmTemplate.signature); - global_graph_walk_slice(w, node->AsmTemplate.specs); - global_graph_walk_slice(w, node->AsmTemplate.clobbers); - global_graph_walk_slice(w, node->AsmTemplate.instructions); - break; - case Ast_AsmSpec: - global_graph_walk(w, node->AsmSpec.type); - global_graph_walk(w, node->AsmSpec.value); - for (Ast *d : node->AsmSpec.directives) { - global_graph_walk(w, d); - } - break; - case Ast_AsmClobber: - global_graph_walk(w, node->AsmClobber.value); - break; - case Ast_AsmInstruction: - global_graph_walk_slice(w, node->AsmInstruction.operands); - break; - case Ast_AsmMemoryTerm: - global_graph_walk(w, node->AsmMemoryTerm.operand); - global_graph_walk(w, node->AsmMemoryTerm.scale); - break; - case Ast_AsmMemoryOperand: - global_graph_walk(w, node->AsmMemoryOperand.segment_override); - global_graph_walk_slice(w, node->AsmMemoryOperand.terms); - global_graph_walk(w, node->AsmMemoryOperand.type); - break; - case Ast_AsmRegisterGroup: - for (Ast *r : node->AsmRegisterGroup.registers) { - global_graph_walk(w, r); - } - global_graph_walk(w, node->AsmRegisterGroup.type); - break; - case Ast_AsmDirective: - global_graph_walk_slice(w, node->AsmDirective.operands); - break; - } -} - -gb_internal void global_graph_walk_entity(GlobalGraphWalk *w, Entity *e, DeclInfo *d) { - w->scope = d->scope; - global_graph_walk(w, d->type_expr); - global_graph_walk(w, d->init_expr); - for (Ast *attr : d->attributes) { - if (attr->kind != Ast_Attribute) { - continue; - } - for (Ast *elem : attr->Attribute.elems) { - if (elem->kind == Ast_FieldValue) { - global_graph_walk(w, elem->FieldValue.value); - } - } - } - if (e->kind == Entity_Procedure) { - global_graph_walk(w, e->Procedure.foreign_library_ident); - } else if (e->kind == Entity_Variable) { - global_graph_walk(w, e->Variable.foreign_library_ident); - } -} - -gb_internal bool is_global_graph_node(Entity *e) { - if (e->state == EntityState_Resolved) { - return false; - } - DeclInfo *d = e->decl_info; - if (d == nullptr || e->scope == nullptr || d->scope != e->scope || (e->scope->flags & ScopeFlag_File) == 0) { - return false; - } - switch (e->kind) { - case Entity_Constant: - case Entity_TypeName: - case Entity_Variable: - case Entity_Procedure: - case Entity_ProcGroup: - case Entity_AsmTemplate: - return true; - } - return false; -} - -gb_internal i32 global_graph_add_node(GlobalGroupGraph *g, Entity *e) { - i32 *found = map_get(&g->node_of, e); - if (found != nullptr) { - return *found; - } - i32 v = cast(i32)g->nodes.count; - map_set(&g->node_of, e, v); - array_add(&g->nodes, e); - return v; -} - -gb_internal u64 global_group_random(u64 *state) { - *state = *state*6364136223846793005ull + 1442695040888963407ull; - return *state >> 33; -} - -// The nodes `[lo, hi)` walked on one thread; a name that is not a node yet is kept as an entity in `refs` -struct GlobalGraphWalkChunk { - GlobalGroupGraph *g; - i32 lo, hi; - Array targets; - Array target_ends; // per node - Array refs; - Array ref_ends; // per node -}; - -gb_internal WORKER_TASK_PROC(global_graph_walk_worker) { - GlobalGraphWalkChunk *chunk = cast(GlobalGraphWalkChunk *)data; - GlobalGroupGraph *g = chunk->g; - - auto refs = array_make(heap_allocator(), 0, 64); - defer (array_free(&refs)); - GlobalGraphWalk w = {}; - w.refs = &refs; - for (i32 v = chunk->lo; v < chunk->hi; v++) { - Entity *e = g->nodes[v]; - array_clear(&refs); - global_graph_walk_entity(&w, e, e->decl_info); - for (Entity *r : refs) { - i32 *found = map_get(&g->node_of, r); - if (found != nullptr) { - array_add(&chunk->targets, *found); - } else if (r->flags & EntityFlag_Lazy) { - array_add(&chunk->refs, r); - } - } - array_add(&chunk->target_ends, cast(i32)chunk->targets.count); - array_add(&chunk->ref_ends, cast(i32)chunk->refs.count); - } - return 0; -} - -gb_internal void build_global_groups(Checker *c, GlobalGroupGraph *g) { - array_init(&g->nodes, heap_allocator(), 0, c->info.entities.count); - map_init(&g->node_of, c->info.entities.count); - for (Entity *e : c->info.entities) { - if ((e->flags & EntityFlag_Lazy) == 0 && is_global_graph_node(e)) { - global_graph_add_node(g, e); - } - } - - // NOTE: walked in parallel, as nothing writes to the scopes now - i32 const CHUNK_SIZE = 64; - i32 initial_count = cast(i32)g->nodes.count; - auto chunks = array_make(heap_allocator(), (initial_count + CHUNK_SIZE-1)/CHUNK_SIZE); - defer (array_free(&chunks)); - for (isize i = 0; i < chunks.count; i++) { - GlobalGraphWalkChunk *chunk = &chunks[i]; - *chunk = {}; - chunk->g = g; - chunk->lo = cast(i32)(i*CHUNK_SIZE); - chunk->hi = gb_min(chunk->lo + CHUNK_SIZE, initial_count); - array_init(&chunk->targets, heap_allocator(), 0, 4*CHUNK_SIZE); - array_init(&chunk->target_ends, heap_allocator(), 0, CHUNK_SIZE); - array_init(&chunk->refs, heap_allocator(), 0); - array_init(&chunk->ref_ends, heap_allocator(), 0, CHUNK_SIZE); - thread_pool_add_task(global_graph_walk_worker, chunk); - } - thread_pool_wait(); - - auto edge_from = array_make(heap_allocator(), 0, 4*g->nodes.count); - auto edge_to = array_make(heap_allocator(), 0, 4*g->nodes.count); - auto refs = array_make(heap_allocator(), 0, 64); - defer (array_free(&edge_from)); - defer (array_free(&edge_to)); - defer (array_free(&refs)); - - auto add_ref = [&](i32 v, Entity *r) { - i32 *found = map_get(&g->node_of, r); - if (found != nullptr) { - array_add(&edge_from, v); - array_add(&edge_to, *found); - } else if ((r->flags & EntityFlag_Lazy) && is_global_graph_node(r)) { - // NOTE: a lazy entity becomes a node once a node names it - array_add(&edge_from, v); - array_add(&edge_to, global_graph_add_node(g, r)); - } - }; - - GlobalGraphWalk w = {}; - w.refs = &refs; - i32 first_of_decl = -1; - for (i32 v = 0; v < g->nodes.count; v++) { - Entity *e = g->nodes[v]; - DeclInfo *d = e->decl_info; - - // NOTE: entities sharing one declaration share its AST, e.g. `a, b: struct{x: int}`, so they share a group; - // in source order they are adjacent, and lazy ones are only checked under `lazy_mutex` - if (first_of_decl >= 0 && d->decl_node != nullptr && g->nodes[first_of_decl]->decl_info->decl_node == d->decl_node) { - array_add(&edge_from, v); - array_add(&edge_to, first_of_decl); - array_add(&edge_from, first_of_decl); - array_add(&edge_to, v); - } else { - first_of_decl = v; - } - - if (v < initial_count) { - GlobalGraphWalkChunk *chunk = &chunks[v / CHUNK_SIZE]; - i32 k = v - chunk->lo; - for (i32 i = k > 0 ? chunk->target_ends[k-1] : 0; i < chunk->target_ends[k]; i++) { - array_add(&edge_from, v); - array_add(&edge_to, chunk->targets[i]); - } - for (i32 i = k > 0 ? chunk->ref_ends[k-1] : 0; i < chunk->ref_ends[k]; i++) { - add_ref(v, chunk->refs[i]); - } - } else { - array_clear(&refs); - global_graph_walk_entity(&w, e, d); - for (Entity *r : refs) { - add_ref(v, r); - } - } - } - for (GlobalGraphWalkChunk &chunk : chunks) { - array_free(&chunk.targets); - array_free(&chunk.target_ends); - array_free(&chunk.refs); - array_free(&chunk.ref_ends); - } - - i32 node_count = cast(i32)g->nodes.count; - array_init(&g->offsets, heap_allocator(), node_count+1); - array_init(&g->targets, heap_allocator(), edge_to.count); - for (i32 v = 0; v <= node_count; v++) { - g->offsets[v] = 0; - } - for (i32 from : edge_from) { - g->offsets[from+1] += 1; - } - for (i32 v = 0; v < node_count; v++) { - g->offsets[v+1] += g->offsets[v]; - } - { - auto fill = array_clone(heap_allocator(), g->offsets); - defer (array_free(&fill)); - for (isize i = 0; i < edge_from.count; i++) { - g->targets[fill[edge_from[i]]++] = edge_to[i]; - } - } - - array_init(&g->group_of, heap_allocator(), node_count); - i32 group_count = global_graph_scc(node_count, g->offsets, g->targets, &g->group_of); - - array_init(&g->groups, heap_allocator(), group_count); - array_init(&g->members, heap_allocator(), node_count); - for (i32 gi = 0; gi < group_count; gi++) { - g->groups[gi] = {}; - } - for (i32 v = 0; v < node_count; v++) { - g->groups[g->group_of[v]].count += 1; - } - i32 start = 0; - for (i32 gi = 0; gi < group_count; gi++) { - g->groups[gi].start = start; - start += g->groups[gi].count; - g->groups[gi].count = 0; - } - // NOTE: in source order, as `c->info.entities` is sorted; lazy nodes come last, but are not checked here - for (i32 v = 0; v < node_count; v++) { - GlobalGroup *group = &g->groups[g->group_of[v]]; - g->members[group->start + group->count++] = v; - } -} - -gb_internal void global_group_print_entity(Entity *e) { - if (e == nullptr) { - gb_printf_err("?"); - return; - } - global_graph_print_entity(e); -} - -// Called when `e` starts being checked: it must be in the current group or a finished one -gb_internal void global_group_check_edge(CheckerContext *ctx, Entity *e) { - GlobalGroupGraph *g = &global_groups; - if (!g->active) { - return; - } - i32 *v = map_get(&g->node_of, e); - if (v == nullptr) { - if (!is_global_graph_node(e)) { - return; - } - } else { - i32 gi = g->group_of[*v]; - if (gi == g->current_group || g->groups[gi].done) { - return; - } - } - - g->missing_edges += 1; - if (build_context.internal_check_global_edges) { - Entity *by = ctx->decl ? ctx->decl->entity.load() : nullptr; - gb_printf_err("Missing global dependency: "); - global_group_print_entity(by); - gb_printf_err(" needs "); - global_group_print_entity(e); - gb_printf_err(v == nullptr ? ", which is not in the graph" : ""); - if (g->current_entity != by) { - gb_printf_err(", while checking "); - global_group_print_entity(g->current_entity); - } - gb_printf_err("\n"); - } -} - -// NOTE: members in a fixed order, as which member of a cycle is entered first can decide whether it checks, -// e.g. an enum whose values are `union_variant_index`es of a union with pointers back to it -gb_internal void check_global_group(Checker *c, GlobalGroupGraph *g, i32 gi) { - GlobalGroup *group = &g->groups[gi]; - i32 *members = g->members.data + group->start; - - g->current_group = gi; - for (i32 k = 0; k < group->count; k++) { - Entity *e = g->nodes[members[k]]; - if (e->flags & EntityFlag_Lazy) { - // NOTE: only checked when something uses it; the group orders it after what it names - continue; - } - g->current_entity = e; - GlobalEntityTimingFrame timing_frame = global_entity_timing_begin(e); - check_single_global_entity(c, e, e->decl_info); - if (e->type != nullptr && is_type_typed(e->type)) { - for (Type *t = nullptr; mpsc_dequeue(&c->soa_types_to_complete, &t); /**/) { - complete_soa_type(c, t, false); - } - - (void)type_size_of(e->type); - (void)type_align_of(e->type); - } - global_entity_timing_end(timing_frame, e); - } - group->done = true; - g->current_group = -1; - g->current_entity = nullptr; -} - -// Groups in dependency order; with `-internal-shuffle-global-entities`, a random one of the groups whose -// dependencies are done, as a parallel checker might -gb_internal void check_global_groups(Checker *c, GlobalGroupGraph *g) { - i32 group_count = cast(i32)g->groups.count; - u64 seed = build_context.internal_shuffle_global_entities; - if (seed == 0) { - for (i32 gi = 0; gi < group_count; gi++) { - check_global_group(c, g, gi); - } - return; - } - - auto dependents = array_make >(heap_allocator(), group_count); - auto dep_count = array_make (heap_allocator(), group_count); - auto seen = array_make (heap_allocator(), group_count); - auto ready = array_make (heap_allocator(), 0, group_count); - defer ({ - for (auto &d : dependents) { - array_free(&d); - } - array_free(&dependents); - }); - defer (array_free(&dep_count)); - defer (array_free(&seen)); - defer (array_free(&ready)); - - for (i32 gi = 0; gi < group_count; gi++) { - dep_count[gi] = 0; - dependents[gi] = {}; - seen[gi] = -1; - } - for (i32 gi = 0; gi < group_count; gi++) { - GlobalGroup const &group = g->groups[gi]; - for (i32 k = 0; k < group.count; k++) { - i32 v = g->members[group.start + k]; - for (i32 i = g->offsets[v]; i < g->offsets[v+1]; i++) { - i32 dep = g->group_of[g->targets[i]]; - if (dep != gi && seen[dep] != gi) { - seen[dep] = gi; - dep_count[gi] += 1; - if (dependents[dep].allocator.proc == nullptr) { - array_init(&dependents[dep], heap_allocator()); - } - array_add(&dependents[dep], gi); - } - } - } - if (dep_count[gi] == 0) { - array_add(&ready, gi); - } - } - - u64 state = seed; - isize checked = 0; - while (ready.count > 0) { - isize i = cast(isize)(global_group_random(&state) % cast(u64)ready.count); - i32 gi = ready[i]; - ready[i] = ready[ready.count-1]; - array_pop(&ready); - - check_global_group(c, g, gi); - checked += 1; - for (i32 next : dependents[gi]) { - if (--dep_count[next] == 0) { - array_add(&ready, next); - } - } - } - GB_ASSERT(checked == group_count); -} - -gb_internal void destroy_global_groups(GlobalGroupGraph *g) { - array_free(&g->nodes); - map_destroy(&g->node_of); - array_free(&g->offsets); - array_free(&g->targets); - array_free(&g->group_of); - array_free(&g->groups); - array_free(&g->members); -} - -// -internal-global-entity-graph: the graph the groups come from, weighted by the measured self times -gb_internal void print_global_groups(GlobalGroupGraph *g) { - u64 const freq = time_stamp__freq(); - i32 group_count = cast(i32)g->groups.count; - - auto ticks = array_make(heap_allocator(), group_count); - auto path = array_make(heap_allocator(), group_count); - auto seen = array_make(heap_allocator(), group_count); - defer (array_free(&ticks)); - defer (array_free(&path)); - defer (array_free(&seen)); - - u64 total = 0; - i32 largest = 0; - isize cyclic = 0; - mutex_lock(&global_entity_time_mutex); - for (i32 gi = 0; gi < group_count; gi++) { - GlobalGroup const &group = g->groups[gi]; - ticks[gi] = 0; - seen[gi] = -1; - for (i32 k = 0; k < group.count; k++) { - GlobalEntityTime *t = map_get(&global_entity_times, g->nodes[g->members[group.start + k]]); - ticks[gi] += t ? t->ticks : 0; - } - total += ticks[gi]; - largest = gb_max(largest, group.count); - cyclic += group.count > 1; - } - mutex_unlock(&global_entity_time_mutex); - - u64 critical = 0; - for (i32 gi = 0; gi < group_count; gi++) { - GlobalGroup const &group = g->groups[gi]; - u64 longest = 0; - for (i32 k = 0; k < group.count; k++) { - i32 v = g->members[group.start + k]; - for (i32 i = g->offsets[v]; i < g->offsets[v+1]; i++) { - i32 dep = g->group_of[g->targets[i]]; - if (dep != gi && seen[dep] != gi) { - seen[dep] = gi; - longest = gb_max(longest, path[dep]); - } - } - } - path[gi] = ticks[gi] + longest; - critical = gb_max(critical, path[gi]); - } - - f64 total_ms = global_graph_ms(total, freq); - f64 critical_ms = global_graph_ms(critical, freq); - gb_printf_err("Global groups (syntactic graph, as scheduled)\n"); - gb_printf_err(" nodes: %td, edges: %td, groups: %d (%td with a cycle), largest has %d entities\n", - g->nodes.count, g->targets.count, group_count, cyclic, largest); - gb_printf_err(" critical path: %.3f ms of %.3f ms -> at most %.2fx speedup\n", - critical_ms, total_ms, critical_ms > 0 ? total_ms/critical_ms : 0.0); - gb_printf_err(" missing edges: %td\n", g->missing_edges); -} - -gb_internal void check_all_global_entities(Checker *c) { - in_single_threaded_checker_stage.store(true, std::memory_order_relaxed); - - // NOTE(bill): the runtime types the checker looks up by name rather than through a declaration - init_preload(c); - { - u32 hash = 0; - InternedString name = string_interner_insert(str_lit("Load_Directory_File"), 0, &hash); - if (scope_lookup_current(c->info.runtime_package->scope, name, hash) != nullptr) { - init_core_load_directory_file(c); - } - } - - TIME_SECTION("check all global entities - build groups"); - GlobalGroupGraph *g = &global_groups; - build_global_groups(c, g); - - TIME_SECTION("check all global entities - check groups"); - g->active = true; - g->current_group = -1; - check_global_groups(c, g); - g->active = false; - - if (build_context.internal_check_global_edges && g->missing_edges > 0) { - gb_printf_err("%td missing global dependencies\n", g->missing_edges); - gb_exit(1); - } - - in_single_threaded_checker_stage.store(false, std::memory_order_relaxed); -} diff --git a/src/checker_global_when.cpp b/src/checker_global_when.cpp deleted file mode 100644 index 2b4187b68..000000000 --- a/src/checker_global_when.cpp +++ /dev/null @@ -1,474 +0,0 @@ -// Global 'when's and 'foreign' blocks: every name one may declare is a placeholder in its scope, and the -// first lookup of a placeholder resolves them, so the order of files and declarations does not matter - -struct GlobalDeclSource { - Ast * node; // WhenStmt or ForeignBlockDecl - AstFile * file; - GlobalDeclSource *parent; - bool in_else; // within the else branch of `parent` - bool reachable; - bool reported_cycle; - EntityState state; - ForeignContext foreign_context; // of a resolved 'foreign' block -}; - -struct GlobalDeclSourceFrame { - GlobalDeclSource *source; - InternedString needs; // the placeholder being resolved for it -}; - -gb_global Array global_decl_sources; -gb_global Array global_decl_source_stack; -gb_global Array global_placeholder_scopes; -gb_global CheckerContext global_decl_source_export_ctx; -gb_global UntypedExprInfoMap global_decl_source_export_untyped; - -enum : u8 { - PlaceholderScope_File = 1<<0, - PlaceholderScope_Pkg = 1<<1, -}; - -// -1 when 'private' has a value that is not a string literal -gb_internal i32 syntactic_visibility(Array const &attributes) { - for (Ast *attr : attributes) { - if (attr->kind != Ast_Attribute) { - continue; - } - for (Ast *elem : attr->Attribute.elems) { - if (elem->kind == Ast_Ident && elem->Ident.token.string == "private") { - return EntityVisiblity_PrivateToPackage; - } - if (elem->kind == Ast_FieldValue && - elem->FieldValue.field->kind == Ast_Ident && - elem->FieldValue.field->Ident.token.string == "private") { - Ast *value = elem->FieldValue.value; - if (value != nullptr && value->tav.value.kind == ExactValue_String) { - return value->tav.value.value_string == "file" ? EntityVisiblity_PrivateToFile : EntityVisiblity_PrivateToPackage; - } - return -1; - } - } - } - return EntityVisiblity_Public; -} - -gb_internal bool has_syntactic_attribute(Array const &attributes, String const &name) { - for (Ast *attr : attributes) { - if (attr->kind != Ast_Attribute) { - continue; - } - for (Ast *elem : attr->Attribute.elems) { - Ast *field = elem->kind == Ast_FieldValue ? elem->FieldValue.field : elem; - if (field->kind == Ast_Ident && field->Ident.token.string == name) { - return true; - } - } - } - return false; -} - -gb_internal void add_placeholder(Scope *s, InternedString name, GlobalDeclSource *src) { - if (name.value == 0 || name.is_blank()) { - return; - } - if (s->placeholders == nullptr) { - s->placeholders = permanent_alloc_item>(); - map_init(s->placeholders); - array_add(&global_placeholder_scopes, s); - } - u64 key = name.value; - for (auto *e = multi_map_find_first(s->placeholders, key); e != nullptr; e = multi_map_find_next(s->placeholders, e)) { - if (e->value == src) { - return; - } - } - multi_map_insert(s->placeholders, key, src); -} - -gb_internal void add_placeholders(AstFile *f, u8 scopes, InternedString name, GlobalDeclSource *src) { - if (scopes & PlaceholderScope_File) { - add_placeholder(f->scope, name, src); - } - if (scopes & PlaceholderScope_Pkg) { - add_placeholder(f->pkg->scope, name, src); - } -} - -gb_internal GlobalDeclSource *add_global_decl_source(Ast *node, AstFile *f, GlobalDeclSource *parent, bool in_else) { - GlobalDeclSource *src = permanent_alloc_item(); - src->node = node; - src->file = f; - src->parent = parent; - src->in_else = in_else; - src->reachable = true; - src->state = EntityState_Unresolved; - array_add(&global_decl_sources, src); - return src; -} - -gb_internal void scan_global_decl_sources(AstFile *f, Slice const &stmts, GlobalDeclSource *owner, bool in_else, i32 foreign_visibility); - -gb_internal void scan_global_when_stmt(AstFile *f, Ast *node, GlobalDeclSource *parent, bool in_else, i32 foreign_visibility) { - ast_node(ws, WhenStmt, node); - GlobalDeclSource *src = add_global_decl_source(node, f, parent, in_else); - if (ws->body != nullptr && ws->body->kind == Ast_BlockStmt) { - scan_global_decl_sources(f, ws->body->BlockStmt.stmts, src, false, foreign_visibility); - } - if (ws->else_stmt != nullptr) { - switch (ws->else_stmt->kind) { - case Ast_BlockStmt: - scan_global_decl_sources(f, ws->else_stmt->BlockStmt.stmts, src, true, foreign_visibility); - break; - case Ast_WhenStmt: - scan_global_when_stmt(f, ws->else_stmt, src, true, foreign_visibility); - break; - } - } -} - -gb_internal void scan_global_decl_sources(AstFile *f, Slice const &stmts, GlobalDeclSource *owner, bool in_else, i32 foreign_visibility) { - // NOTE(bill): `owner == nullptr` is the file scope itself, whose other declarations are already collected - for (Ast *decl : stmts) { - switch (decl->kind) { - case_ast_node(vd, ValueDecl, decl); - if (owner == nullptr) { - break; - } - i32 visibility = syntactic_visibility(vd->attributes); - if (visibility == EntityVisiblity_Public) { - visibility = foreign_visibility; - } - if (visibility == EntityVisiblity_Public && (f->flags & AstFile_IsPrivateFile)) { - visibility = EntityVisiblity_PrivateToFile; - } - u8 scopes = PlaceholderScope_Pkg; - if (visibility == EntityVisiblity_PrivateToFile) { - scopes = PlaceholderScope_File; - } else if (visibility < 0) { - scopes = PlaceholderScope_File|PlaceholderScope_Pkg; - } - for (Ast *name : vd->names) { - if (name->kind == Ast_Ident) { - add_placeholders(f, scopes, name->Ident.interned, owner); - } - } - case_end; - - case_ast_node(fl, ForeignImportDecl, decl); - if (owner == nullptr) { - break; - } - String library_name = fl->library_name.string; - if (library_name.len == 0 && fl->fullpaths.count != 0) { - library_name = path_to_entity_name(fl->library_name.string, fl->fullpaths[0]); - } - if (library_name.len != 0) { - u8 scopes = has_syntactic_attribute(fl->attributes, str_lit("export")) ? PlaceholderScope_Pkg : PlaceholderScope_File; - add_placeholders(f, scopes, string_interner_insert(library_name), owner); - } - case_end; - - case_ast_node(fb, ForeignBlockDecl, decl); - GlobalDeclSource *src = add_global_decl_source(decl, f, owner, in_else); - if (fb->body != nullptr && fb->body->kind == Ast_BlockStmt) { - scan_global_decl_sources(f, fb->body->BlockStmt.stmts, src, false, syntactic_visibility(fb->attributes)); - } - case_end; - - case_ast_node(ws, WhenStmt, decl); - scan_global_when_stmt(f, decl, owner, in_else, foreign_visibility); - case_end; - - case_ast_node(es, ExprStmt, decl); - if (owner == nullptr && es->expr->kind == Ast_CallExpr && - es->expr->CallExpr.proc->kind == Ast_BasicDirective && - (decl->state_flags & StateFlag_BeenHandled) == 0) { - decl->state_flags |= StateFlag_BeenHandled; - array_add(&f->delayed_decls_queues[AstDelayQueue_Expr], es->expr); - } - case_end; - } - } -} - -gb_internal bool is_global_decl_source_in_when(GlobalDeclSource *src) { - for (; src != nullptr; src = src->parent) { - if (src->node->kind == Ast_WhenStmt) { - return true; - } - } - return false; -} - -gb_internal Slice global_decl_source_taken_stmts(GlobalDeclSource *src) { - if (src->node->kind == Ast_ForeignBlockDecl) { - Ast *body = src->node->ForeignBlockDecl.body; - if (body != nullptr && body->kind == Ast_BlockStmt) { - return body->BlockStmt.stmts; - } - return {}; - } - ast_node(ws, WhenStmt, src->node); - if (ws->determined_cond) { - if (ws->body != nullptr && ws->body->kind == Ast_BlockStmt) { - return ws->body->BlockStmt.stmts; - } - } else if (ws->else_stmt != nullptr && ws->else_stmt->kind == Ast_BlockStmt) { - return ws->else_stmt->BlockStmt.stmts; - } - return {}; -} - -gb_internal void collect_global_decl_source_stmts(CheckerContext *ctx, Slice const &stmts) { - AstFile *f = ctx->file; - for (Ast *decl : stmts) { - if (decl->kind == Ast_ValueDecl) { - check_collect_value_decl(ctx, decl); - } - } - check_export_entities_in_pkg(&global_decl_source_export_ctx, f->pkg, &global_decl_source_export_untyped); - - // NOTE(bill): after the value declarations, as their attributes are evaluated - for (Ast *decl : stmts) { - switch (decl->kind) { - case_ast_node(fl, ForeignImportDecl, decl); - check_add_foreign_import_decl(ctx, decl); - case_end; - - case_ast_node(es, ExprStmt, decl); - if (es->expr->kind == Ast_CallExpr && es->expr->CallExpr.proc->kind == Ast_BasicDirective && - (decl->state_flags & StateFlag_BeenHandled) == 0) { - decl->state_flags |= StateFlag_BeenHandled; - array_add(&f->delayed_decls_queues[AstDelayQueue_Expr], es->expr); - } - case_end; - } - } -} - -gb_internal Token global_decl_source_token(GlobalDeclSource *src) { - if (src->node->kind == Ast_WhenStmt) { - return src->node->WhenStmt.token; - } - return src->node->ForeignBlockDecl.token; -} - -gb_internal void report_global_decl_source_cycle(GlobalDeclSource *src, InternedString needed) { - if (src->reported_cycle) { - return; - } - src->reported_cycle = true; - - isize start = 0; - for (isize i = global_decl_source_stack.count-1; i >= 0; i--) { - if (global_decl_source_stack[i].source == src) { - start = i; - break; - } - } - - ERROR_BLOCK(); - Token token = global_decl_source_token(src); - error(token, "Cyclic dependency between global '%.*s' declarations", LIT(token.string)); - for (isize i = start; i < global_decl_source_stack.count; i++) { - Token t = global_decl_source_token(global_decl_source_stack[i].source); - InternedString name = i+1 < global_decl_source_stack.count ? global_decl_source_stack[i].needs : needed; - error_line("\t'%.*s' at %s needs '%s', which may be declared by\n", LIT(t.string), token_pos_to_string(t.pos), name.cstring()); - } - error_line("\t'%.*s' at %s\n", LIT(token.string), token_pos_to_string(token.pos)); -} - -gb_internal void resolve_global_decl_source(GlobalDeclSource *src, InternedString needed) { - if (src->state == EntityState_Resolved) { - return; - } - if (src->state == EntityState_InProgress) { - report_global_decl_source_cycle(src, needed); - return; - } - - GlobalDeclSource *foreign_block = nullptr; - if (src->parent != nullptr) { - GlobalDeclSource *parent = src->parent; - resolve_global_decl_source(parent, needed); - if (parent->state != EntityState_Resolved) { - return; - } - bool reachable = parent->reachable; - if (parent->node->kind == Ast_WhenStmt) { - reachable = reachable && parent->node->WhenStmt.determined_cond != src->in_else; - } - if (!reachable) { - src->reachable = false; - src->state = EntityState_Resolved; - return; - } - for (GlobalDeclSource *p = parent; p != nullptr; p = p->parent) { - if (p->node->kind == Ast_ForeignBlockDecl) { - foreign_block = p; - break; - } - } - } - - src->state = EntityState_InProgress; - array_add(&global_decl_source_stack, GlobalDeclSourceFrame{src, {}}); - - CheckerContext ctx = {}; - init_checker_context(&ctx, global_checker_ptr.load(std::memory_order_relaxed)); - UntypedExprInfoMap untyped = {}; - reset_checker_context(&ctx, src->file, &untyped); - if (foreign_block != nullptr) { - ctx.foreign_context = foreign_block->foreign_context; - } - - if (src->node->kind == Ast_WhenStmt) { - ast_node(ws, WhenStmt, src->node); - Operand operand = {Addressing_Invalid}; - check_expr(&ctx, &operand, ws->cond); - if (operand.mode != Addressing_Invalid && !is_type_boolean(operand.type)) { - error(ws->cond, "Non-boolean condition in 'when' statement"); - } - if (operand.mode != Addressing_Constant) { - error(ws->cond, "Non-constant condition in 'when' statement"); - } - ws->is_cond_determined = true; - ws->determined_cond = operand.value.kind == ExactValue_Bool && operand.value.value_bool; - if (ws->body == nullptr || ws->body->kind != Ast_BlockStmt) { - error(ws->cond, "Invalid body for 'when' statement"); - } else if (ws->else_stmt != nullptr && ws->else_stmt->kind != Ast_BlockStmt && ws->else_stmt->kind != Ast_WhenStmt) { - error(ws->else_stmt, "Invalid 'else' statement in 'when' statement"); - } - } else { - ast_node(fb, ForeignBlockDecl, src->node); - if (fb->foreign_library->kind == Ast_Ident) { - ctx.foreign_context.curr_library = fb->foreign_library; - } else { - error(fb->foreign_library, "Foreign block name must be an identifier or 'export'"); - ctx.foreign_context.curr_library = nullptr; - } - check_decl_attributes(&ctx, fb->attributes, foreign_block_decl_attribute, nullptr); - src->foreign_context = ctx.foreign_context; - } - - // NOTE: resolved before its declarations are collected, which evaluates the attributes of 'foreign import's - src->state = EntityState_Resolved; - array_pop(&global_decl_source_stack); - - collect_global_decl_source_stmts(&ctx, global_decl_source_taken_stmts(src)); - - add_untyped_expressions(ctx.info, &untyped); - map_destroy(&untyped); - destroy_checker_context(&ctx); -} - -gb_internal Entity *force_scope_placeholders(Scope *s, InternedString name, u32 hash) { - PtrMap *m = s->placeholders; - bool forced = false; - for (auto *e = multi_map_find_first(m, cast(u64)name.value); e != nullptr; e = multi_map_find_next(m, e)) { - GlobalDeclSource *src = e->value; - if (src->state != EntityState_Resolved) { - if (global_decl_source_stack.count > 0) { - global_decl_source_stack[global_decl_source_stack.count-1].needs = name; - } - resolve_global_decl_source(src, name); - forced = true; - } - } - if (!forced) { - return nullptr; - } - rw_mutex_shared_lock(&s->mutex); - Entity *found = scope_map_get(&s->elements, name, hash); - rw_mutex_shared_unlock(&s->mutex); - return found; -} - -gb_internal void check_vet_when_shadowing_entity(Entity *e) { - if (e == nullptr || e->scope == nullptr || (e->scope->flags & ScopeFlag_File) == 0) { - return; - } - InternedString name = entity_interned_name(e); - u32 hash = e->interned_name_hash.load(std::memory_order_relaxed); - Scope *outer = e->scope->parent; - if (scope_map_get(&e->scope->elements, name, hash) != e) { - outer = outer->parent; // in the package scope - } - if (outer == nullptr) { - return; - } - Entity *shadowed = scope_lookup(outer, name, hash); - if (shadowed == nullptr || shadowed == e) { - return; - } - if (shadowed->scope == builtin_pkg->scope) { - error(e->token, "Declaration of '%.*s' within a global 'when' shadows the builtin '%.*s'", LIT(e->token.string), LIT(e->token.string)); - } else { - error(e->token, "Declaration of '%.*s' within a global 'when' shadows the declaration at %s", LIT(e->token.string), token_pos_to_string(shadowed->token.pos)); - } -} - -gb_internal void check_vet_when_shadowing(void) { - for (GlobalDeclSource *src : global_decl_sources) { - if (!src->reachable || src->state != EntityState_Resolved) { - continue; - } - if ((ast_file_vet_flags(src->file) & VetFlag_WhenShadowing) == 0 || !is_global_decl_source_in_when(src)) { - continue; - } - for (Ast *decl : global_decl_source_taken_stmts(src)) { - if (decl->kind == Ast_ValueDecl) { - for (Ast *name : decl->ValueDecl.names) { - if (name->kind == Ast_Ident) { - check_vet_when_shadowing_entity(name->Ident.entity.load()); - } - } - } else if (decl->kind == Ast_ForeignImportDecl) { - Token token = decl->ForeignImportDecl.library_name; - InternedString name = string_interner_insert(token.string); - for (Scope *s = src->file->scope; s != nullptr && s != builtin_pkg->scope; s = s->parent) { - Entity *e = scope_map_get(&s->elements, name, name.hash()); - if (e != nullptr && e->kind == Entity_LibraryName && e->LibraryName.decl == decl) { - check_vet_when_shadowing_entity(e); - break; - } - } - } - } - } -} - -// Placeholders for every file, then every source resolved in package, file and source order, which -// only matters for which errors are reported -gb_internal void resolve_global_decl_sources(Checker *c, Array const &package_order) { - array_init(&global_decl_sources, heap_allocator()); - array_init(&global_decl_source_stack, heap_allocator()); - array_init(&global_placeholder_scopes, heap_allocator()); - init_checker_context(&global_decl_source_export_ctx, c); - defer (destroy_checker_context(&global_decl_source_export_ctx)); - - u64 stage_start = global_import_stage_begin(); - for (ImportGraphNode *node : package_order) { - for (AstFile *f : node->pkg->files) { - scan_global_decl_sources(f, f->decls, nullptr, false, EntityVisiblity_Public); - } - } - global_import_stage_end(GlobalImportStage_Placeholders, stage_start); - - stage_start = global_import_stage_begin(); - for (GlobalDeclSource *src : global_decl_sources) { - resolve_global_decl_source(src, {}); - } - GB_ASSERT(global_decl_source_stack.count == 0); - - for (Scope *s : global_placeholder_scopes) { - map_destroy(s->placeholders); - s->placeholders = nullptr; - } - array_clear(&global_placeholder_scopes); - - check_vet_when_shadowing(); - global_import_stage_end(GlobalImportStage_DeclSources, stage_start); - - map_destroy(&global_decl_source_export_untyped); -} From 66c4fe1d4990359501bd327635bfa717e59227a2 Mon Sep 17 00:00:00 2001 From: gingerBill Date: Thu, 1 Oct 2026 18:49:51 +0100 Subject: [PATCH 128/215] Decide cycles of global `when`s by trying every choice of their branches; ambiguous or contradictory cycles are errors --- src/check_decl.cpp | 5 + src/checker.cpp | 35 +- src/checker.hpp | 9 + src/checker_global.cpp | 820 ++++++++++++++++-- tests/issues/run.bat | 4 +- tests/issues/run.sh | 9 +- .../issues/test_issue_global_when_cycle.odin | 8 +- 7 files changed, 829 insertions(+), 61 deletions(-) diff --git a/src/check_decl.cpp b/src/check_decl.cpp index fd9672f21..3343465ae 100644 --- a/src/check_decl.cpp +++ b/src/check_decl.cpp @@ -2140,6 +2140,11 @@ gb_internal void check_entity_decl(CheckerContext *ctx, Entity *e, DeclInfo *d, if (e->state == EntityState_Resolved) { return; } + GlobalWhenTrialEntityScope trial_scope = {}; + if (global_when_trial != nullptr && !global_when_trial_begin_entity(e, &trial_scope)) { + return; + } + defer (global_when_trial_end_entity(&trial_scope)); bool is_lazy = (e->flags & EntityFlag_Lazy) != 0; if (is_lazy) { mutex_lock(&ctx->info->lazy_mutex); diff --git a/src/checker.cpp b/src/checker.cpp index 7acd8f3f8..6bc02b9f6 100644 --- a/src/checker.cpp +++ b/src/checker.cpp @@ -387,8 +387,8 @@ gb_internal void check_open_scope(CheckerContext *c, Ast *node) { break; } if (c->decl && c->decl->proc_lit) { - // NOTE: numbered by position rather than in checking order, as that order varies (e.g. with - // which caller instantiates a record first); 0 is the procedure's own scope + // NOTE(bill): numbered by position rather than in checking order, as that order varies + // (e.g. with which caller instantiates a record first); 0 is the procedure's own scope scope->index = node->kind == Ast_ProcType ? 0 : 1 + ast_token(node).pos.offset; } c->scope = scope; @@ -402,12 +402,19 @@ gb_internal void check_close_scope(CheckerContext *c) { gb_internal Entity *force_scope_placeholders(Scope *s, InternedString name, u32 hash); +struct GlobalWhenTrial; +gb_global GlobalWhenTrial *global_when_trial; +gb_internal Entity *global_when_trial_lookup(Scope *s, InternedString name, u32 hash, Entity *found); + gb_internal Entity *scope_lookup_current(Scope *s, InternedString name, u32 hash) { // Entity **found = string_map_get(&s->elements, name); if (hash == 0) { hash = name.hash(); } Entity *found = scope_map_get(&s->elements, name, hash); + if (global_when_trial != nullptr) { + found = global_when_trial_lookup(s, name, hash, found); + } if (found) { return found; } @@ -433,6 +440,9 @@ gb_internal void scope_lookup_parent(Scope *scope, InternedString name, Scope ** if (!is_single_threaded) rw_mutex_shared_lock(&s->mutex); found = scope_map_get(&s->elements, name, hash); if (!is_single_threaded) rw_mutex_shared_unlock(&s->mutex); + if (global_when_trial != nullptr) { + found = global_when_trial_lookup(s, name, hash, found); + } if (found == nullptr && s->placeholders != nullptr) { found = force_scope_placeholders(s, name, hash); } @@ -2093,8 +2103,8 @@ gb_internal bool redeclaration_error(String name, Entity *prev, Entity *found) { // NOTE(bill): Error should have been handled already return false; } - // NOTE: the insertion order is a race between the files of a package, so order the pair by - // position; the later declaration stays the anchor, as it is the one being reported + // NOTE(bill): the insertion order is a race between the files of a package, so order the pair by position; + // the later declaration stays the anchor, as it is the one being reported TokenPos first = prev->token.pos; TokenPos second = pos; if (second < first) { @@ -2276,6 +2286,19 @@ gb_internal void add_entity_and_decl_info(CheckerContext *c, Ast *identifier, En e->flags &= ~EntityFlag_Lazy; } + if (c->trial_entities != nullptr) { + // NOTE(bill): a scratch copy for a global 'when' trial, put in no scope or queue + e->flags &= ~EntityFlag_Lazy; + e->file = c->file; + e->decl_info = d; + e->pkg = c->pkg; + d->entity.store(e); + identifier->Ident.entity = e; + e->identifier = identifier; + array_add(c->trial_entities, e); + return; + } + if (e->scope != nullptr) { Scope *scope = e->scope; @@ -5124,7 +5147,9 @@ gb_internal void check_collect_value_decl(CheckerContext *c, Ast *decl) { } } - check_builtin_attributes(c, e, &d->attributes); + if (c->trial_entities == nullptr) { + check_builtin_attributes(c, e, &d->attributes); + } bool is_exported = entity_visibility_kind != EntityVisiblity_PrivateToFile; add_entity_and_decl_info(c, name, e, d, is_exported); diff --git a/src/checker.hpp b/src/checker.hpp index 05eed75ef..633790405 100644 --- a/src/checker.hpp +++ b/src/checker.hpp @@ -850,6 +850,8 @@ struct CheckerContext { u8 bit_field_bit_size; Scope * polymorphic_scope; + Array *trial_entities; // global declarations are collected here only, for a global 'when' trial + Ast *assignment_lhs_hint; Ast *asm_template_hint; }; @@ -919,6 +921,13 @@ gb_internal void check_add_foreign_import_decl(CheckerContext *c, Ast *decl); gb_internal void check_entity_decl(CheckerContext *c, Entity *e, DeclInfo *d, Type *named_type); gb_internal void global_group_check_edge(CheckerContext *ctx, Entity *e); +struct GlobalWhenTrialEntityScope { + struct GlobalWhenTrial *trial; + i32 mute_depth; +}; +gb_internal bool global_when_trial_begin_entity(Entity *e, GlobalWhenTrialEntityScope *scope); +gb_internal void global_when_trial_end_entity(GlobalWhenTrialEntityScope *scope); + // -internal-global-entity-graph struct GlobalEntityTimingFrame { u64 start; diff --git a/src/checker_global.cpp b/src/checker_global.cpp index cf9bb6e84..ccc212505 100644 --- a/src/checker_global.cpp +++ b/src/checker_global.cpp @@ -83,17 +83,61 @@ gb_internal void global_entity_timing_end(GlobalEntityTimingFrame const &f, Enti // Global 'when's and 'foreign' blocks: every name one may declare is a placeholder in its scope, and the // first lookup of a placeholder resolves them, so the order of files and declarations does not matter +struct GlobalDeclSourceName { + InternedString name; + Scope * scope; + Ast * decl; // ValueDecl or ForeignImportDecl + bool in_else; // within the else branch of a 'when' +}; + +struct GlobalWhenCycle; + struct GlobalDeclSource { Ast * node; // WhenStmt or ForeignBlockDecl AstFile * file; GlobalDeclSource *parent; - bool in_else; // within the else branch of `parent` + bool in_else; bool reachable; bool reported_cycle; EntityState state; - ForeignContext foreign_context; // of a resolved 'foreign' block + ForeignContext foreign_context; + + Array names; + GlobalWhenCycle * cycle; + i32 cycle_index; + bool predetermined; + bool predetermined_cond; }; +// A possible cycle between global 'when's, found from syntax; the branches are chosen by trying every +// combination, see `search_global_when_cycle` +struct GlobalWhenCycle { + Array sources; // in source order + PtrSet decls; // declarations in the cycle, whose checking depends on the choice + bool searched; +}; + +// One condition evaluated for one choice of branches: lookups see the declarations of the chosen +// branches, and scratch copies of the declarations in `cycle->decls` +struct GlobalWhenTrial { + GlobalWhenCycle * cycle; + u32 mask; // bit i: `cycle->sources[i]` takes its first branch + u32 reachable; + u32 used; // sources whose chosen branch a lookup found + isize real_depth; // within the check of an entity outside the trial + bool unsupported; + bool broken; // that entity reached the cycle, which the graph missed + PtrMap *> decl_entities; + PtrSet scratch; +}; + +gb_global isize global_when_cycle_count; +gb_global isize global_when_cycle_sources; +gb_global isize global_when_trial_count; + +gb_internal void find_global_when_cycles(void); +gb_internal void search_global_when_cycle(GlobalWhenCycle *cycle); + struct GlobalDeclSourceFrame { GlobalDeclSource *source; InternedString needs; // the placeholder being resolved for it @@ -167,12 +211,20 @@ gb_internal void add_placeholder(Scope *s, InternedString name, GlobalDeclSource multi_map_insert(s->placeholders, key, src); } -gb_internal void add_placeholders(AstFile *f, u8 scopes, InternedString name, GlobalDeclSource *src) { +gb_internal void add_placeholders(AstFile *f, u8 scopes, InternedString name, GlobalDeclSource *src, Ast *decl, bool in_else) { + if (name.value == 0 || name.is_blank()) { + return; + } + if (src->names.allocator.proc == nullptr) { + array_init(&src->names, heap_allocator()); + } if (scopes & PlaceholderScope_File) { add_placeholder(f->scope, name, src); + array_add(&src->names, GlobalDeclSourceName{name, f->scope, decl, in_else}); } if (scopes & PlaceholderScope_Pkg) { add_placeholder(f->pkg->scope, name, src); + array_add(&src->names, GlobalDeclSourceName{name, f->pkg->scope, decl, in_else}); } } @@ -231,7 +283,7 @@ gb_internal void scan_global_decl_sources(AstFile *f, Slice const &stmts, } for (Ast *name : vd->names) { if (name->kind == Ast_Ident) { - add_placeholders(f, scopes, name->Ident.interned, owner); + add_placeholders(f, scopes, name->Ident.interned, owner, decl, in_else); } } case_end; @@ -246,7 +298,7 @@ gb_internal void scan_global_decl_sources(AstFile *f, Slice const &stmts, } if (library_name.len != 0) { u8 scopes = has_syntactic_attribute(fl->attributes, str_lit("export")) ? PlaceholderScope_Pkg : PlaceholderScope_File; - add_placeholders(f, scopes, string_interner_insert(library_name), owner); + add_placeholders(f, scopes, string_interner_insert(library_name), owner, decl, in_else); } case_end; @@ -360,14 +412,19 @@ gb_internal void report_global_decl_source_cycle(GlobalDeclSource *src, Interned error_line("\t'%.*s' at %s\n", LIT(token.string), token_pos_to_string(token.pos)); } -gb_internal void resolve_global_decl_source(GlobalDeclSource *src, InternedString needed) { - if (src->state == EntityState_Resolved) { - return; - } +gb_internal void resolve_global_decl_source(GlobalDeclSource *src, InternedString needed); + +gb_internal void resolve_global_decl_source_internal(GlobalDeclSource *src, InternedString needed) { if (src->state == EntityState_InProgress) { report_global_decl_source_cycle(src, needed); return; } + if (src->cycle != nullptr && !src->cycle->searched) { + search_global_when_cycle(src->cycle); + if (src->state == EntityState_Resolved) { + return; + } + } GlobalDeclSource *foreign_block = nullptr; if (src->parent != nullptr) { @@ -406,16 +463,21 @@ gb_internal void resolve_global_decl_source(GlobalDeclSource *src, InternedStrin if (src->node->kind == Ast_WhenStmt) { ast_node(ws, WhenStmt, src->node); - Operand operand = {Addressing_Invalid}; - check_expr(&ctx, &operand, ws->cond); - if (operand.mode != Addressing_Invalid && !is_type_boolean(operand.type)) { - error(ws->cond, "Non-boolean condition in 'when' statement"); + if (src->predetermined) { + ws->is_cond_determined = true; + ws->determined_cond = src->predetermined_cond; + } else { + Operand operand = {Addressing_Invalid}; + check_expr(&ctx, &operand, ws->cond); + if (operand.mode != Addressing_Invalid && !is_type_boolean(operand.type)) { + error(ws->cond, "Non-boolean condition in 'when' statement"); + } + if (operand.mode != Addressing_Constant) { + error(ws->cond, "Non-constant condition in 'when' statement"); + } + ws->is_cond_determined = true; + ws->determined_cond = operand.value.kind == ExactValue_Bool && operand.value.value_bool; } - if (operand.mode != Addressing_Constant) { - error(ws->cond, "Non-constant condition in 'when' statement"); - } - ws->is_cond_determined = true; - ws->determined_cond = operand.value.kind == ExactValue_Bool && operand.value.value_bool; if (ws->body == nullptr || ws->body->kind != Ast_BlockStmt) { error(ws->cond, "Invalid body for 'when' statement"); } else if (ws->else_stmt != nullptr && ws->else_stmt->kind != Ast_BlockStmt && ws->else_stmt->kind != Ast_WhenStmt) { @@ -433,7 +495,7 @@ gb_internal void resolve_global_decl_source(GlobalDeclSource *src, InternedStrin src->foreign_context = ctx.foreign_context; } - // NOTE: resolved before its declarations are collected, which evaluates the attributes of 'foreign import's + // NOTE(bill): resolved before its declarations are collected, which evaluates the attributes of 'foreign import's src->state = EntityState_Resolved; array_pop(&global_decl_source_stack); @@ -444,11 +506,28 @@ gb_internal void resolve_global_decl_source(GlobalDeclSource *src, InternedStrin destroy_checker_context(&ctx); } +gb_internal void resolve_global_decl_source(GlobalDeclSource *src, InternedString needed) { + if (src->state == EntityState_Resolved) { + return; + } + GlobalWhenTrial *trial = global_when_trial; + i32 mute_depth = global_error_mute_depth; + global_when_trial = nullptr; + global_error_mute_depth = 0; + resolve_global_decl_source_internal(src, needed); + global_when_trial = trial; + global_error_mute_depth = mute_depth; +} + gb_internal Entity *force_scope_placeholders(Scope *s, InternedString name, u32 hash) { PtrMap *m = s->placeholders; bool forced = false; for (auto *e = multi_map_find_first(m, cast(u64)name.value); e != nullptr; e = multi_map_find_next(m, e)) { GlobalDeclSource *src = e->value; + if (global_when_trial != nullptr && src->cycle == global_when_trial->cycle) { + // NOTE: the trial's lookup decides what these declare + continue; + } if (src->state != EntityState_Resolved) { if (global_decl_source_stack.count > 0) { global_decl_source_stack[global_decl_source_stack.count-1].needs = name; @@ -535,6 +614,7 @@ gb_internal void resolve_global_decl_sources(Checker *c, Arraydecls, nullptr, false, EntityVisiblity_Public); } } + find_global_when_cycles(); global_import_stage_end(GlobalImportStage_Placeholders, stage_start); stage_start = global_import_stage_begin(); @@ -635,6 +715,25 @@ gb_internal i32 global_graph_scc(i32 node_count, Array const &offsets, Arra return comp_count; } +gb_internal void global_graph_csr(i32 node_count, Array const &edge_from, Array const &edge_to, Array *offsets, Array *targets) { + array_init(offsets, heap_allocator(), node_count+1); + array_init(targets, heap_allocator(), edge_to.count); + for (i32 v = 0; v <= node_count; v++) { + (*offsets)[v] = 0; + } + for (i32 from : edge_from) { + (*offsets)[from+1] += 1; + } + for (i32 v = 0; v < node_count; v++) { + (*offsets)[v+1] += (*offsets)[v]; + } + auto fill = array_clone(heap_allocator(), *offsets); + defer (array_free(&fill)); + for (isize i = 0; i < edge_from.count; i++) { + (*targets)[fill[edge_from[i]]++] = edge_to[i]; + } +} + gb_internal void global_graph_print_entity(Entity *e) { if (e == nullptr) { gb_printf_err("?"); @@ -671,11 +770,38 @@ struct GlobalGroupGraph { gb_global GlobalGroupGraph global_groups; +struct GlobalPlaceholderHit { + Scope * scope; + InternedString name; +}; + struct GlobalGraphWalk { Scope *scope; Array *refs; + Array *hits; // set: before any 'when' is resolved, a lookup passing a placeholder records it }; +gb_internal Entity *global_graph_lookup(GlobalGraphWalk *w, Scope *s, Ast *ident, bool parents) { + InternedString name = ident->Ident.interned; + u32 hash = ident->Ident.hash; + if (w->hits == nullptr) { + return parents ? scope_lookup(s, name, hash) : scope_lookup_current(s, name, hash); + } + for (; s != nullptr; s = s->parent) { + Entity *e = scope_map_get(&s->elements, name, hash); + if (e != nullptr) { + return e; + } + if (s->placeholders != nullptr && multi_map_find_first(s->placeholders, cast(u64)name.value) != nullptr) { + array_add(w->hits, GlobalPlaceholderHit{s, name}); + } + if (!parents) { + break; + } + } + return nullptr; +} + gb_internal void global_graph_walk(GlobalGraphWalk *w, Ast *node); gb_internal void global_graph_walk_slice(GlobalGraphWalk *w, Slice const &nodes) { @@ -698,16 +824,16 @@ gb_internal void global_graph_walk(GlobalGraphWalk *w, Ast *node) { } switch (node->kind) { case Ast_Ident: - global_graph_add_ref(w, scope_lookup(w->scope, node->Ident.interned, node->Ident.hash)); + global_graph_add_ref(w, global_graph_lookup(w, w->scope, node, true)); break; case Ast_SelectorExpr: { Ast *expr = node->SelectorExpr.expr; Ast *selector = node->SelectorExpr.selector; if (expr != nullptr && expr->kind == Ast_Ident) { - Entity *e = scope_lookup(w->scope, expr->Ident.interned, expr->Ident.hash); + Entity *e = global_graph_lookup(w, w->scope, expr, true); if (e != nullptr && e->kind == Entity_ImportName && selector != nullptr && selector->kind == Ast_Ident) { - global_graph_add_ref(w, scope_lookup_current(e->ImportName.scope, selector->Ident.interned, selector->Ident.hash)); + global_graph_add_ref(w, global_graph_lookup(w, e->ImportName.scope, selector, false)); } else { global_graph_add_ref(w, e); } @@ -944,11 +1070,8 @@ gb_internal void global_graph_walk(GlobalGraphWalk *w, Ast *node) { } } -gb_internal void global_graph_walk_entity(GlobalGraphWalk *w, Entity *e, DeclInfo *d) { - w->scope = d->scope; - global_graph_walk(w, d->type_expr); - global_graph_walk(w, d->init_expr); - for (Ast *attr : d->attributes) { +gb_internal void global_graph_walk_attribute_values(GlobalGraphWalk *w, Array const &attributes) { + for (Ast *attr : attributes) { if (attr->kind != Ast_Attribute) { continue; } @@ -958,6 +1081,13 @@ gb_internal void global_graph_walk_entity(GlobalGraphWalk *w, Entity *e, DeclInf } } } +} + +gb_internal void global_graph_walk_entity(GlobalGraphWalk *w, Entity *e, DeclInfo *d) { + w->scope = d->scope; + global_graph_walk(w, d->type_expr); + global_graph_walk(w, d->init_expr); + global_graph_walk_attribute_values(w, d->attributes); if (e->kind == Entity_Procedure) { global_graph_walk(w, e->Procedure.foreign_library_ident); } else if (e->kind == Entity_Variable) { @@ -1129,24 +1259,7 @@ gb_internal void build_global_groups(Checker *c, GlobalGroupGraph *g) { } i32 node_count = cast(i32)g->nodes.count; - array_init(&g->offsets, heap_allocator(), node_count+1); - array_init(&g->targets, heap_allocator(), edge_to.count); - for (i32 v = 0; v <= node_count; v++) { - g->offsets[v] = 0; - } - for (i32 from : edge_from) { - g->offsets[from+1] += 1; - } - for (i32 v = 0; v < node_count; v++) { - g->offsets[v+1] += g->offsets[v]; - } - { - auto fill = array_clone(heap_allocator(), g->offsets); - defer (array_free(&fill)); - for (isize i = 0; i < edge_from.count; i++) { - g->targets[fill[edge_from[i]]++] = edge_to[i]; - } - } + global_graph_csr(node_count, edge_from, edge_to, &g->offsets, &g->targets); array_init(&g->group_of, heap_allocator(), node_count); i32 group_count = global_graph_scc(node_count, g->offsets, g->targets, &g->group_of); @@ -1350,7 +1463,609 @@ gb_internal void check_all_global_entities(Checker *c) { } -// -internal-global-entity-graph: the groups, weighted by the measured self time of their entities +// NOTE(bill, 2026-10-01) +// +// Cycles of global 'when's: a 'when' whose condition may need what its own branch declares, +// directly or through other 'when's. Found from syntax before anything is resolved: the nodes +// are the 'when's and 'foreign' blocks, the declarations in their branches, and the global +// entities their conditions reach. +// +// Each cycle is decided by trying every choice of its branches; exactly one choice must be consistent + +enum GlobalWhenNodeKind : u8 { + GlobalWhenNode_Source, + GlobalWhenNode_Decl, + GlobalWhenNode_Entity, +}; + +struct GlobalWhenNode { + GlobalWhenNodeKind kind; + GlobalDeclSource * source; // of a source or a declaration + Ast * decl; + Entity * entity; +}; + +gb_internal void find_global_when_cycles(void) { + auto nodes = array_make (heap_allocator(), 0, global_decl_sources.count); + auto edge_from = array_make (heap_allocator(), 0, global_decl_sources.count); + auto edge_to = array_make (heap_allocator(), 0, global_decl_sources.count); + auto refs = array_make (heap_allocator(), 0, 64); + auto hits = array_make(heap_allocator(), 0, 16); + defer (array_free(&nodes)); + defer (array_free(&edge_from)); + defer (array_free(&edge_to)); + defer (array_free(&refs)); + defer (array_free(&hits)); + + PtrMap node_of = {}; + map_init(&node_of, 2*global_decl_sources.count); + defer (map_destroy(&node_of)); + + auto add_node = [&](void *key, GlobalWhenNode const &node) -> i32 { + i32 *found = map_get(&node_of, key); + if (found != nullptr) { + return *found; + } + i32 v = cast(i32)nodes.count; + map_set(&node_of, key, v); + array_add(&nodes, node); + return v; + }; + auto add_edge = [&](i32 from, i32 to) { + array_add(&edge_from, from); + array_add(&edge_to, to); + }; + + for (GlobalDeclSource *src : global_decl_sources) { + add_node(src, GlobalWhenNode{GlobalWhenNode_Source, src}); + } + + GlobalGraphWalk w = {}; + w.refs = &refs; + w.hits = &hits; + for (i32 v = 0; v < nodes.count; v++) { + GlobalWhenNode node = nodes[v]; + array_clear(&refs); + array_clear(&hits); + switch (node.kind) { + case GlobalWhenNode_Source: + w.scope = node.source->file->scope; + if (node.source->node->kind == Ast_WhenStmt) { + global_graph_walk(&w, node.source->node->WhenStmt.cond); + } else { + global_graph_walk_attribute_values(&w, node.source->node->ForeignBlockDecl.attributes); + } + if (node.source->parent != nullptr) { + add_edge(v, *map_get(&node_of, cast(void *)node.source->parent)); + } + break; + case GlobalWhenNode_Decl: + w.scope = node.source->file->scope; + if (node.decl->kind == Ast_ValueDecl) { + global_graph_walk(&w, node.decl->ValueDecl.type); + global_graph_walk_slice(&w, node.decl->ValueDecl.values); + global_graph_walk_attribute_values(&w, node.decl->ValueDecl.attributes); + } else if (node.decl->kind == Ast_ForeignImportDecl) { + global_graph_walk_attribute_values(&w, node.decl->ForeignImportDecl.attributes); + } + add_edge(v, *map_get(&node_of, cast(void *)node.source)); + break; + case GlobalWhenNode_Entity: + global_graph_walk_entity(&w, node.entity, node.entity->decl_info); + break; + } + + for (Entity *e : refs) { + if (e->decl_info != nullptr && e->scope != nullptr && (e->scope->flags & ScopeFlag_File) != 0) { + add_edge(v, add_node(e, GlobalWhenNode{GlobalWhenNode_Entity, nullptr, nullptr, e})); + } + } + + // NOTE(bill):: a name that may be declared by a 'when' depends on its declarations there, and on that 'when' + for (GlobalPlaceholderHit const &hit : hits) { + PtrMap *m = hit.scope->placeholders; + for (auto *entry = multi_map_find_first(m, cast(u64)hit.name.value); entry != nullptr; entry = multi_map_find_next(m, entry)) { + GlobalDeclSource *src = entry->value; + for (GlobalDeclSourceName const &n : src->names) { + if (n.name == hit.name && n.scope == hit.scope) { + add_edge(v, add_node(n.decl, GlobalWhenNode{GlobalWhenNode_Decl, src, n.decl})); + } + } + } + } + } + + i32 node_count = cast(i32)nodes.count; + Array offsets = {}; + Array targets = {}; + defer (array_free(&offsets)); + defer (array_free(&targets)); + + global_graph_csr(node_count, edge_from, edge_to, &offsets, &targets); + auto comp_of = array_make(heap_allocator(), node_count); + defer (array_free(&comp_of)); + + i32 comp_count = global_graph_scc(node_count, offsets, targets, &comp_of); + + auto comp_size = array_make (heap_allocator(), comp_count); + auto comp_cycle = array_make(heap_allocator(), comp_count); + defer (array_free(&comp_size)); + defer (array_free(&comp_cycle)); + + for (i32 ci = 0; ci < comp_count; ci++) { + comp_size[ci] = 0; + comp_cycle[ci] = nullptr; + } + for (i32 v = 0; v < node_count; v++) { + comp_size[comp_of[v]] += 1; + } + auto is_cyclic = [&](i32 v) -> bool { + if (comp_size[comp_of[v]] > 1) { + return true; + } + for (i32 i = offsets[v]; i < offsets[v+1]; i++) { + if (targets[i] == v) { + return true; + } + } + return false; + }; + + // NOTE: sources are the first nodes, in source order + for (i32 v = 0; v < global_decl_sources.count; v++) { + if (!is_cyclic(v)) { + continue; + } + GlobalWhenCycle *&cycle = comp_cycle[comp_of[v]]; + if (cycle == nullptr) { + cycle = permanent_alloc_item(); + array_init(&cycle->sources, heap_allocator()); + ptr_set_init(&cycle->decls); + global_when_cycle_count += 1; + } + GlobalDeclSource *src = nodes[v].source; + src->cycle = cycle; + src->cycle_index = cast(i32)cycle->sources.count; + array_add(&cycle->sources, src); + global_when_cycle_sources += 1; + } + for (i32 v = 0; v < node_count; v++) { + GlobalWhenCycle *cycle = comp_cycle[comp_of[v]]; + if (cycle == nullptr) { + continue; + } + if (nodes[v].kind == GlobalWhenNode_Decl) { + ptr_set_add(&cycle->decls, nodes[v].decl); + } else if (nodes[v].kind == GlobalWhenNode_Entity && nodes[v].entity->decl_info->decl_node != nullptr) { + ptr_set_add(&cycle->decls, nodes[v].entity->decl_info->decl_node); + } + } +} + +gb_internal ForeignContext global_decl_source_foreign_context(GlobalDeclSource *src) { + for (GlobalDeclSource *p = src; p != nullptr; p = p->parent) { + if (p->node->kind == Ast_ForeignBlockDecl) { + return p->foreign_context; + } + } + return {}; +} + +// Scratch entities for a declaration, made as `check_collect_value_decl` would but put nowhere +gb_internal Entity *global_when_trial_entity(GlobalWhenTrial *t, Ast *decl, AstFile *file, ForeignContext const &foreign_context, InternedString name) { + Array **found = map_get(&t->decl_entities, decl); + Array *entities = found ? *found : nullptr; + if (entities == nullptr) { + entities = gb_alloc_item(heap_allocator(), Array); + array_init(entities, heap_allocator()); + map_set(&t->decl_entities, decl, entities); + if (decl->kind != Ast_ValueDecl) { + t->unsupported = true; + return nullptr; + } + CheckerContext ctx = {}; + init_checker_context(&ctx, global_checker_ptr.load(std::memory_order_relaxed)); + UntypedExprInfoMap untyped = {}; + reset_checker_context(&ctx, file, &untyped); + ctx.decl = make_decl_info(file->scope, nullptr); // not a child of the package's + ctx.foreign_context = foreign_context; + ctx.trial_entities = entities; + Ast *clone = clone_ast(decl); + clone->state_flags &= ~StateFlag_BeenHandled; + check_collect_value_decl(&ctx, clone); + map_destroy(&untyped); + destroy_checker_context(&ctx); + for (Entity *e : *entities) { + ptr_set_add(&t->scratch, e); + } + } + for (Entity *e : *entities) { + if (entity_interned_name(e) == name) { + return e; + } + } + t->unsupported = true; + return nullptr; +} + +// Every scope lookup during a trial: `found` is what the scope itself holds +gb_internal Entity *global_when_trial_lookup(Scope *s, InternedString name, u32 hash, Entity *found) { + GlobalWhenTrial *t = global_when_trial; + GlobalWhenCycle *cycle = t->cycle; + if (found != nullptr) { + DeclInfo *d = found->decl_info; + if (d == nullptr || d->decl_node == nullptr || !ptr_set_exists(&cycle->decls, d->decl_node) || ptr_set_exists(&t->scratch, found)) { + return found; + } + if (t->real_depth > 0) { + t->broken = true; + return found; + } + if ((found->kind == Entity_Procedure && found->Procedure.is_foreign) || + (found->kind == Entity_Variable && found->Variable.is_foreign)) { + t->unsupported = true; + return found; + } + Entity *copy = global_when_trial_entity(t, d->decl_node, found->file, {}, name); + return copy != nullptr ? copy : found; + } + if (s->placeholders == nullptr) { + return nullptr; + } + PtrMap *m = s->placeholders; + for (auto *entry = multi_map_find_first(m, cast(u64)name.value); + entry != nullptr; + entry = multi_map_find_next(m, entry)) { + GlobalDeclSource *src = entry->value; + if (src->cycle != cycle) { + continue; + } + if (t->real_depth > 0) { + t->broken = true; + return nullptr; + } + u32 bit = 1u << src->cycle_index; + if ((t->reachable & bit) == 0) { + continue; + } + bool in_else = (t->mask & bit) == 0; + for (GlobalDeclSourceName const &n : src->names) { + if (n.name == name && n.scope == s && n.in_else == in_else) { + // NOTE(bill): the branches around it are needed too + for (GlobalDeclSource *p = src; p != nullptr && p->cycle == cycle; p = p->parent) { + t->used |= 1u << p->cycle_index; + } + return global_when_trial_entity(t, n.decl, src->file, global_decl_source_foreign_context(src), name); + } + } + } + return nullptr; +} + +// An entity outside the trial is checked for real, with errors shown; a scratch procedure is not checked, +// as its body would be queued +gb_internal bool global_when_trial_begin_entity(Entity *e, GlobalWhenTrialEntityScope *scope) { + GlobalWhenTrial *t = global_when_trial; + *scope = {}; + if (ptr_set_exists(&t->scratch, e)) { + if (e->kind == Entity_Procedure || e->kind == Entity_AsmTemplate) { + t->unsupported = true; + e->type = t_invalid; + e->state = EntityState_Resolved; + return false; + } + return true; + } + scope->trial = t; + scope->mute_depth = global_error_mute_depth; + global_error_mute_depth = 0; + t->real_depth += 1; + return true; +} + +gb_internal void global_when_trial_end_entity(GlobalWhenTrialEntityScope *scope) { + if (scope->trial != nullptr) { + scope->trial->real_depth -= 1; + global_error_mute_depth = scope->mute_depth; + } +} + +enum GlobalWhenFailureKind : u8 { + GlobalWhenFailure_None, + GlobalWhenFailure_Invalid, // Cannot be evaluated + GlobalWhenFailure_Disagrees, // Picks the other branch + GlobalWhenFailure_OwnBranch, // A chosen branch is needed to decide its own condition +}; + +struct GlobalWhenTrialResult { + GlobalWhenFailureKind failure; + i32 source; + bool value; + bool unsupported; + bool broken; +}; + +gb_internal GlobalWhenTrialResult try_global_when_choice(GlobalWhenCycle *cycle, u32 mask, u32 reachable) { + GlobalWhenTrialResult res = {}; + i32 k = cast(i32)cycle->sources.count; + u32 used[32] = {}; + + for (i32 i = 0; i < k; i++) { + if ((reachable & (1u<sources[i]; + ast_node(ws, WhenStmt, src->node); + + GlobalWhenTrial t = {}; + t.cycle = cycle; + t.mask = mask; + t.reachable = reachable; + + map_init(&t.decl_entities); + defer ({ + for (auto const &entry : t.decl_entities) { + array_free(entry.value); + gb_free(heap_allocator(), entry.value); + } + map_destroy(&t.decl_entities); + }); + + ptr_set_init(&t.scratch); + defer (ptr_set_destroy(&t.scratch)); + + CheckerContext ctx = {}; + init_checker_context(&ctx, global_checker_ptr.load(std::memory_order_relaxed)); + defer (destroy_checker_context(&ctx)); + + UntypedExprInfoMap untyped = {}; + defer (map_destroy(&untyped)); + + + reset_checker_context(&ctx, src->file, &untyped); + // so no dependency is recorded + ctx.decl = make_decl_info(src->file->scope, nullptr); + ctx.foreign_context = global_decl_source_foreign_context(src); + + GlobalWhenTrial *prev = global_when_trial; + global_when_trial = &t; + + Ast *cond = clone_ast(ws->cond); + i64 muted = error_mute_count(); + begin_error_mute(); + + Operand o = {}; + check_expr(&ctx, &o, cond); + end_error_mute(); + global_when_trial = prev; + global_when_trial_count += 1; + + bool ok = error_mute_count() == muted && o.mode == Addressing_Constant && o.value.kind == ExactValue_Bool; + used[i] = t.used; + res.unsupported = t.unsupported; + res.broken = t.broken; + + if (res.unsupported || res.broken) { + return res; + } + if (!ok || o.value.value_bool != ((mask & (1u<sources.count; i++) { + GlobalDeclSource *src = cycle->sources[i]; + GlobalDeclSource *p = src->parent; + bool r = (unreachable & (1u<cycle == cycle) { + u32 pb = 1u << p->cycle_index; + r = (reachable & pb) != 0; + if (p->node->kind == Ast_WhenStmt) { + r = r && ((mask & pb) != 0) != src->in_else; + } + } + if (r) { + reachable |= 1u << i; + } + } + return reachable; +} + +gb_internal gbString global_when_choice_string(gbString s, GlobalWhenCycle *cycle, u32 mask, u32 reachable) { + for (i32 i = 0; i < cycle->sources.count; i++) { + u32 bit = 1u << i; + s = gb_string_append_fmt(s, "%s%s", i > 0 ? ", " : "", (reachable & bit) == 0 ? "unreachable" : (mask & bit) ? "taken" : "not taken"); + } + return s; +} + +gb_internal void error_line_global_when_sources(GlobalWhenCycle *cycle) { + for (GlobalDeclSource *src : cycle->sources) { + gbString cond = expr_to_string(src->node->WhenStmt.cond); + error_line("\t'when' at %s: %s\n", token_pos_to_string(src->node->WhenStmt.token.pos), cond); + gb_string_free(cond); + } +} + +gb_internal void commit_global_when_cycle(GlobalWhenCycle *cycle, u32 mask, bool check_conditions) { + for (GlobalDeclSource *src : cycle->sources) { + src->predetermined = true; + src->predetermined_cond = (mask & (1u << src->cycle_index)) != 0; + } + for (GlobalDeclSource *src : cycle->sources) { + resolve_global_decl_source(src, {}); + } + if (!check_conditions) { + return; + } + // NOTE: for real, now that every chosen branch is collected, which must give the same values + for (GlobalDeclSource *src : cycle->sources) { + if (!src->reachable) { + continue; + } + ast_node(ws, WhenStmt, src->node); + + CheckerContext ctx = {}; + init_checker_context(&ctx, global_checker_ptr.load(std::memory_order_relaxed)); + defer (destroy_checker_context(&ctx)); + + UntypedExprInfoMap untyped = {}; + reset_checker_context(&ctx, src->file, &untyped); + defer (map_destroy(&untyped)); + + ctx.foreign_context = global_decl_source_foreign_context(src); + + Operand o = {}; + check_expr(&ctx, &o, ws->cond); + if (o.mode != Addressing_Constant || o.value.kind != ExactValue_Bool || o.value.value_bool != ws->determined_cond) { + error(ws->token, "Internal compiler error: this global 'when' changed its branch after its cycle was decided"); + } + add_untyped_expressions(ctx.info, &untyped); + } +} + +gb_internal void search_global_when_cycle(GlobalWhenCycle *cycle) { + cycle->searched = true; + i32 k = cast(i32)cycle->sources.count; + for (GlobalDeclSource *src : cycle->sources) { + if (src->node->kind != Ast_WhenStmt) { + // NOTE(bill): resolved on demand where a cycle is reported as such + return; + } + } + Token token = cycle->sources[0]->node->WhenStmt.token; + + i32 const MAX_SOURCES = 8; // 2^8 == 256 combinations + if (k > MAX_SOURCES) { + ERROR_BLOCK(); + error(token, "Too many combinations of global 'when' branches: %d 'when's depend on each other, which gives 2^%d combinations, more than %d", + k, k, 1 << MAX_SOURCES); + error_line_global_when_sources(cycle); + return; + } + + // The parents outside the cycle are decided for real first + u32 unreachable = 0; + for (GlobalDeclSource *src : cycle->sources) { + GlobalDeclSource *p = src->parent; + if (p == nullptr || p->cycle == cycle) { + continue; + } + resolve_global_decl_source(p, {}); + bool r = p->state == EntityState_Resolved && p->reachable; + if (p->node->kind == Ast_WhenStmt) { + r = r && p->node->WhenStmt.determined_cond != src->in_else; + } + if (!r) { + unreachable |= 1u << src->cycle_index; + } + } + + auto consistent = array_make(heap_allocator()); + auto failures = array_make(heap_allocator()); + auto failed = array_make(heap_allocator()); + defer (array_free(&consistent)); + defer (array_free(&failures)); + defer (array_free(&failed)); + + for (u32 mask = 0; mask < (1u << k); mask++) { + u32 reachable = global_when_cycle_reachable(cycle, mask, unreachable); + if (mask & ~reachable) { + // An unreachable 'when' is only counted as not taken + continue; + } + GlobalWhenTrialResult result = try_global_when_choice(cycle, mask, reachable); + if (result.broken) { + error(token, "Internal compiler error: deciding this cycle of global 'when's checked a declaration that depends on it"); + return; + } + if (result.unsupported) { + // Needs a procedure or library declared in the cycle, so it is resolved on demand instead + return; + } + if (result.failure == GlobalWhenFailure_None) { + array_add(&consistent, mask); + } else { + array_add(&failures, result); + array_add(&failed, mask); + } + } + + if (consistent.count == 1) { + commit_global_when_cycle(cycle, consistent[0], true); + return; + } + + ERROR_BLOCK(); + if (consistent.count == 0) { + error(token, "Contradictory global 'when' conditions: no choice of their branches is consistent"); + error_line_global_when_sources(cycle); + for (isize i = 0; i < failed.count && i < 16; i++) { + GlobalWhenTrialResult const &r = failures[i]; + + u32 reachable = global_when_cycle_reachable(cycle, failed[i], unreachable); + + gbString s = global_when_choice_string(gb_string_make(heap_allocator(), ""), cycle, failed[i], reachable); + defer (gb_string_free(s)); + + TokenPos pos = cycle->sources[r.source]->node->WhenStmt.token.pos; + switch (r.failure) { + case GlobalWhenFailure_Invalid: + error_line("\t[%s]: the 'when' at %s cannot be evaluated\n", s, token_pos_to_string(pos)); + break; + case GlobalWhenFailure_Disagrees: + error_line("\t[%s]: the 'when' at %s evaluates to %s\n", s, token_pos_to_string(pos), r.value ? "true" : "false"); + break; + case GlobalWhenFailure_OwnBranch: + error_line("\t[%s]: a taken branch is needed to decide its own condition\n", s); + break; + } + } + commit_global_when_cycle(cycle, 0, false); + } else { + error(token, "Ambiguous global 'when' conditions: %td choices of their branches are consistent", consistent.count); + error_line_global_when_sources(cycle); + for (isize i = 0; i < consistent.count; i++) { + u32 reachable = global_when_cycle_reachable(cycle, consistent[i], unreachable); + gbString s = global_when_choice_string(gb_string_make(heap_allocator(), ""), cycle, consistent[i], reachable); + defer (gb_string_free(s)); + + error_line("\tchoice %td: %s\n", i+1, s); + } + commit_global_when_cycle(cycle, consistent[0], false); + } +} + + +// `-internal-global-entity-graph` +// The groups weighted by the measured self time of their entities struct GlobalGraphSortItem { u64 key; @@ -1410,11 +2125,11 @@ gb_internal void print_global_groups(GlobalGroupGraph *g) { defer (array_free(&pkg_entities)); defer (map_destroy(&pkg_index)); - u64 total_ticks = 0; - u64 when_ticks = 0; - isize untimed = 0; - i32 largest = -1; - isize cyclic = 0; + u64 total_ticks = 0; + u64 when_ticks = 0; + isize untimed = 0; + i32 largest = -1; + isize cyclic = 0; mutex_lock(&global_entity_time_mutex); for (auto const &entry : global_entity_times) { @@ -1451,7 +2166,7 @@ gb_internal void print_global_groups(GlobalGroupGraph *g) { } mutex_unlock(&global_entity_time_mutex); - // NOTE: every dependency of a group has a lower index + // NOTE(bill): every dependency of a group has a lower index i32 critical = -1; for (i32 gi = 0; gi < group_count; gi++) { seen[gi] = -1; @@ -1488,6 +2203,7 @@ gb_internal void print_global_groups(GlobalGroupGraph *g) { gb_printf_err(" critical path: %.3f ms over %d groups -> at most %.2fx speedup\n", critical_ms, critical >= 0 ? len[critical] : 0, critical_ms > 0 ? total_ms/critical_ms : 0.0); + gb_printf_err(" 'when' cycles: %td (%td 'when's), %td conditions tried\n", global_when_cycle_count, global_when_cycle_sources, global_when_trial_count); gb_printf_err(" check_import_entities (sequential, includes entity checks it triggers):\n"); for (isize i = 0; i < GlobalImportStage_COUNT; i++) { gb_printf_err(" %10.3f ms %s\n", global_graph_ms(global_import_stage_ticks[i], freq), global_import_stage_names[i]); diff --git a/tests/issues/run.bat b/tests/issues/run.bat index 991a87d7f..b5b90339c 100644 --- a/tests/issues/run.bat +++ b/tests/issues/run.bat @@ -54,7 +54,9 @@ set COMMON=-define:ODIN_TEST_FANCY=false -file -vet -strict-style -ignore-unused ..\..\..\odin check ..\test_issue_ambiguous_union_literal.odin %COMMON% 2>&1 | find /c "Error:" | findstr /x "1" || exit /b ..\..\..\odin test ..\test_issue_proc_constant_instantiation.odin %COMMON% || exit /b ..\..\..\odin test ..\test_issue_global_when_order.odin %COMMON% || exit /b -..\..\..\odin check ..\test_issue_global_when_cycle.odin -no-entry-point %COMMON% 2>&1 | find /c "Cyclic dependency between global" | findstr /x "3" || exit /b +..\..\..\odin check ..\test_issue_global_when_cycle.odin -no-entry-point %COMMON% 2>&1 | find /c "Contradictory global" | findstr /x "4" || exit /b +..\..\..\odin test ..\test_issue_global_when_cycle_accepted.odin %COMMON% || exit /b +..\..\..\odin check ..\test_issue_global_when_cycle_ambiguous.odin -no-entry-point %COMMON% 2>&1 | find /c "Ambiguous global" | findstr /x "1" || exit /b ..\..\..\odin check ..\test_issue_global_when_shadowing.odin -no-entry-point %COMMON% 2>&1 | find /c "within a global" | findstr /x "2" || exit /b ..\..\..\odin check ..\test_issue_7336.odin -no-entry-point %COMMON% || exit /b ..\..\..\odin check ..\test_issue_ellipsis_type_call.odin -no-entry-point %COMMON% 2>&1 | find /c "Error:" | findstr /x "10" || exit /b diff --git a/tests/issues/run.sh b/tests/issues/run.sh index 41f108d4d..8bc063be0 100755 --- a/tests/issues/run.sh +++ b/tests/issues/run.sh @@ -130,7 +130,14 @@ fi $ODIN test ../test_issue_proc_constant_instantiation.odin $COMMON $ODIN test ../test_issue_swizzle_multi_assign.odin $COMMON $ODIN test ../test_issue_global_when_order.odin $COMMON -if [[ $($ODIN check ../test_issue_global_when_cycle.odin -no-entry-point $COMMON_CHECK 2>&1 >/dev/null | grep -c "Cyclic dependency between global") -eq 3 ]]; then +if [[ $($ODIN check ../test_issue_global_when_cycle.odin -no-entry-point $COMMON_CHECK 2>&1 >/dev/null | grep -c "Contradictory global 'when'") -eq 4 ]]; then + echo "SUCCESSFUL 1/1" +else + echo "SUCCESSFUL 0/1" + exit 1 +fi +$ODIN test ../test_issue_global_when_cycle_accepted.odin $COMMON +if [[ $($ODIN check ../test_issue_global_when_cycle_ambiguous.odin -no-entry-point $COMMON_CHECK 2>&1 >/dev/null | grep -c "Ambiguous global 'when'") -eq 1 ]]; then echo "SUCCESSFUL 1/1" else echo "SUCCESSFUL 0/1" diff --git a/tests/issues/test_issue_global_when_cycle.odin b/tests/issues/test_issue_global_when_cycle.odin index 77f83a028..3472c9331 100644 --- a/tests/issues/test_issue_global_when_cycle.odin +++ b/tests/issues/test_issue_global_when_cycle.odin @@ -1,10 +1,14 @@ -// Each of these global 'when's needs a name it may declare itself, so all three are cycles +// Cycles of global 'when's where no choice of branches is consistent, so each is an error package test_issues -// each 'when' needs a name the other may declare +// taken, `int` becomes 4 bytes and the first condition is false; not taken, the second is true when size_of(int) == 8 { A :: 1 } when A == 1 { int :: i32 } +// both taken is consistent, but each branch is needed to decide its own condition +when Y == 1 { X :: 1 } +when X == 1 { Y :: 1 } + // a 'when' needing a name it may declare when B == 1 { B :: 1 } From 94bb9558716636a327ed398b0944b7153d613181 Mon Sep 17 00:00:00 2001 From: gingerBill Date: Thu, 1 Oct 2026 19:05:15 +0100 Subject: [PATCH 129/215] Fix #7566: name polymorphic instances by the values of compound constant parameters and not their spelling --- src/name_canonicalization.cpp | 59 +++++++++++++++++++++++++++++++++-- src/name_canonicalization.hpp | 1 + 2 files changed, 57 insertions(+), 3 deletions(-) diff --git a/src/name_canonicalization.cpp b/src/name_canonicalization.cpp index 0a4f60fec..12b1f23cf 100644 --- a/src/name_canonicalization.cpp +++ b/src/name_canonicalization.cpp @@ -510,9 +510,7 @@ gb_internal void write_canonical_params(TypeWriter *w, Type *params) { } } } - gbString s = exact_value_to_string(v->Constant.value, 1<<16); - type_writer_append(w, s, gb_string_length(s)); - gb_string_free(s); + write_canonical_exact_value(w, v->Constant.value); } break; default: @@ -523,6 +521,61 @@ gb_internal void write_canonical_params(TypeWriter *w, Type *params) { return; } +gb_internal void write_canonical_exact_value(TypeWriter *w, ExactValue const &v); + +gb_internal void write_canonical_constant_expr(TypeWriter *w, Ast *expr) { + if (expr->tav.mode == Addressing_Constant) { + write_canonical_exact_value(w, expr->tav.value); + return; + } + gbString s = write_expr_to_string(gb_string_make(heap_allocator(), ""), expr, false); + type_writer_append(w, s, gb_string_length(s)); + gb_string_free(s); +} + +gb_internal void write_canonical_exact_value(TypeWriter *w, ExactValue const &v) { + if (v.kind == ExactValue_Compound && v.value_compound != nullptr && v.value_compound->kind == Ast_CompoundLit) { + ast_node(cl, CompoundLit, v.value_compound); + type_writer_appendb(w, '{'); + for_array(i, cl->elems) { + if (i > 0) { + type_writer_appendc(w, CANONICAL_FIELD_SEPARATOR); + } + Ast *elem = cl->elems[i]; + if (elem->kind == Ast_FieldValue) { + Ast *field = elem->FieldValue.field; + if (field->kind == Ast_Ident) { + type_writer_append(w, field->Ident.token.string.text, field->Ident.token.string.len); + } else if (is_ast_range(field)) { + write_canonical_constant_expr(w, field->BinaryExpr.left); + type_writer_append(w, field->BinaryExpr.op.string.text, field->BinaryExpr.op.string.len); + write_canonical_constant_expr(w, field->BinaryExpr.right); + } else { + write_canonical_constant_expr(w, field); + } + type_writer_appendc(w, "="); + elem = elem->FieldValue.value; + } + write_canonical_constant_expr(w, elem); + } + type_writer_appendb(w, '}'); + return; + } + if (v.kind == ExactValue_Variant && v.value_variant != nullptr) { + Ast *expr = v.value_variant; + bool is_self = expr->tav.value.kind == ExactValue_Variant && expr->tav.value.value_variant == expr; + if (expr->tav.mode == Addressing_Constant && !is_self) { + write_type_to_canonical_string(w, expr->tav.type); + type_writer_appendc(w, "="); + write_canonical_exact_value(w, expr->tav.value); + return; + } + } + gbString s = exact_value_to_string(v, 1<<16); + type_writer_append(w, s, gb_string_length(s)); + gb_string_free(s); +} + gb_internal u64 type_hash_canonical_type(Type *type) { if (type == nullptr) { return 0; diff --git a/src/name_canonicalization.hpp b/src/name_canonicalization.hpp index 00b450fbe..cec2b99d3 100644 --- a/src/name_canonicalization.hpp +++ b/src/name_canonicalization.hpp @@ -46,6 +46,7 @@ struct TypeWriter; gb_internal void write_type_to_canonical_string(TypeWriter *w, Type *type); +gb_internal void write_canonical_exact_value(TypeWriter *w, ExactValue const &v); gb_internal void write_canonical_entity_name(TypeWriter *w, Entity *e); gb_internal u64 type_hash_canonical_type(Type *type); gb_internal String type_to_canonical_string(gbAllocator allocator, Type *type); From 73c3a96de1588cb532ac4fbf80323aefad67cd3e Mon Sep 17 00:00:00 2001 From: gingerBill Date: Thu, 1 Oct 2026 21:07:41 +0100 Subject: [PATCH 130/215] Make global checking state thread-safe: read-only global scopes, per-group untyped and #soa, deferred link-name checks, fresh contexts for on-demand globals --- src/check_decl.cpp | 204 +++++++++++++++++++++++++---------------- src/check_expr.cpp | 29 +++--- src/check_stmt.cpp | 18 +--- src/check_type.cpp | 69 +++++++------- src/checker.cpp | 131 +++++++++++++++++--------- src/checker.hpp | 36 +++++++- src/checker_global.cpp | 30 +++++- src/entity.cpp | 4 + src/llvm_backend.cpp | 6 ++ src/types.cpp | 70 +++++++++++--- 10 files changed, 396 insertions(+), 201 deletions(-) diff --git a/src/check_decl.cpp b/src/check_decl.cpp index 3343465ae..4a40ba7a4 100644 --- a/src/check_decl.cpp +++ b/src/check_decl.cpp @@ -170,7 +170,7 @@ gb_internal void override_entity_in_scope(Entity *original_entity, Entity *new_e // has been "evaluated" and the variant data can be copied across rw_mutex_lock(&found_scope->mutex); - scope_map_insert(&found_scope->elements, original_intern, hash, new_entity); + scope_map_replace(&found_scope->elements, original_intern, hash, new_entity); rw_mutex_unlock(&found_scope->mutex); original_entity->flags |= EntityFlag_Overridden; @@ -1257,41 +1257,95 @@ gb_internal void check_target_feature_attributes(AttributeContext &ac, Entity *e } } -gb_internal void check_foreign_procedure(CheckerContext *ctx, Entity *e, DeclInfo *d) { - GB_ASSERT(e != nullptr); - GB_ASSERT(e->kind == Entity_Procedure); - String name = e->Procedure.link_name; +gb_internal void add_link_name_use(CheckerInfo *info, String name, Entity *e, DeclInfo *d, LinkNameUseKind kind) { + mutex_lock(&info->foreign_mutex); + array_add(&info->link_names, LinkNameUse{name, e, d, kind}); + mutex_unlock(&info->foreign_mutex); +} - mutex_lock(&ctx->info->foreign_mutex); +gb_internal GB_COMPARE_PROC(link_name_use_cmp) { + LinkNameUse const *x = cast(LinkNameUse const *)a; + LinkNameUse const *y = cast(LinkNameUse const *)b; + i32 cmp = string_compare(x->name, y->name); + if (cmp != 0) { + return cmp; + } + if (x->entity != y->entity) { + return entity_source_order_cmp(x->entity, y->entity); + } + return i32_cmp(x->kind, y->kind); +} +gb_internal void check_link_name_uses(Checker *c) { + auto &uses = c->info.link_names; + array_sort(uses, link_name_use_cmp); + + LinkNameUse *first = nullptr; + for (isize i = 0; i < uses.count; i++) { + LinkNameUse *u = &uses[i]; + if (i > 0 && uses[i-1].name != u->name) { + first = nullptr; + } else if (i > 0 && uses[i-1].entity == u->entity) { + continue; + } + String name = u->name; + if (name == "main" && u->kind != LinkNameUse_Variable) { + if (u->kind == LinkNameUse_ForeignProcedure || u->entity->pkg->kind != Package_Runtime) { + error(u->decl->proc_lit, "The link name 'main' is reserved for internal use"); + } + continue; + } + if (first == nullptr) { + first = u; + continue; + } + + Entity *e = u->entity; + Entity *f = first->entity; - auto *fp = &ctx->info->foreigns; - StringHashKey key = string_hash_string(name); - Entity **found = string_map_get(fp, key); - if (found && e != *found) { - Entity *f = *found; TokenPos pos = f->token.pos; + Type *this_type = base_type(e->type); Type *other_type = base_type(f->type); - if (is_type_proc(this_type) && is_type_proc(other_type)) { - if (!are_signatures_similar_enough(this_type, other_type)) { - error(d->proc_lit, - "Redeclaration of foreign procedure '%.*s' with different type signatures\n" + + switch (u->kind) { + case LinkNameUse_ForeignProcedure: + if (is_type_proc(this_type) && is_type_proc(other_type)) { + if (!are_signatures_similar_enough(this_type, other_type)) { + error(u->decl->proc_lit, + "Redeclaration of foreign procedure '%.*s' with different type signatures\n" + "\tat %s", + LIT(name), token_pos_to_string(pos)); + } + } else if (!signature_parameter_similar_enough(this_type, other_type)) { + error(u->decl->proc_lit, + "Foreign entity '%.*s' previously declared elsewhere with a different type\n" "\tat %s", LIT(name), token_pos_to_string(pos)); } - } else if (!signature_parameter_similar_enough(this_type, other_type)) { - error(d->proc_lit, - "Foreign entity '%.*s' previously declared elsewhere with a different type\n" - "\tat %s", + break; + case LinkNameUse_Procedure: + // TODO(bill): Better error message? + error(u->decl->proc_lit, + "Non-unique linking name for procedure '%.*s'\n" + "\tother at %s", LIT(name), token_pos_to_string(pos)); + break; + case LinkNameUse_Variable: + if (e->type == nullptr || f->type == nullptr || !signature_parameter_similar_enough(this_type, other_type)) { + error(e->token, + "Foreign entity '%.*s' previously declared elsewhere with a different type\n" + "\tat %s", + LIT(name), token_pos_to_string(pos)); + } + break; } - } else if (name == "main") { - error(d->proc_lit, "The link name 'main' is reserved for internal use"); - } else { - string_map_set(fp, key, e); } +} - mutex_unlock(&ctx->info->foreign_mutex); +gb_internal void check_foreign_procedure(CheckerContext *ctx, Entity *e, DeclInfo *d) { + GB_ASSERT(e != nullptr); + GB_ASSERT(e->kind == Entity_Procedure); + add_link_name_use(ctx->info, e->Procedure.link_name, e, d, LinkNameUse_ForeignProcedure); } gb_internal void check_proc_decl(CheckerContext *ctx, Entity *e, DeclInfo *d) { @@ -1562,14 +1616,17 @@ gb_internal void check_proc_decl(CheckerContext *ctx, Entity *e, DeclInfo *d) { } if (e->pkg->kind == Package_Init) { - if (ctx->info->entry_point != nullptr) { + mutex_lock(&ctx->info->entry_point_mutex); + Entity *prev_entry_point = ctx->info->entry_point; + if (prev_entry_point == nullptr) { + ctx->info->entry_point = e; + } + mutex_unlock(&ctx->info->entry_point_mutex); + if (prev_entry_point != nullptr) { begin_error_block(); error(e->token, "Redeclaration of the entry point procedure 'main'"); error_line("\tSuggestion: Is this a single-file package? If so, try compiling using the `-file` flag.\n"); end_error_block(); - - } else { - ctx->info->entry_point = e; } } } @@ -1660,28 +1717,7 @@ gb_internal void check_proc_decl(CheckerContext *ctx, Entity *e, DeclInfo *d) { name = e->Procedure.link_name; } if (e->Procedure.link_name.len > 0 || is_export) { - mutex_lock(&ctx->info->foreign_mutex); - - auto *fp = &ctx->info->foreigns; - StringHashKey key = string_hash_string(name); - Entity **found = string_map_get(fp, key); - if (found) { - Entity *f = *found; - TokenPos pos = f->token.pos; - // TODO(bill): Better error message? - error(d->proc_lit, - "Non unique linking name for procedure '%.*s'\n" - "\tother at %s", - LIT(name), token_pos_to_string(pos)); - } else if (name == "main") { - if (d->entity.load()->pkg->kind != Package_Runtime) { - error(d->proc_lit, "The link name 'main' is reserved for internal use"); - } - } else { - string_map_set(fp, key, e); - } - - mutex_unlock(&ctx->info->foreign_mutex); + add_link_name_use(ctx->info, name, e, d, LinkNameUse_Procedure); } } @@ -1777,24 +1813,7 @@ gb_internal void check_global_variable_decl(CheckerContext *ctx, Entity *e, Ast name = e->Variable.link_name; } - auto *fp = &ctx->info->foreigns; - StringHashKey key = string_hash_string(name); - Entity **found = string_map_get(fp, key); - if (found) { - Entity *f = *found; - TokenPos pos = f->token.pos; - Type *this_type = base_type(e->type); - Type *other_type = base_type(f->type); - bool type_is_null = (e->type == nullptr || f->type == nullptr); - if (type_is_null || !signature_parameter_similar_enough(this_type, other_type)) { - error(e->token, - "Foreign entity '%.*s' previously declared elsewhere with a different type\n" - "\tat %s", - LIT(name), token_pos_to_string(pos)); - } - } else { - string_map_set(fp, key, e); - } + add_link_name_use(ctx->info, name, e, decl, LinkNameUse_Variable); } if (e->Variable.link_name.len > 0) { @@ -1910,9 +1929,15 @@ gb_internal void check_proc_group_decl(CheckerContext *ctx, Entity *pg_entity, D ptr_set_destroy(&entity_set); + // NOTE(bill, 2026-10-01): an invalid overload is dropped from this group only, as others may be using that procedure + auto invalid = array_make(temporary_allocator(), pge->entities.count); + for (isize j = 0; j < pge->entities.count; j++) { + invalid[j] = false; + } + for (isize j = 0; j < pge->entities.count; j++) { Entity *p = pge->entities[j]; - if (p->type == t_invalid) { + if (p->type == t_invalid || invalid[j]) { // NOTE(bill): This invalid overload has already been handled continue; } @@ -1931,7 +1956,7 @@ gb_internal void check_proc_group_decl(CheckerContext *ctx, Entity *pg_entity, D TokenPos pos = q->token.pos; - if (q->type == nullptr || q->type == t_invalid) { + if (q->type == nullptr || q->type == t_invalid || invalid[k]) { continue; } @@ -1987,10 +2012,17 @@ gb_internal void check_proc_group_decl(CheckerContext *ctx, Entity *pg_entity, D if (is_invalid) { error_line("\tprevious procedure at %s\n", token_pos_to_string(pos)); - q->type = t_invalid; + invalid[k] = true; } } } + isize valid_count = 0; + for (isize j = 0; j < pge->entities.count; j++) { + if (!invalid[j]) { + pge->entities[valid_count++] = pge->entities[j]; + } + } + pge->entities.count = valid_count; AttributeContext ac = {}; check_decl_attributes(ctx, d->attributes, proc_group_attribute, &ac); @@ -2153,6 +2185,7 @@ gb_internal void check_entity_decl(CheckerContext *ctx, Entity *e, DeclInfo *d, mutex_unlock(&ctx->info->lazy_mutex); return; } + lazy_mutex_depth += 1; } GlobalEntityTimingFrame timing_frame = global_entity_timing_begin(e); @@ -2174,18 +2207,34 @@ gb_internal void check_entity_decl(CheckerContext *ctx, Entity *e, DeclInfo *d, } CheckerContext c = *ctx; + if (d->scope->flags & ScopeFlag_File) { + // NOTE(bill): a global is checked in a context of its own file, never in that of whatever needed it first, + // which may be in another file or package, or a procedure body. + // Only the cycle detection carries over. + CheckerTypePath *type_path = c.type_path; + UntypedExprInfoMap *untyped = c.untyped; + gb_zero_size(&c.pkg, gb_size_of(CheckerContext) - gb_offset_of(CheckerContext, pkg)); + add_curr_ast_file(&c, d->scope->file); + c.type_path = type_path; + c.untyped = untyped; + } c.scope = d->scope; c.decl = d; c.type_level = 0; c.curr_proc_calling_convention = ProcCC_Contextless; + // NOTE: a file scope's is set from its own file and shared by every thread, see `create_scope_from_file` + bool set_context = (c.scope->flags & ScopeFlag_File) == 0; auto prev_flags = c.scope->flags; - defer (c.scope->flags = prev_flags); - - if (check_feature_flags(ctx, d->decl_node) & OptInFeatureFlag_GlobalContext) { - c.scope->flags |= ScopeFlag_ContextDefined; - } else { - c.scope->flags &= ~ScopeFlag_ContextDefined; + defer (if (set_context) { + c.scope->flags = prev_flags; + }); + if (set_context) { + if (check_feature_flags(ctx, d->decl_node) & OptInFeatureFlag_GlobalContext) { + c.scope->flags |= ScopeFlag_ContextDefined; + } else { + c.scope->flags &= ~ScopeFlag_ContextDefined; + } } global_group_check_edge(ctx, e); @@ -2242,6 +2291,7 @@ end:; // NOTE(bill): Add it to the list of checked entities if (is_lazy) { array_add(&ctx->info->entities, e); + lazy_mutex_depth -= 1; mutex_unlock(&ctx->info->lazy_mutex); } } diff --git a/src/check_expr.cpp b/src/check_expr.cpp index 2985c8c67..4f0feab8b 100644 --- a/src/check_expr.cpp +++ b/src/check_expr.cpp @@ -178,10 +178,10 @@ gb_internal void populate_check_did_you_mean_objc_entity(StringSet *set, Entity if (e->kind != Entity_TypeName) { return; } - if (e->TypeName.objc_metadata == nullptr) { + TypeNameObjCMetadata *objc_metadata = entity_objc_metadata(e); + if (objc_metadata == nullptr) { return; } - TypeNameObjCMetadata *objc_metadata = e->TypeName.objc_metadata; Type *t = base_type(e->type); GB_ASSERT(t->kind == Type_Struct); @@ -210,8 +210,8 @@ gb_internal void check_did_you_mean_objc_entity(String const &name, Entity *e, b ERROR_BLOCK(); GB_ASSERT(e->kind == Entity_TypeName); - GB_ASSERT(e->TypeName.objc_metadata != nullptr); - auto *objc_metadata = e->TypeName.objc_metadata; + auto *objc_metadata = entity_objc_metadata(e); + GB_ASSERT(objc_metadata != nullptr); MUTEX_GUARD(objc_metadata->mutex); StringSet set = {}; @@ -515,7 +515,8 @@ gb_internal bool find_or_generate_polymorphic_procedure(CheckerContext *old_c, E // NOTE(bill): This is slightly memory leaking if the type already exists // Maybe it's better to check with the previous types first? Type *final_proc_type = alloc_type_proc(scope, nullptr, 0, nullptr, 0, false, pt->calling_convention); - bool success = check_procedure_type(&nctx, final_proc_type, pt->node, &operands); + // NOTE: a clone, as other threads may be instantiating the same procedure, from the same AST + bool success = check_procedure_type(&nctx, final_proc_type, clone_ast(pt->node), &operands); if (!success) { return false; @@ -655,14 +656,7 @@ gb_internal bool find_or_generate_polymorphic_procedure(CheckerContext *old_c, E d->entity.store(entity); - AstFile *file = nullptr; - { - Scope *s = entity->scope; - while (s != nullptr && s->file == nullptr) { - file = s->file; - s = s->parent; - } - } + AstFile *file = base_entity->file; array_add(&gen_procs->procs, entity); rw_mutex_unlock(&gen_procs->mutex); // @local-mutex @@ -6116,7 +6110,7 @@ gb_internal Entity *check_selector(CheckerContext *c, Operand *operand, Ast *nod if (operand->type->kind == Type_Named && operand->type->Named.type_name && operand->type->Named.type_name->kind == Entity_TypeName && - operand->type->Named.type_name->TypeName.objc_metadata) { + entity_objc_metadata(operand->type->Named.type_name)) { check_did_you_mean_objc_entity(name, operand->type->Named.type_name, operand->mode == Addressing_Type); } else if (bt->kind == Type_Struct) { check_did_you_mean_type(name, bt->Struct.fields); @@ -8816,6 +8810,11 @@ gb_internal CallArgumentError check_polymorphic_record_type(CheckerContext *c, O CheckerContext ctx = *c; // NOTE(bill): We need to make sure the lookup scope for the record is the same as where it was created ctx.scope = polymorphic_record_parent_scope(original_type); + + if (original_type->Named.type_name && original_type->Named.type_name->file) { + ctx.file = original_type->Named.type_name->file; + ctx.pkg = ctx.file->pkg; + } GB_ASSERT(ctx.scope != nullptr); Type *bt = base_type(original_type); @@ -8830,7 +8829,9 @@ gb_internal CallArgumentError check_polymorphic_record_type(CheckerContext *c, O set_base_type(named_type, struct_type); check_open_scope(&ctx, node); + begin_filling_record(struct_type); check_struct_type(&ctx, struct_type, node, &ordered_operands, named_type, original_type, found_gen_types); + end_filling_record(struct_type); // check_struct_type released found_gen_types->mutex after publishing the instantiation. gen_types_locked = false; check_close_scope(&ctx); diff --git a/src/check_stmt.cpp b/src/check_stmt.cpp index ffc6f4cc0..dfb046da3 100644 --- a/src/check_stmt.cpp +++ b/src/check_stmt.cpp @@ -2355,23 +2355,7 @@ gb_internal void check_value_decl_stmt(CheckerContext *ctx, Ast *node, u32 mod_f } init_entity_foreign_library(ctx, e); - auto *fp = &ctx->checker->info.foreigns; - StringHashKey key = string_hash_string(name); - Entity **found = string_map_get(fp, key); - if (found) { - Entity *f = *found; - TokenPos pos = f->token.pos; - Type *this_type = base_type(e->type); - Type *other_type = base_type(f->type); - if (!signature_parameter_similar_enough(this_type, other_type)) { - error(e->token, - "Foreign entity '%.*s' previously declared elsewhere with a different type\n" - "\tat %s", - LIT(name), token_pos_to_string(pos)); - } - } else { - string_map_set(fp, key, e); - } + add_link_name_use(ctx->info, name, e, ctx->decl, LinkNameUse_Variable); } else if (e->flags & EntityFlag_Static) { if (vd->values.count > 0) { if (entity_count != vd->values.count) { diff --git a/src/check_type.cpp b/src/check_type.cpp index 61f5a7b3a..6c39472db 100644 --- a/src/check_type.cpp +++ b/src/check_type.cpp @@ -349,7 +349,9 @@ gb_internal void add_polymorphic_record_entity(CheckerContext *ctx, Ast *node, T e = alloc_entity_type_name(s, token, named_type); e->state = EntityState_Resolved; - e->file = ctx->file; + + // NOTE(bille): the generic's file as its token is not that of whichever instantiated it first + e->file = original_type->Named.type_name && original_type->Named.type_name->file ? original_type->Named.type_name->file : ctx->file; e->pkg = pkg; e->TypeName.original_type_for_parapoly = original_type; add_entity_use(ctx, node, e); @@ -770,40 +772,15 @@ gb_internal void check_struct_type(CheckerContext *ctx, Type *struct_type, Ast * } } - if (!struct_type->Struct.is_polymorphic) { - if (st->where_clauses.count > 0 && st->polymorphic_params == nullptr) { - error(st->where_clauses[0], "'where' clauses can only be used on structures with polymorphic parameters"); - } else { - bool where_clause_ok = evaluate_where_clauses(ctx, node, ctx->scope, &st->where_clauses, true); - gb_unused(where_clause_ok); - } - check_struct_fields(ctx, node, &struct_type->Struct.fields, &struct_type->Struct.tags, st->fields, min_field_count, struct_type, context); - - if (st->is_simple) { - bool success = true; - for (Entity *f : struct_type->Struct.fields) { - if (!is_type_nearly_simple_compare(f->type)) { - gbString s = type_to_string(f->type); - error(f->token, "'struct #simple' requires all fields to be at least 'nearly simple compare', got %s", s); - gb_string_free(s); - } - } - if (success) { - struct_type->Struct.is_simple = true; - } - } - - wait_signal_set(&struct_type->Struct.fields_wait_signal); - } #define ST_ALIGN(_name) if (st->_name != nullptr) { \ if (st->is_packed) { \ error(st->_name, "'#%s' cannot be applied with '#packed'", #_name); \ - return; \ - } \ - i64 align = 1; \ - if (check_custom_align(ctx, st->_name, &align, #_name)) { \ - struct_type->Struct.custom_##_name = align; \ + } else { \ + i64 align = 1; \ + if (check_custom_align(ctx, st->_name, &align, #_name)) { \ + struct_type->Struct.custom_##_name = align; \ + } \ } \ } @@ -836,6 +813,33 @@ gb_internal void check_struct_type(CheckerContext *ctx, Type *struct_type, Ast * } #undef ST_ALIGN + + if (!struct_type->Struct.is_polymorphic) { + if (st->where_clauses.count > 0 && st->polymorphic_params == nullptr) { + error(st->where_clauses[0], "'where' clauses can only be used on structures with polymorphic parameters"); + } else { + bool where_clause_ok = evaluate_where_clauses(ctx, node, ctx->scope, &st->where_clauses, true); + gb_unused(where_clause_ok); + } + check_struct_fields(ctx, node, &struct_type->Struct.fields, &struct_type->Struct.tags, st->fields, min_field_count, struct_type, context); + + if (st->is_simple) { + bool success = true; + for (Entity *f : struct_type->Struct.fields) { + if (!is_type_nearly_simple_compare(f->type)) { + gbString s = type_to_string(f->type); + error(f->token, "'struct #simple' requires all fields to be at least 'nearly simple compare', got %s", s); + gb_string_free(s); + } + } + if (success) { + struct_type->Struct.is_simple = true; + } + } + + wait_signal_set(&struct_type->Struct.fields_wait_signal); + } + } gb_internal void check_union_type(CheckerContext *ctx, Type *union_type, Ast *node, Array *poly_operands, Type *named_type, Type *original_type_for_poly, GenTypesData *poly_gen_types_to_unlock) { GB_ASSERT(is_type_union(union_type)); @@ -4622,6 +4626,9 @@ gb_internal Type *make_soa_struct_internal(CheckerContext *ctx, Ast *array_typ_e if (is_complete) { add_type_info_type(ctx, soa_struct); wait_signal_set(&soa_struct->Struct.fields_wait_signal); + } else if (global_group_soa_types != nullptr) { + // NOTE: no task waits on the element type, which could hold every thread of the pool + array_add(global_group_soa_types, soa_struct); } else { SoaTypeWorkerData *wd = permanent_alloc_item(); wd->ctx = *ctx; diff --git a/src/checker.cpp b/src/checker.cpp index 6bc02b9f6..6b7f10159 100644 --- a/src/checker.cpp +++ b/src/checker.cpp @@ -246,10 +246,10 @@ gb_internal Scope *create_scope(CheckerInfo *info, Scope *parent) { s->parent = parent; if (parent != nullptr && parent != builtin_pkg->scope) { - Scope *prev_head_child = parent->head_child.exchange(s, std::memory_order_acq_rel); - if (prev_head_child) { - s->next.store(prev_head_child, std::memory_order_release); - } + Scope *prev_head_child = parent->head_child.load(std::memory_order_acquire); + do { + s->next.store(prev_head_child, std::memory_order_relaxed); + } while (!parent->head_child.compare_exchange_weak(prev_head_child, s, std::memory_order_acq_rel, std::memory_order_acquire)); } if (parent != nullptr && parent->flags & ScopeFlag_ContextDefined) { @@ -272,6 +272,13 @@ gb_internal Scope *create_scope_from_file(CheckerInfo *info, AstFile *f) { s->file = f; f->scope = s; + bool global_context = f->feature_flags_set && (f->feature_flags & OptInFeatureFlag_GlobalContext) != 0; + if (global_context) { + s->flags |= ScopeFlag_ContextDefined; + } else { + s->flags &= ~ScopeFlag_ContextDefined; + } + return s; } @@ -425,10 +432,7 @@ gb_internal Entity *scope_lookup_current(Scope *s, InternedString name, u32 hash } -gb_global std::atomic in_single_threaded_checker_stage; - gb_internal void scope_lookup_parent(Scope *scope, InternedString name, Scope **scope_, Entity **entity_, u32 hash) { - bool is_single_threaded = in_single_threaded_checker_stage.load(std::memory_order_relaxed); if (scope != nullptr) { bool gone_thru_proc = false; bool gone_thru_package = false; @@ -437,9 +441,13 @@ gb_internal void scope_lookup_parent(Scope *scope, InternedString name, Scope ** } for (Scope *s = scope; s != nullptr; s = s->parent) { Entity *found = nullptr; - if (!is_single_threaded) rw_mutex_shared_lock(&s->mutex); - found = scope_map_get(&s->elements, name, hash); - if (!is_single_threaded) rw_mutex_shared_unlock(&s->mutex); + if (s->flags & ScopeFlag_ReadOnly) { + found = scope_map_get(&s->elements, name, hash); + } else { + rw_mutex_shared_lock(&s->mutex); + found = scope_map_get(&s->elements, name, hash); + rw_mutex_shared_unlock(&s->mutex); + } if (global_when_trial != nullptr) { found = global_when_trial_lookup(s, name, hash, found); } @@ -490,6 +498,7 @@ gb_internal Entity *scope_insert_with_name_no_mutex(Scope *s, InternedString nam if (name.value == 0) { return nullptr; } + GB_ASSERT_MSG((s->flags & ScopeFlag_ReadOnly) == 0, "%.*s", LIT(entity->token.string)); Entity *found = nullptr; Entity *result = nullptr; @@ -526,6 +535,7 @@ gb_internal Entity *scope_insert_with_name(Scope *s, InternedString name, u32 ha if (name.value == 0) { return nullptr; } + GB_ASSERT_MSG((s->flags & ScopeFlag_ReadOnly) == 0, "%.*s", LIT(entity->token.string)); Entity *found = nullptr; Entity *result = nullptr; @@ -568,11 +578,7 @@ gb_internal Entity *scope_insert(Scope *s, Entity *entity) { auto name = entity_interned_name(entity); u32 hash = entity->interned_name_hash.load(std::memory_order_relaxed); GB_ASSERT(hash != 0); - if (in_single_threaded_checker_stage.load(std::memory_order_relaxed)) { - return scope_insert_with_name_no_mutex(s, name, hash, entity); - } else { - return scope_insert_with_name(s, name, hash, entity); - } + return scope_insert_with_name(s, name, hash, entity); } gb_internal Entity *scope_insert_no_mutex(Scope *s, Entity *entity) { @@ -918,13 +924,9 @@ gb_internal void check_scope_usage(Checker *c, Scope *scope, u64 vet_flags) { gb_internal void add_dependency(CheckerInfo *info, DeclInfo *d, Entity *e) { - if (in_single_threaded_checker_stage.load(std::memory_order_relaxed)) { - ptr_set_add(&d->deps, e); - } else { - rw_mutex_lock(&d->deps_mutex); - ptr_set_add(&d->deps, e); - rw_mutex_unlock(&d->deps_mutex); - } + rw_mutex_lock(&d->deps_mutex); + ptr_set_add(&d->deps, e); + rw_mutex_unlock(&d->deps_mutex); } gb_internal void add_type_info_dependency(CheckerInfo *info, DeclInfo *d, Type *type) { if (d == nullptr || type == nullptr) { @@ -1649,7 +1651,7 @@ gb_internal void init_checker_info(CheckerInfo *i) { array_init(&i->definitions, a); array_init(&i->entities, a); map_init(&i->global_untyped); - string_map_init(&i->foreigns); + array_init(&i->link_names, heap_allocator()); type_set_init(&i->min_dep_type_info_set); map_init(&i->min_dep_type_info_index_map); @@ -1691,7 +1693,7 @@ gb_internal void destroy_checker_info(CheckerInfo *i) { array_free(&i->definitions); array_free(&i->entities); map_destroy(&i->global_untyped); - string_map_destroy(&i->foreigns); + array_free(&i->link_names); type_set_destroy(&i->min_dep_type_info_set); map_destroy(&i->min_dep_type_info_index_map); @@ -1917,13 +1919,12 @@ gb_internal ExprInfo *check_get_expr_info(CheckerContext *c, Ast *expr) { } return nullptr; } else { + // NOTE: read under the lock, as another thread's insert may move the entries rw_mutex_shared_lock(&c->info->global_untyped_mutex); ExprInfo **found = map_get(&c->info->global_untyped, expr); + ExprInfo *info = found ? *found : nullptr; rw_mutex_shared_unlock(&c->info->global_untyped_mutex); - if (found) { - return *found; - } - return nullptr; + return info; } } @@ -2023,8 +2024,6 @@ gb_internal void add_type_and_value(CheckerContext *ctx, Ast *expr, AddressingMo return; } - BlockingMutex *mutex = tav_mutex_for_node(expr); - /* Previous logic: BlockingMutex *mutex = &ctx->info->type_and_value_mutex; if (ctx->decl) { @@ -2034,10 +2033,11 @@ gb_internal void add_type_and_value(CheckerContext *ctx, Ast *expr, AddressingMo } */ - mutex_lock(mutex); Ast *prev_expr = nullptr; while (prev_expr != expr) { prev_expr = expr; + BlockingMutex *mutex = tav_mutex_for_node(expr); + mutex_lock(mutex); expr->tav.mode = mode; if (type != nullptr && expr->tav.type != nullptr && is_type_any(type) && is_type_untyped(expr->tav.type)) { @@ -2053,13 +2053,13 @@ gb_internal void add_type_and_value(CheckerContext *ctx, Ast *expr, AddressingMo } else if (mode == Addressing_Value && type != nullptr && is_type_proc(type)) { expr->tav.value = value; } + mutex_unlock(mutex); expr = unparen_expr(expr); if (expr == nullptr) { break; }; } - mutex_unlock(mutex); } gb_internal void add_entity_definition(CheckerInfo *i, Ast *identifier, Entity *entity) { @@ -2629,7 +2629,9 @@ gb_internal void check_procedure_later(Checker *c, ProcInfo *info) { if (global_procedure_body_in_worker_queue.load()) { thread_pool_add_task(check_proc_info_worker_proc, info); } else { + mutex_lock(&c->procs_to_check_mutex); array_add(&c->procs_to_check, info); + mutex_unlock(&c->procs_to_check_mutex); } if (DEBUG_CHECK_ALL_PROCEDURES) { @@ -3383,7 +3385,7 @@ gb_internal Array generate_entity_dependency_graph(CheckerInf } -gb_internal void check_single_global_entity(Checker *c, Entity *e, DeclInfo *d); +gb_internal void check_single_global_entity(Checker *c, Entity *e, DeclInfo *d, UntypedExprInfoMap *untyped=nullptr); gb_internal Entity *find_core_entity(Checker *c, String name) { @@ -5329,7 +5331,7 @@ gb_internal CheckerContext *create_checker_context(Checker *c) { return ctx; } -gb_internal void check_single_global_entity(Checker *c, Entity *e, DeclInfo *d) { +gb_internal void check_single_global_entity(Checker *c, Entity *e, DeclInfo *d, UntypedExprInfoMap *untyped) { GB_ASSERT(e != nullptr); if (e->state == EntityState_Resolved) { // NOTE: also an alias already overridden by what it aliases, which may have no `DeclInfo` @@ -5352,6 +5354,7 @@ gb_internal void check_single_global_entity(Checker *c, Entity *e, DeclInfo *d) GB_ASSERT(e->pkg != nullptr); ctx->decl = d; ctx->scope = d->scope; + ctx->untyped = untyped; if (pkg->kind == Package_Init) { if (e->kind != Entity_Procedure && e->token.string == "main") { @@ -7164,6 +7167,22 @@ gb_internal void handle_raddbg_type_view(Checker *c, RaddbgTypeView const &type_ array_add(&c->info.raddbg_type_views, RaddbgTypeView{type, view}); } +gb_internal GB_COMPARE_PROC(raddbg_type_view_cmp) { + RaddbgTypeView const *x = cast(RaddbgTypeView const *)a; + RaddbgTypeView const *y = cast(RaddbgTypeView const *)b; + Entity *xe = (x->type && x->type->kind == Type_Named) ? x->type->Named.type_name : nullptr; + Entity *ye = (y->type && y->type->kind == Type_Named) ? y->type->Named.type_name : nullptr; + if (xe != nullptr && ye != nullptr && xe != ye) { + return entity_source_order_cmp(xe, ye); + } + u64 xh = type_hash_canonical_type(x->type); + u64 yh = type_hash_canonical_type(y->type); + if (xh != yh) { + return xh < yh ? -1 : +1; + } + return string_compare(x->view, y->view); +} + gb_internal void check_objc_context_provider_procedures(Checker *c) { for (Entity *e = nullptr; mpsc_dequeue(&c->procs_with_objc_context_provider_to_check, &e); /**/) { GB_ASSERT(e->kind == Entity_TypeName); @@ -7343,18 +7362,18 @@ gb_internal void check_update_dependency_tree_for_procedures(Checker *c) { #else gb_internal void check_walk_all_dependencies(DeclInfo *decl); -gb_internal WORKER_TASK_PROC(check_walk_all_dependencies_worker_proc) { - if (data == nullptr) { - return 0; - } - DeclInfo *decl = cast(DeclInfo *)data; - +// NOTE: post-order, so a declaration has the dependencies of all those nested in it before they are added to its parent +gb_internal void check_walk_all_dependencies_post_order(DeclInfo *decl) { for (DeclInfo *child = decl->next_child; child != nullptr; child = child->next_sibling) { - thread_pool_add_task(check_walk_all_dependencies_worker_proc, child); - check_walk_all_dependencies(child); + check_walk_all_dependencies_post_order(child); } - add_deps_from_child_to_parent(decl); +} + +gb_internal WORKER_TASK_PROC(check_walk_all_dependencies_worker_proc) { + if (data != nullptr) { + check_walk_all_dependencies_post_order(cast(DeclInfo *)data); + } return 0; } @@ -7488,6 +7507,17 @@ gb_internal void check_parsed_files(Checker *c) { TIME_SECTION("export entities - post"); check_export_entities(c); + // NOTE: no global name is declared from here on, so their scopes are read without locking + for (AstPackage *pkg : c->parser->packages) { + pkg->scope->flags |= ScopeFlag_ReadOnly; + for (AstFile *f : pkg->files) { + f->scope->flags |= ScopeFlag_ReadOnly; + } + } + builtin_pkg->scope->flags |= ScopeFlag_ReadOnly; + intrinsics_pkg->scope->flags |= ScopeFlag_ReadOnly; + config_pkg->scope->flags |= ScopeFlag_ReadOnly; + TIME_SECTION("add entities from packages"); check_merge_queues_into_arrays(c); @@ -7622,6 +7652,9 @@ gb_internal void check_parsed_files(Checker *c) { debugf("Total Procedure Bodies Checked: %td\n", total_bodies_checked.load(std::memory_order_relaxed)); + TIME_SECTION("check unique link names"); + check_link_name_uses(c); + TIME_SECTION("check unique package names"); bool package_names_are_unique = check_unique_package_names(c); @@ -7720,8 +7753,16 @@ gb_internal void check_parsed_files(Checker *c) { } TIME_SECTION("collate type info stuff"); - for (RaddbgTypeView type_view; mpsc_dequeue(&c->info.raddbg_type_views_queue, &type_view); /**/) { - handle_raddbg_type_view(c, type_view); + { + auto views = array_make(heap_allocator()); + defer (array_free(&views)); + for (RaddbgTypeView type_view; mpsc_dequeue(&c->info.raddbg_type_views_queue, &type_view); /**/) { + array_add(&views, type_view); + } + array_sort(views, raddbg_type_view_cmp); + for (RaddbgTypeView const &type_view : views) { + handle_raddbg_type_view(c, type_view); + } } diff --git a/src/checker.hpp b/src/checker.hpp index 633790405..78f579c2d 100644 --- a/src/checker.hpp +++ b/src/checker.hpp @@ -269,6 +269,20 @@ struct ProcInfo { }; +enum LinkNameUseKind : u8 { + LinkNameUse_ForeignProcedure, + LinkNameUse_Procedure, // exported or with a link name + LinkNameUse_Variable, // foreign or exported +}; + +struct LinkNameUse { + String name; + Entity * entity; + DeclInfo * decl; + LinkNameUseKind kind; +}; + + enum { DEFAULT_SCOPE_CAPACITY = 32 }; @@ -461,6 +475,19 @@ gb_internal Entity *scope_map_get(ScopeMap *m, InternedString key, u32 hash) { } } +// NOTE: the key must be present; never grows, so lookups that do not lock see either value +gb_internal void scope_map_replace(ScopeMap *m, InternedString key, u32 hash, Entity *value) { + u32 mask = m->cap-1; + for (u32 pos = hash & mask;; pos = (pos + 1) & mask) { + ScopeMapSlot *s = &m->slots[pos]; + GB_ASSERT(s->hash != 0); + if (s->hash == hash && m->keys[pos] == key) { + s->value = value; + return; + } + } +} + gb_internal void scope_map_clear(ScopeMap *m) { gb_memset(m->slots, 0, gb_size_of(*m->slots) * m->cap); m->count = 0; @@ -548,6 +575,7 @@ enum ScopeFlag : i32 { ScopeFlag_Type = 1<<7, ScopeFlag_HasBeenImported = 1<<10, // This is only applicable to file scopes + ScopeFlag_ReadOnly = 1<<11, // file, package and universe scopes once every global is declared: read without locking ScopeFlag_ContextDefined = 1<<16, }; @@ -761,7 +789,9 @@ struct CheckerInfo { // TypeSet type_info_set; BlockingMutex foreign_mutex; // NOT recursive - StringMap foreigns; + Array link_names; // checked for clashes once everything is checked, see `check_link_name_uses` + + BlockingMutex entry_point_mutex; MPSCQueue definition_queue; MPSCQueue entity_queue; @@ -868,6 +898,7 @@ struct Checker { MPSCQueue procs_with_deferred_to_check; MPSCQueue procs_with_objc_context_provider_to_check; + BlockingMutex procs_to_check_mutex; Array procs_to_check; BlockingMutex nested_proc_lits_mutex; @@ -921,6 +952,9 @@ gb_internal void check_add_foreign_import_decl(CheckerContext *c, Ast *decl); gb_internal void check_entity_decl(CheckerContext *c, Entity *e, DeclInfo *d, Type *named_type); gb_internal void global_group_check_edge(CheckerContext *ctx, Entity *e); +// While a group of global entities is checked: its incomplete '#soa' types, completed by the same thread +gb_thread_local Array *global_group_soa_types; + struct GlobalWhenTrialEntityScope { struct GlobalWhenTrial *trial; i32 mute_depth; diff --git a/src/checker_global.cpp b/src/checker_global.cpp index ccc212505..fd8b51130 100644 --- a/src/checker_global.cpp +++ b/src/checker_global.cpp @@ -39,6 +39,7 @@ gb_internal void global_import_stage_end(GlobalImportStagePart part, u64 start) } } +gb_global std::atomic in_global_entity_stage; // to tell the checks of the global stage from those during 'when' resolution gb_global BlockingMutex global_entity_time_mutex; gb_global PtrMap global_entity_times; gb_thread_local u64 global_entity_child_ticks; @@ -68,7 +69,7 @@ gb_internal void global_entity_timing_end(GlobalEntityTimingFrame const &f, Enti u64 self = total - gb_min(total, global_entity_child_ticks); global_entity_child_ticks = f.saved_child_ticks + total; - bool in_global_loop = in_single_threaded_checker_stage.load(std::memory_order_relaxed); + bool in_global_loop = in_global_entity_stage.load(std::memory_order_relaxed); MUTEX_GUARD(&global_entity_time_mutex); GlobalEntityTime *found = map_get(&global_entity_times, e); @@ -1321,10 +1322,15 @@ gb_internal void global_group_check_edge(CheckerContext *ctx, Entity *e) { // NOTE: members in a fixed order, as which member of a cycle is entered first can decide whether it checks, // e.g. an enum whose values are `union_variant_index`es of a union with pointers back to it +// NOTE: a group's untyped expressions and '#soa' types are its own, so it touches no shared queue meanwhile gb_internal void check_global_group(Checker *c, GlobalGroupGraph *g, i32 gi) { GlobalGroup *group = &g->groups[gi]; i32 *members = g->members.data + group->start; + UntypedExprInfoMap untyped = {}; + auto soa_types = array_make(heap_allocator()); + global_group_soa_types = &soa_types; + g->current_group = gi; for (i32 k = 0; k < group->count; k++) { Entity *e = g->nodes[members[k]]; @@ -1334,17 +1340,27 @@ gb_internal void check_global_group(Checker *c, GlobalGroupGraph *g, i32 gi) { } g->current_entity = e; GlobalEntityTimingFrame timing_frame = global_entity_timing_begin(e); - check_single_global_entity(c, e, e->decl_info); + check_single_global_entity(c, e, e->decl_info, &untyped); if (e->type != nullptr && is_type_typed(e->type)) { - for (Type *t = nullptr; mpsc_dequeue(&c->soa_types_to_complete, &t); /**/) { + for (Type *t : soa_types) { complete_soa_type(c, t, false); } + array_clear(&soa_types); (void)type_size_of(e->type); (void)type_align_of(e->type); } global_entity_timing_end(timing_frame, e); } + for (Type *t : soa_types) { + complete_soa_type(c, t, false); + } + global_group_soa_types = nullptr; + array_free(&soa_types); + + add_untyped_expressions(&c->info, &untyped); + map_destroy(&untyped); + group->done = true; g->current_group = -1; g->current_entity = nullptr; @@ -1432,7 +1448,7 @@ gb_internal void destroy_global_groups(GlobalGroupGraph *g) { } gb_internal void check_all_global_entities(Checker *c) { - in_single_threaded_checker_stage.store(true, std::memory_order_relaxed); + in_global_entity_stage.store(true, std::memory_order_relaxed); // NOTE(bill): the runtime types the checker looks up by name rather than through a declaration init_preload(c); @@ -1444,6 +1460,10 @@ gb_internal void check_all_global_entities(Checker *c) { } } + for (Type *t = nullptr; mpsc_dequeue(&c->soa_types_to_complete, &t); /**/) { + complete_soa_type(c, t, false); + } + TIME_SECTION("check all global entities - build groups"); GlobalGroupGraph *g = &global_groups; build_global_groups(c, g); @@ -1459,7 +1479,7 @@ gb_internal void check_all_global_entities(Checker *c) { gb_exit(1); } - in_single_threaded_checker_stage.store(false, std::memory_order_relaxed); + in_global_entity_stage.store(false, std::memory_order_relaxed); } diff --git a/src/entity.cpp b/src/entity.cpp index b5c1c336b..845e2b910 100644 --- a/src/entity.cpp +++ b/src/entity.cpp @@ -142,6 +142,10 @@ enum ProcedureOptimizationMode : u8 { BlockingMutex global_type_name_objc_metadata_mutex; +struct TypeNameObjCMetadata; + +gb_internal TypeNameObjCMetadata *entity_objc_metadata(struct Entity *e); + struct TypeNameObjCMetadataEntry { InternedString interned; Entity *entity; diff --git a/src/llvm_backend.cpp b/src/llvm_backend.cpp index a0d87630c..ce6a8820a 100644 --- a/src/llvm_backend.cpp +++ b/src/llvm_backend.cpp @@ -1576,7 +1576,13 @@ gb_internal void lb_finalize_objc_names(lbGenerator *gen, lbProcedure *p) { auto class_impls = array_make(temporary_allocator(), 0, 16); // Register all class implementations unconditionally, even if not statically referenced + auto implementations = array_make(temporary_allocator(), 0, 16); for (Entity *e = {}; mpsc_dequeue(&gen->info->objc_class_implementations, &e); /**/) { + array_add(&implementations, e); + } + array_sort(implementations, init_procedures_cmp); + + for (Entity *e : implementations) { GB_ASSERT(e->kind == Entity_TypeName && e->TypeName.objc_is_implementation); lb_handle_objc_find_or_register_class(p, e->TypeName.objc_class_name, e->type); diff --git a/src/types.cpp b/src/types.cpp index 6408669b0..c65a7c430 100644 --- a/src/types.cpp +++ b/src/types.cpp @@ -338,7 +338,6 @@ gb_global String const type_strings[] = { enum TypeFlag : u32 { TypeFlag_Polymorphic = 1<<1, TypeFlag_PolySpecialized = 1<<2, - TypeFlag_InProcessOfCheckingPolymorphic = 1<<3, }; struct Type { @@ -2494,13 +2493,24 @@ gb_internal TypeTuple *get_record_polymorphic_params(Type *t) { } +gb_internal TypeNameObjCMetadata *entity_objc_metadata(Entity *e) { + GB_ASSERT(e->kind == Entity_TypeName); + mutex_lock(&global_type_name_objc_metadata_mutex); + TypeNameObjCMetadata *md = e->TypeName.objc_metadata; + Type *original = e->TypeName.original_type_for_parapoly; + if (md == nullptr && original != nullptr && original->kind == Type_Named && original->Named.type_name != nullptr) { + md = original->Named.type_name->TypeName.objc_metadata; + } + mutex_unlock(&global_type_name_objc_metadata_mutex); + return md; +} + +gb_internal gb_thread_local Array is_type_polymorphic_named_stack; + gb_internal bool is_type_polymorphic(Type *t, bool or_specialized=false) { if (t == nullptr) { return false; } - if (t->flags & TypeFlag_InProcessOfCheckingPolymorphic) { - return false; - } switch (t->kind) { case Type_Generic: @@ -2508,10 +2518,18 @@ gb_internal bool is_type_polymorphic(Type *t, bool or_specialized=false) { case Type_Named: { - u32 flags = t->flags; - t->flags |= TypeFlag_InProcessOfCheckingPolymorphic; + Array &stack = is_type_polymorphic_named_stack; + for (Type *named : stack) { + if (named == t) { + return false; + } + } + if (stack.allocator.proc == nullptr) { + array_init(&stack, heap_allocator()); + } + array_add(&stack, t); bool ok = is_type_polymorphic(t->Named.base, or_specialized); - t->flags = flags; + array_pop(&stack); return ok; } @@ -3815,8 +3833,7 @@ gb_internal Selection lookup_field_with_selection(Type *type_, InternedString fi if (has_type_got_objc_class_attribute(original_type) && original_type->kind == Type_Named) { Entity *e = original_type->Named.type_name; GB_ASSERT(e->kind == Entity_TypeName); - if (e->TypeName.objc_metadata) { - auto *md = e->TypeName.objc_metadata; + if (auto *md = entity_objc_metadata(e)) { mutex_lock(md->mutex); defer (mutex_unlock(md->mutex)); for (TypeNameObjCMetadataEntry const &entry : md->type_entries) { @@ -3907,8 +3924,7 @@ gb_internal Selection lookup_field_with_selection(Type *type_, InternedString fi if (has_type_got_objc_class_attribute(original_type) && original_type->kind == Type_Named) { Entity *e = original_type->Named.type_name; GB_ASSERT(e->kind == Entity_TypeName); - if (e->TypeName.objc_metadata) { - auto *md = e->TypeName.objc_metadata; + if (auto *md = entity_objc_metadata(e)) { mutex_lock(md->mutex); defer (mutex_unlock(md->mutex)); for (TypeNameObjCMetadataEntry const &entry : md->value_entries) { @@ -4405,6 +4421,35 @@ gb_internal i64 type_target_max_align(void) { return max_align; } +// Polymorphic record instances being filled by this thread, which another may already have found in the cache +gb_internal gb_thread_local Array records_being_filled; + +gb_internal void begin_filling_record(Type *t) { + if (records_being_filled.allocator.proc == nullptr) { + array_init(&records_being_filled, heap_allocator()); + } + array_add(&records_being_filled, t); +} + +gb_internal void end_filling_record(Type *t) { + GB_ASSERT(records_being_filled.count > 0 && records_being_filled[records_being_filled.count-1] == t); + array_pop(&records_being_filled); +} + +gb_internal gb_thread_local i32 lazy_mutex_depth; + +gb_internal void wait_for_struct_fields(Type *t) { + if (t->Struct.polymorphic_parent == nullptr || t->Struct.fields_wait_signal.futex.load() != 0 || lazy_mutex_depth > 0) { + return; + } + for (Type *r : records_being_filled) { + if (r == t) { + return; + } + } + wait_signal_until_available(&t->Struct.fields_wait_signal); +} + gb_internal i64 type_align_of_internal(Type *t, TypePath *path) { GB_ASSERT(path != nullptr); if (t->failure) { @@ -4529,6 +4574,7 @@ gb_internal i64 type_align_of_internal(Type *t, TypePath *path) { } break; case Type_Struct: { + wait_for_struct_fields(t); if (t->Struct.custom_align > 0) { return gb_max(t->Struct.custom_align, 1); } @@ -4643,6 +4689,7 @@ gb_internal i64 *type_set_offsets_of(Slice const &fields, bool is_pack gb_internal bool type_set_offsets(Type *t) { t = base_type(t); if (t->kind == Type_Struct) { + wait_for_struct_fields(t); // if (t->Struct.are_offsets_being_processed.load()) { // return true; // } @@ -4847,6 +4894,7 @@ gb_internal i64 type_size_of_internal(Type *t, TypePath *path) { case Type_Struct: { + wait_for_struct_fields(t); if (t->Struct.is_raw_union) { i64 count = t->Struct.fields.count; i64 align = type_align_of_internal(t, path); From 5f579a1a10eeefd6c282f8f1f8af9c20eca7ca8a Mon Sep 17 00:00:00 2001 From: gingerBill Date: Thu, 1 Oct 2026 21:55:25 +0100 Subject: [PATCH 131/215] Fix numerous race conditions: clone polymorphic defaults per call, evaluate foreign import attributes after collection, own dependencies for record instances, sorted Objective-C emission, no debug line for anonymous records --- src/check_expr.cpp | 8 ++++++- src/check_type.cpp | 1 + src/checker.cpp | 49 +++++++++++++++++++++++--------------- src/llvm_backend.cpp | 49 +++++++++++++++++++++++++++++++++++--- src/llvm_backend_debug.cpp | 16 +++++++------ src/types.cpp | 2 +- 6 files changed, 94 insertions(+), 31 deletions(-) diff --git a/src/check_expr.cpp b/src/check_expr.cpp index 4f0feab8b..f655b206e 100644 --- a/src/check_expr.cpp +++ b/src/check_expr.cpp @@ -6867,7 +6867,8 @@ gb_internal CallArgumentError check_call_arguments_internal(CheckerContext *c, A // then the default is materialized against the concrete type (reporting a clear error if it does not fit). ordered_operands[i].mode = Addressing_Invalid; ordered_operands[i].type = t_invalid; - ordered_operands[i].expr = e->Variable.param_value.original_ast_expr; + // NOTE(bill): Check a clone, as the callee's default expression is shared by every call site. + ordered_operands[i].expr = clone_ast(e->Variable.param_value.original_ast_expr); ordered_operands[i].deferred_untyped_arg = true; } else { ordered_operands[i].mode = Addressing_Value; @@ -8802,6 +8803,7 @@ gb_internal CallArgumentError check_polymorphic_record_type(CheckerContext *c, O Entity *found_entity = find_polymorphic_record_entity(found_gen_types, param_count, ordered_operands); if (found_entity) { + add_declaration_dependency(c, found_entity); operand->mode = Addressing_Type; operand->type = found_entity->type; return err; @@ -8810,6 +8812,9 @@ gb_internal CallArgumentError check_polymorphic_record_type(CheckerContext *c, O CheckerContext ctx = *c; // NOTE(bill): We need to make sure the lookup scope for the record is the same as where it was created ctx.scope = polymorphic_record_parent_scope(original_type); + // NOTE(bill): the instance's members are only checked by its first use, so their dependencies are + // the instance's own, and each use depends on the instance instead + ctx.decl = make_decl_info(ctx.scope, nullptr); if (original_type->Named.type_name && original_type->Named.type_name->file) { ctx.file = original_type->Named.type_name->file; @@ -8851,6 +8856,7 @@ gb_internal CallArgumentError check_polymorphic_record_type(CheckerContext *c, O GB_PANIC("Unsupported parametric polymorphic record type"); } + add_declaration_dependency(c, named_type->Named.type_name); operand->mode = Addressing_Type; operand->type = named_type; } diff --git a/src/check_type.cpp b/src/check_type.cpp index 6c39472db..247f52ea3 100644 --- a/src/check_type.cpp +++ b/src/check_type.cpp @@ -354,6 +354,7 @@ gb_internal void add_polymorphic_record_entity(CheckerContext *ctx, Ast *node, T e->file = original_type->Named.type_name && original_type->Named.type_name->file ? original_type->Named.type_name->file : ctx->file; e->pkg = pkg; e->TypeName.original_type_for_parapoly = original_type; + e->decl_info = ctx->decl; add_entity_use(ctx, node, e); } diff --git a/src/checker.cpp b/src/checker.cpp index 6b7f10159..95961c8a1 100644 --- a/src/checker.cpp +++ b/src/checker.cpp @@ -5766,6 +5766,23 @@ gb_internal void check_foreign_import_fullpaths(Checker *c) { GB_ASSERT(ctx.scope == e->scope); + AttributeContext ac = {}; + check_decl_attributes(&ctx, fl->attributes, foreign_import_decl_attribute, &ac); + if (ac.require_declaration) { + mpsc_enqueue(&ctx.info->required_foreign_imports_through_force_queue, e); + add_entity_use(&ctx, nullptr, e); + } + if (ac.foreign_import_priority_index != 0) { + e->LibraryName.priority_index = ac.foreign_import_priority_index; + } + if (ac.ignore_duplicates) { + e->LibraryName.ignore_duplicates = true; + } + String extra_linker_flags = string_trim_whitespace(ac.extra_linker_flags); + if (extra_linker_flags.len != 0) { + e->LibraryName.extra_linker_flags = extra_linker_flags; + } + if (fl->fullpaths.count == 0) { String base_dir = dir_from_path(decl->file()->fullpath); @@ -5878,11 +5895,21 @@ gb_internal void check_add_foreign_import_decl(CheckerContext *ctx, Ast *decl) { GB_ASSERT(fl->library_name.pos.line != 0); fl->library_name.string = library_name; - AttributeContext ac = {}; - check_decl_attributes(ctx, fl->attributes, foreign_import_decl_attribute, &ac); + // NOTE(bill): Only 'export' is needed to declare the entity; the attribute values are evaluated in + // `check_foreign_import_fullpaths` as the globals they may name are not all collected yet + bool is_export = false; + for (Ast *attr : fl->attributes) { + if (attr->kind != Ast_Attribute) continue; + for (Ast *elem : attr->Attribute.elems) { + Ast *name = elem->kind == Ast_FieldValue ? elem->FieldValue.field : elem; + if (name->kind == Ast_Ident && name->Ident.token.string == "export") { + is_export = true; + } + } + } Scope *scope = parent_scope; - if (ac.is_export) { + if (is_export) { scope = parent_scope->parent; } @@ -5892,22 +5919,6 @@ gb_internal void check_add_foreign_import_decl(CheckerContext *ctx, Ast *decl) { add_entity_flags_from_file(ctx, e, parent_scope); add_entity(ctx, scope, nullptr, e); - - if (ac.require_declaration) { - mpsc_enqueue(&ctx->info->required_foreign_imports_through_force_queue, e); - add_entity_use(ctx, nullptr, e); - } - if (ac.foreign_import_priority_index != 0) { - e->LibraryName.priority_index = ac.foreign_import_priority_index; - } - if (ac.ignore_duplicates) { - e->LibraryName.ignore_duplicates = true; - } - String extra_linker_flags = string_trim_whitespace(ac.extra_linker_flags); - if (extra_linker_flags.len != 0) { - e->LibraryName.extra_linker_flags = extra_linker_flags; - } - mpsc_enqueue(&ctx->info->foreign_imports_to_check_fullpaths, e); } diff --git a/src/llvm_backend.cpp b/src/llvm_backend.cpp index ce6a8820a..05ce7ae17 100644 --- a/src/llvm_backend.cpp +++ b/src/llvm_backend.cpp @@ -1559,6 +1559,28 @@ gb_internal void lb_register_objc_thing( } } +gb_internal GB_COMPARE_PROC(objc_global_cmp) { + lbObjCGlobal const *x = cast(lbObjCGlobal const *)a; + lbObjCGlobal const *y = cast(lbObjCGlobal const *)b; + int cmp = string_compare(x->name, y->name); + if (cmp == 0) { + cmp = (x->class_impl_type != nullptr) - (y->class_impl_type != nullptr); + } + return cmp; +} + +gb_internal GB_COMPARE_PROC(objc_class_type_cmp) { + Type *x = *cast(Type **)a; + Type *y = *cast(Type **)b; + return entity_source_order_cmp(x->Named.type_name, y->Named.type_name); +} + +gb_internal GB_COMPARE_PROC(objc_method_data_cmp) { + ObjcMethodData const *x = cast(ObjcMethodData const *)a; + ObjcMethodData const *y = cast(ObjcMethodData const *)b; + return entity_source_order_cmp(x->proc_entity, y->proc_entity); +} + gb_internal void lb_finalize_objc_names(lbGenerator *gen, lbProcedure *p) { if (p == nullptr) { return; @@ -1612,11 +1634,18 @@ gb_internal void lb_finalize_objc_names(lbGenerator *gen, lbProcedure *p) { } } + // NOTE(bill): the queues are filled by the codegen threads and the set is in address order, so all are sorted + auto class_types = array_make(temporary_allocator(), 0, class_set.count); for (auto pair : class_set) { - Entity *e = pair.type->Named.type_name; + array_add(&class_types, pair.type); + } + array_sort(class_types, objc_class_type_cmp); + + for (Type *class_type : class_types) { + Entity *e = class_type->Named.type_name; GB_ASSERT(e->kind == Entity_TypeName); auto &tn = e->TypeName; - Type *class_impl = !tn.objc_is_implementation ? nullptr : pair.type; + Type *class_impl = !tn.objc_is_implementation ? nullptr : class_type; lb_handle_objc_find_or_register_class(p, tn.objc_class_name, class_impl); if (build_context.bedrock) { @@ -1626,6 +1655,11 @@ gb_internal void lb_finalize_objc_names(lbGenerator *gen, lbProcedure *p) { for (lbObjCGlobal g = {}; mpsc_dequeue(&gen->objc_classes, &g); /**/) { array_add(&referenced_classes, g); } + array_sort(referenced_classes, objc_global_cmp); + + for (auto &kv : m->info->objc_method_implementations) { + array_sort(kv.value, objc_method_data_cmp); + } // Add all class globals to a map so that we can look them up dynamically // in order to resolve out-of-order because classes that are being implemented @@ -1662,7 +1696,12 @@ gb_internal void lb_finalize_objc_names(lbGenerator *gen, lbProcedure *p) { } // Now we can register all referenced selectors + auto selectors = array_make(temporary_allocator()); for (lbObjCGlobal g = {}; mpsc_dequeue(&gen->objc_selectors, &g); /**/) { + array_add(&selectors, g); + } + array_sort(selectors, objc_global_cmp); + for (lbObjCGlobal const &g : selectors) { lb_register_objc_thing(handled, m, args, class_impls, global_class_map, p, g, "sel_registerName"); } @@ -1943,8 +1982,12 @@ gb_internal void lb_finalize_objc_names(lbGenerator *gen, lbProcedure *p) { } // Register ivar offsets for any `objc_ivar_get` expressions emitted. + auto ivars = array_make(temporary_allocator(), 0, ivar_map.count); for (auto const& kv : ivar_map) { - lbObjCGlobal const& g = kv.value; + array_add(&ivars, kv.value); + } + array_sort(ivars, objc_global_cmp); + for (lbObjCGlobal const& g : ivars) { lbAddr ivar_addr = {}; lbValue *found = string_map_get(&m->members, g.global_name); diff --git a/src/llvm_backend_debug.cpp b/src/llvm_backend_debug.cpp index d3e63cbf7..b70071e5b 100644 --- a/src/llvm_backend_debug.cpp +++ b/src/llvm_backend_debug.cpp @@ -65,8 +65,10 @@ gb_internal LLVMMetadataRef lb_debug_end_location_from_ast(lbProcedure *p, Ast * return lb_debug_location_from_token_pos(p, ast_end_token(node).pos); } -gb_internal void lb_debug_file_line(lbModule *m, Ast *node, LLVMMetadataRef *file, unsigned *line) { - if (*file == nullptr) { +// NOTE(bill): not for an anonymous type, as identical ones are interchangeable, and which one is used +// (e.g. by a polymorphic instance) depends on the checking order +gb_internal void lb_debug_file_line(lbModule *m, Type *type, Ast *node, LLVMMetadataRef *file, unsigned *line) { + if (*file == nullptr && type->kind == Type_Named) { if (node) { *file = lb_get_llvm_metadata(m, node->file()); *line = cast(unsigned)ast_token(node).pos.line; @@ -192,7 +194,7 @@ gb_internal LLVMMetadataRef lb_debug_basic_struct(lbModule *m, String const &nam gb_internal LLVMMetadataRef lb_debug_struct(lbModule *m, Type *type, Type *bt, String name, LLVMMetadataRef scope, LLVMMetadataRef file, unsigned line) { GB_ASSERT(bt->kind == Type_Struct); - lb_debug_file_line(m, bt->Struct.node, &file, &line); + lb_debug_file_line(m, type, bt->Struct.node, &file, &line); unsigned tag = DW_TAG_structure_type; if (is_type_raw_union(bt)) { @@ -476,7 +478,7 @@ gb_internal LLVMMetadataRef lb_debug_union(lbModule *m, Type *type, String name, Type *bt = base_type(type); GB_ASSERT(bt->kind == Type_Union); - lb_debug_file_line(m, bt->Union.node, &file, &line); + lb_debug_file_line(m, type, bt->Union.node, &file, &line); u64 size_in_bits = 8*type_size_of(bt); u32 align_in_bits = 8*cast(u32)type_align_of(bt); @@ -560,7 +562,7 @@ gb_internal LLVMMetadataRef lb_debug_bitset(lbModule *m, Type *type, String name Type *bt = base_type(type); GB_ASSERT(bt->kind == Type_BitSet); - lb_debug_file_line(m, bt->BitSet.node, &file, &line); + lb_debug_file_line(m, type, bt->BitSet.node, &file, &line); u64 size_in_bits = 8*type_size_of(bt); u32 align_in_bits = 8*cast(u32)type_align_of(bt); @@ -641,7 +643,7 @@ gb_internal LLVMMetadataRef lb_debug_bitfield(lbModule *m, Type *type, String na Type *bt = base_type(type); GB_ASSERT(bt->kind == Type_BitField); - lb_debug_file_line(m, bt->BitField.node, &file, &line); + lb_debug_file_line(m, type, bt->BitField.node, &file, &line); u64 size_in_bits = 8*type_size_of(bt); u32 align_in_bits = 8*cast(u32)type_align_of(bt); @@ -682,7 +684,7 @@ gb_internal LLVMMetadataRef lb_debug_enum(lbModule *m, Type *type, String name, Type *bt = base_type(type); GB_ASSERT(bt->kind == Type_Enum); - lb_debug_file_line(m, bt->Enum.node, &file, &line); + lb_debug_file_line(m, type, bt->Enum.node, &file, &line); u64 size_in_bits = 8*type_size_of(bt); u32 align_in_bits = 8*cast(u32)type_align_of(bt); diff --git a/src/types.cpp b/src/types.cpp index c65a7c430..aad687ac7 100644 --- a/src/types.cpp +++ b/src/types.cpp @@ -353,7 +353,7 @@ struct Type { std::atomic cached_align; std::atomic canonical_hash; std::atomic flags; // TypeFlag - bool failure; + std::atomic failure; }; // IMPORTANT NOTE(bill): This must match the same as the in core.odin From c494c7a503712c6c247ccd87b1dc0b08374fd0ba Mon Sep 17 00:00:00 2001 From: gingerBill Date: Thu, 1 Oct 2026 23:17:34 +0100 Subject: [PATCH 132/215] Check global entity groups in parallel * CAS-claimed entities, cycle-safe waits for entities and records, lazy entities without lazy_mutex * Build union type names only on error, take the error block only to report proc group overload errors --- src/check_decl.cpp | 55 +++--- src/check_expr.cpp | 25 ++- src/check_stmt.cpp | 4 +- src/check_type.cpp | 12 +- src/checker.cpp | 4 + src/checker.hpp | 4 +- src/checker_global.cpp | 176 +++++++++++------- src/entity.cpp | 1 + src/thread_pool.cpp | 41 ++++ src/threading.cpp | 4 + src/types.cpp | 44 ++--- tests/issues/run.bat | 2 + tests/issues/run.sh | 2 + tests/issues/test_issue_7566.odin | 36 ++++ .../test_issue_foreign_import_attributes.odin | 13 ++ ...test_issue_global_when_cycle_accepted.odin | 28 +++ ...est_issue_global_when_cycle_ambiguous.odin | 5 + 17 files changed, 316 insertions(+), 140 deletions(-) create mode 100644 tests/issues/test_issue_7566.odin create mode 100644 tests/issues/test_issue_foreign_import_attributes.odin create mode 100644 tests/issues/test_issue_global_when_cycle_accepted.odin create mode 100644 tests/issues/test_issue_global_when_cycle_ambiguous.odin diff --git a/src/check_decl.cpp b/src/check_decl.cpp index 4a40ba7a4..008959936 100644 --- a/src/check_decl.cpp +++ b/src/check_decl.cpp @@ -1953,6 +1953,7 @@ gb_internal void check_proc_group_decl(CheckerContext *ctx, Entity *pg_entity, D GB_ASSERT(p != q); bool is_invalid = false; + bool different_results = false; TokenPos pos = q->token.pos; @@ -1960,9 +1961,6 @@ gb_internal void check_proc_group_decl(CheckerContext *ctx, Entity *pg_entity, D continue; } - - ERROR_BLOCK(); - if (q->flags & EntityFlag_Disabled) { continue; } @@ -1984,21 +1982,18 @@ gb_internal void check_proc_group_decl(CheckerContext *ctx, Entity *pg_entity, D if (!both_have_where_clauses) switch (kind) { case ProcOverload_Identical: - error(p->token, "Overloaded procedure '%.*s' has the same type as another procedure in the procedure group '%.*s'", LIT(name), LIT(proc_group_name)); is_invalid = true; break; // case ProcOverload_CallingConvention: - // error(p->token, "Overloaded procedure '%.*s' has the same type as another procedure in the procedure group '%.*s'", LIT(name), LIT(proc_group_name)); // is_invalid = true; // break; case ProcOverload_ParamVariadic: - error(p->token, "Overloaded procedure '%.*s' has the same type as another procedure in the procedure group '%.*s'", LIT(name), LIT(proc_group_name)); is_invalid = true; break; case ProcOverload_ResultCount: case ProcOverload_ResultTypes: - error(p->token, "Overloaded procedure '%.*s' has the same parameters but different results in the procedure group '%.*s'", LIT(name), LIT(proc_group_name)); is_invalid = true; + different_results = true; break; case ProcOverload_Polymorphic: break; @@ -2011,6 +2006,13 @@ gb_internal void check_proc_group_decl(CheckerContext *ctx, Entity *pg_entity, D } if (is_invalid) { + // NOTE(bill): only now, as the error block is shared by every thread + ERROR_BLOCK(); + if (different_results) { + error(p->token, "Overloaded procedure '%.*s' has the same parameters but different results in the procedure group '%.*s'", LIT(name), LIT(proc_group_name)); + } else { + error(p->token, "Overloaded procedure '%.*s' has the same type as another procedure in the procedure group '%.*s'", LIT(name), LIT(proc_group_name)); + } error_line("\tprevious procedure at %s\n", token_pos_to_string(pos)); invalid[k] = true; } @@ -2177,16 +2179,25 @@ gb_internal void check_entity_decl(CheckerContext *ctx, Entity *e, DeclInfo *d, return; } defer (global_when_trial_end_entity(&trial_scope)); - bool is_lazy = (e->flags & EntityFlag_Lazy) != 0; - if (is_lazy) { - mutex_lock(&ctx->info->lazy_mutex); - if (e->state == EntityState_Resolved) { - // NOTE: another thread checked it whilst this one waited - mutex_unlock(&ctx->info->lazy_mutex); + + // NOTE(bill): checked by whichever thread claims it first; any other that needs it meanwhile waits for it + i32 owner = 0; + if (!e->checking_thread.compare_exchange_strong(owner, cast(i32)current_thread_index() + 1)) { + if (thread_wait_for_owner(&e->checking_thread, owner, owner)) { return; } - lazy_mutex_depth += 1; + // NOTE: this thread is checking it already, or the thread checking it waits for this one + error(e->token, "Illegal declaration cycle of `%.*s`", LIT(e->token.string)); + return; } + if (e->state == EntityState_Resolved) { + // NOTE: another thread finished it before this one claimed it + e->checking_thread.store(0); + futex_broadcast(&e->checking_thread); + return; + } + + bool is_lazy = (e->flags & EntityFlag_Lazy) != 0; GlobalEntityTimingFrame timing_frame = global_entity_timing_begin(e); String name = e->token.string; @@ -2290,20 +2301,20 @@ end:; global_entity_timing_end(timing_frame, e); // NOTE(bill): Add it to the list of checked entities if (is_lazy) { + mutex_lock(&ctx->info->lazy_mutex); array_add(&ctx->info->entities, e); - lazy_mutex_depth -= 1; mutex_unlock(&ctx->info->lazy_mutex); } + e->checking_thread.store(0); + futex_broadcast(&e->checking_thread); } -// A lazy entity is only ever in progress on the thread holding `lazy_mutex`, so taking it (it is -// recursive) waits out another thread and is a no-op on the thread that is checking it -gb_internal void wait_for_lazy_entity(CheckerContext *ctx, Entity *e) { - if ((e->flags & EntityFlag_Lazy) == 0 || e->state == EntityState_Resolved) { - return; +// An entity in progress on another thread is waited for, unless that thread waits for this one +gb_internal void wait_for_entity(Entity *e) { + i32 owner = e->checking_thread.load(); + if (owner != 0) { + thread_wait_for_owner(&e->checking_thread, owner, owner); } - mutex_lock(&ctx->info->lazy_mutex); - mutex_unlock(&ctx->info->lazy_mutex); } diff --git a/src/check_expr.cpp b/src/check_expr.cpp index f655b206e..50b59f0c1 100644 --- a/src/check_expr.cpp +++ b/src/check_expr.cpp @@ -955,7 +955,7 @@ gb_internal i64 check_distance_between_types(CheckerContext *c, Operand *operand } if (is_type_union(dst) && allow_unions) { - wait_signal_until_available(&dst->Union.variants_wait_signal); + wait_for_record_signal(&dst->Union.variants_wait_signal, &dst->Union.checking_thread); for (Type *vt : dst->Union.variants) { if (are_types_identical(vt, s)) { return 1; @@ -1713,7 +1713,7 @@ gb_internal Entity *check_ident(CheckerContext *c, Operand *o, Ast *n, Type *nam if (e->state == EntityState_Unresolved) { check_entity_decl(c, e, nullptr, named_type); } else { - wait_for_lazy_entity(c, e); + wait_for_entity(e); } switch (e->kind) { case Entity_Constant: @@ -5172,7 +5172,7 @@ gb_internal void convert_to_typed(CheckerContext *c, Operand *operand, Type *tar case Type_Union: if (!is_operand_nil(*operand) && !is_operand_uninit(*operand)) { TEMPORARY_ALLOCATOR_GUARD(); - wait_signal_until_available(&t->Union.variants_wait_signal); + wait_for_record_signal(&t->Union.variants_wait_signal, &t->Union.checking_thread); isize count = t->Union.variants.count; ValidIndexAndScore *valids = temporary_alloc_array(count); @@ -5205,9 +5205,6 @@ gb_internal void convert_to_typed(CheckerContext *c, Operand *operand, Type *tar first_success_index = valids[0].index; } - gbString type_str = type_to_string(target_type); - defer (gb_string_free(type_str)); - if (valid_count == 1) { Type *new_type = t->Union.variants[first_success_index]; if (operand->mode != Addressing_Constant || @@ -5219,6 +5216,8 @@ gb_internal void convert_to_typed(CheckerContext *c, Operand *operand, Type *tar break; } else if (valid_count > 1) { ERROR_BLOCK(); + gbString type_str = type_to_string(target_type); + defer (gb_string_free(type_str)); GB_ASSERT(first_success_index >= 0); convert_untyped_error(c, operand, target_type, true); @@ -5244,6 +5243,8 @@ gb_internal void convert_to_typed(CheckerContext *c, Operand *operand, Type *tar target_type = t_untyped_uninit; } else if (!is_type_untyped_nil(operand->type) || !type_has_nil(target_type)) { ERROR_BLOCK(); + gbString type_str = type_to_string(target_type); + defer (gb_string_free(type_str)); convert_untyped_error(c, operand, target_type, true); if (count > 0) { @@ -5746,7 +5747,7 @@ gb_internal Entity *check_entity_from_ident_or_selector(CheckerContext *c, Ast * } if (e != nullptr) { // its kind and type are read by the caller - wait_for_lazy_entity(c, e); + wait_for_entity(e); } return e; } else if (!ident_only) if (node->kind == Ast_SelectorExpr) { @@ -8834,9 +8835,7 @@ gb_internal CallArgumentError check_polymorphic_record_type(CheckerContext *c, O set_base_type(named_type, struct_type); check_open_scope(&ctx, node); - begin_filling_record(struct_type); check_struct_type(&ctx, struct_type, node, &ordered_operands, named_type, original_type, found_gen_types); - end_filling_record(struct_type); // check_struct_type released found_gen_types->mutex after publishing the instantiation. gen_types_locked = false; check_close_scope(&ctx); @@ -9745,7 +9744,7 @@ gb_internal bool attempt_implicit_selector_expr(CheckerContext *c, Operand *o, A TEMPORARY_ALLOCATOR_GUARD(); Type *union_type = base_type(th); - wait_signal_until_available(&union_type->Union.variants_wait_signal); + wait_for_record_signal(&union_type->Union.variants_wait_signal, &union_type->Union.checking_thread); auto operands = array_make(temporary_allocator(), 0, union_type->Union.variants.count); for (Type *vt : union_type->Union.variants) { @@ -11088,7 +11087,7 @@ gb_internal ExprKind check_compound_literal(CheckerContext *c, Operand *o, Ast * // If exactly one matches, retarget to that variant and let the normal path build it (the surrounding assignment then wraps it into the union). // Otherwise report a clear error. if (t->kind == Type_Union && cl->type == nullptr && cl->elems.count > 0) { - wait_signal_until_available(&t->Union.variants_wait_signal); + wait_for_record_signal(&t->Union.variants_wait_signal, &t->Union.checking_thread); auto matches = array_make(temporary_allocator(), 0, t->Union.variants.count); for (Type *variant : t->Union.variants) { Operand trial = {}; @@ -11156,7 +11155,7 @@ gb_internal ExprKind check_compound_literal(CheckerContext *c, Operand *o, Ast * break; } - wait_signal_until_available(&t->Struct.fields_wait_signal); + wait_for_record_signal(&t->Struct.fields_wait_signal, &t->Struct.checking_thread); isize field_count = t->Struct.fields.count; isize min_field_count = t->Struct.fields.count; for (isize i = min_field_count-1; i >= 0; i--) { @@ -12105,7 +12104,7 @@ gb_internal ExprKind check_type_assertion(CheckerContext *c, Operand *o, Ast *no Type *src = type_deref(o->type); Type *bsrc = base_type(src); if (bsrc->kind == Type_Union) { - wait_signal_until_available(&bsrc->Union.variants_wait_signal); + wait_for_record_signal(&bsrc->Union.variants_wait_signal, &bsrc->Union.checking_thread); } diff --git a/src/check_stmt.cpp b/src/check_stmt.cpp index dfb046da3..1a8d90a1e 100644 --- a/src/check_stmt.cpp +++ b/src/check_stmt.cpp @@ -849,7 +849,7 @@ gb_internal bool check_using_stmt_entity(CheckerContext *ctx, AstUsingStmt *us, bool is_ptr = is_type_pointer(e->type); Type *t = base_type(type_deref(e->type)); if (t->kind == Type_Struct) { - wait_signal_until_available(&t->Struct.fields_wait_signal); + wait_for_record_signal(&t->Struct.fields_wait_signal, &t->Struct.checking_thread); Scope *found = t->Struct.scope; GB_ASSERT(found != nullptr); @@ -1540,7 +1540,7 @@ gb_internal void check_type_switch_stmt(CheckerContext *ctx, Ast *node, u32 mod_ // TODO(bill): Make robust Type *bt = base_type(type_deref(x.type)); if (bt->kind == Type_Union) { - wait_signal_until_available(&bt->Union.variants_wait_signal); + wait_for_record_signal(&bt->Union.variants_wait_signal, &bt->Union.checking_thread); } Type *case_type = nullptr; diff --git a/src/check_type.cpp b/src/check_type.cpp index 247f52ea3..b7b525702 100644 --- a/src/check_type.cpp +++ b/src/check_type.cpp @@ -724,6 +724,9 @@ gb_internal void check_struct_type(CheckerContext *ctx, Type *struct_type, Ast * GB_ASSERT(is_type_struct(struct_type)); ast_node(st, StructType, node); + struct_type->Struct.checking_thread.store(cast(i32)current_thread_index() + 1); + defer (struct_type->Struct.checking_thread.store(0)); + String context = str_lit("struct"); isize min_field_count = 0; @@ -846,6 +849,9 @@ gb_internal void check_union_type(CheckerContext *ctx, Type *union_type, Ast *no GB_ASSERT(is_type_union(union_type)); ast_node(ut, UnionType, node); + union_type->Union.checking_thread.store(cast(i32)current_thread_index() + 1); + defer (union_type->Union.checking_thread.store(0)); + union_type->Union.node = node; union_type->Union.scope = ctx->scope; @@ -2254,8 +2260,8 @@ gb_internal SubstResult subst_unify(CheckerContext *c, Type *pattern, Type *sour pattern->Struct.is_packed != source->Struct.is_packed) { return Subst_Unhandled; } - wait_signal_until_available(&pattern->Struct.fields_wait_signal); - wait_signal_until_available(&source->Struct.fields_wait_signal); + wait_for_record_signal(&pattern->Struct.fields_wait_signal, &pattern->Struct.checking_thread); + wait_for_record_signal(&source->Struct.fields_wait_signal, &source->Struct.checking_thread); if (pattern->Struct.fields.count != source->Struct.fields.count) { return Subst_NoMatch; } @@ -4391,7 +4397,7 @@ gb_internal bool complete_soa_type(Checker *checker, Type *t, bool wait_to_finis GB_ASSERT(old_struct->kind == Type_Struct); if (wait_to_finish) { - wait_signal_until_available(&old_struct->Struct.fields_wait_signal); + wait_for_record_signal(&old_struct->Struct.fields_wait_signal, &old_struct->Struct.checking_thread); } else { GB_ASSERT(old_struct->Struct.fields_wait_signal.futex.load() != 0); } diff --git a/src/checker.cpp b/src/checker.cpp index 95961c8a1..ff59665ec 100644 --- a/src/checker.cpp +++ b/src/checker.cpp @@ -7537,8 +7537,12 @@ gb_internal void check_parsed_files(Checker *c) { array_sort(c->info.entities, init_procedures_cmp); TIME_SECTION("check all global entities"); + isize entity_count = c->info.entities.count; check_all_global_entities(c); + // NOTE(bill): lazy entities are added once checked, which with several threads is in no fixed order + gb_sort_array(c->info.entities.data + entity_count, c->info.entities.count - entity_count, init_procedures_cmp); + if (build_context.internal_global_entity_graph) { TIME_SECTION("print global entity graph"); print_global_groups(&global_groups); diff --git a/src/checker.hpp b/src/checker.hpp index 78f579c2d..52d43ad81 100644 --- a/src/checker.hpp +++ b/src/checker.hpp @@ -780,7 +780,7 @@ struct CheckerInfo { BlockingMutex type_and_value_mutex; - RecursiveMutex lazy_mutex; // Mutex required for lazy type checking of specific files + RecursiveMutex lazy_mutex; // for adding checked lazy entities to `entities` // BlockingMutex type_info_mutex; // NOT recursive @@ -970,7 +970,7 @@ struct GlobalEntityTimingFrame { }; gb_internal GlobalEntityTimingFrame global_entity_timing_begin(Entity *e); gb_internal void global_entity_timing_end(GlobalEntityTimingFrame const &f, Entity *e); -gb_internal void wait_for_lazy_entity(CheckerContext *c, Entity *e); +gb_internal void wait_for_entity(Entity *e); gb_internal Ast *remove_type_alias_clutter(Ast *node); gb_internal void check_const_decl(CheckerContext *c, Entity *e, Ast *type_expr, Ast *init_expr, Type *named_type); gb_internal void check_type_decl(CheckerContext *c, Entity *e, Ast *type_expr, Type *def); diff --git a/src/checker_global.cpp b/src/checker_global.cpp index fd8b51130..2ca4e0e27 100644 --- a/src/checker_global.cpp +++ b/src/checker_global.cpp @@ -749,27 +749,32 @@ gb_internal void global_graph_print_entity(Entity *e) { struct GlobalGroup { - i32 start; // into `GlobalGroupGraph::members` - i32 count; - bool done; + i32 start; // into `GlobalGroupGraph::members` + i32 count; + std::atomic done; }; struct GlobalGroupGraph { Array nodes; PtrMap node_of; - Array offsets; // node -> the nodes it names, as `targets[offsets[v]..offsets[v+1]]` + Array offsets; // node -> the nodes it names, as `targets[offsets[v].. targets; Array group_of; - Array groups; // every dependency of a group has a lower index - Array members; // nodes, by group, in source order + Array groups; // every dependency of a group has a lower index + Array members; // nodes by group in source order - bool active; - i32 current_group; - Entity *current_entity; - isize missing_edges; + Array dependent_offsets; // group -> the groups that depend on it as `dependents[dependent_offsets[gi].. dependents; + std::atomic * pending; // per group its dependencies not yet done + + Checker * checker; + bool active; + std::atomic missing_edges; }; gb_global GlobalGroupGraph global_groups; +gb_global gb_thread_local i32 global_group_current = -1; +gb_global gb_thread_local Entity * global_group_current_entity; struct GlobalPlaceholderHit { Scope * scope; @@ -1268,7 +1273,9 @@ gb_internal void build_global_groups(Checker *c, GlobalGroupGraph *g) { array_init(&g->groups, heap_allocator(), group_count); array_init(&g->members, heap_allocator(), node_count); for (i32 gi = 0; gi < group_count; gi++) { - g->groups[gi] = {}; + g->groups[gi].start = 0; + g->groups[gi].count = 0; + g->groups[gi].done.store(false); } for (i32 v = 0; v < node_count; v++) { g->groups[g->group_of[v]].count += 1; @@ -1299,7 +1306,7 @@ gb_internal void global_group_check_edge(CheckerContext *ctx, Entity *e) { } } else { i32 gi = g->group_of[*v]; - if (gi == g->current_group || g->groups[gi].done) { + if (gi == global_group_current || g->groups[gi].done.load()) { return; } } @@ -1312,9 +1319,9 @@ gb_internal void global_group_check_edge(CheckerContext *ctx, Entity *e) { gb_printf_err(" needs "); global_graph_print_entity(e); gb_printf_err(v == nullptr ? ", which is not in the graph" : ""); - if (g->current_entity != by) { + if (global_group_current_entity != by) { gb_printf_err(", while checking "); - global_graph_print_entity(g->current_entity); + global_graph_print_entity(global_group_current_entity); } gb_printf_err("\n"); } @@ -1331,14 +1338,14 @@ gb_internal void check_global_group(Checker *c, GlobalGroupGraph *g, i32 gi) { auto soa_types = array_make(heap_allocator()); global_group_soa_types = &soa_types; - g->current_group = gi; + global_group_current = gi; for (i32 k = 0; k < group->count; k++) { Entity *e = g->nodes[members[k]]; if (e->flags & EntityFlag_Lazy) { // NOTE: only checked when something uses it; the group orders it after what it names continue; } - g->current_entity = e; + global_group_current_entity = e; GlobalEntityTimingFrame timing_frame = global_entity_timing_begin(e); check_single_global_entity(c, e, e->decl_info, &untyped); if (e->type != nullptr && is_type_typed(e->type)) { @@ -1361,41 +1368,24 @@ gb_internal void check_global_group(Checker *c, GlobalGroupGraph *g, i32 gi) { add_untyped_expressions(&c->info, &untyped); map_destroy(&untyped); - group->done = true; - g->current_group = -1; - g->current_entity = nullptr; + group->done.store(true); + global_group_current = -1; + global_group_current_entity = nullptr; } -// Groups in dependency order; with `-internal-shuffle-global-entities`, a random one of the groups whose -// dependencies are done, as a parallel checker might -gb_internal void check_global_groups(Checker *c, GlobalGroupGraph *g) { +gb_internal void build_global_group_dependents(GlobalGroupGraph *g) { i32 group_count = cast(i32)g->groups.count; - u64 seed = build_context.internal_shuffle_global_entities; - if (seed == 0) { - for (i32 gi = 0; gi < group_count; gi++) { - check_global_group(c, g, gi); - } - return; - } - - auto dependents = array_make >(heap_allocator(), group_count); - auto dep_count = array_make (heap_allocator(), group_count); - auto seen = array_make (heap_allocator(), group_count); - auto ready = array_make (heap_allocator(), 0, group_count); - defer ({ - for (auto &d : dependents) { - array_free(&d); - } - array_free(&dependents); - }); - defer (array_free(&dep_count)); + auto edge_from = array_make(heap_allocator(), 0, group_count); + auto edge_to = array_make(heap_allocator(), 0, group_count); + auto seen = array_make(heap_allocator(), group_count); + defer (array_free(&edge_from)); + defer (array_free(&edge_to)); defer (array_free(&seen)); - defer (array_free(&ready)); + g->pending = gb_alloc_array(heap_allocator(), std::atomic, group_count); for (i32 gi = 0; gi < group_count; gi++) { - dep_count[gi] = 0; - dependents[gi] = {}; seen[gi] = -1; + g->pending[gi].store(0); } for (i32 gi = 0; gi < group_count; gi++) { GlobalGroup const &group = g->groups[gi]; @@ -1405,36 +1395,79 @@ gb_internal void check_global_groups(Checker *c, GlobalGroupGraph *g) { i32 dep = g->group_of[g->targets[i]]; if (dep != gi && seen[dep] != gi) { seen[dep] = gi; - dep_count[gi] += 1; - if (dependents[dep].allocator.proc == nullptr) { - array_init(&dependents[dep], heap_allocator()); - } - array_add(&dependents[dep], gi); + array_add(&edge_from, dep); + array_add(&edge_to, gi); + g->pending[gi].fetch_add(1); } } } - if (dep_count[gi] == 0) { + } + global_graph_csr(group_count, edge_from, edge_to, &g->dependent_offsets, &g->dependents); +} + +gb_internal void check_global_group_and_release(GlobalGroupGraph *g, i32 gi, Array *ready); + +gb_internal WORKER_TASK_PROC(check_global_group_worker) { + check_global_group_and_release(&global_groups, cast(i32)cast(intptr)data, nullptr); + return 0; +} + +gb_internal void check_global_group_and_release(GlobalGroupGraph *g, i32 gi, Array *ready) { + check_global_group(g->checker, g, gi); + for (i32 i = g->dependent_offsets[gi]; i < g->dependent_offsets[gi+1]; i++) { + i32 next = g->dependents[i]; + if (g->pending[next].fetch_sub(1) == 1) { + if (ready != nullptr) { + array_add(ready, next); + } else { + thread_pool_add_task(check_global_group_worker, cast(void *)cast(intptr)next); + } + } + } +} + +gb_internal void check_global_groups(Checker *c, GlobalGroupGraph *g) { + i32 group_count = cast(i32)g->groups.count; + u64 seed = build_context.internal_shuffle_global_entities; + g->checker = c; + + if (seed == 0 && (build_context.thread_count <= 1 || build_context.no_threaded_checker)) { + for (i32 gi = 0; gi < group_count; gi++) { + check_global_group(c, g, gi); + } + return; + } + + build_global_group_dependents(g); + + // NOTE: all found before any is checked, as checking one releases others + auto ready = array_make(heap_allocator(), 0, group_count); + defer (array_free(&ready)); + for (i32 gi = 0; gi < group_count; gi++) { + if (g->pending[gi].load() == 0) { array_add(&ready, gi); } } - u64 state = seed; - isize checked = 0; - while (ready.count > 0) { - isize i = cast(isize)(global_group_random(&state) % cast(u64)ready.count); - i32 gi = ready[i]; - ready[i] = ready[ready.count-1]; - array_pop(&ready); - - check_global_group(c, g, gi); - checked += 1; - for (i32 next : dependents[gi]) { - if (--dep_count[next] == 0) { - array_add(&ready, next); - } + if (seed == 0) { + for (i32 gi : ready) { + thread_pool_add_task(check_global_group_worker, cast(void *)cast(intptr)gi); + } + thread_pool_wait(); + } else { + u64 state = seed; + while (ready.count > 0) { + isize i = cast(isize)(global_group_random(&state) % cast(u64)ready.count); + i32 gi = ready[i]; + ready[i] = ready[ready.count-1]; + array_pop(&ready); + check_global_group_and_release(g, gi, &ready); } } - GB_ASSERT(checked == group_count); + + for (i32 gi = 0; gi < group_count; gi++) { + GB_ASSERT(g->groups[gi].done.load()); + } } gb_internal void destroy_global_groups(GlobalGroupGraph *g) { @@ -1445,6 +1478,12 @@ gb_internal void destroy_global_groups(GlobalGroupGraph *g) { array_free(&g->group_of); array_free(&g->groups); array_free(&g->members); + array_free(&g->dependent_offsets); + array_free(&g->dependents); + if (g->pending != nullptr) { + gb_free(heap_allocator(), g->pending); + g->pending = nullptr; + } } gb_internal void check_all_global_entities(Checker *c) { @@ -1470,12 +1509,11 @@ gb_internal void check_all_global_entities(Checker *c) { TIME_SECTION("check all global entities - check groups"); g->active = true; - g->current_group = -1; check_global_groups(c, g); g->active = false; - if (build_context.internal_check_global_edges && g->missing_edges > 0) { - gb_printf_err("%td missing global dependencies\n", g->missing_edges); + if (build_context.internal_check_global_edges && g->missing_edges.load() > 0) { + gb_printf_err("%td missing global dependencies\n", g->missing_edges.load()); gb_exit(1); } @@ -2217,7 +2255,7 @@ gb_internal void print_global_groups(GlobalGroupGraph *g) { f64 critical_ms = critical >= 0 ? global_graph_ms(path[critical], freq) : 0; gb_printf_err("Global entity groups\n"); - gb_printf_err(" entities: %td (%td not timed), dependency edges: %td, missing edges: %td\n", g->nodes.count, untimed, g->targets.count, g->missing_edges); + gb_printf_err(" entities: %td (%td not timed), dependency edges: %td, missing edges: %td\n", g->nodes.count, untimed, g->targets.count, g->missing_edges.load()); gb_printf_err(" self time: %.3f ms in the groups, %.3f ms during 'when' resolution\n", total_ms, global_graph_ms(when_ticks, freq)); gb_printf_err(" groups: %d (%td with a cycle), largest has %d entities\n", group_count, cyclic, largest >= 0 ? g->groups[largest].count : 0); gb_printf_err(" critical path: %.3f ms over %d groups -> at most %.2fx speedup\n", diff --git a/src/entity.cpp b/src/entity.cpp index 845e2b910..4a7800450 100644 --- a/src/entity.cpp +++ b/src/entity.cpp @@ -210,6 +210,7 @@ struct Entity { u64 id; std::atomic flags; std::atomic state; + Futex checking_thread; // 1 + the index of the thread in `check_entity_decl` for it, else 0 std::atomic min_dep_count; Token token; Scope * scope; diff --git a/src/thread_pool.cpp b/src/thread_pool.cpp index 0ffce8046..b62811a5a 100644 --- a/src/thread_pool.cpp +++ b/src/thread_pool.cpp @@ -174,6 +174,47 @@ gb_internal bool thread_pool_add_task(ThreadPool *pool, WorkerTaskProc *proc, vo return true; } +gb_internal bool thread_wait_for_owner(Futex *futex, Footex value, i32 owner) { + if (futex->load() != value) { + return true; + } + Thread *self = current_thread; + if (self != nullptr && owner > 0) { + i32 me = cast(i32)self->idx + 1; + if (owner == me) { + return false; + } + self->waiting_futex.store(futex); + self->waiting_value.store(value); + self->waiting_for.store(owner); + + // NOTE(bill): a thread counts as waiting only while what it waits on is unchanged + // when it clears its own `waiting_for` only once it has woken + Slice threads = self->pool->threads; + i32 t = owner; + for (isize i = 0; i <= threads.count; i++) { + if (t == me) { + self->waiting_for.store(0); + return false; + } + Thread *other = &threads[t-1]; + i32 next = other->waiting_for.load(); + Futex *f = other->waiting_futex.load(); + if (next == 0 || f == nullptr || f->load() != other->waiting_value.load()) { + break; + } + t = next; + } + } + while (futex->load() == value) { + futex_wait(futex, value); + } + if (self != nullptr) { + self->waiting_for.store(0); + } + return true; +} + gb_internal void thread_pool_wait(ThreadPool *pool) { WorkerTask task; diff --git a/src/threading.cpp b/src/threading.cpp index 524c70e29..28882ea24 100644 --- a/src/threading.cpp +++ b/src/threading.cpp @@ -73,6 +73,10 @@ struct Thread { struct Arena *permanent_arena; struct Arena *temporary_arena; + + std::atomic *> waiting_futex; + std::atomic waiting_value; + std::atomic waiting_for; }; typedef std::atomic Futex; diff --git a/src/types.cpp b/src/types.cpp index aad687ac7..129a5afd1 100644 --- a/src/types.cpp +++ b/src/types.cpp @@ -155,6 +155,7 @@ struct TypeStruct { i32 soa_count; StructSoaKind soa_kind; Wait_Signal fields_wait_signal; + Futex checking_thread; // 1 + the index of the thread in `check_struct_type` for it, else 0 BlockingMutex soa_mutex; BlockingMutex offset_mutex; // for settings offsets @@ -181,6 +182,7 @@ struct TypeUnion { Type * polymorphic_parent; Wait_Signal polymorphic_wait_signal; Wait_Signal variants_wait_signal; // signalled once `variants` is populated (mirrors TypeStruct.fields_wait_signal) + Futex checking_thread; // 1 + the index of the thread in `check_union_type` for it, else 0 std::atomic tag_size; bool is_polymorphic; @@ -413,6 +415,7 @@ gb_internal bool is_type_simple_compare(Type *t); gb_internal Type *type_deref(Type *t, bool allow_multi_pointer=false); gb_internal Type *base_type(Type *t); gb_internal Type *alloc_type_multi_pointer(Type *elem); +gb_internal void wait_for_record_signal(Wait_Signal *signal, Futex *checking_thread); gb_internal u32 type_info_flags_of_type(Type *type) { if (type == nullptr) { @@ -2477,13 +2480,13 @@ gb_internal TypeTuple *get_record_polymorphic_params(Type *t) { t = base_type(t); switch (t->kind) { case Type_Struct: - wait_signal_until_available(&t->Struct.polymorphic_wait_signal); + wait_for_record_signal(&t->Struct.polymorphic_wait_signal, &t->Struct.checking_thread); if (t->Struct.polymorphic_params) { return &t->Struct.polymorphic_params->Tuple; } break; case Type_Union: - wait_signal_until_available(&t->Union.polymorphic_wait_signal); + wait_for_record_signal(&t->Union.polymorphic_wait_signal, &t->Union.checking_thread); if (t->Union.polymorphic_params) { return &t->Union.polymorphic_params->Tuple; } @@ -3560,7 +3563,7 @@ gb_internal bool union_variant_index_types_equal(Type *v, Type *vt) { gb_internal i64 union_variant_index_checked(Type *u, Type *v) { u = base_type(u); GB_ASSERT(u->kind == Type_Union); - wait_signal_until_available(&u->Union.variants_wait_signal); + wait_for_record_signal(&u->Union.variants_wait_signal, &u->Union.checking_thread); for_array(i, u->Union.variants) { Type *vt = u->Union.variants[i]; @@ -3579,7 +3582,7 @@ gb_internal i64 union_variant_index_checked(Type *u, Type *v) { gb_internal bool union_is_variant_of(Type *u, Type *v) { u = base_type(u); GB_ASSERT(u->kind == Type_Union); - wait_signal_until_available(&u->Union.variants_wait_signal); + wait_for_record_signal(&u->Union.variants_wait_signal, &u->Union.checking_thread); for_array(i, u->Union.variants) { Type *vt = u->Union.variants[i]; @@ -3770,7 +3773,7 @@ gb_internal Selection lookup_field_from_index(Type *type, i64 index) { isize max_count = 0; switch (type->kind) { case Type_Struct: - wait_signal_until_available(&type->Struct.fields_wait_signal); + wait_for_record_signal(&type->Struct.fields_wait_signal, &type->Struct.checking_thread); max_count = type->Struct.fields.count; break; case Type_Tuple: max_count = type->Tuple.variables.count; break; @@ -3782,7 +3785,7 @@ gb_internal Selection lookup_field_from_index(Type *type, i64 index) { switch (type->kind) { case Type_Struct: { - wait_signal_until_available(&type->Struct.fields_wait_signal); + wait_for_record_signal(&type->Struct.fields_wait_signal, &type->Struct.checking_thread); for (isize i = 0; i < max_count; i++) { Entity *f = type->Struct.fields[i]; if (f->kind == Entity_Variable) { @@ -3951,7 +3954,7 @@ gb_internal Selection lookup_field_with_selection(Type *type_, InternedString fi // NOTE(bill): A polymorphic struct has no fields, this only hits in the case of an error return sel; } - wait_signal_until_available(&type->Struct.fields_wait_signal); + wait_for_record_signal(&type->Struct.fields_wait_signal, &type->Struct.checking_thread); isize field_count = type->Struct.fields.count; if (field_count != 0) for_array(i, type->Struct.fields) { Entity *f = type->Struct.fields[i]; @@ -4421,33 +4424,16 @@ gb_internal i64 type_target_max_align(void) { return max_align; } -// Polymorphic record instances being filled by this thread, which another may already have found in the cache -gb_internal gb_thread_local Array records_being_filled; - -gb_internal void begin_filling_record(Type *t) { - if (records_being_filled.allocator.proc == nullptr) { - array_init(&records_being_filled, heap_allocator()); +gb_internal void wait_for_record_signal(Wait_Signal *signal, Futex *checking_thread) { + if (signal->futex.load() == 0) { + thread_wait_for_owner(&signal->futex, 0, checking_thread->load()); } - array_add(&records_being_filled, t); } -gb_internal void end_filling_record(Type *t) { - GB_ASSERT(records_being_filled.count > 0 && records_being_filled[records_being_filled.count-1] == t); - array_pop(&records_being_filled); -} - -gb_internal gb_thread_local i32 lazy_mutex_depth; - gb_internal void wait_for_struct_fields(Type *t) { - if (t->Struct.polymorphic_parent == nullptr || t->Struct.fields_wait_signal.futex.load() != 0 || lazy_mutex_depth > 0) { - return; + if (t->Struct.polymorphic_parent != nullptr) { + wait_for_record_signal(&t->Struct.fields_wait_signal, &t->Struct.checking_thread); } - for (Type *r : records_being_filled) { - if (r == t) { - return; - } - } - wait_signal_until_available(&t->Struct.fields_wait_signal); } gb_internal i64 type_align_of_internal(Type *t, TypePath *path) { diff --git a/tests/issues/run.bat b/tests/issues/run.bat index b5b90339c..28fee09f4 100644 --- a/tests/issues/run.bat +++ b/tests/issues/run.bat @@ -61,6 +61,7 @@ set COMMON=-define:ODIN_TEST_FANCY=false -file -vet -strict-style -ignore-unused ..\..\..\odin check ..\test_issue_7336.odin -no-entry-point %COMMON% || exit /b ..\..\..\odin check ..\test_issue_ellipsis_type_call.odin -no-entry-point %COMMON% 2>&1 | find /c "Error:" | findstr /x "10" || exit /b ..\..\..\odin check ..\test_issue_foreign_redeclaration.odin -no-entry-point %COMMON% || exit /b +..\..\..\odin check ..\test_issue_foreign_import_attributes.odin -no-entry-point %COMMON% || exit /b ..\..\..\odin check ..\test_issue_foreign_redeclaration_mismatch.odin -no-entry-point %COMMON% 2>&1 | find /c "Error:" | findstr /x "1" || exit /b ..\..\..\odin doc ..\test_issue_asm_doc_category.odin -file 2>&1 | find /c "asm templates" | findstr /x "1" || exit /b ..\..\..\odin build ..\test_issue_7037.odin %COMMON% -o:none || exit /b @@ -77,6 +78,7 @@ clang -c ..\test_issue_sysv_abi.c -o test_issue_sysv_abi_c.o || exit /b ..\..\..\odin run ..\test_issue_7482.odin %COMMON% || exit /b ..\..\..\odin run ..\test_issue_7562.odin %COMMON% -no-crt -no-thread-local || exit /b ..\..\..\odin run ..\test_issue_7562.odin %COMMON% -no-crt -no-thread-local -o:speed || exit /b +..\..\..\odin test ..\test_issue_7566.odin %COMMON% || exit /b ..\..\..\odin test ..\test_issue_7587.odin %COMMON% || exit /b ..\..\..\odin run ..\test_issue_7596.odin %COMMON% || exit /b diff --git a/tests/issues/run.sh b/tests/issues/run.sh index 8bc063be0..209d2923d 100755 --- a/tests/issues/run.sh +++ b/tests/issues/run.sh @@ -101,6 +101,7 @@ $ODIN check ../test_issue_7012.odin -no-entry-point $COMMON_CHECK $ODIN build ../test_issue_7037.odin $COMMON -o:none $ODIN run ../test_issue_7482.odin $COMMON $ODIN run ../test_issue_7564.odin $COMMON +$ODIN test ../test_issue_7566.odin $COMMON $ODIN test ../test_issue_7587.odin $COMMON $ODIN run ../test_issue_7596.odin $COMMON $ODIN test ../test_issue_7421.odin $COMMON @@ -151,6 +152,7 @@ else fi $ODIN check ../test_issue_foreign_redeclaration.odin -no-entry-point $COMMON_CHECK +$ODIN check ../test_issue_foreign_import_attributes.odin -no-entry-point $COMMON_CHECK if [[ $($ODIN check ../test_issue_foreign_redeclaration_mismatch.odin -no-entry-point $COMMON_CHECK 2>&1 >/dev/null | grep -c "Error:") -eq 1 ]]; then echo "SUCCESSFUL 1/1" else diff --git a/tests/issues/test_issue_7566.odin b/tests/issues/test_issue_7566.odin new file mode 100644 index 000000000..3bbef41e7 --- /dev/null +++ b/tests/issues/test_issue_7566.odin @@ -0,0 +1,36 @@ +// Tests issue #7566 https://github.com/odin-lang/Odin/issues/7566 +// Polymorphic instances whose constant parameters are spelt the same but have different values +package test_issues + +import "core:testing" + +Dim :: enum{ C, F } +Dims :: [Dim]int +Arr2 :: [2][2]int + +get_dims :: proc($dims: Dims) -> Dims { return dims } +get_arr2 :: proc($a: Arr2) -> Arr2 { return a } + +make_and_check :: proc($A, $I: int) -> Dims { + dims :: Dims{.C = I, .F = A} + return get_dims(dims) +} + +make_inline :: proc($A, $I: int) -> Dims { + return get_dims(Dims{.C = I, .F = A}) +} + +make_nested :: proc($A: int) -> Arr2 { + a :: Arr2{{A, 1}, {2, A}} + return get_arr2(a) +} + +@(test) +test_issue_7566 :: proc(t: ^testing.T) { + testing.expect_value(t, make_and_check(2, 2), Dims{.C = 2, .F = 2}) + testing.expect_value(t, make_and_check(3, 3), Dims{.C = 3, .F = 3}) + testing.expect_value(t, make_inline(4, 5), Dims{.C = 5, .F = 4}) + testing.expect_value(t, make_inline(6, 7), Dims{.C = 7, .F = 6}) + testing.expect_value(t, make_nested(8), Arr2{{8, 1}, {2, 8}}) + testing.expect_value(t, make_nested(9), Arr2{{9, 1}, {2, 9}}) +} diff --git a/tests/issues/test_issue_foreign_import_attributes.odin b/tests/issues/test_issue_foreign_import_attributes.odin new file mode 100644 index 000000000..d7dd1cb80 --- /dev/null +++ b/tests/issues/test_issue_foreign_import_attributes.odin @@ -0,0 +1,13 @@ +// 'foreign import' attributes may name constants declared after them +package test_issues + +@(priority_index=PRIORITY, extra_linker_flags=FLAGS) +foreign import lib "system:foo" + +foreign lib { + foo :: proc "c" () --- +} + +PRIORITY :: LATER + 1 +FLAGS :: "-L." +LATER :: 1 diff --git a/tests/issues/test_issue_global_when_cycle_accepted.odin b/tests/issues/test_issue_global_when_cycle_accepted.odin new file mode 100644 index 000000000..5d4b1e2a1 --- /dev/null +++ b/tests/issues/test_issue_global_when_cycle_accepted.odin @@ -0,0 +1,28 @@ +// Cycles of global 'when's with exactly one consistent choice of branches +package test_issues + +import "core:testing" + +// only the first branch of the second 'when' is consistent, so `int` stays the builtin +when size_of(int) == 8 { Y :: 1 } +when Y == 1 { Z :: 1 } else { int :: i32 } + +// through an unconditional declaration, whose value is checked for each choice +SIZE :: size_of(uint) +when SIZE == 8 { V :: 1 } +when V == 1 { W :: 2 } else { uint :: u32 } + +// nested and 'else when' branches +when size_of(rawptr) == 8 { + when true { N :: 1 } +} +when N != 1 { rawptr :: u32 } else when N == 1 { M :: 3 } else { rawptr :: u16 } + +@(test) +test_global_when_cycle_accepted :: proc(t: ^testing.T) { + testing.expect_value(t, Z, 1) + testing.expect_value(t, size_of(int), 8) + testing.expect_value(t, SIZE, 8) + testing.expect_value(t, W, 2) + testing.expect_value(t, M, 3) +} diff --git a/tests/issues/test_issue_global_when_cycle_ambiguous.odin b/tests/issues/test_issue_global_when_cycle_ambiguous.odin new file mode 100644 index 000000000..90ebb69db --- /dev/null +++ b/tests/issues/test_issue_global_when_cycle_ambiguous.odin @@ -0,0 +1,5 @@ +// A cycle of global 'when's with two consistent choices of branches, which is an error +package test_issues + +when size_of(int) == 8 { uint :: u32 } +when size_of(uint) == 8 { int :: i32 } From f01284d372e8588dd4f670b8f0fa63e198b0b2f2 Mon Sep 17 00:00:00 2001 From: Arthur031221 Date: Fri, 2 Oct 2026 14:10:58 +0800 Subject: [PATCH 133/215] [core:encoding/csv] Read the final multiline record before EOF The multiline line reader returned EOF with buffered data, so record parsing discarded the last row when the file had no trailing newline. Clear EOF while data remains, as the normal line reader does. Add regressions for final records, empty input and unterminated quotes. The normal core suite passes 627 tests with the new CSV tests included. --- core/encoding/csv/reader.odin | 3 + tests/core/encoding/csv/test_core_csv.odin | 71 ++++++++++++++++++++++ tests/core/normal.odin | 1 + 3 files changed, 75 insertions(+) create mode 100644 tests/core/encoding/csv/test_core_csv.odin diff --git a/core/encoding/csv/reader.odin b/core/encoding/csv/reader.odin index 577ef219d..bfc4ec823 100644 --- a/core/encoding/csv/reader.odin +++ b/core/encoding/csv/reader.odin @@ -297,6 +297,9 @@ _read_record :: proc(r: ^Reader, dst: ^[dynamic]string, allocator := context.all append(&r.raw_buffer, ..rune_buf[:rune_len]) } + if err == .EOF && len(r.raw_buffer) > 0 { + err = nil + } return r.raw_buffer[:], err } unreachable() diff --git a/tests/core/encoding/csv/test_core_csv.odin b/tests/core/encoding/csv/test_core_csv.odin new file mode 100644 index 000000000..7cae4d1bc --- /dev/null +++ b/tests/core/encoding/csv/test_core_csv.odin @@ -0,0 +1,71 @@ +package test_core_csv + +import "core:encoding/csv" +import "core:testing" + +@(test) +read_final_record :: proc(t: ^testing.T) { + cases := []struct { + input: string, + last: [2]string, + }{ + {"first,second\nthird,fourth", {"third", "fourth"}}, + {"first,second\nthird,fourth\n", {"third", "fourth"}}, + {"first,second\r\nthird,fourth\r\n", {"third", "fourth"}}, + {"first,second\n\"third\nfourth\",last", {"third\nfourth", "last"}}, + {"first,second\n\"\",last", {"", "last"}}, + } + + for c in cases { + for multiline in ([2]bool{false, true}) { + r := csv.Reader{ + multiline_fields = multiline, + reuse_record = true, + reuse_record_buffer = true, + } + csv.reader_init_with_string(&r, c.input) + defer csv.reader_destroy(&r) + + record, err := csv.read(&r) + testing.expect_value(t, err, nil) + if testing.expect_value(t, len(record), 2) { + testing.expect_value(t, record[0], "first") + testing.expect_value(t, record[1], "second") + } + + record, err = csv.read(&r) + testing.expectf(t, err == nil, "input %q, multiline %v: %v", c.input, multiline, err) + if testing.expect_value(t, len(record), 2) { + testing.expect_value(t, record[0], c.last[0]) + testing.expect_value(t, record[1], c.last[1]) + } + + record, err = csv.read(&r) + testing.expect(t, csv.is_io_error(err, .EOF)) + testing.expect_value(t, len(record), 0) + } + } +} + +@(test) +read_empty_multiline_input :: proc(t: ^testing.T) { + r := csv.Reader{multiline_fields = true} + csv.reader_init_with_string(&r, "") + defer csv.reader_destroy(&r) + + record, err := csv.read(&r) + testing.expect(t, csv.is_io_error(err, .EOF)) + testing.expect_value(t, len(record), 0) +} + +@(test) +read_unterminated_multiline_quote :: proc(t: ^testing.T) { + r := csv.Reader{multiline_fields = true, reuse_record = true, reuse_record_buffer = true} + csv.reader_init_with_string(&r, "\"unfinished") + defer csv.reader_destroy(&r) + + _, err := csv.read(&r) + if reader_err, ok := err.(csv.Reader_Error); testing.expect(t, ok) { + testing.expect_value(t, reader_err.kind, csv.Reader_Error_Kind.Quote) + } +} diff --git a/tests/core/normal.odin b/tests/core/normal.odin index a6b193651..e3c771db6 100644 --- a/tests/core/normal.odin +++ b/tests/core/normal.odin @@ -18,6 +18,7 @@ download_assets :: proc "contextless" () { @(require) import "encoding/base32" @(require) import "encoding/base64" @(require) import "encoding/cbor" +@(require) import "encoding/csv" @(require) import "encoding/hex" @(require) import "encoding/hxa" @(require) import "encoding/ini" From 0de3f92449a1d4bfbd4845ac91e370866ca16f64 Mon Sep 17 00:00:00 2001 From: gingerBill Date: Fri, 2 Oct 2026 11:24:28 +0100 Subject: [PATCH 134/215] Thread pool: wake one sleeping worker per task instead of all, spin briefly before sleeping; walk the procedure dependency tree in chunks --- src/checker.cpp | 39 +++++++++------ src/thread_pool.cpp | 118 +++++++++++++++++++++++++------------------- 2 files changed, 92 insertions(+), 65 deletions(-) diff --git a/src/checker.cpp b/src/checker.cpp index ff59665ec..bd92cad9e 100644 --- a/src/checker.cpp +++ b/src/checker.cpp @@ -7371,8 +7371,6 @@ gb_internal void check_update_dependency_tree_for_procedures(Checker *c) { } } #else -gb_internal void check_walk_all_dependencies(DeclInfo *decl); - // NOTE: post-order, so a declaration has the dependencies of all those nested in it before they are added to its parent gb_internal void check_walk_all_dependencies_post_order(DeclInfo *decl) { for (DeclInfo *child = decl->next_child; child != nullptr; child = child->next_sibling) { @@ -7381,30 +7379,41 @@ gb_internal void check_walk_all_dependencies_post_order(DeclInfo *decl) { add_deps_from_child_to_parent(decl); } +// NOTE(bill): in chunks, as with a task for each entity, adding the tasks was most of the work +struct CheckWalkDependenciesChunk { + DeclInfo **decls; // either these + Entity ** entities; // or the declarations of these + isize count; +}; + gb_internal WORKER_TASK_PROC(check_walk_all_dependencies_worker_proc) { - if (data != nullptr) { - check_walk_all_dependencies_post_order(cast(DeclInfo *)data); + CheckWalkDependenciesChunk *chunk = cast(CheckWalkDependenciesChunk *)data; + for (isize i = 0; i < chunk->count; i++) { + DeclInfo *decl = chunk->decls != nullptr ? chunk->decls[i] : chunk->entities[i]->decl_info; + if (decl != nullptr) { + check_walk_all_dependencies_post_order(decl); + } } return 0; } -gb_internal void check_walk_all_dependencies(DeclInfo *decl) { - if (decl != nullptr) { - thread_pool_add_task(check_walk_all_dependencies_worker_proc, decl); - } -} - gb_internal void check_update_dependency_tree_for_procedures(Checker *c) { + isize const CHUNK_SIZE = 256; + auto chunks = array_make(heap_allocator(), 0, c->info.entities.count/CHUNK_SIZE + 16); + defer (array_free(&chunks)); + mutex_lock(&c->nested_proc_lits_mutex); - for (DeclInfo *decl : c->nested_proc_lits) { - check_walk_all_dependencies(decl); + for (isize i = 0; i < c->nested_proc_lits.count; i += CHUNK_SIZE) { + array_add(&chunks, CheckWalkDependenciesChunk{c->nested_proc_lits.data + i, nullptr, gb_min(CHUNK_SIZE, c->nested_proc_lits.count - i)}); } mutex_unlock(&c->nested_proc_lits_mutex); - for (Entity *e : c->info.entities) { - DeclInfo *decl = e->decl_info; - check_walk_all_dependencies(decl); + for (isize i = 0; i < c->info.entities.count; i += CHUNK_SIZE) { + array_add(&chunks, CheckWalkDependenciesChunk{nullptr, c->info.entities.data + i, gb_min(CHUNK_SIZE, c->info.entities.count - i)}); } + for (CheckWalkDependenciesChunk &chunk : chunks) { + thread_pool_add_task(check_walk_all_dependencies_worker_proc, &chunk); + } thread_pool_wait(); } #endif diff --git a/src/thread_pool.cpp b/src/thread_pool.cpp index b62811a5a..0f1e59c93 100644 --- a/src/thread_pool.cpp +++ b/src/thread_pool.cpp @@ -29,20 +29,20 @@ enum GrabState { Grab_Failed = 2, }; -enum BroadcastWaitState { - Nobody_Waiting = 0, - Someone_Waiting = 1, -}; - struct ThreadPool { gbAllocator threads_allocator; Slice threads; std::atomic running; - Futex tasks_available; - Futex tasks_left; + Futex tasks_available; // bumped to wake a sleeping worker + std::atomic sleeping; // workers asleep on `tasks_available`, or about to be + Futex tasks_left; }; +// NOTE(bill): how many times an idle worker looks for a task before sleeping, so one adding small tasks +// one after another keeps the workers busy rather than waking one for each +enum { THREAD_POOL_SPIN_COUNT = 64 }; + gb_internal isize current_thread_index(void) { return current_thread ? current_thread->idx : 0; } @@ -69,8 +69,8 @@ gb_internal void thread_pool_destroy(ThreadPool *pool) { for_array_off(i, 1, pool->threads) { Thread *t = &pool->threads[i]; - pool->tasks_available.store(Nobody_Waiting); - futex_broadcast(&t->pool->tasks_available); + pool->tasks_available.fetch_add(1); + futex_broadcast(&pool->tasks_available); thread_join_and_destroy(t); } @@ -103,9 +103,13 @@ void thread_pool_queue_push(Thread *thread, WorkerTask task) { thread->queue.bottom.store(bot + 1, std::memory_order_relaxed); thread->pool->tasks_left.fetch_add(1, std::memory_order_release); - i32 state = Someone_Waiting; - if (thread->pool->tasks_available.compare_exchange_strong(state, Nobody_Waiting)) { - futex_broadcast(&thread->pool->tasks_available); + + // NOTE(bill): one sleeping worker per task; waking them all made a loop adding small tasks mostly + // wake-ups, as they were back asleep before the next. The fence pairs with the one in the worker loop. + std::atomic_thread_fence(std::memory_order_seq_cst); + if (thread->pool->sleeping.load(std::memory_order_relaxed) > 0) { + thread->pool->tasks_available.fetch_add(1); + futex_signal(&thread->pool->tasks_available); } } @@ -165,6 +169,40 @@ GrabState thread_pool_queue_steal(Thread *thread, WorkerTask *task) { return ret; } +gb_internal bool thread_pool_queue_has_tasks(Thread *thread) { + return thread->queue.top.load(std::memory_order_acquire) < thread->queue.bottom.load(std::memory_order_acquire); +} + +// Runs a task from another thread's queue; false if none had one +gb_internal bool thread_pool_steal(ThreadPool *pool) { + usize idx = cast(usize)current_thread->idx; + for_array(i, pool->threads) { + idx = (idx + 1) % cast(usize)pool->threads.count; + Thread *thread = &pool->threads.data[idx]; + if (!thread_pool_queue_has_tasks(thread)) { + continue; + } + + WorkerTask task; + switch (thread_pool_queue_steal(thread, &task)) { + case Grab_Empty: + continue; + case Grab_Success: + task.do_work(task.data); + pool->tasks_left.fetch_sub(1, std::memory_order_release); + + if (pool->tasks_left.load(std::memory_order_acquire) == 0) { + futex_signal(&pool->tasks_left); + } + return true; + case Grab_Failed: + // NOTE: another thread took it, so there may be more + return true; + } + } + return false; +} + gb_internal bool thread_pool_add_task(ThreadPool *pool, WorkerTaskProc *proc, void *data) { WorkerTask task = {}; task.do_work = proc; @@ -247,7 +285,6 @@ gb_internal THREAD_PROC(thread_pool_thread_proc) { while (pool->running.load(std::memory_order_seq_cst)) { // If we've got tasks to process, work through them usize finished_tasks = 0; - i32 state; while (!thread_pool_queue_take(current_thread, &task)) { task.do_work(task.data); @@ -260,48 +297,29 @@ gb_internal THREAD_PROC(thread_pool_thread_proc) { } // If there's still work somewhere and we don't have it, steal it - if (pool->tasks_left.load(std::memory_order_acquire)) { - usize idx = cast(usize)current_thread->idx; - for_array(i, pool->threads) { - if (pool->tasks_left.load(std::memory_order_acquire) == 0) { - break; - } - - idx = (idx + 1) % cast(usize)pool->threads.count; - - Thread *thread = &pool->threads.data[idx]; - WorkerTask task; - - GrabState ret = thread_pool_queue_steal(thread, &task); - switch (ret) { - case Grab_Empty: - continue; - case Grab_Success: - task.do_work(task.data); - pool->tasks_left.fetch_sub(1, std::memory_order_release); - - if (pool->tasks_left.load(std::memory_order_acquire) == 0) { - futex_signal(&pool->tasks_left); - } - - /*fallthrough*/ - case Grab_Failed: - goto main_loop_continue; - } + for (isize spin = 0; spin < THREAD_POOL_SPIN_COUNT; spin++) { + if (thread_pool_steal(pool)) { + goto main_loop_continue; } + yield_thread(); } // if we've done all our work, and there's nothing to steal, go to sleep - pool->tasks_available.store(Someone_Waiting); - if (!pool->running) { - // do not leave the word published on the way out: a worker still on its way to - // futex_wait would sleep on it, and the destroyer does not broadcast again once it - // has committed to its first join - pool->tasks_available.store(Nobody_Waiting); - futex_broadcast(&pool->tasks_available); - break; + { + Footex epoch = pool->tasks_available.load(); + pool->sleeping.fetch_add(1, std::memory_order_relaxed); + std::atomic_thread_fence(std::memory_order_seq_cst); + + // NOTE: a task added before `sleeping` was raised woke nobody, so look again + bool has_tasks = false; + for (Thread &t : pool->threads) { + has_tasks |= thread_pool_queue_has_tasks(&t); + } + if (!has_tasks && pool->running.load()) { + futex_wait(&pool->tasks_available, epoch); + } + pool->sleeping.fetch_sub(1, std::memory_order_relaxed); } - futex_wait(&pool->tasks_available, Someone_Waiting); main_loop_continue:; } From 5fbcbd17da14f962d018a2ab52b070f5eb980326 Mon Sep 17 00:00:00 2001 From: gingerBill Date: Fri, 2 Oct 2026 11:44:50 +0100 Subject: [PATCH 135/215] Compare entity source order by each file's index in its package rather than its name; search the initialization-order graph's edges in parallel --- src/checker.cpp | 86 ++++++++++++++++++++++++++++++++++--------------- src/parser.hpp | 1 + 2 files changed, 61 insertions(+), 26 deletions(-) diff --git a/src/checker.cpp b/src/checker.cpp index bd92cad9e..ae2729b9a 100644 --- a/src/checker.cpp +++ b/src/checker.cpp @@ -96,12 +96,17 @@ gb_internal int entity_source_order_cmp(Entity *x, Entity *y) { } } if (x->file != y->file) { - String fullpath_x = x->file ? x->file->fullpath : (String{}); - String fullpath_y = y->file ? y->file->fullpath : (String{}); - String file_x = filename_from_path(fullpath_x); - String file_y = filename_from_path(fullpath_y); + if (x->file != nullptr && y->file != nullptr && x->file->pkg != nullptr && x->file->pkg == y->file->pkg) { + // NOTE(bill): the same order as by name, as a package's files are sorted by it + cmp = i32_cmp(x->file->index_in_pkg, y->file->index_in_pkg); + } else { + String fullpath_x = x->file ? x->file->fullpath : (String{}); + String fullpath_y = y->file ? y->file->fullpath : (String{}); + String file_x = filename_from_path(fullpath_x); + String file_y = filename_from_path(fullpath_y); - cmp = string_compare(file_x, file_y); + cmp = string_compare(file_x, file_y); + } if (cmp) { return cmp; } @@ -3306,32 +3311,23 @@ gb_internal gb_inline bool is_entity_a_dependency(Entity *e) { return false; } -gb_internal Array generate_entity_dependency_graph(CheckerInfo *info, Arena *arena) { - PtrMap M_vars = {}; - map_init(&M_vars, info->entities.count); - defer (map_destroy(&M_vars)); +struct EntityGraphEdgesChunk { + PtrMap *vars; + Slice nodes; +}; - auto G = array_make(arena_allocator(arena), 0, info->entities.count); - for (Entity *e : info->entities) { - if (e == nullptr || e->kind != Entity_Variable || !is_entity_a_dependency(e)) { - continue; - } - EntityGraphNode *n = arena_alloc_item(arena); - n->entity = e; - map_set(&M_vars, e, n); - array_add(&G, n); - } +// NOTE(bill): A variable depends on every variable reachable from its declaration through procedures and constants, +// as its initializer may read any of them. Variables are not walked through, as they are ordered by their own edges. +// Each node's search only reads, and only writes its own successors, so the searches run in parallel. +gb_internal WORKER_TASK_PROC(generate_entity_dependency_graph_edges_worker) { + EntityGraphEdgesChunk *chunk = cast(EntityGraphEdgesChunk *)data; - TIME_SECTION("generate_entity_dependency_graph: Calculate edges"); - - // NOTE(bill): A variable depends on every variable reachable from its declaration through procedures and constants, - // as its initializer may read any of them. Variables are not walked through, as they are ordered by their own edges. PtrSet visited = {}; defer (ptr_set_destroy(&visited)); auto stack = array_make(heap_allocator(), 0, 64); defer (array_free(&stack)); - for (EntityGraphNode *n : G) { + for (EntityGraphNode *n : chunk->nodes) { ptr_set_clear(&visited); array_clear(&stack); @@ -3353,11 +3349,10 @@ gb_internal Array generate_entity_dependency_graph(CheckerInf continue; } if (dep->kind == Entity_Variable) { - EntityGraphNode **m = map_get(&M_vars, dep); + EntityGraphNode **m = map_get(chunk->vars, dep); // NOTE(bill): a variable naming itself, e.g. `t: struct { next: ^type_of(t) }`, is not an initialization cycle if (m != nullptr && *m != n) { entity_graph_node_set_add(&n->succ, *m); - entity_graph_node_set_add(&(*m)->pred, n); } continue; } @@ -3372,6 +3367,44 @@ gb_internal Array generate_entity_dependency_graph(CheckerInf } } } + return 0; +} + +gb_internal Array generate_entity_dependency_graph(CheckerInfo *info, Arena *arena) { + PtrMap M_vars = {}; + map_init(&M_vars, info->entities.count); + defer (map_destroy(&M_vars)); + + auto G = array_make(arena_allocator(arena), 0, info->entities.count); + for (Entity *e : info->entities) { + if (e == nullptr || e->kind != Entity_Variable || !is_entity_a_dependency(e)) { + continue; + } + EntityGraphNode *n = arena_alloc_item(arena); + n->entity = e; + map_set(&M_vars, e, n); + array_add(&G, n); + } + + TIME_SECTION("generate_entity_dependency_graph: Calculate edges"); + + isize const CHUNK_SIZE = 32; + auto chunks = array_make(heap_allocator(), 0, G.count/CHUNK_SIZE + 1); + defer (array_free(&chunks)); + for (isize i = 0; i < G.count; i += CHUNK_SIZE) { + array_add(&chunks, EntityGraphEdgesChunk{&M_vars, slice(slice_from_array(G), i, gb_min(i + CHUNK_SIZE, G.count))}); + } + for (EntityGraphEdgesChunk &chunk : chunks) { + thread_pool_add_task(generate_entity_dependency_graph_edges_worker, &chunk); + } + thread_pool_wait(); + + // NOTE: in the order of the nodes, so each node's predecessors are added in the order they were before + for (EntityGraphNode *n : G) { + FOR_PTR_SET(m, n->succ) { + entity_graph_node_set_add(&m->pred, n); + } + } TIME_SECTION("generate_entity_dependency_graph: Dependency Count Checker"); for_array(i, G) { @@ -5940,6 +5973,7 @@ gb_internal void check_create_file_scopes(Checker *c) { isize total_pkg_decl_count = 0; for_array(j, pkg->files) { AstFile *f = pkg->files[j]; + f->index_in_pkg = cast(i32)j; string_map_set(&c->info.files, f->fullpath, f); create_scope_from_file(nullptr, f); diff --git a/src/parser.hpp b/src/parser.hpp index f9d8da6af..d1988f89b 100644 --- a/src/parser.hpp +++ b/src/parser.hpp @@ -106,6 +106,7 @@ enum AstDelayQueueKind { struct AstFile { i32 id; + i32 index_in_pkg; // once the package's files are sorted by name, see `check_create_file_scopes` u32 flags; AstPackage * pkg; Scope * scope; From eaa1cb34eb73b7ad2a98564f3ea74da6a0bb2627 Mon Sep 17 00:00:00 2001 From: Arthur031221 Date: Fri, 2 Oct 2026 18:57:49 +0800 Subject: [PATCH 136/215] Fix CBOR bit set byte order conversion --- core/encoding/cbor/marshal.odin | 4 +- core/encoding/cbor/unmarshal.odin | 2 +- tests/core/encoding/cbor/test_core_cbor.odin | 52 +++++++++++++++++++- 3 files changed, 54 insertions(+), 4 deletions(-) diff --git a/core/encoding/cbor/marshal.odin b/core/encoding/cbor/marshal.odin index b9333bf2b..fb61f52c7 100644 --- a/core/encoding/cbor/marshal.odin +++ b/core/encoding/cbor/marshal.odin @@ -615,8 +615,8 @@ _marshal_into_encoder :: proc(e: Encoder, v: any, ti: ^runtime.Type_Info) -> (er return marshal_into(e, any{v.data, vti.id}) case runtime.Type_Info_Bit_Set: - // Store bit_set as big endian just like the protocol. - do_byte_swap := !reflect.bit_set_is_big_endian(v) + // Convert the bit set storage to a native integer before encoding. + do_byte_swap := reflect.bit_set_is_big_endian(v) != (ODIN_ENDIAN == .Big) switch ti.size * 8 { case 0: return _encode_u8(e.writer, 0) diff --git a/core/encoding/cbor/unmarshal.odin b/core/encoding/cbor/unmarshal.odin index a4c7176ec..dd23dc3c7 100644 --- a/core/encoding/cbor/unmarshal.odin +++ b/core/encoding/cbor/unmarshal.odin @@ -905,7 +905,7 @@ _assign_int :: proc(val: any, i: $T) -> bool { case: ti := type_info_of(v.id) if _, ok := ti.variant.(runtime.Type_Info_Bit_Set); ok { - do_byte_swap := !reflect.bit_set_is_big_endian(v) + do_byte_swap := reflect.bit_set_is_big_endian(v) != (ODIN_ENDIAN == .Big) switch ti.size * 8 { case 0: // no-op. case 8: diff --git a/tests/core/encoding/cbor/test_core_cbor.odin b/tests/core/encoding/cbor/test_core_cbor.odin index 6e3312779..37c27eebd 100644 --- a/tests/core/encoding/cbor/test_core_cbor.odin +++ b/tests/core/encoding/cbor/test_core_cbor.odin @@ -201,7 +201,7 @@ test_marshalling :: proc(t: ^testing.T) { }, "base64": 34("MTYgaXMgYSBuaWNlIG51bWJlcg=="), "biggie": 18446744073709551615, - "ennieb": 512, + "ennieb": 2, "iamint": -256, "biggest": 2(h'0f951a9fd3c158afdff08ab8e0'), "smallie": -18446744073709551616, @@ -910,3 +910,53 @@ expect_streamed_encoding :: proc(t: ^testing.T, encoded: string, values: ..cbor. testing.expect_value(t, fmt.tprint(bytes.buffer_to_bytes(&buf)), fmt.tprint(transmute([]byte)encoded), loc) } + + +@(test) +test_bit_set_endianness :: proc(t: ^testing.T) { + check :: proc(t: ^testing.T, $Backing: typeid, wide_encoding: string) { + Flag :: enum { First = 0, Second = 9, Last = 12 } + Flags :: bit_set[Flag; Backing] + value := Flags{.First, .Second, .Last} + + options := [2]cbor.Encoder_Flags{cbor.ENCODE_SMALL, {}} + for flags in options { + expected := flags == cbor.ENCODE_SMALL ? "\x19\x12\x01" : wide_encoding + data, err := cbor.marshal(value, flags) + defer delete(data) + testing.expect_value(t, err, nil) + testing.expect_value(t, string(data), expected) + + decoded: Flags + uerr := cbor.unmarshal(expected, &decoded) + testing.expect_value(t, uerr, nil) + testing.expect_value(t, decoded, value) + } + + data, err := cbor.marshal(Flags{}) + defer delete(data) + testing.expect_value(t, err, nil) + testing.expect_value(t, string(data), "\x00") + } + + Small_Flags :: bit_set[0..=7; u8] + control := Small_Flags{1, 5} + data, err := cbor.marshal(control) + defer delete(data) + testing.expect_value(t, err, nil) + testing.expect_value(t, string(data), "\x18\x22") + decoded: Small_Flags + uerr := cbor.unmarshal("\x18\x22", &decoded) + testing.expect_value(t, uerr, nil) + testing.expect_value(t, decoded, control) + + check(t, u16, "\x19\x12\x01") + check(t, u16le, "\x19\x12\x01") + check(t, u16be, "\x19\x12\x01") + check(t, u32, "\x1a\x00\x00\x12\x01") + check(t, u32le, "\x1a\x00\x00\x12\x01") + check(t, u32be, "\x1a\x00\x00\x12\x01") + check(t, u64, "\x1b\x00\x00\x00\x00\x00\x00\x12\x01") + check(t, u64le, "\x1b\x00\x00\x00\x00\x00\x00\x12\x01") + check(t, u64be, "\x1b\x00\x00\x00\x00\x00\x00\x12\x01") +} From ff9d3584f4a471e09c61f8f4c7fe48d1b2a71c91 Mon Sep 17 00:00:00 2001 From: gingerBill Date: Fri, 2 Oct 2026 12:07:06 +0100 Subject: [PATCH 137/215] Per-thread arrays instead of MPSC queues for entities, definitions and untyped expressions; walk the minimum dependency set from per-task stacks, and scan its root definitions in parallel --- src/array.cpp | 13 +++ src/checker.cpp | 217 +++++++++++++++++++++++++------------------- src/checker.hpp | 7 +- src/thread_pool.cpp | 53 +++++++++++ 4 files changed, 192 insertions(+), 98 deletions(-) diff --git a/src/array.cpp b/src/array.cpp index 5176f2511..853a0fc03 100644 --- a/src/array.cpp +++ b/src/array.cpp @@ -94,6 +94,19 @@ gb_internal Slice slice_make(gbAllocator const &allocator, isize count) { return s; } + +template +gb_internal Slice slice_make_aligned(gbAllocator const &allocator, isize count, isize alignment) { + GB_ASSERT(count >= 0); + Slice s = {}; + s.data = cast(T *)gb_alloc_align(allocator, count*gb_size_of(T), alignment); + if (count > 0) { + GB_ASSERT(s.data != nullptr); + } + s.count = count; + return s; +} + template gb_internal void slice_init(Slice *s, gbAllocator const &allocator, isize count) { GB_ASSERT(count >= 0); diff --git a/src/checker.cpp b/src/checker.cpp index ae2729b9a..cc8a3d18d 100644 --- a/src/checker.cpp +++ b/src/checker.cpp @@ -1679,8 +1679,8 @@ gb_internal void init_checker_info(CheckerInfo *i) { array_init(&i->all_procedures, a); mpsc_init(&i->all_procedures_queue, a); - mpsc_init(&i->entity_queue, a); // 1<<20); - mpsc_init(&i->definition_queue, a); //); // 1<<20); + per_thread_array_init(&i->entity_queue, global_thread_pool.threads.count); + per_thread_array_init(&i->definition_queue, global_thread_pool.threads.count); mpsc_init(&i->required_global_variable_queue, a); // 1<<10); mpsc_init(&i->required_foreign_imports_through_force_queue, a); // 1<<10); mpsc_init(&i->foreign_imports_to_check_fullpaths, a); // 1<<10); @@ -1713,8 +1713,8 @@ gb_internal void destroy_checker_info(CheckerInfo *i) { mpsc_destroy(&i->all_procedures_queue); - mpsc_destroy(&i->entity_queue); - mpsc_destroy(&i->definition_queue); + per_thread_array_destroy(&i->entity_queue); + per_thread_array_destroy(&i->definition_queue); mpsc_destroy(&i->required_global_variable_queue); mpsc_destroy(&i->required_foreign_imports_through_force_queue); mpsc_destroy(&i->foreign_imports_to_check_fullpaths); @@ -1807,7 +1807,7 @@ gb_internal void init_checker(Checker *c) { array_init(&c->procs_to_check, heap_allocator(), 0, 1<<20); array_init(&c->nested_proc_lits, heap_allocator(), 0, 1<<20); - mpsc_init(&c->global_untyped_queue, a); // , 1<<20); + per_thread_array_init(&c->global_untyped_queue, global_thread_pool.threads.count); mpsc_init(&c->soa_types_to_complete, a); // , 1<<20); init_checker_context(&c->builtin_ctx, c); @@ -1820,7 +1820,7 @@ gb_internal void destroy_checker(Checker *c) { array_free(&c->nested_proc_lits); array_free(&c->procs_to_check); - mpsc_destroy(&c->global_untyped_queue); + per_thread_array_destroy(&c->global_untyped_queue); mpsc_destroy(&c->soa_types_to_complete); } @@ -2079,7 +2079,7 @@ gb_internal void add_entity_definition(CheckerInfo *i, Ast *identifier, Entity * GB_ASSERT(entity != nullptr); identifier->Ident.entity = entity; entity->identifier = identifier; - mpsc_enqueue(&i->definition_queue, entity); + per_thread_array_add(&i->definition_queue, entity); } gb_internal bool redeclaration_error(String name, Entity *prev, Entity *found) { @@ -2332,19 +2332,16 @@ gb_internal void add_entity_and_decl_info(CheckerContext *c, Ast *identifier, En e->pkg = c->pkg; d->entity.store(e); - isize queue_count = -1; - bool is_lazy = false; - - is_lazy = (e->flags & EntityFlag_Lazy) == EntityFlag_Lazy; + bool is_lazy = (e->flags & EntityFlag_Lazy) == EntityFlag_Lazy; if (!is_lazy) { - queue_count = mpsc_enqueue(&info->entity_queue, e); + per_thread_array_add(&info->entity_queue, e); } if (e->token.pos.file_id != 0) { e->order_in_src = cast(u64)(e->token.pos.file_id)<<32 | u32(e->token.pos.offset); } else { GB_ASSERT(!is_lazy); - e->order_in_src = cast(u64)(1+queue_count); + e->order_in_src = 1 + info->entities_without_file.fetch_add(1); } } @@ -2912,73 +2909,91 @@ gb_internal void add_dependency_to_set(Checker *c, Entity *entity) { } } -gb_internal WORKER_TASK_PROC(add_dependency_to_set_worker) { - Checker *c = global_checker_ptr.load(std::memory_order_relaxed); - Entity *entity = cast(Entity *)data; - if (entity == nullptr) { - return 0; - } - +gb_internal bool min_dep_visit(Entity *entity) { if (entity->type != nullptr && is_type_polymorphic(entity->type)) { DeclInfo *decl = decl_info_of_entity(entity); if (decl != nullptr && decl->gen_proc_type == nullptr) { - return 0; + return false; + } + } + return entity->min_dep_count.fetch_add(1, std::memory_order_relaxed) == 0; +} + +// NOTE(bill): a task walks from its own stack of entities, and hands half of it to a new task once it is large, +// as with a task for each dependency, adding the tasks was most of the work +enum { MIN_DEP_TASK_SPLIT = 256 }; + +gb_internal WORKER_TASK_PROC(add_dependency_to_set_worker) { + Checker *c = global_checker_ptr.load(std::memory_order_relaxed); + Array *stack = cast(Array *)data; + + while (stack->count > 0) { + Entity *entity = array_pop(stack); + if (entity == nullptr || !min_dep_visit(entity)) { + continue; + } + DeclInfo *decl = decl_info_of_entity(entity); + if (decl == nullptr) { + continue; + } + for (TypeInfoPair const tt : decl->type_info_deps) { + add_min_dep_type_info(c, tt.type); + } + + FOR_PTR_SET(e, decl->deps) { + Entity *fl = nullptr; + switch (e->kind) { + case Entity_Procedure: + if (e->Procedure.is_foreign) { + fl = e->Procedure.foreign_library; + } + break; + case Entity_Variable: + if (e->Variable.is_foreign) { + fl = e->Variable.foreign_library; + } + break; + } + if (fl != nullptr) { + GB_ASSERT_MSG(fl->kind == Entity_LibraryName && + (fl->flags&EntityFlag_Used), + "%.*s", LIT(entity->token.string)); + array_add(stack, fl); + } + } + + FOR_PTR_SET(e, decl->deps) { + if (e->min_dep_count.load(std::memory_order_relaxed) == 0) { + array_add(stack, e); + } + } + + if (stack->count >= MIN_DEP_TASK_SPLIT) { + isize half = stack->count/2; + Array *other = gb_alloc_item(heap_allocator(), Array); + array_init(other, heap_allocator(), 0, MIN_DEP_TASK_SPLIT); + array_add_elems(other, stack->data, half); + gb_memmove(stack->data, stack->data + half, (stack->count - half)*gb_size_of(Entity *)); + stack->count -= half; + thread_pool_add_task(add_dependency_to_set_worker, other); } } - if (entity->min_dep_count.fetch_add(1, std::memory_order_relaxed) > 0) { - return 0; - } - - DeclInfo *decl = decl_info_of_entity(entity); - if (decl == nullptr) { - return 0; - } - for (TypeInfoPair const tt : decl->type_info_deps) { - add_min_dep_type_info(c, tt.type); - } - - FOR_PTR_SET(e, decl->deps) { - switch (e->kind) { - case Entity_Procedure: - if (e->Procedure.is_foreign) { - Entity *fl = e->Procedure.foreign_library; - if (fl != nullptr) { - GB_ASSERT_MSG(fl->kind == Entity_LibraryName && - (fl->flags&EntityFlag_Used), - "%.*s", LIT(entity->token.string)); - add_dependency_to_set_threaded(c, fl); - } - } - break; - case Entity_Variable: - if (e->Variable.is_foreign) { - Entity *fl = e->Variable.foreign_library; - if (fl != nullptr) { - GB_ASSERT_MSG(fl->kind == Entity_LibraryName && - (fl->flags&EntityFlag_Used), - "%.*s", LIT(entity->token.string)); - add_dependency_to_set_threaded(c, fl); - } - } - break; - } - } - - FOR_PTR_SET(e, decl->deps) { - add_dependency_to_set_threaded(c, e); - } - + array_free(stack); + gb_free(heap_allocator(), stack); return 0; } gb_internal void add_dependency_to_set_threaded(Checker *c, Entity *entity) { - if (entity == nullptr) { + if (entity == nullptr || entity->min_dep_count.load(std::memory_order_relaxed) > 0) { return; } - thread_pool_add_task(add_dependency_to_set_worker, entity); + Array *stack = gb_alloc_item(heap_allocator(), Array); + array_init(stack, heap_allocator(), 0, 64); + array_add(stack, entity); + thread_pool_add_task(add_dependency_to_set_worker, stack); } @@ -3036,26 +3051,43 @@ gb_internal void collect_testing_procedures_of_package(Checker *c, AstPackage *p } } +gb_internal WORKER_TASK_PROC(add_definitions_to_set_worker) { + Checker *c = global_checker_ptr.load(std::memory_order_relaxed); + Scope *builtin_scope = builtin_pkg->scope; + for (Entity *e : *cast(Slice *)data) { + if (e->scope == builtin_scope) { + if (e->type == nullptr) { + add_dependency_to_set_threaded(c, e); + } + } else if (e->kind == Entity_Procedure) { + if (e->Procedure.is_export) { + add_dependency_to_set_threaded(c, e); + } + } else if (e->kind == Entity_Variable) { + if (e->Variable.is_export) { + add_dependency_to_set_threaded(c, e); + } + } + } + return 0; +} + gb_internal void generate_minimum_dependency_set_internal(Checker *c, Entity *start) { // auto const &add_to_set = add_dependency_to_set; auto const &add_to_set = add_dependency_to_set_threaded; - Scope *builtin_scope = builtin_pkg->scope; - for_array(i, c->info.definitions) { - Entity *e = c->info.definitions[i]; - if (e->scope == builtin_scope) { - if (e->type == nullptr) { - add_to_set(c, e); - } - } else if (e->kind == Entity_Procedure) { - if (e->Procedure.is_export) { - add_to_set(c, e); - } - } else if (e->kind == Entity_Variable) { - if (e->Variable.is_export) { - add_to_set(c, e); - } + { + // NOTE(bill): in parallel, as nearly all definitions are of locals, which add nothing + isize const CHUNK_SIZE = 4096; + auto chunks = array_make >(heap_allocator(), 0, c->info.definitions.count/CHUNK_SIZE + 1); + defer (array_free(&chunks)); + for (isize i = 0; i < c->info.definitions.count; i += CHUNK_SIZE) { + array_add(&chunks, slice(slice_from_array(c->info.definitions), i, gb_min(i + CHUNK_SIZE, c->info.definitions.count))); } + for (Slice &chunk : chunks) { + thread_pool_add_task(add_definitions_to_set_worker, &chunk); + } + thread_pool_wait(); } for (Entity *e; mpsc_dequeue(&c->info.required_foreign_imports_through_force_queue, &e); /**/) { @@ -6714,7 +6746,7 @@ gb_internal void add_untyped_expressions(CheckerInfo *cinfo, UntypedExprInfoMap Ast *expr = entry.key; ExprInfo *info = entry.value; if (expr != nullptr && info != nullptr) { - mpsc_enqueue(&cinfo->checker->global_untyped_queue, UntypedExprInfo{expr, info}); + per_thread_array_add(&cinfo->checker->global_untyped_queue, UntypedExprInfo{expr, info}); } } map_clear(untyped); @@ -7323,19 +7355,11 @@ gb_internal bool check_unique_package_names(Checker *c) { } gb_internal void check_add_entities_from_queues(Checker *c) { - isize cap = c->info.entities.count + c->info.entity_queue.count.load(std::memory_order_relaxed); - array_reserve(&c->info.entities, cap); - for (Entity *e; mpsc_dequeue(&c->info.entity_queue, &e); /**/) { - array_add(&c->info.entities, e); - } + per_thread_array_gather(&c->info.entity_queue, &c->info.entities); } gb_internal void check_add_definitions_from_queues(Checker *c) { - isize cap = c->info.definitions.count + c->info.definition_queue.count.load(std::memory_order_relaxed); - array_reserve(&c->info.definitions, cap); - for (Entity *e; mpsc_dequeue(&c->info.definition_queue, &e); /**/) { - array_add(&c->info.definitions, e); - } + per_thread_array_gather(&c->info.definition_queue, &c->info.definitions); } gb_internal void check_merge_queues_into_arrays(Checker *c) { @@ -7718,8 +7742,8 @@ gb_internal void check_parsed_files(Checker *c) { TIME_SECTION("sanity checks"); check_merge_queues_into_arrays(c); - GB_ASSERT(c->info.entity_queue.count.load(std::memory_order_relaxed) == 0); - GB_ASSERT(c->info.definition_queue.count.load(std::memory_order_relaxed) == 0); + GB_ASSERT(per_thread_array_count(&c->info.entity_queue) == 0); + GB_ASSERT(per_thread_array_count(&c->info.definition_queue) == 0); TIME_SECTION("check instrumentation calls"); { @@ -7733,7 +7757,10 @@ gb_internal void check_parsed_files(Checker *c) { TIME_SECTION("add untyped expression values"); - for (UntypedExprInfo u = {}; mpsc_dequeue(&c->global_untyped_queue, &u); /**/) { + auto untyped = array_make(heap_allocator()); + defer (array_free(&untyped)); + per_thread_array_gather(&c->global_untyped_queue, &untyped); + for (UntypedExprInfo const &u : untyped) { GB_ASSERT(u.expr != nullptr && u.info != nullptr); if (is_type_typed(u.info->type)) { compiler_error("%s (type %s) is typed!", expr_to_string(u.expr), type_to_string(u.info->type)); diff --git a/src/checker.hpp b/src/checker.hpp index 52d43ad81..2bcf4fcec 100644 --- a/src/checker.hpp +++ b/src/checker.hpp @@ -793,8 +793,9 @@ struct CheckerInfo { BlockingMutex entry_point_mutex; - MPSCQueue definition_queue; - MPSCQueue entity_queue; + PerThreadArray definition_queue; + PerThreadArray entity_queue; + std::atomic entities_without_file; // for their `order_in_src` MPSCQueue required_global_variable_queue; MPSCQueue required_foreign_imports_through_force_queue; MPSCQueue foreign_imports_to_check_fullpaths; @@ -905,7 +906,7 @@ struct Checker { Array nested_proc_lits; - MPSCQueue global_untyped_queue; + PerThreadArray global_untyped_queue; MPSCQueue soa_types_to_complete; }; diff --git a/src/thread_pool.cpp b/src/thread_pool.cpp index 0f1e59c93..3509c9fc4 100644 --- a/src/thread_pool.cpp +++ b/src/thread_pool.cpp @@ -327,3 +327,56 @@ gb_internal THREAD_PROC(thread_pool_thread_proc) { return 0; } + +template +struct alignas(2*GB_CACHE_LINE_SIZE) PerThreadArraySlot { + Array array; + u8 padding[2*GB_CACHE_LINE_SIZE - gb_size_of(Array)]; +}; + +template +struct PerThreadArray { + Slice > slots; +}; + +template +gb_internal void per_thread_array_init(PerThreadArray *a, isize thread_count) { + isize align = gb_align_of(PerThreadArraySlot); + a->slots = slice_make_aligned >(permanent_allocator(), thread_count, align); + GB_ASSERT((cast(uintptr)a->slots.data & (align - 1)) == 0); + for (PerThreadArraySlot &slot : a->slots) { + array_init(&slot.array, heap_allocator()); + } +} + +template +gb_internal void per_thread_array_destroy(PerThreadArray *a) { + for (PerThreadArraySlot &slot : a->slots) { + array_free(&slot.array); + } +} + +template +gb_internal void per_thread_array_add(PerThreadArray *a, T const &value) { + isize index = current_thread_index(); + GB_ASSERT(0 <= index && index < a->slots.count); + array_add(&a->slots[index].array, value); +} + +template +gb_internal isize per_thread_array_count(PerThreadArray *a) { + isize count = 0; + for (PerThreadArraySlot &slot : a->slots) { + count += slot.array.count; + } + return count; +} + +template +gb_internal void per_thread_array_gather(PerThreadArray *a, Array *dst) { + array_reserve(dst, dst->count + per_thread_array_count(a)); + for (PerThreadArraySlot &slot : a->slots) { + array_add_elems(dst, slot.array.data, slot.array.count); + array_clear(&slot.array); + } +} From 14950b8ae9fef5aa990e90969525c94401db3089 Mon Sep 17 00:00:00 2001 From: gingerBill Date: Fri, 2 Oct 2026 12:55:09 +0100 Subject: [PATCH 138/215] Park nested procedures on their parent until its body is checked instead of re-queuing; per-entry #load caches and parallel #load_directory reads; don't merge dependencies into package-level declarations; separate the thread pool's contended fields onto their own cache lines --- src/check_builtin.cpp | 243 ++++++++++++++++++++++++------------------ src/check_decl.cpp | 2 +- src/checker.cpp | 26 ++++- src/checker.hpp | 9 +- src/thread_pool.cpp | 9 +- src/threading.cpp | 10 +- 6 files changed, 181 insertions(+), 118 deletions(-) diff --git a/src/check_builtin.cpp b/src/check_builtin.cpp index 6777ca8b1..701de7a67 100644 --- a/src/check_builtin.cpp +++ b/src/check_builtin.cpp @@ -2029,7 +2029,61 @@ gb_internal bool check_builtin_simd_operation(CheckerContext *c, Operand *operan return false; } -gb_internal bool cache_load_file_directive(CheckerContext *c, Ast *call, String const &original_string, bool err_on_not_found, LoadFileCache **cache_, LoadFileTier tier, bool use_mutex=true) { +// NOTE(bill, 2026-10-02) The cache entry of `path` loaded to at least `tier`. +// The map is only locked to find or add the entry, and the file is loaded under the entry's own mutex, so different files load at once. +gb_internal LoadFileCache *load_file_cache_entry(CheckerInfo *info, String const &path, LoadFileTier tier) { + LoadFileCache *cache = nullptr; + mutex_lock(&info->load_file_mutex); + LoadFileCache **cache_ptr = string_map_get(&info->load_file_cache, path); + if (cache_ptr != nullptr) { + cache = *cache_ptr; + } else { + cache = permanent_alloc_item(); + cache->path = path; + string_map_init(&cache->hashes, 32); + string_map_set(&info->load_file_cache, path, cache); + } + mutex_unlock(&info->load_file_mutex); + + MUTEX_GUARD(&cache->mutex); + if (tier > cache->tier) { + cache->tier = tier; + + TEMPORARY_ALLOCATOR_GUARD(); + char *c_str = alloc_cstring(temporary_allocator(), path); + + gbFile f = {}; + cache->file_error = gb_file_open(&f, c_str); + defer (gb_file_close(&f)); + + if (cache->file_error == gbFileError_None) { + cache->exists = true; + + switch(tier) { + case LoadFileTier_Exists: + // Nothing to do. + break; + case LoadFileTier_Contents: { + isize file_size = cast(isize)gb_file_size(&f); + if (file_size > 0) { + u8 *ptr = permanent_alloc_array(file_size+1); + gb_file_read_at(&f, ptr, file_size, 0); + ptr[file_size] = '\0'; + cache->data.text = ptr; + cache->data.len = file_size; + } + break; + } + default: + GB_PANIC("Unhandled LoadFileTier"); + break; + }; + } + } + return cache; +} + +gb_internal bool cache_load_file_directive(CheckerContext *c, Ast *call, String const &original_string, bool err_on_not_found, LoadFileCache **cache_, LoadFileTier tier) { ast_node(ce, CallExpr, call); ast_node(bd, BasicDirective, ce->proc); String builtin_name = bd->name.string; @@ -2051,75 +2105,12 @@ gb_internal bool cache_load_file_directive(CheckerContext *c, Ast *call, String } } - if (use_mutex) mutex_lock(&c->info->load_file_mutex); - defer (if (use_mutex) mutex_unlock(&c->info->load_file_mutex)); + LoadFileCache *cache = load_file_cache_entry(c->info, path, tier); + if (cache_) *cache_ = cache; - gbFileError file_error = gbFileError_None; - String data = {}; - bool exists = false; - LoadFileTier cache_tier = LoadFileTier_Invalid; - - LoadFileCache **cache_ptr = string_map_get(&c->info->load_file_cache, path); - LoadFileCache *cache = cache_ptr ? *cache_ptr : nullptr; - if (cache) { - file_error = cache->file_error; - data = cache->data; - exists = cache->exists; - cache_tier = cache->tier; - } - defer ({ - if (cache == nullptr) { - LoadFileCache *new_cache = permanent_alloc_item(); - new_cache->path = path; - new_cache->data = data; - new_cache->file_error = file_error; - new_cache->exists = exists; - new_cache->tier = cache_tier; - string_map_init(&new_cache->hashes, 32); - string_map_set(&c->info->load_file_cache, path, new_cache); - if (cache_) *cache_ = new_cache; - } else { - cache->data = data; - cache->file_error = file_error; - cache->exists = exists; - cache->tier = cache_tier; - if (cache_) *cache_ = cache; - } - }); - - if (tier > cache_tier) { - cache_tier = tier; - - TEMPORARY_ALLOCATOR_GUARD(); - char *c_str = alloc_cstring(temporary_allocator(), path); - - gbFile f = {}; - file_error = gb_file_open(&f, c_str); - defer (gb_file_close(&f)); - - if (file_error == gbFileError_None) { - exists = true; - - switch(tier) { - case LoadFileTier_Exists: - // Nothing to do. - break; - case LoadFileTier_Contents: { - isize file_size = cast(isize)gb_file_size(&f); - if (file_size > 0) { - u8 *ptr = permanent_alloc_array(file_size+1); - gb_file_read_at(&f, ptr, file_size, 0); - ptr[file_size] = '\0'; - data.text = ptr; - data.len = file_size; - } - break; - } - default: - GB_PANIC("Unhandled LoadFileTier"); - }; - } - } + mutex_lock(&cache->mutex); + gbFileError file_error = cache->file_error; + mutex_unlock(&cache->mutex); switch (file_error) { default: @@ -2253,6 +2244,62 @@ gb_internal int file_cache_sort_cmp(void const *x, void const *y) { return string_compare(a->path, b->path); } +// NOTE(bill): a directory may hold thousands of files, which are read one at a time otherwise. +// This thread and a few helper tasks take them in turn and this thread only waits for the ones a running helper has taken, +// and the job is freed by whichever of them finishes with it last. +struct LoadDirectoryPrefetch { + CheckerInfo * info; + Array paths; + std::atomic next; + std::atomic done; + std::atomic refs; +}; + +gb_internal void load_directory_prefetch_run(LoadDirectoryPrefetch *job) { + for (isize i = job->next.fetch_add(1); i < job->paths.count; i = job->next.fetch_add(1)) { + load_file_cache_entry(job->info, job->paths[i], LoadFileTier_Contents); + job->done.fetch_add(1); + } + if (job->refs.fetch_sub(1) == 1) { + array_free(&job->paths); + gb_free(heap_allocator(), job); + } +} + +gb_internal WORKER_TASK_PROC(load_directory_prefetch_worker) { + load_directory_prefetch_run(cast(LoadDirectoryPrefetch *)data); + return 0; +} + +gb_internal void load_directory_prefetch(CheckerInfo *info, Array const &list) { + isize const FILES_PER_HELPER = 64; + + LoadDirectoryPrefetch *job = gb_alloc_item(heap_allocator(), LoadDirectoryPrefetch); + job->info = info; + array_init(&job->paths, heap_allocator(), 0, list.count); + for (FileInfo const &fi : list) { + if (!fi.is_dir) { + array_add(&job->paths, fi.fullpath); + } + } + isize count = job->paths.count; + isize helpers = gb_min(global_thread_pool.threads.count - 1, count/FILES_PER_HELPER); + job->refs.store(cast(i32)(helpers + 1)); + for (isize i = 0; i < helpers; i++) { + thread_pool_add_task(load_directory_prefetch_worker, job); + } + + job->refs.fetch_add(1); // NOTE(bill): kept until every file is done + load_directory_prefetch_run(job); + while (job->done.load() < count) { + yield_thread(); + } + if (job->refs.fetch_sub(1) == 1) { + array_free(&job->paths); + gb_free(heap_allocator(), job); + } +} + gb_internal LoadDirectiveResult check_load_directory_directive(CheckerContext *c, Operand *operand, Ast *call, Type *type_hint, bool err_on_not_found) { ast_node(ce, CallExpr, call); ast_node(bd, BasicDirective, ce->proc); @@ -2301,39 +2348,26 @@ gb_internal LoadDirectiveResult check_load_directory_directive(CheckerContext *c bool ok = determine_path_from_string(ignore_mutex, call, base_dir, original_string, &path); gb_unused(ok); } - MUTEX_GUARD(&c->info->load_directory_mutex); - - - gbFileError file_error = gbFileError_None; - - Array file_caches = {}; - + // NOTE(bill): the map is only locked to find or add the directory's entry which is loaded under its own mutex + LoadDirectoryCache *cache = nullptr; + mutex_lock(&c->info->load_directory_mutex); LoadDirectoryCache **cache_ptr = string_map_get(&c->info->load_directory_cache, path); - LoadDirectoryCache *cache = cache_ptr ? *cache_ptr : nullptr; - if (cache) { - file_error = cache->file_error; + if (cache_ptr != nullptr) { + cache = *cache_ptr; + } else { + cache = permanent_alloc_item(); + cache->path = path; + string_map_set(&c->info->load_directory_cache, path, cache); } - defer ({ - if (cache == nullptr) { - LoadDirectoryCache *new_cache = permanent_alloc_item(); - new_cache->path = path; - new_cache->files = file_caches; - new_cache->file_error = file_error; - string_map_set(&c->info->load_directory_cache, path, new_cache); - - map_set(&c->info->load_directory_map, call, new_cache); - } else { - cache->file_error = file_error; - - map_set(&c->info->load_directory_map, call, cache); - } - }); + map_set(&c->info->load_directory_map, call, cache); + mutex_unlock(&c->info->load_directory_mutex); + MUTEX_GUARD(&cache->mutex); LoadDirectiveResult result = LoadDirective_Success; - - if (cache == nullptr) { + if (!cache->loaded) { + cache->loaded = true; Array list = {}; ReadDirectoryError rd_err = read_directory(path, &list); defer (array_free(&list)); @@ -2364,27 +2398,26 @@ gb_internal LoadDirectiveResult check_load_directory_directive(CheckerContext *c return LoadDirective_Error; } + load_directory_prefetch(c->info, list); + isize files_to_reserve = list.count+1; // always reserve 1 - file_caches = array_make(heap_allocator(), 0, files_to_reserve); - - mutex_lock(&c->info->load_file_mutex); - defer (mutex_unlock(&c->info->load_file_mutex)); + cache->files = array_make(heap_allocator(), 0, files_to_reserve); for (FileInfo fi : list) { - LoadFileCache *cache = nullptr; + LoadFileCache *file_cache = nullptr; if (fi.is_dir) { continue; } - if (cache_load_file_directive(c, call, fi.fullpath, err_on_not_found, &cache, LoadFileTier_Contents, /*use_mutex*/false)) { - array_add(&file_caches, cache); + if (cache_load_file_directive(c, call, fi.fullpath, err_on_not_found, &file_cache, LoadFileTier_Contents)) { + array_add(&cache->files, file_cache); } else { result = LoadDirective_Error; } } - array_sort(file_caches, file_cache_sort_cmp); + array_sort(cache->files, file_cache_sort_cmp); } @@ -2574,7 +2607,7 @@ gb_internal bool check_builtin_procedure_directive(CheckerContext *c, Operand *o LoadFileCache *cache = nullptr; if (cache_load_file_directive(c, call, original_string, true, &cache, LoadFileTier_Contents)) { - MUTEX_GUARD(&c->info->load_file_mutex); + MUTEX_GUARD(&cache->mutex); // TODO(bill): make these procedures fast :P u64 hash_value = 0; u64 *hash_value_ptr = string_map_get(&cache->hashes, hash_kind); diff --git a/src/check_decl.cpp b/src/check_decl.cpp index 008959936..2c225c61f 100644 --- a/src/check_decl.cpp +++ b/src/check_decl.cpp @@ -2321,7 +2321,7 @@ gb_internal void wait_for_entity(Entity *e) { gb_internal void add_deps_from_child_to_parent(DeclInfo *decl) { if (decl && decl->parent) { Scope *ps = decl->parent->scope; - if (ps->flags & (ScopeFlag_File & ScopeFlag_Pkg & ScopeFlag_Global)) { + if (ps->flags & (ScopeFlag_Pkg | ScopeFlag_Global)) { return; } else { // NOTE(bill): Add the dependencies from the procedure literal (lambda) diff --git a/src/checker.cpp b/src/checker.cpp index cc8a3d18d..d9e5f208a 100644 --- a/src/checker.cpp +++ b/src/checker.cpp @@ -207,6 +207,7 @@ gb_internal void init_decl_info(DeclInfo *d, Scope *scope, DeclInfo *parent) { ptr_set_init(&d->deps, 0); type_set_init(&d->type_info_deps, 0); d->labels.allocator = heap_allocator(); + d->nested_to_check.allocator = heap_allocator(); d->variadic_reuses.allocator = heap_allocator(); d->variadic_reuse_max_bytes = 0; d->variadic_reuse_max_align = 1; @@ -6521,6 +6522,17 @@ gb_internal bool check_proc_info(Checker *c, ProcInfo *pi, UntypedExprInfoMap *u } } + // NOTE(bill): the nested procedures that waited for this body, see `check_proc_info_worker_proc` + mutex_lock(&pi->decl->next_mutex); + Array nested = pi->decl->nested_to_check; + pi->decl->nested_to_check = {}; + pi->decl->nested_to_check.allocator = heap_allocator(); + mutex_unlock(&pi->decl->next_mutex); + for (ProcInfo *nested_pi : nested) { + thread_pool_add_task(check_proc_info_worker_proc, nested_pi); + } + array_free(&nested); + add_untyped_expressions(&c->info, ctx.untyped); rw_mutex_shared_lock(&ctx.decl->deps_mutex); @@ -6682,8 +6694,18 @@ gb_internal WORKER_TASK_PROC(check_proc_info_worker_proc) { if (parent->kind == Entity_Procedure && (parent->flags & EntityFlag_ProcBodyChecked) == 0) { Type *pt = base_type(parent->type); if (!pt->Proc.is_polymorphic || pt->Proc.is_poly_specialized) { - thread_pool_add_task(check_proc_info_worker_proc, pi); - return 1; + // NOTE(bill): waits for the parent's body to be checked, which then adds it again, + // rather than adding itself again and again until then + DeclInfo *pd = pi->decl->parent; + mutex_lock(&pd->next_mutex); + bool waiting = (parent->flags & EntityFlag_ProcBodyChecked) == 0; + if (waiting) { + array_add(&pd->nested_to_check, pi); + } + mutex_unlock(&pd->next_mutex); + if (waiting) { + return 1; + } } } } diff --git a/src/checker.hpp b/src/checker.hpp index 2bcf4fcec..57a3ae11b 100644 --- a/src/checker.hpp +++ b/src/checker.hpp @@ -207,10 +207,12 @@ struct VariadicReuseData { struct DeclInfo { DeclInfo * parent; // NOTE(bill): only used for procedure literals at the moment - BlockingMutex next_mutex; + BlockingMutex next_mutex; // also used for `nested_to_check` DeclInfo * next_child; DeclInfo * next_sibling; + Array nested_to_check; // nested procedures to check once this body is checked + Scope * scope; std::atomic entity; @@ -693,6 +695,8 @@ enum LoadFileTier { struct LoadFileCache { LoadFileTier tier; bool exists; + + BlockingMutex mutex; // for everything below String path; gbFileError file_error; String data; @@ -706,6 +710,9 @@ struct LoadDirectoryFile { }; struct LoadDirectoryCache { + bool loaded; + + BlockingMutex mutex; // for everything below String path; gbFileError file_error; Array files; diff --git a/src/thread_pool.cpp b/src/thread_pool.cpp index 3509c9fc4..7ab66a479 100644 --- a/src/thread_pool.cpp +++ b/src/thread_pool.cpp @@ -34,9 +34,10 @@ struct ThreadPool { Slice threads; std::atomic running; - Futex tasks_available; // bumped to wake a sleeping worker - std::atomic sleeping; // workers asleep on `tasks_available`, or about to be - Futex tasks_left; + // NOTE: on separate cache lines, as every task changes `tasks_left` + alignas(2*GB_CACHE_LINE_SIZE) Futex tasks_available; // bumped to wake a sleeping worker + std::atomic sleeping; // workers asleep on `tasks_available`, or about to be + alignas(2*GB_CACHE_LINE_SIZE) Futex tasks_left; }; // NOTE(bill): how many times an idle worker looks for a task before sleeping, so one adding small tasks @@ -49,7 +50,7 @@ gb_internal isize current_thread_index(void) { gb_internal void thread_pool_init(ThreadPool *pool, isize worker_count, char const *worker_name) { pool->threads_allocator = permanent_allocator(); - slice_init(&pool->threads, pool->threads_allocator, worker_count + 1); + pool->threads = slice_make_aligned(pool->threads_allocator, worker_count + 1, gb_align_of(Thread)); // NOTE: this needs to be initialized before any thread starts pool->running.store(true, std::memory_order_seq_cst); diff --git a/src/threading.cpp b/src/threading.cpp index 28882ea24..fe890583b 100644 --- a/src/threading.cpp +++ b/src/threading.cpp @@ -51,11 +51,11 @@ typedef struct TaskRingBuffer { std::atomic buffer; } TaskRingBuffer; +// NOTE(bill, 2026-10-02): each on cache lines of its own as "thieves" take from `top` whilst the owner works at `bottom` typedef struct TaskQueue { - std::atomic top; - std::atomic bottom; - - std::atomic ring; + alignas(2*GB_CACHE_LINE_SIZE) std::atomic top; + alignas(2*GB_CACHE_LINE_SIZE) std::atomic bottom; + alignas(2*GB_CACHE_LINE_SIZE) std::atomic ring; } TaskQueue; struct Thread { @@ -74,7 +74,7 @@ struct Thread { struct Arena *permanent_arena; struct Arena *temporary_arena; - std::atomic *> waiting_futex; + alignas(2*GB_CACHE_LINE_SIZE) std::atomic *> waiting_futex; std::atomic waiting_value; std::atomic waiting_for; }; From 6bc4b69ab80f9451236362751a3213dcfb2e805a Mon Sep 17 00:00:00 2001 From: gingerBill Date: Fri, 2 Oct 2026 13:03:48 +0100 Subject: [PATCH 139/215] Fix #7316: a polymorphic procedure in a constant compound literal is its instance, not nil --- src/check_expr.cpp | 2 +- tests/issues/run.bat | 1 + tests/issues/run.sh | 1 + tests/issues/test_issue_7316.odin | 47 +++++++++++++++++++++++++++++++ 4 files changed, 50 insertions(+), 1 deletion(-) create mode 100644 tests/issues/test_issue_7316.odin diff --git a/src/check_expr.cpp b/src/check_expr.cpp index 50b59f0c1..3556017ca 100644 --- a/src/check_expr.cpp +++ b/src/check_expr.cpp @@ -1006,7 +1006,7 @@ gb_internal i64 check_distance_between_types(CheckerContext *c, Operand *operand PolyProcData poly_proc_data = {}; if (check_polymorphic_procedure_assignment(c, operand, type, operand->expr, &poly_proc_data)) { Entity *e = poly_proc_data.gen_entity; - add_type_and_value(c, operand->expr, Addressing_Value, e->type, {}); + add_type_and_value(c, operand->expr, Addressing_Value, e->type, exact_value_procedure(operand->expr)); Ast *expr = unparen_expr(operand->expr); if (expr->kind == Ast_SelectorExpr) { add_entity_use(c, expr->SelectorExpr.selector, e); diff --git a/tests/issues/run.bat b/tests/issues/run.bat index 28fee09f4..f54c28eaf 100644 --- a/tests/issues/run.bat +++ b/tests/issues/run.bat @@ -78,6 +78,7 @@ clang -c ..\test_issue_sysv_abi.c -o test_issue_sysv_abi_c.o || exit /b ..\..\..\odin run ..\test_issue_7482.odin %COMMON% || exit /b ..\..\..\odin run ..\test_issue_7562.odin %COMMON% -no-crt -no-thread-local || exit /b ..\..\..\odin run ..\test_issue_7562.odin %COMMON% -no-crt -no-thread-local -o:speed || exit /b +..\..\..\odin test ..\test_issue_7316.odin %COMMON% || exit /b ..\..\..\odin test ..\test_issue_7566.odin %COMMON% || exit /b ..\..\..\odin test ..\test_issue_7587.odin %COMMON% || exit /b ..\..\..\odin run ..\test_issue_7596.odin %COMMON% || exit /b diff --git a/tests/issues/run.sh b/tests/issues/run.sh index 209d2923d..15d208d9a 100755 --- a/tests/issues/run.sh +++ b/tests/issues/run.sh @@ -101,6 +101,7 @@ $ODIN check ../test_issue_7012.odin -no-entry-point $COMMON_CHECK $ODIN build ../test_issue_7037.odin $COMMON -o:none $ODIN run ../test_issue_7482.odin $COMMON $ODIN run ../test_issue_7564.odin $COMMON +$ODIN test ../test_issue_7316.odin $COMMON $ODIN test ../test_issue_7566.odin $COMMON $ODIN test ../test_issue_7587.odin $COMMON $ODIN run ../test_issue_7596.odin $COMMON diff --git a/tests/issues/test_issue_7316.odin b/tests/issues/test_issue_7316.odin new file mode 100644 index 000000000..7f0edd503 --- /dev/null +++ b/tests/issues/test_issue_7316.odin @@ -0,0 +1,47 @@ +// Tests issue #7316 https://github.com/odin-lang/Odin/issues/7316 +// A polymorphic procedure in a constant compound literal is its instance, not nil +package test_issues + +import "core:testing" + +Foo :: struct($N: int) { + data: [N]u8, + number: int, + update: proc(f: ^Foo(N), delta: int), + get: proc(f: Foo(N)) -> int, +} + +foo_update :: proc(f: ^Foo($N), delta: int) { f.number += delta } +foo_get :: proc(f: Foo($N)) -> int { return f.number } + +foo_init :: proc(f: ^Foo($N)) { + f^ = { + number = 333, + update = foo_update, + get = foo_get, + } +} + +identity :: proc(x: $T) -> T { return x } + +global_foo := Foo(4){number = 1, update = foo_update, get = foo_get} +global_procs := [2]proc(int) -> int{identity, identity} + +@(test) +test_issue_7316 :: proc(t: ^testing.T) { + f: Foo(10) + foo_init(&f) + testing.expect(t, f.update != nil) + testing.expect(t, f.get != nil) + f.update(&f, 5) + testing.expect_value(t, f.get(f), 338) + + g := Foo(10){number = 1, update = foo_update} + testing.expect(t, g.update != nil) + + procs := [2]proc(int) -> int{identity, identity} + testing.expect_value(t, procs[1](7), 7) + + testing.expect(t, global_foo.update != nil) + testing.expect_value(t, global_procs[0](9), 9) +} From 0915bdcb9282e168e07c1cf5f7fa7188de83005e Mon Sep 17 00:00:00 2001 From: gingerBill Date: Fri, 2 Oct 2026 13:37:32 +0100 Subject: [PATCH 140/215] Reject procedure group candidates whose `$T/S` parameters cannot take the operands before checking their signatures; compare polymorphic instances by an identity hash before `are_types_identical` --- src/check_expr.cpp | 170 +++++++++++++++++++++++++++++++++++++++++++-- src/checker.hpp | 1 + 2 files changed, 167 insertions(+), 4 deletions(-) diff --git a/src/check_expr.cpp b/src/check_expr.cpp index 3556017ca..535325cb0 100644 --- a/src/check_expr.cpp +++ b/src/check_expr.cpp @@ -389,6 +389,149 @@ gb_internal void check_scope_decls(CheckerContext *c, Slice const &nodes, } } +gb_internal bool poly_specialization_shape_mismatch(Type *s, Type *o, isize depth) { + if (s == nullptr || o == nullptr || depth > 8) { + return false; + } + if (s->kind == Type_Generic) { + if (s->Generic.specialized == nullptr) { + return false; + } + s = s->Generic.specialized; + } + Type *bs = base_type(s); + Type *bo = base_type(o); + if (bs == nullptr || bo == nullptr || bs->kind == Type_Generic || bo->kind == Type_Generic) { + return false; + } + if (bs->kind != bo->kind) { + return true; + } + switch (bs->kind) { + case Type_Pointer: return poly_specialization_shape_mismatch(bs->Pointer.elem, bo->Pointer.elem, depth+1); + case Type_MultiPointer: return poly_specialization_shape_mismatch(bs->MultiPointer.elem, bo->MultiPointer.elem, depth+1); + case Type_Slice: return poly_specialization_shape_mismatch(bs->Slice.elem, bo->Slice.elem, depth+1); + case Type_DynamicArray: return poly_specialization_shape_mismatch(bs->DynamicArray.elem, bo->DynamicArray.elem, depth+1); + case Type_Array: return poly_specialization_shape_mismatch(bs->Array.elem, bo->Array.elem, depth+1); + case Type_FixedCapacityDynamicArray: return poly_specialization_shape_mismatch(bs->FixedCapacityDynamicArray.elem, bo->FixedCapacityDynamicArray.elem, depth+1); + case Type_Map: + return poly_specialization_shape_mismatch(bs->Map.key, bo->Map.key, depth+1) || + poly_specialization_shape_mismatch(bs->Map.value, bo->Map.value, depth+1); + case Type_Struct: + return bs->Struct.soa_kind != bo->Struct.soa_kind; + } + return false; +} + +gb_internal bool poly_candidate_cannot_match(TypeProc *pt, Array const &operands) { + if (pt->params == nullptr) { + return false; + } + auto const ¶ms = pt->params->Tuple.variables; + for (isize i = 0; i < params.count && i < operands.count; i++) { + if (pt->variadic && i == pt->variadic_index) { + continue; + } + Entity *param = params[i]; + Operand const &o = operands[i]; + if (param == nullptr || o.type == nullptr || o.deferred_untyped_arg || is_type_untyped(o.type)) { + continue; + } + + Type *t = param->type; + Type *ot = o.type; + if (param->kind == Entity_TypeName) { + if (o.mode != Addressing_Type) { + continue; + } + } else if (param->kind == Entity_Variable) { + if (o.mode != Addressing_Value && o.mode != Addressing_Variable && o.mode != Addressing_Constant) { + continue; + } + if (t != nullptr && t->kind == Type_Pointer) { + Type *bot = base_type(ot); + if (bot == nullptr || bot->kind != Type_Pointer) { + continue; + } + t = t->Pointer.elem; + ot = bot->Pointer.elem; + } + } else { + continue; + } + if (t != nullptr && t->kind == Type_Generic && t->Generic.specialized != nullptr && + poly_specialization_shape_mismatch(t, ot, 0)) { + return true; + } + } + return false; +} + +gb_internal u64 type_identity_hash(Type *t, isize depth) { + if (t == nullptr) { + return 0; + } + if (t->kind == Type_Named && t->Named.type_name != nullptr && t->Named.type_name->TypeName.is_type_alias) { + return type_identity_hash(t->Named.base, depth); + } + u64 h = (cast(u64)t->kind + 1) * 0x9e3779b97f4a7c15ull; + auto mix = [&](u64 x) { + h ^= x + 0x9e3779b97f4a7c15ull + (h << 6) + (h >> 2); + }; + if (depth > 8) { + return h; + } + switch (t->kind) { + case Type_Named: mix(cast(u64)cast(uintptr)t->Named.type_name); break; + case Type_Basic: mix(cast(u64)t->Basic.kind); break; + + case Type_Pointer: mix(type_identity_hash(t->Pointer.elem, depth+1)); break; + case Type_MultiPointer: mix(type_identity_hash(t->MultiPointer.elem, depth+1)); break; + case Type_SoaPointer: mix(type_identity_hash(t->SoaPointer.elem, depth+1)); break; + case Type_Slice: mix(type_identity_hash(t->Slice.elem, depth+1)); break; + case Type_DynamicArray: mix(type_identity_hash(t->DynamicArray.elem, depth+1)); break; + case Type_FixedCapacityDynamicArray: mix(type_identity_hash(t->FixedCapacityDynamicArray.elem, depth+1)); break; + case Type_EnumeratedArray: mix(type_identity_hash(t->EnumeratedArray.elem, depth+1)); break; + case Type_Matrix: mix(type_identity_hash(t->Matrix.elem, depth+1)); break; + + case Type_Array: + mix(cast(u64)t->Array.count); + mix(type_identity_hash(t->Array.elem, depth+1)); + break; + + case Type_Map: + mix(type_identity_hash(t->Map.key, depth+1)); + mix(type_identity_hash(t->Map.value, depth+1)); + break; + } + return h; +} + +gb_internal u64 tuple_identity_hash(Type *t) { + u64 h = 0x84222325cbf29ce4ull; + if (t != nullptr && t->kind == Type_Tuple) { + h ^= cast(u64)t->Tuple.variables.count * 31 + cast(u64)t->Tuple.is_packed; + for (Entity *e : t->Tuple.variables) { + h = (h ^ (cast(u64)e->kind * 0x100000001b3ull)) * 0x100000001b3ull; + h ^= type_identity_hash(e->type, 0) + 0x9e3779b97f4a7c15ull + (h << 6) + (h >> 2); + } + } + return h; +} + +gb_internal u64 proc_type_identity_hash(Type *t) { + t = base_type(t); + GB_ASSERT(t->kind == Type_Proc); + u64 h = cast(u64)t->Proc.calling_convention; + h = h*31 + cast(u64)t->Proc.c_vararg; + h = h*31 + cast(u64)t->Proc.variadic; + h = h*31 + cast(u64)t->Proc.diverging; + h = h*31 + cast(u64)t->Proc.optional_ok; + h ^= tuple_identity_hash(t->Proc.params) + 0x9e3779b97f4a7c15ull + (h << 6) + (h >> 2); + h ^= tuple_identity_hash(t->Proc.results) + 0x9e3779b97f4a7c15ull + (h << 6) + (h >> 2); + return h; +} + // Reuse an existing generated specialization `other`, scheduling its body if unchecked. // Caller must have released gen_procs->mutex first. gb_internal bool reuse_gen_polymorphic_procedure(Checker *checker, Entity *other, Ast *poly_def_node, PolyProcData *poly_proc_data) { @@ -475,6 +618,11 @@ gb_internal bool find_or_generate_polymorphic_procedure(CheckerContext *old_c, E } + // NOTE(bill): only whilst trying a procedure group's candidates as their errors are not reported + if (param_operands != nullptr && old_c->no_polymorphic_errors && poly_candidate_cannot_match(&src->Proc, *param_operands)) { + return false; + } + DeclInfo *old_decl = decl_info_of_entity(base_entity); if (old_decl == nullptr) { return false; @@ -534,7 +682,12 @@ gb_internal bool find_or_generate_polymorphic_procedure(CheckerContext *old_c, E mutex_unlock(&base_entity->Procedure.gen_procs_mutex); // @entity-mutex - for (Entity *other : gen_procs->procs) { + u64 hash = proc_type_identity_hash(final_proc_type); + for_array(i, gen_procs->procs) { + if (gen_procs->hashes[i] != hash) { + continue; + } + Entity *other = gen_procs->procs[i]; Type *pt = base_type(other->type); if (are_types_identical(pt, final_proc_type)) { rw_mutex_shared_unlock(&gen_procs->mutex); // @local-mutex @@ -550,6 +703,7 @@ gb_internal bool find_or_generate_polymorphic_procedure(CheckerContext *old_c, E } else { gen_procs = permanent_alloc_item(); gen_procs->procs.allocator = heap_allocator(); + gen_procs->hashes.allocator = heap_allocator(); base_entity->Procedure.gen_procs = gen_procs; mutex_unlock(&base_entity->Procedure.gen_procs_mutex); // @entity-mutex } @@ -573,8 +727,13 @@ gb_internal bool find_or_generate_polymorphic_procedure(CheckerContext *old_c, E return false; } + u64 hash = proc_type_identity_hash(final_proc_type); rw_mutex_shared_lock(&gen_procs->mutex); // @local-mutex - for (Entity *other : gen_procs->procs) { + for_array(i, gen_procs->procs) { + if (gen_procs->hashes[i] != hash) { + continue; + } + Entity *other = gen_procs->procs[i]; Type *pt = base_type(other->type); if (are_types_identical(pt, final_proc_type)) { rw_mutex_shared_unlock(&gen_procs->mutex); // @local-mutex @@ -587,9 +746,11 @@ gb_internal bool find_or_generate_polymorphic_procedure(CheckerContext *old_c, E // Re-check under the exclusive lock (the lookups above ran under a released shared lock) and // hold it across construction + array_add so find-then-publish is atomic. (@local-mutex) + u64 final_hash = proc_type_identity_hash(final_proc_type); rw_mutex_lock(&gen_procs->mutex); // @local-mutex - for (Entity *other : gen_procs->procs) { - if (are_types_identical(base_type(other->type), final_proc_type)) { + for_array(i, gen_procs->procs) { + Entity *other = gen_procs->procs[i]; + if (gen_procs->hashes[i] == final_hash && are_types_identical(base_type(other->type), final_proc_type)) { rw_mutex_unlock(&gen_procs->mutex); // @local-mutex return reuse_gen_polymorphic_procedure(nctx.checker, other, poly_def_node, poly_proc_data); } @@ -659,6 +820,7 @@ gb_internal bool find_or_generate_polymorphic_procedure(CheckerContext *old_c, E AstFile *file = base_entity->file; array_add(&gen_procs->procs, entity); + array_add(&gen_procs->hashes, proc_type_identity_hash(final_proc_type)); rw_mutex_unlock(&gen_procs->mutex); // @local-mutex ProcInfo *proc_info = permanent_alloc_item(); diff --git a/src/checker.hpp b/src/checker.hpp index 57a3ae11b..300395fb2 100644 --- a/src/checker.hpp +++ b/src/checker.hpp @@ -721,6 +721,7 @@ struct LoadDirectoryCache { struct GenProcsData { Array procs; + Array hashes; // `proc_type_identity_hash` of each of `procs` RwMutex mutex; }; From 4a3a7a92cbfcdcfd33826fd4a2e9e593b48e77f2 Mon Sep 17 00:00:00 2001 From: Louis Novy <101842021+louisnovy@users.noreply.github.com> Date: Fri, 2 Oct 2026 09:18:30 -0400 Subject: [PATCH 141/215] Fix the length of fixed capacity dynamic array literals whose elements can't be constant --- src/llvm_backend_expr.cpp | 7 +++++-- tests/issues/run.bat | 1 + tests/issues/run.sh | 1 + tests/issues/test_issue_7430.odin | 13 +++++++++++++ 4 files changed, 20 insertions(+), 2 deletions(-) create mode 100644 tests/issues/test_issue_7430.odin diff --git a/src/llvm_backend_expr.cpp b/src/llvm_backend_expr.cpp index 0e90d8d74..cfa31344c 100644 --- a/src/llvm_backend_expr.cpp +++ b/src/llvm_backend_expr.cpp @@ -6458,13 +6458,16 @@ gb_internal lbAddr lb_build_addr_compound_lit(lbProcedure *p, Ast *expr) { case Type_FixedCapacityDynamicArray: { if (cl->elems.count > 0) { - lb_addr_store(p, v, lb_const_value(p->module, type, exact_value_compound(expr))); + // NOTE: the length isn't taken from the literal's constant, which is nil when its elements can't be constant + lbValue dst_ptr = lb_addr_get_ptr(p, v); + lbValue value = lb_const_value(p->module, type, exact_value_compound(expr)); + lb_emit_store(p, lb_emit_struct_ep(p, dst_ptr, 0), lb_emit_struct_ev(p, value, 0)); + lb_emit_store(p, lb_emit_struct_ep(p, dst_ptr, 1), lb_const_int(p->module, t_int, cl->max_count)); auto temp_data = array_make(temporary_allocator(), 0, cl->elems.count); lb_build_addr_compound_lit_populate(p, cl->elems, &temp_data, type); - lbValue dst_ptr = lb_addr_get_ptr(p, v); for_array(i, temp_data) { i32 index = cast(i32)(temp_data[i].elem_index); temp_data[i].gep = lb_emit_array_epi(p, dst_ptr, index); diff --git a/tests/issues/run.bat b/tests/issues/run.bat index 5c92eb840..a276b04a7 100644 --- a/tests/issues/run.bat +++ b/tests/issues/run.bat @@ -59,6 +59,7 @@ set COMMON=-define:ODIN_TEST_FANCY=false -file -vet -strict-style -ignore-unused ..\..\..\odin build ..\test_issue_7037.odin %COMMON% -o:none || exit /b ..\..\..\odin test ..\test_issue_7421.odin %COMMON% || exit /b ..\..\..\odin check ..\test_issue_7421_tagged_duplicate.odin %COMMON% 2>&1 | find /c "Error: Duplicate case" | findstr /x "1" || exit /b +..\..\..\odin test ..\test_issue_7430.odin %COMMON% || exit /b ..\..\..\odin build ..\test_issue_7188.odin %COMMON% || exit /b clang -c ..\test_issue_sysv_abi.c -o test_issue_sysv_abi_c.o || exit /b ..\..\..\odin test ..\test_issue_sysv_abi.odin %COMMON% || exit /b diff --git a/tests/issues/run.sh b/tests/issues/run.sh index 22b84524f..53c4aa855 100755 --- a/tests/issues/run.sh +++ b/tests/issues/run.sh @@ -112,6 +112,7 @@ else exit 1 fi $ODIN check ../test_issue_7429.odin $COMMON_CHECK +$ODIN test ../test_issue_7430.odin $COMMON $ODIN test ../test_issue_7356.odin $COMMON $ODIN test ../test_issue_7336.odin $COMMON $ODIN build ../test_issue_7167.odin $COMMON diff --git a/tests/issues/test_issue_7430.odin b/tests/issues/test_issue_7430.odin new file mode 100644 index 000000000..edf248356 --- /dev/null +++ b/tests/issues/test_issue_7430.odin @@ -0,0 +1,13 @@ +// Tests issue #7430 https://github.com/odin-lang/Odin/issues/7430 +package test_issues + +import "core:testing" + +@(test) +test_issue_7430 :: proc(t: ^testing.T) { + U :: union {T} + T :: struct {_: []i32} + + u := [dynamic; 4]U{T{}} + testing.expect_value(t, len(u), 1) +} From 56e7efb1d4ebf33a74ccbb242fdd3d172f7e494e Mon Sep 17 00:00:00 2001 From: gingerBill Date: Fri, 2 Oct 2026 14:36:03 +0100 Subject: [PATCH 142/215] Adjust doc comments that misrender as CommonMark --- core/c/libc/stdio.odin | 2 +- core/math/big/prime.odin | 6 +++--- core/math/big/private.odin | 14 +++++++------- core/math/rand/distributions.odin | 16 ++++++++-------- core/net/addr.odin | 8 ++++---- core/simd/x86/avx.odin | 8 ++------ core/strconv/strconv.odin | 2 +- core/sys/windows/gdi32.odin | 20 ++++++++++---------- core/sys/windows/key_codes.odin | 4 ++-- core/sys/windows/types.odin | 9 +++------ vendor/glfw/bindings/types.odin | 1 + vendor/glfw/constants.odin | 3 ++- vendor/glfw/types.odin | 1 + vendor/stb/vorbis/stb_vorbis.odin | 28 ++++++++++++++-------------- vendor/wgpu/wgpu_native_types.odin | 4 +--- 15 files changed, 60 insertions(+), 66 deletions(-) diff --git a/core/c/libc/stdio.odin b/core/c/libc/stdio.odin index ffdb06f67..d76c24119 100644 --- a/core/c/libc/stdio.odin +++ b/core/c/libc/stdio.odin @@ -38,7 +38,7 @@ when ODIN_OS == .Windows { FILENAME_MAX :: 260 - L_tmpnam :: 15 // "\\" + 12 + NUL + L_tmpnam :: 15 // `"\\" + 12 + NUL` SEEK_SET :: 0 SEEK_CUR :: 1 diff --git a/core/math/big/prime.odin b/core/math/big/prime.odin index 7fa6d8e4a..a1d1bc5f2 100644 --- a/core/math/big/prime.odin +++ b/core/math/big/prime.odin @@ -833,9 +833,9 @@ internal_int_prime_strong_lucas_selfridge :: proc(a: ^Int, allocator := context. /* Performs one Fermat test. - If "a" were prime then b**a == b (mod a) since the order of - the multiplicative sub-group would be phi(a) = a-1. That means - it would be the same as b**(a mod (a-1)) == b**1 == b (mod a). + If "a" were prime then `b**a == b (mod a)` since the order of + the multiplicative sub-group would be `phi(a) = a-1`. That means + it would be the same as `b**(a mod (a-1)) == b**1 == b (mod a)`. Returns `true` if the congruence holds, or `false` otherwise. diff --git a/core/math/big/private.odin b/core/math/big/private.odin index 1ca706c6d..c096d7efc 100644 --- a/core/math/big/private.odin +++ b/core/math/big/private.odin @@ -227,15 +227,15 @@ _private_int_mul_toom :: proc(dest, a, b: ^Int, allocator := context.allocator) } /* - product = |a| * |b| using Karatsuba Multiplication using three half size multiplications. + `product = |a| * |b|` using Karatsuba Multiplication using three half size multiplications. - Let `B` represent the radix [e.g. 2**_DIGIT_BITS] and let `n` represent + Let `B` represent the radix [e.g. `2**_DIGIT_BITS`] and let `n` represent half of the number of digits in the min(a,b) - `a` = `a1` * `B`**`n` + `a0` - `b` = `b`1 * `B`**`n` + `b0` + `a = a1 * B**n + a0` + `b = b1 * B**n + b0` - Then, a * b => 1b1 * B**2n + ((a1 + a0)(b1 + b0) - (a0b0 + a1b1)) * B + a0b0 + Then, `a * b => a1b1 * B**2n + ((a1 + a0)(b1 + b0) - (a0b0 + a1b1)) * B + a0b0` Note that a1b1 and a0b0 are used twice and only need to be computed once. So in total three half size (half # of digit) multiplications are performed, @@ -248,8 +248,8 @@ _private_int_mul_toom :: proc(dest, a, b: ^Int, allocator := context.allocator) Note also that the call to `internal_mul` can end up back in this function if the a0, a1, b0, or b1 are above the threshold. - This is known as divide-and-conquer and leads to the famous O(N**lg(3)) or O(N**1.584) - work which is asymptopically lower than the standard O(N**2) that the + This is known as divide-and-conquer and leads to the famous `O(N**lg(3))` or `O(N**1.584)` + work which is asymptopically lower than the standard `O(N**2)` that the baseline/comba methods use. Generally though, the overhead of this method doesn't pay off until a certain size is reached, of around 80 used DIGITs. */ diff --git a/core/math/rand/distributions.odin b/core/math/rand/distributions.odin index 7718bef9a..28db615e9 100644 --- a/core/math/rand/distributions.odin +++ b/core/math/rand/distributions.odin @@ -91,11 +91,11 @@ float32_exponential :: proc(lambda: f32, gen := context.random_generator) -> f32 // // Required: alpha > 0 and beta > 0 // -// math.pow(x, alpha-1) * math.exp(-x / beta) -// pdf(x) = -------------------------------------------- -// math.gamma(alpha) * math.pow(beta, alpha) +// math.pow(x, alpha-1) * math.exp(-x / beta) +// pdf(x) = -------------------------------------------- +// math.gamma(alpha) * math.pow(beta, alpha) // -// mean is alpha*beta, variance is math.pow(alpha*beta, 2) +// mean is `alpha*beta`, variance is `math.pow(alpha*beta, 2)` @(require_results) float64_gamma :: proc(alpha, beta: f64, gen := context.random_generator) -> f64 { if alpha <= 0 || beta <= 0 { @@ -157,11 +157,11 @@ float64_gamma :: proc(alpha, beta: f64, gen := context.random_generator) -> f64 // // Required: alpha > 0 and beta > 0 // -// math.pow(x, alpha-1) * math.exp(-x / beta) -// pdf(x) = -------------------------------------------- -// math.gamma(alpha) * math.pow(beta, alpha) +// math.pow(x, alpha-1) * math.exp(-x / beta) +// pdf(x) = -------------------------------------------- +// math.gamma(alpha) * math.pow(beta, alpha) // -// mean is alpha*beta, variance is math.pow(alpha*beta, 2) +// mean is `alpha*beta`, variance is `math.pow(alpha*beta, 2)` @(require_results) float32_gamma :: proc(alpha, beta: f32, gen := context.random_generator) -> f32 { return f32(float64_gamma(f64(alpha), f64(beta), gen)) diff --git a/core/net/addr.odin b/core/net/addr.odin index 747aacbaf..842cbb0ab 100644 --- a/core/net/addr.odin +++ b/core/net/addr.odin @@ -24,12 +24,12 @@ import "core:strings" /* Expects an IPv4 address with no leading or trailing whitespace: - - a.b.c.d - - a.b.c.d:port - - [a.b.c.d]:port + - `a.b.c.d` + - `a.b.c.d:port` + - `[a.b.c.d]:port` If the IP address is bracketed, the port must be present and valid (though it will be ignored): - - [a.b.c.d] will be treated as a parsing failure. + - `[a.b.c.d]` will be treated as a parsing failure. The port, if present, is required to be a base 10 number in the range 0-65535, inclusive. diff --git a/core/simd/x86/avx.odin b/core/simd/x86/avx.odin index bc7a89f14..9b779b9a1 100644 --- a/core/simd/x86/avx.odin +++ b/core/simd/x86/avx.odin @@ -200,9 +200,7 @@ _mm256_div_pd :: #force_inline proc "c" (a, b: __m256d) -> __m256d { // - `0x02`: Round up, toward positive infinity. // - `0x03`: Truncate the values. // -// For a complete list of options, check [the LLVM docs][llvm_docs]. -// -// [llvm_docs]: https://github.com/llvm-mirror/clang/blob/dcd8d797b20291f1a6b3e0ddda085aa2bbb382a8/lib/Headers/avxintrin.h#L382 +// For a complete list of options, check [the LLVM docs](https://github.com/llvm-mirror/clang/blob/dcd8d797b20291f1a6b3e0ddda085aa2bbb382a8/lib/Headers/avxintrin.h#L382). // // [Intel's documentation](https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm256_round_pd) @(require_results, enable_target_feature="avx") @@ -234,9 +232,7 @@ _mm256_floor_pd :: #force_inline proc "c" (a: __m256d) -> __m256d { // - `0x02`: Round up, toward positive infinity. // - `0x03`: Truncate the values. // -// For a complete list of options, check [the LLVM docs][llvm_docs]. -// -// [llvm_docs]: https://github.com/llvm-mirror/clang/blob/dcd8d797b20291f1a6b3e0ddda085aa2bbb382a8/lib/Headers/avxintrin.h#L382 +// For a complete list of options, check [the LLVM docs](https://github.com/llvm-mirror/clang/blob/dcd8d797b20291f1a6b3e0ddda085aa2bbb382a8/lib/Headers/avxintrin.h#L382). // // [Intel's documentation](https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm256_round_ps) @(require_results, enable_target_feature="avx") diff --git a/core/strconv/strconv.odin b/core/strconv/strconv.odin index f6fe48e8d..828c25b35 100644 --- a/core/strconv/strconv.odin +++ b/core/strconv/strconv.odin @@ -1642,7 +1642,7 @@ Writes a quoted string representation of the input string to a given byte slice - buf: The byte slice to which the quoted string will be written - str: The input string to be quoted -!! ISSUE !! NOT EXPECTED -- "\"hello\"" was expected +!! ISSUE !! NOT EXPECTED -- `"\"hello\""` was expected Example: diff --git a/core/sys/windows/gdi32.odin b/core/sys/windows/gdi32.odin index b11589d41..336f62c83 100644 --- a/core/sys/windows/gdi32.odin +++ b/core/sys/windows/gdi32.odin @@ -229,20 +229,20 @@ BS_DIBPATTERN8X8 :: 8 BS_MONOPATTERN :: 9 /* Hatch Styles */ -HS_HORIZONTAL :: 0 /* ----- */ -HS_VERTICAL :: 1 /* ||||| */ -HS_FDIAGONAL :: 2 /* \\\\\ */ -HS_BDIAGONAL :: 3 /* ///// */ -HS_CROSS :: 4 /* +++++ */ -HS_DIAGCROSS :: 5 /* xxxxx */ +HS_HORIZONTAL :: 0 /* `-----` */ +HS_VERTICAL :: 1 /* `|||||` */ +HS_FDIAGONAL :: 2 /* `\\\\\` */ +HS_BDIAGONAL :: 3 /* `/////` */ +HS_CROSS :: 4 /* `+++++` */ +HS_DIAGCROSS :: 5 /* `xxxxx` */ HS_API_MAX :: 12 /* Pen Styles */ PS_SOLID :: 0 -PS_DASH :: 1 /* ------- */ -PS_DOT :: 2 /* ....... */ -PS_DASHDOT :: 3 /* _._._._ */ -PS_DASHDOTDOT :: 4 /* _.._.._ */ +PS_DASH :: 1 /* `-------` */ +PS_DOT :: 2 /* `.......` */ +PS_DASHDOT :: 3 /* `_._._._` */ +PS_DASHDOTDOT :: 4 /* `_.._.._` */ PS_NULL :: 5 PS_INSIDEFRAME :: 6 PS_USERSTYLE :: 7 diff --git a/core/sys/windows/key_codes.odin b/core/sys/windows/key_codes.odin index a2910ecd1..f92e16fc2 100644 --- a/core/sys/windows/key_codes.odin +++ b/core/sys/windows/key_codes.odin @@ -213,7 +213,7 @@ VK_OEM_3 :: 0xC0 // '`~' for US // 0xC1 - 0xDA : reserved VK_OEM_4 :: 0xDB // '[{' for US -VK_OEM_5 :: 0xDC // '\|' for US +VK_OEM_5 :: 0xDC // `'\|'` for US VK_OEM_6 :: 0xDD // ']}' for US VK_OEM_7 :: 0xDE // ''"' for US VK_OEM_8 :: 0xDF @@ -222,7 +222,7 @@ VK_OEM_8 :: 0xDF // Various extended or enhanced keyboards VK_OEM_AX :: 0xE1 // 'AX' key on Japanese AX kbd -VK_OEM_102 :: 0xE2 // "<>" or "\|" on RT 102-key kbd. +VK_OEM_102 :: 0xE2 // `"<>"` or `"\|"` on RT 102-key kbd. VK_ICO_HELP :: 0xE3 // Help key on ICO VK_ICO_00 :: 0xE4 // 00 key on ICO diff --git a/core/sys/windows/types.odin b/core/sys/windows/types.odin index 00586e240..f643283f2 100644 --- a/core/sys/windows/types.odin +++ b/core/sys/windows/types.odin @@ -2249,7 +2249,7 @@ SEE_MASK_WAITFORINPUTIDLE :: 0x02000000 SEE_MASK_FLAG_LOG_USAGE :: 0x04000000 // When SEE_MASK_FLAG_HINST_IS_SITE is specified SHELLEXECUTEINFO.hInstApp is used as an -// _In_ parameter and specifies a IUnknown* to be used as a site pointer. The site pointer +// `_In_` parameter and specifies a `IUnknown*` to be used as a site pointer. The site pointer // is used to provide services to shell execute, the handler binding process and the verb handlers // once they are invoked. SEE_MASK_FLAG_HINST_IS_SITE :: 0x08000000 @@ -4304,7 +4304,7 @@ SHCONTF_ENABLE_ASYNC :: 0x8000 SHCONTF_INCLUDESUPERHIDDEN :: 0x10000 SHACF_DEFAULT :: 0x00000000 // Currently (SHACF_FILESYSTEM | SHACF_URLALL) -SHACF_FILESYSTEM :: 0x00000001 // This includes the File System as well as the rest of the shell (Desktop\My Computer\Control Panel\) +SHACF_FILESYSTEM :: 0x00000001 // This includes the File System as well as the rest of the shell (`Desktop\My Computer\Control Panel\`) SHACF_URLALL :: (SHACF_URLHISTORY | SHACF_URLMRU) SHACF_URLHISTORY :: 0x00000002 // URLs in the User's History SHACF_URLMRU :: 0x00000004 // URLs in the User's Recently Used list. @@ -5481,10 +5481,9 @@ CRYPT_DIGEST_BLOB :: distinct CRYPTOAPI_BLOB CRYPT_DER_BLOB :: distinct CRYPTOAPI_BLOB CRYPT_ATTR_BLOB :: distinct CRYPTOAPI_BLOB -//+------------------------------------------------------------------------- // In a CRYPT_BIT_BLOB the last byte may contain 0-7 unused bits. Therefore, the // overall bit length is cbData * 8 - cUnusedBits. -//-------------------------------------------------------------------------- +// // certenrolls_begin -- CERT_CONTEXT CRYPT_BIT_BLOB :: struct { cbData: DWORD, @@ -5492,12 +5491,10 @@ CRYPT_BIT_BLOB :: struct { cUnusedBits: DWORD, } -//+------------------------------------------------------------------------- // Type used for any algorithm // // Where the Parameters CRYPT_OBJID_BLOB is in its encoded representation. For most // algorithm types, the Parameters CRYPT_OBJID_BLOB is NULL (Parameters.cbData = 0). -//-------------------------------------------------------------------------- CRYPT_ALGORITHM_IDENTIFIER :: struct { pszObjId: LPSTR, Parameters: CRYPT_OBJID_BLOB, diff --git a/vendor/glfw/bindings/types.odin b/vendor/glfw/bindings/types.odin index bb1c7e431..78ad0dc71 100644 --- a/vendor/glfw/bindings/types.odin +++ b/vendor/glfw/bindings/types.odin @@ -38,6 +38,7 @@ Allocator :: struct { } /*** Procedure type declarations ***/ + WindowIconifyProc :: #type proc "c" (window: WindowHandle, iconified: c.int) WindowRefreshProc :: #type proc "c" (window: WindowHandle) WindowFocusProc :: #type proc "c" (window: WindowHandle, focused: c.int) diff --git a/vendor/glfw/constants.odin b/vendor/glfw/constants.odin index ce4f80584..40bc1fc5d 100644 --- a/vendor/glfw/constants.odin +++ b/vendor/glfw/constants.odin @@ -4,6 +4,7 @@ package glfw GLFW_SHARED :: #config(GLFW_SHARED, false) /*** Constants ***/ + /* Versions */ VERSION_MAJOR :: 3 VERSION_MINOR :: 4 @@ -38,7 +39,7 @@ KEY_UNKNOWN :: -1 KEY_SPACE :: 32 KEY_APOSTROPHE :: 39 /* ' */ KEY_COMMA :: 44 /* , */ -KEY_MINUS :: 45 /* - */ +KEY_MINUS :: 45 /* `-` */ KEY_PERIOD :: 46 /* . */ KEY_SLASH :: 47 /* / */ KEY_SEMICOLON :: 59 /* ; */ diff --git a/vendor/glfw/types.odin b/vendor/glfw/types.odin index a89e0d1ba..645d313ed 100644 --- a/vendor/glfw/types.odin +++ b/vendor/glfw/types.odin @@ -15,6 +15,7 @@ GamepadState :: glfw.GamepadState Allocator :: glfw.Allocator /*** Procedure type declarations ***/ + WindowIconifyProc :: glfw.WindowIconifyProc WindowRefreshProc :: glfw.WindowRefreshProc WindowFocusProc :: glfw.WindowFocusProc diff --git a/vendor/stb/vorbis/stb_vorbis.odin b/vendor/stb/vorbis/stb_vorbis.odin index 2616585c6..43897f79c 100644 --- a/vendor/stb/vorbis/stb_vorbis.odin +++ b/vendor/stb/vorbis/stb_vorbis.odin @@ -152,14 +152,14 @@ foreign lib { // to avoid missing parts of a page header if they cross a datablock boundary, // without writing state-machiney code to record a partial detection. // - // The number of channels returned are stored in *channels (which can be + // The number of channels returned are stored in `*channels` (which can be // NULL--it is always the same as the number of channels reported by - // get_info). *output will contain an array of float* buffers, one per - // channel. In other words, (*output)[0][0] contains the first sample from - // the first channel, and (*output)[1][0] contains the first sample from + // get_info). `*output` will contain an array of `float*` buffers, one per + // channel. In other words, `(*output)[0][0]` contains the first sample from + // the first channel, and `(*output)[1][0]` contains the first sample from // the second channel. // - // *output points into stb_vorbis's internal output buffer storage; these + // `*output` points into stb_vorbis's internal output buffer storage; these // buffers are owned by stb_vorbis and application code should not free // them or modify their contents. They are transient and will be overwritten // once you ask for more data to get decoded, so be sure to grab any data @@ -239,10 +239,10 @@ foreign lib { } // these functions seek in the Vorbis file to (approximately) 'sample_number'. - // after calling seek_frame(), the next call to get_frame_*() will include + // after calling seek_frame(), the next call to `get_frame_*()` will include // the specified sample. after calling stb_vorbis_seek(), the next call to - // stb_vorbis_get_samples_* will start with the specified sample. If you - // do not need to seek to EXACTLY the target sample when using get_samples_*, + // `stb_vorbis_get_samples_*` will start with the specified sample. If you + // do not need to seek to EXACTLY the target sample when using `get_samples_*`, // you can also use seek_frame(). seek_frame :: proc(f: ^vorbis, sample_number: c.uint) -> c.int --- seek :: proc(f: ^vorbis, sample_number: c.uint) -> c.int --- @@ -255,13 +255,13 @@ foreign lib { stream_length_in_seconds :: proc(f: ^vorbis) -> f32 --- // decode the next frame and return the number of samples. the number of - // channels returned are stored in *channels (which can be NULL--it is always - // the same as the number of channels reported by get_info). *output will - // contain an array of float* buffers, one per channel. These outputs will - // be overwritten on the next call to stb_vorbis_get_frame_*. + // channels returned are stored in `*channels` (which can be NULL--it is always + // the same as the number of channels reported by get_info). `*output` will + // contain an array of `float*` buffers, one per channel. These outputs will + // be overwritten on the next call to `stb_vorbis_get_frame_*`. // - // You generally should not intermix calls to stb_vorbis_get_frame_*() - // and stb_vorbis_get_samples_*(), since the latter calls the former. + // You generally should not intermix calls to `stb_vorbis_get_frame_*()` + // and `stb_vorbis_get_samples_*()`, since the latter calls the former. get_frame_float :: proc(f: ^vorbis, channels: ^c.int, output: ^[^]^f32) -> c.int --- // decode the next frame and return the number of *samples* per channel. diff --git a/vendor/wgpu/wgpu_native_types.odin b/vendor/wgpu/wgpu_native_types.odin index c0cbbf2a5..5bf2b7643 100644 --- a/vendor/wgpu/wgpu_native_types.odin +++ b/vendor/wgpu/wgpu_native_types.odin @@ -228,9 +228,7 @@ SurfaceConfigurationExtras :: struct { desiredMaximumFrameLatency: u32, } -/** -* Chained in `SurfaceDescriptor` to make a `Surface` wrapping a WinUI [[ SwapChainPanel ; https://learn.microsoft.com/en-us/windows/windows-app-sdk/api/winrt/microsoft.ui.xaml.controls.swapchainpanel ]]. -*/ +// Chained in `SurfaceDescriptor` to make a `Surface` wrapping a WinUI [[ SwapChainPanel ; https://learn.microsoft.com/en-us/windows/windows-app-sdk/api/winrt/microsoft.ui.xaml.controls.swapchainpanel ]]. SurfaceSourceSwapChainPanel :: struct { using chain: ChainedStruct, /** From c941c3fd2b82a6743da49b37fb8a1f77ae6b38a7 Mon Sep 17 00:00:00 2001 From: gingerBill Date: Fri, 2 Oct 2026 14:45:00 +0100 Subject: [PATCH 143/215] Accept a pointer to a `using` subtype for a `$T/^Base` constraint again, binding `T` to the argument's type --- src/check_type.cpp | 7 +++-- tests/issues/run.bat | 1 + tests/issues/run.sh | 1 + .../issues/test_issue_poly_using_subtype.odin | 31 +++++++++++++++++++ 4 files changed, 37 insertions(+), 3 deletions(-) create mode 100644 tests/issues/test_issue_poly_using_subtype.odin diff --git a/src/check_type.cpp b/src/check_type.cpp index b7b525702..d04fbfe8e 100644 --- a/src/check_type.cpp +++ b/src/check_type.cpp @@ -1925,7 +1925,8 @@ gb_internal SubstResult subst_unify(CheckerContext *c, Type *pattern, Type *sour } if (base_type(pattern->Pointer.elem)->kind == Type_Struct && check_is_assignable_to_using_subtype(src_elem, pattern->Pointer.elem, 0, false, allow_poly) > 0) { - return Subst_Unhandled; // genuine subtype match (no binding), handled by the mutator + // NOTE(bill): a subtype, e.g. `^Expr` for `$T/^Node`, which has nothing to bind unless the pattern is polymorphic + return is_type_polymorphic(pattern->Pointer.elem) ? Subst_Unhandled : Subst_Matched; } return subst_unify(c, pattern->Pointer.elem, src_elem, subst); } @@ -1940,7 +1941,7 @@ gb_internal SubstResult subst_unify(CheckerContext *c, Type *pattern, Type *sour } if (base_type(pattern->MultiPointer.elem)->kind == Type_Struct && check_is_assignable_to_using_subtype(src_elem, pattern->MultiPointer.elem) > 0) { - return Subst_Unhandled; + return is_type_polymorphic(pattern->MultiPointer.elem) ? Subst_Unhandled : Subst_Matched; } return subst_unify(c, pattern->MultiPointer.elem, src_elem, subst); } @@ -2178,7 +2179,7 @@ gb_internal SubstResult subst_unify(CheckerContext *c, Type *pattern, Type *sour } if (base_type(pattern->SoaPointer.elem)->kind == Type_Struct && check_is_assignable_to_using_subtype(source->SoaPointer.elem, pattern->SoaPointer.elem, 0, false, true) > 0) { - return Subst_Unhandled; // genuine subtype match (no binding), handled by the mutator + return is_type_polymorphic(pattern->SoaPointer.elem) ? Subst_Unhandled : Subst_Matched; } return subst_unify(c, pattern->SoaPointer.elem, source->SoaPointer.elem, subst); case Type_FixedCapacityDynamicArray: diff --git a/tests/issues/run.bat b/tests/issues/run.bat index d01507e36..fa0f8463a 100644 --- a/tests/issues/run.bat +++ b/tests/issues/run.bat @@ -82,6 +82,7 @@ clang -c ..\test_issue_sysv_abi.c -o test_issue_sysv_abi_c.o || exit /b ..\..\..\odin run ..\test_issue_7562.odin %COMMON% -no-crt -no-thread-local -o:speed || exit /b ..\..\..\odin test ..\test_issue_7316.odin %COMMON% || exit /b ..\..\..\odin test ..\test_issue_7566.odin %COMMON% || exit /b +..\..\..\odin test ..\test_issue_poly_using_subtype.odin %COMMON% || exit /b ..\..\..\odin test ..\test_issue_7587.odin %COMMON% || exit /b ..\..\..\odin run ..\test_issue_7596.odin %COMMON% || exit /b diff --git a/tests/issues/run.sh b/tests/issues/run.sh index 4302577d5..e4dff48e4 100755 --- a/tests/issues/run.sh +++ b/tests/issues/run.sh @@ -104,6 +104,7 @@ $ODIN run ../test_issue_7482.odin $COMMON $ODIN run ../test_issue_7564.odin $COMMON $ODIN test ../test_issue_7316.odin $COMMON $ODIN test ../test_issue_7566.odin $COMMON +$ODIN test ../test_issue_poly_using_subtype.odin $COMMON $ODIN test ../test_issue_7587.odin $COMMON $ODIN run ../test_issue_7596.odin $COMMON $ODIN test ../test_issue_7421.odin $COMMON diff --git a/tests/issues/test_issue_poly_using_subtype.odin b/tests/issues/test_issue_poly_using_subtype.odin new file mode 100644 index 000000000..17b416ea6 --- /dev/null +++ b/tests/issues/test_issue_poly_using_subtype.odin @@ -0,0 +1,31 @@ +// A pointer to a `using` subtype satisfies a `$T/^Base` constraint, with `T` as the argument's type +package test_issues + +import "core:testing" + +Node :: struct { id: int } +Expr :: struct { using node: Node, e: int } +Ident :: struct { using expr: Expr, name: string } + +slice_of :: proc(nodes: []$T/^Node) -> typeid { return T } +ptr_of :: proc(node: $T/^Node) -> typeid { return T } +multi_of :: proc(node: $T/[^]Node) -> typeid { return T } + +group_node :: proc(node: $T/^Node) -> string { return "node" } +group_int :: proc(node: ^int) -> string { return "int" } +group :: proc{group_node, group_int} + +@(test) +test_poly_using_subtype :: proc(t: ^testing.T) { + exprs: []^Expr + idents: []^Ident + e: ^Expr + m: [^]Expr + i: ^int + testing.expect_value(t, slice_of(exprs), typeid_of(^Expr)) + testing.expect_value(t, slice_of(idents), typeid_of(^Ident)) + testing.expect_value(t, ptr_of(e), typeid_of(^Expr)) + testing.expect_value(t, multi_of(m), typeid_of([^]Expr)) + testing.expect_value(t, group(e), "node") + testing.expect_value(t, group(i), "int") +} From 03852e7af8253a40d8304cf0f962c9eaffb8633f Mon Sep 17 00:00:00 2001 From: gingerBill Date: Fri, 2 Oct 2026 15:36:04 +0100 Subject: [PATCH 144/215] Generate each global's initialization in its own block of the startup procedure; generate the procedure literals reached from the initializations of globals in their own package's module rather than the default module --- src/llvm_backend.cpp | 6 +++ src/llvm_backend.hpp | 3 ++ src/llvm_backend_general.cpp | 13 +++++- tests/issues/run.bat | 1 + tests/issues/run.sh | 1 + tests/issues/test_issue_global_proc_lits.odin | 40 +++++++++++++++++++ 6 files changed, 62 insertions(+), 2 deletions(-) create mode 100644 tests/issues/test_issue_global_proc_lits.odin diff --git a/src/llvm_backend.cpp b/src/llvm_backend.cpp index 05ce7ae17..cfb0005be 100644 --- a/src/llvm_backend.cpp +++ b/src/llvm_backend.cpp @@ -2210,6 +2210,11 @@ gb_internal void lb_create_startup_runtime_generate_body(lbModule *m, lbProcedur } else { lb_init_global_var(m, p, e, init_expr, var); } + + // NOTE(bill): a block per global, as instruction selection is superlinear in the size of a block + lbBlock *next = lb_create_block(p, "global.init", true); + lb_emit_jump(p, next); + lb_start_block(p, next); } CheckerInfo *info = m->gen->info; @@ -2383,6 +2388,7 @@ gb_internal void lb_create_global_procedures_and_types(lbGenerator *gen, Checker array_sort(m->global_procedures_to_create, llvm_global_entity_cmp); } + gen->modules_in_parallel = true; if (do_threading) { for (auto const &entry : gen->modules) { lbModule *m = entry.value; diff --git a/src/llvm_backend.hpp b/src/llvm_backend.hpp index 1303bb4b0..a9a067ae0 100644 --- a/src/llvm_backend.hpp +++ b/src/llvm_backend.hpp @@ -209,6 +209,9 @@ struct lbGenerator : LinkerData { isize used_module_count; + // NOTE(bill): set once the modules are generated in parallel, after which a module may only be added to by its own thread + bool modules_in_parallel; + lbProcedure *startup_runtime; lbProcedure *cleanup_runtime; lbProcedure *objc_names; diff --git a/src/llvm_backend_general.cpp b/src/llvm_backend_general.cpp index 9687fd49c..dc3d51f8e 100644 --- a/src/llvm_backend_general.cpp +++ b/src/llvm_backend_general.cpp @@ -3676,6 +3676,11 @@ gb_internal lbValue lb_generate_anonymous_proc_lit(lbModule *m, String const &pr e->scope = e->file->scope; lbModule *target_module = m; + // NOTE(bill): a literal reached whilst generating the initializations of the globals (in the default module) is + // generated in its own package's module, which may only be added to before the modules are generated in parallel + if (m == &gen->default_module && parent == nullptr && !gen->modules_in_parallel) { + target_module = lb_module_of_expr(gen, expr); + } GB_ASSERT(target_module != nullptr); // NOTE(bill): this is to prevent a race condition since these procedure literals can be created anywhere at any time @@ -3693,8 +3698,12 @@ gb_internal lbValue lb_generate_anonymous_proc_lit(lbModule *m, String const &pr lbValue *found = map_get(&target_module->values, e); rw_mutex_shared_unlock(&target_module->values_mutex); if (found == nullptr) { - lbProcedure *missing_proc_in_target_module = lb_create_procedure(target_module, e, false); - mpsc_enqueue(&target_module->missing_procedures_to_check, missing_proc_in_target_module); + lbProcedure *target_proc = lb_create_procedure(target_module, e, false); + if (gen->modules_in_parallel) { + mpsc_enqueue(&target_module->missing_procedures_to_check, target_proc); + } else { + mpsc_enqueue(&target_module->procedures_to_generate, target_proc); + } } lbProcedure *p = lb_create_procedure(m, e, true); diff --git a/tests/issues/run.bat b/tests/issues/run.bat index 2c2004955..443028dc5 100644 --- a/tests/issues/run.bat +++ b/tests/issues/run.bat @@ -84,6 +84,7 @@ clang -c ..\test_issue_sysv_abi.c -o test_issue_sysv_abi_c.o || exit /b ..\..\..\odin test ..\test_issue_7316.odin %COMMON% || exit /b ..\..\..\odin test ..\test_issue_7566.odin %COMMON% || exit /b ..\..\..\odin test ..\test_issue_poly_using_subtype.odin %COMMON% || exit /b +..\..\..\odin test ..\test_issue_global_proc_lits.odin %COMMON% || exit /b ..\..\..\odin test ..\test_issue_7587.odin %COMMON% || exit /b ..\..\..\odin run ..\test_issue_7596.odin %COMMON% || exit /b diff --git a/tests/issues/run.sh b/tests/issues/run.sh index fb50f87cd..a1ad01264 100755 --- a/tests/issues/run.sh +++ b/tests/issues/run.sh @@ -105,6 +105,7 @@ $ODIN run ../test_issue_7564.odin $COMMON $ODIN test ../test_issue_7316.odin $COMMON $ODIN test ../test_issue_7566.odin $COMMON $ODIN test ../test_issue_poly_using_subtype.odin $COMMON +$ODIN test ../test_issue_global_proc_lits.odin $COMMON $ODIN test ../test_issue_7587.odin $COMMON $ODIN run ../test_issue_7596.odin $COMMON $ODIN test ../test_issue_7421.odin $COMMON diff --git a/tests/issues/test_issue_global_proc_lits.odin b/tests/issues/test_issue_global_proc_lits.odin new file mode 100644 index 000000000..750261d41 --- /dev/null +++ b/tests/issues/test_issue_global_proc_lits.odin @@ -0,0 +1,40 @@ +// Procedure literals within the initializations of globals, constant and not, nested, and called through them +package test_issues + +import "core:testing" + +Op :: struct { + name: string, + f: proc(a, b: int) -> int, +} + +// constant, so its literals are generated with the global's initializer +CONST_OPS := [?]Op{ + {"add", proc(a, b: int) -> int { return a + b }}, + {"sub", proc(a, b: int) -> int { return a - b }}, +} + +// not constant, so it is initialized at startup +runtime_ops := []Op{ + {"mul", proc(a, b: int) -> int { return a * b }}, + {"twice", proc(a, b: int) -> int { + inner := proc(x: int) -> int { return x * 2 } + return inner(a) + inner(b) + }}, +} + +lazy_op := make_op(proc(a, b: int) -> int { return max(a, b) }) + +make_op :: proc "contextless" (f: proc(a, b: int) -> int) -> Op { + return {"made", f} +} + +@(test) +test_global_proc_lits :: proc(t: ^testing.T) { + testing.expect_value(t, CONST_OPS[0].f(7, 3), 10) + testing.expect_value(t, CONST_OPS[1].f(7, 3), 4) + testing.expect_value(t, runtime_ops[0].f(7, 3), 21) + testing.expect_value(t, runtime_ops[1].f(7, 3), 20) + testing.expect_value(t, lazy_op.f(7, 3), 7) + testing.expect_value(t, lazy_op.name, "made") +} From 6a8d6e0ca4fc673acf8734e8fe736e082180cd85 Mon Sep 17 00:00:00 2001 From: gingerBill Date: Fri, 2 Oct 2026 15:55:54 +0100 Subject: [PATCH 145/215] Verify each module once its procedures are generated rather than each procedure, which for those referenced by the type info walked all of the type info each time; only verify the procedures on their own on a failure --- src/llvm_backend.cpp | 41 +++++++++++++++++++++++++++++++++++++++-- 1 file changed, 39 insertions(+), 2 deletions(-) diff --git a/src/llvm_backend.cpp b/src/llvm_backend.cpp index cfb0005be..e3e0a3fb7 100644 --- a/src/llvm_backend.cpp +++ b/src/llvm_backend.cpp @@ -3120,12 +3120,46 @@ gb_internal void lb_generate_procedure(lbModule *m, lbProcedure *p) { p->flags |= lbProcedureFlag_WithoutMemcpyPass; } - lb_verify_function(m, p, true); - MUTEX_GUARD(&m->generated_procedures_mutex); array_add(&m->generated_procedures, p); } +// NOTE(bill): Each module is verified once its procedures are generated, rather than each procedure as it is +// generated. Verifying a procedure on its own walks every constant which uses it, which for one referenced by the +// type info (e.g. `__$equal`) is all of the type info. Only on a failure are its procedures verified on their own, +// to report which ones are invalid. +gb_internal WORKER_TASK_PROC(lb_verify_generated_procedures_worker_proc) { + lbModule *m = cast(lbModule *)data; + if (!LLVMVerifyModule(m->mod, LLVMReturnStatusAction, nullptr)) { + return 0; + } + for (lbProcedure *p : m->generated_procedures) { + lb_verify_function(m, p, true); + } + lb_llvm_module_verification_worker_proc(m); + return 0; +} + +gb_internal void lb_verify_generated_procedures(lbGenerator *gen, bool do_threading) { + if (LLVM_IGNORE_VERIFICATION) { + return; + } + for (auto const &entry : gen->modules) { + lbModule *m = entry.value; + // NOTE(bill): with debug information, its procedures were never verified on their own, only the module after its passes + if (m->debug_builder != nullptr) { + continue; + } + if (do_threading) { + thread_pool_add_task(lb_verify_generated_procedures_worker_proc, m); + } else { + lb_verify_generated_procedures_worker_proc(m); + } + } + thread_pool_wait(); + lb_exit_if_worker_failed(); +} + gb_internal bool lb_generate_code(lbGenerator *gen) { TIME_SECTION("LLVM Initializtion"); @@ -3773,6 +3807,9 @@ gb_internal bool lb_generate_code(lbGenerator *gen) { TIME_SECTION("LLVM Add Foreign Library Paths"); lb_add_foreign_library_paths(gen); + TIME_SECTION("LLVM Verify Procedures"); + lb_verify_generated_procedures(gen, do_threading); + TIME_SECTION("LLVM Function Pass"); lb_llvm_function_passes(gen, do_threading && !build_context.ODIN_DEBUG); From cbcf31518446c7d06ecb4bd5acd0476c8984a025 Mon Sep 17 00:00:00 2001 From: gingerBill Date: Fri, 2 Oct 2026 16:11:18 +0100 Subject: [PATCH 146/215] Generate a package with much more code than a 32nd of all of it in several modules of contiguous files, estimated by the bodies of its used procedures, as each module is generated by one thread --- src/llvm_backend.hpp | 1 + src/llvm_backend_general.cpp | 101 +++++++++++++++++++++++++++++++++++ 2 files changed, 102 insertions(+) diff --git a/src/llvm_backend.hpp b/src/llvm_backend.hpp index a9a067ae0..eb93b7919 100644 --- a/src/llvm_backend.hpp +++ b/src/llvm_backend.hpp @@ -203,6 +203,7 @@ struct lbGenerator : LinkerData { PtrMap modules; // key is `AstPackage *` (`void *` is used for future use) PtrMap modules_through_ctx; + PtrMap file_modules; // NOTE(bill): of the files of a package which is split into several modules lbModule default_module; lbModule *equal_module; diff --git a/src/llvm_backend_general.cpp b/src/llvm_backend_general.cpp index dc3d51f8e..8d6208536 100644 --- a/src/llvm_backend_general.cpp +++ b/src/llvm_backend_general.cpp @@ -185,6 +185,87 @@ gb_internal void lb_init_module(lbModule *m, bool do_threading) { } } +// NOTE(bill): an estimate of the code generated for each file: the size of the bodies of its procedures which are used, +// polymorphic instances included as each is generated with its procedure's file +gb_internal i64 lb_estimate_file_code_sizes(CheckerInfo *info, PtrMap *sizes) { + i64 total = 0; + for (Entity *e : info->entities) { + if (e->kind != Entity_Procedure || e->file == nullptr || e->min_dep_count.load(std::memory_order_relaxed) == 0) { + continue; + } + if (e->scope == nullptr || (e->scope->flags & ScopeFlag_File) == 0) { + continue; + } + DeclInfo *d = e->decl_info; + if (d == nullptr || d->proc_lit == nullptr || d->proc_lit->kind != Ast_ProcLit || d->proc_lit->ProcLit.body == nullptr) { + continue; + } + Ast *body = d->proc_lit->ProcLit.body; + i64 size = gb_max(cast(i64)(ast_end_token(body).pos.offset - ast_token(body).pos.offset), 1); + i64 *found = map_get(sizes, e->file); + if (found) { + *found += size; + } else { + map_set(sizes, e->file, size); + } + total += size; + } + return total; +} + +gb_internal void lb_split_package_into_modules(lbGenerator *gen, Checker *c, AstPackage *pkg, PtrMap *file_sizes, i64 share, bool do_threading) { + i64 pkg_size = 0; + for (AstFile *f : pkg->files) { + i64 *size = map_get(file_sizes, f); + pkg_size += size ? *size : 0; + } + if (pkg_size <= share + share/2) { + return; + } + + auto files = array_make(heap_allocator(), 0, pkg->files.count); + defer (array_free(&files)); + for (AstFile *f : pkg->files) { + array_add(&files, f); + } + array_sort(files, [](void const *a, void const *b) -> int { + return string_compare((*cast(AstFile **)a)->fullpath, (*cast(AstFile **)b)->fullpath); + }); + + i64 group_count = (pkg_size + share - 1) / share; + i64 group_size_target = pkg_size / group_count; + + lbModule *group = nullptr; + i64 group_size = 0; + for (AstFile *f : files) { + if (group == nullptr || group_size >= group_size_target) { + group = permanent_alloc_item(); + group->file = f; + group->pkg = pkg; + group->gen = gen; + group->checker = c; + map_set(&gen->modules, cast(void *)group, group); // point to itself just add it to the list + lb_init_module(group, do_threading); + + if (LLVM_WEAK_MONOMORPHIZATION) { + auto pm = permanent_alloc_item(); + pm->file = f; + pm->pkg = pkg; + pm->gen = gen; + pm->checker = c; + group->polymorphic_module = pm; + pm->polymorphic_module = pm; + map_set(&gen->modules, cast(void *)pm, pm); + lb_init_module(pm, do_threading); + } + group_size = 0; + } + map_set(&gen->file_modules, f, group); + i64 *size = map_get(file_sizes, f); + group_size += size ? *size : 0; + } +} + gb_internal bool lb_init_generator(lbGenerator *gen, Checker *c) { if (global_error_collector.count != 0) { return false; @@ -206,9 +287,17 @@ gb_internal bool lb_init_generator(lbGenerator *gen, Checker *c) { map_init(&gen->modules, gen->info->packages.count*2); map_init(&gen->modules_through_ctx, gen->info->packages.count*2); + map_init(&gen->file_modules); if (USE_SEPARATE_MODULES) { bool module_per_file = build_context.module_per_file && (build_context.optimization_level <= 0 || build_context.lto_kind != LTO_None); + // NOTE(bill): A package with much more code than an even share of all of it is generated in several modules + // of contiguous files, as each module is generated by one thread. The share does not depend on the number of + // threads, so neither do the modules. + PtrMap file_sizes = {}; + map_init(&file_sizes, 1024); + i64 share = gb_max(lb_estimate_file_code_sizes(gen->info, &file_sizes) / 32, 1); + for (auto const &entry : gen->info->packages) { AstPackage *pkg = entry.value; auto m = permanent_alloc_item(); @@ -232,6 +321,9 @@ gb_internal bool lb_init_generator(lbGenerator *gen, Checker *c) { } bool allow_for_per_file = pkg->kind == Package_Runtime || module_per_file; + if (!allow_for_per_file) { + lb_split_package_into_modules(gen, c, pkg, &file_sizes, share, do_threading); + } #if 0 if (!allow_for_per_file) { @@ -572,6 +664,10 @@ gb_internal lbModule *lb_module_of_expr(lbGenerator *gen, Ast *expr) { if (found) { return *found; } + found = map_get(&gen->file_modules, file); + if (found) { + return *found; + } if (file->pkg) { found = map_get(&gen->modules, cast(void *)file->pkg); @@ -599,6 +695,11 @@ gb_internal lbModule *lb_module_of_entity_internal(lbGenerator *gen, Entity *e, GB_ASSERT(*found != nullptr); return *found; } + found = map_get(&gen->file_modules, e->file); + if (found) { + GB_ASSERT(*found != nullptr); + return *found; + } } if (e->pkg) { found = map_get(&gen->modules, cast(void *)e->pkg); From d958fd7abbc083956ab56178218bc03f141ca219 Mon Sep 17 00:00:00 2001 From: gingerBill Date: Fri, 2 Oct 2026 16:36:33 +0100 Subject: [PATCH 147/215] Allow `-build-mode` with `odin test`; Copy a "just loaded" aggregate as integers in the startup procedure and with `-o:none` as LLVM's fast instruction selector cannot select an aggregate load or store --- src/llvm_backend.cpp | 6 ++- src/llvm_backend_general.cpp | 91 ++++++++++++++++++++++++++++++++++++ src/main.cpp | 7 +-- 3 files changed, 99 insertions(+), 5 deletions(-) diff --git a/src/llvm_backend.cpp b/src/llvm_backend.cpp index e3e0a3fb7..5822b549a 100644 --- a/src/llvm_backend.cpp +++ b/src/llvm_backend.cpp @@ -2147,9 +2147,11 @@ gb_internal bool lb_init_global_var(lbModule *m, lbProcedure *p, Entity *e, Ast LLVMTypeRef vt = llvm_addr_type(p->module, var.var); lbValue src0 = lb_emit_conv(p, var.init, t); - LLVMValueRef src = OdinLLVMBuildTransmute(p, src0.value, vt); LLVMValueRef dst = var.var.value; - LLVMBuildStore(p->builder, src, dst); + if (LLVMTypeOf(src0.value) != vt || !lb_try_copy_loaded_aggregate(p, dst, src0.value)) { + LLVMValueRef src = OdinLLVMBuildTransmute(p, src0.value, vt); + LLVMBuildStore(p->builder, src, dst); + } } var.is_initialized = true; diff --git a/src/llvm_backend_general.cpp b/src/llvm_backend_general.cpp index 8d6208536..d7a663e53 100644 --- a/src/llvm_backend_general.cpp +++ b/src/llvm_backend_general.cpp @@ -1585,6 +1585,94 @@ gb_internal bool lb_is_type_proc_recursive(Type *t) { } } +// NOTE(bill): LLVM's fast instruction selector cannot select an aggregate load or store, and for one falls back to its +// slow instruction selection for all of the block before it, which is superlinear in its size. When the passes do not +// split the aggregates of a procedure first (SROA), a copy of a loaded aggregate is made of integers instead, all loaded +// before any is stored, as the aggregate is. +// Oh, how do I love LLVM /s +gb_internal bool lb_copies_aggregates_as_scalars(lbProcedure *p) { + return p->is_startup || build_context.optimization_level < 0; +} + +gb_internal unsigned lb_alignment_at_offset(unsigned alignment, i64 offset, i64 size) { + unsigned a = gb_max(alignment, 1u); + while (a > 1 && (offset % a) != 0) { + a >>= 1; + } + return cast(unsigned)gb_min(cast(i64)a, size); +} + +gb_internal bool lb_try_copy_loaded_aggregate(lbProcedure *p, LLVMValueRef dst, LLVMValueRef load) { + enum {MAX_SCALAR_COPY_SIZE = 64}; + + if (load == nullptr || !LLVMIsALoadInst(load) || LLVMGetVolatile(load) || LLVMGetOrdering(load) != LLVMAtomicOrderingNotAtomic) { + return false; + } + LLVMTypeRef type = LLVMTypeOf(load); + LLVMTypeKind kind = LLVMGetTypeKind(type); + if (kind != LLVMStructTypeKind && kind != LLVMArrayTypeKind) { + return false; + } + i64 size = lb_sizeof(type); + if (size <= 0) { + return false; + } + + // NOTE(bill): the memory loaded must not have been written to since + LLVMBasicBlockRef block = LLVMGetInsertBlock(p->builder); + if (block == nullptr || LLVMGetInstructionParent(load) != block) { + return false; + } + isize steps = 0; + for (LLVMValueRef i = LLVMGetLastInstruction(block); i != load; i = LLVMGetPreviousInstruction(i)) { + if (i == nullptr || ++steps > 16 || + LLVMIsAStoreInst(i) || LLVMIsACallInst(i) || LLVMIsAInvokeInst(i) || + LLVMIsAAtomicRMWInst(i) || LLVMIsAAtomicCmpXchgInst(i)) { + return false; + } + } + + LLVMContextRef ctx = p->module->ctx; + LLVMValueRef src = LLVMGetOperand(load, 0); + LLVMTypeRef i8 = LLVMInt8TypeInContext(ctx); + LLVMTypeRef i64_type = LLVMInt64TypeInContext(ctx); + + if (size > MAX_SCALAR_COPY_SIZE) { + LLVMBuildMemMove(p->builder, dst, lb_try_get_alignment(dst, 1), src, LLVMGetAlignment(load), LLVMConstInt(i64_type, size, false)); + return true; + } + + unsigned src_alignment = LLVMGetAlignment(load); + unsigned dst_alignment = lb_try_get_alignment(dst, 1); + + LLVMValueRef values [MAX_SCALAR_COPY_SIZE/8 + 3] = {}; + i64 offsets[MAX_SCALAR_COPY_SIZE/8 + 3] = {}; + i64 sizes [MAX_SCALAR_COPY_SIZE/8 + 3] = {}; + isize count = 0; + for (i64 offset = 0; offset < size; /**/) { + i64 n = 8; + while (offset + n > size) { + n >>= 1; + } + LLVMValueRef index = LLVMConstInt(i64_type, offset, false); + LLVMValueRef ptr = offset ? LLVMBuildInBoundsGEP2(p->builder, i8, src, &index, 1, "") : src; + LLVMValueRef v = LLVMBuildLoad2(p->builder, LLVMIntTypeInContext(ctx, cast(unsigned)(8*n)), ptr, ""); + LLVMSetAlignment(v, lb_alignment_at_offset(src_alignment, offset, n)); + values [count] = v; + offsets[count] = offset; + sizes [count] = n; + count += 1; + offset += n; + } + for (isize i = 0; i < count; i++) { + LLVMValueRef index = LLVMConstInt(i64_type, offsets[i], false); + LLVMValueRef ptr = offsets[i] ? LLVMBuildInBoundsGEP2(p->builder, i8, dst, &index, 1, "") : dst; + LLVMValueRef s = LLVMBuildStore(p->builder, values[i], ptr); + LLVMSetAlignment(s, lb_alignment_at_offset(dst_alignment, offsets[i], sizes[i])); + } + return true; +} + gb_internal void lb_emit_store(lbProcedure *p, lbValue ptr, lbValue value) { GB_ASSERT(value.value != nullptr); @@ -1666,6 +1754,9 @@ gb_internal void lb_emit_store(lbProcedure *p, lbValue ptr, lbValue value) { GB_ASSERT_MSG(are_types_identical(a, value.type), "%s != %s", type_to_string(a), type_to_string(value.type)); } + if (lb_copies_aggregates_as_scalars(p) && lb_try_copy_loaded_aggregate(p, ptr.value, value.value)) { + return; + } instr = LLVMBuildStore(p->builder, value.value, ptr.value); } // LLVMSetVolatile(instr, p->in_multi_assignment); diff --git a/src/main.cpp b/src/main.cpp index 9d661bb16..aafd06ba9 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -1347,8 +1347,8 @@ gb_internal bool parse_build_flags(Array args) { GB_ASSERT(value.kind == ExactValue_String); String str = value.value_string; - if (build_context.command != "build") { - gb_printf_err("'build-mode' can only be used with the 'build' command\n"); + if (build_context.command != "build" && build_context.command != "test") { + gb_printf_err("'build-mode' can only be used with the 'build' and 'test' commands\n"); bad_flags = true; break; } @@ -4582,7 +4582,8 @@ end_of_code_gen:; show_import_graph(checker); } - if (run_output) { + // NOTE(bill): e.g. `odin test -build-mode:llvm-ir` only generates the tests + if (run_output && build_context.build_mode == BuildMode_Executable) { String exe_name = path_to_string(heap_allocator(), build_context.build_paths[BuildPath_Output]); defer (gb_free(heap_allocator(), exe_name.text)); From ff02184b2e0beebeb5d0bbc3ce86bf78e583d28f Mon Sep 17 00:00:00 2001 From: gingerBill Date: Fri, 2 Oct 2026 16:42:33 +0100 Subject: [PATCH 148/215] Fix #7708: compare a polymorphic record's constant parameters by value in `subst_unify` --- src/check_type.cpp | 5 +++++ tests/issues/run.bat | 2 ++ tests/issues/run.sh | 7 +++++++ 3 files changed, 14 insertions(+) diff --git a/src/check_type.cpp b/src/check_type.cpp index d04fbfe8e..8555140cc 100644 --- a/src/check_type.cpp +++ b/src/check_type.cpp @@ -2127,6 +2127,11 @@ gb_internal SubstResult subst_unify(CheckerContext *c, Type *pattern, Type *sour if (r != Subst_Matched) { return r; // NoMatch or Unhandled } + // e.g. `M(1, 1, $T)` vs `M(3, 3, f64)` + if (s_e->kind == Entity_Constant && t_e->kind == Entity_Constant && + !compare_exact_values(Token_CmpEq, s_e->Constant.value, t_e->Constant.value)) { + return Subst_NoMatch; + } } } return Subst_Matched; diff --git a/tests/issues/run.bat b/tests/issues/run.bat index 2c2004955..1c68c582d 100644 --- a/tests/issues/run.bat +++ b/tests/issues/run.bat @@ -84,6 +84,8 @@ clang -c ..\test_issue_sysv_abi.c -o test_issue_sysv_abi_c.o || exit /b ..\..\..\odin test ..\test_issue_7316.odin %COMMON% || exit /b ..\..\..\odin test ..\test_issue_7566.odin %COMMON% || exit /b ..\..\..\odin test ..\test_issue_poly_using_subtype.odin %COMMON% || exit /b +..\..\..\odin test ..\test_issue_7708.odin %COMMON% || exit /b +..\..\..\odin check ..\test_issue_7708_mismatch.odin %COMMON% 2>&1 | find /c "Error:" | findstr /x "2" || exit /b ..\..\..\odin test ..\test_issue_7587.odin %COMMON% || exit /b ..\..\..\odin run ..\test_issue_7596.odin %COMMON% || exit /b diff --git a/tests/issues/run.sh b/tests/issues/run.sh index fb50f87cd..e8912b635 100755 --- a/tests/issues/run.sh +++ b/tests/issues/run.sh @@ -105,6 +105,13 @@ $ODIN run ../test_issue_7564.odin $COMMON $ODIN test ../test_issue_7316.odin $COMMON $ODIN test ../test_issue_7566.odin $COMMON $ODIN test ../test_issue_poly_using_subtype.odin $COMMON +$ODIN test ../test_issue_7708.odin $COMMON +if [[ $($ODIN check ../test_issue_7708_mismatch.odin $COMMON_CHECK 2>&1 >/dev/null | grep -c "Error:") -eq 2 ]]; then + echo "SUCCESSFUL 1/1" +else + echo "SUCCESSFUL 0/1" + exit 1 +fi $ODIN test ../test_issue_7587.odin $COMMON $ODIN run ../test_issue_7596.odin $COMMON $ODIN test ../test_issue_7421.odin $COMMON From f0ac6c3fba70e6e5c8c1f33ea86ebf062c959c85 Mon Sep 17 00:00:00 2001 From: gingerBill Date: Fri, 2 Oct 2026 16:55:57 +0100 Subject: [PATCH 149/215] Fix #7700: constant `#soa` field access yields the per-element field array; compare and canonicalize typeid constants --- src/check_expr.cpp | 131 ++++++++++++++++++++++++++++++++++ src/exact_value.cpp | 1 + src/name_canonicalization.cpp | 4 ++ tests/issues/run.bat | 1 + tests/issues/run.sh | 1 + 5 files changed, 138 insertions(+) diff --git a/src/check_expr.cpp b/src/check_expr.cpp index fd01f8cf7..45fa8b7f7 100644 --- a/src/check_expr.cpp +++ b/src/check_expr.cpp @@ -5759,6 +5759,134 @@ gb_internal ExactValue get_constant_field_single(CheckerContext *c, ExactValue v +gb_internal Ast *constant_compound_elem_node(AstCompoundLit *cl, i64 index) { + if (cl->elems.count == 0) { + return nullptr; + } + if (cl->elems[0]->kind != Ast_FieldValue) { + return index < cl->elems.count ? cl->elems[index] : nullptr; + } + for (Ast *elem : cl->elems) { + ast_node(fv, FieldValue, elem); + if (is_ast_range(fv->field)) { + ast_node(ie, BinaryExpr, fv->field); + i64 lo = exact_value_to_i64(ie->left->tav.value); + i64 hi = exact_value_to_i64(ie->right->tav.value); + if (ie->op.kind != Token_RangeHalf) { + hi += 1; + } + if (lo <= index && index < hi) { + return fv->value; + } + } else if (fv->field->tav.mode == Addressing_Constant && exact_value_to_i64(fv->field->tav.value) == index) { + return fv->value; + } + } + return nullptr; +} + +gb_internal ExactValue get_constant_soa_field(Type *soa, ExactValue value, Selection sel, bool *success_) { + if (success_) *success_ = false; + + Type *elem = base_type(soa->Struct.soa_elem); + if (sel.index.count != 1 || soa->Struct.soa_kind != StructSoa_Fixed || + value.value_compound->kind != Ast_CompoundLit || + !(elem->kind == Type_Array || (elem->kind == Type_Struct && !elem->Struct.is_raw_union))) { + return empty_exact_value; + } + + i32 field_index = sel.index[0]; + Entity *field = soa->Struct.fields[field_index]; + + Type *field_elem_type = base_type(field->type)->Array.elem; + + isize count = soa->Struct.soa_count; + Ast *soa_node = value.value_compound; + + AstFile *f = soa_node->file(); + ast_node(cl, CompoundLit, soa_node); + + auto nodes = permanent_slice_make(count); + + isize last = -1; + bool has_gaps = false; + + for (isize i = 0; i < count; i++) { + Ast *en = constant_compound_elem_node(cl, i); + if (en == nullptr || en->tav.value.kind == ExactValue_Invalid) { + continue; + } + ExactValue ev = en->tav.value; + if (ev.kind != ExactValue_Compound || ev.value_compound->kind != Ast_CompoundLit) { + return empty_exact_value; + } + ast_node(ecl, CompoundLit, ev.value_compound); + + Ast *fn = nullptr; + if (elem->kind == Type_Struct && ecl->elems.count > 0 && ecl->elems[0]->kind == Ast_FieldValue) { + for (Ast *e : ecl->elems) { + ast_node(fv, FieldValue, e); + if (fv->field->kind == Ast_Ident && fv->field->Ident.token.string == field->token.string) { + fn = fv->value; + break; + } + } + } else { + fn = constant_compound_elem_node(ecl, field_index); + } + if (fn == nullptr) { + continue; + } + + ExactValue fvalue = fn->tav.value; + if (fn->tav.mode == Addressing_Type) { + fvalue = exact_value_typeid(fn->tav.type); + } + if (fvalue.kind == ExactValue_Invalid) { + continue; + } + + Ast *node = alloc_ast_node(nullptr, fn->kind); + gb_memmove(node, fn, ast_node_size(fn->kind)); + node->tav.mode = Addressing_Constant; + node->tav.type = field_elem_type; + node->tav.value = fvalue; + + nodes[i] = node; + has_gaps |= last+1 != i; + last = i; + } + + auto elems = array_make(permanent_allocator(), 0, last+1); + for (isize i = 0; i <= last; i++) { + if (!has_gaps) { + array_add(&elems, nodes[i]); + } else if (nodes[i] != nullptr) { + Token token = {Token_Integer}; + token.string = copy_string(permanent_allocator(), make_string_c(gb_bprintf("%td", i))); + token.pos = ast_token(nodes[i]).pos; + + Ast *index = alloc_ast_node(f, Ast_BasicLit); + index->BasicLit.token = token; + index->tav.mode = Addressing_Constant; + index->tav.type = t_untyped_integer; + index->tav.value = exact_value_i64(i); + + Token eq = {Token_Eq}; + eq.string = str_lit("="); + array_add(&elems, ast_field_value(f, index, nodes[i], eq)); + } + } + + Ast *result = ast_compound_lit(f, nullptr, elems, cl->open, cl->close); + result->tav.mode = Addressing_Constant; + result->tav.type = field->type; + result->tav.value = exact_value_compound(result); + + if (success_) *success_ = true; + return result->tav.value; +} + gb_internal ExactValue get_constant_field(CheckerContext *c, Operand const *operand, Selection sel, bool *success_) { if (operand->mode != Addressing_Constant) { if (success_) *success_ = false; @@ -5777,6 +5905,9 @@ gb_internal ExactValue get_constant_field(CheckerContext *c, Operand const *oper ExactValue value = operand->value; + if (value.kind == ExactValue_Compound && is_type_soa_struct(operand->type)) { + return get_constant_soa_field(base_type(operand->type), value, sel, success_); + } if (value.kind == ExactValue_Compound) { while (sel.index.count > 0) { i32 index = sel.index[0]; diff --git a/src/exact_value.cpp b/src/exact_value.cpp index e1266ff01..b2f855e25 100644 --- a/src/exact_value.cpp +++ b/src/exact_value.cpp @@ -823,6 +823,7 @@ gb_internal i32 exact_value_order(ExactValue const &v) { case ExactValue_Pointer: return 7; case ExactValue_Procedure: + case ExactValue_Typeid: return 8; default: diff --git a/src/name_canonicalization.cpp b/src/name_canonicalization.cpp index 12b1f23cf..46bf5fb31 100644 --- a/src/name_canonicalization.cpp +++ b/src/name_canonicalization.cpp @@ -571,6 +571,10 @@ gb_internal void write_canonical_exact_value(TypeWriter *w, ExactValue const &v) return; } } + if (v.kind == ExactValue_Typeid) { + write_type_to_canonical_string(w, v.value_typeid); + return; + } gbString s = exact_value_to_string(v, 1<<16); type_writer_append(w, s, gb_string_length(s)); gb_string_free(s); diff --git a/tests/issues/run.bat b/tests/issues/run.bat index 1c68c582d..a8d9a2b64 100644 --- a/tests/issues/run.bat +++ b/tests/issues/run.bat @@ -86,6 +86,7 @@ clang -c ..\test_issue_sysv_abi.c -o test_issue_sysv_abi_c.o || exit /b ..\..\..\odin test ..\test_issue_poly_using_subtype.odin %COMMON% || exit /b ..\..\..\odin test ..\test_issue_7708.odin %COMMON% || exit /b ..\..\..\odin check ..\test_issue_7708_mismatch.odin %COMMON% 2>&1 | find /c "Error:" | findstr /x "2" || exit /b +..\..\..\odin test ..\test_issue_7700.odin %COMMON% || exit /b ..\..\..\odin test ..\test_issue_7587.odin %COMMON% || exit /b ..\..\..\odin run ..\test_issue_7596.odin %COMMON% || exit /b diff --git a/tests/issues/run.sh b/tests/issues/run.sh index e8912b635..2d9b70b34 100755 --- a/tests/issues/run.sh +++ b/tests/issues/run.sh @@ -112,6 +112,7 @@ else echo "SUCCESSFUL 0/1" exit 1 fi +$ODIN test ../test_issue_7700.odin $COMMON $ODIN test ../test_issue_7587.odin $COMMON $ODIN run ../test_issue_7596.odin $COMMON $ODIN test ../test_issue_7421.odin $COMMON From a7f840408ed3786003f554af2560fb330ad2e24e Mon Sep 17 00:00:00 2001 From: gingerBill Date: Fri, 2 Oct 2026 17:01:44 +0100 Subject: [PATCH 150/215] Wait for the variants of a polymorphic union's instance before computing its size, alignment or tag, as it is found before they are checked, and laying out a struct containing it would otherwise treat it as empty --- src/types.cpp | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/src/types.cpp b/src/types.cpp index 40e608249..61e4082af 100644 --- a/src/types.cpp +++ b/src/types.cpp @@ -2063,9 +2063,14 @@ gb_internal bool is_type_map(Type *t) { return t->kind == Type_Map; } +gb_internal void wait_for_union_variants(Type *t); + gb_internal bool is_type_union_maybe_pointer(Type *t) { t = base_type(t); if (t == nullptr) { return false; } + if (t->kind == Type_Union) { + wait_for_union_variants(t); + } if (t->kind == Type_Union && t->Union.variants.count == 1) { Type *v = t->Union.variants[0]; return is_type_internally_pointer_like(v); @@ -2077,6 +2082,9 @@ gb_internal bool is_type_union_maybe_pointer(Type *t) { gb_internal bool is_type_union_maybe_pointer_original_alignment(Type *t) { t = base_type(t); if (t == nullptr) { return false; } + if (t->kind == Type_Union) { + wait_for_union_variants(t); + } if (t->kind == Type_Union && t->Union.variants.count == 1) { Type *v = t->Union.variants[0]; if (is_type_internally_pointer_like(v)) { @@ -3614,6 +3622,7 @@ gb_internal bool union_is_variant_of(Type *u, Type *v) { gb_internal i64 union_tag_size(Type *u) { u = base_type(u); GB_ASSERT(u->kind == Type_Union); + wait_for_union_variants(u); if (u->Union.tag_size > 0) { return u->Union.tag_size; } @@ -4453,6 +4462,14 @@ gb_internal void wait_for_struct_fields(Type *t) { } } +// NOTE(bill): a polymorphic union's instance is found before its variants are checked (see `check_union_type`), +// and until then, it has none, so its size, alignment and tag would be those of an empty union +gb_internal void wait_for_union_variants(Type *t) { + if (t->Union.polymorphic_parent != nullptr) { + wait_for_record_signal(&t->Union.variants_wait_signal, &t->Union.checking_thread); + } +} + gb_internal i64 type_align_of_internal(Type *t, TypePath *path) { GB_ASSERT(path != nullptr); if (t->failure) { @@ -4553,6 +4570,7 @@ gb_internal i64 type_align_of_internal(Type *t, TypePath *path) { return type_align_of_internal(t->Enum.base_type, path); case Type_Union: { + wait_for_union_variants(t); if (t->Union.variants.count == 0) { return 1; } @@ -4857,6 +4875,7 @@ gb_internal i64 type_size_of_internal(Type *t, TypePath *path) { return type_size_of_internal(t->Enum.base_type, path); case Type_Union: { + wait_for_union_variants(t); if (t->Union.variants.count == 0) { return 0; } From 1d3f982b50f160d17d4b99c0ea0ed8ccebcfd5bc Mon Sep 17 00:00:00 2001 From: gingerBill Date: Fri, 2 Oct 2026 17:10:03 +0100 Subject: [PATCH 151/215] Allow `intrinsics.procedure_of` on procedures without results or requiring a `context`; treat a specialized procedure's type as concrete --- src/check_builtin.cpp | 6 +- src/check_expr.cpp | 8 +-- src/checker.cpp | 4 +- src/checker.hpp | 1 + src/name_canonicalization.cpp | 6 +- src/types.cpp | 11 ++++ tests/issues/run.bat | 1 + tests/issues/run.sh | 1 + tests/issues/test_issue_7700.odin | 55 ++++++++++++++++ tests/issues/test_issue_7708.odin | 66 +++++++++++++++++++ tests/issues/test_issue_7708_mismatch.odin | 14 ++++ .../test_issue_procedure_of_specialized.odin | 55 ++++++++++++++++ 12 files changed, 218 insertions(+), 10 deletions(-) create mode 100644 tests/issues/test_issue_7700.odin create mode 100644 tests/issues/test_issue_7708.odin create mode 100644 tests/issues/test_issue_7708_mismatch.odin create mode 100644 tests/issues/test_issue_procedure_of_specialized.odin diff --git a/src/check_builtin.cpp b/src/check_builtin.cpp index 701de7a67..8de99553c 100644 --- a/src/check_builtin.cpp +++ b/src/check_builtin.cpp @@ -8518,8 +8518,12 @@ gb_internal bool check_builtin_procedure(CheckerContext *c, Operand *operand, As { Ast *call_expr = unparen_expr(ce->args[0]); Operand op = {}; + bool prev_in_procedure_of = c->in_procedure_of; + c->in_procedure_of = true; check_expr_base(c, &op, ce->args[0], nullptr); - if (op.mode != Addressing_Value || call_expr == nullptr || call_expr->kind != Ast_CallExpr) { + c->in_procedure_of = prev_in_procedure_of; + bool is_call_mode = op.mode == Addressing_Value || op.mode == Addressing_NoValue || op.mode == Addressing_OptionalOk; + if (!is_call_mode || call_expr == nullptr || call_expr->kind != Ast_CallExpr) { error(ce->args[0], "Expected a call expression for '%.*s'", LIT(builtin_name)); return false; } diff --git a/src/check_expr.cpp b/src/check_expr.cpp index 45fa8b7f7..a3bf9704f 100644 --- a/src/check_expr.cpp +++ b/src/check_expr.cpp @@ -4071,7 +4071,7 @@ gb_internal void check_cast(CheckerContext *c, Operand *x, Type *type, bool forb // identical casts that cannot be foreseen or otherwise // forbidden, so just skip them. if (forbid_identical && check_vet_flags(c) & VetFlag_Cast && - (c->curr_proc_sig == nullptr || !is_type_polymorphic(c->curr_proc_sig))) { + (c->curr_proc_sig == nullptr || !is_type_polymorphic_or_specialized_proc(c->curr_proc_sig))) { Type *src_exact = x->type; Type *dst_exact = type; @@ -4212,7 +4212,7 @@ gb_internal bool check_transmute(CheckerContext *c, Ast *node, Operand *o, Type // identical casts that cannot be foreseen or otherwise // forbidden, so just skip them. if (forbid_identical && check_vet_flags(c) & VetFlag_Cast && - (c->curr_proc_sig == nullptr || !is_type_polymorphic(c->curr_proc_sig)) && + (c->curr_proc_sig == nullptr || !is_type_polymorphic_or_specialized_proc(c->curr_proc_sig)) && check_is_castable_to(c, &src, dst_t)) { if (are_types_identical(src_t, dst_t)) { gbString oper_str = expr_to_string(o->expr); @@ -7977,7 +7977,7 @@ gb_internal CallArgumentData check_call_arguments_proc_group(CheckerContext *c, CheckerContext ctx = *c; ctx.no_polymorphic_errors = true; - ctx.allow_polymorphic_types = is_type_polymorphic(pt); + ctx.allow_polymorphic_types = is_type_polymorphic_or_specialized_proc(pt); ctx.hide_polymorphic_errors = true; bool is_a_candidate = check_call_arguments_single(&ctx, call, operand, @@ -9543,7 +9543,7 @@ gb_internal ExprKind check_call_expr(CheckerContext *c, Operand *operand, Ast *c } pt = base_type(pt); - if (pt->kind == Type_Proc && pt->Proc.calling_convention == ProcCC_Odin) { + if (pt->kind == Type_Proc && pt->Proc.calling_convention == ProcCC_Odin && !c->in_procedure_of) { if ((c->scope->flags & ScopeFlag_ContextDefined) == 0) { ERROR_BLOCK(); if (c->scope->flags & ScopeFlag_File) { diff --git a/src/checker.cpp b/src/checker.cpp index d9e5f208a..5b919d8a8 100644 --- a/src/checker.cpp +++ b/src/checker.cpp @@ -6826,8 +6826,8 @@ gb_internal void check_deferred_procedures(Checker *c) { continue; } - bool src_poly = is_type_polymorphic(src->type); - bool dst_poly = is_type_polymorphic(dst->type); + bool src_poly = is_type_polymorphic_or_specialized_proc(src->type); + bool dst_poly = is_type_polymorphic_or_specialized_proc(dst->type); if (dst_poly && !src_poly) { error(src->token, "A polymorphic deferred procedure '%.*s' requires the initial procedure '%.*s' to be polymorphic as well", LIT(dst->token.string), LIT(src->token.string)); continue; diff --git a/src/checker.hpp b/src/checker.hpp index 300395fb2..6c91c2b91 100644 --- a/src/checker.hpp +++ b/src/checker.hpp @@ -878,6 +878,7 @@ struct CheckerContext { u32 stmt_flags; bool in_enum_type; bool in_proc_group; + bool in_procedure_of; bool allow_polymorphic_types; bool disallow_polymorphic_return_types; // NOTE(zen3ger): no poly type decl in return types bool no_polymorphic_errors; diff --git a/src/name_canonicalization.cpp b/src/name_canonicalization.cpp index 46bf5fb31..c93c4fc8b 100644 --- a/src/name_canonicalization.cpp +++ b/src/name_canonicalization.cpp @@ -658,7 +658,7 @@ gb_internal void write_canonical_parent_prefix(TypeWriter *w, Entity *e) { Entity *p = e->parent_proc_decl.load(std::memory_order_relaxed)->entity; write_canonical_parent_prefix(w, p); type_writer_append(w, p->token.string.text, p->token.string.len); - if (is_type_polymorphic(p->type)) { + if (is_type_polymorphic_or_specialized_proc(p->type)) { type_writer_appendc(w, CANONICAL_TYPE_SEPARATOR); write_type_to_canonical_string(w, p->type); } @@ -688,7 +688,7 @@ gb_internal void write_canonical_parent_prefix(TypeWriter *w, Entity *e) { type_writer_append(w, e->token.string.text, e->token.string.len); } - if (is_type_polymorphic(e->type)) { + if (is_type_polymorphic_or_specialized_proc(e->type)) { type_writer_appendc(w, CANONICAL_TYPE_SEPARATOR); write_type_to_canonical_string(w, e->type); } @@ -828,7 +828,7 @@ write_base_name: case Entity_AsmTemplate: case Entity_Variable: type_writer_append(w, e->token.string.text, e->token.string.len); - if (is_type_polymorphic(e->type)) { + if (is_type_polymorphic_or_specialized_proc(e->type)) { type_writer_appendc(w, CANONICAL_TYPE_SEPARATOR); write_type_to_canonical_string(w, e->type); } diff --git a/src/types.cpp b/src/types.cpp index 40e608249..72210bbcf 100644 --- a/src/types.cpp +++ b/src/types.cpp @@ -2609,6 +2609,9 @@ gb_internal bool is_type_polymorphic(Type *t, bool or_specialized=false) { break; case Type_Proc: + if (t->Proc.is_poly_specialized) { + return or_specialized; + } if (t->Proc.is_polymorphic) { return true; } @@ -2680,6 +2683,14 @@ gb_internal bool is_type_polymorphic(Type *t, bool or_specialized=false) { return false; } +// e.g. to name a procedure after its specialization +gb_internal bool is_type_polymorphic_or_specialized_proc(Type *t) { + if (t != nullptr && t->kind == Type_Proc && t->Proc.is_poly_specialized) { + return true; + } + return is_type_polymorphic(t); +} + gb_internal bool type_has_nil(Type *t) { t = base_type(t); diff --git a/tests/issues/run.bat b/tests/issues/run.bat index a8d9a2b64..4beb41ee6 100644 --- a/tests/issues/run.bat +++ b/tests/issues/run.bat @@ -87,6 +87,7 @@ clang -c ..\test_issue_sysv_abi.c -o test_issue_sysv_abi_c.o || exit /b ..\..\..\odin test ..\test_issue_7708.odin %COMMON% || exit /b ..\..\..\odin check ..\test_issue_7708_mismatch.odin %COMMON% 2>&1 | find /c "Error:" | findstr /x "2" || exit /b ..\..\..\odin test ..\test_issue_7700.odin %COMMON% || exit /b +..\..\..\odin test ..\test_issue_procedure_of_specialized.odin %COMMON% || exit /b ..\..\..\odin test ..\test_issue_7587.odin %COMMON% || exit /b ..\..\..\odin run ..\test_issue_7596.odin %COMMON% || exit /b diff --git a/tests/issues/run.sh b/tests/issues/run.sh index 2d9b70b34..89ccbc2bd 100755 --- a/tests/issues/run.sh +++ b/tests/issues/run.sh @@ -113,6 +113,7 @@ else exit 1 fi $ODIN test ../test_issue_7700.odin $COMMON +$ODIN test ../test_issue_procedure_of_specialized.odin $COMMON $ODIN test ../test_issue_7587.odin $COMMON $ODIN run ../test_issue_7596.odin $COMMON $ODIN test ../test_issue_7421.odin $COMMON diff --git a/tests/issues/test_issue_7700.odin b/tests/issues/test_issue_7700.odin new file mode 100644 index 000000000..aac7dbf5c --- /dev/null +++ b/tests/issues/test_issue_7700.odin @@ -0,0 +1,55 @@ +// Tests issue #7700 https://github.com/odin-lang/Odin/issues/7700 +// A field of a constant `#soa` array is the array of that field of each element +package test_issues + +import "base:intrinsics" +import "core:fmt" +import "core:testing" + +Field :: struct { name: string, type: typeid, n: int } + +F1 :: Field{"x", int, 7} + +STUFF :: #soa[3]Field{{"i", i64, 1}, {"f", f64, 2}, {"p", rawptr, 3}} +NAMED :: #soa[3]Field{{name = "a"}, {type = f32, n = 2}, {name = "c", type = bool}} +GAPS :: #soa[4]Field{1 = {"b", u8, 1}, 3 = {"d", u16, 3}} +RANGES :: #soa[4]Field{0..<2 = {"r", i8, 5}, 3 = F1} +VECS :: #soa[3][2]f32{{1, 2}, {3, 4}, {5, 6}} + +Strings :: struct($strings: [3]string) {} +Types :: struct($types: [3]typeid) {} + +strings_proc :: proc($s: [3]string) -> [3]string { return s } +types_proc :: proc($t: [3]typeid) -> [3]typeid { return t } + +#assert(STUFF.name[1] == "f") +#assert(STUFF.n[2] == 3) +#assert(Types(STUFF.type) == Types([3]typeid{i64, f64, rawptr})) +#assert(Types([3]typeid{i64, f64, rawptr}) != Types([3]typeid{int, int, int})) + +@(test) +test_issue_7700 :: proc(t: ^testing.T) { + testing.expect_value(t, fmt.tprint(typeid_of(Strings(STUFF.name))), `Strings($strings={"i", "f", "p"})`) + testing.expect_value(t, fmt.tprint(typeid_of(Types(STUFF.type))), `Types($types={i64, f64, rawptr})`) + testing.expect_value(t, intrinsics.type_canonical_name(Strings(STUFF.name)), `test_issues::Strings(strings:$${"i","f","p"})`) + testing.expect_value(t, intrinsics.type_canonical_name(Types(STUFF.type)), `test_issues::Types(types:$${i64,f64,rawptr})`) + + testing.expect_value(t, STUFF.name, [3]string{"i", "f", "p"}) + testing.expect_value(t, STUFF.type, [3]typeid{i64, f64, rawptr}) + testing.expect_value(t, STUFF.n, [3]int{1, 2, 3}) + testing.expect_value(t, strings_proc(STUFF.name), [3]string{"i", "f", "p"}) + testing.expect_value(t, types_proc(STUFF.type), [3]typeid{i64, f64, rawptr}) + + testing.expect_value(t, NAMED.name, [3]string{"a", "", "c"}) + testing.expect_value(t, NAMED.type, [3]typeid{nil, f32, bool}) + testing.expect_value(t, NAMED.n, [3]int{0, 2, 0}) + + testing.expect_value(t, GAPS.name, [4]string{"", "b", "", "d"}) + testing.expect_value(t, GAPS.type, [4]typeid{nil, u8, nil, u16}) + + testing.expect_value(t, RANGES.name, [4]string{"r", "r", "", "x"}) + testing.expect_value(t, RANGES.n, [4]int{5, 5, 0, 7}) + + testing.expect_value(t, VECS.x, [3]f32{1, 3, 5}) + testing.expect_value(t, VECS.y, [3]f32{2, 4, 6}) +} diff --git a/tests/issues/test_issue_7708.odin b/tests/issues/test_issue_7708.odin new file mode 100644 index 000000000..e0ce853b6 --- /dev/null +++ b/tests/issues/test_issue_7708.odin @@ -0,0 +1,66 @@ +// Tests issue #7708 https://github.com/odin-lang/Odin/issues/7708 +// A record's concrete constant parameters must match, e.g. `M(1, 1, $T)` does not take a `M(3, 3, f64)` +package test_issues + +import "core:testing" + +M :: struct($R, $C: int, $T: typeid) { data: [C][R]T } + +m11 :: proc(m: M(1, 1, $T)) -> int { return 11 } +m33 :: proc(m: M(3, 3, $T)) -> int { return 33 } +m_group :: proc{m11, m33} + +m_forward :: proc(m: M($R, $C, $T)) -> int { return m_group(m) } + +c11 :: proc(m: $X/M(1, 1, $T)) -> int { return 11 } +c33 :: proc(m: $X/M(3, 3, $T)) -> int { return 33 } +c_group :: proc{c11, c33} + +p11 :: proc(m: ^M(1, 1, $T)) -> int { return 11 } +p33 :: proc(m: ^M(3, 3, $T)) -> int { return 33 } +p_group :: proc{p11, p33} + +Kind :: enum { A, B } +E :: struct($K: Kind, $T: typeid) { x: T } +ea :: proc(e: E(.A, $T)) -> int { return 1 } +eb :: proc(e: E(.B, $T)) -> int { return 2 } +e_group :: proc{ea, eb} + +S :: struct($N: string, $T: typeid) { x: T } +sa :: proc(s: S("a", $T)) -> int { return 1 } +sb :: proc(s: S("b", $T)) -> int { return 2 } +s_group :: proc{sa, sb} + +U :: union($N: int, $T: typeid) { [N]T } +u1 :: proc(u: U(1, $T)) -> int { return 1 } +u2 :: proc(u: U(2, $T)) -> int { return 2 } +u_group :: proc{u1, u2} + +@(test) +test_issue_7708 :: proc(t: ^testing.T) { + a: M(1, 1, i32) + b: M(3, 3, f64) + testing.expect_value(t, m_group(a), 11) + testing.expect_value(t, m_group(b), 33) + testing.expect_value(t, m_forward(a), 11) + testing.expect_value(t, m_forward(b), 33) + testing.expect_value(t, c_group(a), 11) + testing.expect_value(t, c_group(b), 33) + testing.expect_value(t, p_group(&a), 11) + testing.expect_value(t, p_group(&b), 33) + + ea_: E(.A, int) + eb_: E(.B, int) + testing.expect_value(t, e_group(ea_), 1) + testing.expect_value(t, e_group(eb_), 2) + + sa_: S("a", int) + sb_: S("b", int) + testing.expect_value(t, s_group(sa_), 1) + testing.expect_value(t, s_group(sb_), 2) + + u1_: U(1, int) + u2_: U(2, int) + testing.expect_value(t, u_group(u1_), 1) + testing.expect_value(t, u_group(u2_), 2) +} diff --git a/tests/issues/test_issue_7708_mismatch.odin b/tests/issues/test_issue_7708_mismatch.odin new file mode 100644 index 000000000..cc812b3a2 --- /dev/null +++ b/tests/issues/test_issue_7708_mismatch.odin @@ -0,0 +1,14 @@ +// Tests issue #7708 https://github.com/odin-lang/Odin/issues/7708 +// A record argument whose constant parameters differ from the parameter's must be rejected +package test_issues + +M :: struct($R, $C: int, $T: typeid) { data: [C][R]T } + +m11 :: proc(m: M(1, 1, $T)) -> int { return 11 } +c11 :: proc(m: $X/M(1, 1, $T)) -> int { return 11 } + +main :: proc() { + m: M(3, 3, f64) + _ = m11(m) + _ = c11(m) +} diff --git a/tests/issues/test_issue_procedure_of_specialized.odin b/tests/issues/test_issue_procedure_of_specialized.odin new file mode 100644 index 000000000..cdd888f4a --- /dev/null +++ b/tests/issues/test_issue_procedure_of_specialized.odin @@ -0,0 +1,55 @@ +// `intrinsics.procedure_of` of a polymorphic call: procedures without results, any calling convention, +// and the specialized procedure is a concrete value usable through `type_of` +package test_issues + +import "base:intrinsics" +import "core:fmt" +import "core:testing" + +without_return :: proc "contextless" ($i: int) {} +without_return_1 :: intrinsics.procedure_of(without_return(1)) + +with_return :: proc "contextless" ($i: int) -> int { return i } +with_return_1 :: intrinsics.procedure_of(with_return(1)) +with_return_1_type :: type_of(with_return_1) + +contextfull :: proc($i: int) -> int { return i } +global_contextfull_1 :: intrinsics.procedure_of(contextfull(1)) + +double :: proc(x: $T) -> T { return x * 2 } +double_int :: intrinsics.procedure_of(double(int(0))) +double_f32 :: intrinsics.procedure_of(double(f32(0))) + +Holder :: struct { + f: type_of(double_int), + g: [2]type_of(double_f32), +} + +@(test) +test_procedure_of_specialized :: proc(t: ^testing.T) { + main_contextfull_2 :: intrinsics.procedure_of(contextfull(2)) + + without_return_1() + testing.expect_value(t, with_return_1(), 1) + testing.expect_value(t, global_contextfull_1(), 1) + testing.expect_value(t, main_contextfull_2(), 2) + + f: with_return_1_type = with_return_1 + testing.expect_value(t, f(), 1) + + g := double_int + testing.expect_value(t, g(21), 42) + testing.expect(t, type_of(double_int) != type_of(double_f32)) + + h := Holder{double_int, {double_f32, double_f32}} + testing.expect_value(t, h.f(4), 8) + testing.expect_value(t, h.g[1](1.5), 3) + + fs: [dynamic]type_of(double_int) + defer delete(fs) + append(&fs, double_int) + testing.expect_value(t, fs[0](5), 10) + + testing.expect_value(t, fmt.tprint(typeid_of(type_of(double_int))), "proc(int) -> int") + testing.expect(t, fmt.tprint(double_int) != "") +} From 63d28377bbb00d1d20cab80e8a2bf8808789db0c Mon Sep 17 00:00:00 2001 From: gingerBill Date: Fri, 2 Oct 2026 17:22:15 +0100 Subject: [PATCH 152/215] Pass a copy of a value within a packed struct to a procedure by reference when its address is not known to be aligned to its type, and lower the alignment of loads and stores to that known from the GEPs leading to their address --- src/llvm_backend_general.cpp | 92 ++++++++++++++++++- src/llvm_backend_utility.cpp | 12 ++- tests/issues/run.bat | 1 + tests/issues/run.sh | 1 + .../test_issue_packed_field_by_value.odin | 31 +++++++ 5 files changed, 132 insertions(+), 5 deletions(-) create mode 100644 tests/issues/test_issue_packed_field_by_value.odin diff --git a/src/llvm_backend_general.cpp b/src/llvm_backend_general.cpp index d7a663e53..937bd1db7 100644 --- a/src/llvm_backend_general.cpp +++ b/src/llvm_backend_general.cpp @@ -1221,6 +1221,86 @@ gb_internal bool lb_try_vector_cast(lbModule *m, lbValue ptr, LLVMTypeRef *vecto return false; } +gb_internal u64 lb_gcd_u64(u64 a, u64 b) { + while (b != 0) { + u64 t = a % b; + a = b; + b = t; + } + return a; +} + +gb_internal u64 lb_known_address_alignment(lbModule *m, LLVMValueRef ptr, u64 assumed) { + // NOTE(bill): The alignment an address is known to have from the GEPs leading to it: within a local or a global, that + // of its offset from it, and none beyond a field of a packed struct, or that a struct caps its fields to, as marked on + // the GEP of the field. Of an address within anything else, it is `assumed`, i.e. that of the type it points to. + + LLVMTargetDataRef td = LLVMGetModuleDataLayout(m->mod); + u64 offsets = 0; + for (isize depth = 0; ptr != nullptr && depth < 64; depth++) { + if (LLVMIsAAllocaInst(ptr) || LLVMIsAGlobalVariable(ptr)) { + u64 base = LLVMGetAlignment(ptr); + if (base == 0) { + base = LLVMABIAlignmentOfType(td, LLVMIsAAllocaInst(ptr) ? LLVMGetAllocatedType(ptr) : LLVMGlobalGetValueType(ptr)); + } + return offsets ? lb_gcd_u64(base, offsets) : base; + } + + bool is_instruction = LLVMIsAGetElementPtrInst(ptr) != nullptr; + if (!is_instruction && !(LLVMIsAConstantExpr(ptr) && LLVMGetConstOpcode(ptr) == LLVMGetElementPtr)) { + break; + } + if (is_instruction) { + if (lb_get_metadata_custom_u64(m, ptr, ODIN_METADATA_IS_PACKED)) { + return 1; + } + u64 max_align = lb_get_metadata_custom_u64(m, ptr, ODIN_METADATA_MAX_ALIGN); + if (max_align != 0) { + assumed = gb_min(assumed, max_align); + } + } + + LLVMTypeRef t = LLVMGetGEPSourceElementType(ptr); + unsigned index_count = LLVMGetNumIndices(ptr); + for (unsigned i = 0; i < index_count; i++) { + LLVMValueRef index = LLVMGetOperand(ptr, i+1); + u64 stride = 0; + if (i == 0) { + stride = LLVMABISizeOfType(td, t); + } else if (LLVMGetTypeKind(t) == LLVMStructTypeKind) { + if (!LLVMIsAConstantInt(index)) { + return 1; + } + unsigned field = cast(unsigned)LLVMConstIntGetZExtValue(index); + offsets = lb_gcd_u64(offsets, LLVMOffsetOfElement(td, t, field)); + t = LLVMStructGetTypeAtIndex(t, field); + continue; + } else if (LLVMGetTypeKind(t) == LLVMArrayTypeKind || LLVMGetTypeKind(t) == LLVMVectorTypeKind) { + t = LLVMGetElementType(t); + stride = LLVMABISizeOfType(td, t); + } else { + return 1; + } + if (LLVMIsAConstantInt(index)) { + i64 k = LLVMConstIntGetSExtValue(index); + offsets = lb_gcd_u64(offsets, cast(u64)(k < 0 ? -k : k) * stride); + } else { + offsets = lb_gcd_u64(offsets, stride); + } + } + ptr = LLVMGetOperand(ptr, 0); + } + return offsets ? lb_gcd_u64(assumed, offsets) : assumed; +} + +gb_internal void lb_lower_store_alignment_to_known(lbProcedure *p, LLVMValueRef store, LLVMValueRef ptr) { + u64 align = LLVMGetAlignment(store); + u64 known = lb_known_address_alignment(p->module, ptr, align); + if (known < align) { + LLVMSetAlignment(store, cast(unsigned)known); + } +} + gb_internal LLVMValueRef OdinLLVMBuildLoad(lbProcedure *p, LLVMTypeRef type, LLVMValueRef value) { LLVMValueRef result = LLVMBuildLoad2(p->builder, type, value, ""); @@ -1244,6 +1324,12 @@ gb_internal LLVMValueRef OdinLLVMBuildLoad(lbProcedure *p, LLVMTypeRef type, LLV LLVMSetAlignment(result, (unsigned int)align); } + u64 align = LLVMGetAlignment(result); + u64 known = lb_known_address_alignment(p->module, value, align); + if (known < align) { + LLVMSetAlignment(result, cast(unsigned)known); + } + return result; } @@ -1692,7 +1778,8 @@ gb_internal void lb_emit_store(lbProcedure *p, lbValue ptr, lbValue value) { } else if (is_type_bit_set(a)) { lb_mem_zero_ptr(p, ptr.value, a, 1); } else if (lb_sizeof(src_t) <= lb_max_zero_init_size()) { - LLVMBuildStore(p->builder, LLVMConstNull(src_t), ptr.value); + LLVMValueRef store = LLVMBuildStore(p->builder, LLVMConstNull(src_t), ptr.value); + lb_lower_store_alignment_to_known(p, store, ptr.value); } else { lb_mem_zero_ptr(p, ptr.value, a, 1); } @@ -1759,6 +1846,9 @@ gb_internal void lb_emit_store(lbProcedure *p, lbValue ptr, lbValue value) { } instr = LLVMBuildStore(p->builder, value.value, ptr.value); } + if (instr != nullptr) { + lb_lower_store_alignment_to_known(p, instr, ptr.value); + } // LLVMSetVolatile(instr, p->in_multi_assignment); } diff --git a/src/llvm_backend_utility.cpp b/src/llvm_backend_utility.cpp index 430677aa3..3a9a74415 100644 --- a/src/llvm_backend_utility.cpp +++ b/src/llvm_backend_utility.cpp @@ -995,10 +995,14 @@ gb_internal lbAddr lb_find_or_generate_context_ptr(lbProcedure *p) { gb_internal lbValue lb_address_from_load_or_generate_local(lbProcedure *p, lbValue value) { if (!p->in_multi_assignment && LLVMIsALoadInst(value.value)) { - lbValue res = {}; - res.value = LLVMGetOperand(value.value, 0); - res.type = alloc_type_pointer(value.type); - return res; + LLVMValueRef ptr = LLVMGetOperand(value.value, 0); + u64 align = cast(u64)type_align_of(value.type); + if (lb_known_address_alignment(p->module, ptr, align) >= align) { + lbValue res = {}; + res.value = ptr; + res.type = alloc_type_pointer(value.type); + return res; + } } GB_ASSERT(is_type_typed(value.type)); diff --git a/tests/issues/run.bat b/tests/issues/run.bat index 443028dc5..157b50a6f 100644 --- a/tests/issues/run.bat +++ b/tests/issues/run.bat @@ -85,6 +85,7 @@ clang -c ..\test_issue_sysv_abi.c -o test_issue_sysv_abi_c.o || exit /b ..\..\..\odin test ..\test_issue_7566.odin %COMMON% || exit /b ..\..\..\odin test ..\test_issue_poly_using_subtype.odin %COMMON% || exit /b ..\..\..\odin test ..\test_issue_global_proc_lits.odin %COMMON% || exit /b +..\..\..\odin test ..\test_issue_packed_field_by_value.odin %COMMON% || exit /b ..\..\..\odin test ..\test_issue_7587.odin %COMMON% || exit /b ..\..\..\odin run ..\test_issue_7596.odin %COMMON% || exit /b diff --git a/tests/issues/run.sh b/tests/issues/run.sh index a1ad01264..58619a6af 100755 --- a/tests/issues/run.sh +++ b/tests/issues/run.sh @@ -106,6 +106,7 @@ $ODIN test ../test_issue_7316.odin $COMMON $ODIN test ../test_issue_7566.odin $COMMON $ODIN test ../test_issue_poly_using_subtype.odin $COMMON $ODIN test ../test_issue_global_proc_lits.odin $COMMON +$ODIN test ../test_issue_packed_field_by_value.odin $COMMON $ODIN test ../test_issue_7587.odin $COMMON $ODIN run ../test_issue_7596.odin $COMMON $ODIN test ../test_issue_7421.odin $COMMON diff --git a/tests/issues/test_issue_packed_field_by_value.odin b/tests/issues/test_issue_packed_field_by_value.odin new file mode 100644 index 000000000..247f250a9 --- /dev/null +++ b/tests/issues/test_issue_packed_field_by_value.odin @@ -0,0 +1,31 @@ +// A value within a packed struct, passed to a procedure by reference, is passed by an address as aligned as its type +package test_issues + +import "core:testing" + +Packed_Field_S :: struct { x: union { int, string }, y: u128 } +Packed_Field_P :: struct #packed { pad: u8, s: Packed_Field_S, arr: [2]Packed_Field_S } + +// the address a value parameter is passed by +packed_field_address :: proc(s: Packed_Field_S) -> uintptr { + a: any = s + return uintptr(a.data) +} + +packed_field_global: Packed_Field_P + +@(test) +test_packed_field_by_value :: proc(t: ^testing.T) { + p := Packed_Field_P{s = {x = 1, y = 2}, arr = {{x = 3}, {x = "four", y = 5}}} + packed_field_global = p + + A :: align_of(Packed_Field_S) + testing.expect_value(t, packed_field_address(p.s) % A, 0) + testing.expect_value(t, packed_field_address(p.arr[1]) % A, 0) + testing.expect_value(t, packed_field_address(packed_field_global.s) % A, 0) + testing.expect_value(t, packed_field_address(packed_field_global.arr[1]) % A, 0) + + testing.expect_value(t, p.s, Packed_Field_S{x = 1, y = 2}) + testing.expect_value(t, p.arr[1], Packed_Field_S{x = "four", y = 5}) + testing.expect_value(t, packed_field_global.arr[0], Packed_Field_S{x = 3}) +} From 3b8e53a991f201fc7495876521e6ba04f4ac2418 Mon Sep 17 00:00:00 2001 From: Louis Novy <101842021+louisnovy@users.noreply.github.com> Date: Fri, 2 Oct 2026 13:39:33 -0400 Subject: [PATCH 153/215] Handle globals initialized with the address of a non constant literal --- src/llvm_backend_expr.cpp | 4 ++- tests/issues/run.bat | 1 + tests/issues/run.sh | 1 + .../test_issue_global_address_of_literal.odin | 36 +++++++++++++++++++ 4 files changed, 41 insertions(+), 1 deletion(-) create mode 100644 tests/issues/test_issue_global_address_of_literal.odin diff --git a/src/llvm_backend_expr.cpp b/src/llvm_backend_expr.cpp index f7096b795..acb1a8ca0 100644 --- a/src/llvm_backend_expr.cpp +++ b/src/llvm_backend_expr.cpp @@ -4365,7 +4365,9 @@ gb_internal lbValue lb_build_unary_and(lbProcedure *p, Ast *expr) { Type *type = v.type; lbAddr addr = {}; if (p->is_startup) { - addr = lb_add_global_generated_from_procedure(p, type, v); + // NOTE: only a constant can be the global's initializer, any other value is written by the store below + lbValue initializer = LLVMIsConstant(v.value) ? v : lbValue{}; + addr = lb_add_global_generated_from_procedure(p, type, initializer); } else { addr = lb_add_local_generated(p, type, false); } diff --git a/tests/issues/run.bat b/tests/issues/run.bat index d01507e36..812952fbb 100644 --- a/tests/issues/run.bat +++ b/tests/issues/run.bat @@ -44,6 +44,7 @@ set COMMON=-define:ODIN_TEST_FANCY=false -file -vet -strict-style -ignore-unused ..\..\..\odin test ..\test_issue_6951_5214.odin %COMMON% || exit /b ..\..\..\odin check ..\test_issue_6979.odin -no-entry-point %COMMON% || exit /b ..\..\..\odin test ..\test_issue_7008.odin %COMMON% || exit /b +..\..\..\odin test ..\test_issue_global_address_of_literal.odin %COMMON% || exit /b ..\..\..\odin check ..\test_issue_7012.odin -no-entry-point %COMMON% || exit /b ..\..\..\odin check ..\test_issue_7260.odin -no-entry-point %COMMON% || exit /b ..\..\..\odin test ..\test_issue_bool_to_be_conversion.odin %COMMON% || exit /b diff --git a/tests/issues/run.sh b/tests/issues/run.sh index 4302577d5..95e06f526 100755 --- a/tests/issues/run.sh +++ b/tests/issues/run.sh @@ -97,6 +97,7 @@ fi $ODIN test ../test_issue_6951_5214.odin $COMMON $ODIN check ../test_issue_6979.odin -no-entry-point $COMMON_CHECK $ODIN test ../test_issue_7008.odin $COMMON +$ODIN test ../test_issue_global_address_of_literal.odin $COMMON $ODIN check ../test_issue_7012.odin -no-entry-point $COMMON_CHECK $ODIN build ../test_issue_7037.odin $COMMON -o:none $ODIN test ../test_issue_7477_7506.odin $COMMON diff --git a/tests/issues/test_issue_global_address_of_literal.odin b/tests/issues/test_issue_global_address_of_literal.odin new file mode 100644 index 000000000..041bacaca --- /dev/null +++ b/tests/issues/test_issue_global_address_of_literal.odin @@ -0,0 +1,36 @@ +// A global initialized with the address of a compound literal used to crash the backend +// if the literal's value was not a constant. +package test_issues + +import "core:testing" + +Holder :: struct { target: ^int } +Outer :: struct { inner: ^Inner } +Inner :: struct { value: int } +Type :: struct { variant: union { Array_Type } } +Array_Type :: struct { elem: ^Type } + +initial_value :: proc "contextless" () -> int { return 42 } + +number := 7 + +address_of_global := &Holder{target = &number} // https://github.com/odin-lang/Odin/issues/4337 +nested_literal := &Outer{inner = &Inner{value = 3}} // https://github.com/odin-lang/Odin/issues/5950 +value_from_call := &Inner{value = initial_value()} // https://github.com/odin-lang/Odin/issues/3995 +union_variant := &Type{variant = Array_Type{}} // https://github.com/odin-lang/Odin/issues/7197 +dynamic_array := &[dynamic]int{} // https://github.com/odin-lang/Odin/issues/7640 + +@(test) +global_address_of_literal :: proc(t: ^testing.T) { + testing.expect(t, address_of_global.target == &number) + testing.expect_value(t, address_of_global.target^, 7) + testing.expect_value(t, nested_literal.inner.value, 3) + testing.expect_value(t, value_from_call.value, 42) + + _, is_array := union_variant.variant.(Array_Type) + testing.expect(t, is_array) + + append(dynamic_array, 1) + defer delete(dynamic_array^) + testing.expect_value(t, len(dynamic_array), 1) +} From 735b2c706016665965406825c4ebd634cd2a6619 Mon Sep 17 00:00:00 2001 From: gingerBill Date: Fri, 2 Oct 2026 22:49:26 +0100 Subject: [PATCH 154/215] Pass a copy of a packed struct's field by reference when it may be under-aligned; lower load and store alignment to that known --- src/llvm_backend.hpp | 9 +++++++++ src/llvm_backend_general.cpp | 3 +++ src/llvm_backend_utility.cpp | 19 +++++++++++++++++-- 3 files changed, 29 insertions(+), 2 deletions(-) diff --git a/src/llvm_backend.hpp b/src/llvm_backend.hpp index eb93b7919..961c2bda7 100644 --- a/src/llvm_backend.hpp +++ b/src/llvm_backend.hpp @@ -108,6 +108,11 @@ struct lbPadType { LLVMTypeRef type; }; +struct NamedMetaDataKind { + String name; + unsigned kind; +}; + struct lbModule { LLVMModuleRef mod; LLVMContextRef ctx; @@ -124,6 +129,9 @@ struct lbModule { AstFile *file; // possibly associated char const *module_name; + NamedMetaDataKind metadata_kinds[4]; + isize metadata_kind_count; + PtrMap types; // mutex: types_mutex PtrMap struct_field_remapping; // Key: LLVMTypeRef or Type *, mutex: types_mutex PtrMap func_raw_types; // mutex: func_raw_types_mutex @@ -651,6 +659,7 @@ gb_internal lbValue lb_make_string_value(lbProcedure *p, Type *string_type, lbVa gb_internal String lb_internal_gen_name_from_type(char const *prefix, Type *type); +gb_internal unsigned lb_metadata_kind(lbModule *m, String const &name); gb_internal void lb_set_metadata_custom_u64(lbModule *m, LLVMValueRef v_ref, String name, u64 value); gb_internal u64 lb_get_metadata_custom_u64(lbModule *m, LLVMValueRef v_ref, String name); diff --git a/src/llvm_backend_general.cpp b/src/llvm_backend_general.cpp index 937bd1db7..a8f31afdf 100644 --- a/src/llvm_backend_general.cpp +++ b/src/llvm_backend_general.cpp @@ -93,6 +93,9 @@ gb_internal WORKER_TASK_PROC(lb_init_module_worker_proc) { m->module_name = module_name; m->ctx = LLVMContextCreate(); + lb_metadata_kind(m, ODIN_METADATA_IS_PACKED); + lb_metadata_kind(m, ODIN_METADATA_MIN_ALIGN); + lb_metadata_kind(m, ODIN_METADATA_MAX_ALIGN); LLVMContextSetDiagnosticHandler(m->ctx, lb_llvm_diagnostic_handler, nullptr); m->mod = LLVMModuleCreateWithNameInContext(m->module_name, m->ctx); // m->debug_builder = nullptr; diff --git a/src/llvm_backend_utility.cpp b/src/llvm_backend_utility.cpp index 3a9a74415..19b203e3c 100644 --- a/src/llvm_backend_utility.cpp +++ b/src/llvm_backend_utility.cpp @@ -59,14 +59,29 @@ gb_internal lbValue lb_correct_endianness(lbProcedure *p, lbValue value) { } +gb_internal unsigned lb_metadata_kind(lbModule *m, String const &name) { + for (isize i = 0; i < m->metadata_kind_count; i++) { + if (m->metadata_kinds[i].name == name) { + return m->metadata_kinds[i].kind; + } + } + unsigned kind = LLVMGetMDKindIDInContext(m->ctx, cast(char const *)name.text, cast(unsigned)name.len); + if (m->metadata_kind_count < gb_count_of(m->metadata_kinds)) { + m->metadata_kinds[m->metadata_kind_count].name = name; + m->metadata_kinds[m->metadata_kind_count].kind = kind; + m->metadata_kind_count += 1; + } + return kind; +} + gb_internal void lb_set_metadata_custom_u64(lbModule *m, LLVMValueRef v_ref, String name, u64 value) { - unsigned md_id = LLVMGetMDKindIDInContext(m->ctx, cast(char const *)name.text, cast(unsigned)name.len); + unsigned md_id = lb_metadata_kind(m, name); LLVMMetadataRef md = LLVMValueAsMetadata(LLVMConstInt(lb_type(m, t_u64), value, false)); LLVMValueRef node = LLVMMetadataAsValue(m->ctx, LLVMMDNodeInContext2(m->ctx, &md, 1)); LLVMSetMetadata(v_ref, md_id, node); } gb_internal u64 lb_get_metadata_custom_u64(lbModule *m, LLVMValueRef v_ref, String name) { - unsigned md_id = LLVMGetMDKindIDInContext(m->ctx, cast(char const *)name.text, cast(unsigned)name.len); + unsigned md_id = lb_metadata_kind(m, name); LLVMValueRef v_md = LLVMGetMetadata(v_ref, md_id); if (v_md == nullptr) { return 0; From c628768c5efc54fdfa37e9c99ddcbfc9acf10c90 Mon Sep 17 00:00:00 2001 From: gingerBill Date: Fri, 2 Oct 2026 23:11:13 +0100 Subject: [PATCH 155/215] Strip constant parameters from specialized procedure types; fix calling a parenthesized polymorphic callee --- src/check_expr.cpp | 83 +++++++++++++++---- src/checker.cpp | 9 +- src/llvm_backend_proc.cpp | 15 +++- src/llvm_backend_stmt.cpp | 12 +-- src/name_canonicalization.cpp | 12 +-- .../issues/test_issue_paren_poly_callee.odin | 23 +++++ 6 files changed, 126 insertions(+), 28 deletions(-) create mode 100644 tests/issues/test_issue_paren_poly_callee.odin diff --git a/src/check_expr.cpp b/src/check_expr.cpp index a3bf9704f..6aedd7d17 100644 --- a/src/check_expr.cpp +++ b/src/check_expr.cpp @@ -532,6 +532,42 @@ gb_internal u64 proc_type_identity_hash(Type *t) { return h; } +gb_internal Type *strip_poly_specialized_proc_type(Type *full) { + TypeProc *fp = &full->Proc; + auto vars = array_make(permanent_allocator(), 0, fp->param_count); + i32 variadic_index = -1; + if (fp->params != nullptr) { + for_array(i, fp->params->Tuple.variables) { + Entity *e = fp->params->Tuple.variables[i]; + if (e->kind != Entity_Variable) { + continue; + } + if (fp->variadic && i == fp->variadic_index) { + variadic_index = cast(i32)vars.count; + } + array_add(&vars, e); + } + } + Type *params = nullptr; + if (vars.count > 0) { + params = alloc_type_tuple(); + params->Tuple.variables = slice_from_array(vars); + } + + Type *t = alloc_type_proc(fp->scope, params, vars.count, fp->results, fp->result_count, false, fp->calling_convention); + t->Proc.variadic = fp->variadic; + t->Proc.variadic_index = variadic_index; + t->Proc.require_results = fp->require_results; + t->Proc.c_vararg = fp->c_vararg; + t->Proc.has_named_results = fp->has_named_results; + t->Proc.diverging = fp->diverging; + t->Proc.return_by_pointer = fp->return_by_pointer; + t->Proc.optional_ok = fp->optional_ok; + t->Proc.enable_target_feature = fp->enable_target_feature; + t->Proc.require_target_feature = fp->require_target_feature; + return t; +} + // Reuse an existing generated specialization `other`, scheduling its body if unchecked. // Caller must have released gen_procs->mutex first. gb_internal bool reuse_gen_polymorphic_procedure(Checker *checker, Entity *other, Ast *poly_def_node, PolyProcData *poly_proc_data) { @@ -545,7 +581,7 @@ gb_internal bool reuse_gen_polymorphic_procedure(Checker *checker, Entity *other proc_info->file = other->file; proc_info->token = other->token; proc_info->decl = decl; - proc_info->type = other->type; + proc_info->type = proc_entity_full_type(other); proc_info->body = decl->proc_lit->ProcLit.body; proc_info->tags = other->Procedure.tags; proc_info->generated_from_polymorphic = true; @@ -580,7 +616,7 @@ gb_internal bool find_or_generate_polymorphic_procedure(CheckerContext *old_c, E String name = base_entity->token.string; - Type *src = base_type(base_entity->type); + Type *src = base_type(proc_entity_full_type(base_entity)); Type *dst = nullptr; if (type != nullptr) { dst = base_type(type); @@ -596,7 +632,7 @@ gb_internal bool find_or_generate_polymorphic_procedure(CheckerContext *old_c, E if (!src->Proc.is_polymorphic || src->Proc.is_poly_specialized) { // NOTE: polymorphic procedure check not idempotent without this if (src->Proc.is_poly_specialized && base_entity->Procedure.generated_from_polymorphic) { - if (are_types_identical(src, dst)) { + if (are_types_identical(src, dst) || are_types_identical(base_type(base_entity->type), dst)) { if (poly_proc_data) { poly_proc_data->gen_entity = base_entity; } @@ -688,7 +724,7 @@ gb_internal bool find_or_generate_polymorphic_procedure(CheckerContext *old_c, E continue; } Entity *other = gen_procs->procs[i]; - Type *pt = base_type(other->type); + Type *pt = base_type(proc_entity_full_type(other)); if (are_types_identical(pt, final_proc_type)) { rw_mutex_shared_unlock(&gen_procs->mutex); // @local-mutex @@ -734,7 +770,7 @@ gb_internal bool find_or_generate_polymorphic_procedure(CheckerContext *old_c, E continue; } Entity *other = gen_procs->procs[i]; - Type *pt = base_type(other->type); + Type *pt = base_type(proc_entity_full_type(other)); if (are_types_identical(pt, final_proc_type)) { rw_mutex_shared_unlock(&gen_procs->mutex); // @local-mutex return reuse_gen_polymorphic_procedure(nctx.checker, other, poly_def_node, poly_proc_data); @@ -750,7 +786,7 @@ gb_internal bool find_or_generate_polymorphic_procedure(CheckerContext *old_c, E rw_mutex_lock(&gen_procs->mutex); // @local-mutex for_array(i, gen_procs->procs) { Entity *other = gen_procs->procs[i]; - if (gen_procs->hashes[i] == final_hash && are_types_identical(base_type(other->type), final_proc_type)) { + if (gen_procs->hashes[i] == final_hash && are_types_identical(base_type(proc_entity_full_type(other)), final_proc_type)) { rw_mutex_unlock(&gen_procs->mutex); // @local-mutex return reuse_gen_polymorphic_procedure(nctx.checker, other, poly_def_node, poly_proc_data); } @@ -795,7 +831,11 @@ gb_internal bool find_or_generate_polymorphic_procedure(CheckerContext *old_c, E d->defer_use_checked = false; d->para_poly_original = old_decl->entity; - Entity *entity = alloc_entity_procedure(nullptr, token, final_proc_type, tags); + Type *entity_type = final_proc_type; + if (final_proc_type->Proc.is_poly_specialized) { + entity_type = strip_poly_specialized_proc_type(final_proc_type); + } + Entity *entity = alloc_entity_procedure(nullptr, token, entity_type, tags); entity->state.store(EntityState_Resolved); entity->identifier = ident; @@ -7310,9 +7350,9 @@ gb_internal CallArgumentError check_call_arguments_internal(CheckerContext *c, A PolyProcData poly_proc_data = {}; if (find_or_generate_polymorphic_procedure_from_parameters(c, entity, &ordered_operands, call, &poly_proc_data)) { gen_entity = poly_proc_data.gen_entity; - Type *gept = base_type(gen_entity->type); + Type *gept = base_type(proc_entity_full_type(gen_entity)); GB_ASSERT(is_type_proc(gept)); - final_proc_type = gen_entity->type; + final_proc_type = proc_entity_full_type(gen_entity); pt = &gept->Proc; } else { @@ -7656,7 +7696,8 @@ gb_internal bool check_call_arguments_single(CheckerContext *c, Ast *call, Opera bool return_on_failure = show_error_mode == CallArgumentErrorMode::NoErrors; - Ast *ident = operand->expr; + Ast *callee = unparen_expr(operand->expr); + Ast *ident = callee; while (ident->kind == Ast_SelectorExpr) { Ast *s = ident->SelectorExpr.selector; ident = s; @@ -7670,6 +7711,7 @@ gb_internal bool check_call_arguments_single(CheckerContext *c, Ast *call, Opera } GB_ASSERT(proc_type != nullptr); + Type *checked_type = proc_type; proc_type = base_type(proc_type); if (proc_type == t_invalid) { return false; @@ -7683,9 +7725,20 @@ gb_internal bool check_call_arguments_single(CheckerContext *c, Ast *call, Opera Entity *entity_to_use = data->gen_entity != nullptr ? data->gen_entity : e; if (!return_on_failure && entity_to_use != nullptr) { + // a specializing call's arguments include its constant parameters + Type *callee_type = entity_to_use->type; + if (data->gen_entity != nullptr) { + callee_type = proc_entity_full_type(data->gen_entity); + } else if (proc_type->Proc.is_poly_specialized) { + callee_type = checked_type; + } add_entity_use(c, ident, entity_to_use); - update_untyped_expr_type(c, operand->expr, entity_to_use->type, true); - add_type_and_value(c, operand->expr, operand->mode, entity_to_use->type, operand->value); + update_untyped_expr_type(c, operand->expr, callee_type, true); + add_type_and_value(c, operand->expr, operand->mode, callee_type, operand->value); + if (callee != operand->expr) { + // e.g. `(foo)(x)`, as the backend calls through the unparenthesized callee + add_type_and_value(c, callee, operand->mode, callee_type, operand->value); + } } if (data->gen_entity != nullptr) { @@ -7708,7 +7761,7 @@ gb_internal bool check_call_arguments_single(CheckerContext *c, Ast *call, Opera } else { decl->where_clauses_evaluated = true; if (ok && (data->gen_entity->flags & EntityFlag_ProcBodyChecked) == 0) { - check_procedure_later(c->checker, e->file, e->token, decl, e->type, decl->proc_lit->ProcLit.body, decl->proc_lit->ProcLit.tags); + check_procedure_later(c->checker, e->file, e->token, decl, proc_entity_full_type(e), decl->proc_lit->ProcLit.body, decl->proc_lit->ProcLit.tags); } if (is_type_proc(data->gen_entity->type)) { Type *t = base_type(entity_to_use->type); @@ -8635,9 +8688,11 @@ gb_internal CallArgumentData check_call_arguments_proc_group(CheckerContext *c, Entity *e = proc_entities[valids[0].index]; GB_ASSERT(e != nullptr); + // an entity generated by this call takes the arguments of its full signature + Type *e_type = valids[0].index >= procs.count ? proc_entity_full_type(e) : e->type; check_call_arguments_single(c, call, operand, - e, e->type, + e, e_type, positional_operands, named_operands, CallArgumentErrorMode::ShowErrors, &data, false); diff --git a/src/checker.cpp b/src/checker.cpp index 5b919d8a8..dea5f0a01 100644 --- a/src/checker.cpp +++ b/src/checker.cpp @@ -1906,6 +1906,13 @@ gb_internal DeclInfo *decl_info_of_entity(Entity *e) { return nullptr; } +gb_internal Type *proc_entity_full_type(Entity *e) { + if (e->kind == Entity_Procedure && e->decl_info != nullptr && e->decl_info->gen_proc_type != nullptr) { + return e->decl_info->gen_proc_type; + } + return e->type; +} + // gb_internal DeclInfo *decl_info_of_ident(Ast *ident) { // return decl_info_of_entity(entity_of_node(ident)); // } @@ -6402,7 +6409,7 @@ gb_internal void check_procedure_later_from_entity(Checker *c, Entity *e, char c pi->file = e->file; pi->token = e->token; pi->decl = e->decl_info; - pi->type = e->type; + pi->type = proc_entity_full_type(e); Ast *pl = e->decl_info->proc_lit; GB_ASSERT(pl != nullptr); diff --git a/src/llvm_backend_proc.cpp b/src/llvm_backend_proc.cpp index 902a43e36..a135904d9 100644 --- a/src/llvm_backend_proc.cpp +++ b/src/llvm_backend_proc.cpp @@ -894,7 +894,7 @@ gb_internal void lb_build_nested_proc(lbProcedure *p, AstProcLit *pd, Entity *e) i32 guid = e->token.pos.offset; if (e->decl_info != nullptr && e->decl_info->para_poly_original != nullptr) { name_len = gb_snprintf(name_text, name_len, "%.*s" ABI_PKG_NAME_SEPARATOR "%.*s-%d-%llx", LIT(p->name), LIT(pd_name), guid, - cast(unsigned long long)type_hash_canonical_type(e->type)); + cast(unsigned long long)type_hash_canonical_type(proc_entity_full_type(e))); } else { name_len = gb_snprintf(name_text, name_len, "%.*s" ABI_PKG_NAME_SEPARATOR "%.*s-%d", LIT(p->name), LIT(pd_name), guid); } @@ -1403,7 +1403,12 @@ gb_internal lbValue lb_emit_call(lbProcedure *p, lbValue value, Array c bool by_ptr = false; - auto in_args = args; + auto in_args = array_make(permanent_allocator(), 0, args.count); + for_array(i, args) { + if (i >= pt->Proc.param_count || pt->Proc.params->Tuple.variables[i]->kind == Entity_Variable) { + array_add(&in_args, args[i]); + } + } Array result_as_args = {}; switch (kind) { case DeferredProcedure_none: @@ -5192,6 +5197,12 @@ gb_internal lbValue lb_build_call_expr_internal(lbProcedure *p, Ast *expr, lbVal } } + Type *callee_type = proc_expr->tav.type; + if (value.value != nullptr && callee_type != nullptr && callee_type != value.type && + is_type_proc(callee_type) && base_type(callee_type)->Proc.is_poly_specialized) { + value.type = callee_type; + proc_value_type = callee_type; + } GB_ASSERT(value.value != nullptr || is_objc_call || asm_template != nullptr); Type *proc_type_ = base_type(proc_value_type); diff --git a/src/llvm_backend_stmt.cpp b/src/llvm_backend_stmt.cpp index e8a86ce8b..025de69ad 100644 --- a/src/llvm_backend_stmt.cpp +++ b/src/llvm_backend_stmt.cpp @@ -3,18 +3,20 @@ // NOTE(bill): Orders entities by their canonical type gb_internal i32 lb_entity_type_cmp(Entity *x, Entity *y) { - if (x->type == y->type || x->type == nullptr || y->type == nullptr) { + Type *xt = proc_entity_full_type(x); + Type *yt = proc_entity_full_type(y); + if (xt == yt || xt == nullptr || yt == nullptr) { return 0; } - u64 hx = type_hash_canonical_type(x->type); - u64 hy = type_hash_canonical_type(y->type); + u64 hx = type_hash_canonical_type(xt); + u64 hy = type_hash_canonical_type(yt); if (hx != hy) { return hx < hy ? -1 : +1; } // NOTE(bill): Polymorphic instances share their declaration's token, so this is what tells them apart deterministically TEMPORARY_ALLOCATOR_GUARD(); - return string_compare(type_to_canonical_string(temporary_allocator(), x->type), - type_to_canonical_string(temporary_allocator(), y->type)); + return string_compare(type_to_canonical_string(temporary_allocator(), xt), + type_to_canonical_string(temporary_allocator(), yt)); } gb_internal GB_COMPARE_PROC(lb_polymorphic_instance_cmp) { diff --git a/src/name_canonicalization.cpp b/src/name_canonicalization.cpp index c93c4fc8b..a8ed42a8d 100644 --- a/src/name_canonicalization.cpp +++ b/src/name_canonicalization.cpp @@ -658,9 +658,9 @@ gb_internal void write_canonical_parent_prefix(TypeWriter *w, Entity *e) { Entity *p = e->parent_proc_decl.load(std::memory_order_relaxed)->entity; write_canonical_parent_prefix(w, p); type_writer_append(w, p->token.string.text, p->token.string.len); - if (is_type_polymorphic_or_specialized_proc(p->type)) { + if (is_type_polymorphic_or_specialized_proc(proc_entity_full_type(p))) { type_writer_appendc(w, CANONICAL_TYPE_SEPARATOR); - write_type_to_canonical_string(w, p->type); + write_type_to_canonical_string(w, proc_entity_full_type(p)); } type_writer_appendc(w, CANONICAL_NAME_SEPARATOR); @@ -688,9 +688,9 @@ gb_internal void write_canonical_parent_prefix(TypeWriter *w, Entity *e) { type_writer_append(w, e->token.string.text, e->token.string.len); } - if (is_type_polymorphic_or_specialized_proc(e->type)) { + if (is_type_polymorphic_or_specialized_proc(proc_entity_full_type(e))) { type_writer_appendc(w, CANONICAL_TYPE_SEPARATOR); - write_type_to_canonical_string(w, e->type); + write_type_to_canonical_string(w, proc_entity_full_type(e)); } type_writer_appendc(w, CANONICAL_NAME_SEPARATOR); @@ -828,9 +828,9 @@ write_base_name: case Entity_AsmTemplate: case Entity_Variable: type_writer_append(w, e->token.string.text, e->token.string.len); - if (is_type_polymorphic_or_specialized_proc(e->type)) { + if (is_type_polymorphic_or_specialized_proc(proc_entity_full_type(e))) { type_writer_appendc(w, CANONICAL_TYPE_SEPARATOR); - write_type_to_canonical_string(w, e->type); + write_type_to_canonical_string(w, proc_entity_full_type(e)); } break; diff --git a/tests/issues/test_issue_paren_poly_callee.odin b/tests/issues/test_issue_paren_poly_callee.odin new file mode 100644 index 000000000..e2ef45e5c --- /dev/null +++ b/tests/issues/test_issue_paren_poly_callee.odin @@ -0,0 +1,23 @@ +// Calling a polymorphic procedure through a parenthesized callee, e.g. `(foo)(x)` +package test_issues + +import "core:testing" + +@(private="file") +double :: proc(x: $T) -> T { return x * 2 } +@(private="file") +splat :: proc($N: int, x: $T) -> [N]T { return x } + +@(test) +test_paren_poly_callee :: proc(t: ^testing.T) { + testing.expect_value(t, (double)(int(2)), 4) + testing.expect_value(t, ((double))(f32(1.5)), 3) + testing.expect_value(t, (splat)(2, i32(3)), [2]i32{3, 3}) + + big := (splat)(16, f64(1)) + testing.expect_value(t, big[15], 1) + + s := (make)([]int, 3) + defer delete(s) + testing.expect_value(t, len(s), 3) +} From a7ded94e529cfbae1e03a6a3be7f517e989d109f Mon Sep 17 00:00:00 2001 From: gingerBill Date: Fri, 2 Oct 2026 23:15:43 +0100 Subject: [PATCH 156/215] Begin the costliest modules first in each backend stage; run function passes in parallel with `-debug`; spread the instances of oversized modules over further modules; trim comments --- src/llvm_backend.cpp | 69 ++++++++++----- src/llvm_backend.hpp | 12 +-- src/llvm_backend_general.cpp | 159 +++++++++++++++++++++++++++++++---- src/main.cpp | 1 - src/types.cpp | 2 - 5 files changed, 199 insertions(+), 44 deletions(-) diff --git a/src/llvm_backend.cpp b/src/llvm_backend.cpp index 5822b549a..fb128c363 100644 --- a/src/llvm_backend.cpp +++ b/src/llvm_backend.cpp @@ -2213,7 +2213,6 @@ gb_internal void lb_create_startup_runtime_generate_body(lbModule *m, lbProcedur lb_init_global_var(m, p, e, init_expr, var); } - // NOTE(bill): a block per global, as instruction selection is superlinear in the size of a block lbBlock *next = lb_create_block(p, "global.init", true); lb_emit_jump(p, next); lb_start_block(p, next); @@ -2469,6 +2468,8 @@ gb_internal void lb_llvm_function_pass_per_function_internal(lbModule *module, l lb_run_function_pass_manager(pass_manager, p, pass_manager_kind); } +gb_internal i64 lb_module_cost(lbModule *m); + gb_internal WORKER_TASK_PROC(lb_llvm_function_pass_per_module) { lbModule *m = cast(lbModule *)data; { @@ -2529,6 +2530,7 @@ gb_internal WORKER_TASK_PROC(lb_llvm_function_pass_per_module) { } } + m->estimated_cost = lb_module_cost(m); return 0; } @@ -2644,6 +2646,37 @@ gb_internal WORKER_TASK_PROC(lb_llvm_module_pass_worker_proc) { +gb_internal Array lb_modules_by_cost(lbGenerator *gen) { + auto modules = array_make(temporary_allocator(), 0, gen->modules.count); + for (auto const &entry : gen->modules) { + array_add(&modules, entry.value); + } + array_sort(modules, [](void const *a, void const *b) -> int { + lbModule *x = *cast(lbModule **)a; + lbModule *y = *cast(lbModule **)b; + if (x->estimated_cost != y->estimated_cost) { + return x->estimated_cost > y->estimated_cost ? -1 : +1; + } + return gb_strcmp(x->module_name, y->module_name); + }); + return modules; +} + +gb_internal i64 lb_module_cost(lbModule *m) { + i64 cost = 0; + for (LLVMValueRef f = LLVMGetFirstFunction(m->mod); f != nullptr; f = LLVMGetNextFunction(f)) { + for (LLVMBasicBlockRef b = LLVMGetFirstBasicBlock(f); b != nullptr; b = LLVMGetNextBasicBlock(b)) { + for (LLVMValueRef i = LLVMGetFirstInstruction(b); i != nullptr; i = LLVMGetNextInstruction(i)) { + cost += 1; + } + } + } + for (LLVMValueRef g = LLVMGetFirstGlobal(m->mod); g != nullptr; g = LLVMGetNextGlobal(g)) { + cost += 1; + } + return cost; +} + gb_internal WORKER_TASK_PROC(lb_generate_procedures_worker_proc) { lbModule *m = cast(lbModule *)data; for (lbProcedure *p = nullptr; mpsc_dequeue(&m->procedures_to_generate, &p); /**/) { @@ -2656,6 +2689,9 @@ gb_internal void lb_generate_procedures(lbGenerator *gen, bool do_threading) { if (do_threading) { for (auto const &entry : gen->modules) { lbModule *m = entry.value; + m->estimated_cost = m->procedures_to_generate.count.load(std::memory_order_relaxed); + } + for (lbModule *m : lb_modules_by_cost(gen)) { thread_pool_add_task(lb_generate_procedures_worker_proc, m); } @@ -2729,8 +2765,7 @@ gb_internal void lb_debug_info_complete_types_and_finalize(lbGenerator *gen) { gb_internal void lb_llvm_function_passes(lbGenerator *gen, bool do_threading) { if (do_threading) { - for (auto const &entry : gen->modules) { - lbModule *m = entry.value; + for (lbModule *m : lb_modules_by_cost(gen)) { thread_pool_add_task(lb_llvm_function_pass_per_module, m); } thread_pool_wait(); @@ -2747,8 +2782,7 @@ gb_internal void lb_llvm_function_passes(lbGenerator *gen, bool do_threading) { gb_internal void lb_llvm_module_passes_and_verification(lbGenerator *gen, bool do_threading) { if (do_threading) { - for (auto const &entry : gen->modules) { - lbModule *m = entry.value; + for (lbModule *m : lb_modules_by_cost(gen)) { auto wd = permanent_alloc_item(); wd->m = m; wd->target_machine = m->target_machine; @@ -2884,16 +2918,17 @@ gb_internal bool lb_llvm_object_generation(lbGenerator *gen, bool do_threading) if (lb_is_module_empty(m)) { continue; } - - String filepath_ll = lb_filepath_ll_for_module(m); - String filepath_obj = lb_filepath_obj_for_module(m); - array_add(&gen->output_object_paths, filepath_obj); - array_add(&gen->output_temp_paths, filepath_ll); - + array_add(&gen->output_object_paths, lb_filepath_obj_for_module(m)); + array_add(&gen->output_temp_paths, lb_filepath_ll_for_module(m)); + } + for (lbModule *m : lb_modules_by_cost(gen)) { + if (lb_is_module_empty(m)) { + continue; + } auto *wd = permanent_alloc_item(); wd->target_machine = m->target_machine; wd->code_gen_file_type = code_gen_file_type; - wd->filepath_obj = filepath_obj; + wd->filepath_obj = lb_filepath_obj_for_module(m); wd->m = m; thread_pool_add_task(lb_llvm_emit_worker_proc, wd); } @@ -3126,10 +3161,6 @@ gb_internal void lb_generate_procedure(lbModule *m, lbProcedure *p) { array_add(&m->generated_procedures, p); } -// NOTE(bill): Each module is verified once its procedures are generated, rather than each procedure as it is -// generated. Verifying a procedure on its own walks every constant which uses it, which for one referenced by the -// type info (e.g. `__$equal`) is all of the type info. Only on a failure are its procedures verified on their own, -// to report which ones are invalid. gb_internal WORKER_TASK_PROC(lb_verify_generated_procedures_worker_proc) { lbModule *m = cast(lbModule *)data; if (!LLVMVerifyModule(m->mod, LLVMReturnStatusAction, nullptr)) { @@ -3146,9 +3177,7 @@ gb_internal void lb_verify_generated_procedures(lbGenerator *gen, bool do_thread if (LLVM_IGNORE_VERIFICATION) { return; } - for (auto const &entry : gen->modules) { - lbModule *m = entry.value; - // NOTE(bill): with debug information, its procedures were never verified on their own, only the module after its passes + for (lbModule *m : lb_modules_by_cost(gen)) { if (m->debug_builder != nullptr) { continue; } @@ -3813,7 +3842,7 @@ gb_internal bool lb_generate_code(lbGenerator *gen) { lb_verify_generated_procedures(gen, do_threading); TIME_SECTION("LLVM Function Pass"); - lb_llvm_function_passes(gen, do_threading && !build_context.ODIN_DEBUG); + lb_llvm_function_passes(gen, do_threading); TIME_SECTION("LLVM Remove Unused Functions and Globals"); lb_remove_unused_functions_and_globals(gen); diff --git a/src/llvm_backend.hpp b/src/llvm_backend.hpp index 961c2bda7..02808aecc 100644 --- a/src/llvm_backend.hpp +++ b/src/llvm_backend.hpp @@ -125,13 +125,16 @@ struct lbModule { lbModule *polymorphic_module; CheckerInfo *info; - AstPackage *pkg; // possibly associated - AstFile *file; // possibly associated - char const *module_name; + AstPackage * pkg; // possibly associated + AstFile * file; // possibly associated + char const * module_name; NamedMetaDataKind metadata_kinds[4]; isize metadata_kind_count; + i64 estimated_cost; + i32 split_part; + PtrMap types; // mutex: types_mutex PtrMap struct_field_remapping; // Key: LLVMTypeRef or Type *, mutex: types_mutex PtrMap func_raw_types; // mutex: func_raw_types_mutex @@ -211,14 +214,13 @@ struct lbGenerator : LinkerData { PtrMap modules; // key is `AstPackage *` (`void *` is used for future use) PtrMap modules_through_ctx; - PtrMap file_modules; // NOTE(bill): of the files of a package which is split into several modules + PtrMap file_modules; lbModule default_module; lbModule *equal_module; isize used_module_count; - // NOTE(bill): set once the modules are generated in parallel, after which a module may only be added to by its own thread bool modules_in_parallel; lbProcedure *startup_runtime; diff --git a/src/llvm_backend_general.cpp b/src/llvm_backend_general.cpp index a8f31afdf..fd9964529 100644 --- a/src/llvm_backend_general.cpp +++ b/src/llvm_backend_general.cpp @@ -90,6 +90,9 @@ gb_internal WORKER_TASK_PROC(lb_init_module_worker_proc) { } module_name = gb_string_appendc(module_name, "$parapoly"); } + if (m->split_part > 0) { + module_name = gb_string_append_fmt(module_name, "$%d", m->split_part); + } m->module_name = module_name; m->ctx = LLVMContextCreate(); @@ -188,8 +191,6 @@ gb_internal void lb_init_module(lbModule *m, bool do_threading) { } } -// NOTE(bill): an estimate of the code generated for each file: the size of the bodies of its procedures which are used, -// polymorphic instances included as each is generated with its procedure's file gb_internal i64 lb_estimate_file_code_sizes(CheckerInfo *info, PtrMap *sizes) { i64 total = 0; for (Entity *e : info->entities) { @@ -247,7 +248,7 @@ gb_internal void lb_split_package_into_modules(lbGenerator *gen, Checker *c, Ast group->pkg = pkg; group->gen = gen; group->checker = c; - map_set(&gen->modules, cast(void *)group, group); // point to itself just add it to the list + map_set(&gen->modules, cast(void *)group, group); lb_init_module(group, do_threading); if (LLVM_WEAK_MONOMORPHIZATION) { @@ -269,6 +270,139 @@ gb_internal void lb_split_package_into_modules(lbGenerator *gen, Checker *c, Ast } } +gb_internal lbModule *lb_module_of_file(lbGenerator *gen, AstFile *file) { + lbModule **found = map_get(&gen->modules, cast(void *)file); + if (found == nullptr) { + found = map_get(&gen->file_modules, file); + } + if (found == nullptr && file->pkg != nullptr) { + found = map_get(&gen->modules, cast(void *)file->pkg); + } + return found ? *found : &gen->default_module; +} + +gb_internal GB_COMPARE_PROC(llvm_global_entity_cmp); + +struct lbInstanceSize { + Entity *e; + i64 size; +}; + +gb_internal void lb_split_instances_into_modules(lbGenerator *gen, Checker *c, PtrMap *file_sizes, i64 share, bool do_threading) { + PtrMap module_sizes = {}; + map_init(&module_sizes); + defer (map_destroy(&module_sizes)); + for (auto const &entry : gen->info->packages) { + for (AstFile *f : entry.value->files) { + i64 *size = map_get(file_sizes, f); + lbModule *m = lb_module_of_file(gen, f); + i64 *total = map_get(&module_sizes, m); + if (total) { + *total += size ? *size : 0; + } else { + map_set(&module_sizes, m, size ? *size : 0); + } + } + } + + PtrMap module_instances = {}; + map_init(&module_instances); + defer (map_destroy(&module_instances)); + auto instances = array_make>(heap_allocator()); + defer ({ + for (auto &list : instances) { + array_free(&list); + } + array_free(&instances); + }); + auto modules = array_make(heap_allocator()); + defer (array_free(&modules)); + + for (Entity *e : gen->info->entities) { + if (e->kind != Entity_Procedure || !e->Procedure.generated_from_polymorphic || e->file == nullptr || + e->min_dep_count.load(std::memory_order_relaxed) == 0) { + continue; + } + if (e->scope == nullptr || (e->scope->flags & ScopeFlag_File) == 0) { + continue; + } + DeclInfo *d = e->decl_info; + if (d == nullptr || d->proc_lit == nullptr || d->proc_lit->kind != Ast_ProcLit || d->proc_lit->ProcLit.body == nullptr) { + continue; + } + lbModule *m = lb_module_of_file(gen, e->file); + i64 *total = map_get(&module_sizes, m); + if (total == nullptr || *total <= share + share/2) { + continue; + } + Ast *body = d->proc_lit->ProcLit.body; + i64 size = gb_max(cast(i64)(ast_end_token(body).pos.offset - ast_token(body).pos.offset), 1); + + isize *index = map_get(&module_instances, m); + if (index == nullptr) { + map_set(&module_instances, m, instances.count); + array_add(&instances, array_make(heap_allocator())); + array_add(&modules, m); + index = map_get(&module_instances, m); + } + array_add(&instances[*index], lbInstanceSize{e, size}); + } + + for_array(i, modules) { + lbModule *m = modules[i]; + auto &list = instances[i]; + i64 total = *map_get(&module_sizes, m); + i64 instances_size = 0; + for (auto const &inst : list) { + instances_size += inst.size; + } + + isize part_count = cast(isize)((total + share - 1) / share); + if (part_count < 2) { + continue; + } + array_sort(list, [](void const *a, void const *b) -> int { + lbInstanceSize const *x = cast(lbInstanceSize const *)a; + lbInstanceSize const *y = cast(lbInstanceSize const *)b; + if (x->size != y->size) { + return x->size > y->size ? -1 : +1; + } + return llvm_global_entity_cmp(&x->e, &y->e); + }); + + auto parts = array_make(heap_allocator(), part_count); + auto loads = array_make(heap_allocator(), part_count); + defer (array_free(&parts)); + defer (array_free(&loads)); + parts[0] = m; + loads[0] = gb_max(total - instances_size, 0); + for (isize k = 1; k < part_count; k++) { + lbModule *pm = permanent_alloc_item(); + pm->file = m->file; + pm->pkg = m->pkg; + pm->gen = gen; + pm->checker = c; + pm->split_part = cast(i32)k; + map_set(&gen->modules, cast(void *)pm, pm); + lb_init_module(pm, do_threading); + parts[k] = pm; + } + + for (auto const &inst : list) { + isize best = 0; + for (isize k = 1; k < part_count; k++) { + if (loads[k] < loads[best]) { + best = k; + } + } + loads[best] += inst.size; + if (best != 0) { + inst.e->decl_info->code_gen_module.store(parts[best], std::memory_order_relaxed); + } + } + } +} + gb_internal bool lb_init_generator(lbGenerator *gen, Checker *c) { if (global_error_collector.count != 0) { return false; @@ -294,9 +428,6 @@ gb_internal bool lb_init_generator(lbGenerator *gen, Checker *c) { if (USE_SEPARATE_MODULES) { bool module_per_file = build_context.module_per_file && (build_context.optimization_level <= 0 || build_context.lto_kind != LTO_None); - // NOTE(bill): A package with much more code than an even share of all of it is generated in several modules - // of contiguous files, as each module is generated by one thread. The share does not depend on the number of - // threads, so neither do the modules. PtrMap file_sizes = {}; map_init(&file_sizes, 1024); i64 share = gb_max(lb_estimate_file_code_sizes(gen->info, &file_sizes) / 32, 1); @@ -381,6 +512,10 @@ gb_internal bool lb_init_generator(lbGenerator *gen, Checker *c) { } } + if (!LLVM_WEAK_MONOMORPHIZATION) { + lb_split_instances_into_modules(gen, c, &file_sizes, share, do_threading); + } + if (LLVM_WEAK_MONOMORPHIZATION) { lbModule *m = permanent_alloc_item(); gen->equal_module = m; @@ -1234,9 +1369,6 @@ gb_internal u64 lb_gcd_u64(u64 a, u64 b) { } gb_internal u64 lb_known_address_alignment(lbModule *m, LLVMValueRef ptr, u64 assumed) { - // NOTE(bill): The alignment an address is known to have from the GEPs leading to it: within a local or a global, that - // of its offset from it, and none beyond a field of a packed struct, or that a struct caps its fields to, as marked on - // the GEP of the field. Of an address within anything else, it is `assumed`, i.e. that of the type it points to. LLVMTargetDataRef td = LLVMGetModuleDataLayout(m->mod); u64 offsets = 0; @@ -1674,10 +1806,7 @@ gb_internal bool lb_is_type_proc_recursive(Type *t) { } } -// NOTE(bill): LLVM's fast instruction selector cannot select an aggregate load or store, and for one falls back to its -// slow instruction selection for all of the block before it, which is superlinear in its size. When the passes do not -// split the aggregates of a procedure first (SROA), a copy of a loaded aggregate is made of integers instead, all loaded -// before any is stored, as the aggregate is. +// LLVM's fast instruction selector cannot select an aggregate load or store // Oh, how do I love LLVM /s gb_internal bool lb_copies_aggregates_as_scalars(lbProcedure *p) { return p->is_startup || build_context.optimization_level < 0; @@ -1707,7 +1836,6 @@ gb_internal bool lb_try_copy_loaded_aggregate(lbProcedure *p, LLVMValueRef dst, return false; } - // NOTE(bill): the memory loaded must not have been written to since LLVMBasicBlockRef block = LLVMGetInsertBlock(p->builder); if (block == nullptr || LLVMGetInstructionParent(load) != block) { return false; @@ -3961,8 +4089,7 @@ gb_internal lbValue lb_generate_anonymous_proc_lit(lbModule *m, String const &pr e->scope = e->file->scope; lbModule *target_module = m; - // NOTE(bill): a literal reached whilst generating the initializations of the globals (in the default module) is - // generated in its own package's module, which may only be added to before the modules are generated in parallel + // another module may only be added to before the modules are generated in parallel if (m == &gen->default_module && parent == nullptr && !gen->modules_in_parallel) { target_module = lb_module_of_expr(gen, expr); } diff --git a/src/main.cpp b/src/main.cpp index aafd06ba9..17306bfe1 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -4582,7 +4582,6 @@ end_of_code_gen:; show_import_graph(checker); } - // NOTE(bill): e.g. `odin test -build-mode:llvm-ir` only generates the tests if (run_output && build_context.build_mode == BuildMode_Executable) { String exe_name = path_to_string(heap_allocator(), build_context.build_paths[BuildPath_Output]); defer (gb_free(heap_allocator(), exe_name.text)); diff --git a/src/types.cpp b/src/types.cpp index 61e4082af..e823fd19f 100644 --- a/src/types.cpp +++ b/src/types.cpp @@ -4462,8 +4462,6 @@ gb_internal void wait_for_struct_fields(Type *t) { } } -// NOTE(bill): a polymorphic union's instance is found before its variants are checked (see `check_union_type`), -// and until then, it has none, so its size, alignment and tag would be those of an empty union gb_internal void wait_for_union_variants(Type *t) { if (t->Union.polymorphic_parent != nullptr) { wait_for_record_signal(&t->Union.variants_wait_signal, &t->Union.checking_thread); From e7b77050428f3fc25872ca4b3b1b7483906a8dab Mon Sep 17 00:00:00 2001 From: gingerBill Date: Fri, 2 Oct 2026 23:30:24 +0100 Subject: [PATCH 157/215] Setup the type info data in the default module's task rather than before the modules are generated in parallel --- src/llvm_backend.cpp | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/llvm_backend.cpp b/src/llvm_backend.cpp index fb128c363..f2057f6dc 100644 --- a/src/llvm_backend.cpp +++ b/src/llvm_backend.cpp @@ -2167,8 +2167,6 @@ gb_internal bool lb_init_global_var(lbModule *m, lbProcedure *p, Entity *e, Ast gb_internal void lb_create_startup_runtime_generate_body(lbModule *m, lbProcedure *p) { lb_begin_procedure_body(p); - lb_setup_type_info_data(m); - if (p->objc_names) { LLVMBuildCall2(p->builder, lb_type_internal_for_procedures_raw(m, p->objc_names->type), p->objc_names->value, nullptr, 0, ""); } @@ -2679,6 +2677,9 @@ gb_internal i64 lb_module_cost(lbModule *m) { gb_internal WORKER_TASK_PROC(lb_generate_procedures_worker_proc) { lbModule *m = cast(lbModule *)data; + if (m == &m->gen->default_module) { + lb_setup_type_info_data(m); + } for (lbProcedure *p = nullptr; mpsc_dequeue(&m->procedures_to_generate, &p); /**/) { lb_generate_procedure(p->module, p); } @@ -2691,6 +2692,7 @@ gb_internal void lb_generate_procedures(lbGenerator *gen, bool do_threading) { lbModule *m = entry.value; m->estimated_cost = m->procedures_to_generate.count.load(std::memory_order_relaxed); } + gen->default_module.estimated_cost = I64_MAX; for (lbModule *m : lb_modules_by_cost(gen)) { thread_pool_add_task(lb_generate_procedures_worker_proc, m); } From 29106aaa1e14a2aa82a99363837405b9be293353 Mon Sep 17 00:00:00 2001 From: gingerBill Date: Sat, 3 Oct 2026 01:26:01 +0100 Subject: [PATCH 158/215] Cache type layouts and union constantability, build nested constants once, create debug files lazily --- src/llvm_abi.cpp | 84 +++++++++++++++++------------------- src/llvm_backend.cpp | 18 +++----- src/llvm_backend_const.cpp | 65 +++++++++++++++++++++++++++- src/llvm_backend_debug.cpp | 29 ++++++++++--- src/llvm_backend_general.cpp | 13 +++--- src/llvm_backend_proc.cpp | 6 +-- src/llvm_backend_stmt.cpp | 2 +- src/types.cpp | 35 +++++++++++---- 8 files changed, 168 insertions(+), 84 deletions(-) diff --git a/src/llvm_abi.cpp b/src/llvm_abi.cpp index f4c91256e..fd60d5482 100644 --- a/src/llvm_abi.cpp +++ b/src/llvm_abi.cpp @@ -240,6 +240,44 @@ gb_internal void lb_add_function_type_attributes(LLVMValueRef fn, lbFunctionType } +struct lbTypeLayout { + i64 size; + i64 align; +}; + +gb_thread_local PtrMap lb_aggregate_layouts; + +gb_internal lbTypeLayout lb_aggregate_layout(LLVMTypeRef type) { + if (lbTypeLayout *found = map_get(&lb_aggregate_layouts, type)) { + return *found; + } + lbTypeLayout layout = {0, 1}; + if (LLVMGetTypeKind(type) == LLVMArrayTypeKind) { + LLVMTypeRef elem = OdinLLVMGetArrayElementType(type); + layout.size = cast(i64)LLVMGetArrayLength(type) * lb_sizeof(elem); + layout.align = lb_alignof(elem); + } else { + GB_ASSERT(LLVMGetTypeKind(type) == LLVMStructTypeKind); + if (LLVMIsOpaqueStruct(type)) { + return layout; + } + bool is_packed = LLVMIsPackedStruct(type); + unsigned field_count = LLVMCountStructElementTypes(type); + for (unsigned i = 0; i < field_count; i++) { + LLVMTypeRef field = LLVMStructGetTypeAtIndex(type, i); + if (!is_packed) { + i64 field_align = lb_alignof(field); + layout.size = llvm_align_formula(layout.size, field_align); + layout.align = gb_max(layout.align, field_align); + } + layout.size += lb_sizeof(field); + } + layout.size = llvm_align_formula(layout.size, layout.align); + } + map_set(&lb_aggregate_layouts, type, layout); + return layout; +} + gb_internal i64 lb_sizeof(LLVMTypeRef type) { LLVMTypeKind kind = LLVMGetTypeKind(type); switch (kind) { @@ -259,35 +297,8 @@ gb_internal i64 lb_sizeof(LLVMTypeRef type) { case LLVMPointerTypeKind: return build_context.ptr_size; case LLVMStructTypeKind: - { - unsigned field_count = LLVMCountStructElementTypes(type); - i64 offset = 0; - if (LLVMIsPackedStruct(type)) { - for (unsigned i = 0; i < field_count; i++) { - LLVMTypeRef field = LLVMStructGetTypeAtIndex(type, i); - offset += lb_sizeof(field); - } - } else { - for (unsigned i = 0; i < field_count; i++) { - LLVMTypeRef field = LLVMStructGetTypeAtIndex(type, i); - i64 align = lb_alignof(field); - offset = llvm_align_formula(offset, align); - offset += lb_sizeof(field); - } - offset = llvm_align_formula(offset, lb_alignof(type)); - } - return offset; - } - break; case LLVMArrayTypeKind: - { - LLVMTypeRef elem = OdinLLVMGetArrayElementType(type); - i64 elem_size = lb_sizeof(elem); - i64 count = LLVMGetArrayLength(type); - i64 size = count * elem_size; - return size; - } - break; + return lb_aggregate_layout(type).size; #if LLVM_VERSION_MAJOR < 20 case LLVMX86_MMXTypeKind: @@ -327,23 +338,8 @@ gb_internal i64 lb_alignof(LLVMTypeRef type) { case LLVMPointerTypeKind: return build_context.ptr_size; case LLVMStructTypeKind: - { - if (LLVMIsPackedStruct(type)) { - return 1; - } else { - unsigned field_count = LLVMCountStructElementTypes(type); - i64 max_align = 1; - for (unsigned i = 0; i < field_count; i++) { - LLVMTypeRef field = LLVMStructGetTypeAtIndex(type, i); - i64 field_align = lb_alignof(field); - max_align = gb_max(max_align, field_align); - } - return max_align; - } - } - break; case LLVMArrayTypeKind: - return lb_alignof(OdinLLVMGetArrayElementType(type)); + return lb_aggregate_layout(type).align; #if LLVM_VERSION_MAJOR < 20 case LLVMX86_MMXTypeKind: diff --git a/src/llvm_backend.cpp b/src/llvm_backend.cpp index f2057f6dc..031a71f3d 100644 --- a/src/llvm_backend.cpp +++ b/src/llvm_backend.cpp @@ -2316,6 +2316,8 @@ gb_internal GB_COMPARE_PROC(llvm_global_entity_cmp) { return lb_entity_type_cmp(x, y); } +gb_internal Array lb_modules_by_cost(lbGenerator *gen); + gb_internal void lb_create_global_procedures_and_types(lbGenerator *gen, CheckerInfo *info, bool do_threading) { for (Entity *e : info->entities) { String name = e->token.string; @@ -2385,12 +2387,12 @@ gb_internal void lb_create_global_procedures_and_types(lbGenerator *gen, Checker lbModule *m = entry.value; array_sort(m->global_types_to_create, llvm_global_entity_cmp); array_sort(m->global_procedures_to_create, llvm_global_entity_cmp); + m->estimated_cost = m->global_types_to_create.count + m->global_procedures_to_create.count; } gen->modules_in_parallel = true; if (do_threading) { - for (auto const &entry : gen->modules) { - lbModule *m = entry.value; + for (lbModule *m : lb_modules_by_cost(gen)) { thread_pool_add_task(lb_generate_procedures_and_types_per_module, m); } } else { @@ -3346,14 +3348,6 @@ gb_internal bool lb_generate_code(lbGenerator *gen) { for (auto const &entry : gen->modules) { lbModule *m = entry.value; if (m->debug_builder) { // Debug Info - for (auto const &file_entry : info->files) { - AstFile *f = file_entry.value; - LLVMMetadataRef res = LLVMDIBuilderCreateFile(m->debug_builder, - cast(char const *)f->filename.text, f->filename.len, - cast(char const *)f->directory.text, f->directory.len); - lb_set_llvm_metadata(m, f, res); - } - TEMPORARY_ALLOCATOR_GUARD(); gbString producer = gb_string_make(temporary_allocator(), "odin"); @@ -3382,7 +3376,7 @@ gb_internal bool lb_generate_code(lbGenerator *gen) { LLVMBool debug_info_for_profiling = false; m->debug_compile_unit = LLVMDIBuilderCreateCompileUnit(m->debug_builder, LLVMDWARFSourceLanguageC99, - lb_get_llvm_metadata(m, init_file), + lb_get_file_metadata(m, init_file), producer, gb_string_length(producer), is_optimized, "", 0, 1, split_name, gb_string_length(split_name), @@ -3619,7 +3613,7 @@ gb_internal bool lb_generate_code(lbGenerator *gen) { if (m->debug_builder) { String global_name = e->token.string; if (global_name.len != 0 && global_name != "_") { - LLVMMetadataRef llvm_file = lb_get_llvm_metadata(m, e->file); + LLVMMetadataRef llvm_file = lb_get_file_metadata(m, e->file); LLVMMetadataRef llvm_scope = llvm_file; LLVMBool local_to_unit = LLVMGetLinkage(g.value) == LLVMInternalLinkage; diff --git a/src/llvm_backend_const.cpp b/src/llvm_backend_const.cpp index df674b913..aa080dca8 100644 --- a/src/llvm_backend_const.cpp +++ b/src/llvm_backend_const.cpp @@ -239,6 +239,60 @@ gb_internal LLVMValueRef llvm_const_array(lbModule *m, LLVMTypeRef elem_type, LL return LLVMConstArray(elem_type, values, value_count); } +// Each constant `insertvalue` rebuilds and uniques the whole aggregate, +// so the nested fields of a compound literal are collected and built once. +struct lbConstAggregate { + LLVMValueRef value; + lbConstAggregate *elems; + unsigned elem_count; +}; + +gb_internal void lb_const_aggregate_insert(lbModule *m, lbConstAggregate *agg, LLVMValueRef base, LLVMValueRef val, unsigned *indices, isize count) { + if (agg->elems == nullptr) { + agg->value = base; + } + for (isize i = 0; i < count; i++) { + if (agg->elems == nullptr) { + LLVMTypeRef type = LLVMTypeOf(agg->value); + if (LLVMGetTypeKind(type) == LLVMArrayTypeKind) { + agg->elem_count = cast(unsigned)LLVMGetArrayLength(type); + } else { + agg->elem_count = LLVMCountStructElementTypes(type); + } + agg->elems = gb_alloc_array(temporary_allocator(), lbConstAggregate, agg->elem_count); + for (unsigned j = 0; j < agg->elem_count; j++) { + agg->elems[j].value = llvm_const_extract_value(m, agg->value, j); + } + } + agg = &agg->elems[indices[i]]; + } + agg->value = val; + agg->elems = nullptr; +} + +gb_internal LLVMValueRef lb_const_aggregate_build(lbModule *m, lbConstAggregate *agg) { + if (agg->elems == nullptr) { + return agg->value; + } + LLVMTypeRef type = LLVMTypeOf(agg->value); + LLVMValueRef *values = gb_alloc_array(temporary_allocator(), LLVMValueRef, agg->elem_count); + for (unsigned i = 0; i < agg->elem_count; i++) { + values[i] = lb_const_aggregate_build(m, &agg->elems[i]); + } + if (LLVMGetTypeKind(type) == LLVMArrayTypeKind) { + return llvm_const_array(m, OdinLLVMGetArrayElementType(type), values, agg->elem_count); + } + return llvm_const_named_struct_internal(m, type, values, agg->elem_count); +} + +gb_internal LLVMValueRef lb_const_aggregate_take(lbModule *m, lbConstAggregate *agg, LLVMValueRef value) { + if (agg->elems != nullptr) { + value = lb_const_aggregate_build(m, agg); + } + *agg = {}; + return value; +} + gb_internal LLVMValueRef llvm_const_slice_internal(lbModule *m, LLVMValueRef data, LLVMValueRef len) { if (build_context.metrics.ptr_size < build_context.metrics.int_size) { GB_ASSERT(build_context.metrics.ptr_size == 4); @@ -2005,6 +2059,8 @@ gb_internal lbValue lb_const_value(lbModule *m, Type *type, ExactValue value, lb bool *visited = gb_alloc_array(temporary_allocator(), bool, value_count); if (cl->elems[0]->kind == Ast_FieldValue) { + lbConstAggregate *nested = gb_alloc_array(temporary_allocator(), lbConstAggregate, value_count); + isize elem_count = cl->elems.count; for (isize i = 0; i < elem_count; i++) { ast_node(fv, FieldValue, cl->elems[i]); @@ -2026,6 +2082,7 @@ gb_internal lbValue lb_const_value(lbModule *m, Type *type, ExactValue value, lb GB_ASSERT_MSG(lb_sizeof(value_type) == type_size_of(f->type), "%s vs %s", LLVMPrintTypeToString(value_type), type_to_string(f->type)); values[index] = value.value; visited[index] = true; + nested[index] = {}; } else { if (!visited[index]) { auto new_cc = cc; @@ -2073,13 +2130,15 @@ gb_internal lbValue lb_const_value(lbModule *m, Type *type, ExactValue value, lb if (LLVMIsConstant(elem_value) && LLVMIsConstant(values[index])) { if (is_type_union(cv_type) || is_type_raw_union(cv_type)) { force_non_named = true; + values[index] = lb_const_aggregate_take(m, &nested[index], values[index]); values[index] = llvm_const_insert_value_with_rebuild(m, values[index], elem_value, idx_list, idx_list_len); } else { - values[index] = llvm_const_insert_value(m, values[index], elem_value, idx_list, idx_list_len); + lb_const_aggregate_insert(m, &nested[index], values[index], elem_value, idx_list, idx_list_len); } } else if (is_local) { lbProcedure *p = m->curr_procedure; GB_ASSERT(p != nullptr); + values[index] = lb_const_aggregate_take(m, &nested[index], values[index]); LLVMTypeRef field_llvm_type = lb_type(m, f->type); @@ -2123,6 +2182,10 @@ gb_internal lbValue lb_const_value(lbModule *m, Type *type, ExactValue value, lb } } } + + for (unsigned i = 0; i < value_count; i++) { + values[i] = lb_const_aggregate_take(m, &nested[i], values[i]); + } } else { isize multiple_return_offset = 0; for_array(i, cl->elems) { diff --git a/src/llvm_backend_debug.cpp b/src/llvm_backend_debug.cpp index b70071e5b..2b1cbf872 100644 --- a/src/llvm_backend_debug.cpp +++ b/src/llvm_backend_debug.cpp @@ -18,6 +18,21 @@ gb_internal void lb_set_llvm_metadata(lbModule *m, void *key, LLVMMetadataRef va } } +gb_internal LLVMMetadataRef lb_get_file_metadata(lbModule *m, AstFile *f) { + if (f == nullptr || m->debug_builder == nullptr) { + return nullptr; + } + MUTEX_GUARD(&m->debug_values_mutex); + LLVMMetadataRef res = lb_get_llvm_metadata(m, f); + if (res == nullptr) { + res = LLVMDIBuilderCreateFile(m->debug_builder, + cast(char const *)f->filename.text, f->filename.len, + cast(char const *)f->directory.text, f->directory.len); + lb_set_llvm_metadata(m, f, res); + } + return res; +} + gb_internal void lb_add_raddbg_string(lbModule *m, String const &str) { mpsc_enqueue(&m->gen->raddebug_section_strings, copy_string(permanent_allocator(), str)); } @@ -70,7 +85,7 @@ gb_internal LLVMMetadataRef lb_debug_end_location_from_ast(lbProcedure *p, Ast * gb_internal void lb_debug_file_line(lbModule *m, Type *type, Ast *node, LLVMMetadataRef *file, unsigned *line) { if (*file == nullptr && type->kind == Type_Named) { if (node) { - *file = lb_get_llvm_metadata(m, node->file()); + *file = lb_get_file_metadata(m, node->file()); *line = cast(unsigned)ast_token(node).pos.line; } } @@ -174,7 +189,7 @@ gb_internal LLVMMetadataRef lb_debug_struct_field(lbModule *m, String const &nam AstPackage *pkg = m->info->runtime_package; GB_ASSERT(pkg->files.count != 0); - LLVMMetadataRef file = lb_get_llvm_metadata(m, pkg->files[0]); + LLVMMetadataRef file = lb_get_file_metadata(m, pkg->files[0]); LLVMMetadataRef scope = file; return LLVMDIBuilderCreateMemberType(m->debug_builder, scope, cast(char const *)name.text, name.len, file, field_line, @@ -185,7 +200,7 @@ gb_internal LLVMMetadataRef lb_debug_struct_field(lbModule *m, String const &nam gb_internal LLVMMetadataRef lb_debug_basic_struct(lbModule *m, String const &name, u64 size_in_bits, u32 align_in_bits, LLVMMetadataRef *elements, unsigned element_count) { AstPackage *pkg = m->info->runtime_package; GB_ASSERT(pkg->files.count != 0); - LLVMMetadataRef file = lb_get_llvm_metadata(m, pkg->files[0]); + LLVMMetadataRef file = lb_get_file_metadata(m, pkg->files[0]); LLVMMetadataRef scope = file; return LLVMDIBuilderCreateStructType(m->debug_builder, scope, cast(char const *)name.text, name.len, file, 1, size_in_bits, align_in_bits, LLVMDIFlagZero, nullptr, elements, element_count, 0, nullptr, "", 0); @@ -1119,7 +1134,7 @@ gb_internal LLVMMetadataRef lb_get_base_scope_metadata(lbModule *m, Scope *scope } } if (scope->flags & ScopeFlag_File) { - found = lb_get_llvm_metadata(m, scope->file); + found = lb_get_file_metadata(m, scope->file); if (found) { return found; } @@ -1219,7 +1234,7 @@ gb_internal void lb_add_debug_local_variable(lbProcedure *p, LLVMValueRef ptr, T AstFile *file = p->body->file(); LLVMMetadataRef llvm_scope = lb_get_current_debug_scope(p); - LLVMMetadataRef llvm_file = lb_get_llvm_metadata(m, file); + LLVMMetadataRef llvm_file = lb_get_file_metadata(m, file); GB_ASSERT(llvm_scope != nullptr); if (llvm_file == nullptr) { llvm_file = LLVMDIScopeGetFile(llvm_scope); @@ -1286,7 +1301,7 @@ gb_internal void lb_add_debug_param_variable(lbProcedure *p, LLVMValueRef ptr, T AstFile *file = p->body->file(); LLVMMetadataRef llvm_scope = lb_get_current_debug_scope(p); - LLVMMetadataRef llvm_file = lb_get_llvm_metadata(m, file); + LLVMMetadataRef llvm_file = lb_get_file_metadata(m, file); GB_ASSERT(llvm_scope != nullptr); if (llvm_file == nullptr) { llvm_file = LLVMDIScopeGetFile(llvm_scope); @@ -1479,7 +1494,7 @@ gb_internal void lb_add_debug_label(lbProcedure *p, Ast *label, lbBlock *target) } AstFile *file = label->file(); - LLVMMetadataRef llvm_file = lb_get_llvm_metadata(m, file); + LLVMMetadataRef llvm_file = lb_get_file_metadata(m, file); if (llvm_file == nullptr) { debugf("llvm file not found for label\n"); return; diff --git a/src/llvm_backend_general.cpp b/src/llvm_backend_general.cpp index fd9964529..6b7fefcc6 100644 --- a/src/llvm_backend_general.cpp +++ b/src/llvm_backend_general.cpp @@ -407,6 +407,7 @@ gb_internal bool lb_init_generator(lbGenerator *gen, Checker *c) { if (global_error_collector.count != 0) { return false; } + global_types_are_complete.store(true); isize tc = c->parser->total_token_count; if (tc < 2) { @@ -700,20 +701,16 @@ gb_internal lbValue lb_zero(lbModule *m, Type *t) { return v; } gb_internal LLVMValueRef llvm_const_extract_value(lbModule *m, LLVMValueRef agg, unsigned index) { - LLVMValueRef res = agg; - GB_ASSERT(LLVMIsConstant(res)); - res = LLVMBuildExtractValue(m->const_dummy_builder, res, index, ""); - GB_ASSERT(LLVMIsConstant(res)); + GB_ASSERT(LLVMIsConstant(agg)); + LLVMValueRef res = LLVMGetAggregateElement(agg, index); + GB_ASSERT(res != nullptr); return res; } gb_internal LLVMValueRef llvm_const_extract_value(lbModule *m, LLVMValueRef agg, unsigned *indices, isize count) { - // return LLVMConstExtractValue(value, indices, count); LLVMValueRef res = agg; - GB_ASSERT(LLVMIsConstant(res)); for (isize i = 0; i < count; i++) { - res = LLVMBuildExtractValue(m->const_dummy_builder, res, indices[i], ""); - GB_ASSERT(LLVMIsConstant(res)); + res = llvm_const_extract_value(m, res, indices[i]); } return res; } diff --git a/src/llvm_backend_proc.cpp b/src/llvm_backend_proc.cpp index a135904d9..a5f8ba66a 100644 --- a/src/llvm_backend_proc.cpp +++ b/src/llvm_backend_proc.cpp @@ -362,13 +362,13 @@ gb_internal lbProcedure *lb_create_procedure(lbModule *m, Entity *entity, bool i Ast *ident = entity->identifier.load(); if (entity->file != nullptr) { - file = lb_get_llvm_metadata(m, entity->file); + file = lb_get_file_metadata(m, entity->file); scope = file; } else if (ident != nullptr && ident->file_id != 0) { - file = lb_get_llvm_metadata(m, ident->file()); + file = lb_get_file_metadata(m, ident->file()); scope = file; } else if (entity->scope != nullptr) { - file = lb_get_llvm_metadata(m, entity->scope->file); + file = lb_get_file_metadata(m, entity->scope->file); scope = file; } GB_ASSERT_MSG(file != nullptr, "%.*s", LIT(entity->token.string)); diff --git a/src/llvm_backend_stmt.cpp b/src/llvm_backend_stmt.cpp index 025de69ad..d35b48835 100644 --- a/src/llvm_backend_stmt.cpp +++ b/src/llvm_backend_stmt.cpp @@ -334,7 +334,7 @@ gb_internal void lb_open_scope(lbProcedure *p, Scope *s, bool lifetime_scope=fal LLVMMetadataRef file = nullptr; AstFile *ast_file = s->node->file(); if (ast_file != nullptr) { - file = lb_get_llvm_metadata(m, ast_file); + file = lb_get_file_metadata(m, ast_file); } LLVMMetadataRef scope = nullptr; if (p->scope_stack.count > 0) { diff --git a/src/types.cpp b/src/types.cpp index 6067cd1d6..015b61ed3 100644 --- a/src/types.cpp +++ b/src/types.cpp @@ -188,6 +188,7 @@ struct TypeUnion { bool is_polymorphic; bool is_poly_specialized; UnionTypeKind kind; + std::atomic constantable; // 0 unknown, 1 false, 2 true }; struct TypeProc { @@ -417,6 +418,9 @@ gb_internal Type *base_type(Type *t); gb_internal Type *alloc_type_multi_pointer(Type *elem); gb_internal void wait_for_record_signal(Wait_Signal *signal, Futex *checking_thread); +// set once checking is done; until then a type may still be incomplete or part of an illegal cycle +gb_global std::atomic global_types_are_complete; + gb_internal u32 type_info_flags_of_type(Type *type) { if (type == nullptr) { return 0; @@ -2787,16 +2791,25 @@ gb_internal bool is_type_union_constantable(Type *type) { Type *bt = base_type(type); GB_ASSERT(bt->kind == Type_Union); - if (bt->Union.variants.count == 0) { - return true; - } - - for (Type *v : bt->Union.variants) { - if (!is_type_constant_type_for_unions(v)) { - return false; + bool use_cache = global_types_are_complete.load(std::memory_order_relaxed); + if (use_cache) { + u8 cached = bt->Union.constantable.load(std::memory_order_relaxed); + if (cached != 0) { + return cached == 2; } } - return true; + + bool res = true; + for (Type *v : bt->Union.variants) { + if (!is_type_constant_type_for_unions(v)) { + res = false; + break; + } + } + if (use_cache) { + bt->Union.constantable.store(res ? 2 : 1, std::memory_order_relaxed); + } + return res; } gb_internal bool is_type_raw_union_constantable(Type *type) { @@ -4389,6 +4402,9 @@ gb_internal i64 type_size_of_struct_pretend_is_packed(Type *ot) { gb_internal i64 type_size_of(Type *t) { + if (t != nullptr && t->kind == Type_Named && global_types_are_complete.load(std::memory_order_relaxed)) { + t = base_type(t); + } if (t == nullptr) { return 0; } @@ -4431,6 +4447,9 @@ gb_internal i64 type_size_of(Type *t) { } gb_internal i64 type_align_of(Type *t) { + if (t != nullptr && t->kind == Type_Named && global_types_are_complete.load(std::memory_order_relaxed)) { + t = base_type(t); + } if (t == nullptr) { return 1; } From 093357f63e7d422929928e86641d0aa6d614fd1d Mon Sep 17 00:00:00 2001 From: Arthur031221 Date: Sat, 3 Oct 2026 11:26:45 +0800 Subject: [PATCH 159/215] Preserve zero-initialized arrays in intrinsics.concatenate Co-authored-by: blob1807 <12388588+blob1807@users.noreply.github.com> --- src/check_builtin.cpp | 27 ++++++- tests/issues/run.sh | 1 + tests/issues/test_issue_7490.odin | 115 ++++++++++++++++++++++++++++++ 3 files changed, 142 insertions(+), 1 deletion(-) create mode 100644 tests/issues/test_issue_7490.odin diff --git a/src/check_builtin.cpp b/src/check_builtin.cpp index 8de99553c..50c2e3465 100644 --- a/src/check_builtin.cpp +++ b/src/check_builtin.cpp @@ -5551,17 +5551,42 @@ gb_internal bool check_builtin_procedure(CheckerContext *c, Operand *operand, As ExactValue value = arg->tav.value; GB_ASSERT(value.kind == ExactValue_Compound); ast_node(cl, CompoundLit, value.value_compound); - count_needed += cl->elems.count; + count_needed += is_type_array(arg->tav.type) + ? cast(isize)get_array_type_count(arg->tav.type) + : cl->elems.count; } Array new_elems = {}; array_init(&new_elems, permanent_allocator(), 0, count_needed); + CheckerContext zero_context = *c; + zero_context.type_hint_expr = nullptr; + for (Ast *arg : ce->args) { ExactValue value = arg->tav.value; GB_ASSERT(value.kind == ExactValue_Compound); ast_node(cl, CompoundLit, value.value_compound); array_add_elems(&new_elems, cl->elems.data, cl->elems.count); + + if (is_type_array(arg->tav.type)) { + isize count = cast(isize)get_array_type_count(arg->tav.type); + GB_ASSERT(cl->elems.count <= count); + for (isize i = cl->elems.count; i < count; i++) { + Ast *zero = ast_compound_lit(arg->file(), nullptr, {}, cl->open, cl->close); + if (is_type_constant_type(elem_type)) { + Operand z = {}; + check_expr_with_type_hint(&zero_context, &z, zero, elem_type); + if (z.mode == Addressing_Invalid) { + return false; + } + GB_ASSERT(z.mode == Addressing_Constant); + GB_ASSERT(are_types_identical(z.type, elem_type)); + } else { + add_type_and_value(c, zero, Addressing_Constant, elem_type, exact_value_compound(zero)); + } + array_add(&new_elems, zero); + } + } } Ast *new_compound_lit = ast_compound_lit(lhs.expr->file(), nullptr, new_elems, ast_token(lhs.expr), ast_end_token(ce->args[ce->args.count-1])); diff --git a/tests/issues/run.sh b/tests/issues/run.sh index 8defd7ea0..7d22af3e7 100755 --- a/tests/issues/run.sh +++ b/tests/issues/run.sh @@ -247,6 +247,7 @@ fi $ODIN test ../test_lifetime_markers.odin $COMMON -o:size -lifetime-markers $ODIN test ../test_lifetime_markers.odin $COMMON -o:speed -lifetime-markers $ODIN test ../test_issue_7547.odin $COMMON +$ODIN test ../test_issue_7490.odin $COMMON set +x diff --git a/tests/issues/test_issue_7490.odin b/tests/issues/test_issue_7490.odin new file mode 100644 index 000000000..da1f14ab0 --- /dev/null +++ b/tests/issues/test_issue_7490.odin @@ -0,0 +1,115 @@ +package test_issue_7490 + +import "base:intrinsics" +import "core:mem" +import "core:slice" +import "core:testing" + +expect_elements :: proc(t: ^testing.T, got, expected: []$T) { + testing.expect_value(t, len(got), len(expected)) + testing.expectf(t, slice.equal(got, expected), "Expected %v, got %v", expected, got) +} + +@test +concatenate_zero_arrays :: proc(t: ^testing.T) { + ARR :: [2]u8{} + arr :: intrinsics.concatenate(ARR, [1]u8{1}, [2]u8{}, [3]u8{5, 4, 3}) + actual := arr + expected := [8]u8{0, 0, 1, 0, 0, 5, 4, 3} + expect_elements(t, actual[:], expected[:]) + when len(arr) == 8 { + #assert(arr[0] == 0 && arr[2] == 1 && arr[7] == 3) + } + + zeros := intrinsics.concatenate([2]int{}, [3]int{}) + expect_elements(t, zeros[:], []int{0, 0, 0, 0, 0}) + tail := intrinsics.concatenate([1]int{9}, [2]int{}) + expect_elements(t, tail[:], []int{9, 0, 0}) + empty := intrinsics.concatenate([0]int{}, [0]int{}) + testing.expect_value(t, len(empty), 0) + + s := intrinsics.concatenate([]u8{}, []u8{1}, []u8{}, []u8{5, 4, 3}) + expect_elements(t, s, []u8{1, 5, 4, 3}) + empty_slice := intrinsics.concatenate([]u8{}, []u8{}) + testing.expect_value(t, len(empty_slice), 0) +} + +@test +concatenate_typed_zeros :: proc(t: ^testing.T) { + Word :: distinct u16 + words := intrinsics.concatenate([2]Word{}, [1]Word{7}) + expect_elements(t, words[:], []Word{0, 0, 7}) + floats := intrinsics.concatenate([1]f64{}, [1]f64{1.5}) + expect_elements(t, floats[:], []f64{0, 1.5}) + complexes := intrinsics.concatenate([1]complex128{}, [1]complex128{1 + 2i}) + expect_elements(t, complexes[:], []complex128{0, 1 + 2i}) + quaternions := intrinsics.concatenate([1]quaternion256{}, [1]quaternion256{1 + 2i}) + expect_elements(t, quaternions[:], []quaternion256{0, 1 + 2i}) + bools := intrinsics.concatenate([2]bool{}, [1]bool{true}) + expect_elements(t, bools[:], []bool{false, false, true}) + strings := intrinsics.concatenate([2]string{}, [1]string{"x"}, [1]string{}) + expect_elements(t, strings[:], []string{"", "", "x", ""}) + + Pair :: [2]int + Record :: struct { + number: int, + enabled: bool, + text: string, + pair: Pair, + } + r :: Record{7, true, "x", {3, 4}} + records := intrinsics.concatenate([2]Record{}, [1]Record{r}, [1]Record{}) + expect_elements(t, records[:], []Record{{}, {}, r, {}}) + rows := intrinsics.concatenate([2]Pair{}, [1]Pair{{3, 4}}, [1]Pair{}) + expect_elements(t, rows[:], []Pair{{0, 0}, {0, 0}, {3, 4}, {0, 0}}) +} + +@test +concatenate_nested_arrays :: proc(t: ^testing.T) { + nested := intrinsics.concatenate( + intrinsics.concatenate([2]u8{}, [1]u8{1}), + intrinsics.concatenate([2]u8{}, [3]u8{5, 4, 3})) + expect_elements(t, nested[:], []u8{0, 0, 1, 0, 0, 5, 4, 3}) + nested_slice := intrinsics.concatenate(intrinsics.concatenate([]u8{}, []u8{1}), []u8{}) + expect_elements(t, nested_slice, []u8{1}) +} + +@test +concatenate_nil_elements :: proc(t: ^testing.T) { + values := intrinsics.concatenate([2][dynamic]int{}, [0][dynamic]int{}) + testing.expect_value(t, len(values), 2) + for value in values { + raw := transmute(mem.Raw_Dynamic_Array)value + testing.expect(t, raw.data == nil) + testing.expect_value(t, raw.len, 0) + testing.expect_value(t, raw.cap, 0) + testing.expect(t, raw.allocator.procedure == nil && raw.allocator.data == nil) + } + + Nested :: [2][dynamic]int + nested := intrinsics.concatenate([2]Nested{}, [0]Nested{}) + testing.expect_value(t, len(nested), 2) + for row in nested { + for value in row { + raw := transmute(mem.Raw_Dynamic_Array)value + testing.expect(t, raw.data == nil && raw.allocator.procedure == nil && raw.allocator.data == nil) + testing.expect_value(t, raw.len, 0) + testing.expect_value(t, raw.cap, 0) + } + } + + Record :: struct { + marker: int, + data: [dynamic]int, + } + r :: Record{marker = 7} + records := intrinsics.concatenate([2]Record{}, [1]Record{r}, [1]Record{}) + testing.expect_value(t, len(records), 4) + for record, i in records { + testing.expect_value(t, record.marker, i == 2 ? 7 : 0) + raw := transmute(mem.Raw_Dynamic_Array)record.data + testing.expect(t, raw.data == nil && raw.allocator.procedure == nil && raw.allocator.data == nil) + testing.expect_value(t, raw.len, 0) + testing.expect_value(t, raw.cap, 0) + } +} From f670de9e806d4eaeac166f0f061e94e7342f308a Mon Sep 17 00:00:00 2001 From: gingerBill Date: Sat, 3 Oct 2026 08:28:31 +0100 Subject: [PATCH 160/215] Define and initialize global variables in their own modules --- src/llvm_backend.cpp | 410 +++++++++--------- src/llvm_backend.hpp | 6 +- src/llvm_backend_general.cpp | 19 +- tests/issues/run.bat | 2 + tests/issues/run.sh | 2 + .../issues/test_issue_split_globals/main.odin | 47 ++ .../other/data/data.odin | 4 + .../test_issue_split_globals/other/other.odin | 36 ++ 8 files changed, 311 insertions(+), 215 deletions(-) create mode 100644 tests/issues/test_issue_split_globals/main.odin create mode 100644 tests/issues/test_issue_split_globals/other/data/data.odin create mode 100644 tests/issues/test_issue_split_globals/other/other.odin diff --git a/src/llvm_backend.cpp b/src/llvm_backend.cpp index 031a71f3d..d39318215 100644 --- a/src/llvm_backend.cpp +++ b/src/llvm_backend.cpp @@ -192,7 +192,7 @@ gb_internal void lb_correct_entity_linkage(lbGenerator *gen) { LLVMValueRef other_global = nullptr; if (ec.e->kind == Entity_Variable) { other_global = LLVMGetNamedGlobal(ec.other_module->mod, ec.cname); - if (other_global && (LLVMGetInitializer(other_global) != nullptr || LLVMIsExternallyInitialized(other_global))) { + if (other_global && !LLVMIsDeclaration(other_global)) { LLVM_SET_INTERNAL_WEAK_LINKAGE(other_global); if (!ec.e->Variable.is_export && !ec.e->Variable.is_foreign) { LLVMSetVisibility(other_global, LLVMHiddenVisibility); @@ -2164,73 +2164,130 @@ gb_internal bool lb_init_global_var(lbModule *m, lbProcedure *p, Entity *e, Ast } -gb_internal void lb_create_startup_runtime_generate_body(lbModule *m, lbProcedure *p) { - lb_begin_procedure_body(p); - - if (p->objc_names) { - LLVMBuildCall2(p->builder, lb_type_internal_for_procedures_raw(m, p->objc_names->type), p->objc_names->value, nullptr, 0, ""); +gb_internal bool lb_global_variable_has_constant_init(Entity *e, DeclInfo *decl) { + TypeAndValue tav = type_and_value_of_expr(decl->init_expr); + if (!is_type_any(e->type) && tav.mode != Addressing_Invalid && tav.value.kind != ExactValue_Invalid) { + return true; } - Type *dummy_type = alloc_type_proc(nullptr, nullptr, 0, nullptr, 0, false, ProcCC_Odin); - LLVMTypeRef raw_dummy_type = lb_type_internal_for_procedures_raw(m, dummy_type); - - for (auto &var : *p->global_variables) { - if (var.is_initialized) { - continue; - } - - lbModule *entity_module = m; - - Entity *e = var.decl->entity; - GB_ASSERT(e->kind == Entity_Variable); - e->code_gen_module = entity_module; - Ast *init_expr = var.decl->init_expr; - - if (init_expr == nullptr && var.init.value == nullptr) { - continue; - } - - if (false && type_size_of(e->type) > 8) { - String ename = lb_get_entity_name(m, e); - gbString name = gb_string_make(permanent_allocator(), ""); - name = gb_string_appendc(name, "__$startup$"); - name = gb_string_append_length(name, ename.text, ename.len); - - lbProcedure *dummy = lb_create_dummy_procedure(m, make_string_c(name), dummy_type); - dummy->is_startup = true; - LLVMSetVisibility(dummy->value, LLVMHiddenVisibility); - LLVM_SET_INTERNAL_WEAK_LINKAGE(p->value); - - lb_begin_procedure_body(dummy); - lb_init_global_var(m, dummy, e, init_expr, var); - lb_end_procedure_body(dummy); - - LLVMValueRef context_ptr = lb_find_or_generate_context_ptr(p).addr.value; - LLVMValueRef cast_ctx = LLVMBuildBitCast(p->builder, context_ptr, LLVMPointerType(LLVMInt8TypeInContext(m->ctx), 0), ""); - LLVMBuildCall2(p->builder, raw_dummy_type, dummy->value, &cast_ctx, 1, ""); - } else { - lb_init_global_var(m, p, e, init_expr, var); - } - - lbBlock *next = lb_create_block(p, "global.init", true); - lb_emit_jump(p, next); - lb_start_block(p, next); - } - CheckerInfo *info = m->gen->info; - - for (Entity *e : info->init_procedures) { - lbValue value = lb_find_procedure_value_from_entity(m, e); - lb_emit_call(p, value, {}, ProcInlining_none, ProcTailing_none); - } - - - lb_end_procedure_body(p); + return is_type_untyped_nil(tav.type); } +gb_internal void lb_create_global_variable(lbModule *m, lbGlobalVariable *var) { + DeclInfo *decl = var->decl; + Entity *e = decl->entity; -gb_internal lbProcedure *lb_create_startup_runtime(lbModule *main_module, lbProcedure *objc_names, Array &global_variables) { // Startup Runtime + bool is_foreign = e->Variable.is_foreign; + bool is_export = e->Variable.is_export; + + String name = lb_get_entity_name(m, e); + + lbValue g = {}; + g.type = alloc_type_pointer(e->type); + g.value = LLVMAddGlobal(m->mod, lb_type(m, e->type), alloc_cstring(permanent_allocator(), name)); + + if (decl->init_expr != nullptr) { + TypeAndValue tav = type_and_value_of_expr(decl->init_expr); + if (!is_type_any(e->type)) { + if (tav.mode != Addressing_Invalid) { + if (tav.value.kind != ExactValue_Invalid) { + auto cc = LB_CONST_CONTEXT_DEFAULT; + cc.is_rodata = e->kind == Entity_Variable && e->Variable.is_rodata; + cc.allow_local = false; + cc.link_section = e->Variable.link_section; + + ExactValue v = tav.value; + lbValue init = lb_const_value(m, e->type, v, cc); + + LLVMDeleteGlobal(g.value); + g.value = nullptr; + g.value = LLVMAddGlobal(m->mod, LLVMTypeOf(init.value), alloc_cstring(permanent_allocator(), name)); + + LLVMSetInitializer(g.value, init.value); + var->is_initialized = true; + if (cc.is_rodata) { + LLVMSetGlobalConstant(g.value, true); + } + } + } + } + if (!var->is_initialized && is_type_untyped_nil(tav.type)) { + var->is_initialized = true; + if (e->kind == Entity_Variable && e->Variable.is_rodata) { + LLVMSetGlobalConstant(g.value, true); + } + } + } else if (e->kind == Entity_Variable && e->Variable.is_rodata) { + LLVMSetGlobalConstant(g.value, true); + } + + lb_apply_thread_local_model(g.value, e->Variable.thread_local_model); + + if (is_foreign) { + LLVMSetLinkage(g.value, LLVMExternalLinkage); + LLVMSetDLLStorageClass(g.value, LLVMDLLImportStorageClass); + LLVMSetExternallyInitialized(g.value, true); + lb_add_foreign_library_path(m, e->Variable.foreign_library); + } else if (LLVMGetInitializer(g.value) == nullptr) { + LLVMSetInitializer(g.value, LLVMConstNull(lb_type(m, e->type))); + } + if (is_export) { + LLVMSetLinkage(g.value, LLVMDLLExportLinkage); + LLVMSetDLLStorageClass(g.value, LLVMDLLExportStorageClass); + } else if (!is_foreign) { + LLVM_SET_INTERNAL_WEAK_LINKAGE(g.value); + } + lb_set_linkage_from_entity_flags(m, g.value, e->flags); + LLVMSetAlignment(g.value, cast(u32)type_align_of(e->type)); + + if (e->Variable.link_section.len > 0) { + LLVMSetSection(g.value, alloc_cstring(permanent_allocator(), e->Variable.link_section)); + } + if (e->flags & EntityFlag_Require) { + lb_append_to_compiler_used(m, g.value); + } + + if (m->debug_builder) { + String global_name = e->token.string; + if (global_name.len != 0 && global_name != "_") { + LLVMMetadataRef llvm_file = lb_get_file_metadata(m, e->file); + LLVMMetadataRef llvm_scope = llvm_file; + + LLVMBool local_to_unit = LLVMGetLinkage(g.value) == LLVMInternalLinkage; + + LLVMMetadataRef llvm_expr = LLVMDIBuilderCreateExpression(m->debug_builder, nullptr, 0); + LLVMMetadataRef llvm_decl = nullptr; + + u32 align_in_bits = cast(u32)(8*type_align_of(e->type)); + + LLVMMetadataRef global_variable_metadata = LLVMDIBuilderCreateGlobalVariableExpression( + m->debug_builder, llvm_scope, + cast(char const *)global_name.text, global_name.len, + "", 0, // linkage + llvm_file, e->token.pos.line, + lb_debug_type(m, e->type), + local_to_unit, + llvm_expr, + llvm_decl, + align_in_bits + ); + lb_set_llvm_metadata(m, g.value, global_variable_metadata); + LLVMGlobalSetMetadata(g.value, 0, global_variable_metadata); + } + } + + g.value = LLVMConstPointerCast(g.value, lb_type(m, alloc_type_pointer(e->type))); + var->var = g; + + lb_add_entity(m, e, g); + lb_add_member(m, name, g); + + GB_ASSERT(var->is_initialized == (decl->init_expr != nullptr && lb_global_variable_has_constant_init(e, decl))); +} + +gb_internal lbProcedure *lb_create_startup_procedure(lbModule *m, String const &name) { Type *proc_type = alloc_type_proc(nullptr, nullptr, 0, nullptr, 0, false, ProcCC_Odin); - lbProcedure *p = lb_create_dummy_procedure(main_module, str_lit(LB_STARTUP_RUNTIME_PROC_NAME), proc_type); + lbProcedure *p = lb_create_dummy_procedure(m, name, proc_type); p->is_startup = true; if (build_context.no_plt) { lb_add_attribute_to_proc(p->module, p->value, "nonlazybind"); @@ -2241,11 +2298,71 @@ gb_internal lbProcedure *lb_create_startup_runtime(lbModule *main_module, lbProc // Make sure shared libraries call their own runtime startup on Linux. LLVMSetVisibility(p->value, LLVMHiddenVisibility); LLVM_SET_INTERNAL_WEAK_LINKAGE(p->value); + return p; +} - p->global_variables = &global_variables; - p->objc_names = objc_names; +gb_internal void lb_global_init_procedure_generate_body(lbModule *m, lbProcedure *p) { + lb_begin_procedure_body(p); - lb_create_startup_runtime_generate_body(main_module, p); + for (lbGlobalVariable *var : p->global_variables) { + lb_init_global_var(m, p, var->decl->entity, var->decl->init_expr, *var); + + lbBlock *next = lb_create_block(p, "global.init", true); + lb_emit_jump(p, next); + lb_start_block(p, next); + } + + lb_end_procedure_body(p); +} + +// A global is initialized by the module it is defined in, so each run of the init order +// within one module gets its own procedure, and the startup calls them in that order. +gb_internal void lb_add_global_variable_to_initialize(lbModule *m, lbGlobalVariable *var) { + lbGenerator *gen = m->gen; + lbProcedure *p = nullptr; + if (gen->global_init_procedures.count != 0) { + p = gen->global_init_procedures[gen->global_init_procedures.count-1]; + } + if (p == nullptr || p->module != m) { + gbString name = gb_string_make(permanent_allocator(), LB_STARTUP_RUNTIME_PROC_NAME); + name = gb_string_append_fmt(name, "$%td", gen->global_init_procedures.count); + + p = lb_create_startup_procedure(m, make_string_c(name)); + array_init(&p->global_variables, heap_allocator()); + p->generate_body = lb_global_init_procedure_generate_body; + + string_map_set(&m->gen_procs, p->name, p); + mpsc_enqueue(&m->procedures_to_generate, p); + array_add(&gen->global_init_procedures, p); + } + array_add(&p->global_variables, var); +} + +gb_internal lbProcedure *lb_create_startup_runtime(lbModule *main_module, lbProcedure *objc_names) { // Startup Runtime + lbProcedure *p = lb_create_startup_procedure(main_module, str_lit(LB_STARTUP_RUNTIME_PROC_NAME)); + p->objc_names = objc_names; + + lb_begin_procedure_body(p); + + if (p->objc_names) { + LLVMBuildCall2(p->builder, lb_type_internal_for_procedures_raw(main_module, p->objc_names->type), p->objc_names->value, nullptr, 0, ""); + } + + for (lbProcedure *init : main_module->gen->global_init_procedures) { + lbValue value = {init->value, init->type}; + if (init->module != main_module) { + lbProcedure *decl = lb_create_dummy_procedure(main_module, init->name, init->type); + value = {decl->value, decl->type}; + } + lb_emit_call(p, value, {}, ProcInlining_none, ProcTailing_none); + } + + for (Entity *e : main_module->gen->info->init_procedures) { + lbValue value = lb_find_procedure_value_from_entity(main_module, e); + lb_emit_call(p, value, {}, ProcInlining_none, ProcTailing_none); + } + + lb_end_procedure_body(p); return p; } @@ -2421,12 +2538,7 @@ gb_internal bool lb_is_module_empty(lbModule *m) { } for (auto g = LLVMGetFirstGlobal(m->mod); g != nullptr; g = LLVMGetNextGlobal(g)) { - LLVMLinkage linkage = LLVMGetLinkage(g); - if (linkage == LLVMExternalLinkage || - linkage == LLVMWeakAnyLinkage) { - continue; - } - if (!LLVMIsExternallyInitialized(g)) { + if (!LLVMIsDeclaration(g) && !LLVMIsExternallyInitialized(g)) { return false; } } @@ -2679,6 +2791,9 @@ gb_internal i64 lb_module_cost(lbModule *m) { gb_internal WORKER_TASK_PROC(lb_generate_procedures_worker_proc) { lbModule *m = cast(lbModule *)data; + for (lbGlobalVariable *var : m->global_variables) { + lb_create_global_variable(m, var); + } if (m == &m->gen->default_module) { lb_setup_type_info_data(m); } @@ -2692,7 +2807,7 @@ gb_internal void lb_generate_procedures(lbGenerator *gen, bool do_threading) { if (do_threading) { for (auto const &entry : gen->modules) { lbModule *m = entry.value; - m->estimated_cost = m->procedures_to_generate.count.load(std::memory_order_relaxed); + m->estimated_cost = m->procedures_to_generate.count.load(std::memory_order_relaxed) + m->global_variables.count; } gen->default_module.estimated_cost = I64_MAX; for (lbModule *m : lb_modules_by_cost(gen)) { @@ -3474,15 +3589,12 @@ gb_internal bool lb_generate_code(lbGenerator *gen) { } - isize global_variable_max_count = 0; bool already_has_entry_point = false; for (Entity *e : info->entities) { String name = e->token.string; - if (e->kind == Entity_Variable) { - global_variable_max_count++; - } else if (e->kind == Entity_Procedure) { + if (e->kind == Entity_Procedure) { if ((e->scope->flags&ScopeFlag_Init) && name == "main") { GB_ASSERT(e == info->entry_point); } @@ -3504,8 +3616,8 @@ gb_internal bool lb_generate_code(lbGenerator *gen) { } } - - auto global_variables = array_make(permanent_allocator(), 0, global_variable_max_count); + // `lb_setup_type_info_data` sets its initializer + Entity *type_table = scope_lookup_current(info->runtime_package->scope, string_interner_insert(str_lit("type_table"))); for (DeclInfo *d : info->variable_init_order) { Entity *e = d->entity; @@ -3524,141 +3636,19 @@ gb_internal bool lb_generate_code(lbGenerator *gen) { } GB_ASSERT(e->kind == Entity_Variable); - - bool is_foreign = e->Variable.is_foreign; - bool is_export = e->Variable.is_export; - - lbModule *default_module = &gen->default_module; - - lbModule *m = default_module; - lbModule *e_module = lb_module_of_entity(gen, e, default_module); - - bool const split_globals_across_modules = false; - if (split_globals_across_modules) { - m = e_module; + lbModule *m = lb_module_of_entity(gen, e, default_module); + if (e == type_table) { + m = default_module; } + e->code_gen_module = m; - String name = lb_get_entity_name(m, e); + lbGlobalVariable *var = permanent_alloc_item(); + var->decl = decl; + array_add(&m->global_variables, var); - lbGlobalVariable var = {}; - var.decl = decl; - - lbValue g = {}; - g.type = alloc_type_pointer(e->type); - g.value = LLVMAddGlobal(m->mod, lb_type(m, e->type), alloc_cstring(permanent_allocator(), name)); - - if (decl->init_expr != nullptr) { - TypeAndValue tav = type_and_value_of_expr(decl->init_expr); - if (!is_type_any(e->type)) { - if (tav.mode != Addressing_Invalid) { - if (tav.value.kind != ExactValue_Invalid) { - auto cc = LB_CONST_CONTEXT_DEFAULT; - cc.is_rodata = e->kind == Entity_Variable && e->Variable.is_rodata; - cc.allow_local = false; - cc.link_section = e->Variable.link_section; - - ExactValue v = tav.value; - lbValue init = lb_const_value(m, e->type, v, cc); - - - LLVMDeleteGlobal(g.value); - g.value = nullptr; - g.value = LLVMAddGlobal(m->mod, LLVMTypeOf(init.value), alloc_cstring(permanent_allocator(), name)); - - LLVMSetInitializer(g.value, init.value); - var.is_initialized = true; - if (cc.is_rodata) { - LLVMSetGlobalConstant(g.value, true); - } - } - } - } - if (!var.is_initialized && is_type_untyped_nil(tav.type)) { - var.is_initialized = true; - if (e->kind == Entity_Variable && e->Variable.is_rodata) { - LLVMSetGlobalConstant(g.value, true); - } - } - } else if (e->kind == Entity_Variable && e->Variable.is_rodata) { - LLVMSetGlobalConstant(g.value, true); + if (decl->init_expr != nullptr && !lb_global_variable_has_constant_init(e, decl)) { + lb_add_global_variable_to_initialize(m, var); } - - - lb_apply_thread_local_model(g.value, e->Variable.thread_local_model); - - if (is_foreign) { - LLVMSetLinkage(g.value, LLVMExternalLinkage); - LLVMSetDLLStorageClass(g.value, LLVMDLLImportStorageClass); - LLVMSetExternallyInitialized(g.value, true); - lb_add_foreign_library_path(m, e->Variable.foreign_library); - } else if (LLVMGetInitializer(g.value) == nullptr) { - LLVMSetInitializer(g.value, LLVMConstNull(lb_type(m, e->type))); - } - if (is_export) { - LLVMSetLinkage(g.value, LLVMDLLExportLinkage); - LLVMSetDLLStorageClass(g.value, LLVMDLLExportStorageClass); - } else if (!is_foreign) { - LLVM_SET_INTERNAL_WEAK_LINKAGE(g.value); - } - lb_set_linkage_from_entity_flags(m, g.value, e->flags); - LLVMSetAlignment(g.value, cast(u32)type_align_of(e->type)); - - if (e->Variable.link_section.len > 0) { - LLVMSetSection(g.value, alloc_cstring(permanent_allocator(), e->Variable.link_section)); - } - if (e->flags & EntityFlag_Require) { - lb_append_to_compiler_used(m, g.value); - } - - if (m->debug_builder) { - String global_name = e->token.string; - if (global_name.len != 0 && global_name != "_") { - LLVMMetadataRef llvm_file = lb_get_file_metadata(m, e->file); - LLVMMetadataRef llvm_scope = llvm_file; - - LLVMBool local_to_unit = LLVMGetLinkage(g.value) == LLVMInternalLinkage; - - LLVMMetadataRef llvm_expr = LLVMDIBuilderCreateExpression(m->debug_builder, nullptr, 0); - LLVMMetadataRef llvm_decl = nullptr; - - u32 align_in_bits = cast(u32)(8*type_align_of(e->type)); - - LLVMMetadataRef global_variable_metadata = LLVMDIBuilderCreateGlobalVariableExpression( - m->debug_builder, llvm_scope, - cast(char const *)global_name.text, global_name.len, - "", 0, // linkage - llvm_file, e->token.pos.line, - lb_debug_type(m, e->type), - local_to_unit, - llvm_expr, - llvm_decl, - align_in_bits - ); - lb_set_llvm_metadata(m, g.value, global_variable_metadata); - LLVMGlobalSetMetadata(g.value, 0, global_variable_metadata); - } - } - - if (default_module == m) { - g.value = LLVMConstPointerCast(g.value, lb_type(m, alloc_type_pointer(e->type))); - - var.var = g; - array_add(&global_variables, var); - } else { - lbValue local_g = {}; - local_g.type = alloc_type_pointer(e->type); - local_g.value = LLVMAddGlobal(default_module->mod, lb_type(default_module, e->type), alloc_cstring(permanent_allocator(), name)); - LLVMSetLinkage(local_g.value, LLVMExternalLinkage); - - var.var = local_g; - array_add(&global_variables, var); - - lb_add_entity(default_module, e, local_g); - lb_add_member(default_module, name, local_g); - } - - lb_add_entity(m, e, g); - lb_add_member(m, name, g); } if (build_context.ODIN_DEBUG) { @@ -3687,7 +3677,7 @@ gb_internal bool lb_generate_code(lbGenerator *gen) { gen->objc_names = lb_create_objc_names(default_module); TIME_SECTION("LLVM Runtime Startup Creation (Global Variables & @(init))"); - gen->startup_runtime = lb_create_startup_runtime(default_module, gen->objc_names, global_variables); + gen->startup_runtime = lb_create_startup_runtime(default_module, gen->objc_names); TIME_SECTION("LLVM Runtime Cleanup Creation & @(fini)"); gen->cleanup_runtime = lb_create_cleanup_runtime(default_module); diff --git a/src/llvm_backend.hpp b/src/llvm_backend.hpp index 02808aecc..ac2d452fe 100644 --- a/src/llvm_backend.hpp +++ b/src/llvm_backend.hpp @@ -24,6 +24,7 @@ #endif struct lbProcedure; +struct lbGlobalVariable; struct lbValue { LLVMValueRef value; @@ -164,6 +165,7 @@ struct lbModule { MPSCQueue procedures_to_generate; Array global_procedures_to_create; Array global_types_to_create; + Array global_variables; BlockingMutex generated_procedures_mutex; Array generated_procedures; @@ -227,6 +229,8 @@ struct lbGenerator : LinkerData { lbProcedure *cleanup_runtime; lbProcedure *objc_names; + Array global_init_procedures; + MPSCQueue entities_to_correct_linkage; MPSCQueue objc_selectors; MPSCQueue objc_classes; @@ -401,7 +405,7 @@ struct lbProcedure { Array lifetime_scopes; void (*generate_body)(lbModule *m, lbProcedure *p); - Array *global_variables; + Array global_variables; lbProcedure *objc_names; Type *internal_gen_type; // map_set, map_get, etc. diff --git a/src/llvm_backend_general.cpp b/src/llvm_backend_general.cpp index 6b7fefcc6..417504376 100644 --- a/src/llvm_backend_general.cpp +++ b/src/llvm_backend_general.cpp @@ -164,6 +164,7 @@ gb_internal WORKER_TASK_PROC(lb_init_module_worker_proc) { array_init(&m->global_procedures_to_create, a, 0, 1024); array_init(&m->global_types_to_create, a, 0, 1024); + array_init(&m->global_variables, a); mpsc_init(&m->missing_procedures_to_check, a); map_init(&m->debug_values); @@ -194,18 +195,27 @@ gb_internal void lb_init_module(lbModule *m, bool do_threading) { gb_internal i64 lb_estimate_file_code_sizes(CheckerInfo *info, PtrMap *sizes) { i64 total = 0; for (Entity *e : info->entities) { - if (e->kind != Entity_Procedure || e->file == nullptr || e->min_dep_count.load(std::memory_order_relaxed) == 0) { + if (e->file == nullptr || e->min_dep_count.load(std::memory_order_relaxed) == 0) { continue; } if (e->scope == nullptr || (e->scope->flags & ScopeFlag_File) == 0) { continue; } DeclInfo *d = e->decl_info; - if (d == nullptr || d->proc_lit == nullptr || d->proc_lit->kind != Ast_ProcLit || d->proc_lit->ProcLit.body == nullptr) { + Ast *code = nullptr; + if (e->kind == Entity_Procedure) { + if (d != nullptr && d->proc_lit != nullptr && d->proc_lit->kind == Ast_ProcLit) { + code = d->proc_lit->ProcLit.body; + } + } else if (e->kind == Entity_Variable) { + if (d != nullptr) { + code = d->init_expr; + } + } + if (code == nullptr) { continue; } - Ast *body = d->proc_lit->ProcLit.body; - i64 size = gb_max(cast(i64)(ast_end_token(body).pos.offset - ast_token(body).pos.offset), 1); + i64 size = gb_max(cast(i64)(ast_end_token(code).pos.offset - ast_token(code).pos.offset), 1); i64 *found = map_get(sizes, e->file); if (found) { *found += size; @@ -426,6 +436,7 @@ gb_internal bool lb_init_generator(lbGenerator *gen, Checker *c) { map_init(&gen->modules, gen->info->packages.count*2); map_init(&gen->modules_through_ctx, gen->info->packages.count*2); map_init(&gen->file_modules); + array_init(&gen->global_init_procedures, heap_allocator()); if (USE_SEPARATE_MODULES) { bool module_per_file = build_context.module_per_file && (build_context.optimization_level <= 0 || build_context.lto_kind != LTO_None); diff --git a/tests/issues/run.bat b/tests/issues/run.bat index a921c04b3..f7538ca21 100644 --- a/tests/issues/run.bat +++ b/tests/issues/run.bat @@ -93,6 +93,8 @@ clang -c ..\test_issue_sysv_abi.c -o test_issue_sysv_abi_c.o || exit /b ..\..\..\odin test ..\test_issue_procedure_of_specialized.odin %COMMON% || exit /b ..\..\..\odin test ..\test_issue_7587.odin %COMMON% || exit /b ..\..\..\odin run ..\test_issue_7596.odin %COMMON% || exit /b +..\..\..\odin test ..\test_issue_split_globals -define:ODIN_TEST_FANCY=false -vet -strict-style -ignore-unused-defineables || exit /b +..\..\..\odin test ..\test_issue_split_globals -define:ODIN_TEST_FANCY=false -vet -strict-style -ignore-unused-defineables -debug || exit /b @echo off diff --git a/tests/issues/run.sh b/tests/issues/run.sh index e7edc7d0e..523c52322 100755 --- a/tests/issues/run.sh +++ b/tests/issues/run.sh @@ -119,6 +119,8 @@ $ODIN test ../test_issue_7700.odin $COMMON $ODIN test ../test_issue_procedure_of_specialized.odin $COMMON $ODIN test ../test_issue_7587.odin $COMMON $ODIN run ../test_issue_7596.odin $COMMON +$ODIN test ../test_issue_split_globals -define:ODIN_TEST_FANCY=false -vet -strict-style -ignore-unused-defineables +$ODIN test ../test_issue_split_globals -define:ODIN_TEST_FANCY=false -vet -strict-style -ignore-unused-defineables -debug $ODIN test ../test_issue_7421.odin $COMMON if [[ $($ODIN check ../test_issue_7421_tagged_duplicate.odin $COMMON_CHECK 2>&1 >/dev/null | grep -c "Error: Duplicate case") -eq 1 ]]; then echo "SUCCESSFUL 1/1" diff --git a/tests/issues/test_issue_split_globals/main.odin b/tests/issues/test_issue_split_globals/main.odin new file mode 100644 index 000000000..4ac49658e --- /dev/null +++ b/tests/issues/test_issue_split_globals/main.odin @@ -0,0 +1,47 @@ +// Globals are defined and initialized in the module of their own package +package test_issue_split_globals + +import "core:testing" +import "other" +import "other/data" + +C := other.A + 10*other.B +D := other.next() + 0*C +E := data.PTR^ +F := other.callback() +G := other.P_ptr +H := &other.TABLE + +init_counter: int + +@(init) +record_counter :: proc "contextless" () { + init_counter = other.counter +} + +@(test) +test_split_globals :: proc(t: ^testing.T) { + values := [4]int{other.A, other.B, other.get_internal(), D} + seen: [5]bool + for v in values { + testing.expect(t, 1 <= v && v <= 4) + if 1 <= v && v <= 4 { + testing.expect(t, !seen[v]) + seen[v] = true + } + } + testing.expect(t, D > other.A && D > other.B) + testing.expect_value(t, C, other.A + 10*other.B) + testing.expect_value(t, other.counter, 4) + testing.expect_value(t, init_counter, 4) + + testing.expect_value(t, E, 20) + testing.expect_value(t, data.PTR, &data.VALUES[1]) + testing.expect_value(t, F, 7) + testing.expect_value(t, G, &other.P) + testing.expect_value(t, H^[0], &other.P) + testing.expect_value(t, other.boxed^, other.Point{3, 4}) + testing.expect_value(t, other.NAMES[2], "z") + testing.expect_value(t, other.RO[3], 4) + testing.expect_value(t, other.any_p.(other.Point), other.Point{1, 2}) +} diff --git a/tests/issues/test_issue_split_globals/other/data/data.odin b/tests/issues/test_issue_split_globals/other/data/data.odin new file mode 100644 index 000000000..eb00a93e8 --- /dev/null +++ b/tests/issues/test_issue_split_globals/other/data/data.odin @@ -0,0 +1,4 @@ +package data + +VALUES := [3]int{10, 20, 30} +PTR := &VALUES[1] diff --git a/tests/issues/test_issue_split_globals/other/other.odin b/tests/issues/test_issue_split_globals/other/other.odin new file mode 100644 index 000000000..79a7805f8 --- /dev/null +++ b/tests/issues/test_issue_split_globals/other/other.odin @@ -0,0 +1,36 @@ +package other + +counter: int + +next :: proc "contextless" () -> int { + counter += 1 + return counter +} + +A := next() +B := next() + +@(linkage="internal") +internal_value := next() + +get_internal :: proc "contextless" () -> int { + return internal_value +} + +Point :: struct { + x, y: int, +} + +P := Point{1, 2} +P_ptr := &P +TABLE := []^Point{&P} +boxed := &Point{3, 4} +NAMES := [3]string{"x", "y", "z"} +any_p: any = P + +@(rodata) +RO := [4]int{1, 2, 3, 4} + +callback := proc "contextless" () -> int { + return 7 +} From 8b4f855fc65864d3bdc22d4ace10792bb19b5bc1 Mon Sep 17 00:00:00 2001 From: gingerBill Date: Sat, 3 Oct 2026 09:42:26 +0100 Subject: [PATCH 161/215] Fix a union constant from a field omitted in a constant compound literal being nil --- src/llvm_backend_const.cpp | 6 ++- .../test_issue_omitted_field_union.odin | 51 +++++++++++++++++++ 2 files changed, 56 insertions(+), 1 deletion(-) create mode 100644 tests/issues/test_issue_omitted_field_union.odin diff --git a/src/llvm_backend_const.cpp b/src/llvm_backend_const.cpp index aa080dca8..db123b142 100644 --- a/src/llvm_backend_const.cpp +++ b/src/llvm_backend_const.cpp @@ -946,7 +946,11 @@ gb_internal lbValue lb_const_value(lbModule *m, Type *type, ExactValue value, lb Type *value_type = value.variant_type; switch (value.kind) { case ExactValue_Invalid: - return lb_const_nil(m, original_type); + // the zero value of a variant, e.g. a field omitted from a constant compound literal + if (value_type == nullptr || are_types_identical(value_type, original_type)) { + return lb_const_nil(m, original_type); + } + break; case ExactValue_Compound: { ast_node(cl, CompoundLit, value.value_compound); diff --git a/tests/issues/test_issue_omitted_field_union.odin b/tests/issues/test_issue_omitted_field_union.odin new file mode 100644 index 000000000..c71246ba0 --- /dev/null +++ b/tests/issues/test_issue_omitted_field_union.odin @@ -0,0 +1,51 @@ +// A field omitted from a constant compound literal is the zero value of its type, +// so converting it to a union holds that variant rather than nil +package test_issues + +import "core:testing" + +Apply :: struct { + position: [3]f64, + roll, pitch, yaw: f64, +} + +APPLY_DEFAULT : Apply : { position = {1, 2, 3}, yaw = 26.5, pitch = -24 } + +Value :: union { bool, f64, [3]f64 } + +Info :: struct { + name: string, + default_value: Value, +} + +INFOS :: []Info{ + { name = "yaw", default_value = APPLY_DEFAULT.yaw }, + { name = "roll", default_value = APPLY_DEFAULT.roll }, +} + +infos := INFOS + +global_roll: Value = APPLY_DEFAULT.roll + +@(test) +test_omitted_field_union :: proc(t: ^testing.T) { + yaw, yaw_ok := infos[0].default_value.(f64) + testing.expect(t, yaw_ok) + testing.expect_value(t, yaw, 26.5) + + roll, roll_ok := infos[1].default_value.(f64) + testing.expect(t, roll_ok) + testing.expect_value(t, roll, 0) + + for info in INFOS { + _, ok := info.default_value.(f64) + testing.expect(t, ok) + } + + _, global_ok := global_roll.(f64) + testing.expect(t, global_ok) + + local_roll: Value = APPLY_DEFAULT.roll + _, local_ok := local_roll.(f64) + testing.expect(t, local_ok) +} From e5cc35c44554caa4f9f56a7772269bbe48c3eabb Mon Sep 17 00:00:00 2001 From: gingerBill Date: Sat, 3 Oct 2026 11:02:55 +0100 Subject: [PATCH 162/215] Lower what LLVM's fast instruction selector cannot select before emitting objects, and declare debug variables through stack slots --- src/llvm_backend.cpp | 529 ++++++++++++++++++ src/llvm_backend_debug.cpp | 21 + src/llvm_backend_general.cpp | 55 +- src/llvm_backend_proc.cpp | 7 +- src/llvm_backend_utility.cpp | 21 + tests/issues/run.bat | 3 + tests/issues/run.sh | 3 + .../issues/test_issue_fast_isel_lowering.odin | 121 ++++ 8 files changed, 750 insertions(+), 10 deletions(-) create mode 100644 tests/issues/test_issue_fast_isel_lowering.odin diff --git a/src/llvm_backend.cpp b/src/llvm_backend.cpp index d39318215..6acc3c723 100644 --- a/src/llvm_backend.cpp +++ b/src/llvm_backend.cpp @@ -2545,6 +2545,531 @@ gb_internal bool lb_is_module_empty(lbModule *m) { return true; } +// NOTE(bill, 2026-10-03) +// +// LLVM's fast instruction selector cannot select a first class aggregate `load`, `store`, `insertvalue`, or `select`, +// and hands the rest of the block to SelectionDAG. +// SROA leaves many behind so it stores/loads the fields instead +enum { + LB_SCALARIZE_MAX_LEAVES = 32, + LB_SCALARIZE_MAX_DEPTH = 8, +}; + +struct lbAggregateLeaf { + unsigned path[LB_SCALARIZE_MAX_DEPTH]; + unsigned depth; +}; + +struct lbScalarizedPhi { + LLVMValueRef aggregate; + unsigned path[LB_SCALARIZE_MAX_DEPTH]; + unsigned depth; + LLVMValueRef field; + bool ok; +}; + +struct lbFastIselLowering { + lbModule * m; + LLVMBuilderRef builder; + LLVMValueRef store; + Array phis; +}; + +gb_internal i64 lb_aggregate_path_offset(LLVMTypeRef type, unsigned const *path, unsigned depth, LLVMTypeRef *leaf_type_) { + i64 offset = 0; + for (unsigned d = 0; d < depth; d++) { + if (LLVMGetTypeKind(type) == LLVMStructTypeKind) { + bool is_packed = LLVMIsPackedStruct(type); + i64 field_offset = 0; + for (unsigned i = 0; i <= path[d]; i++) { + LLVMTypeRef field = LLVMStructGetTypeAtIndex(type, i); + if (!is_packed) { + field_offset = llvm_align_formula(field_offset, lb_alignof(field)); + } + if (i == path[d]) { + type = field; + break; + } + field_offset += lb_sizeof(field); + } + offset += field_offset; + } else { + type = OdinLLVMGetArrayElementType(type); + offset += cast(i64)path[d] * lb_sizeof(type); + } + } + if (leaf_type_) *leaf_type_ = type; + return offset; +} + +gb_internal bool lb_aggregate_leaves(LLVMTypeRef type, unsigned *path, unsigned depth, lbAggregateLeaf *leaves, isize *leaf_count) { + LLVMTypeKind kind = LLVMGetTypeKind(type); + if (kind == LLVMStructTypeKind || kind == LLVMArrayTypeKind) { + if (depth >= LB_SCALARIZE_MAX_DEPTH) { + return false; + } + if (kind == LLVMStructTypeKind && LLVMIsOpaqueStruct(type)) { + return false; + } + unsigned count = kind == LLVMStructTypeKind ? LLVMCountStructElementTypes(type) : cast(unsigned)LLVMGetArrayLength(type); + for (unsigned i = 0; i < count; i++) { + path[depth] = i; + LLVMTypeRef elem = kind == LLVMStructTypeKind ? LLVMStructGetTypeAtIndex(type, i) : OdinLLVMGetArrayElementType(type); + if (!lb_aggregate_leaves(elem, path, depth+1, leaves, leaf_count)) { + return false; + } + } + return true; + } + + if (*leaf_count >= LB_SCALARIZE_MAX_LEAVES) { + return false; + } + + lbAggregateLeaf *leaf = &leaves[(*leaf_count)++]; + gb_memmove(leaf->path, path, depth*gb_size_of(unsigned)); + leaf->depth = depth; + return true; +} + +gb_internal unsigned lb_alignment_at_offset(unsigned alignment, i64 offset) { + unsigned a = gb_max(alignment, 1u); + while (offset % a != 0) { + a >>= 1; + } + return a; +} + +gb_internal LLVMValueRef lb_aggregate_field_gep(lbModule *m, LLVMBuilderRef b, LLVMTypeRef type, LLVMValueRef ptr, unsigned const *path, unsigned depth) { + LLVMValueRef indices[LB_SCALARIZE_MAX_DEPTH+1] = {}; + LLVMTypeRef i32 = LLVMInt32TypeInContext(m->ctx); + indices[0] = LLVMConstInt(i32, 0, false); + for (unsigned d = 0; d < depth; d++) { + indices[d+1] = LLVMConstInt(i32, path[d], false); + } + return LLVMBuildInBoundsGEP2(b, type, ptr, indices, depth+1, ""); +} + +// returns false if the field cannot be reached without an aggregate value, and sets `*field_` to nullptr when it is undefined +gb_internal bool lb_aggregate_field_value(lbFastIselLowering *s, LLVMValueRef v, unsigned const *path, unsigned depth, LLVMValueRef *field_) { + if (depth == 0) { + *field_ = (LLVMIsUndef(v) || LLVMIsPoison(v)) ? nullptr : v; + return true; + } + if (LLVMIsUndef(v) || LLVMIsPoison(v)) { + *field_ = nullptr; + return true; + } + + if (LLVMIsAConstant(v)) { + LLVMValueRef elem = LLVMGetAggregateElement(v, path[0]); + if (elem != nullptr) { + return lb_aggregate_field_value(s, elem, path+1, depth-1, field_); + } + } else if (LLVMIsAInsertValueInst(v)) { + unsigned n = LLVMGetNumIndices(v); + unsigned const *indices = LLVMGetIndices(v); + + unsigned k = 0; + while (k < n && k < depth && indices[k] == path[k]) { + k += 1; + } + + if (k == n) { + return lb_aggregate_field_value(s, LLVMGetOperand(v, 1), path+n, depth-n, field_); + } else if (k < depth) { + return lb_aggregate_field_value(s, LLVMGetOperand(v, 0), path, depth, field_); + } + return false; + } else if (LLVMIsAExtractValueInst(v)) { + unsigned n = LLVMGetNumIndices(v); + if (n + depth <= LB_SCALARIZE_MAX_DEPTH) { + unsigned full[LB_SCALARIZE_MAX_DEPTH]; + gb_memmove(full, LLVMGetIndices(v), n*gb_size_of(unsigned)); + gb_memmove(full+n, path, depth*gb_size_of(unsigned)); + return lb_aggregate_field_value(s, LLVMGetOperand(v, 0), full, n+depth, field_); + } + return false; + } else if (LLVMIsASelectInst(v)) { + LLVMValueRef x = nullptr; + LLVMValueRef y = nullptr; + if (!lb_aggregate_field_value(s, LLVMGetOperand(v, 1), path, depth, &x) || + !lb_aggregate_field_value(s, LLVMGetOperand(v, 2), path, depth, &y)) { + return false; + } + if (x == nullptr || y == nullptr) { + *field_ = x ? x : y; + return true; + } + LLVMPositionBuilderBefore(s->builder, s->store); + LLVMSetCurrentDebugLocation2(s->builder, LLVMInstructionGetDebugLoc(s->store)); + *field_ = LLVMBuildSelect(s->builder, LLVMGetOperand(v, 0), x, y, ""); + return true; + } else if (LLVMIsAPHINode(v)) { + for (lbScalarizedPhi const &e : s->phis) { + if (e.aggregate == v && + e.depth == depth && + gb_memcompare(e.path, path, depth*gb_size_of(unsigned)) == 0) { + *field_ = e.field; + return e.ok; + } + } + + LLVMTypeRef field_type = nullptr; + lb_aggregate_path_offset(LLVMTypeOf(v), path, depth, &field_type); + + LLVMPositionBuilderBefore(s->builder, v); + LLVMSetCurrentDebugLocation2(s->builder, nullptr); + + + // NOTE(bill): cached before its incoming values, as a loop reaches it again + isize index = s->phis.count; + lbScalarizedPhi entry = {}; + entry.aggregate = v; + gb_memmove(entry.path, path, depth*gb_size_of(unsigned)); + + LLVMValueRef phi = LLVMBuildPhi(s->builder, field_type, ""); + entry.depth = depth; + entry.field = phi; + entry.ok = true; + array_add(&s->phis, entry); + + LLVMValueRef saved_store = s->store; + bool ok = true; + unsigned incoming_count = LLVMCountIncoming(v); + for (unsigned k = 0; k < incoming_count; k++) { + LLVMBasicBlockRef block = LLVMGetIncomingBlock(v, k); + s->store = LLVMGetBasicBlockTerminator(block); + LLVMValueRef field = nullptr; + if (!lb_aggregate_field_value(s, LLVMGetIncomingValue(v, k), path, depth, &field)) { + ok = false; + field = nullptr; + } + if (field == nullptr) { + field = LLVMGetUndef(field_type); + } + LLVMAddIncoming(phi, &field, &block, 1); + } + s->store = saved_store; + s->phis[index].ok = ok; + *field_ = phi; + return ok; + } else if (LLVMIsALoadInst(v) && !LLVMGetVolatile(v) && LLVMGetOrdering(v) == LLVMAtomicOrderingNotAtomic) { + // NOTE(bill): Read the field where the aggregate was read, as the memory may change before the store + LLVMTypeRef type = LLVMTypeOf(v); + LLVMTypeRef field_type = nullptr; + i64 offset = lb_aggregate_path_offset(type, path, depth, &field_type); + + LLVMPositionBuilderBefore(s->builder, LLVMGetNextInstruction(v)); + LLVMSetCurrentDebugLocation2(s->builder, LLVMInstructionGetDebugLoc(v)); + + LLVMValueRef ptr = lb_aggregate_field_gep(s->m, s->builder, type, LLVMGetOperand(v, 0), path, depth); + LLVMValueRef field = LLVMBuildLoad2(s->builder, field_type, ptr, ""); + LLVMSetAlignment(field, lb_alignment_at_offset(LLVMGetAlignment(v), offset)); + + *field_ = field; + return true; + } + + if (depth == 1) { + LLVMPositionBuilderBefore(s->builder, s->store); + LLVMSetCurrentDebugLocation2(s->builder, LLVMInstructionGetDebugLoc(s->store)); + *field_ = LLVMBuildExtractValue(s->builder, v, path[0], ""); + return true; + } + return false; +} + +gb_internal bool lb_scalarize_aggregate_store(lbFastIselLowering *s, LLVMValueRef store) { + LLVMValueRef value = LLVMGetOperand(store, 0); + LLVMValueRef ptr = LLVMGetOperand(store, 1); + LLVMTypeRef type = LLVMTypeOf(value); + + lbAggregateLeaf leaves[LB_SCALARIZE_MAX_LEAVES] = {}; + isize leaf_count = 0; + unsigned path[LB_SCALARIZE_MAX_DEPTH] = {}; + + if (!lb_aggregate_leaves(type, path, 0, leaves, &leaf_count)) { + return false; + } + s->store = store; + + LLVMValueRef fields[LB_SCALARIZE_MAX_LEAVES] = {}; + for (isize i = 0; i < leaf_count; i++) { + if (!lb_aggregate_field_value(s, value, leaves[i].path, leaves[i].depth, &fields[i])) { + return false; + } + } + + unsigned alignment = LLVMGetAlignment(store); + + LLVMPositionBuilderBefore(s->builder, store); + LLVMSetCurrentDebugLocation2(s->builder, LLVMInstructionGetDebugLoc(store)); + + for (isize i = 0; i < leaf_count; i++) { + if (fields[i] == nullptr) { + continue; + } + i64 offset = lb_aggregate_path_offset(type, leaves[i].path, leaves[i].depth, nullptr); + LLVMValueRef field_ptr = lb_aggregate_field_gep(s->m, s->builder, type, ptr, leaves[i].path, leaves[i].depth); + LLVMValueRef field_store = LLVMBuildStore(s->builder, fields[i], field_ptr); + LLVMSetAlignment(field_store, lb_alignment_at_offset(alignment, offset)); + } + LLVMInstructionEraseFromParent(store); + return true; +} + +gb_internal bool lb_is_aggregate_type(LLVMTypeRef type) { + LLVMTypeKind kind = LLVMGetTypeKind(type); + return kind == LLVMStructTypeKind || kind == LLVMArrayTypeKind; +} + +gb_internal bool lb_is_plain_access(LLVMValueRef inst) { + return !LLVMGetVolatile(inst) && LLVMGetOrdering(inst) == LLVMAtomicOrderingNotAtomic; +} + +gb_internal void lb_lower_bool_select(lbFastIselLowering *s, LLVMValueRef select) { + LLVMValueRef c = LLVMGetOperand(select, 0); + LLVMValueRef x = LLVMGetOperand(select, 1); + LLVMValueRef y = LLVMGetOperand(select, 2); + if (LLVMGetTypeKind(LLVMTypeOf(c)) != LLVMIntegerTypeKind) { + return; + } + LLVMPositionBuilderBefore(s->builder, select); + LLVMSetCurrentDebugLocation2(s->builder, LLVMInstructionGetDebugLoc(select)); + LLVMValueRef t = LLVMConstInt(LLVMTypeOf(c), 1, false); + + LLVMValueRef res = nullptr; + if (LLVMIsAConstantInt(x)) { + res = LLVMConstIntGetZExtValue(x) ? LLVMBuildOr(s->builder, c, y, "") : LLVMBuildAnd(s->builder, LLVMBuildXor(s->builder, c, t, ""), y, ""); + } else if (LLVMIsAConstantInt(y)) { + res = LLVMConstIntGetZExtValue(y) ? LLVMBuildOr(s->builder, LLVMBuildXor(s->builder, c, t, ""), x, "") : LLVMBuildAnd(s->builder, c, x, ""); + } else { + LLVMValueRef a = LLVMBuildAnd(s->builder, c, x, ""); + LLVMValueRef b = LLVMBuildAnd(s->builder, LLVMBuildXor(s->builder, c, t, ""), y, ""); + res = LLVMBuildOr(s->builder, a, b, ""); + } + LLVMReplaceAllUsesWith(select, res); + LLVMInstructionEraseFromParent(select); +} + +gb_internal void lb_truncate_bool_arguments(lbFastIselLowering *s, LLVMValueRef call) { + LLVMTypeRef i1 = LLVMInt1TypeInContext(s->m->ctx); + LLVMTypeRef i8 = LLVMInt8TypeInContext(s->m->ctx); + LLVMBasicBlockRef block = LLVMGetInstructionParent(call); + unsigned arg_count = LLVMGetNumArgOperands(call); + for (unsigned a = 0; a < arg_count; a++) { + LLVMValueRef arg = LLVMGetOperand(call, a); + if (LLVMTypeOf(arg) != i1 || LLVMIsAConstantInt(arg)) { + continue; + } + LLVMUseRef first_use = LLVMGetFirstUse(arg); + if (LLVMIsATruncInst(arg) && LLVMGetInstructionParent(arg) == block && + first_use != nullptr && LLVMGetNextUse(first_use) == nullptr) { + continue; + } + LLVMPositionBuilderBefore(s->builder, call); + LLVMSetCurrentDebugLocation2(s->builder, LLVMInstructionGetDebugLoc(call)); + LLVMValueRef byte = LLVMBuildZExt(s->builder, arg, i8, ""); + LLVMSetOperand(call, a, LLVMBuildTrunc(s->builder, byte, i1, "")); + } +} + +gb_internal void lb_lower_small_switch(lbFastIselLowering *s, LLVMValueRef sw) { + enum {MAX_CASES = 3}; + LLVMValueRef cond = LLVMGetOperand(sw, 0); + unsigned case_count = (cast(unsigned)LLVMGetNumOperands(sw) - 2) / 2; + if (case_count == 0 || case_count > MAX_CASES || LLVMGetIntTypeWidth(LLVMTypeOf(cond)) > 64) { + return; + } + + LLVMBasicBlockRef block = LLVMGetInstructionParent(sw); + LLVMBasicBlockRef next_block = LLVMGetNextBasicBlock(block); + + LLVMValueRef fn = LLVMGetBasicBlockParent(block); + LLVMMetadataRef loc = LLVMInstructionGetDebugLoc(sw); + + LLVMBasicBlockRef from[MAX_CASES+1] = {}; + LLVMBasicBlockRef to [MAX_CASES+1] = {}; + + LLVMBasicBlockRef curr = block; + + LLVMPositionBuilderBefore(s->builder, sw); + LLVMSetCurrentDebugLocation2(s->builder, loc); + + for (unsigned j = 0; j < case_count; j++) { + LLVMBasicBlockRef dest = LLVMGetSuccessor(sw, j+1); + LLVMBasicBlockRef else_block = LLVMGetSwitchDefaultDest(sw); + if (j+1 < case_count) { + if (next_block != nullptr) { + else_block = LLVMInsertBasicBlockInContext(s->m->ctx, next_block, ""); + } else { + else_block = LLVMAppendBasicBlockInContext(s->m->ctx, fn, ""); + } + } + + LLVMValueRef cmp = LLVMBuildICmp(s->builder, LLVMIntEQ, cond, LLVMGetOperand(sw, 2 + 2*j), ""); + LLVMBuildCondBr(s->builder, cmp, dest, else_block); + + from[j] = curr; + to[j] = dest; + + if (j+1 < case_count) { + curr = else_block; + LLVMPositionBuilderAtEnd(s->builder, curr); + LLVMSetCurrentDebugLocation2(s->builder, loc); + } + } + from[case_count] = curr; + to [case_count] = LLVMGetSwitchDefaultDest(sw); + LLVMInstructionEraseFromParent(sw); + + // the incoming entries for `block` become one for each new edge + for (unsigned e = 0; e <= case_count; e++) { + bool seen = false; + for (unsigned k = 0; k < e; k++) { + seen |= to[k] == to[e]; + } + if (seen) { + continue; + } + + LLVMBasicBlockRef dest = to[e]; + for (LLVMValueRef phi = LLVMGetFirstInstruction(dest); phi != nullptr && LLVMIsAPHINode(phi); /**/) { + LLVMValueRef next = LLVMGetNextInstruction(phi); + LLVMValueRef value_from_block = nullptr; + + unsigned incoming_count = LLVMCountIncoming(phi); + for (unsigned k = 0; k < incoming_count; k++) { + if (LLVMGetIncomingBlock(phi, k) == block) { + value_from_block = LLVMGetIncomingValue(phi, k); + } + } + + if (value_from_block != nullptr) { + LLVMPositionBuilderBefore(s->builder, phi); + LLVMSetCurrentDebugLocation2(s->builder, nullptr); + + LLVMValueRef new_phi = LLVMBuildPhi(s->builder, LLVMTypeOf(phi), ""); + for (unsigned k = 0; k < incoming_count; k++) { + LLVMBasicBlockRef incoming_block = LLVMGetIncomingBlock(phi, k); + if (incoming_block != block) { + LLVMValueRef incoming_value = LLVMGetIncomingValue(phi, k); + LLVMAddIncoming(new_phi, &incoming_value, &incoming_block, 1); + } + } + for (unsigned k = 0; k <= case_count; k++) { + if (to[k] == dest) { + LLVMAddIncoming(new_phi, &value_from_block, &from[k], 1); + } + } + LLVMReplaceAllUsesWith(phi, new_phi); + LLVMInstructionEraseFromParent(phi); + } + + phi = next; + } + } +} + +gb_internal void lb_lower_for_fast_isel(lbModule *m) { + lbFastIselLowering s = {}; + s.m = m; + + s.builder = LLVMCreateBuilderInContext(m->ctx); + defer (LLVMDisposeBuilder(s.builder)); + + array_init(&s.phis, heap_allocator()); + defer (array_free(&s.phis)); + + auto work = array_make(heap_allocator(), 0, 64); + defer (array_free(&work)); + + for (LLVMValueRef fn = LLVMGetFirstFunction(m->mod); fn != nullptr; fn = LLVMGetNextFunction(fn)) { + array_clear(&work); + array_clear(&s.phis); + + for (LLVMBasicBlockRef bb = LLVMGetFirstBasicBlock(fn); bb != nullptr; bb = LLVMGetNextBasicBlock(bb)) { + for (LLVMValueRef i = LLVMGetFirstInstruction(bb); i != nullptr; i = LLVMGetNextInstruction(i)) { + if (LLVMIsAStoreInst(i) && lb_is_plain_access(i) && lb_is_aggregate_type(LLVMTypeOf(LLVMGetOperand(i, 0)))) { + array_add(&work, i); + } + } + } + for (LLVMValueRef store : work) { + lb_scalarize_aggregate_store(&s, store); + } + + // NOTE(bill): A field read out of an aggregate value is read where that aggregate came from + array_clear(&work); + for (LLVMBasicBlockRef bb = LLVMGetFirstBasicBlock(fn); bb != nullptr; bb = LLVMGetNextBasicBlock(bb)) { + for (LLVMValueRef i = LLVMGetFirstInstruction(bb); i != nullptr; i = LLVMGetNextInstruction(i)) { + if (LLVMIsAExtractValueInst(i) && !lb_is_aggregate_type(LLVMTypeOf(i))) { + array_add(&work, i); + } else if (LLVMIsASelectInst(i) && LLVMTypeOf(i) == LLVMInt1TypeInContext(m->ctx)) { + array_add(&work, i); + } else if (LLVMIsACallInst(i)) { + array_add(&work, i); + } else if (LLVMIsASwitchInst(i)) { + array_add(&work, i); + } + } + } + for (LLVMValueRef i : work) { + if (LLVMIsASelectInst(i)) { + lb_lower_bool_select(&s, i); + continue; + } + if (LLVMIsACallInst(i)) { + lb_truncate_bool_arguments(&s, i); + continue; + } + if (LLVMIsASwitchInst(i)) { + lb_lower_small_switch(&s, i); + continue; + } + LLVMValueRef agg = LLVMGetOperand(i, 0); + unsigned n = LLVMGetNumIndices(i); + if (n > LB_SCALARIZE_MAX_DEPTH) { + continue; + } + + if (!(LLVMIsAConstant(agg) || + LLVMIsAInsertValueInst(agg) || + LLVMIsASelectInst(agg) || + LLVMIsAPHINode(agg) || + (LLVMIsALoadInst(agg) && lb_is_plain_access(agg)))) { + continue; + } + + s.store = i; + + LLVMValueRef field = nullptr; + if (lb_aggregate_field_value(&s, agg, LLVMGetIndices(i), n, &field) && field != nullptr) { + LLVMReplaceAllUsesWith(i, field); + LLVMInstructionEraseFromParent(i); + } + } + + bool removed = true; + while (removed) { + removed = false; + for (LLVMBasicBlockRef bb = LLVMGetFirstBasicBlock(fn); bb != nullptr; bb = LLVMGetNextBasicBlock(bb)) { + for (LLVMValueRef i = LLVMGetFirstInstruction(bb); i != nullptr; /**/) { + LLVMValueRef next = LLVMGetNextInstruction(i); + if (LLVMGetFirstUse(i) == nullptr && + (LLVMIsAInsertValueInst(i) || LLVMIsAExtractValueInst(i) || LLVMIsASelectInst(i) || LLVMIsAPHINode(i) || + LLVMIsAGetElementPtrInst(i) || (LLVMIsALoadInst(i) && lb_is_plain_access(i)))) { + LLVMInstructionEraseFromParent(i); + removed = true; + } + i = next; + } + } + } + } +} + struct lbLLVMEmitWorker { LLVMTargetMachineRef target_machine; LLVMCodeGenFileType code_gen_file_type; @@ -2743,6 +3268,10 @@ gb_internal WORKER_TASK_PROC(lb_llvm_module_pass_worker_proc) { return 1; } + if (lb_uses_fast_isel()) { + lb_lower_for_fast_isel(wd->m); + } + if (LLVM_IGNORE_VERIFICATION) { return 0; } diff --git a/src/llvm_backend_debug.cpp b/src/llvm_backend_debug.cpp index 2b1cbf872..af9f1323e 100644 --- a/src/llvm_backend_debug.cpp +++ b/src/llvm_backend_debug.cpp @@ -1206,6 +1206,25 @@ gb_internal LLVMMetadataRef lb_debug_type(lbModule *m, Type *type) { return dt; } +// A variable whose address is not a stack slot of its own (an argument, or an element or a pointer it refers to) +// would have its location tracked with `DBG_VALUE`s through every block of the procedure, +// so it is described through a stack slot holding that address instead +gb_internal LLVMValueRef lb_debug_storage(lbProcedure *p, LLVMValueRef storage, LLVMMetadataRef *expr) { + bool is_argument = LLVMIsAArgument(storage) != nullptr; + if (!is_argument && (!LLVMIsAInstruction(storage) || LLVMIsAAllocaInst(storage))) { + return storage; + } + LLVMBasicBlockRef insert_block = LLVMGetInsertBlock(p->builder); + LLVMValueRef slot = llvm_alloca(p, LLVMTypeOf(storage), build_context.ptr_size, ""); + LLVMPositionBuilderAtEnd(p->builder, is_argument ? p->decl_block->block : insert_block); + LLVMBuildStore(p->builder, storage, slot); + LLVMPositionBuilderAtEnd(p->builder, insert_block); + + uint64_t deref = 0x06; // DW_OP_deref + *expr = LLVMDIBuilderCreateExpression(p->module->debug_builder, &deref, 1); + return slot; +} + gb_internal void lb_add_debug_local_variable(lbProcedure *p, LLVMValueRef ptr, Type *type, Token const &token) { if (p->debug_info == nullptr) { return; @@ -1264,6 +1283,7 @@ gb_internal void lb_add_debug_local_variable(lbProcedure *p, LLVMValueRef ptr, T LLVMMetadataRef llvm_debug_loc = lb_debug_location_from_token_pos(p, token.pos); LLVMMetadataRef llvm_expr = LLVMDIBuilderCreateExpression(m->debug_builder, nullptr, 0); lb_set_llvm_metadata(m, ptr, llvm_expr); + storage = lb_debug_storage(p, storage, &llvm_expr); #if LLVM_VERSION_MAJOR <= 18 LLVMDIBuilderInsertDeclareAtEnd(m->debug_builder, storage, var_info, llvm_expr, llvm_debug_loc, block); @@ -1329,6 +1349,7 @@ gb_internal void lb_add_debug_param_variable(lbProcedure *p, LLVMValueRef ptr, T LLVMMetadataRef llvm_debug_loc = lb_debug_location_from_token_pos(p, token.pos); LLVMMetadataRef llvm_expr = LLVMDIBuilderCreateExpression(m->debug_builder, nullptr, 0); lb_set_llvm_metadata(m, ptr, llvm_expr); + storage = lb_debug_storage(p, storage, &llvm_expr); // NOTE(bill, 2022-02-01): For parameter values, you must insert them at the end of the decl block // The reason is that if the parameter is at index 0 and a pointer, there is not such things as an diff --git a/src/llvm_backend_general.cpp b/src/llvm_backend_general.cpp index 417504376..16fee3c8f 100644 --- a/src/llvm_backend_general.cpp +++ b/src/llvm_backend_general.cpp @@ -1814,6 +1814,43 @@ gb_internal bool lb_is_type_proc_recursive(Type *t) { } } +// LLVM's fast instruction selector, used for unoptimized code, hands anything it cannot select +// (such as `llvm.memmove` or the `*.inline` intrinsics) to SelectionDAG, which is far slower +gb_internal bool lb_uses_fast_isel(void) { + return (build_context.optimization_level <= 0 || build_context.fast_isel) && is_arch_x86(); +} + +gb_internal void lb_emit_memmove(lbProcedure *p, LLVMValueRef dst, unsigned dst_align, LLVMValueRef src, unsigned src_align, LLVMValueRef len) { + if (!lb_uses_fast_isel()) { + LLVMBuildMemMove(p->builder, dst, dst_align, src, src_align, len); + return; + } + lbModule *m = p->module; + LLVMTypeRef ptr_type = lb_type(m, t_rawptr); + LLVMTypeRef int_type = lb_type(m, t_int); + + if (LLVMIsConstant(len)) { + i64 size = cast(i64)LLVMConstIntGetZExtValue(len); + if (size == 1 || size == 2 || size == 4 || size == 8) { + LLVMTypeRef chunk_type = LLVMIntTypeInContext(m->ctx, cast(unsigned)(8*size)); + LLVMValueRef value = LLVMBuildLoad2(p->builder, chunk_type, src, ""); + LLVMSetAlignment(value, gb_max(src_align, 1u)); + LLVMValueRef store = LLVMBuildStore(p->builder, value, dst); + LLVMSetAlignment(store, gb_max(dst_align, 1u)); + return; + } + } + + LLVMTypeRef params[3] = {ptr_type, ptr_type, int_type}; + LLVMTypeRef proc_type = LLVMFunctionType(ptr_type, params, gb_count_of(params), false); + LLVMValueRef proc = LLVMGetNamedFunction(m->mod, "memmove"); + if (proc == nullptr) { + proc = LLVMAddFunction(m->mod, "memmove", proc_type); + } + LLVMValueRef args[3] = {dst, src, LLVMBuildIntCast2(p->builder, len, int_type, false, "")}; + LLVMBuildCall2(p->builder, proc_type, proc, args, gb_count_of(args), ""); +} + // LLVM's fast instruction selector cannot select an aggregate load or store // Oh, how do I love LLVM /s gb_internal bool lb_copies_aggregates_as_scalars(lbProcedure *p) { @@ -1863,7 +1900,7 @@ gb_internal bool lb_try_copy_loaded_aggregate(lbProcedure *p, LLVMValueRef dst, LLVMTypeRef i64_type = LLVMInt64TypeInContext(ctx); if (size > MAX_SCALAR_COPY_SIZE) { - LLVMBuildMemMove(p->builder, dst, lb_try_get_alignment(dst, 1), src, LLVMGetAlignment(load), LLVMConstInt(i64_type, size, false)); + lb_emit_memmove(p, dst, lb_try_get_alignment(dst, 1), src, LLVMGetAlignment(load), LLVMConstInt(i64_type, size, false)); return true; } @@ -1941,10 +1978,10 @@ gb_internal void lb_emit_store(lbProcedure *p, lbValue ptr, lbValue value) { LLVMValueRef src_ptr_original = LLVMGetOperand(value.value, 0); LLVMValueRef src_ptr = LLVMBuildPointerCast(p->builder, src_ptr_original, LLVMTypeOf(dst_ptr), ""); - LLVMBuildMemMove(p->builder, - dst_ptr, lb_try_get_alignment(dst_ptr, 1), - src_ptr, lb_try_get_alignment(src_ptr_original, 1), - LLVMConstInt(LLVMInt64TypeInContext(p->module->ctx), lb_sizeof(LLVMTypeOf(value.value)), false)); + lb_emit_memmove(p, + dst_ptr, lb_try_get_alignment(dst_ptr, 1), + src_ptr, lb_try_get_alignment(src_ptr_original, 1), + LLVMConstInt(LLVMInt64TypeInContext(p->module->ctx), lb_sizeof(LLVMTypeOf(value.value)), false)); return; } else if (LLVMIsConstant(value.value)) { lbAddr addr = lb_add_global_generated_from_procedure(p, value.type, value); @@ -1954,10 +1991,10 @@ gb_internal void lb_emit_store(lbProcedure *p, lbValue ptr, lbValue value) { LLVMValueRef src_ptr = addr.addr.value; src_ptr = LLVMBuildPointerCast(p->builder, src_ptr, LLVMTypeOf(dst_ptr), ""); - LLVMBuildMemMove(p->builder, - dst_ptr, lb_try_get_alignment(dst_ptr, 1), - src_ptr, lb_try_get_alignment(src_ptr, 1), - LLVMConstInt(LLVMInt64TypeInContext(p->module->ctx), lb_sizeof(LLVMTypeOf(value.value)), false)); + LLVMBuildMemCpy(p->builder, + dst_ptr, lb_try_get_alignment(dst_ptr, 1), + src_ptr, lb_try_get_alignment(src_ptr, 1), + LLVMConstInt(LLVMInt64TypeInContext(p->module->ctx), lb_sizeof(LLVMTypeOf(value.value)), false)); return; } } diff --git a/src/llvm_backend_proc.cpp b/src/llvm_backend_proc.cpp index a5f8ba66a..3172bc0b0 100644 --- a/src/llvm_backend_proc.cpp +++ b/src/llvm_backend_proc.cpp @@ -17,6 +17,11 @@ gb_internal void lb_mem_copy_overlapping(lbProcedure *p, lbValue dst, lbValue sr src = lb_emit_conv(p, src, t_rawptr); len = lb_emit_conv(p, len, t_int); + if (!is_volatile && lb_uses_fast_isel()) { + lb_emit_memmove(p, dst.value, 1, src.value, 1, len.value); + return; + } + char const *name = "llvm.memmove"; if (!p->is_startup && LLVMIsConstant(len.value)) { i64 const_len = cast(i64)LLVMConstIntGetSExtValue(len.value); @@ -47,7 +52,7 @@ gb_internal void lb_mem_copy_non_overlapping(lbProcedure *p, lbValue dst, lbValu len = lb_emit_conv(p, len, t_int); char const *name = "llvm.memcpy"; - if (!p->is_startup && LLVMIsConstant(len.value)) { + if (!p->is_startup && !lb_uses_fast_isel() && LLVMIsConstant(len.value)) { i64 const_len = cast(i64)LLVMConstIntGetSExtValue(len.value); if (const_len <= lb_max_zero_init_size()) { name = "llvm.memcpy.inline"; diff --git a/src/llvm_backend_utility.cpp b/src/llvm_backend_utility.cpp index 19b203e3c..aa33073c5 100644 --- a/src/llvm_backend_utility.cpp +++ b/src/llvm_backend_utility.cpp @@ -113,6 +113,27 @@ gb_internal LLVMValueRef lb_mem_zero_ptr_internal(lbProcedure *p, LLVMValueRef p } + if (is_inlinable && !is_volatile && lb_uses_fast_isel()) { + LLVMValueRef dst = LLVMBuildPointerCast(p->builder, ptr, lb_type(p->module, t_rawptr), ""); + LLVMValueRef last = nullptr; + for (i64 offset = 0; offset < const_len; /**/) { + i64 chunk = 8; + while (chunk > const_len - offset) { + chunk >>= 1; + } + LLVMTypeRef chunk_type = LLVMIntTypeInContext(p->module->ctx, cast(unsigned)(8*chunk)); + LLVMValueRef chunk_ptr = dst; + if (offset != 0) { + LLVMValueRef index = LLVMConstInt(lb_type(p->module, t_int), offset, false); + chunk_ptr = LLVMBuildGEP2(p->builder, LLVMInt8TypeInContext(p->module->ctx), dst, &index, 1, ""); + } + last = LLVMBuildStore(p->builder, LLVMConstNull(chunk_type), chunk_ptr); + LLVMSetAlignment(last, 1); + offset += chunk; + } + return last; + } + char const *name = "llvm.memset"; if (is_inlinable) { name = "llvm.memset.inline"; diff --git a/tests/issues/run.bat b/tests/issues/run.bat index f7538ca21..939041d70 100644 --- a/tests/issues/run.bat +++ b/tests/issues/run.bat @@ -95,6 +95,9 @@ clang -c ..\test_issue_sysv_abi.c -o test_issue_sysv_abi_c.o || exit /b ..\..\..\odin run ..\test_issue_7596.odin %COMMON% || exit /b ..\..\..\odin test ..\test_issue_split_globals -define:ODIN_TEST_FANCY=false -vet -strict-style -ignore-unused-defineables || exit /b ..\..\..\odin test ..\test_issue_split_globals -define:ODIN_TEST_FANCY=false -vet -strict-style -ignore-unused-defineables -debug || exit /b +..\..\..\odin test ..\test_issue_omitted_field_union.odin %COMMON% || exit /b +..\..\..\odin test ..\test_issue_fast_isel_lowering.odin %COMMON% || exit /b +..\..\..\odin test ..\test_issue_fast_isel_lowering.odin %COMMON% -o:none || exit /b @echo off diff --git a/tests/issues/run.sh b/tests/issues/run.sh index 523c52322..0207e012e 100755 --- a/tests/issues/run.sh +++ b/tests/issues/run.sh @@ -121,6 +121,9 @@ $ODIN test ../test_issue_7587.odin $COMMON $ODIN run ../test_issue_7596.odin $COMMON $ODIN test ../test_issue_split_globals -define:ODIN_TEST_FANCY=false -vet -strict-style -ignore-unused-defineables $ODIN test ../test_issue_split_globals -define:ODIN_TEST_FANCY=false -vet -strict-style -ignore-unused-defineables -debug +$ODIN test ../test_issue_omitted_field_union.odin $COMMON +$ODIN test ../test_issue_fast_isel_lowering.odin $COMMON +$ODIN test ../test_issue_fast_isel_lowering.odin $COMMON -o:none $ODIN test ../test_issue_7421.odin $COMMON if [[ $($ODIN check ../test_issue_7421_tagged_duplicate.odin $COMMON_CHECK 2>&1 >/dev/null | grep -c "Error: Duplicate case") -eq 1 ]]; then echo "SUCCESSFUL 1/1" diff --git a/tests/issues/test_issue_fast_isel_lowering.odin b/tests/issues/test_issue_fast_isel_lowering.odin new file mode 100644 index 000000000..138371a15 --- /dev/null +++ b/tests/issues/test_issue_fast_isel_lowering.odin @@ -0,0 +1,121 @@ +// What unoptimized x86 code is lowered to before LLVM's fast instruction selector sees it +package test_issues + +import "core:testing" + +Pair :: struct { + name: string, + value: int, +} + +Wide :: struct { + a, b, c: i32, + d: [3]f32, + e: Pair, + f: bool, +} + +@(require_results) +pick :: proc(cond: bool, x, y: Pair) -> Pair { + return x if cond else y +} + +@(require_results) +copy_through :: proc(dst, src: ^Wide) -> Wide { + dst^ = src^ + return dst^ +} + +@(require_results) +classify :: proc(x: int) -> (res: string) { + switch x { + case 1: res = "one" + case 2: res = "two" + case 7: res = "seven" + case: res = "other" + } + return +} + +@(require_results) +shared_target :: proc(x: u8) -> int { + r := 0 + switch x { + case 3, 9: r = 10 + case 4: r = 20 + } + return r + int(x) +} + +@(require_results) +both :: proc(a, b: bool) -> bool { + return a && b +} + +@(require_results) +either :: proc(a, b: bool) -> bool { + return a || b +} + +@(require_results) +count_true :: proc(xs: ..bool) -> (n: int) { + for x in xs { + n += int(x) + } + return +} + +global_pair: Pair + +@(test) +test_fast_isel_lowering :: proc(t: ^testing.T) { + p := pick(true, {"a", 1}, {"bb", 2}) + q := pick(false, {"a", 1}, {"bb", 2}) + testing.expect_value(t, p, Pair{"a", 1}) + testing.expect_value(t, q, Pair{"bb", 2}) + + s := "yes" if p.value == 1 else "no" + testing.expect_value(t, s, "yes") + + global_pair = q + testing.expect_value(t, global_pair.name, "bb") + + src := Wide{1, 2, 3, {4, 5, 6}, {"wide", 7}, true} + dst: Wide + w := copy_through(&dst, &src) + testing.expect_value(t, w, src) + testing.expect_value(t, dst, src) + + ws := []Wide{src, {}, src} + ws[1] = ws[0] + testing.expect_value(t, ws[1], src) + + merged: Pair + if w.f { + merged = p + } else { + merged = q + } + testing.expect_value(t, merged, p) + + names := [4]string{"one", "two", "seven", "other"} + for x, i in ([]int{1, 2, 7, 5}) { + testing.expect_value(t, classify(x), names[i]) + } + testing.expect_value(t, shared_target(3), 13) + testing.expect_value(t, shared_target(9), 19) + testing.expect_value(t, shared_target(4), 24) + testing.expect_value(t, shared_target(5), 5) + + a, b := w.a == 1, w.b == 3 + testing.expect_value(t, both(a, b), false) + testing.expect_value(t, either(a, b), true) + testing.expect_value(t, count_true(a, b, a && !b, a || b), 3) + + buf := [8]u8{1, 2, 3, 4, 5, 6, 7, 8} + copy(buf[1:], buf[:4]) + testing.expect_value(t, buf, [8]u8{1, 1, 2, 3, 4, 6, 7, 8}) + small: [3]u8 = {9, 9, 9} + small = {} + testing.expect_value(t, small, [3]u8{}) +} From d8a598b1a392121f67e111555b908e6c37b54439 Mon Sep 17 00:00:00 2001 From: Artur Leite Date: Sat, 3 Oct 2026 13:01:17 +0200 Subject: [PATCH 163/215] Accept `.Recv` channels in `chan.recv` and `chan.try_recv` --- core/sync/chan/chan.odin | 4 +-- tests/core/sync/chan/test_core_sync_chan.odin | 27 +++++++++++++++++++ 2 files changed, 29 insertions(+), 2 deletions(-) diff --git a/core/sync/chan/chan.odin b/core/sync/chan/chan.odin index 5daabe2eb..ef3de62e0 100644 --- a/core/sync/chan/chan.odin +++ b/core/sync/chan/chan.odin @@ -529,7 +529,7 @@ Example: } */ @(require_results) -recv :: proc "contextless" (c: $C/Chan($T)) -> (data: T, ok: bool) where C.D >= .Both { +recv :: proc "contextless" (c: $C/Chan($T, $D)) -> (data: T, ok: bool) where C.D >= .Both { ok = recv_raw(c, &data) return } @@ -559,7 +559,7 @@ Example: } */ @(require_results) -try_recv :: proc "contextless" (c: $C/Chan($T)) -> (data: T, ok: bool) where C.D >= .Both { +try_recv :: proc "contextless" (c: $C/Chan($T, $D)) -> (data: T, ok: bool) where C.D >= .Both { ok = try_recv_raw(c, &data) return } diff --git a/tests/core/sync/chan/test_core_sync_chan.odin b/tests/core/sync/chan/test_core_sync_chan.odin index 8ede19c7d..0e47c240f 100644 --- a/tests/core/sync/chan/test_core_sync_chan.odin +++ b/tests/core/sync/chan/test_core_sync_chan.odin @@ -443,6 +443,33 @@ test_accept_message_from_closed_buffered_chan :: proc(t: ^testing.T) { testing.expect(t, ok) } +// Ensures that the typed send and receive procedures accept unidirectional +// channels, not just `.Both` channels. +@test +test_unidirectional_chan_send_recv :: proc(t: ^testing.T) { + testing.set_fail_timeout(t, FAIL_TIME) + + ch, alloc_err := chan.create_buffered(chan.Chan(int), 4, context.allocator) + assert(alloc_err == nil, "allocation failed") + defer chan.destroy(ch) + + send_only: chan.Chan(int, .Send) = chan.as_send(ch) + recv_only: chan.Chan(int, .Recv) = chan.as_recv(ch) + + testing.expect(t, chan.send(send_only, 32)) + testing.expect(t, chan.try_send(send_only, 64)) + + result, ok := chan.recv(recv_only) + testing.expect_value(t, result, 32) + testing.expect(t, ok) + result, ok = chan.try_recv(recv_only) + testing.expect_value(t, result, 64) + testing.expect(t, ok) + + result, ok = chan.try_recv(recv_only) + testing.expect(t, !ok, "channel should be empty") +} + // Ensures that if any input channel is eligible to receive or send, the try_select_raw // operation will process it. @test From d31ed5ee5f6549689052fa97d7f289bdabb28d2b Mon Sep 17 00:00:00 2001 From: gingerBill Date: Sat, 3 Oct 2026 12:02:15 +0100 Subject: [PATCH 164/215] Use a response file for MSVC-style linkers (`link.exe` and `radlink.exe`) when the command line exceeds the `CreateProcess` limit of 32KiB --- src/linker.cpp | 85 ++++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 82 insertions(+), 3 deletions(-) diff --git a/src/linker.cpp b/src/linker.cpp index 0d8fa79e0..519480826 100644 --- a/src/linker.cpp +++ b/src/linker.cpp @@ -13,6 +13,85 @@ struct LinkerData { gb_internal i32 system_exec_command_line_app(char const *name, char const *fmt, ...); gb_internal bool system_exec_command_line_app_output(char const *command, gbString *output); +gb_internal i32 system_exec_msvc_linker_app(char const *name, char const *fmt, ...) { + isize const cmd_cap = 64<<20; + char *cmd = gb_alloc_array(heap_allocator(), char, cmd_cap); + defer (gb_free(heap_allocator(), cmd)); + + va_list va; + va_start(va, fmt); + isize cmd_len = gb_snprintf_va(cmd, cmd_cap-1, fmt, va) - 1; + va_end(va); + +#if defined(GB_SYSTEM_WINDOWS) + // NOTE(bill, 2026-10-03): CreateProcessW limits the command line to 32767 UTF-16 code units so we need to pass the arguments into a response file + if (cmd_len >= 32767 && !build_context.print_linker_flags) { + char const *exe_end = cmd[0] == '"' ? gb_char_first_occurence(cmd+1, '"') : nullptr; + GB_ASSERT(exe_end != nullptr); + isize exe_len = exe_end+1 - cmd; + + gbString rsp = gb_string_make_reserve(heap_allocator(), cmd_len); + defer (gb_string_free(rsp)); + + // NOTE(bill): link.exe rejects response file lines of 128 KiB or more + bool in_quotes = false; + bool separate = false; + isize backslashes = 0; + for (char const *c = cmd+exe_len; *c; c++) { + if (!in_quotes && (*c == ' ' || *c == '\t')) { + separate = gb_string_length(rsp) > 0; + continue; + } + if (separate) { + rsp = gb_string_appendc(rsp, "\n"); + separate = false; + } + if (*c == '"' && (backslashes & 1) == 0) { + in_quotes = !in_quotes; + } + backslashes = *c == '\\' ? backslashes+1 : 0; + rsp = gb_string_append_length(rsp, c, 1); + } + + String dir = temporary_directory(temporary_allocator()); + if (dir.len == 0) { + dir = build_context.build_paths[BuildPath_Output].basename; + } + + gbString rsp_path = gb_string_make(heap_allocator(), ""); + defer (gb_string_free(rsp_path)); + + rsp_path = gb_string_append_fmt(rsp_path, "%.*s/%.*s-%u.rsp", LIT(dir), LIT(build_context.build_paths[BuildPath_Output].name), GetCurrentProcessId()); + + { + gbFile f = {}; + if (gb_file_create(&f, rsp_path) != gbFileError_None) { + gb_printf_err("Failed to create linker response file: %s\n", rsp_path); + return -1; + } + if (build_context.linker_choice != Linker_radlink) { + // NOTE(bill): link.exe reads a response file without a BOM in the ANSI code page but radlink does not skip a BOM + gb_file_write(&f, "\xef\xbb\xbf", 3); + } + gb_file_write(&f, rsp, gb_string_length(rsp)); + gb_file_close(&f); + } + + if (build_context.show_system_calls) { + gb_printf_err("[RESPONSE FILE] %s\n%s\n\n", rsp_path, rsp); + } + + i32 result = system_exec_command_line_app(name, "%.*s @\"%s\"", cast(int)exe_len, cmd, rsp_path); + if (!build_context.keep_temp_files) { + gb_file_remove(rsp_path); + } + return result; + } +#endif + + return system_exec_command_line_app(name, "%.*s", cast(int)cmd_len, cmd); +} + // No longer required not that LLVM 14 is removed(?) gb_internal void linker_enable_system_library_linking(LinkerData *ld) { ld->needs_system_library_linked = true; @@ -327,7 +406,7 @@ try_cross_linking:; switch (build_context.linker_choice) { case Linker_lld: - result = system_exec_command_line_app("msvc-lld-link", + result = system_exec_msvc_linker_app("msvc-lld-link", "\"%.*s\\bin\\lld-link\" %s -OUT:\"%.*s\" %s " "/nologo /incremental:no /opt:ref /subsystem:%.*s " "%.*s " @@ -349,7 +428,7 @@ try_cross_linking:; } break; case Linker_radlink: - result = system_exec_command_line_app("msvc-rad-link", + result = system_exec_msvc_linker_app("msvc-rad-link", "\"%.*s\\bin\\radlink\" %s -OUT:\"%.*s\" %s " "/nologo /incremental:no /opt:ref /subsystem:%.*s " "%.*s " @@ -412,7 +491,7 @@ try_cross_linking:; } - result = system_exec_command_line_app("msvc-link", + result = system_exec_msvc_linker_app("msvc-link", "\"%.*s%.*s\" %s %.*s -OUT:\"%.*s\" %s " "/nologo /subsystem:%.*s " "%.*s " From 9f2a5147bdc72533b57c91d88d817f64184d9fd4 Mon Sep 17 00:00:00 2001 From: gingerBill Date: Sat, 3 Oct 2026 12:10:12 +0100 Subject: [PATCH 165/215] Fix: Mark a generated polymorphic procedure before publishing it to other threads --- src/check_expr.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/check_expr.cpp b/src/check_expr.cpp index 6aedd7d17..4c5a9e601 100644 --- a/src/check_expr.cpp +++ b/src/check_expr.cpp @@ -847,6 +847,7 @@ gb_internal bool find_or_generate_polymorphic_procedure(CheckerContext *old_c, E entity->flags = 0; entity->Procedure.optimization_mode = base_entity->Procedure.optimization_mode; + entity->Procedure.generated_from_polymorphic = true; if (base_entity->flags & EntityFlag_Cold) { entity->flags |= EntityFlag_Cold; @@ -877,7 +878,6 @@ gb_internal bool find_or_generate_polymorphic_procedure(CheckerContext *old_c, E if (poly_proc_data) { poly_proc_data->gen_entity = entity; poly_proc_data->proc_info = proc_info; - entity->Procedure.generated_from_polymorphic = proc_info->generated_from_polymorphic; } if (base_entity->Procedure.deferred_procedure.entity != nullptr) { From 5031e2733e9758d18215ff83e31688c782920918 Mon Sep 17 00:00:00 2001 From: gingerBill Date: Sat, 3 Oct 2026 12:38:00 +0100 Subject: [PATCH 166/215] Add the comparison procedures of types in the type table and map keys as dependencies making the backend no longer has to create missing procedures --- src/check_builtin.cpp | 5 +- src/check_expr.cpp | 11 +++ src/check_type.cpp | 1 + src/checker.cpp | 61 +++++++++++++ src/llvm_backend.cpp | 16 ++-- src/llvm_backend.hpp | 2 +- src/llvm_backend_general.cpp | 42 ++++----- tests/issues/run.bat | 2 + tests/issues/run.sh | 7 ++ .../test_issue_equal_proc_dependencies.odin | 87 +++++++++++++++++++ 10 files changed, 203 insertions(+), 31 deletions(-) create mode 100644 tests/issues/test_issue_equal_proc_dependencies.odin diff --git a/src/check_builtin.cpp b/src/check_builtin.cpp index 8de99553c..7d810129f 100644 --- a/src/check_builtin.cpp +++ b/src/check_builtin.cpp @@ -8429,6 +8429,8 @@ gb_internal bool check_builtin_procedure(CheckerContext *c, Operand *operand, As return false; } + add_comparison_procedures_for_fields(c, type); + operand->mode = Addressing_Value; operand->type = t_equal_proc; break; @@ -8477,7 +8479,8 @@ gb_internal bool check_builtin_procedure(CheckerContext *c, Operand *operand, As return false; } - add_map_key_type_dependencies(c, type); + add_map_key_type_dependencies(c, type->Map.key); + add_comparison_procedures_for_fields(c, type->Map.key); operand->mode = Addressing_Value; operand->type = t_map_info_ptr; diff --git a/src/check_expr.cpp b/src/check_expr.cpp index 6aedd7d17..e67d6c0fd 100644 --- a/src/check_expr.cpp +++ b/src/check_expr.cpp @@ -3310,6 +3310,17 @@ gb_internal void add_comparison_procedures_for_fields(CheckerContext *c, Type *t add_comparison_procedures_for_fields(c, field->type); } break; + case Type_Union: + for (Type *variant : t->Union.variants) { + add_comparison_procedures_for_fields(c, variant); + } + break; + case Type_Array: + add_comparison_procedures_for_fields(c, t->Array.elem); + break; + case Type_EnumeratedArray: + add_comparison_procedures_for_fields(c, t->EnumeratedArray.elem); + break; } } diff --git a/src/check_type.cpp b/src/check_type.cpp index 8555140cc..98e562501 100644 --- a/src/check_type.cpp +++ b/src/check_type.cpp @@ -4276,6 +4276,7 @@ gb_internal void check_map_type(CheckerContext *ctx, Type *type, Ast *node) { type->Map.value = value; add_map_key_type_dependencies(ctx, key); + add_comparison_procedures_for_fields(ctx, key); init_core_map_type(ctx->checker); init_map_internal_types(type); diff --git a/src/checker.cpp b/src/checker.cpp index dea5f0a01..fd65d42fc 100644 --- a/src/checker.cpp +++ b/src/checker.cpp @@ -2663,6 +2663,38 @@ gb_internal void check_procedure_later(Checker *c, AstFile *file, Token token, D } +gb_global Entity *min_dep_basic_equal_procs[Basic_COUNT]; + +gb_internal void add_dependency_to_set_threaded(Checker *c, Entity *entity); + +gb_internal void add_min_dep_equal_procedures(Checker *c, Type *t) { + t = base_type(t); + if (t == nullptr || !is_type_comparable(t)) { + return; + } + switch (t->kind) { + case Type_Basic: + add_dependency_to_set_threaded(c, min_dep_basic_equal_procs[t->Basic.kind]); + break; + case Type_Struct: + for (Entity *f : t->Struct.fields) { + add_min_dep_equal_procedures(c, f->type); + } + break; + case Type_Union: + for (Type *v : t->Union.variants) { + add_min_dep_equal_procedures(c, v); + } + break; + case Type_Array: + add_min_dep_equal_procedures(c, t->Array.elem); + break; + case Type_EnumeratedArray: + add_min_dep_equal_procedures(c, t->EnumeratedArray.elem); + break; + } +} + gb_internal void add_min_dep_type_info(Checker *c, Type *t) { if (t == nullptr) { return; @@ -2780,6 +2812,9 @@ gb_internal void add_min_dep_type_info(Checker *c, Type *t) { for_array(i, bt->Union.variants) { add_min_dep_type_info(c, bt->Union.variants[i]); } + if (is_type_comparable(bt) && !is_type_simple_compare(bt)) { + add_min_dep_equal_procedures(c, bt); + } break; case Type_Struct: @@ -2810,10 +2845,14 @@ gb_internal void add_min_dep_type_info(Checker *c, Type *t) { Entity *f = bt->Struct.fields[i]; add_min_dep_type_info(c, f->type); } + if (is_type_comparable(bt) && !is_type_simple_compare(bt)) { + add_min_dep_equal_procedures(c, bt); + } break; case Type_Map: init_map_internal_types(bt); + add_min_dep_equal_procedures(c, bt->Map.key); add_min_dep_type_info(c, bt->Map.key); add_min_dep_type_info(c, bt->Map.value); add_min_dep_type_info(c, t_uintptr); // hash value @@ -3327,6 +3366,28 @@ gb_internal void generate_minimum_dependency_set(Checker *c, Entity *start) { str_lit("multi_pointer_slice_expr_error"), ); + + { // init min dep basic equal procs + struct { BasicKind kind; char const *name; } const procs[] = { + {Basic_complex32, "complex32_eq"}, + {Basic_complex64, "complex64_eq"}, + {Basic_complex128, "complex128_eq"}, + {Basic_quaternion64, "quaternion64_eq"}, + {Basic_quaternion128, "quaternion128_eq"}, + {Basic_quaternion256, "quaternion256_eq"}, + {Basic_cstring, "cstring_eq"}, + {Basic_string, "string_eq"}, + {Basic_cstring16, "cstring16_eq"}, + {Basic_string16, "string16_eq"}, + }; + for (auto const &p : procs) { + u32 hash = 0; + InternedString key = string_interner_insert(make_string_c(p.name), 0, &hash); + min_dep_basic_equal_procs[p.kind] = scope_lookup(c->info.runtime_package->scope, key, hash); + } + } + + add_dependency_to_set(c, c->info.instrumentation_enter_entity); add_dependency_to_set(c, c->info.instrumentation_exit_entity); diff --git a/src/llvm_backend.cpp b/src/llvm_backend.cpp index 6acc3c723..8a015669d 100644 --- a/src/llvm_backend.cpp +++ b/src/llvm_backend.cpp @@ -3356,15 +3356,15 @@ gb_internal void lb_generate_procedures(lbGenerator *gen, bool do_threading) { gb_internal WORKER_TASK_PROC(lb_generate_missing_procedures_to_check_worker_proc) { lbModule *m = cast(lbModule *)data; - for (lbProcedure *p = nullptr; mpsc_dequeue(&m->missing_procedures_to_check, &p); /**/) { + for (Entity *e = nullptr; mpsc_dequeue(&m->missing_procedures_to_check, &e); /**/) { + lbProcedure *p = lb_create_procedure(m, e, false); if (!p->is_done.load(std::memory_order_relaxed)) { debugf("Generate missing procedure: %.*s module %p\n", LIT(p->name), m); - lb_generate_procedure(m, p); - } - - for (lbProcedure *nested = nullptr; mpsc_dequeue(&m->procedures_to_generate, &nested); /**/) { - mpsc_enqueue(&m->missing_procedures_to_check, nested); } + mpsc_enqueue(&m->procedures_to_generate, p); + } + for (lbProcedure *p = nullptr; mpsc_dequeue(&m->procedures_to_generate, &p); /**/) { + lb_generate_procedure(m, p); } return 0; } @@ -3389,9 +3389,9 @@ retry:; for (auto const &entry : gen->modules) { lbModule *m = entry.value; - if (m->missing_procedures_to_check.count != 0) { + if (m->missing_procedures_to_check.count != 0 || m->procedures_to_generate.count != 0) { if (retry_count > gen->modules.count) { - GB_ASSERT(m->missing_procedures_to_check.count == 0); + GB_ASSERT(m->missing_procedures_to_check.count == 0 && m->procedures_to_generate.count == 0); } retry_count += 1; diff --git a/src/llvm_backend.hpp b/src/llvm_backend.hpp index ac2d452fe..824fe2f88 100644 --- a/src/llvm_backend.hpp +++ b/src/llvm_backend.hpp @@ -153,7 +153,7 @@ struct lbModule { StringMap procedures; PtrMap procedure_values; - MPSCQueue missing_procedures_to_check; + MPSCQueue missing_procedures_to_check; StringMap const_strings; String16Map const_string16s; diff --git a/src/llvm_backend_general.cpp b/src/llvm_backend_general.cpp index 16fee3c8f..1a299689e 100644 --- a/src/llvm_backend_general.cpp +++ b/src/llvm_backend_general.cpp @@ -4041,19 +4041,14 @@ gb_internal lbValue lb_find_procedure_value_from_entity(lbModule *m, Entity *e) return *found; } - bool ignore_body = false; - lbModule *other_module = m; if (USE_SEPARATE_MODULES) { other_module = lb_module_of_entity(gen, e, m); } - if (other_module == m) { - debugf("Missing Procedure (lb_find_procedure_value_from_entity): %.*s module %p\n", LIT(e->token.string), m); - } - ignore_body = other_module != m; + bool ignore_body = other_module != m; - lbProcedure *missing_proc = lb_create_procedure(m, e, ignore_body); - if (missing_proc == nullptr) { + lbProcedure *proc = lb_create_procedure(m, e, ignore_body); + if (proc == nullptr) { // This is an unspecialized polymorphic procedure, which should not be codegen'd lbValue dummy = {}; dummy.value = nullptr; @@ -4061,18 +4056,28 @@ gb_internal lbValue lb_find_procedure_value_from_entity(lbModule *m, Entity *e) return dummy; } - if (ignore_body) { - GB_ASSERT(other_module != nullptr); + // NOTE(bill): Until the modules are generated in parallel, a procedure may be referenced before it is created + // (e.g. an @(init) procedure by the startup procedure), but after that it was missed by the frontend + bool missing = gen->modules_in_parallel; + + if (!ignore_body) { + if (missing) { + debugf("Missing Procedure (lb_find_procedure_value_from_entity): %.*s module %p\n", LIT(e->token.string), m); + } + mpsc_enqueue(&m->procedures_to_generate, proc); + } else { rw_mutex_shared_lock(&other_module->values_mutex); auto *found = map_get(&other_module->values, e); rw_mutex_shared_unlock(&other_module->values_mutex); if (found == nullptr) { - // THIS IS THE RACE CONDITION - lbProcedure *missing_proc_in_other_module = lb_create_procedure(other_module, e, false); - mpsc_enqueue(&other_module->missing_procedures_to_check, missing_proc_in_other_module); + if (missing) { + debugf("Missing Procedure (lb_find_procedure_value_from_entity): %.*s module %p\n", LIT(e->token.string), other_module); + // another module's context may only be used by the thread generating that module + mpsc_enqueue(&other_module->missing_procedures_to_check, e); + } else { + mpsc_enqueue(&other_module->procedures_to_generate, lb_create_procedure(other_module, e, false)); + } } - } else { - mpsc_enqueue(&m->missing_procedures_to_check, missing_proc); } rw_mutex_shared_lock(&m->values_mutex); @@ -4155,12 +4160,7 @@ gb_internal lbValue lb_generate_anonymous_proc_lit(lbModule *m, String const &pr lbValue *found = map_get(&target_module->values, e); rw_mutex_shared_unlock(&target_module->values_mutex); if (found == nullptr) { - lbProcedure *target_proc = lb_create_procedure(target_module, e, false); - if (gen->modules_in_parallel) { - mpsc_enqueue(&target_module->missing_procedures_to_check, target_proc); - } else { - mpsc_enqueue(&target_module->procedures_to_generate, target_proc); - } + mpsc_enqueue(&target_module->procedures_to_generate, lb_create_procedure(target_module, e, false)); } lbProcedure *p = lb_create_procedure(m, e, true); diff --git a/tests/issues/run.bat b/tests/issues/run.bat index 939041d70..75d94c400 100644 --- a/tests/issues/run.bat +++ b/tests/issues/run.bat @@ -98,6 +98,8 @@ clang -c ..\test_issue_sysv_abi.c -o test_issue_sysv_abi_c.o || exit /b ..\..\..\odin test ..\test_issue_omitted_field_union.odin %COMMON% || exit /b ..\..\..\odin test ..\test_issue_fast_isel_lowering.odin %COMMON% || exit /b ..\..\..\odin test ..\test_issue_fast_isel_lowering.odin %COMMON% -o:none || exit /b +..\..\..\odin test ..\test_issue_equal_proc_dependencies.odin %COMMON% || exit /b +..\..\..\odin test ..\test_issue_equal_proc_dependencies.odin %COMMON% -build-mode:obj -show-debug-messages 2>&1 | find /i /c "missing procedure" | findstr /x "0" || exit /b @echo off diff --git a/tests/issues/run.sh b/tests/issues/run.sh index 0207e012e..3a1cc16b9 100755 --- a/tests/issues/run.sh +++ b/tests/issues/run.sh @@ -124,6 +124,13 @@ $ODIN test ../test_issue_split_globals -define:ODIN_TEST_FANCY=false -vet -stric $ODIN test ../test_issue_omitted_field_union.odin $COMMON $ODIN test ../test_issue_fast_isel_lowering.odin $COMMON $ODIN test ../test_issue_fast_isel_lowering.odin $COMMON -o:none +$ODIN test ../test_issue_equal_proc_dependencies.odin $COMMON +if [[ $($ODIN test ../test_issue_equal_proc_dependencies.odin $COMMON -build-mode:obj -show-debug-messages 2>&1 | grep -ci "missing procedure") -eq 0 ]]; then + echo "SUCCESSFUL 1/1" +else + echo "SUCCESSFUL 0/1" + exit 1 +fi $ODIN test ../test_issue_7421.odin $COMMON if [[ $($ODIN check ../test_issue_7421_tagged_duplicate.odin $COMMON_CHECK 2>&1 >/dev/null | grep -c "Error: Duplicate case") -eq 1 ]]; then echo "SUCCESSFUL 1/1" diff --git a/tests/issues/test_issue_equal_proc_dependencies.odin b/tests/issues/test_issue_equal_proc_dependencies.odin new file mode 100644 index 000000000..d237b95b9 --- /dev/null +++ b/tests/issues/test_issue_equal_proc_dependencies.odin @@ -0,0 +1,87 @@ +// The backend gives each comparable struct and union in the type table, and the key of each map, an equality +// procedure, so the runtime procedures it compares fields with must be dependencies however the type was reached +package test_issues + +import "base:runtime" +import "core:fmt" +import "core:testing" + +Quaternion :: distinct quaternion128 + +// only reached through type info, and recursive through its union +Entity :: struct { + name: string, + orientation: Quaternion, + small: complex32, + derived: union {Frog}, +} + +Frog :: struct { + entity: ^Entity, + height: f32, +} + +Key :: struct { + name: string, + q: quaternion256, +} + +Holder :: struct { + m: map[Key]int, + next: ^Holder, +} + +Variants :: union {complex128, quaternion64, cstring} + +Wrapper :: struct { + v: Variants, +} + +struct_equal :: proc(ti: ^runtime.Type_Info) -> runtime.Equal_Proc { + return runtime.type_info_base(ti).variant.(runtime.Type_Info_Struct).equal +} + +@(test) +test_equal_procs_of_type_info :: proc(t: ^testing.T) { + a := new(Entity) + defer free(a) + a.name = "frog" + a.orientation = 1 + a.small = complex(f16(1), f16(2)) + a.derived = Frog{a, 1} + s := fmt.tprint(a) + testing.expect(t, len(s) > 0) + + b := new(Entity) + defer free(b) + b^ = a^ + + entity_equal := struct_equal(runtime.type_info_base(type_info_of(^Entity)).variant.(runtime.Type_Info_Pointer).elem) + testing.expect(t, entity_equal(a, b)) + b.small = complex(f16(1), f16(3)) + testing.expect(t, !entity_equal(a, b)) + b.small = a.small + b.orientation = 2 + testing.expect(t, !entity_equal(a, b)) + + h: ^Holder + s = fmt.tprint(h) + testing.expect(t, len(s) > 0) + holder_info := runtime.type_info_base(type_info_of(^Holder)).variant.(runtime.Type_Info_Pointer).elem + map_info := runtime.type_info_base(runtime.type_info_base(holder_info).variant.(runtime.Type_Info_Struct).types[0]).variant.(runtime.Type_Info_Map).map_info + k1 := Key{"a", 1} + k2 := Key{"a", 2} + testing.expect(t, map_info.key_equal(&k1, &k1)) + testing.expect(t, !map_info.key_equal(&k1, &k2)) + + w1 := Wrapper{quaternion64(1)} + w2 := Wrapper{quaternion64(1)} + s = fmt.tprint(&w1) + testing.expect(t, len(s) > 0) + wrapper_equal := struct_equal(runtime.type_info_base(type_info_of(^Wrapper)).variant.(runtime.Type_Info_Pointer).elem) + testing.expect(t, wrapper_equal(&w1, &w2)) + w2.v = complex128(1) + testing.expect(t, !wrapper_equal(&w1, &w2)) + w1.v = complex128(1) + testing.expect(t, wrapper_equal(&w1, &w2)) +} From b785a3fc77140e1146fa6c0788c0462112943420 Mon Sep 17 00:00:00 2001 From: corley <28909106+corleypc@users.noreply.github.com> Date: Sat, 3 Oct 2026 15:39:22 +0300 Subject: [PATCH 167/215] adds a config for opting out of Eisel-Lemire --- core/strconv/fast_float.odin | 8 ++++++++ core/strconv/strconv.odin | 20 +++++++++++--------- 2 files changed, 19 insertions(+), 9 deletions(-) diff --git a/core/strconv/fast_float.odin b/core/strconv/fast_float.odin index 83e63b2a5..16363cdd3 100644 --- a/core/strconv/fast_float.odin +++ b/core/strconv/fast_float.odin @@ -2,6 +2,8 @@ package strconv import "core:math/bits" +_ :: bits // needed for STRCONV_FAST_FLOAT=false + /* Eisel-Lemire decimal to binary conversion. @@ -22,6 +24,12 @@ import "core:math/bits" Software: Practice and Experience 53 (7), 2023. https://arxiv.org/abs/2212.06644 */ +/* + Disable with `-define:STRCONV_FAST_FLOAT=false` to drop the Eisel-Lemire step + and its table. +*/ +FAST_FLOAT :: #config(STRCONV_FAST_FLOAT, true) + _SMALLEST_POWER_OF_FIVE :: -342 /* diff --git a/core/strconv/strconv.odin b/core/strconv/strconv.odin index 828c25b35..1c71b688d 100644 --- a/core/strconv/strconv.odin +++ b/core/strconv/strconv.odin @@ -1211,16 +1211,18 @@ parse_float_prefix_generic :: proc($T: typeid, str: string) -> (value: T, nr: in } // Eisel-Lemire's fast float algorithm - fast_float: { - b := fast_float_compute_float(T, exp, mantissa) - if trunc && b != fast_float_compute_float(T, exp, mantissa+1) { - break fast_float + when FAST_FLOAT { + fast_float: { + b := fast_float_compute_float(T, exp, mantissa) + if trunc && b != fast_float_compute_float(T, exp, mantissa+1) { + break fast_float + } + ok = b >> info.mantbits != 1<> info.mantbits != 1< Date: Sat, 3 Oct 2026 13:46:29 +0100 Subject: [PATCH 168/215] Replace the division in `map_cell_index_dynamic ` with a reciprocal multiply trick --- base/runtime/dynamic_map_internal.odin | 55 ++++++++++++++++++-------- 1 file changed, 38 insertions(+), 17 deletions(-) diff --git a/base/runtime/dynamic_map_internal.odin b/base/runtime/dynamic_map_internal.odin index c15bc9cc0..65c81d54e 100644 --- a/base/runtime/dynamic_map_internal.odin +++ b/base/runtime/dynamic_map_internal.odin @@ -53,24 +53,45 @@ map_cell_info :: intrinsics.type_map_cell_info // Same as the above procedure but at runtime with the cell Map_Cell_Info value. @(require_results) -map_cell_index_dynamic :: #force_inline proc "contextless" (base: uintptr, #no_alias info: ^Map_Cell_Info, index: uintptr) -> uintptr { - // Micro-optimize the common cases to save on integer division. - elements_per_cell := uintptr(info.elements_per_cell) - size_of_cell := uintptr(info.size_of_cell) - switch elements_per_cell { - case 1: - return base + (index * size_of_cell) - case 2: - cell_index := index >> 1 - data_index := index & 1 - size_of_type := uintptr(info.size_of_type) - return base + (cell_index * size_of_cell) + (data_index * size_of_type) - case: - cell_index := index / elements_per_cell - data_index := index % elements_per_cell - size_of_type := uintptr(info.size_of_type) - return base + (cell_index * size_of_cell) + (data_index * size_of_type) +map_cell_index_dynamic :: #force_inline proc "contextless" (base: uintptr, #no_alias info: ^Map_Cell_Info, index: uintptr) -> uintptr #no_bounds_check { + #assert(MAP_CACHE_LINE_SIZE == 64) + + // ceil(2^64 / N) for each N = MAP_CACHE_LINE_SIZE / size_of(T) > 1 + @(static, rodata) + MAP_CELL_RECIPROCALS := [MAP_CACHE_LINE_SIZE+1]u64{ + 2 = (1<<64 + 1) / 2, + 3 = (1<<64 + 2) / 3, + 4 = (1<<64 + 3) / 4, + 5 = (1<<64 + 4) / 5, + 6 = (1<<64 + 5) / 6, + 7 = (1<<64 + 6) / 7, + 8 = (1<<64 + 7) / 8, + 9 = (1<<64 + 8) / 9, + 10 = (1<<64 + 9) / 10, + 12 = (1<<64 + 11) / 12, + 16 = (1<<64 + 15) / 16, + 21 = (1<<64 + 20) / 21, + 32 = (1<<64 + 31) / 32, + 64 = (1<<64 + 63) / 64, } + + // cell_index*size_of_cell + data_index*size_of_type == index*size_of_type + cell_index*padding + + n := info.elements_per_cell + stride := info.size_of_cell if n == 1 else info.size_of_type + padding := info.size_of_cell - n*stride + offset := index*stride + if padding != 0 { + r := MAP_CELL_RECIPROCALS[n] + when size_of(uintptr) == 8 { + cell_index := uintptr((u128(index)*u128(r)) >> 64) // NOTE(bill): on many platforms, this use of `u128` is actually a single instruction + } else { + lo := u64(index)*(r & 0xffff_ffff) + cell_index := uintptr((u64(index)*(r >> 32) + (lo >> 32)) >> 32) + } + offset += cell_index*padding + } + return base + offset } // Same as above procedure but with compile-time constant index. From d8da5185c98f4586d942f3f3ae4a4e046f125f7a Mon Sep 17 00:00:00 2001 From: gingerBill Date: Sat, 3 Oct 2026 14:47:38 +0100 Subject: [PATCH 169/215] Store a constant holding a misaligned pointer directly rather than copying it from a constant global, which Apple's linker rejects --- src/llvm_backend_general.cpp | 30 +++++++++++++++++++++++++++++- 1 file changed, 29 insertions(+), 1 deletion(-) diff --git a/src/llvm_backend_general.cpp b/src/llvm_backend_general.cpp index 1a299689e..a2b2a44b9 100644 --- a/src/llvm_backend_general.cpp +++ b/src/llvm_backend_general.cpp @@ -1935,6 +1935,33 @@ gb_internal bool lb_try_copy_loaded_aggregate(lbProcedure *p, LLVMValueRef dst, return true; } +// Apple's linker rejects the address of a symbol stored in data at an address not aligned to a pointer, +// as a constant of a packed struct may hold +gb_internal bool lb_const_has_misaligned_pointer(LLVMTargetDataRef td, LLVMValueRef c, u64 offset, u64 base_align) { + if (LLVMIsAGlobalValue(c) || LLVMIsAConstantExpr(c) || LLVMIsABlockAddress(c)) { + u64 ptr_size = cast(u64)build_context.ptr_size; + return base_align < ptr_size || offset % ptr_size != 0; + } + LLVMTypeRef t = LLVMTypeOf(c); + if (LLVMIsAConstantStruct(c)) { + unsigned n = LLVMCountStructElementTypes(t); + for (unsigned i = 0; i < n; i++) { + if (lb_const_has_misaligned_pointer(td, LLVMGetOperand(c, i), offset + LLVMOffsetOfElement(td, t, i), base_align)) { + return true; + } + } + } else if (LLVMIsAConstantArray(c)) { + u64 stride = LLVMABISizeOfType(td, LLVMGetElementType(t)); + unsigned n = cast(unsigned)LLVMGetNumOperands(c); + for (unsigned i = 0; i < n; i++) { + if (lb_const_has_misaligned_pointer(td, LLVMGetOperand(c, i), offset + i*stride, base_align)) { + return true; + } + } + } + return false; +} + gb_internal void lb_emit_store(lbProcedure *p, lbValue ptr, lbValue value) { GB_ASSERT(value.value != nullptr); @@ -1983,7 +2010,8 @@ gb_internal void lb_emit_store(lbProcedure *p, lbValue ptr, lbValue value) { src_ptr, lb_try_get_alignment(src_ptr_original, 1), LLVMConstInt(LLVMInt64TypeInContext(p->module->ctx), lb_sizeof(LLVMTypeOf(value.value)), false)); return; - } else if (LLVMIsConstant(value.value)) { + } else if (LLVMIsConstant(value.value) && + !lb_const_has_misaligned_pointer(LLVMGetModuleDataLayout(p->module->mod), value.value, 0, cast(u64)type_align_of(value.type))) { lbAddr addr = lb_add_global_generated_from_procedure(p, value.type, value); lb_make_global_private_const(addr); From 0ea9b17c3637106796b61bf7ce1c77b441e21297 Mon Sep 17 00:00:00 2001 From: gingerBill Date: Sat, 3 Oct 2026 14:53:55 +0100 Subject: [PATCH 170/215] Fix the probe distance in `__$map_get` and store directly into an empty slot in `__$map_set`, which also improves a `map`'s performance --- src/llvm_backend.cpp | 161 +++++++++++++++++++++++++++++++------------ 1 file changed, 117 insertions(+), 44 deletions(-) diff --git a/src/llvm_backend.cpp b/src/llvm_backend.cpp index 05ce7ae17..e5bcce87f 100644 --- a/src/llvm_backend.cpp +++ b/src/llvm_backend.cpp @@ -651,6 +651,42 @@ gb_internal lbValue lb_hasher_proc_for_type(lbModule *m, Type *type) { #define LLVM_SET_VALUE_NAME(value, name) LLVMSetValueName2((value), (name), gb_count_of((name))-1); +struct lbMapKVH { + lbValue mask; // capacity-1 + lbValue ks; // ^Key + lbValue vs; // ^Value + lbValue hs; // ^uintptr +}; + +gb_internal lbMapKVH lb_map_kvh_data_static(lbProcedure *p, Type *type, lbValue map) { + // NOTE(bill): This assumes that the map has been allocated already (i.e. `data != 0`) + + lbModule *m = p->module; + lbValue one = lb_const_int(m, t_uintptr, 1); + + lbValue data = lb_emit_struct_ev(p, map, 0); + lbValue log2_cap = lb_emit_arith(p, Token_And, data, lb_const_int(m, t_uintptr, MAP_CACHE_LINE_SIZE-1), t_uintptr); + lbValue capacity = lb_emit_arith(p, Token_Shl, one, log2_cap, t_uintptr); + LLVM_SET_VALUE_NAME(capacity.value, "capacity"); + + lbMapKVH res = {}; + res.mask = lb_emit_arith(p, Token_Sub, capacity, one, t_uintptr); + LLVM_SET_VALUE_NAME(res.mask.value, "mask"); + + lbValue ks = lb_map_data_uintptr(p, map); + lbValue vs = lb_map_cell_index_static(p, type->Map.key, ks, capacity); + lbValue hs = lb_map_cell_index_static(p, type->Map.value, vs, capacity); + + res.ks = lb_emit_conv(p, ks, alloc_type_pointer(type->Map.key)); + res.vs = lb_emit_conv(p, vs, alloc_type_pointer(type->Map.value)); + res.hs = lb_emit_conv(p, hs, alloc_type_pointer(t_uintptr)); + + LLVM_SET_VALUE_NAME(res.ks.value, "ks"); + LLVM_SET_VALUE_NAME(res.vs.value, "vs"); + LLVM_SET_VALUE_NAME(res.hs.value, "hs"); + return res; +} + gb_internal lbValue lb_map_get_proc_for_type(lbModule *m, Type *type) { GB_ASSERT(!build_context.dynamic_map_calls); @@ -695,10 +731,10 @@ gb_internal lbValue lb_map_get_proc_for_type(lbModule *m, Type *type) { lbBlock *loop_block = lb_create_block(p, "loop"); lbBlock *hash_block = lb_create_block(p, "hash"); + lbBlock *key_compare_block = lb_create_block(p, "key_compare"); + lbBlock *empty_block = lb_create_block(p, "empty"); lbBlock *probe_block = lb_create_block(p, "probe"); lbBlock *increment_block = lb_create_block(p, "increment"); - lbBlock *hash_compare_block = lb_create_block(p, "hash_compare"); - lbBlock *key_compare_block = lb_create_block(p, "key_compare"); lbBlock *value_block = lb_create_block(p, "value"); lbBlock *nil_block = lb_create_block(p, "nil"); @@ -724,63 +760,38 @@ gb_internal lbValue lb_map_get_proc_for_type(lbModule *m, Type *type) { LLVM_SET_VALUE_NAME(pos.addr.value, "pos"); LLVM_SET_VALUE_NAME(distance.addr.value, "distance"); - lbValue capacity = lb_map_cap(p, map); - LLVM_SET_VALUE_NAME(capacity.value, "capacity"); - lbValue cap_minus_1 = lb_emit_arith(p, Token_Sub, capacity, lb_const_int(m, t_int, 1), t_int); - lbValue mask = lb_emit_conv(p, cap_minus_1, t_uintptr); - LLVM_SET_VALUE_NAME(mask.value, "mask"); + // NOTE(bill): length != 0, so the map has been allocated + lbMapKVH kvh = lb_map_kvh_data_static(p, type, map); + lbValue mask = kvh.mask; + lbValue ks = kvh.ks; + lbValue vs = kvh.vs; + lbValue hs = kvh.hs; + + lb_addr_store(p, pos, lb_emit_arith(p, Token_And, h, mask, t_uintptr)); - { - // map_desired_position inlined - lbValue the_pos = lb_emit_arith(p, Token_And, h, mask, t_uintptr); - the_pos = lb_emit_conv(p, the_pos, t_uintptr); - lb_addr_store(p, pos, the_pos); - } lbValue zero_uintptr = lb_const_int(m, t_uintptr, 0); lbValue one_uintptr = lb_const_int(m, t_uintptr, 1); - lbValue ks = lb_map_data_uintptr(p, map); - lbValue vs = lb_map_cell_index_static(p, type->Map.key, ks, capacity); - lbValue hs = lb_map_cell_index_static(p, type->Map.value, vs, capacity); - - ks = lb_emit_conv(p, ks, alloc_type_pointer(type->Map.key)); - vs = lb_emit_conv(p, vs, alloc_type_pointer(type->Map.value)); - hs = lb_emit_conv(p, hs, alloc_type_pointer(t_uintptr)); - - LLVM_SET_VALUE_NAME(ks.value, "ks"); - LLVM_SET_VALUE_NAME(vs.value, "vs"); - LLVM_SET_VALUE_NAME(hs.value, "hs"); - lb_emit_jump(p, loop_block); lb_start_block(p, loop_block); lbValue element_hash = lb_emit_load(p, lb_emit_ptr_offset(p, hs, lb_addr_load(p, pos))); LLVM_SET_VALUE_NAME(element_hash.value, "element_hash"); - { - // if element_hash == 0 { return nil } - lb_emit_if(p, lb_emit_comp(p, Token_CmpEq, element_hash, zero_uintptr), nil_block, probe_block); - } + // `h` is never empty nor a tombstone, so check for a match first + lb_emit_if(p, lb_emit_comp(p, Token_CmpEq, element_hash, h), key_compare_block, empty_block); + + lb_start_block(p, empty_block); + lb_emit_if(p, lb_emit_comp(p, Token_CmpEq, element_hash, zero_uintptr), nil_block, probe_block); lb_start_block(p, probe_block); { - // map_probe_distance inlined - lbValue probe_distance = lb_emit_arith(p, Token_And, h, mask, t_uintptr); - probe_distance = lb_emit_conv(p, probe_distance, t_uintptr); - - lbValue cap = lb_emit_conv(p, capacity, t_uintptr); - lbValue base = lb_emit_arith(p, Token_Add, lb_addr_load(p, pos), cap, t_uintptr); - probe_distance = lb_emit_arith(p, Token_Sub, base, probe_distance, t_uintptr); + lbValue probe_distance = lb_emit_arith(p, Token_Sub, lb_addr_load(p, pos), element_hash, t_uintptr); probe_distance = lb_emit_arith(p, Token_And, probe_distance, mask, t_uintptr); LLVM_SET_VALUE_NAME(probe_distance.value, "probe_distance"); lbValue cond = lb_emit_comp(p, Token_Gt, lb_addr_load(p, distance), probe_distance); - lb_emit_if(p, cond, nil_block, hash_compare_block); - } - - lb_start_block(p, hash_compare_block); - { - lb_emit_if(p, lb_emit_comp(p, Token_CmpEq, element_hash, h), key_compare_block, increment_block); + lb_emit_if(p, cond, nil_block, increment_block); } lb_start_block(p, key_compare_block); @@ -817,7 +828,6 @@ gb_internal lbValue lb_map_get_proc_for_type(lbModule *m, Type *type) { LLVMBuildRet(p->builder, res.value); } - // gb_printf_err("%s\n", LLVMPrintValueToString(p->value)); return {p->value, p->type}; } @@ -912,6 +922,12 @@ gb_internal lbValue lb_map_set_proc_for_type(lbModule *m, Type *type) { lbBlock *insert_block = lb_create_block(p, "insert"); lbBlock *check_has_grown_block = lb_create_block(p, "check-has-grown"); lbBlock *rehash_block = lb_create_block(p, "rehash"); + lbBlock *slot_block = lb_create_block(p, "slot"); + lbBlock *slot_loop_block = lb_create_block(p, "slot-loop"); + lbBlock *slot_used_block = lb_create_block(p, "slot-used"); + lbBlock *slot_probe_block = lb_create_block(p, "slot-probe"); + lbBlock *slot_next_block = lb_create_block(p, "slot-next"); + lbBlock *place_block = lb_create_block(p, "place"); lb_emit_if(p, lb_emit_comp_against_nil(p, Token_NotEq, found_ptr), found_block, check_grow_block); lb_start_block(p, found_block); @@ -943,7 +959,7 @@ gb_internal lbValue lb_map_set_proc_for_type(lbModule *m, Type *type) { lb_start_block(p, check_has_grown_block); - lb_emit_if(p, has_grown, rehash_block, insert_block); + lb_emit_if(p, has_grown, rehash_block, slot_block); lb_start_block(p, rehash_block); lbValue key = lb_emit_load(p, key_ptr); lbValue new_hash = lb_gen_map_key_hash(p, map_ptr, key, nullptr); @@ -952,6 +968,63 @@ gb_internal lbValue lb_map_set_proc_for_type(lbModule *m, Type *type) { lb_emit_jump(p, insert_block); } + lb_start_block(p, slot_block); + { + lbValue map = lb_emit_load(p, lb_emit_conv(p, map_ptr, t_raw_map_ptr)); + lbMapKVH kvh = lb_map_kvh_data_static(p, type, map); + lbValue h = lb_addr_load(p, hash_addr); + + lbAddr pos = lb_add_local_generated(p, t_uintptr, false); + lbAddr distance = lb_add_local_generated(p, t_uintptr, true); + LLVM_SET_VALUE_NAME(pos.addr.value, "slot_pos"); + LLVM_SET_VALUE_NAME(distance.addr.value, "slot_distance"); + lb_addr_store(p, pos, lb_emit_arith(p, Token_And, h, kvh.mask, t_uintptr)); + + lb_emit_jump(p, slot_loop_block); + lb_start_block(p, slot_loop_block); + + lbValue element_hash = lb_emit_load(p, lb_emit_ptr_offset(p, kvh.hs, lb_addr_load(p, pos))); + LLVM_SET_VALUE_NAME(element_hash.value, "slot_hash"); + + lb_emit_if(p, lb_emit_comp(p, Token_CmpEq, element_hash, lb_const_int(m, t_uintptr, 0)), place_block, slot_used_block); + + lb_start_block(p, slot_used_block); + { + lbValue tombstone_mask = lb_const_int(m, t_uintptr, 1ull << (8*type_size_of(t_uintptr) - 1)); + lbValue tombstone = lb_emit_arith(p, Token_And, element_hash, tombstone_mask, t_uintptr); + lb_emit_if(p, lb_emit_comp(p, Token_NotEq, tombstone, lb_const_int(m, t_uintptr, 0)), insert_block, slot_probe_block); + } + + lb_start_block(p, slot_probe_block); + { + lbValue probe_distance = lb_emit_arith(p, Token_Sub, lb_addr_load(p, pos), element_hash, t_uintptr); + probe_distance = lb_emit_arith(p, Token_And, probe_distance, kvh.mask, t_uintptr); + lb_emit_if(p, lb_emit_comp(p, Token_Gt, lb_addr_load(p, distance), probe_distance), insert_block, slot_next_block); + } + + lb_start_block(p, slot_next_block); + { + lbValue pp = lb_emit_arith(p, Token_Add, lb_addr_load(p, pos), lb_const_int(m, t_uintptr, 1), t_uintptr); + lb_addr_store(p, pos, lb_emit_arith(p, Token_And, pp, kvh.mask, t_uintptr)); + lb_emit_increment(p, distance.addr); + lb_emit_jump(p, slot_loop_block); + } + + lb_start_block(p, place_block); + { + lbValue slot = lb_addr_load(p, pos); + lbValue key_dst = lb_map_cell_index_static(p, type->Map.key, kvh.ks, slot); + lbValue value_dst = lb_map_cell_index_static(p, type->Map.value, kvh.vs, slot); + lb_mem_copy_non_overlapping(p, key_dst, key_ptr, lb_const_int(m, t_int, type_size_of(type->Map.key))); + lb_mem_copy_non_overlapping(p, value_dst, value_ptr, lb_const_int(m, t_int, type_size_of(type->Map.value))); + lb_emit_store(p, lb_emit_ptr_offset(p, kvh.hs, slot), h); + + lb_emit_increment(p, lb_map_len_ptr(p, map_ptr)); + + LLVMBuildRet(p->builder, lb_emit_conv(p, value_dst, t_rawptr).value); + } + } + lb_start_block(p, insert_block); { auto args = array_make(temporary_allocator(), 5); From 24ff27e6c8ff2d3a5ffe21c0339c9e30d65ed565 Mon Sep 17 00:00:00 2001 From: gingerBill Date: Sat, 3 Oct 2026 15:09:56 +0100 Subject: [PATCH 171/215] Hash fixed-size map keys a "word" at a time with `default_hasher_fixed` --- base/runtime/doc.odin | 1 + base/runtime/dynamic_map_internal.odin | 54 ++++++++++++++++++++++++-- 2 files changed, 52 insertions(+), 3 deletions(-) diff --git a/base/runtime/doc.odin b/base/runtime/doc.odin index 58ae21c5a..543ff881a 100644 --- a/base/runtime/doc.odin +++ b/base/runtime/doc.odin @@ -156,6 +156,7 @@ complain if they're missing. Required if maps are used * `default_hasher` +* `default_hasher_fixed` * `default_hasher_cstring` * `default_hasher_string` diff --git a/base/runtime/dynamic_map_internal.odin b/base/runtime/dynamic_map_internal.odin index 65c81d54e..fd6fb9413 100644 --- a/base/runtime/dynamic_map_internal.odin +++ b/base/runtime/dynamic_map_internal.odin @@ -984,6 +984,54 @@ default_hasher :: #force_inline proc "contextless" (data: rawptr, seed: uintptr, return uintptr(h) | uintptr(uintptr(h) == 0) } +default_hasher_fixed :: #force_inline proc "contextless" (data: rawptr, seed: uintptr, N: int) -> uintptr { + @(require_results) + hash_fold :: #force_inline proc "contextless" (x, y: uintptr) -> uintptr { + when size_of(uintptr) == 8 { + p := u128(x) * u128(y) + return uintptr(p) ~ uintptr(p >> 64) + } else { + p := u64(x) * u64(y) + return uintptr(p) ~ uintptr(p >> 32) + } + } + + @(require_results) + hash_load_short :: #force_inline proc "contextless" (p: uintptr, N: int) -> uintptr { + when size_of(uintptr) == 8 { + if N >= 4 { + lo := intrinsics.unaligned_load((^u32)(p)) + hi := intrinsics.unaligned_load((^u32)(p + uintptr(N-4))) + return uintptr(lo) | uintptr(hi) << 32 + } + } + b := ([^]u8)(p) + return uintptr(b[0]) | uintptr(b[N/2]) << 8 | uintptr(b[N-1]) << 16 + } + + + HASH_K0 :: 0x9e3779b97f4a7c15 when size_of(uintptr) == 8 else 0x9e3779b9 + HASH_K1 :: 0xbf58476d1ce4e5b9 when size_of(uintptr) == 8 else 0x85ebca6b + + W :: size_of(uintptr) + p := uintptr(data) + h := seed ~ uintptr(N) + if N >= W { + for i := 0; i+W <= N; i += W { + h = hash_fold(h ~ intrinsics.unaligned_load((^uintptr)(p + uintptr(i))), HASH_K0) + } + if N % W != 0 { + // overlap the previous word rather than read past the end + h = hash_fold(h ~ intrinsics.unaligned_load((^uintptr)(p + uintptr(N-W))), HASH_K0) + } + } else if N > 0 { + h = hash_fold(h ~ hash_load_short(p, N), HASH_K0) + } + h = hash_fold(h, HASH_K1) + h &= HASH_MASK + return h | uintptr(h == 0) +} + default_hasher_string :: proc "contextless" (data: rawptr, seed: uintptr) -> uintptr { str := (^[]byte)(data) return default_hasher(raw_data(str^), seed, len(str)) @@ -1004,13 +1052,13 @@ default_hasher_f64 :: proc "contextless" (f: f64, seed: uintptr) -> uintptr { f := f buf: [size_of(f)]u8 if f == 0 { - return default_hasher(&buf, seed, size_of(buf)) + return default_hasher_fixed(&buf, seed, size_of(buf)) } if f != f { // TODO(bill): What should the logic be for NaNs? - return default_hasher(&f, seed, size_of(f)) + return default_hasher_fixed(&f, seed, size_of(f)) } - return default_hasher(&f, seed, size_of(f)) + return default_hasher_fixed(&f, seed, size_of(f)) } default_hasher_complex128 :: proc "contextless" (x, y: f64, seed: uintptr) -> uintptr { From d57f6d8232775479ab7c7f0a1ad1223c93b6e182 Mon Sep 17 00:00:00 2001 From: Jeroen van Rijn Date: Sat, 3 Oct 2026 16:15:37 +0200 Subject: [PATCH 172/215] Add a few more #no_bounds_check to XXH3. --- core/hash/xxhash/streaming.odin | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/core/hash/xxhash/streaming.odin b/core/hash/xxhash/streaming.odin index 22d99be1d..6761f0410 100644 --- a/core/hash/xxhash/streaming.odin +++ b/core/hash/xxhash/streaming.odin @@ -179,7 +179,7 @@ XXH3_reset_internal :: proc(state: ^XXH3_state, seed: XXH64_hash, secret: []u8, XXH3_consume_stripes :: #force_inline proc( acc: []xxh_u64, stripes_so_far: ^uint, stripes_per_block: uint, input: []u8, number_of_stripes: uint, secret: []u8, secret_limit: uint, - f_acc512: XXH3_accumulate_512_f, f_scramble: XXH3_scramble_accumulator_f) { + f_acc512: XXH3_accumulate_512_f, f_scramble: XXH3_scramble_accumulator_f) #no_bounds_check { assert(number_of_stripes <= stripes_per_block) /* can handle max 1 scramble per invocation */ assert(stripes_so_far^ < stripes_per_block) @@ -206,7 +206,7 @@ XXH3_consume_stripes :: #force_inline proc( XXH3_update :: #force_inline proc( state: ^XXH3_state, input: []u8, f_acc512: XXH3_accumulate_512_f, - f_scramble: XXH3_scramble_accumulator_f) -> (err: Error) { + f_scramble: XXH3_scramble_accumulator_f) -> (err: Error) #no_bounds_check { input := input length := len(input) From d783e8b1f635589cd7016fe85e5151fa02f3172c Mon Sep 17 00:00:00 2001 From: gingerBill Date: Sat, 3 Oct 2026 15:16:25 +0100 Subject: [PATCH 173/215] Inline more of the code in `default_hasher_fixed` --- base/runtime/dynamic_map_internal.odin | 27 +++++++++----------------- 1 file changed, 9 insertions(+), 18 deletions(-) diff --git a/base/runtime/dynamic_map_internal.odin b/base/runtime/dynamic_map_internal.odin index fd6fb9413..b7dc2e1b9 100644 --- a/base/runtime/dynamic_map_internal.odin +++ b/base/runtime/dynamic_map_internal.odin @@ -996,36 +996,27 @@ default_hasher_fixed :: #force_inline proc "contextless" (data: rawptr, seed: ui } } - @(require_results) - hash_load_short :: #force_inline proc "contextless" (p: uintptr, N: int) -> uintptr { - when size_of(uintptr) == 8 { - if N >= 4 { - lo := intrinsics.unaligned_load((^u32)(p)) - hi := intrinsics.unaligned_load((^u32)(p + uintptr(N-4))) - return uintptr(lo) | uintptr(hi) << 32 - } - } - b := ([^]u8)(p) - return uintptr(b[0]) | uintptr(b[N/2]) << 8 | uintptr(b[N-1]) << 16 - } - - HASH_K0 :: 0x9e3779b97f4a7c15 when size_of(uintptr) == 8 else 0x9e3779b9 HASH_K1 :: 0xbf58476d1ce4e5b9 when size_of(uintptr) == 8 else 0x85ebca6b W :: size_of(uintptr) p := uintptr(data) h := seed ~ uintptr(N) - if N >= W { + switch { + case N >= W: for i := 0; i+W <= N; i += W { h = hash_fold(h ~ intrinsics.unaligned_load((^uintptr)(p + uintptr(i))), HASH_K0) } if N % W != 0 { - // overlap the previous word rather than read past the end h = hash_fold(h ~ intrinsics.unaligned_load((^uintptr)(p + uintptr(N-W))), HASH_K0) } - } else if N > 0 { - h = hash_fold(h ~ hash_load_short(p, N), HASH_K0) + case N >= 4: + lo := intrinsics.unaligned_load((^u32)(p)) + hi := intrinsics.unaligned_load((^u32)(p + uintptr(N-4))) + h = hash_fold(h ~ uintptr(u64(lo) | u64(hi) << 32), HASH_K0) + case N > 0: + b := ([^]u8)(p) + h = hash_fold(h ~ (uintptr(b[0]) | uintptr(b[N/2]) << 8 | uintptr(b[N-1]) << 16), HASH_K0) } h = hash_fold(h, HASH_K1) h &= HASH_MASK From ecfd651f95248b50e075abf504d6221f40acada8 Mon Sep 17 00:00:00 2001 From: gingerBill Date: Sat, 3 Oct 2026 15:26:49 +0100 Subject: [PATCH 174/215] Use atomics for the flags `name_test` --- tests/core/thread/test_core_thread.odin | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/tests/core/thread/test_core_thread.odin b/tests/core/thread/test_core_thread.odin index e06fcc3cf..56f42bc86 100644 --- a/tests/core/thread/test_core_thread.odin +++ b/tests/core/thread/test_core_thread.odin @@ -59,9 +59,9 @@ name_test :: proc(_t: ^testing.T) { name_test_t = _t t := thread.create_and_start(name = "test_name", fn = proc() { - main_wait = false + intrinsics.atomic_store(&main_wait, false) - for (child_wait) {} + for intrinsics.atomic_load(&child_wait) {} n, err := thread.get_name() defer if err != nil { @@ -73,7 +73,7 @@ name_test :: proc(_t: ^testing.T) { }) defer free(t) - for (main_wait) {} + for intrinsics.atomic_load(&main_wait) {} n, err := thread.get_name(t) defer if err != nil { @@ -82,7 +82,7 @@ name_test :: proc(_t: ^testing.T) { testing.expect(name_test_t, err == nil, "thread name allocation failed") testing.expectf(name_test_t, n == "test_name","thread name on main did not match : got %v", n) - child_wait = false + intrinsics.atomic_store(&child_wait, false) thread.join(t) } From f86c53f13a12baed42094b8241e68cd2fb0cc6c2 Mon Sep 17 00:00:00 2001 From: gingerBill Date: Sat, 3 Oct 2026 15:32:09 +0100 Subject: [PATCH 175/215] Do Robin Hood displacement in `__$map_set` when no tombstone is in the way --- src/check_type.cpp | 2 +- src/llvm_backend.cpp | 136 ++++++++++++++++++++++++++++++++++++++----- 2 files changed, 121 insertions(+), 17 deletions(-) diff --git a/src/check_type.cpp b/src/check_type.cpp index 8555140cc..7bdb7d4e5 100644 --- a/src/check_type.cpp +++ b/src/check_type.cpp @@ -4197,7 +4197,7 @@ gb_internal void add_map_key_type_dependencies(CheckerContext *ctx, Type *key) { } if (is_type_simple_compare(key)) { - add_package_dependency(ctx, "runtime", "default_hasher"); + add_package_dependency(ctx, "runtime", "default_hasher_fixed"); return; } diff --git a/src/llvm_backend.cpp b/src/llvm_backend.cpp index e5bcce87f..720e6fba8 100644 --- a/src/llvm_backend.cpp +++ b/src/llvm_backend.cpp @@ -434,7 +434,7 @@ gb_internal lbValue lb_simple_compare_hash(lbProcedure *p, Type *type, lbValue d args[0] = data; args[1] = seed; args[2] = lb_const_int(p->module, t_int, type_size_of(type)); - return lb_emit_runtime_call(p, "default_hasher", args); + return lb_emit_runtime_call(p, "default_hasher_fixed", args); } gb_internal void lb_add_callsite_force_inline(lbProcedure *p, lbValue ret_value) { @@ -928,6 +928,8 @@ gb_internal lbValue lb_map_set_proc_for_type(lbModule *m, Type *type) { lbBlock *slot_probe_block = lb_create_block(p, "slot-probe"); lbBlock *slot_next_block = lb_create_block(p, "slot-next"); lbBlock *place_block = lb_create_block(p, "place"); + lbBlock *scan_block = lb_create_block(p, "scan"); + lbBlock *displace_block = lb_create_block(p, "displace"); lb_emit_if(p, lb_emit_comp_against_nil(p, Token_NotEq, found_ptr), found_block, check_grow_block); lb_start_block(p, found_block); @@ -974,6 +976,29 @@ gb_internal lbValue lb_map_set_proc_for_type(lbModule *m, Type *type) { lbMapKVH kvh = lb_map_kvh_data_static(p, type, map); lbValue h = lb_addr_load(p, hash_addr); + lbValue zero_uintptr = lb_const_int(m, t_uintptr, 0); + lbValue tombstone_mask = lb_const_int(m, t_uintptr, 1ull << (8*type_size_of(t_uintptr) - 1)); + lbValue key_size = lb_const_int(m, t_int, type_size_of(type->Map.key)); + lbValue value_size = lb_const_int(m, t_int, type_size_of(type->Map.value)); + + auto hash_ptr_at = [&](lbValue slot) -> lbValue { + return lb_emit_ptr_offset(p, kvh.hs, slot); + }; + auto is_empty = [&](lbValue hash) -> lbValue { + return lb_emit_comp(p, Token_CmpEq, hash, zero_uintptr); + }; + auto is_tombstone = [&](lbValue hash) -> lbValue { + return lb_emit_comp(p, Token_NotEq, lb_emit_arith(p, Token_And, hash, tombstone_mask, t_uintptr), zero_uintptr); + }; + // map_probe_distance inlined + auto probe_distance_of = [&](lbValue hash, lbValue slot) -> lbValue { + return lb_emit_arith(p, Token_And, lb_emit_arith(p, Token_Sub, slot, hash, t_uintptr), kvh.mask, t_uintptr); + }; + auto next_slot = [&](lbAddr slot) { + lbValue next = lb_emit_arith(p, Token_Add, lb_addr_load(p, slot), lb_const_int(m, t_uintptr, 1), t_uintptr); + lb_addr_store(p, slot, lb_emit_arith(p, Token_And, next, kvh.mask, t_uintptr)); + }; + lbAddr pos = lb_add_local_generated(p, t_uintptr, false); lbAddr distance = lb_add_local_generated(p, t_uintptr, true); LLVM_SET_VALUE_NAME(pos.addr.value, "slot_pos"); @@ -983,29 +1008,23 @@ gb_internal lbValue lb_map_set_proc_for_type(lbModule *m, Type *type) { lb_emit_jump(p, slot_loop_block); lb_start_block(p, slot_loop_block); - lbValue element_hash = lb_emit_load(p, lb_emit_ptr_offset(p, kvh.hs, lb_addr_load(p, pos))); + lbValue element_hash = lb_emit_load(p, hash_ptr_at(lb_addr_load(p, pos))); LLVM_SET_VALUE_NAME(element_hash.value, "slot_hash"); - lb_emit_if(p, lb_emit_comp(p, Token_CmpEq, element_hash, lb_const_int(m, t_uintptr, 0)), place_block, slot_used_block); + lb_emit_if(p, is_empty(element_hash), place_block, slot_used_block); lb_start_block(p, slot_used_block); - { - lbValue tombstone_mask = lb_const_int(m, t_uintptr, 1ull << (8*type_size_of(t_uintptr) - 1)); - lbValue tombstone = lb_emit_arith(p, Token_And, element_hash, tombstone_mask, t_uintptr); - lb_emit_if(p, lb_emit_comp(p, Token_NotEq, tombstone, lb_const_int(m, t_uintptr, 0)), insert_block, slot_probe_block); - } + lb_emit_if(p, is_tombstone(element_hash), insert_block, slot_probe_block); lb_start_block(p, slot_probe_block); { - lbValue probe_distance = lb_emit_arith(p, Token_Sub, lb_addr_load(p, pos), element_hash, t_uintptr); - probe_distance = lb_emit_arith(p, Token_And, probe_distance, kvh.mask, t_uintptr); - lb_emit_if(p, lb_emit_comp(p, Token_Gt, lb_addr_load(p, distance), probe_distance), insert_block, slot_next_block); + lbValue probe_distance = probe_distance_of(element_hash, lb_addr_load(p, pos)); + lb_emit_if(p, lb_emit_comp(p, Token_Gt, lb_addr_load(p, distance), probe_distance), scan_block, slot_next_block); } lb_start_block(p, slot_next_block); { - lbValue pp = lb_emit_arith(p, Token_Add, lb_addr_load(p, pos), lb_const_int(m, t_uintptr, 1), t_uintptr); - lb_addr_store(p, pos, lb_emit_arith(p, Token_And, pp, kvh.mask, t_uintptr)); + next_slot(pos); lb_emit_increment(p, distance.addr); lb_emit_jump(p, slot_loop_block); } @@ -1015,9 +1034,94 @@ gb_internal lbValue lb_map_set_proc_for_type(lbModule *m, Type *type) { lbValue slot = lb_addr_load(p, pos); lbValue key_dst = lb_map_cell_index_static(p, type->Map.key, kvh.ks, slot); lbValue value_dst = lb_map_cell_index_static(p, type->Map.value, kvh.vs, slot); - lb_mem_copy_non_overlapping(p, key_dst, key_ptr, lb_const_int(m, t_int, type_size_of(type->Map.key))); - lb_mem_copy_non_overlapping(p, value_dst, value_ptr, lb_const_int(m, t_int, type_size_of(type->Map.value))); - lb_emit_store(p, lb_emit_ptr_offset(p, kvh.hs, slot), h); + lb_mem_copy_non_overlapping(p, key_dst, key_ptr, key_size); + lb_mem_copy_non_overlapping(p, value_dst, value_ptr, value_size); + lb_emit_store(p, hash_ptr_at(slot), h); + + lb_emit_increment(p, lb_map_len_ptr(p, map_ptr)); + + LLVMBuildRet(p->builder, lb_emit_conv(p, value_dst, t_rawptr).value); + } + + // NOTE(bill): The entry takes over this slot. + // If no tombstone comes before the next empty slot, do what map_insert_hash_dynamic` does without them: + // carry each displaced entry on to the next slot whose entry it is poorer than, until an empty slot + lb_start_block(p, scan_block); + { + lbBlock *scan_loop_block = lb_create_block(p, "scan-loop"); + lbBlock *scan_used_block = lb_create_block(p, "scan-used"); + lbBlock *scan_next_block = lb_create_block(p, "scan-next"); + + lbAddr scan = lb_add_local_generated(p, t_uintptr, false); + lb_addr_store(p, scan, lb_addr_load(p, pos)); + + lb_emit_jump(p, scan_loop_block); + lb_start_block(p, scan_loop_block); + lbValue scan_hash = lb_emit_load(p, hash_ptr_at(lb_addr_load(p, scan))); + lb_emit_if(p, is_empty(scan_hash), displace_block, scan_used_block); + + lb_start_block(p, scan_used_block); + lb_emit_if(p, is_tombstone(scan_hash), insert_block, scan_next_block); + + lb_start_block(p, scan_next_block); + next_slot(scan); + lb_emit_jump(p, scan_loop_block); + } + + lb_start_block(p, displace_block); + { + lbBlock *swap_loop_block = lb_create_block(p, "swap-loop"); + lbBlock *swap_probe_block = lb_create_block(p, "swap-probe"); + lbBlock *swap_block = lb_create_block(p, "swap"); + lbBlock *swap_next_block = lb_create_block(p, "swap-next"); + lbBlock *swap_place_block = lb_create_block(p, "swap-place"); + + lbValue value_dst = lb_map_cell_index_static(p, type->Map.value, kvh.vs, lb_addr_load(p, pos)); + + lbAddr carried_key = lb_add_local_generated(p, type->Map.key, false); + lbAddr carried_value = lb_add_local_generated(p, type->Map.value, false); + lbAddr carried_hash = lb_add_local_generated(p, t_uintptr, false); + lbAddr temp_key = lb_add_local_generated(p, type->Map.key, false); + lbAddr temp_value = lb_add_local_generated(p, type->Map.value, false); + lb_mem_copy_non_overlapping(p, carried_key.addr, key_ptr, key_size); + lb_mem_copy_non_overlapping(p, carried_value.addr, value_ptr, value_size); + lb_addr_store(p, carried_hash, h); + + auto swap_memory = [&](lbValue a, lbValue b, lbValue temp, lbValue size) { + lb_mem_copy_non_overlapping(p, temp, a, size); + lb_mem_copy_non_overlapping(p, a, b, size); + lb_mem_copy_non_overlapping(p, b, temp, size); + }; + + lb_emit_jump(p, swap_loop_block); + lb_start_block(p, swap_loop_block); + lbValue slot = lb_addr_load(p, pos); + lbValue key_cell = lb_map_cell_index_static(p, type->Map.key, kvh.ks, slot); + lbValue value_cell = lb_map_cell_index_static(p, type->Map.value, kvh.vs, slot); + lbValue slot_hash = lb_emit_load(p, hash_ptr_at(slot)); + lb_emit_if(p, is_empty(slot_hash), swap_place_block, swap_probe_block); + + lb_start_block(p, swap_probe_block); + lbValue probe_distance = probe_distance_of(slot_hash, slot); + lb_emit_if(p, lb_emit_comp(p, Token_Gt, lb_addr_load(p, distance), probe_distance), swap_block, swap_next_block); + + lb_start_block(p, swap_block); + swap_memory(key_cell, carried_key.addr, temp_key.addr, key_size); + swap_memory(value_cell, carried_value.addr, temp_value.addr, value_size); + lb_emit_store(p, hash_ptr_at(slot), lb_addr_load(p, carried_hash)); + lb_addr_store(p, carried_hash, slot_hash); + lb_addr_store(p, distance, probe_distance); + lb_emit_jump(p, swap_next_block); + + lb_start_block(p, swap_next_block); + next_slot(pos); + lb_emit_increment(p, distance.addr); + lb_emit_jump(p, swap_loop_block); + + lb_start_block(p, swap_place_block); + lb_mem_copy_non_overlapping(p, key_cell, carried_key.addr, key_size); + lb_mem_copy_non_overlapping(p, value_cell, carried_value.addr, value_size); + lb_emit_store(p, hash_ptr_at(slot), lb_addr_load(p, carried_hash)); lb_emit_increment(p, lb_map_len_ptr(p, map_ptr)); From 32f30c3eb351f8a05000eaea4e255d531037306f Mon Sep 17 00:00:00 2001 From: gingerBill Date: Sat, 3 Oct 2026 16:00:23 +0100 Subject: [PATCH 176/215] Tokenize whilst parsing rather than storing every token of a file first --- src/checker.cpp | 4 +- src/error.cpp | 8 +++ src/main.cpp | 29 +------- src/parser.cpp | 186 ++++++++++++++++++++++++++---------------------- src/parser.hpp | 11 +-- 5 files changed, 119 insertions(+), 119 deletions(-) diff --git a/src/checker.cpp b/src/checker.cpp index fd65d42fc..01702b14e 100644 --- a/src/checker.cpp +++ b/src/checker.cpp @@ -7803,9 +7803,7 @@ gb_internal void check_parsed_files(Checker *c) { token.pos.column = 1; if (s->pkg->files.count > 0) { AstFile *f = s->pkg->files[0]; - if (f->tokens.count > 0) { - token = f->tokens[0]; - } + token = f->first_token; } error(token, "Undefined entry point procedure 'main'"); diff --git a/src/error.cpp b/src/error.cpp index 5879fbeec..f19829928 100644 --- a/src/error.cpp +++ b/src/error.cpp @@ -812,6 +812,10 @@ gb_internal void error_no_newline_va(TokenPos const &pos, char const *fmt, va_li gb_internal void syntax_error_va(TokenPos const &pos, TokenPos end, char const *fmt, va_list va) { + if (global_error_mute_depth > 0) { + global_error_mute_count += 1; + return; + } global_error_collector.count.fetch_add(1); mutex_lock(&global_error_collector.mutex); if (global_error_collector.count > MAX_ERROR_COLLECTOR_COUNT()) { @@ -844,6 +848,10 @@ gb_internal void syntax_error_va(TokenPos const &pos, TokenPos end, char const * } gb_internal void syntax_error_with_verbose_va(TokenPos const &pos, TokenPos end, char const *fmt, va_list va) { + if (global_error_mute_depth > 0) { + global_error_mute_count += 1; + return; + } global_error_collector.count.fetch_add(1); mutex_lock(&global_error_collector.mutex); if (global_error_collector.count > MAX_ERROR_COLLECTOR_COUNT()) { diff --git a/src/main.cpp b/src/main.cpp index 17306bfe1..b541dc0aa 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -2390,12 +2390,10 @@ gb_internal void show_timings(Checker *c, Timings *t) { isize files = 0; isize packages = p->packages.count; isize total_file_size = 0; - f64 total_tokenizing_time = 0; f64 total_parsing_time = 0; for (AstPackage *pkg : p->packages) { files += pkg->files.count; for (AstFile *file : pkg->files) { - total_tokenizing_time += file->time_to_tokenize; total_parsing_time += file->time_to_parse; total_file_size += file->tokenizer.end - file->tokenizer.start; } @@ -2419,22 +2417,9 @@ gb_internal void show_timings(Checker *c, Timings *t) { gb_printf_err("Total File Size - %td\n", total_file_size); gb_printf_err("\n"); } - { - f64 time = total_tokenizing_time; - gb_printf_err("Tokenization Only\n"); - gb_printf_err("LOC/s - %.3f\n", cast(f64)lines/time); - gb_printf_err("us/LOC - %.3f\n", 1.0e6*time/cast(f64)lines); - gb_printf_err("Tokens/s - %.3f\n", cast(f64)tokens/time); - gb_printf_err("us/Token - %.3f\n", 1.0e6*time/cast(f64)tokens); - gb_printf_err("bytes/s - %.3f\n", cast(f64)total_file_size/time); - gb_printf_err("MiB/s - %.3f\n", cast(f64)(total_file_size/time)/(1024*1024)); - gb_printf_err("us/bytes - %.3f\n", 1.0e6*time/cast(f64)total_file_size); - - gb_printf_err("\n"); - } { f64 time = total_parsing_time; - gb_printf_err("Parsing Only\n"); + gb_printf_err("Tokenizing and Parsing Only\n"); gb_printf_err("LOC/s - %.3f\n", cast(f64)lines/time); gb_printf_err("us/LOC - %.3f\n", 1.0e6*time/cast(f64)lines); gb_printf_err("Tokens/s - %.3f\n", cast(f64)tokens/time); @@ -3631,7 +3616,7 @@ gb_internal gbFileError write_file_with_stripped_tokens(gbFile *f, AstFile *file u8 const *file_data = file->tokenizer.start; i32 prev_offset = 0; i32 const end_offset = cast(i32)(file->tokenizer.end - file->tokenizer.start); - for (Token const &token : file->tokens) { + for (Token const &token : file->token_edits) { if (token.flags & (TokenFlag_Remove|TokenFlag_Replace)) { i32 offset = token.pos.offset; i32 to_write = offset-prev_offset; @@ -3674,15 +3659,7 @@ gb_internal int strip_semicolons(Parser *parser) { for (AstPackage *pkg : parser->packages) { for (AstFile *file : pkg->files) { - bool nothing_to_change = true; - for (Token const &token : file->tokens) { - if (token.flags) { - nothing_to_change = false; - break; - } - } - - if (nothing_to_change) { + if (file->token_edits.count == 0) { continue; } diff --git a/src/parser.cpp b/src/parser.cpp index 3f6578ab4..31561f39c 100644 --- a/src/parser.cpp +++ b/src/parser.cpp @@ -1575,13 +1575,35 @@ gb_internal Ast *ast_attribute(AstFile *f, Token token, Token open, Token close, } -gb_internal bool next_token0(AstFile *f) { - if (f->curr_token_index+1 < f->tokens.count) { - f->curr_token = f->tokens[++f->curr_token_index]; - return true; +gb_internal Token tokenize_next(AstFile *f) { + Token token = {}; + tokenizer_get_token(&f->tokenizer, &token); + f->token_count += 1; + if (token.kind == Token_Invalid) { + f->invalid_token_pos = token.pos; + syntax_error(token.pos, "Failed to parse file: %.*s; invalid token found in file", LIT(f->fullpath)); + begin_error_mute(); + token.kind = Token_EOF; } - syntax_error(f->curr_token, "Token is EOF"); - return false; + return token; +} + +gb_internal bool next_token0(AstFile *f) { + if (f->curr_token.kind == Token_EOF) { + syntax_error(f->curr_token, "Token is EOF"); + return false; + } + f->curr_token_index += 1; + if (f->lookahead_index < f->lookahead.count) { + f->curr_token = f->lookahead[f->lookahead_index++]; + if (f->lookahead_index == f->lookahead.count) { + array_clear(&f->lookahead); + f->lookahead_index = 0; + } + } else { + f->curr_token = tokenize_next(f); + } + return true; } @@ -1665,7 +1687,6 @@ gb_internal Token advance_token(AstFile *f) { f->lead_comment = nullptr; f->line_comment = nullptr; - f->prev_token_index = f->curr_token_index; Token prev = f->prev_token = f->curr_token; bool ok = next_token0(f); @@ -1688,30 +1709,40 @@ gb_internal Token advance_token(AstFile *f) { } -gb_internal Token peek_token(AstFile *f) { - for (isize i = f->curr_token_index+1; i < f->tokens.count; i++) { - Token tok = f->tokens[i]; +gb_internal Token peek_token_n(AstFile *f, isize n) { + if (f->curr_token.kind == Token_EOF) { + return {}; + } + for (isize i = f->lookahead_index; /**/; i++) { + if (i == f->lookahead.count) { + array_add(&f->lookahead, tokenize_next(f)); + } + Token tok = f->lookahead[i]; if (tok.kind == Token_Comment) { continue; } - return tok; + if (n-- == 0) { + return tok; + } + if (tok.kind == Token_EOF) { + return {}; + } } - return {}; } -gb_internal Token peek_token_n(AstFile *f, isize n) { - Token found = {}; - for (isize i = f->curr_token_index+1; i < f->tokens.count; i++) { - Token tok = f->tokens[i]; - if (tok.kind == Token_Comment) { - continue; - } - found = tok; - if (n-- == 0) { - return found; - } +gb_internal Token peek_token(AstFile *f) { + return peek_token_n(f, 0); +} + +// the next token, even if it is a comment +gb_internal Token peek_raw_token(AstFile *f) { + if (f->curr_token.kind == Token_EOF) { + return f->curr_token; } - return {}; + if (f->lookahead_index == f->lookahead.count) { + array_add(&f->lookahead, tokenize_next(f)); + } + return f->lookahead[f->lookahead_index]; } @@ -1778,6 +1809,9 @@ gb_internal Token expect_token(AstFile *f, TokenKind kind) { end_error_block(); if (prev.kind == Token_EOF) { + if (f->invalid_token_pos.line != 0) { + end_error_mute(); + } exit_with_errors(); } } @@ -1827,6 +1861,18 @@ gb_internal bool is_token_range(Token tok) { } +gb_internal void add_token_edit(AstFile *f, Token token, u8 flag) { + if (f->token_edits.count > 0) { + Token *last = &f->token_edits[f->token_edits.count-1]; + if (last->pos.offset == token.pos.offset) { + last->flags |= flag; + return; + } + } + token.flags |= flag; + array_add(&f->token_edits, token); +} + gb_internal Token expect_operator(AstFile *f) { Token prev = f->curr_token; if ((prev.kind == Token_in || prev.kind == Token_not_in) && (f->expr_level >= 0 || f->allow_in_expr)) { @@ -1847,7 +1893,7 @@ gb_internal Token expect_operator(AstFile *f) { } if (prev.kind == Token_Ellipsis) { syntax_error(prev, "'..' for ranges are not allowed, did you mean '..<' or '..='?"); - f->tokens[f->curr_token_index].flags |= TokenFlag_Replace; + add_token_edit(f, prev, TokenFlag_Replace); } advance_token(f); @@ -1962,8 +2008,8 @@ gb_internal Token expect_closing(AstFile *f, TokenKind kind, String const &conte gb_internal void assign_removal_flag_to_semicolon(AstFile *f) { // NOTE(bill): this is used for rewriting files to strip unneeded semicolons - Token *prev_token = &f->tokens[f->prev_token_index]; - Token *curr_token = &f->tokens[f->curr_token_index]; + Token const *prev_token = &f->prev_token; + Token const *curr_token = &f->curr_token; GB_ASSERT(prev_token->kind == Token_Semicolon); if (prev_token->string != ";") { return; @@ -1987,7 +2033,7 @@ gb_internal void assign_removal_flag_to_semicolon(AstFile *f) { if (is_strict_style(f) || (ast_file_vet_flags(f) & VetFlag_Semicolon)) { syntax_error(*prev_token, "Found unneeded semicolon"); } - prev_token->flags |= TokenFlag_Remove; + add_token_edit(f, *prev_token, TokenFlag_Remove); } gb_internal void expect_semicolon(AstFile *f) { @@ -2262,11 +2308,7 @@ gb_internal Ast *convert_stmt_to_expr(AstFile *f, Ast *statement, String const & } syntax_error(f->curr_token, "Expected '%.*s', found a simple statement.", LIT(kind)); - Token end = f->curr_token; - if (f->tokens.count < f->curr_token_index) { - end = f->tokens[f->curr_token_index+1]; - } - return ast_bad_expr(f, f->curr_token, end); + return ast_bad_expr(f, f->curr_token, f->curr_token); } gb_internal Ast *convert_stmt_to_body(AstFile *f, Ast *stmt) { @@ -5471,7 +5513,7 @@ if_else_chain:; break; default: syntax_error(f->curr_token, "Expected if statement block statement"); - else_stmt = ast_bad_stmt(f, f->curr_token, f->tokens[f->curr_token_index+1]); + else_stmt = ast_bad_stmt(f, f->curr_token, peek_raw_token(f)); break; } } @@ -5529,7 +5571,7 @@ gb_internal Ast *parse_when_stmt(AstFile *f) { } break; default: syntax_error(f->curr_token, "Expected when statement block statement"); - else_stmt = ast_bad_stmt(f, f->curr_token, f->tokens[f->curr_token_index+1]); + else_stmt = ast_bad_stmt(f, f->curr_token, peek_raw_token(f)); break; } } @@ -6357,7 +6399,7 @@ gb_internal Array parse_stmt_list(AstFile *f) { } -gb_internal ParseFileError init_ast_file(AstFile *f, String const &fullpath, TokenPos *err_pos) { +gb_internal ParseFileError init_ast_file(AstFile *f, String const &fullpath) { GB_ASSERT(f != nullptr); f->fullpath = string_trim_whitespace(fullpath); // Just in case f->filename = remove_directory_from_path(f->fullpath); @@ -6387,51 +6429,23 @@ gb_internal ParseFileError init_ast_file(AstFile *f, String const &fullpath, Tok } - isize file_size = f->tokenizer.end - f->tokenizer.start; - - // NOTE(bill): Determine allocation size required for tokens - isize token_cap = file_size/3ll; - isize pow2_cap = gb_max(cast(isize)prev_pow2(cast(i64)token_cap)/2, 16); - token_cap = ((token_cap + pow2_cap-1)/pow2_cap) * pow2_cap; - - isize init_token_cap = gb_max(token_cap, 16); - array_init(&f->tokens, ast_allocator(f), 0, gb_max(init_token_cap, 16)); + array_init(&f->lookahead, ast_allocator(f), 0, 4); + array_init(&f->token_edits, ast_allocator(f), 0, 0); + array_init(&f->comments, ast_allocator(f), 0, 0); + array_init(&f->imports, ast_allocator(f), 0, 0); if (err == TokenizerInit_Empty) { Token token = {Token_EOF}; token.pos.file_id = f->id; token.pos.line = 1; token.pos.column = 1; - array_add(&f->tokens, token); + f->token_count = 1; + f->first_token = f->prev_token = f->curr_token = token; return ParseFile_None; } - u64 start = time_stamp_time_now(); - - for (;;) { - Token *token = array_add_and_get(&f->tokens); - tokenizer_get_token(&f->tokenizer, token); - if (token->kind == Token_Invalid) { - err_pos->line = token->pos.line; - err_pos->column = token->pos.column; - return ParseFile_InvalidToken; - } - - if (token->kind == Token_EOF) { - break; - } - } - - u64 end = time_stamp_time_now(); - f->time_to_tokenize = cast(f64)(end-start)/cast(f64)time_stamp__freq(); - - f->prev_token_index = 0; f->curr_token_index = 0; - f->prev_token = f->tokens[f->prev_token_index]; - f->curr_token = f->tokens[f->curr_token_index]; - - array_init(&f->comments, ast_allocator(f), 0, 0); - array_init(&f->imports, ast_allocator(f), 0, 0); + f->first_token = f->prev_token = f->curr_token = tokenize_next(f); f->curr_proc = nullptr; @@ -6440,7 +6454,8 @@ gb_internal ParseFileError init_ast_file(AstFile *f, String const &fullpath, Tok gb_internal void destroy_ast_file(AstFile *f) { GB_ASSERT(f != nullptr); - array_free(&f->tokens); + array_free(&f->lookahead); + array_free(&f->token_edits); array_free(&f->comments); array_free(&f->imports); } @@ -7473,11 +7488,8 @@ gb_internal bool parse_file_tag(const String &lc, const Token &tok, AstFile *f) } gb_internal bool parse_file(Parser *p, AstFile *f) { - if (f->tokens.count == 0) { - return true; - } - if (f->tokens.count > 0 && f->tokens[0].kind == Token_EOF) { - return true; + if (f->first_token.kind == Token_EOF) { + return f->invalid_token_pos.line == 0; } u64 start = time_stamp_time_now(); @@ -7604,9 +7616,7 @@ gb_internal ParseFileError process_imported_file(Parser *p, ImportedFile importe AstFile *file = permanent_alloc_item(); file->pkg = pkg; file->id = cast(i32)(imported_file.index+1); - TokenPos err_pos = {0}; - ParseFileError err = init_ast_file(file, fi.fullpath, &err_pos); - err_pos.file_id = file->id; + ParseFileError err = init_ast_file(file, fi.fullpath); file->last_error = err; if (err != ParseFile_None) { @@ -7629,9 +7639,6 @@ gb_internal ParseFileError process_imported_file(Parser *p, ImportedFile importe case ParseFile_NotFound: syntax_error(pos, "Failed to parse file: %.*s; file cannot be found ('%.*s')", LIT(fi.name), LIT(fi.fullpath)); break; - case ParseFile_InvalidToken: - syntax_error(err_pos, "Failed to parse file: %.*s; invalid token found in file", LIT(fi.name)); - break; case ParseFile_EmptyFile: syntax_error(pos, "Failed to parse file: %.*s; file contains no tokens", LIT(fi.name)); break; @@ -7660,7 +7667,14 @@ gb_internal ParseFileError process_imported_file(Parser *p, ImportedFile importe } - if (parse_file(p, file)) { + bool parsed = parse_file(p, file); + if (file->invalid_token_pos.line != 0) { + end_error_mute(); + file->last_error = ParseFile_InvalidToken; + return ParseFile_InvalidToken; + } + + if (parsed) { MUTEX_GUARD_BLOCK(&pkg->files_mutex) { array_add(&pkg->files, file); } @@ -7669,7 +7683,7 @@ gb_internal ParseFileError process_imported_file(Parser *p, ImportedFile importe if (pkg->name.len == 0) { pkg->name = file->package_name; } else if (pkg->name != file->package_name) { - if (file->tokens.count > 0 && file->tokens[0].kind != Token_EOF) { + if (file->first_token.kind != Token_EOF) { Token tok = file->package_token; tok.pos.file_id = file->id; tok.pos.line = gb_max(tok.pos.line, 1); @@ -7683,7 +7697,7 @@ gb_internal ParseFileError process_imported_file(Parser *p, ImportedFile importe mutex_unlock(&pkg->name_mutex); p->total_line_count.fetch_add(file->tokenizer.line_count); - p->total_token_count.fetch_add(file->tokens.count); + p->total_token_count.fetch_add(file->token_count); } return ParseFile_None; diff --git a/src/parser.hpp b/src/parser.hpp index d1988f89b..1f5869883 100644 --- a/src/parser.hpp +++ b/src/parser.hpp @@ -118,11 +118,15 @@ struct AstFile { String directory; Tokenizer tokenizer; - Array tokens; + Array lookahead; // read by peeking, before the parser reaches them + isize lookahead_index; + isize token_count; isize curr_token_index; - isize prev_token_index; + Token first_token; Token curr_token; Token prev_token; // previous non-comment + TokenPos invalid_token_pos; + Array token_edits; // for `-strip-semicolon` Token package_token; String package_name; @@ -151,8 +155,7 @@ struct AstFile { Ast * curr_proc; isize error_count; ParseFileError last_error; - f64 time_to_tokenize; // seconds - f64 time_to_parse; // seconds + f64 time_to_parse; // seconds, including tokenizing CommentGroup *lead_comment; // Comment (block) before the decl CommentGroup *line_comment; // Comment after the semicolon From 70f67677767598685239c71a1f4c094e9ce06e35 Mon Sep 17 00:00:00 2001 From: gingerBill Date: Sat, 3 Oct 2026 16:15:59 +0100 Subject: [PATCH 177/215] Make `lb_map_set_proc_for_type` prefer to go through the runtime for unoptimized builds --- base/runtime/dynamic_map_internal.odin | 2 +- src/llvm_backend.cpp | 29 ++++++++++++++++---------- 2 files changed, 19 insertions(+), 12 deletions(-) diff --git a/base/runtime/dynamic_map_internal.odin b/base/runtime/dynamic_map_internal.odin index b7dc2e1b9..ed644e101 100644 --- a/base/runtime/dynamic_map_internal.odin +++ b/base/runtime/dynamic_map_internal.odin @@ -205,7 +205,7 @@ map_hash_is_empty :: #force_inline proc "contextless" (hash: Map_Hash) -> bool { } @(require_results) -map_hash_is_deleted :: #force_no_inline proc "contextless" (hash: Map_Hash) -> bool { +map_hash_is_deleted :: #force_inline proc "contextless" (hash: Map_Hash) -> bool { // The MSB indicates a tombstone return hash & TOMBSTONE_MASK != 0 } diff --git a/src/llvm_backend.cpp b/src/llvm_backend.cpp index 720e6fba8..17bfb4b0c 100644 --- a/src/llvm_backend.cpp +++ b/src/llvm_backend.cpp @@ -922,14 +922,12 @@ gb_internal lbValue lb_map_set_proc_for_type(lbModule *m, Type *type) { lbBlock *insert_block = lb_create_block(p, "insert"); lbBlock *check_has_grown_block = lb_create_block(p, "check-has-grown"); lbBlock *rehash_block = lb_create_block(p, "rehash"); - lbBlock *slot_block = lb_create_block(p, "slot"); - lbBlock *slot_loop_block = lb_create_block(p, "slot-loop"); - lbBlock *slot_used_block = lb_create_block(p, "slot-used"); - lbBlock *slot_probe_block = lb_create_block(p, "slot-probe"); - lbBlock *slot_next_block = lb_create_block(p, "slot-next"); - lbBlock *place_block = lb_create_block(p, "place"); - lbBlock *scan_block = lb_create_block(p, "scan"); - lbBlock *displace_block = lb_create_block(p, "displace"); + + // NOTE(bill): Unoptimized builds always insert through the runtime, keeping the code for each map type small + lbBlock *slot_block = nullptr; + if (build_context.optimization_level >= OptimizationLevel_Size) { + slot_block = lb_create_block(p, "slot"); + } lb_emit_if(p, lb_emit_comp_against_nil(p, Token_NotEq, found_ptr), found_block, check_grow_block); lb_start_block(p, found_block); @@ -961,7 +959,7 @@ gb_internal lbValue lb_map_set_proc_for_type(lbModule *m, Type *type) { lb_start_block(p, check_has_grown_block); - lb_emit_if(p, has_grown, rehash_block, slot_block); + lb_emit_if(p, has_grown, rehash_block, slot_block != nullptr ? slot_block : insert_block); lb_start_block(p, rehash_block); lbValue key = lb_emit_load(p, key_ptr); lbValue new_hash = lb_gen_map_key_hash(p, map_ptr, key, nullptr); @@ -970,8 +968,17 @@ gb_internal lbValue lb_map_set_proc_for_type(lbModule *m, Type *type) { lb_emit_jump(p, insert_block); } - lb_start_block(p, slot_block); - { + if (slot_block != nullptr) { + lbBlock *slot_loop_block = lb_create_block(p, "slot-loop"); + lbBlock *slot_used_block = lb_create_block(p, "slot-used"); + lbBlock *slot_probe_block = lb_create_block(p, "slot-probe"); + lbBlock *slot_next_block = lb_create_block(p, "slot-next"); + lbBlock *place_block = lb_create_block(p, "place"); + lbBlock *scan_block = lb_create_block(p, "scan"); + lbBlock *displace_block = lb_create_block(p, "displace"); + + lb_start_block(p, slot_block); + lbValue map = lb_emit_load(p, lb_emit_conv(p, map_ptr, t_raw_map_ptr)); lbMapKVH kvh = lb_map_kvh_data_static(p, type, map); lbValue h = lb_addr_load(p, hash_addr); From 3bd53e2a80c2ed728276b5696a9655ed0878f56c Mon Sep 17 00:00:00 2001 From: gingerBill Date: Sat, 3 Oct 2026 16:26:58 +0100 Subject: [PATCH 178/215] Improve the parsing for tokenizing + parsing speeds under `-show-more-timings -show-debug-messages` --- src/main.cpp | 164 +++++++++++++++++++++++++++++++++++++----------- src/parser.cpp | 28 ++++++++- src/parser.hpp | 10 ++- src/timings.cpp | 35 +++++++++++ 4 files changed, 197 insertions(+), 40 deletions(-) diff --git a/src/main.cpp b/src/main.cpp index b541dc0aa..29fcfc899 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -2383,6 +2383,132 @@ gb_internal void show_import_graph(Checker *c) { gb_printf("}\n\n"); } +gb_internal void add_time_to_tokenize_only(AstFile *f, f64 *time, u64 *cpu_time) { + isize size = f->tokenizer.end - f->tokenizer.start; + if (size <= 0) { + return; + } + Tokenizer t = {}; + t.curr_file_id = f->id; + init_tokenizer_with_data(&t, f->fullpath, f->tokenizer.start, size); + + u64 start = time_stamp_time_now(); + u64 cpu_start = thread_cpu_time_now(); + Token token = {}; + do { + tokenizer_get_token(&t, &token); + } while (token.kind != Token_EOF && token.kind != Token_Invalid); + *cpu_time += thread_cpu_time_now()-cpu_start; + *time += cast(f64)(time_stamp_time_now()-start)/cast(f64)time_stamp__freq(); +} + +gb_internal GB_COMPARE_PROC(file_cpu_time_to_parse_cmp) { + AstFile *x = *(AstFile **)a; + AstFile *y = *(AstFile **)b; + if (x->cpu_time_to_parse != y->cpu_time_to_parse) { + return x->cpu_time_to_parse > y->cpu_time_to_parse ? -1 : +1; + } + return string_compare(x->fullpath, y->fullpath); +} + +gb_internal void show_parse_timings(Parser *p, Timings *t) { + auto all_files = array_make(heap_allocator(), 0, p->packages.count*8); + defer (array_free(&all_files)); + for (AstPackage *pkg : p->packages) { + for (AstFile *file : pkg->files) { + array_add(&all_files, file); + } + } + + f64 cpu_freq = thread_cpu_time_freq(); + + isize tokens = p->total_token_count; + isize lines = p->total_line_count; + isize total_file_size = 0; + + f64 load_time = 0; + f64 load_cpu_time = 0; + f64 parse_time = 0; + f64 parse_cpu_time = 0; + f64 setup_time = 0; + f64 setup_cpu_time = 0; + f64 tokenize_time = 0; + u64 tokenize_cpu_ticks = 0; + + for (AstFile *file : all_files) { + total_file_size += file->tokenizer.end - file->tokenizer.start; + load_time += file->time_to_load; + parse_time += file->time_to_parse; + setup_time += file->time_to_setup_decls; + load_cpu_time += cast(f64)file->cpu_time_to_load/cpu_freq; + parse_cpu_time += cast(f64)file->cpu_time_to_parse/cpu_freq; + setup_cpu_time += cast(f64)file->cpu_time_to_setup_decls/cpu_freq; + + add_time_to_tokenize_only(file, &tokenize_time, &tokenize_cpu_ticks); + } + + f64 tokenize_cpu_time = cast(f64)tokenize_cpu_ticks/cpu_freq; + + f64 wall_time = 0; + for (TimeStamp const &s : t->sections) { + if (s.label == "parse files") { + wall_time = time_stamp_as_s(s, t->freq); + break; + } + } + + isize thread_count = gb_max(global_thread_pool.threads.count, 1); + f64 task_time = load_time + parse_time + setup_time; + f64 task_cpu_time = load_cpu_time + parse_cpu_time + setup_cpu_time; + f64 mib = cast(f64)total_file_size/(1024.0*1024.0); + + auto const &row = [&](char const *label, f64 time, f64 cpu_time, bool rates) { + gb_printf_err(" %s - %9.3f ms %9.3f ms", label, 1.0e3*time, 1.0e3*cpu_time); + if (rates) { + f64 lines_per_second = cast(f64)lines/cpu_time; + char const *loc = " LOC/s"; + if (lines_per_second >= 1.0e6) { + lines_per_second /= 1.0e6; + loc = " MLOC/s"; + } else if (lines_per_second >= 1.0e3) { + lines_per_second /= 1.0e3; + loc = " kLOC/s"; + } + gb_printf_err(" %7.3f us/token %7.3f us/line %8.2f MiB/s %7.2f%s", + 1.0e6*cpu_time/cast(f64)tokens, 1.0e6*cpu_time/cast(f64)lines, mib/cpu_time, lines_per_second, loc); + } + gb_printf_err("\n"); + }; + + gb_printf_err("Parsing (%td files, %td lines, %td tokens, %.2f MiB, %td threads)\n", all_files.count, lines, tokens, mib, thread_count); + gb_printf_err(" parse files - %9.3f ms (wall time)\n", 1.0e3*wall_time); + gb_printf_err(" wall time CPU time (rates from the CPU time)\n"); + row( "file tasks ", task_time, task_cpu_time, false); + row( " loading files ", load_time, load_cpu_time, false); + row( " tokenizing and parsing ", parse_time, parse_cpu_time, true); + row( " setting up decls and imports ", setup_time, setup_cpu_time, false); + row( "tokenizing alone, 1 thread ", tokenize_time, tokenize_cpu_time, true); + if (build_context.thread_count == 1) { + row( "parsing alone (estimated) ", parse_time-tokenize_time, parse_cpu_time-tokenize_cpu_time, true); + } else { + gb_printf_err(" parsing alone - estimated with -thread-count:1\n"); + } + gb_printf_err(" the file tasks kept the threads %.0f%% busy and %.0f%% of their time was spent running\n", + 100.0*task_time/(wall_time*cast(f64)thread_count), 100.0*task_cpu_time/task_time); + gb_printf_err("\n"); + + array_sort(all_files, file_cpu_time_to_parse_cmp); + gb_printf_err("Slowest files to tokenize and parse, by CPU time\n"); + for (isize i = 0; i < gb_min(all_files.count, 8); i++) { + AstFile *file = all_files[i]; + f64 cpu_time = cast(f64)file->cpu_time_to_parse/cpu_freq; + gb_printf_err(" %9.3f ms %9.3f ms (wall) %8td tokens %7.3f us/token %.*s\n", + 1.0e3*cpu_time, 1.0e3*file->time_to_parse, file->token_count, + 1.0e6*cpu_time/cast(f64)gb_max(file->token_count, 1), LIT(file->fullpath)); + } + gb_printf_err("\n"); +} + gb_internal void show_timings(Checker *c, Timings *t) { Parser *p = c->parser; isize lines = p->total_line_count; @@ -2390,11 +2516,9 @@ gb_internal void show_timings(Checker *c, Timings *t) { isize files = 0; isize packages = p->packages.count; isize total_file_size = 0; - f64 total_parsing_time = 0; for (AstPackage *pkg : p->packages) { files += pkg->files.count; for (AstFile *file : pkg->files) { - total_parsing_time += file->time_to_parse; total_file_size += file->tokenizer.end - file->tokenizer.start; } } @@ -2417,41 +2541,7 @@ gb_internal void show_timings(Checker *c, Timings *t) { gb_printf_err("Total File Size - %td\n", total_file_size); gb_printf_err("\n"); } - { - f64 time = total_parsing_time; - gb_printf_err("Tokenizing and Parsing Only\n"); - gb_printf_err("LOC/s - %.3f\n", cast(f64)lines/time); - gb_printf_err("us/LOC - %.3f\n", 1.0e6*time/cast(f64)lines); - gb_printf_err("Tokens/s - %.3f\n", cast(f64)tokens/time); - gb_printf_err("us/Token - %.3f\n", 1.0e6*time/cast(f64)tokens); - gb_printf_err("bytes/s - %.3f\n", cast(f64)total_file_size/time); - gb_printf_err("MiB/s - %.3f\n", cast(f64)(total_file_size/time)/(1024*1024)); - gb_printf_err("us/bytes - %.3f\n", 1.0e6*time/cast(f64)total_file_size); - - gb_printf_err("\n"); - } - { - TimeStamp ts = {}; - for (TimeStamp const &s : t->sections) { - if (s.label == "parse files") { - ts = s; - break; - } - } - GB_ASSERT(ts.label == "parse files"); - - f64 parse_time = time_stamp_as_s(ts, t->freq); - gb_printf_err("Parse pass\n"); - gb_printf_err("LOC/s - %.3f\n", cast(f64)lines/parse_time); - gb_printf_err("us/LOC - %.3f\n", 1.0e6*parse_time/cast(f64)lines); - gb_printf_err("Tokens/s - %.3f\n", cast(f64)tokens/parse_time); - gb_printf_err("us/Token - %.3f\n", 1.0e6*parse_time/cast(f64)tokens); - gb_printf_err("bytes/s - %.3f\n", cast(f64)total_file_size/parse_time); - gb_printf_err("MiB/s - %.3f\n", cast(f64)(total_file_size/parse_time)/(1024*1024)); - gb_printf_err("us/bytes - %.3f\n", 1.0e6*parse_time/cast(f64)total_file_size); - - gb_printf_err("\n"); - } + show_parse_timings(p, t); { TimeStamp ts = {}; TimeStamp ts_end = {}; diff --git a/src/parser.cpp b/src/parser.cpp index 31561f39c..5b8329ba6 100644 --- a/src/parser.cpp +++ b/src/parser.cpp @@ -6399,6 +6399,15 @@ gb_internal Array parse_stmt_list(AstFile *f) { } +// Only the report of `-show-more-timings -show-debug-messages` uses a file's CPU time, +// and getting a thread's CPU time is a system call +gb_internal u64 parse_thread_cpu_time_now(void) { + if (build_context.show_debug_messages && build_context.show_more_timings) { + return thread_cpu_time_now(); + } + return 0; +} + gb_internal ParseFileError init_ast_file(AstFile *f, String const &fullpath) { GB_ASSERT(f != nullptr); f->fullpath = string_trim_whitespace(fullpath); // Just in case @@ -6412,7 +6421,11 @@ gb_internal ParseFileError init_ast_file(AstFile *f, String const &fullpath) { gb_zero_item(&f->tokenizer); f->tokenizer.curr_file_id = f->id; + u64 load_start = time_stamp_time_now(); + u64 load_cpu_start = parse_thread_cpu_time_now(); TokenizerInitError err = init_tokenizer_from_fullpath(&f->tokenizer, f->fullpath, build_context.copy_file_contents); + f->cpu_time_to_load = parse_thread_cpu_time_now()-load_cpu_start; + f->time_to_load = cast(f64)(time_stamp_time_now()-load_start)/cast(f64)time_stamp__freq(); if (err != TokenizerInit_None) { switch (err) { case TokenizerInit_Empty: @@ -7493,6 +7506,9 @@ gb_internal bool parse_file(Parser *p, AstFile *f) { } u64 start = time_stamp_time_now(); + u64 cpu_start = parse_thread_cpu_time_now(); + u64 setup_start = 0; + u64 setup_cpu_start = 0; String filepath = f->tokenizer.fullpath; String base_dir = dir_from_path(filepath); @@ -7593,11 +7609,19 @@ gb_internal bool parse_file(Parser *p, AstFile *f) { f->decls = slice_from_array(decls); + setup_start = time_stamp_time_now(); + setup_cpu_start = parse_thread_cpu_time_now(); parse_setup_file_decls(p, f, base_dir, f->decls); } - u64 end = time_stamp_time_now(); - f->time_to_parse = cast(f64)(end-start)/cast(f64)time_stamp__freq(); + u64 end = time_stamp_time_now(); + u64 cpu_end = parse_thread_cpu_time_now(); + u64 setup_ticks = setup_start != 0 ? end-setup_start : 0; + u64 setup_cpu_ticks = setup_cpu_start != 0 ? cpu_end-setup_cpu_start : 0; + f->time_to_parse = cast(f64)(end-start-setup_ticks)/cast(f64)time_stamp__freq(); + f->time_to_setup_decls = cast(f64)setup_ticks/cast(f64)time_stamp__freq(); + f->cpu_time_to_parse = cpu_end-cpu_start-setup_cpu_ticks; + f->cpu_time_to_setup_decls = setup_cpu_ticks; for (int i = 0; i < AstDelayQueue_COUNT; i++) { array_init(f->delayed_decls_queues+i, ast_allocator(f), 0, f->delayed_decl_count); diff --git a/src/parser.hpp b/src/parser.hpp index 1f5869883..65d0cde3a 100644 --- a/src/parser.hpp +++ b/src/parser.hpp @@ -155,7 +155,6 @@ struct AstFile { Ast * curr_proc; isize error_count; ParseFileError last_error; - f64 time_to_parse; // seconds, including tokenizing CommentGroup *lead_comment; // Comment (block) before the decl CommentGroup *line_comment; // Comment after the semicolon @@ -173,6 +172,15 @@ struct AstFile { struct LLVMOpaqueMetadata *llvm_metadata; struct LLVMOpaqueMetadata *llvm_metadata_scope; + + //// Profiling ///// + + f64 time_to_load; // seconds + f64 time_to_parse; // seconds, tokenizing included, setting up the decls excluded + f64 time_to_setup_decls; // seconds, mostly finding and adding the imported packages + u64 cpu_time_to_load; + u64 cpu_time_to_parse; + u64 cpu_time_to_setup_decls; }; enum AstForeignFileKind { diff --git a/src/timings.cpp b/src/timings.cpp index f6e86867f..f1d6e5eb3 100644 --- a/src/timings.cpp +++ b/src/timings.cpp @@ -32,6 +32,7 @@ gb_internal u64 win32_time_stamp__freq(void) { #elif defined(GB_SYSTEM_OSX) #include +#include gb_internal mach_timebase_info_data_t osx_init_timebase_info(void) { mach_timebase_info_data_t data; @@ -105,6 +106,40 @@ gb_internal u64 time_stamp__freq(void) { #endif } +gb_internal u64 thread_cpu_time_now(void) { +#if defined(GB_SYSTEM_WINDOWS) + ULONG64 cycles = 0; + QueryThreadCycleTime(GetCurrentThread(), &cycles); + return cycles; +#else + struct timespec ts; + clock_gettime(CLOCK_THREAD_CPUTIME_ID, &ts); + return (cast(u64)ts.tv_sec * 1000000000ull) + cast(u64)ts.tv_nsec; +#endif +} + +gb_internal f64 thread_cpu_time_freq(void) { +#if defined(GB_SYSTEM_WINDOWS) + gb_local_persist f64 freq = 0; + if (freq == 0) { + for (isize i = 0; i < 5; i++) { + u64 start = time_stamp_time_now(); + u64 start_cycles = thread_cpu_time_now(); + u64 end = start; + while (end-start < time_stamp__freq()/100) { + end = time_stamp_time_now(); + } + u64 end_cycles = thread_cpu_time_now(); + f64 measured = cast(f64)(end_cycles-start_cycles) * cast(f64)time_stamp__freq() / cast(f64)(end-start); + freq = gb_max(freq, measured); + } + } + return freq; +#else + return 1.0e9; +#endif +} + gb_internal TimeStamp make_time_stamp(String const &label) { TimeStamp ts = {0}; ts.start = time_stamp_time_now(); From 93e160582ce774ca4e4770e0590e9a6d24e39874 Mon Sep 17 00:00:00 2001 From: gingerBill Date: Sat, 3 Oct 2026 16:41:48 +0100 Subject: [PATCH 179/215] Pass a copy of a value within a packed struct to a procedure by reference when its address is not known to be aligned to its type, and lower the alignment of loads and stores to that known from the GEPs leading to their address --- src/llvm_backend_general.cpp | 92 ++++++++++++++++++- src/llvm_backend_utility.cpp | 12 ++- tests/issues/run.bat | 1 + tests/issues/run.sh | 1 + .../test_issue_packed_field_by_value.odin | 31 +++++++ 5 files changed, 132 insertions(+), 5 deletions(-) create mode 100644 tests/issues/test_issue_packed_field_by_value.odin diff --git a/src/llvm_backend_general.cpp b/src/llvm_backend_general.cpp index 9687fd49c..d54eeee0e 100644 --- a/src/llvm_backend_general.cpp +++ b/src/llvm_backend_general.cpp @@ -1120,6 +1120,86 @@ gb_internal bool lb_try_vector_cast(lbModule *m, lbValue ptr, LLVMTypeRef *vecto return false; } +gb_internal u64 lb_gcd_u64(u64 a, u64 b) { + while (b != 0) { + u64 t = a % b; + a = b; + b = t; + } + return a; +} + +gb_internal u64 lb_known_address_alignment(lbModule *m, LLVMValueRef ptr, u64 assumed) { + // NOTE(bill): The alignment an address is known to have from the GEPs leading to it: within a local or a global, that + // of its offset from it, and none beyond a field of a packed struct, or that a struct caps its fields to, as marked on + // the GEP of the field. Of an address within anything else, it is `assumed`, i.e. that of the type it points to. + + LLVMTargetDataRef td = LLVMGetModuleDataLayout(m->mod); + u64 offsets = 0; + for (isize depth = 0; ptr != nullptr && depth < 64; depth++) { + if (LLVMIsAAllocaInst(ptr) || LLVMIsAGlobalVariable(ptr)) { + u64 base = LLVMGetAlignment(ptr); + if (base == 0) { + base = LLVMABIAlignmentOfType(td, LLVMIsAAllocaInst(ptr) ? LLVMGetAllocatedType(ptr) : LLVMGlobalGetValueType(ptr)); + } + return offsets ? lb_gcd_u64(base, offsets) : base; + } + + bool is_instruction = LLVMIsAGetElementPtrInst(ptr) != nullptr; + if (!is_instruction && !(LLVMIsAConstantExpr(ptr) && LLVMGetConstOpcode(ptr) == LLVMGetElementPtr)) { + break; + } + if (is_instruction) { + if (lb_get_metadata_custom_u64(m, ptr, ODIN_METADATA_IS_PACKED)) { + return 1; + } + u64 max_align = lb_get_metadata_custom_u64(m, ptr, ODIN_METADATA_MAX_ALIGN); + if (max_align != 0) { + assumed = gb_min(assumed, max_align); + } + } + + LLVMTypeRef t = LLVMGetGEPSourceElementType(ptr); + unsigned index_count = LLVMGetNumIndices(ptr); + for (unsigned i = 0; i < index_count; i++) { + LLVMValueRef index = LLVMGetOperand(ptr, i+1); + u64 stride = 0; + if (i == 0) { + stride = LLVMABISizeOfType(td, t); + } else if (LLVMGetTypeKind(t) == LLVMStructTypeKind) { + if (!LLVMIsAConstantInt(index)) { + return 1; + } + unsigned field = cast(unsigned)LLVMConstIntGetZExtValue(index); + offsets = lb_gcd_u64(offsets, LLVMOffsetOfElement(td, t, field)); + t = LLVMStructGetTypeAtIndex(t, field); + continue; + } else if (LLVMGetTypeKind(t) == LLVMArrayTypeKind || LLVMGetTypeKind(t) == LLVMVectorTypeKind) { + t = LLVMGetElementType(t); + stride = LLVMABISizeOfType(td, t); + } else { + return 1; + } + if (LLVMIsAConstantInt(index)) { + i64 k = LLVMConstIntGetSExtValue(index); + offsets = lb_gcd_u64(offsets, cast(u64)(k < 0 ? -k : k) * stride); + } else { + offsets = lb_gcd_u64(offsets, stride); + } + } + ptr = LLVMGetOperand(ptr, 0); + } + return offsets ? lb_gcd_u64(assumed, offsets) : assumed; +} + +gb_internal void lb_lower_store_alignment_to_known(lbProcedure *p, LLVMValueRef store, LLVMValueRef ptr) { + u64 align = LLVMGetAlignment(store); + u64 known = lb_known_address_alignment(p->module, ptr, align); + if (known < align) { + LLVMSetAlignment(store, cast(unsigned)known); + } +} + gb_internal LLVMValueRef OdinLLVMBuildLoad(lbProcedure *p, LLVMTypeRef type, LLVMValueRef value) { LLVMValueRef result = LLVMBuildLoad2(p->builder, type, value, ""); @@ -1143,6 +1223,12 @@ gb_internal LLVMValueRef OdinLLVMBuildLoad(lbProcedure *p, LLVMTypeRef type, LLV LLVMSetAlignment(result, (unsigned int)align); } + u64 align = LLVMGetAlignment(result); + u64 known = lb_known_address_alignment(p->module, value, align); + if (known < align) { + LLVMSetAlignment(result, cast(unsigned)known); + } + return result; } @@ -1503,7 +1589,8 @@ gb_internal void lb_emit_store(lbProcedure *p, lbValue ptr, lbValue value) { } else if (is_type_bit_set(a)) { lb_mem_zero_ptr(p, ptr.value, a, 1); } else if (lb_sizeof(src_t) <= lb_max_zero_init_size()) { - LLVMBuildStore(p->builder, LLVMConstNull(src_t), ptr.value); + LLVMValueRef store = LLVMBuildStore(p->builder, LLVMConstNull(src_t), ptr.value); + lb_lower_store_alignment_to_known(p, store, ptr.value); } else { lb_mem_zero_ptr(p, ptr.value, a, 1); } @@ -1567,6 +1654,9 @@ gb_internal void lb_emit_store(lbProcedure *p, lbValue ptr, lbValue value) { instr = LLVMBuildStore(p->builder, value.value, ptr.value); } + if (instr != nullptr) { + lb_lower_store_alignment_to_known(p, instr, ptr.value); + } // LLVMSetVolatile(instr, p->in_multi_assignment); } diff --git a/src/llvm_backend_utility.cpp b/src/llvm_backend_utility.cpp index 430677aa3..3a9a74415 100644 --- a/src/llvm_backend_utility.cpp +++ b/src/llvm_backend_utility.cpp @@ -995,10 +995,14 @@ gb_internal lbAddr lb_find_or_generate_context_ptr(lbProcedure *p) { gb_internal lbValue lb_address_from_load_or_generate_local(lbProcedure *p, lbValue value) { if (!p->in_multi_assignment && LLVMIsALoadInst(value.value)) { - lbValue res = {}; - res.value = LLVMGetOperand(value.value, 0); - res.type = alloc_type_pointer(value.type); - return res; + LLVMValueRef ptr = LLVMGetOperand(value.value, 0); + u64 align = cast(u64)type_align_of(value.type); + if (lb_known_address_alignment(p->module, ptr, align) >= align) { + lbValue res = {}; + res.value = ptr; + res.type = alloc_type_pointer(value.type); + return res; + } } GB_ASSERT(is_type_typed(value.type)); diff --git a/tests/issues/run.bat b/tests/issues/run.bat index 5c8dcb3fc..51c4a3661 100644 --- a/tests/issues/run.bat +++ b/tests/issues/run.bat @@ -89,6 +89,7 @@ clang -c ..\test_issue_sysv_abi.c -o test_issue_sysv_abi_c.o || exit /b ..\..\..\odin check ..\test_issue_7708_mismatch.odin %COMMON% 2>&1 | find /c "Error:" | findstr /x "2" || exit /b ..\..\..\odin test ..\test_issue_7700.odin %COMMON% || exit /b ..\..\..\odin test ..\test_issue_procedure_of_specialized.odin %COMMON% || exit /b +..\..\..\odin test ..\test_issue_packed_field_by_value.odin %COMMON% || exit /b ..\..\..\odin test ..\test_issue_7587.odin %COMMON% || exit /b ..\..\..\odin run ..\test_issue_7596.odin %COMMON% || exit /b diff --git a/tests/issues/run.sh b/tests/issues/run.sh index 7d22af3e7..d85867c7b 100755 --- a/tests/issues/run.sh +++ b/tests/issues/run.sh @@ -115,6 +115,7 @@ else fi $ODIN test ../test_issue_7700.odin $COMMON $ODIN test ../test_issue_procedure_of_specialized.odin $COMMON +$ODIN test ../test_issue_packed_field_by_value.odin $COMMON $ODIN test ../test_issue_7587.odin $COMMON $ODIN run ../test_issue_7596.odin $COMMON $ODIN test ../test_issue_7421.odin $COMMON diff --git a/tests/issues/test_issue_packed_field_by_value.odin b/tests/issues/test_issue_packed_field_by_value.odin new file mode 100644 index 000000000..247f250a9 --- /dev/null +++ b/tests/issues/test_issue_packed_field_by_value.odin @@ -0,0 +1,31 @@ +// A value within a packed struct, passed to a procedure by reference, is passed by an address as aligned as its type +package test_issues + +import "core:testing" + +Packed_Field_S :: struct { x: union { int, string }, y: u128 } +Packed_Field_P :: struct #packed { pad: u8, s: Packed_Field_S, arr: [2]Packed_Field_S } + +// the address a value parameter is passed by +packed_field_address :: proc(s: Packed_Field_S) -> uintptr { + a: any = s + return uintptr(a.data) +} + +packed_field_global: Packed_Field_P + +@(test) +test_packed_field_by_value :: proc(t: ^testing.T) { + p := Packed_Field_P{s = {x = 1, y = 2}, arr = {{x = 3}, {x = "four", y = 5}}} + packed_field_global = p + + A :: align_of(Packed_Field_S) + testing.expect_value(t, packed_field_address(p.s) % A, 0) + testing.expect_value(t, packed_field_address(p.arr[1]) % A, 0) + testing.expect_value(t, packed_field_address(packed_field_global.s) % A, 0) + testing.expect_value(t, packed_field_address(packed_field_global.arr[1]) % A, 0) + + testing.expect_value(t, p.s, Packed_Field_S{x = 1, y = 2}) + testing.expect_value(t, p.arr[1], Packed_Field_S{x = "four", y = 5}) + testing.expect_value(t, packed_field_global.arr[0], Packed_Field_S{x = 3}) +} From 85f02a8304cee96cb2959584b30c2224ce951be9 Mon Sep 17 00:00:00 2001 From: gingerBill Date: Sat, 3 Oct 2026 16:50:33 +0100 Subject: [PATCH 180/215] Hash `string` and `cstring` map keys a word at a time with `default_hasher_fixed` --- base/runtime/dynamic_map_internal.odin | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/base/runtime/dynamic_map_internal.odin b/base/runtime/dynamic_map_internal.odin index ed644e101..33078c121 100644 --- a/base/runtime/dynamic_map_internal.odin +++ b/base/runtime/dynamic_map_internal.odin @@ -1025,18 +1025,17 @@ default_hasher_fixed :: #force_inline proc "contextless" (data: rawptr, seed: ui default_hasher_string :: proc "contextless" (data: rawptr, seed: uintptr) -> uintptr { str := (^[]byte)(data) - return default_hasher(raw_data(str^), seed, len(str)) + return default_hasher_fixed(raw_data(str^), seed, len(str)) } default_hasher_cstring :: proc "contextless" (data: rawptr, seed: uintptr) -> uintptr { - h := u64(seed) + INITIAL_HASH_SEED - if ptr := (^[^]byte)(data)^; ptr != nil { - for ptr[0] != 0 { - h = (h ~ u64(ptr[0])) * 0x100000001b3 - ptr = ptr[1:] + ptr := (^[^]byte)(data)^ + n := 0 + if ptr != nil { + for ptr[n] != 0 { + n += 1 } } - h &= HASH_MASK - return uintptr(h) | uintptr(uintptr(h) == 0) + return default_hasher_fixed(ptr, seed, n) } default_hasher_f64 :: proc "contextless" (f: f64, seed: uintptr) -> uintptr { From 1ad14bb82452d0c273f2647f7a5f37175f2a9d48 Mon Sep 17 00:00:00 2001 From: gingerBill Date: Sat, 3 Oct 2026 17:06:42 +0100 Subject: [PATCH 181/215] Change how a map gets seeded with a folded multiply of the address as the seed instead --- base/runtime/dynamic_map_internal.odin | 18 +++++++----------- 1 file changed, 7 insertions(+), 11 deletions(-) diff --git a/base/runtime/dynamic_map_internal.odin b/base/runtime/dynamic_map_internal.odin index 33078c121..bd9c83f90 100644 --- a/base/runtime/dynamic_map_internal.odin +++ b/base/runtime/dynamic_map_internal.odin @@ -220,19 +220,14 @@ map_seed :: #force_inline proc "contextless" (m: Raw_Map) -> uintptr { return map_seed_from_map_data(map_data(m)) } -// splitmix for uintptr @(require_results) map_seed_from_map_data :: #force_inline proc "contextless" (data: uintptr) -> uintptr { when size_of(uintptr) == size_of(u64) { - mix := data + 0x9e3779b97f4a7c15 - mix = (mix ~ (mix >> 30)) * 0xbf58476d1ce4e5b9 - mix = (mix ~ (mix >> 27)) * 0x94d049bb133111eb - return mix ~ (mix >> 31) + p := u128(data) * 0x94d049bb133111eb + return uintptr(p) ~ uintptr(p >> 64) } else { - mix := data + 0x9e3779b9 - mix = (mix ~ (mix >> 16)) * 0x21f0aaad - mix = (mix ~ (mix >> 15)) * 0x735a2d97 - return mix ~ (mix >> 15) + p := u64(data) * 0x735a2d97 + return uintptr(p) ~ uintptr(p >> 32) } } @@ -1001,7 +996,7 @@ default_hasher_fixed :: #force_inline proc "contextless" (data: rawptr, seed: ui W :: size_of(uintptr) p := uintptr(data) - h := seed ~ uintptr(N) + h := uintptr(N) switch { case N >= W: for i := 0; i+W <= N; i += W { @@ -1018,7 +1013,8 @@ default_hasher_fixed :: #force_inline proc "contextless" (data: rawptr, seed: ui b := ([^]u8)(p) h = hash_fold(h ~ (uintptr(b[0]) | uintptr(b[N/2]) << 8 | uintptr(b[N-1]) << 16), HASH_K0) } - h = hash_fold(h, HASH_K1) + // the seed goes in after the key is mixed, so no key pattern can line up with the difference between two maps' seeds + h = hash_fold(h ~ seed, HASH_K1) h &= HASH_MASK return h | uintptr(h == 0) } From 2a57037287dcfea3174705fe7baf32f7ae2867fe Mon Sep 17 00:00:00 2001 From: gingerBill Date: Sat, 3 Oct 2026 17:13:31 +0100 Subject: [PATCH 182/215] Add `map_erase_static` and use when compiling for optimizations --- base/runtime/core_builtin.odin | 6 ++- base/runtime/dynamic_map_internal.odin | 67 ++++++++++++++++++++------ 2 files changed, 57 insertions(+), 16 deletions(-) diff --git a/base/runtime/core_builtin.odin b/base/runtime/core_builtin.odin index df8a36ff6..0deafea96 100644 --- a/base/runtime/core_builtin.odin +++ b/base/runtime/core_builtin.odin @@ -718,7 +718,11 @@ when MAP_ENABLED { delete_key :: proc(m: ^$T/map[$K]$V, key: K) -> (deleted_key: K, deleted_value: V) { if m != nil { key := key - old_k, old_v, ok := map_erase_dynamic((^Raw_Map)(m), map_info(T), uintptr(&key)) + when ODIN_OPTIMIZATION_MODE >= .Size { + old_k, old_v, ok := map_erase_static(m, &key) + } else { + old_k, old_v, ok := map_erase_dynamic((^Raw_Map)(m), map_info(T), uintptr(&key)) + } if ok { deleted_key = (^K)(old_k)^ deleted_value = (^V)(old_v)^ diff --git a/base/runtime/dynamic_map_internal.odin b/base/runtime/dynamic_map_internal.odin index bd9c83f90..ca6d4eb11 100644 --- a/base/runtime/dynamic_map_internal.odin +++ b/base/runtime/dynamic_map_internal.odin @@ -689,6 +689,33 @@ map_lookup_dynamic :: #force_no_inline proc "contextless" (m: Raw_Map, #no_alias d += 1 } } + +@(require_results) +map_lookup_static :: #force_inline proc "contextless" (m: $T/map[$K]$V, key: ^K) -> (index: uintptr, ok: bool) { + rm := transmute(Raw_Map)m + if rm.len == 0 { + return + } + info := intrinsics.type_map_info(T) + h := info.key_hasher(key, map_seed(rm)) + pos := map_desired_position(rm, h) + distance := uintptr(0) + mask := (uintptr(1) << map_log2_cap(rm)) - 1 + ks, _, hs := map_kvh_data_static(m) + for { + element_hash := hs[pos] + if map_hash_is_empty(element_hash) { + return + } else if distance > map_probe_distance(rm, element_hash, pos) { + return + } else if element_hash == h && info.key_equal(key, rawptr(map_cell_index_static(ks, pos))) { + return pos, true + } + pos = (pos + 1) & mask + distance += 1 + } +} + @(require_results) map_exists_dynamic :: #force_no_inline proc "contextless" (m: Raw_Map, #no_alias info: ^Map_Info, k: uintptr) -> (ok: bool) { if map_len(m) == 0 { @@ -719,28 +746,38 @@ map_exists_dynamic :: #force_no_inline proc "contextless" (m: Raw_Map, #no_alias map_erase_dynamic :: #force_no_inline proc "contextless" (#no_alias m: ^Raw_Map, #no_alias info: ^Map_Info, k: uintptr) -> (old_k, old_v: uintptr, ok: bool) { index := map_lookup_dynamic(m^, info, k) or_return ks, vs, hs, _, _ := map_kvh_data_dynamic(m^, info) - hs[index] |= TOMBSTONE_MASK old_k = map_cell_index_dynamic(ks, info.ks, index) old_v = map_cell_index_dynamic(vs, info.vs, index) m.len -= 1 ok = true - - mask := (uintptr(1)< (old_k, old_v: uintptr, ok: bool) { + index := map_lookup_static(m^, key) or_return + ks, vs, hs := map_kvh_data_static(m^) + old_k = uintptr(map_cell_index_static(ks, index)) + old_v = uintptr(map_cell_index_static(vs, index)) + (^Raw_Map)(m).len -= 1 + ok = true + map_erase_slot((^Raw_Map)(m)^, hs, index) + return +} + +map_erase_slot :: #force_inline proc "contextless" (m: Raw_Map, hs: [^]Map_Hash, index: uintptr) { + mask := (uintptr(1)< Date: Sat, 3 Oct 2026 17:18:38 +0100 Subject: [PATCH 183/215] Inline the ASCII paths of `advance_to_next_rune` --- src/tokenizer.cpp | 28 ++++++++++++++++++++-------- src/unicode.cpp | 34 ++++++++++++++-------------------- 2 files changed, 34 insertions(+), 28 deletions(-) diff --git a/src/tokenizer.cpp b/src/tokenizer.cpp index 84d4d3041..d3bf23519 100644 --- a/src/tokenizer.cpp +++ b/src/tokenizer.cpp @@ -348,18 +348,14 @@ gb_internal void tokenizer_err(Tokenizer *t, TokenPos const &pos, char const *ms t->error_count++; } -gb_internal void advance_to_next_rune(Tokenizer *t) { - if (t->curr_rune == '\n') { - t->column_minus_one = -1; - t->line_count++; - } +gb_internal void advance_to_next_rune_slow(Tokenizer *t) { if (t->read_curr < t->end) { t->curr = t->read_curr; Rune rune = *t->read_curr; if (rune == 0) { tokenizer_err(t, "Illegal character NUL"); t->read_curr++; - } else if (rune & 0x80) { // not ASCII + } else { // not ASCII isize width = utf8_decode(t->read_curr, t->end-t->read_curr, &rune); t->read_curr += width; if (rune == GB_RUNE_INVALID && width == 1) { @@ -367,8 +363,6 @@ gb_internal void advance_to_next_rune(Tokenizer *t) { } else if (rune == GB_RUNE_BOM && t->curr-t->start > 0){ tokenizer_err(t, "Illegal byte order mark"); } - } else { - t->read_curr++; } t->curr_rune = rune; t->column_minus_one++; @@ -378,6 +372,24 @@ gb_internal void advance_to_next_rune(Tokenizer *t) { } } +gb_internal gb_inline void advance_to_next_rune(Tokenizer *t) { + if (t->curr_rune == '\n') { + t->column_minus_one = -1; + t->line_count++; + } + if (t->read_curr < t->end) { + u8 c = *t->read_curr; + if (c != 0 && c < 0x80) { + t->curr = t->read_curr; + t->read_curr++; + t->curr_rune = c; + t->column_minus_one++; + return; + } + } + advance_to_next_rune_slow(t); +} + gb_internal void init_tokenizer_with_data(Tokenizer *t, String const &fullpath, void const *data, isize size) { t->fullpath = fullpath; t->column_minus_one = -1; diff --git a/src/unicode.cpp b/src/unicode.cpp index b38c6d601..98fa27b1c 100644 --- a/src/unicode.cpp +++ b/src/unicode.cpp @@ -12,13 +12,7 @@ extern "C" { #endif -gb_internal bool rune_is_letter(Rune r) { - if (r < 0x80) { - if (r == '_') { - return true; - } - return ((cast(u32)r | 0x20) - 0x61) < 26; - } +gb_internal bool rune_is_letter_non_ascii(Rune r) { switch (utf8proc_category(r)) { case UTF8PROC_CATEGORY_LU: case UTF8PROC_CATEGORY_LL: @@ -30,14 +24,24 @@ gb_internal bool rune_is_letter(Rune r) { return false; } -gb_internal bool rune_is_digit(Rune r) { +gb_internal gb_inline bool rune_is_letter(Rune r) { + if (r < 0x80) { + if (r == '_') { + return true; + } + return ((cast(u32)r | 0x20) - 0x61) < 26; + } + return rune_is_letter_non_ascii(r); +} + +gb_internal gb_inline bool rune_is_digit(Rune r) { if (r < 0x80) { return (cast(u32)r - '0') < 10; } return utf8proc_category(r) == UTF8PROC_CATEGORY_ND; } -gb_internal bool rune_is_letter_or_digit(Rune r) { +gb_internal gb_inline bool rune_is_letter_or_digit(Rune r) { if (r < 0x80) { if (r == '_') { return true; @@ -47,17 +51,7 @@ gb_internal bool rune_is_letter_or_digit(Rune r) { } return (cast(u32)r - '0') < 10; } - switch (utf8proc_category(r)) { - case UTF8PROC_CATEGORY_LU: - case UTF8PROC_CATEGORY_LL: - case UTF8PROC_CATEGORY_LT: - case UTF8PROC_CATEGORY_LM: - case UTF8PROC_CATEGORY_LO: - return true; - case UTF8PROC_CATEGORY_ND: - return true; - } - return false; + return rune_is_letter_non_ascii(r) || utf8proc_category(r) == UTF8PROC_CATEGORY_ND; } gb_internal bool rune_is_whitespace(Rune r) { From 9187b7acfcb7e7ec2189eb71cca74da3dc82fd87 Mon Sep 17 00:00:00 2001 From: gingerBill Date: Sat, 3 Oct 2026 17:34:16 +0100 Subject: [PATCH 184/215] Remove `map_cell_index_dynamic_const`; Re-insert entries directly when growing/shrinking a `map` --- base/runtime/dynamic_map_internal.odin | 109 +++++++++++-------------- 1 file changed, 47 insertions(+), 62 deletions(-) diff --git a/base/runtime/dynamic_map_internal.odin b/base/runtime/dynamic_map_internal.odin index ca6d4eb11..2e8b60f4a 100644 --- a/base/runtime/dynamic_map_internal.odin +++ b/base/runtime/dynamic_map_internal.odin @@ -94,17 +94,6 @@ map_cell_index_dynamic :: #force_inline proc "contextless" (base: uintptr, #no_a return base + offset } -// Same as above procedure but with compile-time constant index. -@(require_results) -map_cell_index_dynamic_const :: proc "contextless" (base: uintptr, #no_alias info: ^Map_Cell_Info, $INDEX: uintptr) -> uintptr { - elements_per_cell := uintptr(info.elements_per_cell) - size_of_cell := uintptr(info.size_of_cell) - size_of_type := uintptr(info.size_of_type) - cell_index := INDEX / elements_per_cell - data_index := INDEX % elements_per_cell - return base + (cell_index * size_of_cell) + (data_index * size_of_type) -} - // We always round the capacity to a power of two so this becomes [16]Foo, which // works out to [4]Cell(Foo). // @@ -264,7 +253,7 @@ map_kvh_data_dynamic :: proc "contextless" (m: Raw_Map, #no_alias info: ^Map_Inf sk = map_cell_index_dynamic(hs_, INFO_HS, capacity) // Skip past hs to get start of sk // Need to skip past two elements in the scratch key space to get to the start // of the scratch value space, of which there's only two elements as well. - sv = map_cell_index_dynamic_const(sk, info.ks, 2) + sv = map_cell_index_dynamic(sk, info.ks, 2) hs = ([^]Map_Hash)(hs_) return @@ -562,36 +551,57 @@ map_reserve_dynamic :: #force_no_inline proc "odin" (#no_alias m: ^Raw_Map, #no_ } resized := map_alloc_dynamic(info, log2_min_cap, m.allocator, loc) or_return - - ks, vs, hs, _, _ := map_kvh_data_dynamic(m^, info) - - // Cache these loads to avoid hitting them in the for loop. - n := m.len - for i in 0.. map_probe_distance(dst^, element_hash, pos) { + break + } + pos = (pos + 1) & mask + distance += 1 + } + + if map_hash_is_empty(dhs[pos]) { + intrinsics.mem_copy_non_overlapping(rawptr(map_cell_index_dynamic(dks, info.ks, pos)), rawptr(k), size_of_k) + intrinsics.mem_copy_non_overlapping(rawptr(map_cell_index_dynamic(dvs, info.vs, pos)), rawptr(v), size_of_v) + dhs[pos] = h + } else { + _ = map_insert_hash_dynamic(dst, info, h, k, v) + } + } +} + @(require_results) map_shrink_dynamic :: #force_no_inline proc "odin" (#no_alias m: ^Raw_Map, #no_alias info: ^Map_Info, loc := #caller_location) -> (did_shrink: bool, err: Allocator_Error) { @@ -622,32 +632,7 @@ map_shrink_dynamic :: #force_no_inline proc "odin" (#no_alias m: ^Raw_Map, #no_a } shrunk := map_alloc_dynamic(info, log2_capacity_new, m.allocator) or_return - - capacity := uintptr(1) << log2_capacity_new - - ks, vs, hs, _, _ := map_kvh_data_dynamic(m^, info) - - n := m.len - for i in 0.. Date: Sat, 3 Oct 2026 17:36:19 +0100 Subject: [PATCH 185/215] Scan the runs of ASCII characters is identifiers, and simplify the hash for the keyword look up --- src/tokenizer.cpp | 52 +++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 48 insertions(+), 4 deletions(-) diff --git a/src/tokenizer.cpp b/src/tokenizer.cpp index d3bf23519..6900a2098 100644 --- a/src/tokenizer.cpp +++ b/src/tokenizer.cpp @@ -154,16 +154,29 @@ GB_STATIC_ASSERT(Token__KeywordEnd-Token__KeywordBegin <= gb_count_of(keyword_ha gb_global isize const min_keyword_size = 2; gb_global isize max_keyword_size = 11; gb_global bool keyword_indices[16] = {}; +gb_global u32 keyword_first_letters = 0; // a bit for each letter from 'a' which a keyword starts with gb_internal gb_inline u32 keyword_hash(u8 const *text, isize len) { - return fnv32a(text, len); + return cast(u32)len + text[0] + 3*text[1] + 26*text[len-1]; } + +gb_internal gb_inline bool could_be_keyword(String const &s) { + if (s.len < min_keyword_size || s.len > max_keyword_size || !keyword_indices[s.len]) { + return false; + } + u32 first = cast(u32)s[0] - 'a'; + return first < 26 && (keyword_first_letters & (1u< t->read_curr) { + t->column_minus_one += cast(i32)(p - t->read_curr); + t->curr = p-1; + t->curr_rune = p[-1]; + t->read_curr = p; + } +} + gb_internal void init_tokenizer_with_data(Tokenizer *t, String const &fullpath, void const *data, isize size) { t->fullpath = fullpath; t->column_minus_one = -1; @@ -663,10 +686,24 @@ gb_internal bool scan_escape(Tokenizer *t) { gb_internal gb_inline void tokenizer_skip_line(Tokenizer *t) { while (t->curr_rune != '\n' && t->curr_rune != GB_RUNE_EOF) { + u8 *p = t->read_curr; + while (p < t->end && *p != '\n' && *p != 0 && *p < 0x80) { + p++; + } + tokenizer_skip_ascii_to(t, p); advance_to_next_rune(t); } } +gb_internal gb_inline void tokenizer_skip_spaces(Tokenizer *t) { + u8 *p = t->read_curr; + while (p < t->end && (*p == ' ' || *p == '\t' || *p == '\r')) { + p++; + } + tokenizer_skip_ascii_to(t, p); + advance_to_next_rune(t); +} + gb_internal gb_inline void tokenizer_skip_whitespace(Tokenizer *t, bool on_newline) { if (on_newline) { for (;;) { @@ -674,7 +711,7 @@ gb_internal gb_inline void tokenizer_skip_whitespace(Tokenizer *t, bool on_newli case ' ': case '\t': case '\r': - advance_to_next_rune(t); + tokenizer_skip_spaces(t); continue; } break; @@ -683,10 +720,12 @@ gb_internal gb_inline void tokenizer_skip_whitespace(Tokenizer *t, bool on_newli for (;;) { switch (t->curr_rune) { case '\n': + advance_to_next_rune(t); + continue; case ' ': case '\t': case '\r': - advance_to_next_rune(t); + tokenizer_skip_spaces(t); continue; } break; @@ -710,6 +749,11 @@ gb_internal void tokenizer_get_token(Tokenizer *t, Token *token, int repeat=0) { Rune curr_rune = t->curr_rune; if (rune_is_letter(curr_rune)) { token->kind = Token_Ident; + u8 *p = t->read_curr; + while (p < t->end && *p < 0x80 && rune_is_letter_or_digit(*p)) { + p++; + } + tokenizer_skip_ascii_to(t, p); while (rune_is_letter_or_digit(t->curr_rune)) { advance_to_next_rune(t); } @@ -717,7 +761,7 @@ gb_internal void tokenizer_get_token(Tokenizer *t, Token *token, int repeat=0) { token->string.len = t->curr - token->string.text; // NOTE(bill): Heavily optimize to make it faster to find keywords - if (1 < token->string.len && token->string.len <= max_keyword_size && keyword_indices[token->string.len]) { + if (could_be_keyword(token->string)) { u32 hash = keyword_hash(token->string.text, token->string.len); u32 index = hash & KEYWORD_HASH_TABLE_MASK; KeywordHashEntry *entry = &keyword_hash_table[index]; From 6fbe128c8f85d78bd31b093afebb742a2701fcf4 Mon Sep 17 00:00:00 2001 From: gingerBill Date: Sat, 3 Oct 2026 18:09:06 +0100 Subject: [PATCH 186/215] Remove duplicate test --- tests/issues/run.bat | 1 - tests/issues/run.sh | 1 - 2 files changed, 2 deletions(-) diff --git a/tests/issues/run.bat b/tests/issues/run.bat index 07f6ab701..75d94c400 100644 --- a/tests/issues/run.bat +++ b/tests/issues/run.bat @@ -91,7 +91,6 @@ clang -c ..\test_issue_sysv_abi.c -o test_issue_sysv_abi_c.o || exit /b ..\..\..\odin check ..\test_issue_7708_mismatch.odin %COMMON% 2>&1 | find /c "Error:" | findstr /x "2" || exit /b ..\..\..\odin test ..\test_issue_7700.odin %COMMON% || exit /b ..\..\..\odin test ..\test_issue_procedure_of_specialized.odin %COMMON% || exit /b -..\..\..\odin test ..\test_issue_packed_field_by_value.odin %COMMON% || exit /b ..\..\..\odin test ..\test_issue_7587.odin %COMMON% || exit /b ..\..\..\odin run ..\test_issue_7596.odin %COMMON% || exit /b ..\..\..\odin test ..\test_issue_split_globals -define:ODIN_TEST_FANCY=false -vet -strict-style -ignore-unused-defineables || exit /b diff --git a/tests/issues/run.sh b/tests/issues/run.sh index 2203410ae..e14677895 100755 --- a/tests/issues/run.sh +++ b/tests/issues/run.sh @@ -117,7 +117,6 @@ else fi $ODIN test ../test_issue_7700.odin $COMMON $ODIN test ../test_issue_procedure_of_specialized.odin $COMMON -$ODIN test ../test_issue_packed_field_by_value.odin $COMMON $ODIN test ../test_issue_7587.odin $COMMON $ODIN run ../test_issue_7596.odin $COMMON $ODIN test ../test_issue_split_globals -define:ODIN_TEST_FANCY=false -vet -strict-style -ignore-unused-defineables From 5c787d0e729fcfc5a67c780435d94b7a4f5ddcee Mon Sep 17 00:00:00 2001 From: gingerBill Date: Sat, 3 Oct 2026 18:17:25 +0100 Subject: [PATCH 187/215] Re-enable the `temporary_allocator()` and fix the `arena_temp_end` --- src/check_expr.cpp | 1 - src/common_memory.cpp | 18 +++++++++--------- 2 files changed, 9 insertions(+), 10 deletions(-) diff --git a/src/check_expr.cpp b/src/check_expr.cpp index 75190b66a..72f57da35 100644 --- a/src/check_expr.cpp +++ b/src/check_expr.cpp @@ -8897,7 +8897,6 @@ gb_internal CallArgumentError check_polymorphic_record_type(CheckerContext *c, O c->allow_in_progress_type_operand = prev_allow_in_progress; }); - TEMPORARY_ALLOCATOR_GUARD(); if (is_call_expr_field_value(ce)) { named_fields = true; operands = array_make(temporary_allocator(), ce->args.count); diff --git a/src/common_memory.cpp b/src/common_memory.cpp index ac82e824c..8e606a62c 100644 --- a/src/common_memory.cpp +++ b/src/common_memory.cpp @@ -392,12 +392,14 @@ ArenaTemp arena_temp_begin(Arena *arena) { GB_ASSERT(arena); GB_ASSERT(arena->parent_thread == get_current_thread()); + if (arena->curr_block == nullptr) { + arena_alloc(arena, 0, 1); + } + ArenaTemp temp = {}; temp.arena = arena; temp.block = arena->curr_block; - if (arena->curr_block != nullptr) { - temp.used = arena->curr_block->used; - } + temp.used = arena->curr_block->used; arena->temp_count += 1; return temp; } @@ -428,8 +430,8 @@ void arena_temp_end(ArenaTemp const &temp) { MemoryBlock *block = arena->curr_block; if (block) { GB_ASSERT_MSG(block->used >= temp.used, "out of order use of arena_temp_end"); - isize amount_to_zero = gb_min(block->used - temp.used, block->size - block->used); - gb_zero_size(block->base + temp.used, amount_to_zero); + // `arena_alloc` expects the memory to be zeroed already + gb_zero_size(block->base + temp.used, block->used - temp.used); block->used = temp.used; } } @@ -605,16 +607,14 @@ gb_internal gbAllocator permanent_allocator() { } gb_internal gbAllocator temporary_allocator() { - // return {thread_arena_allocator_proc, cast(void *)cast(uintptr)ThreadArena_Temporary}; - return permanent_allocator(); + return {thread_arena_allocator_proc, cast(void *)cast(uintptr)ThreadArena_Temporary}; } #define TEMP_ARENA_GUARD(arena) ArenaTempGuard GB_DEFER_3(_arena_guard_){arena} -// #define TEMPORARY_ALLOCATOR_GUARD() TEMP_ARENA_GUARD(get_arena(ThreadArena_Temporary)) -#define TEMPORARY_ALLOCATOR_GUARD() +#define TEMPORARY_ALLOCATOR_GUARD() TEMP_ARENA_GUARD(get_arena(ThreadArena_Temporary)) #define PERMANENT_ALLOCATOR_GUARD() From cd08004d33f8982477030c090c48d22b4d6e6911 Mon Sep 17 00:00:00 2001 From: gingerBill Date: Sat, 3 Oct 2026 18:38:09 +0100 Subject: [PATCH 188/215] Free the temporary memory of each procedure once it is generated; keep the strings used as keys of the constant string maps permanently --- src/llvm_backend.cpp | 2 ++ src/llvm_backend_const.cpp | 3 +-- src/llvm_backend_proc.cpp | 4 ++-- 3 files changed, 5 insertions(+), 4 deletions(-) diff --git a/src/llvm_backend.cpp b/src/llvm_backend.cpp index 8a015669d..900a762f9 100644 --- a/src/llvm_backend.cpp +++ b/src/llvm_backend.cpp @@ -3789,6 +3789,8 @@ gb_internal void lb_generate_procedure(lbModule *m, lbProcedure *p) { return; } + TEMPORARY_ALLOCATOR_GUARD(); + if (p->body != nullptr) { // Build Procedure m->curr_procedure = p; lb_begin_procedure_body(p); diff --git a/src/llvm_backend_const.cpp b/src/llvm_backend_const.cpp index db123b142..7eda9515d 100644 --- a/src/llvm_backend_const.cpp +++ b/src/llvm_backend_const.cpp @@ -1317,8 +1317,7 @@ gb_internal lbValue lb_const_value(lbModule *m, Type *type, ExactValue value, lb isize len = value.value_string.len; if (is_type_string16(res.type) || is_type_cstring16(res.type)) { - TEMPORARY_ALLOCATOR_GUARD(); - String16 s16 = string_to_string16(temporary_allocator(), value.value_string); + String16 s16 = string_to_string16(permanent_allocator(), value.value_string); len = s16.len; ptr = lb_find_or_add_entity_string16_ptr(m, s16, custom_link_section); } else { diff --git a/src/llvm_backend_proc.cpp b/src/llvm_backend_proc.cpp index 3172bc0b0..6a2ac0faa 100644 --- a/src/llvm_backend_proc.cpp +++ b/src/llvm_backend_proc.cpp @@ -4959,7 +4959,7 @@ gb_internal lbValue lb_handle_param_value(lbProcedure *p, Type *parameter_type, { Ast *orig = param_value.original_ast_expr; if (orig->kind == Ast_BasicDirective) { - gbString expr = expr_to_string(call_expression, temporary_allocator()); + gbString expr = expr_to_string(call_expression, permanent_allocator()); return lb_const_string(p->module, make_string_c(expr)); } @@ -4999,7 +4999,7 @@ gb_internal lbValue lb_handle_param_value(lbProcedure *p, Type *parameter_type, } } - gbString expr = expr_to_string(target_expr, temporary_allocator()); + gbString expr = expr_to_string(target_expr, permanent_allocator()); return lb_const_string(p->module, make_string_c(expr)); } From 5795183b757176d42d739570e3616b5b9d1e2020 Mon Sep 17 00:00:00 2001 From: gingerBill Date: Sat, 3 Oct 2026 19:37:26 +0100 Subject: [PATCH 189/215] Queue a polymorphic specialization's body when it is first used rather than when it is generated, so the minimum dependency set is only generated once; assert that every body in it was checked rather than checking any missed ones late --- src/check_expr.cpp | 40 ++++--------- src/checker.cpp | 138 ++++++++++++--------------------------------- src/checker.hpp | 1 + 3 files changed, 48 insertions(+), 131 deletions(-) diff --git a/src/check_expr.cpp b/src/check_expr.cpp index 72f57da35..7f079e5bf 100644 --- a/src/check_expr.cpp +++ b/src/check_expr.cpp @@ -568,27 +568,11 @@ gb_internal Type *strip_poly_specialized_proc_type(Type *full) { return t; } -// Reuse an existing generated specialization `other`, scheduling its body if unchecked. -// Caller must have released gen_procs->mutex first. -gb_internal bool reuse_gen_polymorphic_procedure(Checker *checker, Entity *other, Ast *poly_def_node, PolyProcData *poly_proc_data) { +// Reuse an existing generated specialization `other`, whose body is checked once it is used +gb_internal bool reuse_gen_polymorphic_procedure(Entity *other, PolyProcData *poly_proc_data) { if (poly_proc_data) { poly_proc_data->gen_entity = other; } - - DeclInfo *decl = other->decl_info; - if (decl->proc_checked_state != ProcCheckedState_Checked) { - ProcInfo *proc_info = permanent_alloc_item(); - proc_info->file = other->file; - proc_info->token = other->token; - proc_info->decl = decl; - proc_info->type = proc_entity_full_type(other); - proc_info->body = decl->proc_lit->ProcLit.body; - proc_info->tags = other->Procedure.tags; - proc_info->generated_from_polymorphic = true; - proc_info->poly_def_node = poly_def_node; - - check_procedure_later(checker, proc_info); - } return true; } @@ -773,7 +757,7 @@ gb_internal bool find_or_generate_polymorphic_procedure(CheckerContext *old_c, E Type *pt = base_type(proc_entity_full_type(other)); if (are_types_identical(pt, final_proc_type)) { rw_mutex_shared_unlock(&gen_procs->mutex); // @local-mutex - return reuse_gen_polymorphic_procedure(nctx.checker, other, poly_def_node, poly_proc_data); + return reuse_gen_polymorphic_procedure(other, poly_proc_data); } } rw_mutex_shared_unlock(&gen_procs->mutex); // @local-mutex @@ -788,7 +772,7 @@ gb_internal bool find_or_generate_polymorphic_procedure(CheckerContext *old_c, E Entity *other = gen_procs->procs[i]; if (gen_procs->hashes[i] == final_hash && are_types_identical(base_type(proc_entity_full_type(other)), final_proc_type)) { rw_mutex_unlock(&gen_procs->mutex); // @local-mutex - return reuse_gen_polymorphic_procedure(nctx.checker, other, poly_def_node, poly_proc_data); + return reuse_gen_polymorphic_procedure(other, poly_proc_data); } } @@ -860,10 +844,6 @@ gb_internal bool find_or_generate_polymorphic_procedure(CheckerContext *old_c, E AstFile *file = base_entity->file; - array_add(&gen_procs->procs, entity); - array_add(&gen_procs->hashes, proc_type_identity_hash(final_proc_type)); - rw_mutex_unlock(&gen_procs->mutex); // @local-mutex - ProcInfo *proc_info = permanent_alloc_item(); proc_info->file = file; proc_info->token = token; @@ -874,6 +854,12 @@ gb_internal bool find_or_generate_polymorphic_procedure(CheckerContext *old_c, E proc_info->generated_from_polymorphic = true; proc_info->poly_def_node = poly_def_node; + // Before it can be found by another thread which could use it first + d->gen_proc_info.store(proc_info); + + array_add(&gen_procs->procs, entity); + array_add(&gen_procs->hashes, proc_type_identity_hash(final_proc_type)); + rw_mutex_unlock(&gen_procs->mutex); // @local-mutex if (poly_proc_data) { poly_proc_data->gen_entity = entity; @@ -926,9 +912,6 @@ gb_internal bool find_or_generate_polymorphic_procedure(CheckerContext *old_c, E } } - // NOTE(bill): Check the newly generated procedure body - check_procedure_later(nctx.checker, proc_info); - return true; } @@ -7771,9 +7754,6 @@ gb_internal bool check_call_arguments_single(CheckerContext *c, Ast *call, Opera } else { decl->where_clauses_evaluated = true; - if (ok && (data->gen_entity->flags & EntityFlag_ProcBodyChecked) == 0) { - check_procedure_later(c->checker, e->file, e->token, decl, proc_entity_full_type(e), decl->proc_lit->ProcLit.body, decl->proc_lit->ProcLit.tags); - } if (is_type_proc(data->gen_entity->type)) { Type *t = base_type(entity_to_use->type); data->result_type = t->Proc.results; diff --git a/src/checker.cpp b/src/checker.cpp index 01702b14e..0a4dec1fb 100644 --- a/src/checker.cpp +++ b/src/checker.cpp @@ -12,6 +12,7 @@ gb_internal void check_expr(CheckerContext *c, Operand *operand, Ast *expression gb_internal void check_expr_or_type(CheckerContext *c, Operand *operand, Ast *expression, Type *type_hint=nullptr); gb_internal void add_comparison_procedures_for_fields(CheckerContext *c, Type *t); gb_internal Type *check_type(CheckerContext *ctx, Ast *e); +gb_internal void check_procedure_later(Checker *c, ProcInfo *info); gb_internal bool is_operand_value(Operand o) { switch (o.mode) { @@ -2204,6 +2205,16 @@ gb_internal void add_entity_use(CheckerContext *c, Ast *identifier, Entity *enti } add_declaration_dependency(c, entity); entity->flags |= EntityFlag_Used; + if (entity->kind == Entity_Procedure && entity->Procedure.generated_from_polymorphic) { + // Check the specialization body later + DeclInfo *decl = entity->decl_info; + if (decl != nullptr) { + ProcInfo *pi = decl->gen_proc_info.exchange(nullptr); + if (pi != nullptr) { + check_procedure_later(c->checker, pi); + } + } + } if (entity_has_deferred_procedure(entity)) { Entity *deferred = entity->Procedure.deferred_procedure.entity; if (deferred != entity) { @@ -6432,60 +6443,6 @@ gb_internal void calculate_global_init_order(Checker *c) { } } -gb_internal void check_procedure_later_from_entity(Checker *c, Entity *e, char const *from_msg) { - if (e == nullptr || e->kind != Entity_Procedure) { - return; - } - if (e->Procedure.is_foreign) { - return; - } - if ((e->flags & EntityFlag_ProcBodyChecked) != 0) { - return; - } - if ((e->flags & EntityFlag_Overridden) != 0) { - // NOTE (zen3ger) Delay checking of a proc alias until the underlying proc is checked. - GB_ASSERT(e->aliased_of != nullptr); - GB_ASSERT(e->aliased_of->kind == Entity_Procedure); - if ((e->aliased_of->flags & EntityFlag_ProcBodyChecked) != 0) { - e->flags |= EntityFlag_ProcBodyChecked; - return; - } - // NOTE (zen3ger) A proc alias *does not* have a body and tags! - check_procedure_later(c, e->file, e->token, e->decl_info, e->type, nullptr, 0); - return; - } - Type *type = base_type(e->type); - if (type == t_invalid) { - return; - } - GB_ASSERT_MSG(type->kind == Type_Proc, "%s", type_to_string(e->type)); - - if (is_type_polymorphic(type) && !type->Proc.is_poly_specialized) { - return; - } - - GB_ASSERT(e->decl_info != nullptr); - - ProcInfo *pi = permanent_alloc_item(); - pi->file = e->file; - pi->token = e->token; - pi->decl = e->decl_info; - pi->type = proc_entity_full_type(e); - - Ast *pl = e->decl_info->proc_lit; - GB_ASSERT(pl != nullptr); - pi->body = pl->ProcLit.body; - pi->tags = pl->ProcLit.tags; - if (pi->body == nullptr) { - return; - } - if (from_msg != nullptr) { - debugf("CHECK PROCEDURE LATER [FROM %s]! %.*s :: %s {...}\n", from_msg, LIT(e->token.string), type_to_string(e->type)); - } - check_procedure_later(c, pi); -} - - gb_internal bool check_proc_info(Checker *c, ProcInfo *pi, UntypedExprInfoMap *untyped) { if (pi == nullptr) { return false; @@ -6534,12 +6491,7 @@ gb_internal bool check_proc_info(Checker *c, ProcInfo *pi, UntypedExprInfoMap *u if (pt->is_polymorphic && pt->is_poly_specialized) { Entity *e = pi->decl->entity; GB_ASSERT(e != nullptr); - if ((e->flags & EntityFlag_Used) == 0) { - // NOTE(bill, 2019-08-31): It was never used, don't check - // NOTE(bill, 2023-01-02): This may need to be checked again if it is used elsewhere? - pi->decl->proc_checked_state.store(ProcCheckedState_Unchecked); - return false; - } + GB_ASSERT_MSG((e->flags & EntityFlag_Used) != 0, "unused specialization '%.*s' queued for checking", LIT(name)); } CheckerContext ctx = {}; @@ -6603,15 +6555,6 @@ gb_internal bool check_proc_info(Checker *c, ProcInfo *pi, UntypedExprInfoMap *u add_untyped_expressions(&c->info, ctx.untyped); - rw_mutex_shared_lock(&ctx.decl->deps_mutex); - FOR_PTR_SET(dep, ctx.decl->deps) { - if (dep && dep->kind == Entity_Procedure && - (dep->flags & EntityFlag_ProcBodyChecked) == 0) { - check_procedure_later_from_entity(c, dep, NULL); - } - } - rw_mutex_shared_unlock(&ctx.decl->deps_mutex); - return true; } @@ -6619,38 +6562,37 @@ GB_STATIC_ASSERT(sizeof(isize) == sizeof(void *)); gb_internal bool consume_proc_info(Checker *c, ProcInfo *pi, UntypedExprInfoMap *untyped); -gb_internal void check_unchecked_bodies(Checker *c) { - // NOTE(2021-02-26, bill): Sanity checker - // This is a partial hack to make sure all procedure bodies have been checked - // even ones which should not exist, due to the multithreaded nature of the parser - // HACK TODO(2021-02-26, bill): Actually fix this race condition - +gb_internal void check_min_dep_bodies_were_checked(Checker *c) { GB_ASSERT(c->procs_to_check.count == 0); + global_after_checking_procedure_bodies = true; - UntypedExprInfoMap untyped = {}; - defer (map_destroy(&untyped)); - - // use the `procs_to_check` array - global_procedure_body_in_worker_queue = false; + if (any_errors()) { + // e.g. a body is not checked when its `where` clauses fail + return; + } for (Entity *e : c->info.entities) { - if (e->min_dep_count.load(std::memory_order_relaxed) > 0) { - check_procedure_later_from_entity(c, e, "check_unchecked_bodies"); + if (e->kind != Entity_Procedure || e->min_dep_count.load(std::memory_order_relaxed) == 0) { + continue; } - } - - if (!global_procedure_body_in_worker_queue) { - for_array(i, c->procs_to_check) { - ProcInfo *pi = c->procs_to_check[i]; - consume_proc_info(c, pi, &untyped); + Entity *original = e; + while ((e->flags & EntityFlag_Overridden) && e->aliased_of != nullptr) { + e = e->aliased_of; } - array_clear(&c->procs_to_check); - } else { - thread_pool_wait(); + if (e->Procedure.is_foreign || (e->flags & EntityFlag_ProcBodyChecked) != 0) { + continue; + } + Type *type = base_type(e->type); + if (type == t_invalid || (is_type_polymorphic(type) && !type->Proc.is_poly_specialized)) { + continue; + } + DeclInfo *decl = e->decl_info; + if (decl == nullptr || decl->proc_lit == nullptr || decl->proc_lit->ProcLit.body == nullptr) { + continue; + } + GB_PANIC("the body of '%.*s' :: %s was never checked (%s)", + LIT(original->token.string), type_to_string(e->type), token_pos_to_string(e->token.pos)); } - - global_procedure_body_in_worker_queue = false; - global_after_checking_procedure_bodies = true; } gb_internal void check_safety_all_procedures_for_unchecked(Checker *c) { @@ -7774,13 +7716,7 @@ gb_internal void check_parsed_files(Checker *c) { generate_minimum_dependency_set(c, c->info.entry_point); TIME_SECTION("check bodies have all been checked"); - check_unchecked_bodies(c); - - TIME_SECTION("check #soa types"); - check_merge_queues_into_arrays(c); - - TIME_SECTION("update minimum dependency set again"); - generate_minimum_dependency_set_internal(c, c->info.entry_point); + check_min_dep_bodies_were_checked(c); // NOTE(laytan): has to be ran after generate_minimum_dependency_set, // because that collects the test procedures. diff --git a/src/checker.hpp b/src/checker.hpp index 6c91c2b91..04cf1e41a 100644 --- a/src/checker.hpp +++ b/src/checker.hpp @@ -225,6 +225,7 @@ struct DeclInfo { Type * gen_proc_type; // Precalculated Entity * para_poly_original; + std::atomic gen_proc_info; // a specialization's body, queued for checking when it is first used bool is_using; bool foreign_require_results; From d046345202026ada417d9cb866d1673d2a6e794a Mon Sep 17 00:00:00 2001 From: Arthur031221 Date: Sun, 4 Oct 2026 03:39:11 +0800 Subject: [PATCH 190/215] Preserve fractional timestamps in timezone conversions Apply timezone offsets to the normalized nanosecond timestamp. Test fractional roundtrips, dates before 1970 and nanosecond carry. Co-authored-by: dozn <16659513+dozn@users.noreply.github.com> Signed-off-by: Arthur031221 --- core/time/timezone/tzdate.odin | 6 +-- tests/core/time/test_core_time.odin | 64 +++++++++++++++++++++++++++-- 2 files changed, 63 insertions(+), 7 deletions(-) diff --git a/core/time/timezone/tzdate.odin b/core/time/timezone/tzdate.odin index 29e8ad25c..e00e5ac84 100644 --- a/core/time/timezone/tzdate.odin +++ b/core/time/timezone/tzdate.odin @@ -187,8 +187,7 @@ datetime_to_utc :: proc(dt: datetime.DateTime) -> (out: datetime.DateTime, succe tm := time.datetime_to_time(dt) or_return record := region_get_nearest(dt.tz, tm) or_return - secs := time.time_to_unix(tm) - adj_time := time.unix(secs - record.utc_offset, 0) + adj_time := time.time_add(tm, -time.Duration(record.utc_offset) * time.Second) adj_dt := time.time_to_datetime(adj_time) or_return return adj_dt, true } @@ -220,8 +219,7 @@ datetime_to_tz :: proc(dt: datetime.DateTime, tz: ^datetime.TZ_Region) -> (out: tm := time.datetime_to_time(dt) or_return record := region_get_nearest(tz, tm) or_return - secs := time.time_to_unix(tm) - adj_time := time.unix(secs + record.utc_offset, i64(dt.nano)) + adj_time := time.time_add(tm, time.Duration(record.utc_offset) * time.Second) adj_dt := time.time_to_datetime(adj_time) or_return adj_dt.tz = tz diff --git a/tests/core/time/test_core_time.odin b/tests/core/time/test_core_time.odin index d1f83c0dc..f06541bfe 100644 --- a/tests/core/time/test_core_time.odin +++ b/tests/core/time/test_core_time.odin @@ -355,14 +355,72 @@ date_component_roundtrip_test :: proc(t: ^testing.T, moment: dt.DateTime) { datetime_eq :: proc(dt1: dt.DateTime, dt2: dt.DateTime) -> bool { return ( dt1.year == dt2.year && dt1.month == dt2.month && dt1.day == dt2.day && - dt1.hour == dt2.hour && dt1.minute == dt2.minute && dt1.second == dt2.second + dt1.hour == dt2.hour && dt1.minute == dt2.minute && dt1.second == dt2.second && + dt1.nano == dt2.nano ) } +@test +test_convert_timezone_fractional_timestamp :: proc(t: ^testing.T) { + utc_now := time.unix(1750697120, 478850200) + utc_date_time, utc_ok := time.time_to_datetime(utc_now) + testing.expect(t, utc_ok) + + van_tz, van_ok := tz.region_load("America/Vancouver") + testing.expect(t, van_ok) + defer tz.region_destroy(van_tz) + van_date_time, van_converted := tz.datetime_to_tz(utc_date_time, van_tz) + testing.expect(t, van_converted) + returned_date_time, returned := tz.datetime_to_utc(van_date_time) + testing.expect(t, returned) + + utc_time, utc_valid := time.compound_to_time(utc_date_time) + van_time, van_valid := time.compound_to_time(returned_date_time) + testing.expect(t, utc_valid && van_valid) + testing.expect_value(t, van_time, utc_time) +} + +@test +test_convert_timezone_normalized_timestamp :: proc(t: ^testing.T) { + zone := dt.TZ_Region{rrule = {has_dst = false, std_offset = 3600}} + cases := [3]struct { + input, normalized, utc: dt.DateTime, + }{ + { + {{2024, 1, 1}, {0, 0, 0, 123456789}, nil}, + {{2024, 1, 1}, {0, 0, 0, 123456789}, nil}, + {{2023, 12, 31}, {23, 0, 0, 123456789}, nil}, + }, + { + {{2024, 1, 1}, {0, 0, 59, 1000000000}, nil}, + {{2024, 1, 1}, {0, 1, 0, 0}, nil}, + {{2023, 12, 31}, {23, 1, 0, 0}, nil}, + }, + { + {{1969, 12, 31}, {23, 59, 59, 123456789}, nil}, + {{1969, 12, 31}, {23, 59, 59, 123456789}, nil}, + {{1969, 12, 31}, {22, 59, 59, 123456789}, nil}, + }, + } + for tc in cases { + input := tc.input + input.tz = &zone + utc, utc_ok := tz.datetime_to_utc(input) + testing.expect(t, utc_ok) + testing.expect(t, datetime_eq(utc, tc.utc)) + testing.expect(t, utc.tz == nil) + + local, local_ok := tz.datetime_to_tz(tc.utc, &zone) + testing.expect(t, local_ok) + testing.expect(t, datetime_eq(local, tc.normalized)) + testing.expect(t, local.tz == &zone) + } +} + @test test_convert_timezone_roundtrip :: proc(t: ^testing.T) { - dst_dt, _ := dt.components_to_datetime(2024, 10, 4, 23, 47, 0) - std_dt, _ := dt.components_to_datetime(2024, 11, 4, 23, 47, 0) + dst_dt, _ := dt.components_to_datetime(2024, 10, 4, 23, 47, 0, 123456789) + std_dt, _ := dt.components_to_datetime(2024, 11, 4, 23, 47, 0, 987654321) local_tz, local_load_ok := tz.region_load("local") defer tz.region_destroy(local_tz) From bdb03647390aa01412a09f6577cda798c28882df Mon Sep 17 00:00:00 2001 From: gingerBill Date: Sat, 3 Oct 2026 22:26:08 +0100 Subject: [PATCH 191/215] Remove the missing procedures fallback from the backend: the checker adds the Objective-C runtime procedures the backend calls, local foreign procedures with a duplicate name are bound to the existing declaration, and local procedures passed to a `$` parameter are created up front --- src/check_builtin.cpp | 8 +++++ src/check_type.cpp | 1 + src/checker.cpp | 12 ++++++++ src/entity.cpp | 3 +- src/llvm_backend.cpp | 59 +++++++++++------------------------- src/llvm_backend.hpp | 2 -- src/llvm_backend_general.cpp | 16 ++-------- src/llvm_backend_stmt.cpp | 3 +- 8 files changed, 46 insertions(+), 58 deletions(-) diff --git a/src/check_builtin.cpp b/src/check_builtin.cpp index f453fb0aa..41e037eeb 100644 --- a/src/check_builtin.cpp +++ b/src/check_builtin.cpp @@ -686,6 +686,14 @@ gb_internal bool check_builtin_objc_procedure(CheckerContext *c, Operand *operan } else { try_to_add_package_dependency(c, "runtime", "_NSConcreteStackBlock"); } + for (isize i = 0; i < capture_arg_count; i++) { + Type *t = param_operands[i].type; + if (is_type_pointer(t) && is_type_objc_object(t)) { + try_to_add_package_dependency(c, "runtime", "_Block_object_assign"); + try_to_add_package_dependency(c, "runtime", "_Block_object_dispose"); + break; + } + } *operand = poly_op; operand->type = alloc_type_pointer(operand->type); diff --git a/src/check_type.cpp b/src/check_type.cpp index 98e562501..959ce39a9 100644 --- a/src/check_type.cpp +++ b/src/check_type.cpp @@ -3358,6 +3358,7 @@ gb_internal Type *check_get_params(CheckerContext *ctx, Scope *scope, Ast *_para Ast *expr = unparen_expr(op.expr); Entity *proc_entity = strip_entity_wrapping(expr); if (proc_entity) { + proc_entity->flags |= EntityFlag_PolyConstArg; poly_const = exact_value_procedure(proc_entity->identifier.load() ? proc_entity->identifier.load() : op.expr); valid = true; } else if (expr->kind == Ast_ProcLit) { diff --git a/src/checker.cpp b/src/checker.cpp index 0a4dec1fb..82e1dc154 100644 --- a/src/checker.cpp +++ b/src/checker.cpp @@ -3377,6 +3377,18 @@ gb_internal void generate_minimum_dependency_set(Checker *c, Entity *start) { str_lit("multi_pointer_slice_expr_error"), ); + FORCE_ADD_RUNTIME_ENTITIES(c->info.objc_class_implementations.count.load(std::memory_order_relaxed) > 0, + str_lit("objc_lookUpClass"), + str_lit("sel_registerName"), + str_lit("objc_allocateClassPair"), + str_lit("objc_registerClassPair"), + str_lit("class_addMethod"), + str_lit("class_addIvar"), + str_lit("class_getInstanceVariable"), + str_lit("ivar_getOffset"), + str_lit("object_getClass"), + ); + { // init min dep basic equal procs struct { BasicKind kind; char const *name; } const procs[] = { diff --git a/src/entity.cpp b/src/entity.cpp index 4a7800450..355bd1ca6 100644 --- a/src/entity.cpp +++ b/src/entity.cpp @@ -76,7 +76,8 @@ enum EntityFlag : u64 { EntityFlag_Init = 1ull<<31, EntityFlag_Subtype = 1ull<<32, EntityFlag_Fini = 1ull<<33, - + EntityFlag_PolyConstArg = 1ull<<34, // passed to a `$` parameter, so a local procedure may be called outside its parent + EntityFlag_CustomLinkName = 1ull<<40, EntityFlag_CustomLinkage_Internal = 1ull<<41, EntityFlag_CustomLinkage_Strong = 1ull<<42, diff --git a/src/llvm_backend.cpp b/src/llvm_backend.cpp index 900a762f9..2d25e4703 100644 --- a/src/llvm_backend.cpp +++ b/src/llvm_backend.cpp @@ -2441,12 +2441,13 @@ gb_internal void lb_create_global_procedures_and_types(lbGenerator *gen, Checker Scope * scope = e->scope; if ((scope->flags & ScopeFlag_File) == 0) { - continue; + if (e->kind != Entity_Procedure || (e->flags & EntityFlag_PolyConstArg) == 0) { + continue; + } + } else { + GB_ASSERT(scope->parent->flags & ScopeFlag_Pkg); } - Scope *package_scope = scope->parent; - GB_ASSERT(package_scope->flags & ScopeFlag_Pkg); - switch (e->kind) { case Entity_Variable: // NOTE(bill): Handled above as it requires a specific load order @@ -3354,51 +3355,27 @@ gb_internal void lb_generate_procedures(lbGenerator *gen, bool do_threading) { lb_exit_if_worker_failed(); } -gb_internal WORKER_TASK_PROC(lb_generate_missing_procedures_to_check_worker_proc) { +gb_internal WORKER_TASK_PROC(lb_generate_queued_procedures_worker_proc) { lbModule *m = cast(lbModule *)data; - for (Entity *e = nullptr; mpsc_dequeue(&m->missing_procedures_to_check, &e); /**/) { - lbProcedure *p = lb_create_procedure(m, e, false); - if (!p->is_done.load(std::memory_order_relaxed)) { - debugf("Generate missing procedure: %.*s module %p\n", LIT(p->name), m); - } - mpsc_enqueue(&m->procedures_to_generate, p); - } for (lbProcedure *p = nullptr; mpsc_dequeue(&m->procedures_to_generate, &p); /**/) { lb_generate_procedure(m, p); } return 0; } -gb_internal void lb_generate_missing_procedures(lbGenerator *gen, bool do_threading) { - isize retry_count = 0; -retry:; - if (do_threading) { - for (auto const &entry : gen->modules) { - lbModule *m = entry.value; - // NOTE(bill): procedures may be added during generation - thread_pool_add_task(lb_generate_missing_procedures_to_check_worker_proc, m); - } - thread_pool_wait(); - } else { - for (auto const &entry : gen->modules) { - lbModule *m = entry.value; - // NOTE(bill): procedures may be added during generation - lb_generate_missing_procedures_to_check_worker_proc(m); - } - } - +gb_internal void lb_generate_queued_procedures(lbGenerator *gen, bool do_threading) { for (auto const &entry : gen->modules) { lbModule *m = entry.value; - if (m->missing_procedures_to_check.count != 0 || m->procedures_to_generate.count != 0) { - if (retry_count > gen->modules.count) { - GB_ASSERT(m->missing_procedures_to_check.count == 0 && m->procedures_to_generate.count == 0); - } - - retry_count += 1; - goto retry; + if (do_threading) { + thread_pool_add_task(lb_generate_queued_procedures_worker_proc, m); + } else { + lb_generate_queued_procedures_worker_proc(m); } - GB_ASSERT(m->missing_procedures_to_check.count == 0); - GB_ASSERT(m->procedures_to_generate.count == 0); + } + thread_pool_wait(); + + for (auto const &entry : gen->modules) { + GB_ASSERT(entry.value->procedures_to_generate.count == 0); } } @@ -4236,8 +4213,8 @@ gb_internal bool lb_generate_code(lbGenerator *gen) { lb_create_main_procedure(default_module, gen->startup_runtime, gen->cleanup_runtime); } - TIME_SECTION("LLVM Procedure Generation (missing)"); - lb_generate_missing_procedures(gen, do_threading); + TIME_SECTION("LLVM Procedure Generation (queued)"); + lb_generate_queued_procedures(gen, do_threading); if (gen->objc_names) { TIME_SECTION("Finalize objc names"); diff --git a/src/llvm_backend.hpp b/src/llvm_backend.hpp index 824fe2f88..7a3b12575 100644 --- a/src/llvm_backend.hpp +++ b/src/llvm_backend.hpp @@ -153,8 +153,6 @@ struct lbModule { StringMap procedures; PtrMap procedure_values; - MPSCQueue missing_procedures_to_check; - StringMap const_strings; String16Map const_string16s; diff --git a/src/llvm_backend_general.cpp b/src/llvm_backend_general.cpp index a2b2a44b9..9893debbf 100644 --- a/src/llvm_backend_general.cpp +++ b/src/llvm_backend_general.cpp @@ -165,7 +165,6 @@ gb_internal WORKER_TASK_PROC(lb_init_module_worker_proc) { array_init(&m->global_procedures_to_create, a, 0, 1024); array_init(&m->global_types_to_create, a, 0, 1024); array_init(&m->global_variables, a); - mpsc_init(&m->missing_procedures_to_check, a); map_init(&m->debug_values); string_map_init(&m->objc_classes); @@ -4086,25 +4085,16 @@ gb_internal lbValue lb_find_procedure_value_from_entity(lbModule *m, Entity *e) // NOTE(bill): Until the modules are generated in parallel, a procedure may be referenced before it is created // (e.g. an @(init) procedure by the startup procedure), but after that it was missed by the frontend - bool missing = gen->modules_in_parallel; - if (!ignore_body) { - if (missing) { - debugf("Missing Procedure (lb_find_procedure_value_from_entity): %.*s module %p\n", LIT(e->token.string), m); - } + GB_ASSERT_MSG(!gen->modules_in_parallel, "missing procedure '%.*s' (%s)", LIT(e->token.string), token_pos_to_string(e->token.pos)); mpsc_enqueue(&m->procedures_to_generate, proc); } else { rw_mutex_shared_lock(&other_module->values_mutex); auto *found = map_get(&other_module->values, e); rw_mutex_shared_unlock(&other_module->values_mutex); if (found == nullptr) { - if (missing) { - debugf("Missing Procedure (lb_find_procedure_value_from_entity): %.*s module %p\n", LIT(e->token.string), other_module); - // another module's context may only be used by the thread generating that module - mpsc_enqueue(&other_module->missing_procedures_to_check, e); - } else { - mpsc_enqueue(&other_module->procedures_to_generate, lb_create_procedure(other_module, e, false)); - } + GB_ASSERT_MSG(!gen->modules_in_parallel, "missing procedure '%.*s' (%s)", LIT(e->token.string), token_pos_to_string(e->token.pos)); + mpsc_enqueue(&other_module->procedures_to_generate, lb_create_procedure(other_module, e, false)); } } diff --git a/src/llvm_backend_stmt.cpp b/src/llvm_backend_stmt.cpp index d35b48835..eb51e6370 100644 --- a/src/llvm_backend_stmt.cpp +++ b/src/llvm_backend_stmt.cpp @@ -234,7 +234,8 @@ gb_internal void lb_build_constant_value_decl(lbProcedure *p, AstValueDecl *vd) lbValue *prev_value = string_map_get(&p->module->members, name); if (prev_value != nullptr) { // NOTE(bill): Don't do mutliple declarations in the IR - return; + lb_add_entity(p->module, e, *prev_value); + continue; } e->Procedure.link_name = name; From 733c3fdea73861109d6e7036dd475fb871006a66 Mon Sep 17 00:00:00 2001 From: gingerBill Date: Sat, 3 Oct 2026 22:31:40 +0100 Subject: [PATCH 192/215] Add to the tests the equal procedure dependencies test --- tests/issues/run.bat | 2 +- tests/issues/run.sh | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/issues/run.bat b/tests/issues/run.bat index 75d94c400..9c12b346d 100644 --- a/tests/issues/run.bat +++ b/tests/issues/run.bat @@ -99,7 +99,7 @@ clang -c ..\test_issue_sysv_abi.c -o test_issue_sysv_abi_c.o || exit /b ..\..\..\odin test ..\test_issue_fast_isel_lowering.odin %COMMON% || exit /b ..\..\..\odin test ..\test_issue_fast_isel_lowering.odin %COMMON% -o:none || exit /b ..\..\..\odin test ..\test_issue_equal_proc_dependencies.odin %COMMON% || exit /b -..\..\..\odin test ..\test_issue_equal_proc_dependencies.odin %COMMON% -build-mode:obj -show-debug-messages 2>&1 | find /i /c "missing procedure" | findstr /x "0" || exit /b +..\..\..\odin test ..\test_issue_equal_proc_dependencies.odin %COMMON% -build-mode:obj 2>&1 | find /i /c "Assertion Failure" | findstr /x "0" || exit /b @echo off diff --git a/tests/issues/run.sh b/tests/issues/run.sh index e14677895..c0684abeb 100755 --- a/tests/issues/run.sh +++ b/tests/issues/run.sh @@ -125,7 +125,7 @@ $ODIN test ../test_issue_omitted_field_union.odin $COMMON $ODIN test ../test_issue_fast_isel_lowering.odin $COMMON $ODIN test ../test_issue_fast_isel_lowering.odin $COMMON -o:none $ODIN test ../test_issue_equal_proc_dependencies.odin $COMMON -if [[ $($ODIN test ../test_issue_equal_proc_dependencies.odin $COMMON -build-mode:obj -show-debug-messages 2>&1 | grep -ci "missing procedure") -eq 0 ]]; then +if [[ $($ODIN test ../test_issue_equal_proc_dependencies.odin $COMMON -build-mode:obj 2>&1 | grep -ci "Assertion Failure") -eq 0 ]]; then echo "SUCCESSFUL 1/1" else echo "SUCCESSFUL 0/1" From 5a4b877beb336439044d3daa8903ad18b47e3f8b Mon Sep 17 00:00:00 2001 From: gingerBill Date: Sat, 3 Oct 2026 22:33:08 +0100 Subject: [PATCH 193/215] Only match the missing procedure assertion in the equal procedure dependencies issue test --- tests/issues/run.bat | 2 +- tests/issues/run.sh | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/issues/run.bat b/tests/issues/run.bat index 9c12b346d..5c459a910 100644 --- a/tests/issues/run.bat +++ b/tests/issues/run.bat @@ -99,7 +99,7 @@ clang -c ..\test_issue_sysv_abi.c -o test_issue_sysv_abi_c.o || exit /b ..\..\..\odin test ..\test_issue_fast_isel_lowering.odin %COMMON% || exit /b ..\..\..\odin test ..\test_issue_fast_isel_lowering.odin %COMMON% -o:none || exit /b ..\..\..\odin test ..\test_issue_equal_proc_dependencies.odin %COMMON% || exit /b -..\..\..\odin test ..\test_issue_equal_proc_dependencies.odin %COMMON% -build-mode:obj 2>&1 | find /i /c "Assertion Failure" | findstr /x "0" || exit /b +..\..\..\odin test ..\test_issue_equal_proc_dependencies.odin %COMMON% -build-mode:obj 2>&1 | find /i /c "missing procedure" | findstr /x "0" || exit /b @echo off diff --git a/tests/issues/run.sh b/tests/issues/run.sh index c0684abeb..c4596914c 100755 --- a/tests/issues/run.sh +++ b/tests/issues/run.sh @@ -125,7 +125,7 @@ $ODIN test ../test_issue_omitted_field_union.odin $COMMON $ODIN test ../test_issue_fast_isel_lowering.odin $COMMON $ODIN test ../test_issue_fast_isel_lowering.odin $COMMON -o:none $ODIN test ../test_issue_equal_proc_dependencies.odin $COMMON -if [[ $($ODIN test ../test_issue_equal_proc_dependencies.odin $COMMON -build-mode:obj 2>&1 | grep -ci "Assertion Failure") -eq 0 ]]; then +if [[ $($ODIN test ../test_issue_equal_proc_dependencies.odin $COMMON -build-mode:obj 2>&1 | grep -ci "missing procedure") -eq 0 ]]; then echo "SUCCESSFUL 1/1" else echo "SUCCESSFUL 0/1" From 66ccc1011c6e13e2a1ddba7ecd15cbf3bffd83bb Mon Sep 17 00:00:00 2001 From: Brad Lewis <22850972+BradLewis@users.noreply.github.com> Date: Sun, 4 Oct 2026 09:11:04 +1100 Subject: [PATCH 194/215] Fix odin parser assert with invalid for-in stmt --- core/odin/parser/parser.odin | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/core/odin/parser/parser.odin b/core/odin/parser/parser.odin index aabb52923..ff816319e 100644 --- a/core/odin/parser/parser.odin +++ b/core/odin/parser/parser.odin @@ -934,8 +934,7 @@ parse_for_stmt :: proc(p: ^Parser) -> ^ast.Stmt { next_token := peek_token(p) if next_token.kind == .In || next_token.kind == .Comma { cond = parse_simple_stmt(p, {.In}) - if as, ok := cond.derived_stmt.(^ast.Assign_Stmt); ok { - assert(as.op.kind == .In) + if as, ok := cond.derived_stmt.(^ast.Assign_Stmt); ok && as.op.kind == .In { is_range = true } break general_conds From 1396a36bd31cc81e90d3e5cd8cab0ca497455db5 Mon Sep 17 00:00:00 2001 From: gingerBill Date: Sat, 3 Oct 2026 23:25:17 +0100 Subject: [PATCH 195/215] Prefer `/OPT:NOICF` when using `-debug` on Windows to improve linking performance --- src/linker.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/linker.cpp b/src/linker.cpp index 519480826..c45aa4bd8 100644 --- a/src/linker.cpp +++ b/src/linker.cpp @@ -384,6 +384,10 @@ try_cross_linking:; if (build_context.ODIN_DEBUG) { link_settings = gb_string_append_fmt(link_settings, " /DEBUG"); + if (build_context.build_mode != BuildMode_StaticLibrary) { + // NOTE(bill): `/opt:ref` would also fold identical functions, which is slow and confuses the debugger + link_settings = gb_string_append_fmt(link_settings, " /OPT:NOICF"); + } } gbString object_files = gb_string_make(heap_allocator(), ""); From 55eecd010ab65b60666bdc06750e16425f6a6472 Mon Sep 17 00:00:00 2001 From: gingerBill Date: Sun, 4 Oct 2026 09:58:15 +0100 Subject: [PATCH 196/215] In a ternary if expr, large aggregate need to be selected through memory --- src/llvm_backend_expr.cpp | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/src/llvm_backend_expr.cpp b/src/llvm_backend_expr.cpp index a1e99e7b6..10ad9a367 100644 --- a/src/llvm_backend_expr.cpp +++ b/src/llvm_backend_expr.cpp @@ -4710,6 +4710,28 @@ gb_internal lbValue lb_build_expr_internal(lbProcedure *p, Ast *expr) { case_ast_node(te, TernaryIfExpr, expr); GB_ASSERT(te->y != nullptr); Type *type = default_type(type_of_expr(expr)); + LLVMTypeKind type_kind = LLVMGetTypeKind(lb_type(p->module, type)); + if ((type_kind == LLVMStructTypeKind || type_kind == LLVMArrayTypeKind) && type_size_of(type) > 64) { + // NOTE(bill): A large aggregate needs to be selected through memory + // as instruction selection splits a `phi` or `select` of it per field + lbAddr res = lb_add_local_generated(p, type, false); + + lbBlock *then = lb_create_block(p, "if.then"); + lbBlock *done = lb_create_block(p, "if.done"); + lbBlock *else_ = lb_create_block(p, "if.else"); + + lb_build_cond(p, te->cond, then, else_); + lb_start_block(p, then); + lb_addr_store(p, res, lb_emit_conv(p, lb_build_expr(p, te->x), type)); + lb_emit_jump(p, done); + + lb_start_block(p, else_); + lb_addr_store(p, res, lb_emit_conv(p, lb_build_expr(p, te->y), type)); + lb_emit_jump(p, done); + + lb_start_block(p, done); + return lb_addr_load(p, res); + } if (lb_is_expr_trivial(te->x) && lb_is_expr_trivial(te->y)) { lbValue cond = lb_build_expr(p, te->cond); lbValue x = lb_emit_conv(p, lb_build_expr(p, te->x), type); From 0ade92df563ef5493e95fcbdb90fadd978df3374 Mon Sep 17 00:00:00 2001 From: "DeadDonuts Corp." <80545411+staledonuts@users.noreply.github.com> Date: Sun, 4 Oct 2026 11:01:30 +0200 Subject: [PATCH 197/215] Fix glsl mix_vec4 and mix_dvec4 implementations Fix mix implementation typo bug. Line 763 and 766 never used the target value to progress y channel. --- core/math/linalg/glsl/linalg_glsl.odin | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/core/math/linalg/glsl/linalg_glsl.odin b/core/math/linalg/glsl/linalg_glsl.odin index 46ee7a6f7..b8d73fd0a 100644 --- a/core/math/linalg/glsl/linalg_glsl.odin +++ b/core/math/linalg/glsl/linalg_glsl.odin @@ -760,10 +760,10 @@ mix :: proc{ @(require_results) mix_f64 :: proc "c" (x, y, t: f64) -> f64 { return x*(1-t) + y*t } @(require_results) mix_vec2 :: proc "c" (x, y, t: vec2) -> vec2 { return {mix(x.x, y.x, t.x), mix(x.y, y.y, t.y)} } @(require_results) mix_vec3 :: proc "c" (x, y, t: vec3) -> vec3 { return {mix(x.x, y.x, t.x), mix(x.y, y.y, t.y), mix(x.z, y.z, t.z)} } -@(require_results) mix_vec4 :: proc "c" (x, y, t: vec4) -> vec4 { return {mix(x.x, y.x, t.x), mix(x.y, y.y, y.y), mix(x.z, y.z, t.z), mix(x.w, y.w, t.w)} } +@(require_results) mix_vec4 :: proc "c" (x, y, t: vec4) -> vec4 { return {mix(x.x, y.x, t.x), mix(x.y, y.y, t.y), mix(x.z, y.z, t.z), mix(x.w, y.w, t.w)} } @(require_results) mix_dvec2 :: proc "c" (x, y, t: dvec2) -> dvec2 { return {mix(x.x, y.x, t.x), mix(x.y, y.y, t.y)} } @(require_results) mix_dvec3 :: proc "c" (x, y, t: dvec3) -> dvec3 { return {mix(x.x, y.x, t.x), mix(x.y, y.y, t.y), mix(x.z, y.z, t.z)} } -@(require_results) mix_dvec4 :: proc "c" (x, y, t: dvec4) -> dvec4 { return {mix(x.x, y.x, t.x), mix(x.y, y.y, y.y), mix(x.z, y.z, t.z), mix(x.w, y.w, t.w)} } +@(require_results) mix_dvec4 :: proc "c" (x, y, t: dvec4) -> dvec4 { return {mix(x.x, y.x, t.x), mix(x.y, y.y, t.y), mix(x.z, y.z, t.z), mix(x.w, y.w, t.w)} } lerp :: proc{ lerp_f32, From 6fbc112088454cec05116a68b5c7dc9189751dd8 Mon Sep 17 00:00:00 2001 From: gingerBill Date: Sun, 4 Oct 2026 10:05:19 +0100 Subject: [PATCH 198/215] Lower more instructions for the fast instruction selector in LLVM --- src/llvm_backend.cpp | 100 ++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 98 insertions(+), 2 deletions(-) diff --git a/src/llvm_backend.cpp b/src/llvm_backend.cpp index 2d25e4703..89c9139d8 100644 --- a/src/llvm_backend.cpp +++ b/src/llvm_backend.cpp @@ -2820,6 +2820,98 @@ gb_internal bool lb_scalarize_aggregate_store(lbFastIselLowering *s, LLVMValueRe return true; } +// NOTE(bill): If a a constant has too many fields to store one at a time is set or copied from a constant instead +gb_internal void lb_lower_large_constant_store(lbFastIselLowering *s, LLVMValueRef store) { + lbModule *m = s->m; + LLVMValueRef value = LLVMGetOperand(store, 0); + LLVMValueRef ptr = LLVMGetOperand(store, 1); + LLVMTypeRef type = LLVMTypeOf(value); + + LLVMTargetDataRef data_layout = LLVMGetModuleDataLayout(m->mod); + unsigned alignment = gb_max(LLVMGetAlignment(store), 1u); + if (!LLVMIsAConstant(value) || lb_const_has_misaligned_pointer(data_layout, value, 0, alignment)) { + return; + } + + LLVMPositionBuilderBefore(s->builder, store); + LLVMSetCurrentDebugLocation2(s->builder, LLVMInstructionGetDebugLoc(store)); + + LLVMValueRef size = LLVMConstInt(LLVMInt64TypeInContext(m->ctx), LLVMStoreSizeOfType(data_layout, type), false); + if (LLVMIsNull(value)) { + LLVMBuildMemSet(s->builder, ptr, LLVMConstInt(LLVMInt8TypeInContext(m->ctx), 0, false), size, alignment); + LLVMInstructionEraseFromParent(store); + return; + } + + LLVMValueRef global = LLVMAddGlobal(m->mod, type, ""); + LLVMSetInitializer(global, value); + LLVMSetGlobalConstant(global, true); + LLVMSetAlignment(global, alignment); + + LLVMSetLinkage(global, LLVMPrivateLinkage); + LLVMSetUnnamedAddress(global, LLVMGlobalUnnamedAddr); + + LLVMBuildMemCpy(s->builder, ptr, alignment, global, alignment, size); + + LLVMInstructionEraseFromParent(store); +} + +// NOTE(bill): The fast instruction selector in LLVM cannot select a call to `memmove` nor to the floating point `minnum` and `maxnum`. +// To improve things we can them through a function of the module which calls them +gb_internal void lb_redirect_unselectable_call(lbFastIselLowering *s, LLVMValueRef call) { + lbModule *m = s->m; + + LLVMValueRef callee = LLVMGetCalledValue(call); + if (!LLVMIsAFunction(callee)) { + return; + } + size_t name_len = 0; + char const *name_text = LLVMGetValueName2(callee, &name_len); + String name = make_string(cast(u8 const *)name_text, name_len); + + LLVMTypeRef fn_type = LLVMGlobalGetValueType(callee); + if (LLVMGetCalledFunctionType(call) != fn_type || LLVMIsFunctionVarArg(fn_type)) { + return; + } + unsigned param_count = LLVMCountParamTypes(fn_type); + LLVMTypeKind return_kind = LLVMGetTypeKind(LLVMGetReturnType(fn_type)); + bool is_memmove = name == "memmove" && param_count == 3 && return_kind == LLVMPointerTypeKind; + bool is_minmax = (string_starts_with(name, str_lit("llvm.minnum.")) || + string_starts_with(name, str_lit("llvm.maxnum."))) && + (return_kind == LLVMFloatTypeKind || + return_kind == LLVMDoubleTypeKind); + if (!is_memmove && !is_minmax) { + return; + } + + gbString wrapper_name = gb_string_make(heap_allocator(), "__$fast_isel$"); + wrapper_name = gb_string_append_length(wrapper_name, name.text, name.len); + defer (gb_string_free(wrapper_name)); + + LLVMValueRef wrapper = LLVMGetNamedFunction(m->mod, wrapper_name); + defer (LLVMSetOperand(call, cast(unsigned)LLVMGetNumOperands(call) - 1, wrapper)); + + if (wrapper != nullptr) { + return; + } + + LLVMCallConv cc = cast(LLVMCallConv)LLVMGetFunctionCallConv(callee); + wrapper = LLVMAddFunction(m->mod, wrapper_name, fn_type); + LLVMSetLinkage(wrapper, LLVMInternalLinkage); + LLVMSetFunctionCallConv(wrapper, cc); + lb_add_attribute_to_proc(m, wrapper, "nounwind"); + + LLVMValueRef params[3] = {}; + LLVMGetParams(wrapper, params); + + LLVMPositionBuilderAtEnd(s->builder, LLVMAppendBasicBlockInContext(m->ctx, wrapper, "")); + LLVMSetCurrentDebugLocation2(s->builder, nullptr); + + LLVMValueRef inner = LLVMBuildCall2(s->builder, fn_type, callee, params, param_count, ""); + LLVMSetInstructionCallConv(inner, cc); + LLVMBuildRet(s->builder, inner); +} + gb_internal bool lb_is_aggregate_type(LLVMTypeRef type) { LLVMTypeKind kind = LLVMGetTypeKind(type); return kind == LLVMStructTypeKind || kind == LLVMArrayTypeKind; @@ -2986,7 +3078,8 @@ gb_internal void lb_lower_for_fast_isel(lbModule *m) { auto work = array_make(heap_allocator(), 0, 64); defer (array_free(&work)); - for (LLVMValueRef fn = LLVMGetFirstFunction(m->mod); fn != nullptr; fn = LLVMGetNextFunction(fn)) { + LLVMValueRef last_fn = LLVMGetLastFunction(m->mod); + for (LLVMValueRef fn = LLVMGetFirstFunction(m->mod); fn != nullptr; fn = fn == last_fn ? nullptr : LLVMGetNextFunction(fn)) { array_clear(&work); array_clear(&s.phis); @@ -2998,7 +3091,9 @@ gb_internal void lb_lower_for_fast_isel(lbModule *m) { } } for (LLVMValueRef store : work) { - lb_scalarize_aggregate_store(&s, store); + if (!lb_scalarize_aggregate_store(&s, store)) { + lb_lower_large_constant_store(&s, store); + } } // NOTE(bill): A field read out of an aggregate value is read where that aggregate came from @@ -3023,6 +3118,7 @@ gb_internal void lb_lower_for_fast_isel(lbModule *m) { } if (LLVMIsACallInst(i)) { lb_truncate_bool_arguments(&s, i); + lb_redirect_unselectable_call(&s, i); continue; } if (LLVMIsASwitchInst(i)) { From ddcf115f6f891aa50046577c2922340aa84744ed Mon Sep 17 00:00:00 2001 From: gingerBill Date: Sun, 4 Oct 2026 10:12:35 +0100 Subject: [PATCH 199/215] Implement the same large aggregate improvement for `or_else` --- src/llvm_backend_expr.cpp | 3 +-- src/llvm_backend_utility.cpp | 24 ++++++++++++++++++++++++ 2 files changed, 25 insertions(+), 2 deletions(-) diff --git a/src/llvm_backend_expr.cpp b/src/llvm_backend_expr.cpp index 10ad9a367..de9aee30b 100644 --- a/src/llvm_backend_expr.cpp +++ b/src/llvm_backend_expr.cpp @@ -4710,8 +4710,7 @@ gb_internal lbValue lb_build_expr_internal(lbProcedure *p, Ast *expr) { case_ast_node(te, TernaryIfExpr, expr); GB_ASSERT(te->y != nullptr); Type *type = default_type(type_of_expr(expr)); - LLVMTypeKind type_kind = LLVMGetTypeKind(lb_type(p->module, type)); - if ((type_kind == LLVMStructTypeKind || type_kind == LLVMArrayTypeKind) && type_size_of(type) > 64) { + if (lb_is_type_large_aggregate(p->module, type)) { // NOTE(bill): A large aggregate needs to be selected through memory // as instruction selection splits a `phi` or `select` of it per field lbAddr res = lb_add_local_generated(p, type, false); diff --git a/src/llvm_backend_utility.cpp b/src/llvm_backend_utility.cpp index aa33073c5..a4385c883 100644 --- a/src/llvm_backend_utility.cpp +++ b/src/llvm_backend_utility.cpp @@ -489,6 +489,11 @@ gb_internal bool lb_is_type_trivial(Type *type) { return false; } +gb_internal bool lb_is_type_large_aggregate(lbModule *m, Type *type) { + LLVMTypeKind kind = LLVMGetTypeKind(lb_type(m, type)); + return (kind == LLVMStructTypeKind || kind == LLVMArrayTypeKind) && type_size_of(type) > 64; +} + gb_internal bool lb_is_expr_trivial(Ast *e) { Type *type = default_type(type_of_expr(e)); if (lb_is_type_trivial(type)) { @@ -556,6 +561,25 @@ gb_internal lbValue lb_emit_or_else(lbProcedure *p, Ast *arg, Ast *else_expr, Ty } return {}; } else { + if (lb_is_type_large_aggregate(p->module, type)) { + lbAddr res = lb_add_local_generated(p, type, false); + + lbBlock *then = lb_create_block(p, "or_else.then"); + lbBlock *done = lb_create_block(p, "or_else.done"); + lbBlock *else_ = lb_create_block(p, "or_else.else"); + + lb_emit_if(p, lb_emit_try_has_value(p, rhs), then, else_); + lb_start_block(p, then); + lb_addr_store(p, res, lb_emit_conv(p, lhs, type)); + lb_emit_jump(p, done); + + lb_start_block(p, else_); + lb_addr_store(p, res, lb_emit_conv(p, lb_build_expr(p, else_expr), type)); + lb_emit_jump(p, done); + + lb_start_block(p, done); + return lb_addr_load(p, res); + } if (lb_is_type_trivial(type) && lb_is_expr_trivial(else_expr)) { lbValue has_value = lb_emit_try_has_value(p, rhs); lbValue then_val = lb_emit_conv(p, lhs, type); From ccf1ae4fe9d3988f3cdf6285dc9441bfd342f325 Mon Sep 17 00:00:00 2001 From: gingerBill Date: Sun, 4 Oct 2026 10:16:50 +0100 Subject: [PATCH 200/215] Move the lowering for LLVM's fast instruction selector to `llvm_backend_opt.cpp` --- src/llvm_backend.cpp | 621 ----------------------------------- src/llvm_backend.hpp | 3 + src/llvm_backend_general.cpp | 2 +- src/llvm_backend_opt.cpp | 619 ++++++++++++++++++++++++++++++++++ 4 files changed, 623 insertions(+), 622 deletions(-) diff --git a/src/llvm_backend.cpp b/src/llvm_backend.cpp index 89c9139d8..134b776aa 100644 --- a/src/llvm_backend.cpp +++ b/src/llvm_backend.cpp @@ -2546,627 +2546,6 @@ gb_internal bool lb_is_module_empty(lbModule *m) { return true; } -// NOTE(bill, 2026-10-03) -// -// LLVM's fast instruction selector cannot select a first class aggregate `load`, `store`, `insertvalue`, or `select`, -// and hands the rest of the block to SelectionDAG. -// SROA leaves many behind so it stores/loads the fields instead -enum { - LB_SCALARIZE_MAX_LEAVES = 32, - LB_SCALARIZE_MAX_DEPTH = 8, -}; - -struct lbAggregateLeaf { - unsigned path[LB_SCALARIZE_MAX_DEPTH]; - unsigned depth; -}; - -struct lbScalarizedPhi { - LLVMValueRef aggregate; - unsigned path[LB_SCALARIZE_MAX_DEPTH]; - unsigned depth; - LLVMValueRef field; - bool ok; -}; - -struct lbFastIselLowering { - lbModule * m; - LLVMBuilderRef builder; - LLVMValueRef store; - Array phis; -}; - -gb_internal i64 lb_aggregate_path_offset(LLVMTypeRef type, unsigned const *path, unsigned depth, LLVMTypeRef *leaf_type_) { - i64 offset = 0; - for (unsigned d = 0; d < depth; d++) { - if (LLVMGetTypeKind(type) == LLVMStructTypeKind) { - bool is_packed = LLVMIsPackedStruct(type); - i64 field_offset = 0; - for (unsigned i = 0; i <= path[d]; i++) { - LLVMTypeRef field = LLVMStructGetTypeAtIndex(type, i); - if (!is_packed) { - field_offset = llvm_align_formula(field_offset, lb_alignof(field)); - } - if (i == path[d]) { - type = field; - break; - } - field_offset += lb_sizeof(field); - } - offset += field_offset; - } else { - type = OdinLLVMGetArrayElementType(type); - offset += cast(i64)path[d] * lb_sizeof(type); - } - } - if (leaf_type_) *leaf_type_ = type; - return offset; -} - -gb_internal bool lb_aggregate_leaves(LLVMTypeRef type, unsigned *path, unsigned depth, lbAggregateLeaf *leaves, isize *leaf_count) { - LLVMTypeKind kind = LLVMGetTypeKind(type); - if (kind == LLVMStructTypeKind || kind == LLVMArrayTypeKind) { - if (depth >= LB_SCALARIZE_MAX_DEPTH) { - return false; - } - if (kind == LLVMStructTypeKind && LLVMIsOpaqueStruct(type)) { - return false; - } - unsigned count = kind == LLVMStructTypeKind ? LLVMCountStructElementTypes(type) : cast(unsigned)LLVMGetArrayLength(type); - for (unsigned i = 0; i < count; i++) { - path[depth] = i; - LLVMTypeRef elem = kind == LLVMStructTypeKind ? LLVMStructGetTypeAtIndex(type, i) : OdinLLVMGetArrayElementType(type); - if (!lb_aggregate_leaves(elem, path, depth+1, leaves, leaf_count)) { - return false; - } - } - return true; - } - - if (*leaf_count >= LB_SCALARIZE_MAX_LEAVES) { - return false; - } - - lbAggregateLeaf *leaf = &leaves[(*leaf_count)++]; - gb_memmove(leaf->path, path, depth*gb_size_of(unsigned)); - leaf->depth = depth; - return true; -} - -gb_internal unsigned lb_alignment_at_offset(unsigned alignment, i64 offset) { - unsigned a = gb_max(alignment, 1u); - while (offset % a != 0) { - a >>= 1; - } - return a; -} - -gb_internal LLVMValueRef lb_aggregate_field_gep(lbModule *m, LLVMBuilderRef b, LLVMTypeRef type, LLVMValueRef ptr, unsigned const *path, unsigned depth) { - LLVMValueRef indices[LB_SCALARIZE_MAX_DEPTH+1] = {}; - LLVMTypeRef i32 = LLVMInt32TypeInContext(m->ctx); - indices[0] = LLVMConstInt(i32, 0, false); - for (unsigned d = 0; d < depth; d++) { - indices[d+1] = LLVMConstInt(i32, path[d], false); - } - return LLVMBuildInBoundsGEP2(b, type, ptr, indices, depth+1, ""); -} - -// returns false if the field cannot be reached without an aggregate value, and sets `*field_` to nullptr when it is undefined -gb_internal bool lb_aggregate_field_value(lbFastIselLowering *s, LLVMValueRef v, unsigned const *path, unsigned depth, LLVMValueRef *field_) { - if (depth == 0) { - *field_ = (LLVMIsUndef(v) || LLVMIsPoison(v)) ? nullptr : v; - return true; - } - if (LLVMIsUndef(v) || LLVMIsPoison(v)) { - *field_ = nullptr; - return true; - } - - if (LLVMIsAConstant(v)) { - LLVMValueRef elem = LLVMGetAggregateElement(v, path[0]); - if (elem != nullptr) { - return lb_aggregate_field_value(s, elem, path+1, depth-1, field_); - } - } else if (LLVMIsAInsertValueInst(v)) { - unsigned n = LLVMGetNumIndices(v); - unsigned const *indices = LLVMGetIndices(v); - - unsigned k = 0; - while (k < n && k < depth && indices[k] == path[k]) { - k += 1; - } - - if (k == n) { - return lb_aggregate_field_value(s, LLVMGetOperand(v, 1), path+n, depth-n, field_); - } else if (k < depth) { - return lb_aggregate_field_value(s, LLVMGetOperand(v, 0), path, depth, field_); - } - return false; - } else if (LLVMIsAExtractValueInst(v)) { - unsigned n = LLVMGetNumIndices(v); - if (n + depth <= LB_SCALARIZE_MAX_DEPTH) { - unsigned full[LB_SCALARIZE_MAX_DEPTH]; - gb_memmove(full, LLVMGetIndices(v), n*gb_size_of(unsigned)); - gb_memmove(full+n, path, depth*gb_size_of(unsigned)); - return lb_aggregate_field_value(s, LLVMGetOperand(v, 0), full, n+depth, field_); - } - return false; - } else if (LLVMIsASelectInst(v)) { - LLVMValueRef x = nullptr; - LLVMValueRef y = nullptr; - if (!lb_aggregate_field_value(s, LLVMGetOperand(v, 1), path, depth, &x) || - !lb_aggregate_field_value(s, LLVMGetOperand(v, 2), path, depth, &y)) { - return false; - } - if (x == nullptr || y == nullptr) { - *field_ = x ? x : y; - return true; - } - LLVMPositionBuilderBefore(s->builder, s->store); - LLVMSetCurrentDebugLocation2(s->builder, LLVMInstructionGetDebugLoc(s->store)); - *field_ = LLVMBuildSelect(s->builder, LLVMGetOperand(v, 0), x, y, ""); - return true; - } else if (LLVMIsAPHINode(v)) { - for (lbScalarizedPhi const &e : s->phis) { - if (e.aggregate == v && - e.depth == depth && - gb_memcompare(e.path, path, depth*gb_size_of(unsigned)) == 0) { - *field_ = e.field; - return e.ok; - } - } - - LLVMTypeRef field_type = nullptr; - lb_aggregate_path_offset(LLVMTypeOf(v), path, depth, &field_type); - - LLVMPositionBuilderBefore(s->builder, v); - LLVMSetCurrentDebugLocation2(s->builder, nullptr); - - - // NOTE(bill): cached before its incoming values, as a loop reaches it again - isize index = s->phis.count; - lbScalarizedPhi entry = {}; - entry.aggregate = v; - gb_memmove(entry.path, path, depth*gb_size_of(unsigned)); - - LLVMValueRef phi = LLVMBuildPhi(s->builder, field_type, ""); - entry.depth = depth; - entry.field = phi; - entry.ok = true; - array_add(&s->phis, entry); - - LLVMValueRef saved_store = s->store; - bool ok = true; - unsigned incoming_count = LLVMCountIncoming(v); - for (unsigned k = 0; k < incoming_count; k++) { - LLVMBasicBlockRef block = LLVMGetIncomingBlock(v, k); - s->store = LLVMGetBasicBlockTerminator(block); - LLVMValueRef field = nullptr; - if (!lb_aggregate_field_value(s, LLVMGetIncomingValue(v, k), path, depth, &field)) { - ok = false; - field = nullptr; - } - if (field == nullptr) { - field = LLVMGetUndef(field_type); - } - LLVMAddIncoming(phi, &field, &block, 1); - } - s->store = saved_store; - s->phis[index].ok = ok; - *field_ = phi; - return ok; - } else if (LLVMIsALoadInst(v) && !LLVMGetVolatile(v) && LLVMGetOrdering(v) == LLVMAtomicOrderingNotAtomic) { - // NOTE(bill): Read the field where the aggregate was read, as the memory may change before the store - LLVMTypeRef type = LLVMTypeOf(v); - LLVMTypeRef field_type = nullptr; - i64 offset = lb_aggregate_path_offset(type, path, depth, &field_type); - - LLVMPositionBuilderBefore(s->builder, LLVMGetNextInstruction(v)); - LLVMSetCurrentDebugLocation2(s->builder, LLVMInstructionGetDebugLoc(v)); - - LLVMValueRef ptr = lb_aggregate_field_gep(s->m, s->builder, type, LLVMGetOperand(v, 0), path, depth); - LLVMValueRef field = LLVMBuildLoad2(s->builder, field_type, ptr, ""); - LLVMSetAlignment(field, lb_alignment_at_offset(LLVMGetAlignment(v), offset)); - - *field_ = field; - return true; - } - - if (depth == 1) { - LLVMPositionBuilderBefore(s->builder, s->store); - LLVMSetCurrentDebugLocation2(s->builder, LLVMInstructionGetDebugLoc(s->store)); - *field_ = LLVMBuildExtractValue(s->builder, v, path[0], ""); - return true; - } - return false; -} - -gb_internal bool lb_scalarize_aggregate_store(lbFastIselLowering *s, LLVMValueRef store) { - LLVMValueRef value = LLVMGetOperand(store, 0); - LLVMValueRef ptr = LLVMGetOperand(store, 1); - LLVMTypeRef type = LLVMTypeOf(value); - - lbAggregateLeaf leaves[LB_SCALARIZE_MAX_LEAVES] = {}; - isize leaf_count = 0; - unsigned path[LB_SCALARIZE_MAX_DEPTH] = {}; - - if (!lb_aggregate_leaves(type, path, 0, leaves, &leaf_count)) { - return false; - } - s->store = store; - - LLVMValueRef fields[LB_SCALARIZE_MAX_LEAVES] = {}; - for (isize i = 0; i < leaf_count; i++) { - if (!lb_aggregate_field_value(s, value, leaves[i].path, leaves[i].depth, &fields[i])) { - return false; - } - } - - unsigned alignment = LLVMGetAlignment(store); - - LLVMPositionBuilderBefore(s->builder, store); - LLVMSetCurrentDebugLocation2(s->builder, LLVMInstructionGetDebugLoc(store)); - - for (isize i = 0; i < leaf_count; i++) { - if (fields[i] == nullptr) { - continue; - } - i64 offset = lb_aggregate_path_offset(type, leaves[i].path, leaves[i].depth, nullptr); - LLVMValueRef field_ptr = lb_aggregate_field_gep(s->m, s->builder, type, ptr, leaves[i].path, leaves[i].depth); - LLVMValueRef field_store = LLVMBuildStore(s->builder, fields[i], field_ptr); - LLVMSetAlignment(field_store, lb_alignment_at_offset(alignment, offset)); - } - LLVMInstructionEraseFromParent(store); - return true; -} - -// NOTE(bill): If a a constant has too many fields to store one at a time is set or copied from a constant instead -gb_internal void lb_lower_large_constant_store(lbFastIselLowering *s, LLVMValueRef store) { - lbModule *m = s->m; - LLVMValueRef value = LLVMGetOperand(store, 0); - LLVMValueRef ptr = LLVMGetOperand(store, 1); - LLVMTypeRef type = LLVMTypeOf(value); - - LLVMTargetDataRef data_layout = LLVMGetModuleDataLayout(m->mod); - unsigned alignment = gb_max(LLVMGetAlignment(store), 1u); - if (!LLVMIsAConstant(value) || lb_const_has_misaligned_pointer(data_layout, value, 0, alignment)) { - return; - } - - LLVMPositionBuilderBefore(s->builder, store); - LLVMSetCurrentDebugLocation2(s->builder, LLVMInstructionGetDebugLoc(store)); - - LLVMValueRef size = LLVMConstInt(LLVMInt64TypeInContext(m->ctx), LLVMStoreSizeOfType(data_layout, type), false); - if (LLVMIsNull(value)) { - LLVMBuildMemSet(s->builder, ptr, LLVMConstInt(LLVMInt8TypeInContext(m->ctx), 0, false), size, alignment); - LLVMInstructionEraseFromParent(store); - return; - } - - LLVMValueRef global = LLVMAddGlobal(m->mod, type, ""); - LLVMSetInitializer(global, value); - LLVMSetGlobalConstant(global, true); - LLVMSetAlignment(global, alignment); - - LLVMSetLinkage(global, LLVMPrivateLinkage); - LLVMSetUnnamedAddress(global, LLVMGlobalUnnamedAddr); - - LLVMBuildMemCpy(s->builder, ptr, alignment, global, alignment, size); - - LLVMInstructionEraseFromParent(store); -} - -// NOTE(bill): The fast instruction selector in LLVM cannot select a call to `memmove` nor to the floating point `minnum` and `maxnum`. -// To improve things we can them through a function of the module which calls them -gb_internal void lb_redirect_unselectable_call(lbFastIselLowering *s, LLVMValueRef call) { - lbModule *m = s->m; - - LLVMValueRef callee = LLVMGetCalledValue(call); - if (!LLVMIsAFunction(callee)) { - return; - } - size_t name_len = 0; - char const *name_text = LLVMGetValueName2(callee, &name_len); - String name = make_string(cast(u8 const *)name_text, name_len); - - LLVMTypeRef fn_type = LLVMGlobalGetValueType(callee); - if (LLVMGetCalledFunctionType(call) != fn_type || LLVMIsFunctionVarArg(fn_type)) { - return; - } - unsigned param_count = LLVMCountParamTypes(fn_type); - LLVMTypeKind return_kind = LLVMGetTypeKind(LLVMGetReturnType(fn_type)); - bool is_memmove = name == "memmove" && param_count == 3 && return_kind == LLVMPointerTypeKind; - bool is_minmax = (string_starts_with(name, str_lit("llvm.minnum.")) || - string_starts_with(name, str_lit("llvm.maxnum."))) && - (return_kind == LLVMFloatTypeKind || - return_kind == LLVMDoubleTypeKind); - if (!is_memmove && !is_minmax) { - return; - } - - gbString wrapper_name = gb_string_make(heap_allocator(), "__$fast_isel$"); - wrapper_name = gb_string_append_length(wrapper_name, name.text, name.len); - defer (gb_string_free(wrapper_name)); - - LLVMValueRef wrapper = LLVMGetNamedFunction(m->mod, wrapper_name); - defer (LLVMSetOperand(call, cast(unsigned)LLVMGetNumOperands(call) - 1, wrapper)); - - if (wrapper != nullptr) { - return; - } - - LLVMCallConv cc = cast(LLVMCallConv)LLVMGetFunctionCallConv(callee); - wrapper = LLVMAddFunction(m->mod, wrapper_name, fn_type); - LLVMSetLinkage(wrapper, LLVMInternalLinkage); - LLVMSetFunctionCallConv(wrapper, cc); - lb_add_attribute_to_proc(m, wrapper, "nounwind"); - - LLVMValueRef params[3] = {}; - LLVMGetParams(wrapper, params); - - LLVMPositionBuilderAtEnd(s->builder, LLVMAppendBasicBlockInContext(m->ctx, wrapper, "")); - LLVMSetCurrentDebugLocation2(s->builder, nullptr); - - LLVMValueRef inner = LLVMBuildCall2(s->builder, fn_type, callee, params, param_count, ""); - LLVMSetInstructionCallConv(inner, cc); - LLVMBuildRet(s->builder, inner); -} - -gb_internal bool lb_is_aggregate_type(LLVMTypeRef type) { - LLVMTypeKind kind = LLVMGetTypeKind(type); - return kind == LLVMStructTypeKind || kind == LLVMArrayTypeKind; -} - -gb_internal bool lb_is_plain_access(LLVMValueRef inst) { - return !LLVMGetVolatile(inst) && LLVMGetOrdering(inst) == LLVMAtomicOrderingNotAtomic; -} - -gb_internal void lb_lower_bool_select(lbFastIselLowering *s, LLVMValueRef select) { - LLVMValueRef c = LLVMGetOperand(select, 0); - LLVMValueRef x = LLVMGetOperand(select, 1); - LLVMValueRef y = LLVMGetOperand(select, 2); - if (LLVMGetTypeKind(LLVMTypeOf(c)) != LLVMIntegerTypeKind) { - return; - } - LLVMPositionBuilderBefore(s->builder, select); - LLVMSetCurrentDebugLocation2(s->builder, LLVMInstructionGetDebugLoc(select)); - LLVMValueRef t = LLVMConstInt(LLVMTypeOf(c), 1, false); - - LLVMValueRef res = nullptr; - if (LLVMIsAConstantInt(x)) { - res = LLVMConstIntGetZExtValue(x) ? LLVMBuildOr(s->builder, c, y, "") : LLVMBuildAnd(s->builder, LLVMBuildXor(s->builder, c, t, ""), y, ""); - } else if (LLVMIsAConstantInt(y)) { - res = LLVMConstIntGetZExtValue(y) ? LLVMBuildOr(s->builder, LLVMBuildXor(s->builder, c, t, ""), x, "") : LLVMBuildAnd(s->builder, c, x, ""); - } else { - LLVMValueRef a = LLVMBuildAnd(s->builder, c, x, ""); - LLVMValueRef b = LLVMBuildAnd(s->builder, LLVMBuildXor(s->builder, c, t, ""), y, ""); - res = LLVMBuildOr(s->builder, a, b, ""); - } - LLVMReplaceAllUsesWith(select, res); - LLVMInstructionEraseFromParent(select); -} - -gb_internal void lb_truncate_bool_arguments(lbFastIselLowering *s, LLVMValueRef call) { - LLVMTypeRef i1 = LLVMInt1TypeInContext(s->m->ctx); - LLVMTypeRef i8 = LLVMInt8TypeInContext(s->m->ctx); - LLVMBasicBlockRef block = LLVMGetInstructionParent(call); - unsigned arg_count = LLVMGetNumArgOperands(call); - for (unsigned a = 0; a < arg_count; a++) { - LLVMValueRef arg = LLVMGetOperand(call, a); - if (LLVMTypeOf(arg) != i1 || LLVMIsAConstantInt(arg)) { - continue; - } - LLVMUseRef first_use = LLVMGetFirstUse(arg); - if (LLVMIsATruncInst(arg) && LLVMGetInstructionParent(arg) == block && - first_use != nullptr && LLVMGetNextUse(first_use) == nullptr) { - continue; - } - LLVMPositionBuilderBefore(s->builder, call); - LLVMSetCurrentDebugLocation2(s->builder, LLVMInstructionGetDebugLoc(call)); - LLVMValueRef byte = LLVMBuildZExt(s->builder, arg, i8, ""); - LLVMSetOperand(call, a, LLVMBuildTrunc(s->builder, byte, i1, "")); - } -} - -gb_internal void lb_lower_small_switch(lbFastIselLowering *s, LLVMValueRef sw) { - enum {MAX_CASES = 3}; - LLVMValueRef cond = LLVMGetOperand(sw, 0); - unsigned case_count = (cast(unsigned)LLVMGetNumOperands(sw) - 2) / 2; - if (case_count == 0 || case_count > MAX_CASES || LLVMGetIntTypeWidth(LLVMTypeOf(cond)) > 64) { - return; - } - - LLVMBasicBlockRef block = LLVMGetInstructionParent(sw); - LLVMBasicBlockRef next_block = LLVMGetNextBasicBlock(block); - - LLVMValueRef fn = LLVMGetBasicBlockParent(block); - LLVMMetadataRef loc = LLVMInstructionGetDebugLoc(sw); - - LLVMBasicBlockRef from[MAX_CASES+1] = {}; - LLVMBasicBlockRef to [MAX_CASES+1] = {}; - - LLVMBasicBlockRef curr = block; - - LLVMPositionBuilderBefore(s->builder, sw); - LLVMSetCurrentDebugLocation2(s->builder, loc); - - for (unsigned j = 0; j < case_count; j++) { - LLVMBasicBlockRef dest = LLVMGetSuccessor(sw, j+1); - LLVMBasicBlockRef else_block = LLVMGetSwitchDefaultDest(sw); - if (j+1 < case_count) { - if (next_block != nullptr) { - else_block = LLVMInsertBasicBlockInContext(s->m->ctx, next_block, ""); - } else { - else_block = LLVMAppendBasicBlockInContext(s->m->ctx, fn, ""); - } - } - - LLVMValueRef cmp = LLVMBuildICmp(s->builder, LLVMIntEQ, cond, LLVMGetOperand(sw, 2 + 2*j), ""); - LLVMBuildCondBr(s->builder, cmp, dest, else_block); - - from[j] = curr; - to[j] = dest; - - if (j+1 < case_count) { - curr = else_block; - LLVMPositionBuilderAtEnd(s->builder, curr); - LLVMSetCurrentDebugLocation2(s->builder, loc); - } - } - from[case_count] = curr; - to [case_count] = LLVMGetSwitchDefaultDest(sw); - LLVMInstructionEraseFromParent(sw); - - // the incoming entries for `block` become one for each new edge - for (unsigned e = 0; e <= case_count; e++) { - bool seen = false; - for (unsigned k = 0; k < e; k++) { - seen |= to[k] == to[e]; - } - if (seen) { - continue; - } - - LLVMBasicBlockRef dest = to[e]; - for (LLVMValueRef phi = LLVMGetFirstInstruction(dest); phi != nullptr && LLVMIsAPHINode(phi); /**/) { - LLVMValueRef next = LLVMGetNextInstruction(phi); - LLVMValueRef value_from_block = nullptr; - - unsigned incoming_count = LLVMCountIncoming(phi); - for (unsigned k = 0; k < incoming_count; k++) { - if (LLVMGetIncomingBlock(phi, k) == block) { - value_from_block = LLVMGetIncomingValue(phi, k); - } - } - - if (value_from_block != nullptr) { - LLVMPositionBuilderBefore(s->builder, phi); - LLVMSetCurrentDebugLocation2(s->builder, nullptr); - - LLVMValueRef new_phi = LLVMBuildPhi(s->builder, LLVMTypeOf(phi), ""); - for (unsigned k = 0; k < incoming_count; k++) { - LLVMBasicBlockRef incoming_block = LLVMGetIncomingBlock(phi, k); - if (incoming_block != block) { - LLVMValueRef incoming_value = LLVMGetIncomingValue(phi, k); - LLVMAddIncoming(new_phi, &incoming_value, &incoming_block, 1); - } - } - for (unsigned k = 0; k <= case_count; k++) { - if (to[k] == dest) { - LLVMAddIncoming(new_phi, &value_from_block, &from[k], 1); - } - } - LLVMReplaceAllUsesWith(phi, new_phi); - LLVMInstructionEraseFromParent(phi); - } - - phi = next; - } - } -} - -gb_internal void lb_lower_for_fast_isel(lbModule *m) { - lbFastIselLowering s = {}; - s.m = m; - - s.builder = LLVMCreateBuilderInContext(m->ctx); - defer (LLVMDisposeBuilder(s.builder)); - - array_init(&s.phis, heap_allocator()); - defer (array_free(&s.phis)); - - auto work = array_make(heap_allocator(), 0, 64); - defer (array_free(&work)); - - LLVMValueRef last_fn = LLVMGetLastFunction(m->mod); - for (LLVMValueRef fn = LLVMGetFirstFunction(m->mod); fn != nullptr; fn = fn == last_fn ? nullptr : LLVMGetNextFunction(fn)) { - array_clear(&work); - array_clear(&s.phis); - - for (LLVMBasicBlockRef bb = LLVMGetFirstBasicBlock(fn); bb != nullptr; bb = LLVMGetNextBasicBlock(bb)) { - for (LLVMValueRef i = LLVMGetFirstInstruction(bb); i != nullptr; i = LLVMGetNextInstruction(i)) { - if (LLVMIsAStoreInst(i) && lb_is_plain_access(i) && lb_is_aggregate_type(LLVMTypeOf(LLVMGetOperand(i, 0)))) { - array_add(&work, i); - } - } - } - for (LLVMValueRef store : work) { - if (!lb_scalarize_aggregate_store(&s, store)) { - lb_lower_large_constant_store(&s, store); - } - } - - // NOTE(bill): A field read out of an aggregate value is read where that aggregate came from - array_clear(&work); - for (LLVMBasicBlockRef bb = LLVMGetFirstBasicBlock(fn); bb != nullptr; bb = LLVMGetNextBasicBlock(bb)) { - for (LLVMValueRef i = LLVMGetFirstInstruction(bb); i != nullptr; i = LLVMGetNextInstruction(i)) { - if (LLVMIsAExtractValueInst(i) && !lb_is_aggregate_type(LLVMTypeOf(i))) { - array_add(&work, i); - } else if (LLVMIsASelectInst(i) && LLVMTypeOf(i) == LLVMInt1TypeInContext(m->ctx)) { - array_add(&work, i); - } else if (LLVMIsACallInst(i)) { - array_add(&work, i); - } else if (LLVMIsASwitchInst(i)) { - array_add(&work, i); - } - } - } - for (LLVMValueRef i : work) { - if (LLVMIsASelectInst(i)) { - lb_lower_bool_select(&s, i); - continue; - } - if (LLVMIsACallInst(i)) { - lb_truncate_bool_arguments(&s, i); - lb_redirect_unselectable_call(&s, i); - continue; - } - if (LLVMIsASwitchInst(i)) { - lb_lower_small_switch(&s, i); - continue; - } - LLVMValueRef agg = LLVMGetOperand(i, 0); - unsigned n = LLVMGetNumIndices(i); - if (n > LB_SCALARIZE_MAX_DEPTH) { - continue; - } - - if (!(LLVMIsAConstant(agg) || - LLVMIsAInsertValueInst(agg) || - LLVMIsASelectInst(agg) || - LLVMIsAPHINode(agg) || - (LLVMIsALoadInst(agg) && lb_is_plain_access(agg)))) { - continue; - } - - s.store = i; - - LLVMValueRef field = nullptr; - if (lb_aggregate_field_value(&s, agg, LLVMGetIndices(i), n, &field) && field != nullptr) { - LLVMReplaceAllUsesWith(i, field); - LLVMInstructionEraseFromParent(i); - } - } - - bool removed = true; - while (removed) { - removed = false; - for (LLVMBasicBlockRef bb = LLVMGetFirstBasicBlock(fn); bb != nullptr; bb = LLVMGetNextBasicBlock(bb)) { - for (LLVMValueRef i = LLVMGetFirstInstruction(bb); i != nullptr; /**/) { - LLVMValueRef next = LLVMGetNextInstruction(i); - if (LLVMGetFirstUse(i) == nullptr && - (LLVMIsAInsertValueInst(i) || LLVMIsAExtractValueInst(i) || LLVMIsASelectInst(i) || LLVMIsAPHINode(i) || - LLVMIsAGetElementPtrInst(i) || (LLVMIsALoadInst(i) && lb_is_plain_access(i)))) { - LLVMInstructionEraseFromParent(i); - removed = true; - } - i = next; - } - } - } - } -} - struct lbLLVMEmitWorker { LLVMTargetMachineRef target_machine; LLVMCodeGenFileType code_gen_file_type; diff --git a/src/llvm_backend.hpp b/src/llvm_backend.hpp index 7a3b12575..5bc9c95ff 100644 --- a/src/llvm_backend.hpp +++ b/src/llvm_backend.hpp @@ -630,6 +630,9 @@ gb_internal void lb_mem_copy_non_overlapping(lbProcedure *p, lbValue dst, lbValu gb_internal LLVMValueRef lb_mem_zero_ptr_internal(lbProcedure *p, LLVMValueRef ptr, LLVMValueRef len, unsigned alignment, bool is_volatile); gb_internal LLVMValueRef lb_mem_zero_ptr_internal(lbProcedure *p, LLVMValueRef ptr, usize len, unsigned alignment, bool is_volatile); +gb_internal bool lb_const_has_misaligned_pointer(LLVMTargetDataRef td, LLVMValueRef c, u64 offset, u64 base_align); +gb_internal void lb_add_attribute_to_proc(lbModule *m, LLVMValueRef proc_value, char const *name, u64 value=0); + gb_internal gb_inline i64 lb_max_zero_init_size(void) { if (build_context.metrics.os == TargetOs_darwin && build_context.metrics.arch == TargetArch_arm64) { // https://github.com/odin-lang/Odin/issues/6347 diff --git a/src/llvm_backend_general.cpp b/src/llvm_backend_general.cpp index 9893debbf..5d26220ac 100644 --- a/src/llvm_backend_general.cpp +++ b/src/llvm_backend_general.cpp @@ -3514,7 +3514,7 @@ gb_internal void lb_add_nocapture_proc_attribute_at_index(lbProcedure *p, isize LLVMAddAttributeAtIndex(p->value, cast(unsigned)index, lb_create_nocapture_attribute(p->module->ctx)); } -gb_internal void lb_add_attribute_to_proc(lbModule *m, LLVMValueRef proc_value, char const *name, u64 value=0) { +gb_internal void lb_add_attribute_to_proc(lbModule *m, LLVMValueRef proc_value, char const *name, u64 value) { LLVMAddAttributeAtIndex(proc_value, LLVMAttributeIndex_FunctionIndex, lb_create_enum_attribute(m->ctx, name, value)); } diff --git a/src/llvm_backend_opt.cpp b/src/llvm_backend_opt.cpp index 0f925301c..4df0cc27b 100644 --- a/src/llvm_backend_opt.cpp +++ b/src/llvm_backend_opt.cpp @@ -488,4 +488,623 @@ gb_internal void lb_run_remove_unused_globals_pass(lbModule *m) { } } +// NOTE(bill, 2026-10-03) +// +// LLVM's fast instruction selector cannot select a first class aggregate `load`, `store`, `insertvalue`, or `select`, +// and hands the rest of the block to SelectionDAG. +// SROA leaves many behind so it stores/loads the fields instead +enum { + LB_SCALARIZE_MAX_LEAVES = 32, + LB_SCALARIZE_MAX_DEPTH = 8, +}; +struct lbAggregateLeaf { + unsigned path[LB_SCALARIZE_MAX_DEPTH]; + unsigned depth; +}; + +struct lbScalarizedPhi { + LLVMValueRef aggregate; + unsigned path[LB_SCALARIZE_MAX_DEPTH]; + unsigned depth; + LLVMValueRef field; + bool ok; +}; + +struct lbFastIselLowering { + lbModule * m; + LLVMBuilderRef builder; + LLVMValueRef store; + Array phis; +}; + +gb_internal i64 lb_aggregate_path_offset(LLVMTypeRef type, unsigned const *path, unsigned depth, LLVMTypeRef *leaf_type_) { + i64 offset = 0; + for (unsigned d = 0; d < depth; d++) { + if (LLVMGetTypeKind(type) == LLVMStructTypeKind) { + bool is_packed = LLVMIsPackedStruct(type); + i64 field_offset = 0; + for (unsigned i = 0; i <= path[d]; i++) { + LLVMTypeRef field = LLVMStructGetTypeAtIndex(type, i); + if (!is_packed) { + field_offset = llvm_align_formula(field_offset, lb_alignof(field)); + } + if (i == path[d]) { + type = field; + break; + } + field_offset += lb_sizeof(field); + } + offset += field_offset; + } else { + type = OdinLLVMGetArrayElementType(type); + offset += cast(i64)path[d] * lb_sizeof(type); + } + } + if (leaf_type_) *leaf_type_ = type; + return offset; +} + +gb_internal bool lb_aggregate_leaves(LLVMTypeRef type, unsigned *path, unsigned depth, lbAggregateLeaf *leaves, isize *leaf_count) { + LLVMTypeKind kind = LLVMGetTypeKind(type); + if (kind == LLVMStructTypeKind || kind == LLVMArrayTypeKind) { + if (depth >= LB_SCALARIZE_MAX_DEPTH) { + return false; + } + if (kind == LLVMStructTypeKind && LLVMIsOpaqueStruct(type)) { + return false; + } + unsigned count = kind == LLVMStructTypeKind ? LLVMCountStructElementTypes(type) : cast(unsigned)LLVMGetArrayLength(type); + for (unsigned i = 0; i < count; i++) { + path[depth] = i; + LLVMTypeRef elem = kind == LLVMStructTypeKind ? LLVMStructGetTypeAtIndex(type, i) : OdinLLVMGetArrayElementType(type); + if (!lb_aggregate_leaves(elem, path, depth+1, leaves, leaf_count)) { + return false; + } + } + return true; + } + + if (*leaf_count >= LB_SCALARIZE_MAX_LEAVES) { + return false; + } + + lbAggregateLeaf *leaf = &leaves[(*leaf_count)++]; + gb_memmove(leaf->path, path, depth*gb_size_of(unsigned)); + leaf->depth = depth; + return true; +} + +gb_internal unsigned lb_aggregate_field_alignment(unsigned alignment, i64 offset) { + unsigned a = gb_max(alignment, 1u); + while (offset % a != 0) { + a >>= 1; + } + return a; +} + +gb_internal LLVMValueRef lb_aggregate_field_gep(lbModule *m, LLVMBuilderRef b, LLVMTypeRef type, LLVMValueRef ptr, unsigned const *path, unsigned depth) { + LLVMValueRef indices[LB_SCALARIZE_MAX_DEPTH+1] = {}; + LLVMTypeRef i32 = LLVMInt32TypeInContext(m->ctx); + indices[0] = LLVMConstInt(i32, 0, false); + for (unsigned d = 0; d < depth; d++) { + indices[d+1] = LLVMConstInt(i32, path[d], false); + } + return LLVMBuildInBoundsGEP2(b, type, ptr, indices, depth+1, ""); +} + +// returns false if the field cannot be reached without an aggregate value, and sets `*field_` to nullptr when it is undefined +gb_internal bool lb_aggregate_field_value(lbFastIselLowering *s, LLVMValueRef v, unsigned const *path, unsigned depth, LLVMValueRef *field_) { + if (depth == 0) { + *field_ = (LLVMIsUndef(v) || LLVMIsPoison(v)) ? nullptr : v; + return true; + } + if (LLVMIsUndef(v) || LLVMIsPoison(v)) { + *field_ = nullptr; + return true; + } + + if (LLVMIsAConstant(v)) { + LLVMValueRef elem = LLVMGetAggregateElement(v, path[0]); + if (elem != nullptr) { + return lb_aggregate_field_value(s, elem, path+1, depth-1, field_); + } + } else if (LLVMIsAInsertValueInst(v)) { + unsigned n = LLVMGetNumIndices(v); + unsigned const *indices = LLVMGetIndices(v); + + unsigned k = 0; + while (k < n && k < depth && indices[k] == path[k]) { + k += 1; + } + + if (k == n) { + return lb_aggregate_field_value(s, LLVMGetOperand(v, 1), path+n, depth-n, field_); + } else if (k < depth) { + return lb_aggregate_field_value(s, LLVMGetOperand(v, 0), path, depth, field_); + } + return false; + } else if (LLVMIsAExtractValueInst(v)) { + unsigned n = LLVMGetNumIndices(v); + if (n + depth <= LB_SCALARIZE_MAX_DEPTH) { + unsigned full[LB_SCALARIZE_MAX_DEPTH]; + gb_memmove(full, LLVMGetIndices(v), n*gb_size_of(unsigned)); + gb_memmove(full+n, path, depth*gb_size_of(unsigned)); + return lb_aggregate_field_value(s, LLVMGetOperand(v, 0), full, n+depth, field_); + } + return false; + } else if (LLVMIsASelectInst(v)) { + LLVMValueRef x = nullptr; + LLVMValueRef y = nullptr; + if (!lb_aggregate_field_value(s, LLVMGetOperand(v, 1), path, depth, &x) || + !lb_aggregate_field_value(s, LLVMGetOperand(v, 2), path, depth, &y)) { + return false; + } + if (x == nullptr || y == nullptr) { + *field_ = x ? x : y; + return true; + } + LLVMPositionBuilderBefore(s->builder, s->store); + LLVMSetCurrentDebugLocation2(s->builder, LLVMInstructionGetDebugLoc(s->store)); + *field_ = LLVMBuildSelect(s->builder, LLVMGetOperand(v, 0), x, y, ""); + return true; + } else if (LLVMIsAPHINode(v)) { + for (lbScalarizedPhi const &e : s->phis) { + if (e.aggregate == v && + e.depth == depth && + gb_memcompare(e.path, path, depth*gb_size_of(unsigned)) == 0) { + *field_ = e.field; + return e.ok; + } + } + + LLVMTypeRef field_type = nullptr; + lb_aggregate_path_offset(LLVMTypeOf(v), path, depth, &field_type); + + LLVMPositionBuilderBefore(s->builder, v); + LLVMSetCurrentDebugLocation2(s->builder, nullptr); + + + // NOTE(bill): cached before its incoming values, as a loop reaches it again + isize index = s->phis.count; + lbScalarizedPhi entry = {}; + entry.aggregate = v; + gb_memmove(entry.path, path, depth*gb_size_of(unsigned)); + + LLVMValueRef phi = LLVMBuildPhi(s->builder, field_type, ""); + entry.depth = depth; + entry.field = phi; + entry.ok = true; + array_add(&s->phis, entry); + + LLVMValueRef saved_store = s->store; + bool ok = true; + unsigned incoming_count = LLVMCountIncoming(v); + for (unsigned k = 0; k < incoming_count; k++) { + LLVMBasicBlockRef block = LLVMGetIncomingBlock(v, k); + s->store = LLVMGetBasicBlockTerminator(block); + LLVMValueRef field = nullptr; + if (!lb_aggregate_field_value(s, LLVMGetIncomingValue(v, k), path, depth, &field)) { + ok = false; + field = nullptr; + } + if (field == nullptr) { + field = LLVMGetUndef(field_type); + } + LLVMAddIncoming(phi, &field, &block, 1); + } + s->store = saved_store; + s->phis[index].ok = ok; + *field_ = phi; + return ok; + } else if (LLVMIsALoadInst(v) && !LLVMGetVolatile(v) && LLVMGetOrdering(v) == LLVMAtomicOrderingNotAtomic) { + // NOTE(bill): Read the field where the aggregate was read, as the memory may change before the store + LLVMTypeRef type = LLVMTypeOf(v); + LLVMTypeRef field_type = nullptr; + i64 offset = lb_aggregate_path_offset(type, path, depth, &field_type); + + LLVMPositionBuilderBefore(s->builder, LLVMGetNextInstruction(v)); + LLVMSetCurrentDebugLocation2(s->builder, LLVMInstructionGetDebugLoc(v)); + + LLVMValueRef ptr = lb_aggregate_field_gep(s->m, s->builder, type, LLVMGetOperand(v, 0), path, depth); + LLVMValueRef field = LLVMBuildLoad2(s->builder, field_type, ptr, ""); + LLVMSetAlignment(field, lb_aggregate_field_alignment(LLVMGetAlignment(v), offset)); + + *field_ = field; + return true; + } + + if (depth == 1) { + LLVMPositionBuilderBefore(s->builder, s->store); + LLVMSetCurrentDebugLocation2(s->builder, LLVMInstructionGetDebugLoc(s->store)); + *field_ = LLVMBuildExtractValue(s->builder, v, path[0], ""); + return true; + } + return false; +} + +gb_internal bool lb_scalarize_aggregate_store(lbFastIselLowering *s, LLVMValueRef store) { + LLVMValueRef value = LLVMGetOperand(store, 0); + LLVMValueRef ptr = LLVMGetOperand(store, 1); + LLVMTypeRef type = LLVMTypeOf(value); + + lbAggregateLeaf leaves[LB_SCALARIZE_MAX_LEAVES] = {}; + isize leaf_count = 0; + unsigned path[LB_SCALARIZE_MAX_DEPTH] = {}; + + if (!lb_aggregate_leaves(type, path, 0, leaves, &leaf_count)) { + return false; + } + s->store = store; + + LLVMValueRef fields[LB_SCALARIZE_MAX_LEAVES] = {}; + for (isize i = 0; i < leaf_count; i++) { + if (!lb_aggregate_field_value(s, value, leaves[i].path, leaves[i].depth, &fields[i])) { + return false; + } + } + + unsigned alignment = LLVMGetAlignment(store); + + LLVMPositionBuilderBefore(s->builder, store); + LLVMSetCurrentDebugLocation2(s->builder, LLVMInstructionGetDebugLoc(store)); + + for (isize i = 0; i < leaf_count; i++) { + if (fields[i] == nullptr) { + continue; + } + i64 offset = lb_aggregate_path_offset(type, leaves[i].path, leaves[i].depth, nullptr); + LLVMValueRef field_ptr = lb_aggregate_field_gep(s->m, s->builder, type, ptr, leaves[i].path, leaves[i].depth); + LLVMValueRef field_store = LLVMBuildStore(s->builder, fields[i], field_ptr); + LLVMSetAlignment(field_store, lb_aggregate_field_alignment(alignment, offset)); + } + LLVMInstructionEraseFromParent(store); + return true; +} + +// NOTE(bill): If a a constant has too many fields to store one at a time is set or copied from a constant instead +gb_internal void lb_lower_large_constant_store(lbFastIselLowering *s, LLVMValueRef store) { + lbModule *m = s->m; + LLVMValueRef value = LLVMGetOperand(store, 0); + LLVMValueRef ptr = LLVMGetOperand(store, 1); + LLVMTypeRef type = LLVMTypeOf(value); + + LLVMTargetDataRef data_layout = LLVMGetModuleDataLayout(m->mod); + unsigned alignment = gb_max(LLVMGetAlignment(store), 1u); + if (!LLVMIsAConstant(value) || lb_const_has_misaligned_pointer(data_layout, value, 0, alignment)) { + return; + } + + LLVMPositionBuilderBefore(s->builder, store); + LLVMSetCurrentDebugLocation2(s->builder, LLVMInstructionGetDebugLoc(store)); + + LLVMValueRef size = LLVMConstInt(LLVMInt64TypeInContext(m->ctx), LLVMStoreSizeOfType(data_layout, type), false); + if (LLVMIsNull(value)) { + LLVMBuildMemSet(s->builder, ptr, LLVMConstInt(LLVMInt8TypeInContext(m->ctx), 0, false), size, alignment); + LLVMInstructionEraseFromParent(store); + return; + } + + LLVMValueRef global = LLVMAddGlobal(m->mod, type, ""); + LLVMSetInitializer(global, value); + LLVMSetGlobalConstant(global, true); + LLVMSetAlignment(global, alignment); + + LLVMSetLinkage(global, LLVMPrivateLinkage); + LLVMSetUnnamedAddress(global, LLVMGlobalUnnamedAddr); + + LLVMBuildMemCpy(s->builder, ptr, alignment, global, alignment, size); + + LLVMInstructionEraseFromParent(store); +} + +// NOTE(bill): The fast instruction selector in LLVM cannot select a call to `memmove` nor to the floating point `minnum` and `maxnum`. +// To improve things we can them through a function of the module which calls them +gb_internal void lb_redirect_unselectable_call(lbFastIselLowering *s, LLVMValueRef call) { + lbModule *m = s->m; + + LLVMValueRef callee = LLVMGetCalledValue(call); + if (!LLVMIsAFunction(callee)) { + return; + } + size_t name_len = 0; + char const *name_text = LLVMGetValueName2(callee, &name_len); + String name = make_string(cast(u8 const *)name_text, name_len); + + LLVMTypeRef fn_type = LLVMGlobalGetValueType(callee); + if (LLVMGetCalledFunctionType(call) != fn_type || LLVMIsFunctionVarArg(fn_type)) { + return; + } + unsigned param_count = LLVMCountParamTypes(fn_type); + LLVMTypeKind return_kind = LLVMGetTypeKind(LLVMGetReturnType(fn_type)); + bool is_memmove = name == "memmove" && param_count == 3 && return_kind == LLVMPointerTypeKind; + bool is_minmax = (string_starts_with(name, str_lit("llvm.minnum.")) || + string_starts_with(name, str_lit("llvm.maxnum."))) && + (return_kind == LLVMFloatTypeKind || + return_kind == LLVMDoubleTypeKind); + if (!is_memmove && !is_minmax) { + return; + } + + gbString wrapper_name = gb_string_make(heap_allocator(), "__$fast_isel$"); + wrapper_name = gb_string_append_length(wrapper_name, name.text, name.len); + defer (gb_string_free(wrapper_name)); + + LLVMValueRef wrapper = LLVMGetNamedFunction(m->mod, wrapper_name); + defer (LLVMSetOperand(call, cast(unsigned)LLVMGetNumOperands(call) - 1, wrapper)); + + if (wrapper != nullptr) { + return; + } + + LLVMCallConv cc = cast(LLVMCallConv)LLVMGetFunctionCallConv(callee); + wrapper = LLVMAddFunction(m->mod, wrapper_name, fn_type); + LLVMSetLinkage(wrapper, LLVMInternalLinkage); + LLVMSetFunctionCallConv(wrapper, cc); + lb_add_attribute_to_proc(m, wrapper, "nounwind"); + + LLVMValueRef params[3] = {}; + LLVMGetParams(wrapper, params); + + LLVMPositionBuilderAtEnd(s->builder, LLVMAppendBasicBlockInContext(m->ctx, wrapper, "")); + LLVMSetCurrentDebugLocation2(s->builder, nullptr); + + LLVMValueRef inner = LLVMBuildCall2(s->builder, fn_type, callee, params, param_count, ""); + LLVMSetInstructionCallConv(inner, cc); + LLVMBuildRet(s->builder, inner); +} + +gb_internal bool lb_is_aggregate_type(LLVMTypeRef type) { + LLVMTypeKind kind = LLVMGetTypeKind(type); + return kind == LLVMStructTypeKind || kind == LLVMArrayTypeKind; +} + +gb_internal bool lb_is_plain_access(LLVMValueRef inst) { + return !LLVMGetVolatile(inst) && LLVMGetOrdering(inst) == LLVMAtomicOrderingNotAtomic; +} + +gb_internal void lb_lower_bool_select(lbFastIselLowering *s, LLVMValueRef select) { + LLVMValueRef c = LLVMGetOperand(select, 0); + LLVMValueRef x = LLVMGetOperand(select, 1); + LLVMValueRef y = LLVMGetOperand(select, 2); + if (LLVMGetTypeKind(LLVMTypeOf(c)) != LLVMIntegerTypeKind) { + return; + } + LLVMPositionBuilderBefore(s->builder, select); + LLVMSetCurrentDebugLocation2(s->builder, LLVMInstructionGetDebugLoc(select)); + LLVMValueRef t = LLVMConstInt(LLVMTypeOf(c), 1, false); + + LLVMValueRef res = nullptr; + if (LLVMIsAConstantInt(x)) { + res = LLVMConstIntGetZExtValue(x) ? LLVMBuildOr(s->builder, c, y, "") : LLVMBuildAnd(s->builder, LLVMBuildXor(s->builder, c, t, ""), y, ""); + } else if (LLVMIsAConstantInt(y)) { + res = LLVMConstIntGetZExtValue(y) ? LLVMBuildOr(s->builder, LLVMBuildXor(s->builder, c, t, ""), x, "") : LLVMBuildAnd(s->builder, c, x, ""); + } else { + LLVMValueRef a = LLVMBuildAnd(s->builder, c, x, ""); + LLVMValueRef b = LLVMBuildAnd(s->builder, LLVMBuildXor(s->builder, c, t, ""), y, ""); + res = LLVMBuildOr(s->builder, a, b, ""); + } + LLVMReplaceAllUsesWith(select, res); + LLVMInstructionEraseFromParent(select); +} + +gb_internal void lb_truncate_bool_arguments(lbFastIselLowering *s, LLVMValueRef call) { + LLVMTypeRef i1 = LLVMInt1TypeInContext(s->m->ctx); + LLVMTypeRef i8 = LLVMInt8TypeInContext(s->m->ctx); + LLVMBasicBlockRef block = LLVMGetInstructionParent(call); + unsigned arg_count = LLVMGetNumArgOperands(call); + for (unsigned a = 0; a < arg_count; a++) { + LLVMValueRef arg = LLVMGetOperand(call, a); + if (LLVMTypeOf(arg) != i1 || LLVMIsAConstantInt(arg)) { + continue; + } + LLVMUseRef first_use = LLVMGetFirstUse(arg); + if (LLVMIsATruncInst(arg) && LLVMGetInstructionParent(arg) == block && + first_use != nullptr && LLVMGetNextUse(first_use) == nullptr) { + continue; + } + LLVMPositionBuilderBefore(s->builder, call); + LLVMSetCurrentDebugLocation2(s->builder, LLVMInstructionGetDebugLoc(call)); + LLVMValueRef byte = LLVMBuildZExt(s->builder, arg, i8, ""); + LLVMSetOperand(call, a, LLVMBuildTrunc(s->builder, byte, i1, "")); + } +} + +gb_internal void lb_lower_small_switch(lbFastIselLowering *s, LLVMValueRef sw) { + enum {MAX_CASES = 3}; + LLVMValueRef cond = LLVMGetOperand(sw, 0); + unsigned case_count = (cast(unsigned)LLVMGetNumOperands(sw) - 2) / 2; + if (case_count == 0 || case_count > MAX_CASES || LLVMGetIntTypeWidth(LLVMTypeOf(cond)) > 64) { + return; + } + + LLVMBasicBlockRef block = LLVMGetInstructionParent(sw); + LLVMBasicBlockRef next_block = LLVMGetNextBasicBlock(block); + + LLVMValueRef fn = LLVMGetBasicBlockParent(block); + LLVMMetadataRef loc = LLVMInstructionGetDebugLoc(sw); + + LLVMBasicBlockRef from[MAX_CASES+1] = {}; + LLVMBasicBlockRef to [MAX_CASES+1] = {}; + + LLVMBasicBlockRef curr = block; + + LLVMPositionBuilderBefore(s->builder, sw); + LLVMSetCurrentDebugLocation2(s->builder, loc); + + for (unsigned j = 0; j < case_count; j++) { + LLVMBasicBlockRef dest = LLVMGetSuccessor(sw, j+1); + LLVMBasicBlockRef else_block = LLVMGetSwitchDefaultDest(sw); + if (j+1 < case_count) { + if (next_block != nullptr) { + else_block = LLVMInsertBasicBlockInContext(s->m->ctx, next_block, ""); + } else { + else_block = LLVMAppendBasicBlockInContext(s->m->ctx, fn, ""); + } + } + + LLVMValueRef cmp = LLVMBuildICmp(s->builder, LLVMIntEQ, cond, LLVMGetOperand(sw, 2 + 2*j), ""); + LLVMBuildCondBr(s->builder, cmp, dest, else_block); + + from[j] = curr; + to[j] = dest; + + if (j+1 < case_count) { + curr = else_block; + LLVMPositionBuilderAtEnd(s->builder, curr); + LLVMSetCurrentDebugLocation2(s->builder, loc); + } + } + from[case_count] = curr; + to [case_count] = LLVMGetSwitchDefaultDest(sw); + LLVMInstructionEraseFromParent(sw); + + // the incoming entries for `block` become one for each new edge + for (unsigned e = 0; e <= case_count; e++) { + bool seen = false; + for (unsigned k = 0; k < e; k++) { + seen |= to[k] == to[e]; + } + if (seen) { + continue; + } + + LLVMBasicBlockRef dest = to[e]; + for (LLVMValueRef phi = LLVMGetFirstInstruction(dest); phi != nullptr && LLVMIsAPHINode(phi); /**/) { + LLVMValueRef next = LLVMGetNextInstruction(phi); + LLVMValueRef value_from_block = nullptr; + + unsigned incoming_count = LLVMCountIncoming(phi); + for (unsigned k = 0; k < incoming_count; k++) { + if (LLVMGetIncomingBlock(phi, k) == block) { + value_from_block = LLVMGetIncomingValue(phi, k); + } + } + + if (value_from_block != nullptr) { + LLVMPositionBuilderBefore(s->builder, phi); + LLVMSetCurrentDebugLocation2(s->builder, nullptr); + + LLVMValueRef new_phi = LLVMBuildPhi(s->builder, LLVMTypeOf(phi), ""); + for (unsigned k = 0; k < incoming_count; k++) { + LLVMBasicBlockRef incoming_block = LLVMGetIncomingBlock(phi, k); + if (incoming_block != block) { + LLVMValueRef incoming_value = LLVMGetIncomingValue(phi, k); + LLVMAddIncoming(new_phi, &incoming_value, &incoming_block, 1); + } + } + for (unsigned k = 0; k <= case_count; k++) { + if (to[k] == dest) { + LLVMAddIncoming(new_phi, &value_from_block, &from[k], 1); + } + } + LLVMReplaceAllUsesWith(phi, new_phi); + LLVMInstructionEraseFromParent(phi); + } + + phi = next; + } + } +} + +gb_internal void lb_lower_for_fast_isel(lbModule *m) { + lbFastIselLowering s = {}; + s.m = m; + + s.builder = LLVMCreateBuilderInContext(m->ctx); + defer (LLVMDisposeBuilder(s.builder)); + + array_init(&s.phis, heap_allocator()); + defer (array_free(&s.phis)); + + auto work = array_make(heap_allocator(), 0, 64); + defer (array_free(&work)); + + LLVMValueRef last_fn = LLVMGetLastFunction(m->mod); + for (LLVMValueRef fn = LLVMGetFirstFunction(m->mod); fn != nullptr; fn = fn == last_fn ? nullptr : LLVMGetNextFunction(fn)) { + array_clear(&work); + array_clear(&s.phis); + + for (LLVMBasicBlockRef bb = LLVMGetFirstBasicBlock(fn); bb != nullptr; bb = LLVMGetNextBasicBlock(bb)) { + for (LLVMValueRef i = LLVMGetFirstInstruction(bb); i != nullptr; i = LLVMGetNextInstruction(i)) { + if (LLVMIsAStoreInst(i) && lb_is_plain_access(i) && lb_is_aggregate_type(LLVMTypeOf(LLVMGetOperand(i, 0)))) { + array_add(&work, i); + } + } + } + for (LLVMValueRef store : work) { + if (!lb_scalarize_aggregate_store(&s, store)) { + lb_lower_large_constant_store(&s, store); + } + } + + // NOTE(bill): A field read out of an aggregate value is read where that aggregate came from + array_clear(&work); + for (LLVMBasicBlockRef bb = LLVMGetFirstBasicBlock(fn); bb != nullptr; bb = LLVMGetNextBasicBlock(bb)) { + for (LLVMValueRef i = LLVMGetFirstInstruction(bb); i != nullptr; i = LLVMGetNextInstruction(i)) { + if (LLVMIsAExtractValueInst(i) && !lb_is_aggregate_type(LLVMTypeOf(i))) { + array_add(&work, i); + } else if (LLVMIsASelectInst(i) && LLVMTypeOf(i) == LLVMInt1TypeInContext(m->ctx)) { + array_add(&work, i); + } else if (LLVMIsACallInst(i)) { + array_add(&work, i); + } else if (LLVMIsASwitchInst(i)) { + array_add(&work, i); + } + } + } + for (LLVMValueRef i : work) { + if (LLVMIsASelectInst(i)) { + lb_lower_bool_select(&s, i); + continue; + } + if (LLVMIsACallInst(i)) { + lb_truncate_bool_arguments(&s, i); + lb_redirect_unselectable_call(&s, i); + continue; + } + if (LLVMIsASwitchInst(i)) { + lb_lower_small_switch(&s, i); + continue; + } + LLVMValueRef agg = LLVMGetOperand(i, 0); + unsigned n = LLVMGetNumIndices(i); + if (n > LB_SCALARIZE_MAX_DEPTH) { + continue; + } + + if (!(LLVMIsAConstant(agg) || + LLVMIsAInsertValueInst(agg) || + LLVMIsASelectInst(agg) || + LLVMIsAPHINode(agg) || + (LLVMIsALoadInst(agg) && lb_is_plain_access(agg)))) { + continue; + } + + s.store = i; + + LLVMValueRef field = nullptr; + if (lb_aggregate_field_value(&s, agg, LLVMGetIndices(i), n, &field) && field != nullptr) { + LLVMReplaceAllUsesWith(i, field); + LLVMInstructionEraseFromParent(i); + } + } + + bool removed = true; + while (removed) { + removed = false; + for (LLVMBasicBlockRef bb = LLVMGetFirstBasicBlock(fn); bb != nullptr; bb = LLVMGetNextBasicBlock(bb)) { + for (LLVMValueRef i = LLVMGetFirstInstruction(bb); i != nullptr; /**/) { + LLVMValueRef next = LLVMGetNextInstruction(i); + if (LLVMGetFirstUse(i) == nullptr && + (LLVMIsAInsertValueInst(i) || LLVMIsAExtractValueInst(i) || LLVMIsASelectInst(i) || LLVMIsAPHINode(i) || + LLVMIsAGetElementPtrInst(i) || (LLVMIsALoadInst(i) && lb_is_plain_access(i)))) { + LLVMInstructionEraseFromParent(i); + removed = true; + } + i = next; + } + } + } + } +} From c7de0b9e36195f5b6ae78a84edb7b087070f71a3 Mon Sep 17 00:00:00 2001 From: gingerBill Date: Sun, 4 Oct 2026 10:48:53 +0100 Subject: [PATCH 201/215] Copy a constant built in a local of its own rather than loading and storing it, and use a constant slice's backing array directly --- src/llvm_backend_const.cpp | 41 ++++++++++++++++++++++---------------- 1 file changed, 24 insertions(+), 17 deletions(-) diff --git a/src/llvm_backend_const.cpp b/src/llvm_backend_const.cpp index 7eda9515d..b7b2a65f2 100644 --- a/src/llvm_backend_const.cpp +++ b/src/llvm_backend_const.cpp @@ -524,6 +524,21 @@ gb_internal lbValue lb_emit_source_code_location_as_global(lbProcedure *p, Ast * +// NOTE(bill): Constants which cannot be an LLVM constant were built in a local of their own +// which was copied from rather than loaded and stored as a first class aggregate +gb_internal void lb_store_local_constant(lbProcedure *p, LLVMValueRef dst, LLVMValueRef value) { + if (!LLVMIsALoadInst(value) || !LLVMIsAAllocaInst(LLVMGetOperand(value, 0))) { + LLVMBuildStore(p->builder, value, dst); + return; + } + LLVMValueRef src = LLVMGetOperand(value, 0); + LLVMTypeRef type = LLVMTypeOf(value); + LLVMValueRef size = LLVMConstInt(lb_type(p->module, t_int), lb_sizeof(type), false); + + unsigned dst_alignment = LLVMABIAlignmentOfType(LLVMGetModuleDataLayout(p->module->mod), type); + LLVMBuildMemCpy(p->builder, dst, dst_alignment, src, lb_try_get_alignment(src, 1), size); +} + gb_internal LLVMValueRef lb_build_constant_array_values(lbModule *m, Type *type, Type *elem_type, isize count, LLVMValueRef *values, lbConstContext cc) { if (cc.allow_local) { cc.is_rodata = false; @@ -552,7 +567,7 @@ gb_internal LLVMValueRef lb_build_constant_array_values(lbModule *m, Type *type, if (is_type_proc(elem_type)) { values[i] = LLVMConstPointerCast(values[i], llvm_elem_type); } - LLVMBuildStore(p->builder, values[i], elem.value); + lb_store_local_constant(p, elem.value, values[i]); } return lb_addr_load(p, v).value; } @@ -1141,6 +1156,12 @@ gb_internal lbValue lb_const_value(lbModule *m, Type *type, ExactValue value, lb local_copy, alignment, LLVMConstInt(lb_type(m, t_int), type_size_of(t), false) ); + } else if (LLVMIsALoadInst(backing_array.value) && LLVMIsAAllocaInst(LLVMGetOperand(backing_array.value, 0)) && + LLVMGetFirstUse(backing_array.value) == nullptr) { + // NOTE(bill): the backing data was built in a local of its own which the slice uses rather than a copy of it + array_data = LLVMGetOperand(backing_array.value, 0); + LLVMSetAlignment(array_data, gb_max(LLVMGetAlignment(array_data), alignment)); + LLVMInstructionEraseFromParent(backing_array.value); } else { array_data = llvm_alloca(p, LLVMTypeOf(backing_array.value), alignment); LLVMBuildStore(p->builder, backing_array.value, array_data); @@ -2166,13 +2187,7 @@ gb_internal lbValue lb_const_value(lbModule *m, Type *type, ExactValue value, lb LLVMValueRef dst = LLVMBuildGEP2(p->builder, field_llvm_type, ptr, indices, idx_list_len+1, ""); dst = LLVMBuildPointerCast(p->builder, dst, lb_type(m, alloc_type_pointer(tav.type)), ""); - if (LLVMIsALoadInst(elem_value)) { - i64 sz = type_size_of(tav.type); - LLVMValueRef src = LLVMGetOperand(elem_value, 0); - lb_mem_copy_non_overlapping(p, {dst, t_rawptr}, {src, t_rawptr}, lb_const_int(m, t_int, sz), false); - } else { - LLVMBuildStore(p->builder, elem_value, dst); - } + lb_store_local_constant(p, dst, elem_value); values[index] = LLVMBuildLoad2(p->builder, field_llvm_type, ptr, ""); @@ -2262,15 +2277,7 @@ gb_internal lbValue lb_const_value(lbModule *m, Type *type, ExactValue value, lb LLVMValueRef val = old_values[i]; if (!LLVMIsConstant(val)) { LLVMValueRef dst = LLVMBuildStructGEP2(p->builder, llvm_addr_type(p->module, v.addr), v.addr.value, cast(unsigned)i, ""); - // if (LLVMIsALoadInst(val)) { - // Type *ptr_type = v.addr.type; - // i64 sz = type_size_of(type_deref(ptr_type)); - - // LLVMValueRef src = LLVMGetOperand(val, 0); - // lb_mem_copy_non_overlapping(p, {dst, ptr_type}, {src, ptr_type}, lb_const_int(m, t_int, sz), false); - // } else { - LLVMBuildStore(p->builder, val, dst); - // } + lb_store_local_constant(p, dst, val); } } return lb_addr_load(p, v); From 52fcaaf024a8fd75cf2abe784679610d187a5157 Mon Sep 17 00:00:00 2001 From: gingerBill Date: Sun, 4 Oct 2026 10:49:41 +0100 Subject: [PATCH 202/215] Copy a large loaded aggregate through a local when the fast instruction selector cannot store it one field at a time --- src/llvm_backend_opt.cpp | 43 +++++++++++++++++++++++++++++++++++++++- 1 file changed, 42 insertions(+), 1 deletion(-) diff --git a/src/llvm_backend_opt.cpp b/src/llvm_backend_opt.cpp index 4df0cc27b..d3502a147 100644 --- a/src/llvm_backend_opt.cpp +++ b/src/llvm_backend_opt.cpp @@ -863,6 +863,42 @@ gb_internal bool lb_is_plain_access(LLVMValueRef inst) { return !LLVMGetVolatile(inst) && LLVMGetOrdering(inst) == LLVMAtomicOrderingNotAtomic; } +gb_internal void lb_lower_large_loaded_store(lbFastIselLowering *s, LLVMValueRef store) { + lbModule *m = s->m; + LLVMValueRef load = LLVMGetOperand(store, 0); + LLVMValueRef ptr = LLVMGetOperand(store, 1); + LLVMUseRef use = LLVMGetFirstUse(load); + if (!lb_is_plain_access(load) || LLVMGetNextUse(use) != nullptr) { + return; + } + + LLVMTypeRef type = LLVMTypeOf(load); + LLVMTargetDataRef data_layout = LLVMGetModuleDataLayout(m->mod); + LLVMValueRef size = LLVMConstInt(LLVMInt64TypeInContext(m->ctx), LLVMStoreSizeOfType(data_layout, type), false); + + unsigned load_alignment = gb_max(LLVMGetAlignment(load), 1u); + unsigned store_alignment = gb_max(LLVMGetAlignment(store), 1u); + unsigned temp_alignment = gb_max(LLVMABIAlignmentOfType(data_layout, type), load_alignment); + + LLVMValueRef fn = LLVMGetBasicBlockParent(LLVMGetInstructionParent(store)); + LLVMPositionBuilderBefore(s->builder, LLVMGetFirstInstruction(LLVMGetEntryBasicBlock(fn))); + LLVMSetCurrentDebugLocation2(s->builder, nullptr); + + LLVMValueRef temp = LLVMBuildAlloca(s->builder, type, ""); + LLVMSetAlignment(temp, temp_alignment); + + LLVMPositionBuilderBefore(s->builder, LLVMGetNextInstruction(load)); + LLVMSetCurrentDebugLocation2(s->builder, LLVMInstructionGetDebugLoc(load)); + LLVMBuildMemCpy(s->builder, temp, temp_alignment, LLVMGetOperand(load, 0), load_alignment, size); + + LLVMPositionBuilderBefore(s->builder, store); + LLVMSetCurrentDebugLocation2(s->builder, LLVMInstructionGetDebugLoc(store)); + LLVMBuildMemCpy(s->builder, ptr, store_alignment, temp, temp_alignment, size); + + LLVMInstructionEraseFromParent(store); + LLVMInstructionEraseFromParent(load); +} + gb_internal void lb_lower_bool_select(lbFastIselLowering *s, LLVMValueRef select) { LLVMValueRef c = LLVMGetOperand(select, 0); LLVMValueRef x = LLVMGetOperand(select, 1); @@ -1033,7 +1069,12 @@ gb_internal void lb_lower_for_fast_isel(lbModule *m) { } } for (LLVMValueRef store : work) { - if (!lb_scalarize_aggregate_store(&s, store)) { + if (lb_scalarize_aggregate_store(&s, store)) { + continue; + } + if (LLVMIsALoadInst(LLVMGetOperand(store, 0))) { + lb_lower_large_loaded_store(&s, store); + } else { lb_lower_large_constant_store(&s, store); } } From be590a7c3549a27457cbb0b6ef0be6c88fc2db73 Mon Sep 17 00:00:00 2001 From: Jeroen van Rijn Date: Sun, 4 Oct 2026 13:00:24 +0200 Subject: [PATCH 203/215] Make `radlink` default linker on Windows --- bin/radlink.exe | Bin 991936 -> 1341088 bytes src/build_settings.cpp | 18 ++++--- src/linker.cpp | 110 +++++++++++++++++++++-------------------- src/main.cpp | 5 +- 4 files changed, 70 insertions(+), 63 deletions(-) diff --git a/bin/radlink.exe b/bin/radlink.exe index 8fb74fcd7612588297ba31ade61af11739db97c5..c3c44ce9e98feb11db76abb05c1b63d1c2ca4831 100644 GIT binary patch literal 1341088 zcmeF44R}=5wXkQB2_zakgM{8tv4-o|CQ5ClU?l=I2WH?5o&i);Y;8qRs;w<4BucB5 zgh>j=!?d(lYJ01UYg8@^dK_l9qMYkqCnjW?GqsQXsgt=}pO&A77coAYnF`NDw5 zGc)Y*-1Pm^Jqy17^w%@ZcYFTPb9&wx9?vJw^mr=sRPvn1{T>hh_^TE;)pxQ6$#?!T zPfurw8pP_`hI{foa~d+0+`5!>8p%AQuB7;XIn47s&m_;~lGt40X_Kz2OFZ{h@SI-a zSyj%ny~Gnb-Q#)h{|xht&+s%qeYRDJdj6I=T^Mwm;xap=Fzvekh z>esvFzHqW~l)Ci>)tqOATW;J*%GKVsP?{1FcviXPE;+H>^;d-SSvqt99iGSBauZG{ zSAF4vg$w3VMA5dHe8KS-Pgd^c+vZbHXe~7N6!V;PLb*w#{(tcoY_6YpWHIB@RyMEG z&hZ%O^S<-X!#wk}a~jq7uF|j3uhwT>ea)3d!`o%2c|1n^kw86JhPA`mYQ~@FF7kMy z)}W|0z0in1y=t(>qpubwF|6L;_T+Di&-9p9-74PJN@~Q~6}1i|2jzP_YlLFK=59m# z-H@;POFVVsjQEhxHk|265C7cHhf#l>5g&d&?}n8~55Eqe46ER?6f~^e>EX3M8|LXY z(gmYQ=#CW!JceCRCYepmwfhbGY@ho6qShFp*YxmTQM_uS)-;~CaPY7ZkFEmDLIBvF zECNO&9v9G)XZz3eG&O6DJ{duL$PaFitl=*((Za#z=-gdXv?rIJEhWR&WDQujU!EQhd}UQSosM|lo)@-?1F02K zE|$*Mmelc$M(;iQ|ENY^&|_~l>kVnau+}u&$-MvU2UX@P{W8Z(8;QNeVeJo_^w_>j z^~AnG;iAoY?A1%dMLYDhpcp83r|zO-`toT@ik#-2a{D?;E&4j@^z}By6(CMuJN4LW zWPa#mZgVp4Kl_&okiYcH{7*9V*xtbab0!c1$eYFCqHP(NT!5y=i^oUjJ`XCca#5kL zl{v^@(`g3#{e8!QvmpVs^7TaOH2JzKomTkL8=mp}#pB`ob%8v64Yct%mAhsN78i`k z!Qc-11Mm;(DOC4K;5rAm1_?0Xq7Hqn)J@$=SJAm!=S^x2MOR%)TOh`xD~1evw}!p# zdR4Qwd-4Yc*MDVQ*W2^d--Vg^jlHw+O%C;nJ}6T zYb#p{H`jj6uxbO9)?I;dt)ajKn)WoM7kyW2l-b#kmMLY%LxE~jo4nDq%s?4TYYp`R z@pXYp!`c(E63JgfT06g@JH4%{M>Bhjxvd+0gFH6P0iW~?eCt#zdTaHE(nY4F JX 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į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%0A?Y;L2_PPIaDnNDrr$jaK&x1qpsVu}=$Kz9n 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

5EBg;?k?gKm&iBFmHg1p1=kG=7abJWMCeC&#U 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

8{^c@r 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

<^QZ0J~MY!={%RC-@EEz1tjpfYZyqsnc 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%0DXaB;$(j7> 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%0Aa_`;>jII+n5TF;^1(R7@Xm9z2!!M(~+Md5)3Z zs!%N{6axi^Ok=0dKr?ymONuH#RQ}K&1*Q z<#(abzEksow^}?gGt`q+oq>Ja8mB*_(0$*Ciu;Y9asj8@f&u za>f49LN0sv|FQSp@og1Z|L~X+(g>kLD7kUsBu?DogcK*f*Rn0!N+e5Iwv!M*mL=I% zEK5R?9XlkD01Kf9mhw;*LhlgTZeS^)m!*WdbV6A=texI@zh}yotk`7t`FwtVz0b9! zGiQ1^bLPyMGgsR#U#p7S4S9F(XLaxR?6)+$Ck=;~As_jog|ij@T`kq%aWnq=FF%R; zU1;JrpWJiMXj`L+cmICct5cTEGI7d>@>KcJcoQp3BZFl!e3>Z!OG82UQ<(XIzn=O* zn0i*;^z;HMH~RiVtpppcej-6|RmW9la_E?{oSIKU)A{ew zuYT#nn>n8GId>2o{=}R+36`9D z#9ai}{?BI|uG?|j-5kGn;XMS`-BWNcLDYjocKwt05x(-$v+gH2`~%Aa1XrDLz=H&% z{+Bsi{on-;5x#c(7)~$UW6$Go<-6Z-SddfpFol;)xs}6)pV=dX53liXxW46S4qXMu zJxc!T@9yNV;JptxT=h`lW8}Y1znnvD`Oh2{EUM)6)G+Ec4ojBp5%8+{f2H`{r#;5u z>d%M$jc|5Eki&+I7dR}q^Y}H~fBy~+3yyi4!;;->cNjVME^WV{;NDI zIE=3QlEc-zrv9D$*L`~_hXogY%VEh+MNg4`bl?>n4*&K$4p%Lm^)&e}```)=*)QL5 zxazr?&yfG>`js56y6;;K*RGxZERTQ9B^(yyuIF&o^T)2``8&%vYA)9xJI>1C zaNY54fv@TkaL_6a*}RuIEV$$s4omJljPtXCJEwE#y5w{YSI#?+!;&HQau~h+ZGn&3 z%;CC=M!Zbrxjr&DTsJhp;j-};2{`c~4%Z*~z6k$*8;8+bPI!g)M`q0R1Vo!XLIPr~#dv+_7>$Ud3FRnNpZjOy2L z*nRgJ4z)d>a9E)47BD#SAC$i2Yzv3cWj+qOLx19Mb@^QaKj<|M*Z%b<4hv2m`Ua(Q z{WDiUo0G$myP_Nx^jsnEagTDi%=SKq!{=@0khza~lhQX7O%rg~JPz60og7A&T*u+6 zqn_k&-CsW8u=~)R92UfndyCRz9&zZ}y@11pu}e5yKkG&TOP=CzS>b0Kt~+#>@c-ht zw<-O)>t=Ges&oN|%RXMrVf6ItIb8Y96C8FIe$3&jbGC8lT0dkRFTdkB4hs&L$l>q{ zi#RMfa5jhQJLhxQ{Y?vp(TYwEm#w;h!{HmQ;jm!log8+b`8bEJ$6n;H;oJ8__|R`S zTsv_Chr`P<-l6hKYK99qea(ft>4==!9S!;*V0;IJWj z4Tr1p@8A&pfy1@eJkQ~3{T&Xwzxa~F=%U{^Y#6wk!&O%dd6(+rI(!6&(M!j3IGj!6 zu%Ok-;kvin9I}ax0zW&-Vac0kaoBM9r5tKCH*mP>!h1Me|HR(}{Q4yhS0C^`hpv%d zbGWv!n?udm!(p_1D3{k(myY0Y{fzM(4xccU!(Q?n>dl|awMR0a8vID{`v>Pu4j%Gw z@!WUM`r+WK-zpBaHO?&G_+If`ed--QowBKT$g^L~YAJiM_|Q9EZg}&;?Zr3ejnpEI zyNlm^`ja&mJAW)bvY_pEJp6!x`it-Vw)W_257hUwz5l?X*$)&CE11@8 zbPUs9*fOBd7ne=7cY(vZZ)Mcl71jA2$|1`g+lzL9qk$yG|ST{pHaU^zWZIW6@1tj?^0l z48H5xaRYTxkE8Sjr!O47W!eCJPUDiE!xtW=7d0+>>k)mB{>4>C{`gM85&EQ6mk%G_ zdV+4*@Z^viFE~n{_|%=JXAJzkIMn>|o5g?4)^qNA@u{5sChFyZ&zG({dVBFr)Apa+ zP;#W+aNOdnE`DdIe%3up#swZYTEEA0^Gl8uhwA678_@9Lp-1c622PrlHz;2(`fB1g zFCB5Te!Vlk`>wx_)z3X|{o|K!+FgA05XUPw576)Vbn|iBP8qHr`9a;-9bX@zu>&n-BTXcIG8H`U&%|J+k|!Y<=pPlfrl2d#qkJAU3EzmZ#U=zj)W= zN7!<&W20HbTGtFQ?x) zD)-0Yg}cu__&cAWAK^Rs<6$@C=|fLyJa*;iY<>CZozquD3iXHXywARH!A$-5j>|q< znAu(Y>xiOB|C~KbKl;-6k{|p>>c=!))bq>bll7*KMVoKBvRGfU>eB9+RWtOl^X~m^ z*yl6#C#UT<|MM4T=&!u~^ZFk*j?nKvc-%Sew@%WZd}4w-;hdq@p1*9CNzV^XG^Tvb6Sh4=lyz|$;aeKag)8Mu5 z-g@3l{hbBRZ&-bYreC*ZL1x2;#rm}F8~$|2!vpoN{;~4$(JOR)%QYu%JoNCX`t^t0 zdg=uu^YlBOm|=@uouhv}PhWiXfz$OV```T2*q(fSQ2k}|H@j!(RWH_Wi##_~-{jqJ zNajDr=(oCyKhVB9Nw42$>K)*aqceCPb1 zhWUnP>4*Na@Q}{DvHIKFhL8AI|F!r}Z_YVuc3`wV>Vajp&IJeR{_w-^=jM;nhi;zn z@dGbT(|0X9qw&0>$Ln6(SFbdl{8O=@ze)Ovj$0-=W=+$V7yr2ajvprI4~;si`{mUW z^ri)$CoVp*K)ZTROH2s1JT?Y@JJ6Ye7;eD{{otgUATVALie%nxe=fE2qqvP=# z>do&ioBm{xe&^Ece@vd5qwn|AzptBq-YEUMf!beQdt;{VdhhA-1KD)_tA!0?pTA8%QYYJg>CO(5EJ5oIc1` zqqh&U!STU|K|xs=S&}`7hHMtuoZ{S()ZM~UHVz^B>m_gGcWw$ zH_++lt>;}iKU=?eT%O1A>B0JoCk>d;b4O3{lvz0|x=Snc(<`^!b;EBH^luwxpL_P4 zv3g!t+1I59XX_cx!v|{P?D~SYKRhb0bGBa9^hwvLu5x|Un~tB}zsIgW^}&+H;-%U8 z;rBkZ{nUpw{qv5uecFOadeyjlH-2|+wtm%*zi;x}4gHW)epvG4GZp%pJF9mGZ=9*$ zcf04@I~GpV-}&{Bt{2`Y)7LvoUbL^x*8lQR`{FtA68*5F*1vc_`EmMHRc}2Xc&S8x z^Q4b0N4zpwub$ajcjfJ|;y`w!Zo>6ECC(Qm$?WU%K=iyn22eYJk7Rd2`~f6_;1P1E0fqNL!dqsQnQ{@r!vzb`A% zf1LZ-jL0hveeR~Acm4SQyFT>JJKp;6+}Zk*b6+|*`eA`S_~{=G3%ypZA36G)KOdV@ zte2kSIegSBnflViCl3Akar(r&EWw+%?JAx$uxG!!Y@_r~+m|ny^FXye_`1{@HK4@3Q*=v6{ z4%?A&@A0?%ZfM(Fk>V<-iAzF5i;%yD@O&lJ4gY`rX*? zGV8Wie%xcM{UzhkgWlL<{G9RR;$;u+F`EC@ecz-j_88x~uDxSKVvmvdSH^2abN3kW z5ubHkQMAW6kw1XzGw{F1xaj>@tSj zu>XbiAMG-}|3}6(ZO`m7uK4Qo10TJ8mr;7r&Qr!-yvsQLl{4_a%Q)Y5@HW;{N2m$82B^8F7Qw#&Hq((`{ick@nT>wv2+ocQ@p<4k=;VE2nVjdf2x zcf|JlcN(LAKW5^ISMM|~p8QF1Xz5Plz~7$v=Ig*t!+G2fk1em>X}mSyquEu{b{Zcq z3zbaOb{e;5emrT;pq<9}hi-Z5{0%#d(^p<~_79)#Fpi79G$Q)a4rBMv7v!Jt&<^7n z-@=A}|IZF%{#OMje|OFfqiw{xJ2TpL7_%>GImj}1hcV)I3;uT)tB!x^f(bc0jQ!>; z-u~WE@L!dI{~gB1lZRh@*)Q9T+?Lj(Z~o_YW4~Lzt$yeE?Zzj=>wX&Z;C4gk)3zJG zuf6Qx{6B3sVrzzO`!>4WcyQ4-L;im1c4PgIAMRRRwcYqG=Z3Rip0eG@{(7Blr?%br zU}eT(&V#obJC3>W^5?d1GmL3Hi)+5yX1sSy!KE4RZ8M5~hamOrHsjunt%p2u|2E^s z3p2K?y>6Q^d-Z+Y|2lu0@x+yDpBk6gW*l?A7ysLgBL;Ln&z#$g&!2f@@wKzI8LMtT zCu8;mg!5;cG2obnWf=pu86{_D>^^YQR^tTcDJN%rz17%s;8Kfc-Bx2sM&6Z=KC{($ z;g|ITGauM$Ts-5it@qxr)p+&x&gJ%twi*Y&eEp#VyS5q+-!tXg&ziRyZS5J)zh1x9 zs5ttx#5>ll#-)2KFLh7ZYCQEt#o6P>Y&8Zgxv{PD@U2F4`H)lB@3+-Bx?#gn4I8!? zuS_dz-TKuQ!~5#;v3I_+#W*_j+)<(Dwiv}DZX0ZSc#E+z=6+|^EnAGW>sAz1UV-qI z0 z&l6X?w%NF1N9D^;J-OLfdrC&@f%k7V?tNo)kM}Q|jbG<2FL?K|%|^q4^D^p}Z8nNp zU9)~YW3%yf&5|dt^=&qU{&cgk=bXQPmsPph`1z1cRfA@1Hs&07cm3}ZHXBE7`}(JY zPS|X`^x~mkWgY_Dm4W}w#trt*8!z9u$(V6q{$1<;waKvOeD+M)N1KfBLs=KBd3}@d z)#Z17u0OrWSnzDkst+I9WX#U!c;M_?HyO?A9{Fa*)tiiERT-HFuGnOpdBlU2UoGBb zG&Rhh@>bg>Tyu82Ld~Q|>0? zV@66k;er=;smp%I9hNm|gN6dWq@R<*9G%{aZJbla^8x7yt$K)J;-A3cGflcpa zUW)MP%MYKve53K3^|f~vv~M)34*Fu_rNNEHwh1?T-a2ig@m%M`oyXT~G%5~Xe}7lS zM&psE<}UcQXrr;?goVGJn!nL_cKF2E-;Ca9{PpJ_=Pf#Bqp|Xxf{bGi-e@%J_u_-mVy5bMs(zJ zOApxEW7yZ6J!{i1Jw{@UG4tPF_ZUyl&THQMQIB!L@>?Gm@OF=3M?FQbp5dzH}x1d-g?P0_f+e~)qSxOUHp3wn&#KG=QR6DRi=Gv6FM z%v054jH#S*=`f?mIP}$%@ZV$HzxLM)FV5*PCKsIc{k+jV#@MR6jx890aQ^fd%Z6t> zv-2R}-Ft?2@98#f&3bglubaD#l{bFZy7`xGIQt?QTb1QR^+p<{L;%%{j1IcRX?njER-pwMODu0Pguj-|s3jaX%pYm5wg^!c{qx=@tLmko3UBX+e$>5?Bm3zemHwiB`rj(s_m-?*M7BefulU=o$M&u_lJTbk-&Drk zvj5WOm%3N7r=M_Dzg0)}&R>;J_c$m{Q1x#bovC{VkNw`e-$#!U`O&=sO80S+m|Gp3Yc1}O}tM>n^AO4`i>-uS*x)*SY?Em!ojYQq( z`9=1hs<-fEOp}fu~gFHtTzSsq_o_;h!q}-~G_nC|SQRW&6HJZtf6~Lxmf;u5@l6k3Cd2p0@_W+O&*d`wy0rdz zR`$<1GCU^7H<2y+UDf|w89r0?Uv`@OutJ7EB>V4635WHF@wrfjH}{kOMKU}h+o$Ny zC&&L{89qVwUo5SCm&oudWVtH6U(&C-hy8dOebr0)y-cQ`EBog**}ku3IBv1==Xpur zV`M$9m*c-uhEJCC{kG)4C*_NNyh4V*EZ0v}zb|C_u9V?N$o^5`s{j8i!w1Rwy(a4? zy_vcv97!AB^G1sDuaXfjk?mLcZyY7UuU7e|)$dD5AJ@q6thDfBW&d0&!;eklZ+FS` zxV^xiAJfuT$nvk3;WxC@=x`a<|CT;=zH%wOpZlzyr~=A-ACR6f5RS%_C3CnsaJ)tW95?QX=-zq)HMwySO1!L!I5cO02H$%2V_1kKR ztNz+1)2s5H-6Ybh{BD%;h04$RwFp=F^*5eJ9xdoqm1CC~bV@zD8VA2zFwRZWzbpR} zq#j7s?>(8%iL%}*|FzQJou2=_q9twLih8SZUzG8`-Xi=}K2OOGKTGDL%2fvv!=;?5 z{4J89Op)zX^xGsmsAs*%UyXBQ%f+h{igCMbcud=Shh>~`=$TJwEn+U<}*i@tJ-y&^gk{w{+-hQy|i(^Tl&{+>)rp) zOMjQFr)pPF`YZbDkG?iYexc^8O4c90I6G}#sqvm9=}5It(X}c+eLns58_^CGPt6~d zUw`%eHjR&|`nII;C6(`YX>_Ub&-q1^uhP5ad{($m_Or@oK^lH)+Idy_@A;0J<&F7T z^ueQMC0c@EeehgKUrH}HUDAW%XWJxSQuMS{;%Z#R%J`&Lr6(&b{RSCd&8HrTD|$Xk z##emsNQo={OL=Pe{QkT65T5>M@aQjm*vKb`vBw6zIciOY{moIeEy1`JjYXPc-ZstW z4TmEMtudg*+QV8ftd%?6T3f^)$Qy$UqvCgekC!m|o|uO#`~r$Pl<>Wda5Faktzqod zPY!1I?Mvmg7o>4qpAz1k;-<)yhkED`jNB#oP`;^;q6hAWG$o%N%y1VmHA*ix#h;fF z-jd>0d8h=bPinazy*Z4nK{)O@rbg-ICOTc068;0+dzFnil$XjowS3B7Jw<0$ zJC~d}E)?hpgvJ%0InEomg*zgxf!Meud;iS$lJs8!7rzg_R9i5vJ!tXy0`WNIk%+Yi zki5woiU-CmJ#FbyR&?gvVAvm76t^_SBcb+0U`bs#*r|}EEEw+ahJt>rBM^%RBVny6 z5^M7&a4}qk#=VFg1qX}ma;P~<>fV2w|ha3+jffe zv?V1KHoLXj;;`n-vCgOBZ4OJNwbX8zW1YNYo_ul%rhTa}f|Sl;x98ZZU3Ik{XX$L| zvfD~?Y|b3Jt$L2fU2Caz=hWI9)*AOx<_{!9{o(+;9U*UXT=PZ3O`)JKLGvNYJ-#}U zr)AB{o|$aUnOW|oT4Q@cYsTCm1SMBHtF24W2%ELKc1cB@-7Y*!ZPn#V>Z@49f zmgVna_F%ZZlXW&mI$73~P^gndBk^D-O2gNpNDM@Vu4xY^w5(959lhZT1pIL=(SpML zS~L;~VeC7#y<*PPd?9Z%7;cuSQ9k0atb*yC^g&sjte}&rF^C5j2edc{C)gB3Z5z8Z z72*#x;aBeYK*hV-8c`m`Ml0w>jEwxEuvKOan_=u90> z!ue2=!>mW2rRAB$wRq!N1SAk?(i+hz=m=Gm?0b=!sArZtrDSwfFq}ZgMKo`?pFH+a zlivAxLwKr9xCVYbH;ktiQ#WdBF;V}YhXED#3wK^>xz7#KuaVn;9< zuZXs@T4%YlNXxfXRy%8~MMQN>b}o8d&{@1UF=AaKt`!H5SXS=z zc6?23XWn>M*yjUa1gT-!3`G`!tP(94$&_&9 zI;oKIo>b7zETLd?xHtRAjl`NqX9Fw@Ucfx`rMPXf?U=vbHZU*h z_CRMK%9$*PD$tC|$Y`L?U^v>IU`;{%JP|94gz*hRrAb7CCt02xL_tv|b@MS&BpPfZ zmZB1%t>8s+vIRPW$km;QVR}!uliTi%H3tAeNmvPjP2|osT_G>f_HZ0MLUm}t=rfO} zx!oJ{djc&UaNY#Iz++5b&~=(mQ_vqbz2e@cfF~aCU;zA~K+N9P_QkSV2(iBq^YHF&~^SYmC}3095;xTeN3-!o}y zf|VwnSiY?DxF=%NTWac*yUbZ_y5Vm(5d=uYQd4QSxodd}hqboKS#F{gHmf~}Aqm#$ zY7w){S?aXcl?%jHUs`6jxZOMtyQ{`o=CHX0R@n=ysKGj1US=0zHP%WLY^~wRTuxiH zayy*mHk2&_+_es?qg2JJv6eXl{3S z(<)$nMXk$HTgCm#trh48?sQnH=c8uaT~9eXD=IkRuC1vntF5cCa*Wz#Emv5z)m>XV z-z9<|a)^%P5ld~gydODIZmqG^Tg$ndXI^V56|r13Ry#(T1{S3!5!BLBYPZTDdu>&X z)lx38%3c`ncojm`lWtdCsY+dLskNvWDQ-TP1-$GqmY$A)XOWOInUptKe!10dnNQ*p z@k$7e;8>V?TCj~)iZ~mTt5thDg3Va%h|KL+!a^EN7zn8`%@u*%)}`r5AF#cqU~@YJ zUy|>1O_rm%1BnE9RvcdLfUg}=R#&Q@$d_kF6H3?W;>f-x*xZ7J+kz@t;>5$+Fu~&_ zH?_JGUbylaOU>le_7>beuxr~*{O2%Ommz4D4%-z+7 zHaVlzPE^ECvSLR-Yio}uIO}Th0!yy>ahBDNl}P++ZAg&_iI&7o*4sqVa7rCeCGfl~ zcQFR0G2rvILx#jc4A#fRWon;VB+`?nR3Cy8B)mB5!lxyXh{lWZ^P3^Iv^VB~SLIuy zL0=^nx45-4kstH={ei~zW-M#@=)ra*;f?0f9d8_;O~M%MOlt25C8hoW09 zL&)VYg(AcfBUVX>DVT&@GDs3!ARK9LZV`h+^Oe(q8DDH7`Q}EFb_z+eP-BdRF`)rW ziGkKF=9pX=sFtZ)Ky*%ZiP@0#!Wpa5u3JT|I>*T^{6a(2D z2zz`nZ@k6hZ*Pk-2R0eyaLlEx7dcX88OUbvaFNvK@>N7r2o72m5)qQga;zZ!#VxLD07O0T# zkil4JK8|r~wEw}hYr>XN^R)zgt?~9Y4YF*mj2YLYq?x0E=pfoQBQ6Bd)Hr+PhPqQk zv6206Gc&g+NhV8*2Mwbr*nbM)LI(D0UeqNh%ECq@+a^V01JN9271Yt0 zS?)|N%fYn*i9i@Uyp04l!9OBxECwkUKx|wX>KIBXiMJUIjCF|}sB9j?(uT3ZsA9j+ z6rouf#VBB)BJD9>K#Z`tRitj&YYS)!r@b~4e6K7w=6q^k9MB82a$_m>!YiC>Ze2A< zTM!gfox<&*5No2ZYWngwHn#*q(L6ug;7{Q|XmTM(yzl_wSJ%*H*4fb%g4hks7^{rJ zhc$sI5;3#Aj;6il|cJ;);QLXQv7LvtbK4>B)yt6nhd zqO2eTJBoS}EoLD2zrv#aMu9bBZnQ|{l9tQ)dGXwGhZe`~+}Faen*x1-_qC(nd+jWk zwbScMI7opZrv@vhfx#fk9TRP6K%n6?F9xOr0frMk_Te;%*j#TcOi*m1>P4 z#>Lx=?rmcA!C1oC)WnIGAf`ZozJtCdh)D@=$U`f+xxqEpcAk*f6?0>;cd0vuUr%JAbA|GZ{00IK2k$=#PX0q+^PL z5{dQXm)AL5lr_;!znR1#?O_b10*&(VaX!t}Rc2ODJod_omWT8OQA~d&t}!7MLn;ZO zfQ|rzn8{T;VS$S`8z0IQ}i$lqmNg;<}! z;=Debr%<;msg*iW=%n&1Z1b$;JVk!_e5iVDWu+FkRYOH6X&l3>k@!Oe)RH<1y1Ong zAPqt$R2m32sYKAaTq>yEsTxQg6EqAJ6*_}92DFp*N7|uJP2zkSDbFxU65GOqGpf_(VkKVRfC*ZSvWyt#e9qW zSgrh^BuqfR&`G7LS4f@4DU<3CSpyTr&-gHLaeJRp(R&e4qwGATp4ux%Uz?wGM1rV` zI}iVqHzb;nw=3Y6JXF$^lICd1N?^=DeVF1TA7H;pWKEKtjASwyOc9cAIHyGt!fZr< zlnl5BTPzRg87^pc{F2oQAM~UfvMs`jiaeh7FxAXYole~>T*$5rGYm+IZY_^*%6LqK zlf3B%(FlE~sab>w#<>GcCN1AxSL&V*b%=wQQ#`;WvN(1|I6$C@hgqkEq1i`&H1f=- zu2d5jxDq)@@Rqt#@~(kqo%j%kG`Q5>W%(g#Vok<3E!@o7=wlAAPs!CR zFYi=@p4td5mQP?>*6MxOa? z@g`4WdoYA!f@BV9aVTzoaYEr%4;Q06Bu4F(g;XxnF-d-kJ3Zd1$R^z{pRyL~a-Ttx za|k|_j1h^WXJUbTh&Pi9^CP4)jd6twWG5f1ZNU){i=ktPoCt7v$PR}G&140QEU%!z z*VJ5`7lY=|%knx2m{_0}hCQT*AFx3)Rcym0qEtGgmBpfp8ImA@3(dZuV;bIN1Hi!LGf6 zi=g1NRac(I{zG+yHohQlMqc3*&0=>|S+ccU&4~q~aI#idP~7M| z0gTnmpfJr2t}R%?R-pBy+$otK+cFva{ToR?KlNSJV>Lz6{An#Ill%Q7S- zoC3~+Q?plipeQC4_)JrG0Yw`Hld7=-iVKV1ADc@^ayraqP!u~sua(u-xzr7GL_m;^ z2PAG+9&o6hcu>z3fsR9s--DYu9?xcX{^RGr0YaTEl&^$(fTXrGE z5~l@lBo7OK@UsFyR9z_JWrh`~z7@K8LgkTxh=qv!&;S^(XpI#t3voa@(n(obYly7j zpFBzcqI!!0U>-sC7UZlWhudW-<5==c0YNAYb{ORp%MLf``pI3H;wFDisnTD$dF^bL zsZ)3YN~sVez(2L3kiv+@VEw_}rSfnB-saf^+;&STKeK?dwyLgr4kiekr5IP~oNKGC z5}wI(3&cnsTTmwQq=NjDPH|>I!BlaP2cLPuNwQLH4VE^{L57Y^+YM zvsuwIFq}bi&=$~GB|Ox$Vb$|!@GOWDZiNdyXzn$cI;vxsdv;jc@Cv%CK&9m#ahl|D zIZ=CXF3((N4N4GEl-rz!$vMcg5Owf4MQn$~MRJGL?Wu6q?A}7I&40pQ-VQ!2Rde*f4=0BfC6gnj{OeI-E80QR7rkJN1djg=yl( zKvG@c;BDp}6_|={3;avnf`4FViL)$EmK%-)400TFs3K7E=NkhaXmb$pK$>!w)!1CM zXdb*xizQz$=4;0ZgqDxVUJ2s}I+bC$utv2hgM9K>2JcZgGeXsUuD#xT$7l{VKXelO27?M$e9;`!9NY_z~q6UmZ>T+`=+LByF`mSVY_1$~li?oCL+K}~LF6PD3^uGGA)%Y+j!^pvGrk-R2f5JIVn=I6 zqHabV$@VMNQ{z;J2JfZIrr}7|3`1lZE0MmMPZlZx+f9o3-!`vT*NZ03gt{Hd3#cPy zp1}}wDMV+`Z^{!_p+iG?esyxmBlCI88zDCQpf5V<098xVB~Ge{0ObYOgn?=}W#*(D zBBV|`M~+bUBMC^LSno}nqy~qY4k5Wbq=w@#SyCSSFi1`)oPc4WqPc{rPiOflR44>a zX{*J7 zIzdhk;{Mgx4T8PH+`+RKuUEl)2h>~3uoj5bw9bV|3~LxJY(Rpoal;3T21Hp{xIh5m z(Jb~_kE^VTcH}ItkF7YoiztkOoNiCORXC}=97#&MtelKWYM7-KGLe#bNj|NyRAUj` z+Xv#4FiA0kAo-bYX^F$IUvQMe@E7toy z$=tMuo9BXnQc+P^B$-oBE(EDTnI_gZs`swl9vzL2No)hw{i$juR+>nJh!o#_%+FOl%!<=g8+-l~YYjM@oRYPKj%~CZpjigwS zGMD0+*FbuzN56r7VK+t8N>)DB8c4?wU{8Un1HP8(YDk&FX}4o12~k&|b=8u%AwPl! z-4vTBR=N59N)m^q++nL`s&tn?IhFD0=7vEjM0dLtQa8D{tr)Dg&=nwT3$>&IL&+-Z zEH&lipe>b29XO%GX^d9kaxhbq%3$i1qEC=JD;Q8YSVhw4Iu^*qc_odIT)eZ~g0XXg z%W^PMp^BAB9`q*X7U>02R0Jv70qO-lS5u^F-ZOg(+pI`z85pr1Rsk+S2^Ft371yxF z<%eaokYEuatre>zDfvH&NrO^WWi6WnalFor(Go0<2HR7PoQmixzb{hcHU+Tt3N$s* z3BaNj2nk6;@I<6JKsG7zJc)9l7F1Yl_GC9H-U42f;>&l_%I=Rs6ayo-;7F#g+If?| z>BjD)8d3Q^lsTZMV8SMuyQ<4T+SpcD5P>ueX2&wOv#zGhN`0&biP`LPKu-01?~0jS z3ky73?R?%}G$rb2YfM}2GH1C}_=3@t&0#_$7qTj60IBCkz7`)0Fj54n6xrL`jHL%= z7hJF+mLv7Ef^&Lm%59ujI0c!?+rE7(>##{xL4EKx+`9#KT=!+Q7r%DU^G)M7R}p_=ItsBad(CpgK-- zBdHuFt1h)R$-d=mK#^TN)}+3|`|y_>S}t*YM8HC5tG3uvBPat>Y8)19aIh3!N?5IP zjulI91?e35ZkOCjg{1UH)D^tXXg}+ryE#NLd~-`~>T?VhE31dtLHcJlw+eb{8V|?? z%vx@P*)B-8x)#@45Y1jAcoI!FTWMXbRql{!LE+0D78hq3$4spi14A!$x>1-FIRmDg z7K1@zw-d%87T?=yI4{#^RMIzZ`E<0L)O|q>CrxPOv}Lt!zWiZAWAB{0AeuTdS_`1% zqc-rnNE|UGopgrcAs*>*mpPH5z7~uZkZhLSHDz2q!4c|s(*x@a_V<`|R*V?B50J!) zBw2fidX$32O3E4}H03SI zh3JJVvpE8OU4zczZep&LR?_)#)KcScL(NuJ#RV@Wt%b38qMBt+=Ny}?yVJuJ5*TTr z)T*_4xO8aFGTuax7h;sbup8rKg|G*x<}vBFh;N!6#G6b{=y?#7)LAmzutMKdKz%6| zY>ZqvGqsqqLrKV{t61nrNEO^Alr=WC$;sJjnHy0IJN9R-V*P zAvqBpwBO`X`bJ_ZK)G0C`g2{VN~;i+Lis}l2`7yyabD7g@2s~aB&5)hm^g2ZidJo#05im zPc3X~xEhd0c0owy4yEwseZqaL(7)DmIhDqt*1|peC=lY0g&AyCI2h7#%s)$>^5-VJ z%{rS^Cr|Cm>ODA9nSA}-y8gG*dg91V-RVx4g_xMBuF zD}4Ej*-Tao!Ae-1aKmM6wXud3!N5%3flN{VNd*hnJ`^!`fUZlEFo?}C>W#fh5DKU< zGq6c*hoRtfKn~p8USv9}BOjcF!>qy%gMlho?ge6nCFIM^Zl{ooQcfzAX}Log>&RH- zCrdIN(^wuA?Hx0X;ld>7jNcQRG*#tC4$4;qaep#`goB?f0Al^e!U9K`bspFvcXF`~ zUYs;2E*&fY(y0P~WOZ=y2@1&14*+p^K)y8IxJ2lxbuqu7>!bJ!s~0D>kYMvsFi_)BjRrlaqBUP)aJ*x&5JKwQKiff!ww5C^YqX3 z73t_CdoKKHU?@}%ScebqGvaWf*SJd@=c@jhqS^(AXcx+AnasHTabw8a8ko#V1&}M) zWV6kaQOU`ZRZeh-o`yr@G#OoyPKa!-FF=%2UnoU{Lag#wdxJ5!Z2q{0UTnQ!y!5q4$-O9ejGea zGFv}MC4xglnPhI4`?CK@Q8`W$c@^xvGnrPvCKa%nDFp@Oz*k8VOyOaZ!lvfIX9~V> zu)*^4xt&$IU8Oi$zzImwIGroHVJwozoPFNgH4nf$A=YER1eV%g60TSM!}tz);Rgp( zBq7m?nYv?xo)c1RS{ZewL7)hZ3)U{o`zW<}*uoQ%$t`JtNPQe2TVCYHH=rrio=baZ z!S->Hw@%4J6(gs&Q@GmM;-Ro$%`w- zT$RO-jrd(Kneq=4rl{|QDHmEI6T4#Ib+B(o9|)y4H(@5zZBlRZ5$5V{>Lc_CDq1F9 zmVv`CG?H%rigOGoB`}th0C6lKeoDkuMCOHk+9}5QD$386po}H;J?S|3h~!~k!>=DC zOQpNJw4XQ6?|Fa1gL5jO0->r>k-e#T%oq~ag$Bl5=fIdYk&PdnHE=^IQ-OT@W4F5pn*EYiL;Ji46V8Ya|#Mx*H`#4BDm9 z37Moqq9(j{g$^0%c6A=ZJ(M^Gp)=Tq3nWP*P}jRrUvH{~FKUFt3>-+|4!Iws(&&W& zJLq5IhW+t8Ejf#DL=ePi%4x*s)Lw(gt3qS9cL=URP(4K;pGZ(f1@T$}6efv@AEsce z_yuX23BB)8&|RSjHwBY34>80c3T&sF=$M1@A*~vjq0=aY5<#3pivI5NR!#bCn%?Q8 z@v0cx)cZ4iCgVd3VLP?fR8cu5vSoZ~9V(`=B$TZL-hI)2an8LOHOZCk_cS^+^SVQ}Q%U2l=!^*;~Cz)lbn^67k6L z@VWp@0Dfeu^^-W&5F!t|C>*q*+Bg;DX1J&VDhS;R=L6X1fYV@t^&N(#0zF1dho5JV zx;fQ)nKSP^tz2A|ph{1|R5!UV=Yae+CFMXC!vOMrRFXj@(@&Q-2*x|`@{dVVv(p)p zq71QIj?Ze(rlyP;L%I(fkHuSqQNfY;azf`8r2Nifz2-576_)|jZ6rBXyr!Jih5ZVq zFcvO)4F=xE0Fo5TCrmeC;F(!b<8&0)I+1ZMe_$1esYm@B*M!gi_M7Ff2@@u0L=*f- zPw3b+_?iCl7?1YC!e4X9cOz(sq*=M4MVz~-T3`$iwy~`fUeJ2+#tW=mn5%2_)3+xev{GmK`x=u&PVl+FIP#@^a^zIuuA!%ca5 z;|@j{oQ(U6Z2w zD%DHQMMR8(p~Q1RaZso8tAg|v6!>$w7#vj?k>Gfl1jjaU*Nao9xh+Y0X7@4~^QH*J zBvTjBjv>w$X`E4m{Kjb=klez!dM0t!r?pjbqA7zkNrx#kgWHi_Kllh2MCb$@CU4L{ z^Mfm{8_&W|4+|ggC*^}{-FWjBw!EZVVnw6zKRRdhXu6G7&hL)pl37P939p%U+{lrl zEjml=q%v7iW}9N^{s8R7{J2orrOk8L<$cUd$_rO$;&Bp8Cf4wUoEwB?HbcU|2C6OY z%f#%IcX#*+EY>wxpk&3dATqIzp|3GEaY)n2d%RdL(TAB#*)NDV^5tK2R-KtItWseb zn8_lz(n@A*;sPq4r%e#?`Q(^1HMdc?=}kg8y%VbJ@vfuv=^5%O!FhS9} zeFSrHSiNXUWz2JcOfGT&x1(EkX&EU(N%KxN4Ldi!zU|d7Bx=fLDvLI5*~tCW0)tH- zwpIMItAj1?`)pdMh5qOA4sX{AC^KYYmhPcs(F?1zd3> zwr*(^$->YVFDPgqOc%@O z^)rJR&Qn0Xe%k1e86@|ci`O`6klZyq%5RVef=_-{F75_SKn8eq4RXqz0%z{@KE5VR zB~J=QJdL&s0hy)pqSG8G5XfwkN2!;u3RO5x49p~y1;uJ0M_n8TQ$-qHz7WDzh_2vk z3*>8!PSX}tAkR2p2~0mvLlu>LL(UZ0W-uGg1s_<6xyg-VML_BrfE4|r;LvKTNP)<) zuYZw0dYT)44rYS};qZ-e=2jr3-L-cUGII}$#E{a1b*5-}pwgr8$NIcS%$i>d5$Qy6V>zI^D zJuM%_wo)TPiuGPlyE>URA?!3K22!#%jbrmBpBs`SI7t@Inyg z<2c^Y1vl=Lvo;oGd2kVAaOEKd-k*hdr?LcM1>wfcc7%H2O0X`LkDNllT2bO;V7@e; zJor%Ac;h8%vVavZynvM1*i<$JuG0`UnAIa~4CUapEU0-AuQ80%8U2P^nAeJG+QHj9 zixnf>!7OYZ>VfMxaF@eX&R`nCU^$FG4}+;IzUeoXs1135WvC-w9D}rR)Z2^vT2T`9 z(|9^~~8BYgr`2d_^MWobNjjV*!?rB*R0U%U$yF{tNUJQs>VdEv!iyoOW< z%At|hlg6YASOO_E)IPvVqH&`%K3-z)9?0W8U_odTLaDYCPWAWUI|?7w-tq8>@Sf4+ z7WmB)Djv4i66tyL)rj+ze6iD@=Qt0<` zmf%Ns=y!K!w}<%8`?&GmLN8nn$j1aLAcb-qU$oIhR2;8#&^3H!X>SG#XJin-+;~Z+ zC5m^Pd1E*ki8ADaJj0X^UJe5{ecD45Cm2E=$QK8>0dHdvWs#i*{E#1ngeF$o9-y=V zDr+uYBAy@ntM95i%2CK0dj*_yE#x!cD{v$KfAkLTd>)p579b4T#U!vG~9*3!hQ=v@`K5 zN?r+DLH+c!NEpXR(-X&RqbDRG-ZjVZ776j9C642*HXJ4}`t%U}(-V@AsD>VzSM=Z| zTpSWz(?fJlk559H74+c!t{f64r3dfu;;==+CJAZ&(i3NAa7eR<9^we};FVS!5@(>N z4I%WjN{Dy(a6FD0(-W02EMc>R0SViYlAgGPZ4$Oh*nxRM5Al6^i09EmbB7*UL+J4$ zgdUo8^bo(HhxjNxjS>>KqlfqmJ#h(XHKC_f!i5qNPol>!A#pHzT;TciSR@oPlsI|v z@#D$S9C$Qxbm8HF4oAMwFL_VC46hcX8!2v~O|^<&B(s+}yis99#eGPG#^I^y1M3?LzkDE0wwSo?g?)rC z;_)u>;uXT;@p!OL!yXjugg<4Gm=!1VIPj)-V>4D&Rn*p2L@x2Dd=w5o6oG1-_!HNW zD}V4KoM=*rc)(9mQAXB5-nguzD-y+98Tq3u+vosHyk=1NH^Sr~)eq@q9Yq7(^p-8~ zJs5-`TXdHoUEp*un~Ha!A0sj4*>X9+zU8zNa9d|hoFR^cone#Ufz{bj%--1d<7nw<-l!* z2q$`a-w(8V^h#`%uZ8Z3sB%;DakoSkm6LQ%gH|5&;{9Auq>8Ard}8bTabUEumnw~P z&gD2NTZfYXT$4k0(T;&sa;S+2WekcY!+>iuEXyaQ9}@gF5o`S;hfl>GXO zBFf#XU43_zDo<6e?^wP1^ADq{{F1}ndt_4T-)EHc@#r%WTFBpOO&o^abAzGNXu@K& zlk|tzEs{!&E`^(~Gll(@CW^%hFFS&FL!>PngyjQ{ zgMt*RfsR)qP09Fsk$^80iQ{#FsvKx{={=0SXf-8D19%&1+0i8IR8q$@B^Js}HbQV# z{E$ema?-;WoYpHwgDgQ+ymz^1XGbHiff??_74NP#dIJKTQgLM~g~@c#QP4{t<=Y1N z8~#Mf-r>oB27edwK@w=ku>Ph@Y|mOWr1mrN&VFR?E!Ph|o!v%f(0iPAKh{ zQgM>ea`92&Bs=CpQc^g{pt+Dl6)y5?G;z`a&>!gy9P*ELzQU&q5;Xl`zk$De?w>Dx zsCGiu&4s+I1RuQXo7aFKJ)%Ae!@7zV;Z#>Wb9l> zx(c6-xFHi$LZVUQ`+@f8=O*zsYkmkLLM|&iypTcQRN#mk$+Uw<_ z=M^r-SM4~VkKp|j;d?ZSBj_oBexRA8Qc*t&eNcKxIs8e(lOA8xoAis~5#vo9Ks+=b z$SvXtH-!j#56T@dW3(5{#kbsM$a)YRQ$MI3GVPHCzZ5%T+FQ0E6>&`ALwd6$M)4ba z;S`@rQt<_SwaL_~UJFf}_TahL_p0(lJN#)l>CD7)2IyolQZz~*5no{p^OX2|2g(Nl8IyD$xxmx?N!O5zUckHWd&O^rAJu}|nwpP@zqh|Av5uXB z`1ZZZwe00D@^NF2-aEc1w-kJ!x4($Lx4)nR)k<22h`$P*2dxLHpNOXr{VSYwE2%i? zMpE&{G`x+^k7Rn9U$n9+AJTm!F`?t=jZ;sm*g~g~ij!_56&K^)V%Asjv1I+l_$XYg zkBa^xXt{U<|5|9`r1K&=P~l>o>`ga5#EGH3^rX^Fs(&io?Cme;Bh^2ZKFapWU(iRY ze=2?K?Jwvc)t_`&v`(lEI_a`#mL~B8)+o~Ki-+U|nsubl#apq>Fu_krUoIZfQPH?4 zT#Sp)#7PH7{i(u9M@I8WXw0ZziO!-XF6f5nlj12&np!Vf%y=XbkesISAzdBi8=U&SDp#E4F*{VJ5`TF4zjv!~YcD161^K)vZ4 zNa12VPU2!+N#dfuNnFh5Ml-#T2UP#Wr6!TqH=^TK6Bp?MCQdp>;$O|OULw2;tr3qH z#|{%0avtSNs~O36Art7XC|_ZUf2-P2`bE5b z%16xOpiC`vptN2m!%6NTS{9G!SNax@=y#=IrFD(yDT#~z@tW~TCMCKTS}2?uAcWi^ zpEiuJc*@~VZq+`4DY{gc;!D)0;_>nEYc_Gwz9cU80gAqSW<2~JChD~qR3@GZ3H&Bp(xh zAbu$x5nhe;Qao*ZJ|=OopPOTbi~5zDxY*B?nYhTWGzF*rs$=tI{%SwwmOdgsg{g6L znehepaG1D=Z#QwVuPQZh(LWBH!iq=K=M>PBc*MF^YvLlmIVLXByK(j_9<_gQNFUm{ zkffl(Y3G=WQ{6flU+i0wxEK$+87}5Y5*PcGDl=Tv7x%zregen4Mz6T9pqc_h<%66#FP1n7-HXn7b}?cr}0nX zV&9R(#l9nn(@rB7rPuUIk5^hrT7zW2VOK{ zhEx5@OkDIYZv6KOx0tw~7aKcShKqf`Y{-@35%PZx_AlZQ@_)67EBRmf2tKYbCI2UJ zCI2fQ(cca;KT)6ACNAXv3KJLOiv!N$a^jm7jmA%#6^3mOkBu$t?e-XbDkC?wnT+}a#3;HZICN%$_rX9|k? zZ_-g3N=xZT6G=Oi$=qtK_kKnBQA@~rk8H=NcD?=o`}!9ChxHYjK;k~4t)jhDn|-&J zT2v&RakYqx# zP90>xF~BWor=Y;3%^%5p!phOl?X4&s+2YYmqWPI>u}NX{xDb|{Wn{}K9y@PCfLnKx zPle1`#c%*8ZE*y-MzD7y`@4Ghk@BzReM#ANe&_M+*f`iZ_ym>t7gP2_LaW>`q0@3(Ijzu z#RU|{SF@1z)2Z`Mtryf&inEi}55F^sd}w}<=D)Mg8U07?B|ef|gL>yK$|Oo64O2R& z=)3(yox*yT5Soce(q4t@|zb zx96=6yB$B)jMqP8AXr_Ip`YtYea1(Jlu&s3(-0B<$H?$gR|x!oYlrgqs}~En@<##F z)2HK~eIwGp|BZ;h^>c_PRn4c0izzc z@hNG@VABz=5}#A>3FET_pUd%K$aO!qKRbXO$oS8u!D1xfp&M-+g(*dtV=$5Q;%opv ztd{iRZ*$>(6qrmzuV?nqed44Sk1EiDCMs1tg^PxfnNjs zqA7m$@QcE4Wr|-T{8qwmO^RO|{MNv)|ED0_JG5Nlr%ISe3ty3jUnB8*C0v^p{+7gP zt--Twe+iG4Pyoh0k@0?zaEFA$BcgsMN?0IaxrDV6h9q1p;YAYOD&blQ-;(e<2{%YM zAS%i^O2SMDb0jR1uu8&HCG3#!JP9w8@OlaFm+%=0-<9xN33o_%*cqbyu@cUb&?RA$ zgv%tnM#9G=d{M%8CHzjpT@ntBiTpDqoGzhV!g&%dlyHfJmr1xv!qpN!FX6iq{vzQv z2@i;i@(z>mL(1RnuN0?bV+!s zgiR7ABs@pLn#CqyN6 zYk?9mcH(|@?LohI#}--LP}UVN*rz+$)i9Wy%P!}B;;nGx>&6?}=CZDgMd3K^tA!Iy zsL4z=*KM&ydczV!km^qvsn>6=$e_IG#bdP*H-94qxzQK! z5C4DceG7O~#n$#p(xz#Wmh=WKZ6W1aXh6`4r~yGMa5P+$3aAlLsv!LD?46X5re2=&egA*X^BbPU`|jDZ zXV$ElwPtp@XD5lX2NiOBY-&bk7Rx+_ZQyv7OM4L8lzH6_2(aJ6wol|B{1vH0Qo3^q*AgWdQv?pNB` z#v6PG<&c6GS|T&6YY3Oh|EL$4p2kt=OOnO4}(vR~W9ZmyN~;{-fQPwTiN>|SIp z#JdhX#nQOSz<=TvBY zn5E&}#>~2B7-!~VzvRm83_EX6!BJfD939bj4k_Hr@`yyZ3R|OEfwS{woM?|b%epo-oac)>s4#(q@`7`UdBW7Bn zts;kgb=Ymo{TANTIT@*JcRy`+JbU-9J9@V5bFoX3CL`L6VlNt{=i1JPp55VacJc(g z)(QNv< zbR>QkJ|TTtYEtqj{5n02bK`xJ)0&SIDDD2%snA95HfdRM#!5|c2Di}+?`Y+$iFmlS z)fx0L-Y<+7X3_I*@pDo$;V~^+1&wa;Fes-KT?WVd`7)DRLOY_pdwf>fs5v@jsZr?& z&)Hd|U}^lsW`F-V0yo>q>C4V&<|U-F0$EQ%p8%FNWeMKrl0@zAaP(~lb~KgWRb$IQ z)7=qJ9pZ$2sNrcTc7~PfG9skd&)Oyvw#9P=OJjQ`ZQi|&9Z$|`@ub(;@suSg-29l- zVieTDW~2ArC#NN2k9Y%*X#CxSe-s`7`P@Chw&f7R$hQCUTla*Pnd1`UoQqv%46e=Z zXZ(&Gp>qD{H}^J`AV0CqK(@K4z5SRgHOPL1+S&U75&Ol{uvK+zdd6hLhqPpVD--oW z>LTXdty)1eUThzL3F$4Pl4gmg!Jk=|IF3)7968&Tga4@~+kyR#>W@*N@Fc}Sxk{#y>O8d)li2KL z5nAz06ieUTMtY%(^y%$sdWx75vOQ>Gu7t+sd(tqYl%nco)Vo1WT^hY8sL7iY&F#oT z5JrN(n}1m+T9(p-(z1Kfyxee_p5Kcm8tq^lJzG6wuEH`uRe?p7gi#bNY3Mem$UHPv{p8{dz&a zd!S!$=+_7O^@V=@px^A)`YrB6i&G|0QuYJ%aPET?pFfet88xJ?pG1Qj;;COF-W<}D zKq1XjaD8>_>w`Th7~jCQ&lZp(S4h%)e2fpJ)gQ%Tgi~!f^#9DWY$ST0xu3stRzF&>+E1>xh0fz8$hEjKu3gSql66yq6TrU+3 zl#1Nr9j}>%Zp`PnQMF9d&p=+JK zMIKV|`31nBE?(=qq^K!a~bGE+n*GE0BpvcHBc{x4gifE)kOCD$WPUC;+~xa8)*U&fRqk@ROqN z*S79^4|lp#8}wuK$KOd2c)FA4NOu)KGH^b`i$YS|F*e)KfyJ6a7wry{Q&@_`ElA)e zaX!n{8R<}`#GND~-BcnCKQ;tXHdv^g8lmO6#|+KVb{-N$k}*iYa5G2BpzvNi$X#Q z!8mdpEu6oNbgUV6cDzRFK~j~crq%djnmNaMP6waXItZYj7UeGNKnqj6X-;-KO3YQz zgZVx*+UQF|>-|X8;7>go11O}aJ^40w!2PR=zeXf#@zYl0!NZL_B5i#WD5t;_4~#Px z^|OB4=G1Sa{ApCmuQW9KH;Tx;K|S+tQmFBFT>rbkxn;a<2_EN=#MVZN~2X-o)({CIS((u+x^wqZjSXj@^0SL zE#+GZ&c1~4^?Bp+m8r6gI%hi3273!|_mFghD^tH|&#f?qJ@!pny^;J;clozOb_D%}T-Gw&X z+qw;H%@J+2iA#48uk5zq{PiBxHLbP3GCd2OThn5{*1Fl}Dd+xV#|It!oAs$Z_BpRv zhWOGD%yBBraXm4|g<_8L6LfE_8}nJ`dDpot$FalOGPkX^xUi4i7rA-kIq1;8b$b_v zU_K7TeB251ac9iOO3cS$n2)<)KJJS7xEto-?@_TU+gRw6m-GG{^DkypCpNw&{y5 z)>f=6dwgZro^#Qz_A+XpB68hk$2p-byKsH?I{I#D>pqc7THDK2nxmfVUN+;-tj?|P z?CYGibZ9G`)2)rQCA+4rejDk+PHY@HuEV&p+lWi7Y*+o{JeJw*xCOY1p^(AGe3~?OYe*gVh=7v?gpTCb9Lz zNT)RhSARRyAJ)2mU6t)@o5YTki2M3@+}BUY^}yJXVC;Be>_{3N?%Z2)Z5W4oo^4$Zci$X#_kA;0w~O!3xby+7%W%A> zcI4g?^4@m$9X7wd^K0FgT-jl*)7y#%Y_6PZU+=iEAG%-cR2Xk9EJ@xx306TF~HK#x#(lAj?S(7 zx2?Jz^s{2# zjrlg#8Qe9!Ti4mvnBm$TigpiceN9(y>YCCH_lF9c@7nsjEB|tAk0T%HPa|JM7eD~+ifA`166TWY8{AQ!ocYv+J>1~zsKatMX zmd@XA{7;noN9`~Co9&<0$TestM{CX{49N>i*)C)6C|Y|fxFZ>CwK4uzj3`Q ze|3yMj=Zh5x%xYWV?1=^e-zK#>a$kYySctkV%HZsTh6`)8_>G1xIXl0o!(YCYz}b# zK9A)+=%P-Rey)vlSNWaiYF@Y2^N{`C%gd9zgf7Z=v{hSq>}9yRw`r?hZtmQSIV`lb zy|{Cma4xv@IkpZSi9WC+SAHAozqu~j(^h_0-*LFIE2rBZ{OzXDMV-tiwz-J2uJmK~ z6NR?9rN4suV~*;9IVu!$l*_*tF@M@^``ZnReU5*3U}f3oDOY~U&L6bZ#pZ|IPV)n2 zD;H}t$1&mN#%5veFRX2Tm(7*q;$DpN-9PZXkuGfcNB)u1Mt)a)!t7@MPAa4G`izub zv?%)?Jg3o{9?I`SlZ<^SuD&0QXy{La8dcP{DT2B+M{8Y>U0u!5f8_VB%5H0XbLstC`@i#dF>Up^b3VuW-nQEFhq}bJ_H9;}$OYgSobDmorebw6o&y?Ufp_V5u5Tn@nxekBJinsYGi(S6#ypY6^SW(+z znP)pOwM+7(c2V4#SI3?Y5aOAD#X1>fES1r=ALSgDg4a77+se^+vU0lIc~+)>hK$~T z)ZsdY0wMMivbD088+k<`-bacxf&h04hJ9eL=lFsiUBfWL8g$hsj;%rsdPE)8$0&D2undE{xqPMR|~Qi;QkV^e=f+ z81!&F=562s8^8{cutA`d0+S#Ko)n0F3XJr(`dSn^0jHY`x&)H%wJ{C3N&Qj5flXMZ$`hvcM7_Tt`obsL|X zuv^$p8E3G=yPz*Vd|ye}Ggr30@`j#XY_8D-4Ukcntew;)=>_T%wS&3{wiBl*?8EGk z=l19I=cE3IQKO-XulGQWtzK?iV2r|c%qBrW=m(5jf3#T~FVxj1%E^RlC9l}>2S_L& zs~rVkPiz463)tpk4T?m2l6Fy8)J_V6ZoXE9#oHv;$sF_(gh`PH0(*v`?6AmCYp^9q z_h)u%ve~V8Kd<+icX&Nq>8Y6SMR_Kho?Ks{zc9A^(ck`&3Y||ox0b%QKd&?BV;QL- zv#w%1;o~aLa-7#Ywh!?7uZKI(x`^22JwX2gGb;5N%+oT$HUTZtw?;PKLPd46htzG}kNIwmE z2Kx6nFLSB?IHbozR@&Mq@DRXf(N=%h#n#tsEZfWMeL+U^ASQc$Km5G|I{C$OW12nD zhFIfC0T&Q&vfMBhL>LP~*aGeM6_Rg;OylDxAQ}9EwILU6C~o5QcV*v_%QC8k*!6Rj z=Pb@&cFcpg#QctxUx)Gq4t>k}HJ&?4kioCv-|;rT=Eekk7h{l(?-u`sEd+k<AG%2UVuu?OnG-)Ft7GK;6# z7P$~5nZIg;%uZtRg&+AM-umu_y|})RLoZyH!S@BSQPK?=^|~peQ?|Z{0H5M;%*DTW zp@uKd2jwZq_qa^Mk3+=s1dK)JaTqM5;N$)pS9YFCa=ceS-r^5IVThH2CrM%zTinb- z6VqRT_J#G5P_L}@)H!Jb?D+&qqH;-(>wE=rvJ~;L*YVhKz6r9;krTGax%nc}O-@4~ zEDu9Zhk46BCO<+txkG;9k(;-WpF^%+u}2?1=a07fZ&M(SvAIu9(rscL(^<{(a`PPg z65}ESb`FVj@J*XeJ`UrmDcuV`;>L{?dn{DwTBk)LO(4ZHxshTO9xNr#ZRih%8A6vf z4(lMN2*@9e_c=Jf;!pCFF!c$pWs97F~-_wv_yF=vu`xJmX)0$R0TQBDfWK;wlnf67of&m%eydwiC%@48yz)z{tR zw5|unkiA@6Uj+5Ty;jm83XOV~LIrP=x8=^9WMOLuZtbKXuj7bk4r9*8$ws$&!-jn@ zhuh2N&ue@fuCd#54Dw|`HaO?)Af*mTKGXrW>yY7R^|7=wdztt)Fh39KC#R1gyKL9> z?=PqOAogQdzB(7@AA#8WRv;IWJj31PnENt9PU9l)__Ys%SU#x(|@k zew!Yy>Yau2iy-znlN;-i?kaA5l_er+5?hPm*;1Pwc{_P>Ya4q#g@f?y?_fEdvem=+ zu`NHpPQ%&<{>#=sf>1eyW_h76f$-f>_-<%?kQL*_%&*njVa?)=wHo#y;F_RqSgUc@ zATQP&p@{dPi1(q9+%+aX4)|ew`(k`!-Mh^p4zRV~1(b*V`3~h-1%X%}B9;cC{J;!< zi?7Z{8`O#W&h^g9)E3_{eb{1+J^mu*IIIJLI^#R+D0~;a?aqAK5~JEPACtq!@C-%d z9Ult{Vb8gTaBF^+*UakR;vQli^7|t{n>RcIg%o()zh!-}0C}H)`~*8QIEa9OvnJRL|Sz?lmBHABVMyScmi6S{CbBv?Bnz z21NQ`jnCFZ4r@j(j}&>Z-oY3Oi1)GD$FOXboZ=xZv6GEotj%2c%=|ToACMNG=^#No z@T3k2K&-txMEc==1Y-op-|KEVrh2{DhodwA&2#5#6J@;5+1wlb;=cw(%&Vr|fcSbCqM~ghX zzhN!xYTo7M3Lp5og4!L&{YPJ~DR+&L$*#wUKq4Rs#-uA-fAGAVy5`GikFDJT1@)0QD5v4?^6R#2;4BD3 z7E2guu}OmbN$_ zbNoW^$JBx?D_)g4IM4ot#$n7A;j7@*L z9*}Q^6L0^XV}vj3L!?Mn_Zl1 z{D{xbzHec910hFkWwGOy&&RFv$zA1Zx#0g_g0DWg53?ovH0}3NGyku<#v^~%&z-vK zKh{s|lV|eg@+Gs3FiocxY>%}dq%THVz<@UGo*RglLx%wDv?P}4_mTAN} z{yN-FxcszL--ovA{!CAMeaxop6L+4k&+#{d`7`|gs<-*`c6-{-eP(OlpIv9~NBed5 z{#Du%?EPC{)4#3$ZE4p5zJKlI3GfbCd~<_;;pET#lc3LWkIkh?NJ$Ft5d5!ze=?5s z72Y_A8IDUqgy61cXOvtjo(D#X;|KGF&_^I}!;T;c;t8jUK!DY*8;%tMfe-$L-T5aB z6Y@uV>Rso!ygovK0QSTcKD_FZE-lpw-SEMrEx`BN>_7I%6aH&asDBjSetUxRac(Go zzMHMY1)cfhP}}hXw&RYrW9RFUthSx9ncQ9zpSmm`YdQA)vMtj`GnL2ZpSXQHvhb_E zJ9Ivujf^?`Qgh@w)y$%b^IsioHG}{oIQU*O6tNzX^WSn>z3jLM$4A3 z$X;ptsnOVxqehPzdtcnR`^Qgs;K7NSN%4~trc9ldINko!H~-0v`!{rJb6D7>kT!>f z^53ZRKljrA@?jzny4jZuoQ;byEopOB=7iZSUiuYJ3QBlf`?BRGW9l_}4volvpy*VQ zl0V(*|FyUHB()7+`-}NwZTa^i|0jhP3Omx*g-wO*FOqkETFPHjz+Ev33#&<|W}Q;f z>{AO*Mc$nmM{7TA{L=C(QN$YlO7n7l{bQd;?8q*3#JGG+rzwyN4<_m=j;FMIPVBwzUDBGqi_Mc3%hHu;n--?L-VyQ|G$Zk**;aa zauaOj{ax$_-I(0^oAWj<`H%i!sriQ=q0>iX``8=B?7=>E->{=;!QJDe--y_$bMfNo zWc$mn)R|dHYBjma=bVStGs*FcugD1`RDUrY5}Yg8iVm%3EuN-0e%;bzsZAJ zfzkI6nZeb-$MIt^P2hRJUxwqmmu!5;G6L^BOU6AdxDptHA05sGR|6lz`_Ssa^}u%w zxE9<5j5$mcz7lzWOFqKy6@u%4Pn;y=Mft$8ZUV{&uLJ(nT|kZC<{r573>Q!nIK%zD z1auSJ1iS(9Uj-fR5l}YXLlgq82M)*kg(iTjfvX@h!1I6?AbM~sFahri+61lzid1+P zJh%erjduW97zax47f|3M;K0=h0_p><2mUfcK%>FgJLIDvGr-lrYP?TA37oxG{sJV6 z<-xn<=R#J4vv2is2jKfxNN6@V!-vlpI#JDA~?Mypi7Vxa4Yce%di)?8F=>BpO@~eEnnC2iyeQ zbPPIxTaF9pp-%;r2CfD6JOLfRRlu{5P2g7G2cHY57~Bk$orX=o6~LWe3+NEI0r<;B z0X2hD6WR-LTZ4LmKHp+IfGdHYU4m}l7U0|~unD*h_+6=xG~ia?L*+tR4Xy<)uM*OB za6RzZY9ZBu8-U|$gwz180S46y=>)hE_%DbB+yeZiPDoe4=@lV$dINWwk0B4R`A)?(*n>h^2d)7YLh``tfbSd<(k^fl zaL-`~|7~NMyYH&4hX+IIgv2@_s{vw(IZUug=5>XQ4z&9d9lm%`AHVihn=zprwm z3oH+?M>W3xdmMHE{_=_&$-!y28_j>!jkk-2H^6s?oFRmX1Y67E=IlJb-D$Ixu7@^kM11Hz4`oCgAZk$Omo# zKJu75nZflyKfOC$VEKVhK(2x30poMriPpn+fR!7d8@S>LTnkZw>w%g#+$kEI;gE~& zlmM;pDLz9;EIJ}>aaviXTX)f2eBXh8n^~H|4}i?pTIZ) z8XglsdO}PKHi;>X~|vn(tt%C(&QP1>eI~;CaB5AD|Do4tV++>ISy}!+*g!a22rkb@T`0 zz(bHca5GRK@gM`Z0{EG?2Q`9QfFJqdS!|XEILse^EPo1P19%jo05=2s^uRL?;3{Bf zga>KBmB0>>9+bj3u+IPw%3^tdlcGFG53U7@2YO)rf_i~_26@mfa1(IeU=OMT*8$&- z_8=2W2adhhgUsL>pl^%^HGwOEyN7wuO>q5i?B5yz-8Q03V8(d-%@JG=44B|S(cns8 zu*QQ%GY<5d((^i>I60k;6p{(!$& zZ9#tEl^-RD8L;_P30?e6LeVT8_{41qX~6S<1wv0s0j~r06?u{#Tm{_Z1_9T*d(xK@ zPbvnt0I$nEsUDoLM{h5r0o(*E5Ah^3cpcC!%#*HwD}cAU;W!WZ@jT^rNC>zA_-u?P zbz>YDKFpJ1z*WF{NF2BcczA>-C9rh0Cv_d|NlAH>wrtwL!Yf^7f`YR&ohB5fccPa;0EA=?>$Kct^*!`%m6n7 z5B~ri7ze&)^&}m*37GpM^Z~B}ru_uFF%F!Led)#ETHxqk(Kc}9O*~g6kdldUU{9fx zu7T$P<3&=EY(swFw~#<^D^Tk$r9Lbjm?oBz8e9iF=`E!Ma0{>i`$g7)*8$t(*%%YJ z68JUbD7Y0^hv!tzusp!@U@2L_b-=3-dIoI|k<#o?DJj6~fa#s2qy#qsgStvd1+E1C z&`nBlEPsC~^;JPXa24?72q|T;`~##Ei)V6j!8O3c1EsVJ+ziYfB&9vzdf=+T(2a56 zs%R-)U>w+eh?H)EtAPGPA=^p#!)QSTX@RJPVruzkConfLnlzG|&ND zF$wwOp#!)MxG4cTfad}COo0yI)~QnZaT;_0*Ca|Qs!%{i~t^hVe&VbVl z^ew~+t_8jcxe0CpinSOg&mlkXSBMgv=AgeIQQ$h@IfxqE3e3cFrW3&RKy@$q23iKEDQI3ETkmeG>V=mB4XNK{u8Mcx)r|c^)x=`_B^g;~QWra1GGoq?E!L2TuMBI)H0|TR)dlBFhgHHlpvq6~Jy^z;56wU^OHc zTzLvH0kR$30_C*#0*KR{1#9q@z|efk2*0ls+^ zWr3T3SAT}x!08t$^=`%(1y=!0zhca@JiyZ5Fy_IPH>5OIB%?f*-%Un)#n_+6@&J2E zWYh$%0*>>B9l=ca3%19Tt=h8t-v|$WHbX@$1qSvS>RgW_mE92 z5Aa4u8SMgB2V;L4_C)OgR{@tn4uR`|i#o~346Xz2#|TjkkX+KxB@r}LNB6xV0)d6B;fchO2Y3|k^-Dztc{Nbny_ax5a|q$ zLs*^@z{@s%1=s`oG+8;}Koca9Vfk+Ym6?1VhN(8527K1W^MPHn_&nW!W{93$ z3+%9rFK0CHIUBD7-dK)4VtIhmR-li-6M@@poT1sq87{^1oJQnf&*W{y-o!)Tn}EMU zEUX-$cr{;_9C$B;wJQerpewtsTApIqbNuU-I z2(ANuy-r5mz-c|sL&Cw8z`6}GiUL0bya-`sHUXP$oZ-MHc-_=My^S+G4Pp7M!0x#` z$8U@heixLYQ6|IBA*@|ZK(D9xJaxbm8)c+H9)^9NhOXc$V8RwYo#77Ves>V4NWj!>g~#$O?W9sCW%} z7~prn*C65G^}yBjybcU|y~)?x2UvhTpK9bO1`fymPFB7eNC!{{(is{d`QS~!AK&H6 zxd#0GFwf~d8F@DFTn=n^gy#yN-%+0X13P@o^FZJfNEOOV1U?HfgXaTZx`W9NblApqcn)35Oo1-A%Wl~;F3%Hn9%{(U*>r(@Lh-sc@6<@LlVFx zS7bC5!rGMxe8$GN13!mkBTpl6?05Y5i384su>48DH8!pX9)RSs@`2~RM=S%s0DS2O z^bxoL_!)%dX$1OP`7#+k_9NdfdBBe#tb7Ylb`@h7`Q^Y_kOuH9;6(@HqP*ZjWbN~;`1>4-NwmVPTxZEQP&kn9dA$+PD=c z_r){u$P)+L1YveySYzXLzz=NvDA3yvdLzFAXncCTg zMhL5mVM!45M7j}J*AZg~ea-MFgtd`jAG|waCuL@u593|5LV_M z;Bg3>A5Q>-!+G68fKT>99$dQ}IQ|}7i!n0+xEI3auX>kA-c)8-M|E=ogH! zK;U-}79Xs@k@sV)BF|{xwefOl0%w@^0Qw90i-B_{qQ8)y1oY7Gx=DZ&A#8kVfbQ|| zsdB_;V1Ed+TO9E8WW-gZp8@ty;Kzvy_z;A(eFo5EOK14x6zuOu{!PFwQ!xg>^MIdB zlXL58Gw>XQm45+v6T-@2=$*)?D}dn;mdmgg2z%3Bw%Ld@vkOt(r2JHGUUspHa0tnMB1^AII-3&Z61OAWvXMk}t zksm(JP%{g5MmobB2-9sHaO!NtU!*4jKY&~TKMEu*Ul+rtA*`-Epx+#xD}f1f`Enfh zjgV4WtxD=EBQPrzw$1pUGH06*Ex zb2D)C7PO@bu^RY1g!P3H_#K4lU{K3E;r3y#CR^4cidYP-Y%* z@H4zkqJbYn)JQi21<%7i;BLS`2<>Pd-q!gOBYDPeO{3 zrx6(c0^%6BekXi%7xcj##8CSp-=_>OLf9PI1YA%jr$*#=+%L-Zks9})kE&q@;7v$4 zIK7562-D#VaO7UzCZmCiAS^u__$q|iWDoFP5N1OQaA7@kMmcFf;Tya@Zou!~M2tl` z+xIpc!ty5opM$V+*uFW*K0ck{78}n4KDr+<5!dR0lDGLX8ICaVab694^Z*}=^uRUm zVvc9|f$Bq;4{8w8fbJi_pTQ--FCZ!4XMjI`h;qO!N3n18Bj^LJ0#-nZ!Rvtcf5OiZ z6M)}9*qmzxdLM&NB98+24utiE3E2BM->yEuG{_m`$p628aNZe`c4a^bFdpL2e_Yc%!wwT?|FV6^amb? zVWj=OkfDI58(&>tv20)k&YT!bM2I)HBsvq#K0PsBEHb_14)B*QGOyFkV zXOK9w(F&Yqg}-3UpaXsfQGwHs&|JNs;0(F_`|wkS z?7bT-4@36;CB_-D_a-sU@RW@+yav%@9I|)Vuy+QqJPg@;OBiR!-i^XI!!#Rb?;Y6y zxrVh0L-tM(CDwrq*?T%zeunH_8jLe!?|WdJA$w;+9p+z#Y;QA5XUO&}GkqAceeW!t zA=@j?(iyUS;w+sZ+mB9YJ43b?ouxC}XX9)y@%J{)_Vb4R!rSe?^vTwL)cy+=XwH(U z*)!vIgg(2vWEPl?mrgz z#{z%b0`bXNy7aWvCCO7G@O}m&{8g^ip1{9d=sy?yV}XAx@Lyp8udW>`&QQ3ZuV971 zJFs)t{zJx2PF}ojBl!*U?lS1n-evnDX*!*xpYR6Go`T>0E86srl7HO-FX4Heb&uh1 z&EN*e{Iz)g3o;2Z3NjE92JwRYs>kyukmqt_ zv<0#jk_kzMOo9x9^nwIHu0D=uuOR<|d;&QDc@j4gnedhkkP}CCm_=xNsuha zI!FR!6C?#&77B#ym(G#-^Ho(GSV~C=V$eum%e!DoXo}jmPd4vDqB8_=PXH` zpPZRB)v=c0$Pkm2u`Dxd9CoO)BOGTY&s&y}nzfQYL_$XL(q*_ZIZ2a|x;!;4c|mff z{T$2Ra(YZQuFOIcCL}LUPE)3_|A+OQlR0k5^7KW?89kNDQe)@MOU}$3)^q-xw9Mq5 z{q4oX^lvG|xsI6rj{3y(zf0Sgq-0(4lBDD%^K9C-BxJ?fY}HbQ-FV}WJqyiKvYq+E zdag)aG9a?2a><;qz##+Y4vLD1ikdfX zeniszp31a2OBO7fvw+WTGe=B+d#mnh#GPc;*qHwI_TV}6e?I@q7EpR|{;M`>j9R14 zs5j;r4aPd7$!Ip3%FX4v8huS(jiIKl##E!I4XjnxhS#cU>uXK54YlUl##&2lQ?0eO zxt3I3TCE2vUYsjO60sw*{>+DcuezA~@UP+3=Lsx((xDy@}NrKnO?sjAdf znksFTu1a5(S7oTGt1?xYt1MO4DymjgE2~x2>S|53wpv%Mug{37z&I9bp`bWrh{AXg{H!WLUUnbp#|>= zvKBTMQjw%cQ50CDEaFE&U2%P}skouoT-;b}DQ+sZ7B?4DiKIkP5?G=v2`@2MHdabt z>A9JCw!`nHU`~@@Jck>i4RMAN43B*lR?Ur2->WEbZa=NB7cy#`pW309N9V&NsxC2=K*B`GD@CAlT}CB~Bal7^DT zlBSa85=m)bX?SULXMtLsj;-aw4t=Iw5hbYR8kgL7G4%z7FU*7mQt2o zmRpuzW-O~OYba|hYbt9llNbYy;l^lVoH5auV$3$?8uN`tW4*D#*l27rHX9}7f#u=l z(dBXFiRCHf+2y(A`Q^s)`tpYI#`31}=5k3zU`2REbVXc6Vns?tc17-gkiS{rYXm=2 zBC4t3Ut0KXGVOp)>57q;Z-C=h-^wkHMK!w(8A;N@HPWH%>*yAz{3dM zrG#gx;Z<6Alpfw>fG3$aFS5de6!0DuJVyhs(ZOT#;4O9V6f?ZU3J+1hJ5-2|nwAJ@ zKy)+}nGqSSh>D70WwEMQjhLt{))niE^NJ0{b?_oHJje>~QNVLlCF&AQiMB*nqA$rS zF_hGmm`cngmJ(|Tl`2Y=rK(bOsist0sw>r(=9L;s>qC5uU3}tnHA?`BU;63&X9K4_EU^k@I!7DBBNHu&>kGZ5C9>}5_i)YvvNzL%F zXjnB4{-xzSj72g&j`2~9#V|g8@zINqU5Q-e;^P({wfLCT$i*x^V)5~ck5+uF;v*Fw zr}!wv$Eap5LIra1DH?qc2XEAJ{;20XlFd~0E%Q_}H%A4cKf*CfsWDF_aX~3vPGkZn6GL%Z`E`DYT!K9#QCg+^I9rpeyij>SIzmZmh)ac=f4Kd zgH4H59ZQ%Ud z#Cf=d^KmL?UasW)T+Mm9mh*Kz=j{g0-%XsyTR5Mm3g-1n&hOQn=W99N*TehsG20p| z>M`FoR5W77ZK`O-oGYme#H<@$8I5^2t}+obZ%So0=HA@Oe9XSa%6iPd4VV)wl}(k+ zn1dyl8I)DwRneG-<1j~PxmiNb%@YQ0rZ91Hg@v0fs9J*gLdne-YHrTZan>P&H z%wgi@4huJXP>lrhhmxB?)Z84Rnj zo|{(;+{|L)<`xS-yO_Nwfr}{;+iL00J)r4-!3X}X2h?F!vS3bPt1~smybhz?fVs$w znW%OA$w%~QK`z+9tlS&JI6 z5^Z!?(`j9-=d!VaV{-~=@eC^BjmlxwsI&PZ-bYQVagMD`)rd2Bh}#XAy$KOJ8uPXe zvD%0ko2_(|g-VAgoQE;mToH(InTWAyz(}ma2((tRl?fYvD%%LuaO)HuRw`@^=3%vB zsA|MoFT947?YP)T2K(9=iu{LsOnA>1e(aA_IpNh}&wDn+ZMg0w@DLhu!e2tt3wU#K zL_3w2*i*Y9PLM2e6AIi(HA5`zEyl~3a|Yv;%!UV56I2}>Qrf9JMR=c;TcJ=-stBiR z-IPUV#ep~6pE|Ll=<*Ux=7y9#YZml(OYpzA1V{e)8{M+B(+*n!kfK00+l z>Zs(5EakW*^CE(vC6Z-+iWMtX^h?62c{tS%UnxX%Q*~jdM1H|7SKuBSx4KEnaif*- z>FHU@QL(B{9lRnVRnce@_j#y;*MNwK2-T3t0l4=a@{nrozpF-=sxz-fV2c_F>l{(2Y0`@Y{$aP$nD1zqZR$W%K6D--8WhHE?#=BuRQpB z<;f3}q4Rq6{rJkP2OFMg4x6(x>azQLv#vbcao^<+KKZCBNtDKS(8~OQZx6FH%Y!$2yn{Z-ZO|WR$%B5 z!T|LIgu75Cg%FmcFhK8YQ!cbhSGOVafNskzJZmk*mhbL8?To_s!a zRh-pQ=o>u$g{&iAj_-8QdtS{qCw|zrZRktG&d`N1-Jjh1!swvhYfRhs9G|oJ@_;W6 ze>L8Xjy@Xl?7Lg8hwa|&^ZHwlT|K!;*C$q6@yfiw(a&~VK6lM8`nnrUNu>jhJ?U|F z|Lfn3Dh{kKT_HHzZo51zbaz6p?oXzD?HxbqzO1)_f^)i_%}I+^})t!OzCbeo=X|pwnT~mcm!oNPFz~ z`9f;{{LsEXe^I_W^y^?DTu)GxBN(d65e!nb!*B}q69{g*xvTI}^V_OWmf-Ey-p&8Y z=jU^dFP)h*;j4ZNMqGR|zb2&JL~i(nc6AF>wb%QPxm;L#ZQF-A5q&3ZEGr9p@u$TN z?Nr|E`gW{9H@M~o)k?7hk-**E18-|ztXib%W|mx=B?Mm00WsiZ3$miY}rYfq-;|cSg;aaxr?gp(rbO*xvS^Uw>zs$Nm?p z3ZCe5W&N!3j&F5oexhS)LYMD~b5|_h-_ie?-~Frl_kBJ3hikX>Z!{NNznbx7w|()V zh6l~}eED17sh|9M?Ru4J)e9SU&pPqRu~DOUjtaZ{Tt-3Mo*f^)II&DD@>|h!^ofg) zHBC2K-{~(a{q|~9%$4h+_n$BxpP&vJICf!bLS22q)Tgf$pB&co%9-Co8n3N*Xhy=O z^dAZ|!)`A3Oj-AG`jOMh%>%U|LeYoHx~fEjw|d^;{4NJ}Pycz!qEC8OrY-+Cy=&iV zYnCqTx~R)--};2UJ=Zi2{ldEUiRXTQ_}Gl9z;_>bIrDWv`ODKPW`&=7W4kIxT!(<1 zZwtthYV~gI@m&*Mp7l}r{%2~wa5CBdl}N~$)%JP3!;_Gp}XcQo#x3P4X| zQt-A9sy=L1=ob;I8o^G8{G#nAl=h%|UzBoGdQ!4-a_WL5sY@0p<0r>PsfG+vPL7Km z5FMqAR7FN$UWoY9pnP&q|B>eK>g?BNo*Xhg_?6s|KM&Y+dDzIGP z8fW}`IjWn-+3^!U%^r2F!{?n&{d)Z5f{yVMy$hz@%-wNd>(RBM;ScD#CB3@&oaE7{ zMBpA?^N+hTztxxiv9l6W;O-- zB_Dol_r&#m;)oPyy*rU66_v0sK{1Ol};k&t(Sp%*%HC>UG)rop<-92dK+t;flotBj*AARe5oaUz$ zTRYx5ttlMaFefqp=hedYF^`8=57}_##Oq#@&CU0HvrM)5it3r={-qC(pP4o1ff2r2 zmw)+A;)fZEUa{7bhZpx)p5hbhm-xb&9=!$Eo_t{X>FiI|-alM@-|P?8YBJX=x`s{H zK9!Vk;AmLKrs$y6^Fuz$jvk}hG4b}ii4)$c@RCf9U7a}WzE^+Sdu3Ckr|@W6jC`t( zJt$8{P@balWf6x9$_P0KrI@uH;&RGh%jLcIHqZ9iaO2jTMR$}jvG%J}!VLrMA@+}gwat52sJ<_X3)Q2THl5uN zs8tBmhNumZ_Hx<`)y{>asX|yGN;fR-R32jY1#9I3kxC*KGvX$23P4yB;SH-@M-SU9 zS^oW&eM5JAI@KcVSkfF9^;4g{-(=0dzCGg=I#Qda>gnhEQr_s7$N&CP(dr&22k#p? zGj8#-Cr6CC*7L3QYsYAQ-?e}5ddu=PgO`5T<@!Svd7u3J%);}RmB&tMR_4C&)Kdrc z?k|W7Tyv&T-_a*1@S{09)=vH9gY(NT9=Z@bdsOrA?YEZ?8TQhN9iQC)ukg#WdlWpI z7Jxb=c&G-aYc|!XFEV zpB_~|pkZRP|F#`J|Lfy~#b3-6`gc|jSS>pD?CyhM%QE9X9NTy(Dx|Pv{N|6+mk;i< zeniKQdwd)CcAiJwsK=hoRp#idN00pQd#`~rIzJgb<@(^KHhLC(DEl^|~S)6t8>SytJzt^sh3;T82 zy?b_vzS}V7+MYQ}-bp#vL%ZQpLv8u3?V%Uv1rOaYHTyx#S$i;N?Xt~TUhh{;bH5$7 zqn~3^x(~H&*X#&Kjs1s2Y4{&cf|PMAZN6oRyHeIC*l`oW(k)IV*DD zAU0+RAn6AdguY7;*a#>cm^SM)H-*wMOgoA8VxJyH;w6FXP_S(hO(*+U!G>kbu{-#g}12lFSZ&G(Pr`_M-XtD|P6 zm%aYN0`0SdJ1%@P?NiB#r{7E8CP=F3vj4S_Pwu=CV@@(f9IWLGP6eJg2$1t>3|noSaX}YIf!g{CU2n)BW4KUr+LmxUlrd_)C|>SD!m< z-mQ)mFWvp+$#>}8O`h8V2KIRMO2EyjpNWlcJsP>->FTpv#+;6QfAxmw+m-LHI+7US zx&5h)v#w5kadZERJtr17eR%1k-!fwc?7rB~P4F#nWc_$$W}vd2c1Cw>zCb(lkflbf_U|+Bj@s_{?h-%xGNt%_&+jdN&d^{EG0i@;hTq+sY~Orr6tKXGf!`7OQ2 z<*dB6;kT2QIzAWlugiVh`(C=5@yle<@Td~2o35G*e}JGA|ZWW|Y6zaPd0ZF(?p&pYkXqoXn(Hbm^&k^I$xtc-JGzdtLOGjwr8 zkF(2t^1PpUK4+W%D@o^9RHfcm(J}V+yWQ&tzgn2n$J%{C&DNv2!|M8P?y>X5TepUP z7f_WL{?x`}-hE#ADk5}8!^^kcQ@nCL?DTtIteo&m&1WNiR_VW0-OTFyf#0geZS~_d z``+^UBrCXVpZKBDhTN}nUVM9MrSJ8digx?fABi7u{QVwjm4^!!7Y*8b^s~HQCcg3d z49r{KVct4vo42I;9|Fg3{?R?>*rDZR&t|1K&s+a9_c?!Q&fupn+-2RFz6Pm=s0P@l zuX%s*mg`>C5I6>IxguL`xo}IxrYHLy7E=dL2`$zs39q#gP*$o{ASBMwyLl1 zdoP(U)o7=_+I!lY>6316&`AYf9T|KyXryXhq;bbr{+}(qAv0Y*c6dSuUD|3v+{KNh zKV4k#-UGk=7L)bBJH^Yw!J|cRqGj zqJ5)xpR!fP9p4|V4aj&@w7>4?swDR!|3ThIqxZ!%O`McE{w4gz_4L)HLr>_sujsur z>XTu^o;@+*mTr2oPw#V`-|K4lF+Dl_$g5dT-J9Sw>DbIK%5>*9iF8Jf=I!JBwkyq_ zUjIL}T6sK_>)+1I*q5=F$dvid>Qfo7as*v3Qn(p9iB?lshV;7OgV){{#A%@z`Q#n|S0VwpVgVZBANUWl z1p*G!tWo*xMcC}l&gZ3A_Zw{b>TNbLlYfJ(pJLkIXcl=ez)D=5pD2eNW?B>gBJqGU z5vUd-51UzQT9=-!a^gqV3nhpm@;a;@Mce18YuHaKO8y6We4vzx-@cWAa+oQ9^%1Fn&IQ}rOnwoMiV75z$xUcE{G0! zw4iSwJnJgu-)?T7()8Fxe4w-Exn)Bd%~jfU>XjZo{}=t$ z3CY)~#_f|5R5muLli99xqT7}MCf8}!RFCrbw|)3RWLBJ=c4-uO*Lx11k*N&36F2WP ze>jGZMLk^Yk4UYKP{XFKHnOKC$$j2FEl6v4kte~y;n?}tE^FPRELWB zd;(o_%xN8zFfFY%S6m7WV@@ibNSBM28n8&&bfgK+RTWe2%2H;6!Ka(+)?cO!Nj{}w zDd>qesMNOW#u{+tyU`VXica1`q6(96sg5$bST4>GKV1COeeRSzqe3I-Yh@>-u3~!t z+qIME>rIceSJPiOF|(V-7Xh*<_7qn6WgJ8HwFakGI;Ir-P)$$+)^gn6);J0z44epRdOXDWC(qItn19Dw!)(dbDqpqg&nZsSe_o;>pgRO zQKi!NQ-rc{STgm^!8aoF8*WA%YhhEt9UJG5gjXo#%CFgzpJlw6&s}Qpl*Bt)Y92RF zIV&9qZ-uAOcVvV`_Prc9DwuFqQMGMA%v-R?TEHd>yPa>3>ZniA zQQEf0;Lfb(CgX4&O1B~|&x*J$x-I89gk&4`lJBs+`#ksYL4E>1ojS`rti&1ewaI~( zs;{}qZn`cSJ^HK)wjsC_ADWeUeK6a!%s4xtqeAOD1$Kd1At_}uV|vu*0kn= z)$%BJa3Y1X4WfRg%vUCT>Et{{YGVD|lXCC9-asUW&Y6zdAf3R$=4Qsz-L|>H>T5t``Mjgazj=z>i^1Dc|rH?prgk3~1;dcwx4g=-X4{oxC5Ce61W z8)UW;ny6z(pBods`jBaH2Je$hmLAp&^IGFj1C%c(TllA@nEquG9v7QyPTpe2Gk(J7` zso{%)`0Y9qIA{0(^3?nJ=rCKHcy7op8c zl%E#Ihpc|req?f#eTp(qgI`ZxDU`ORSL$NV8Ce$iQOd`>!`y4m*^unL6f>*FqlVo| zUg{wB`Wn9G+Wz|6U^5zn7YP|+fRmI9^qOT2-&bX}yKgw1 z%oBLEL@zAn>a@t{(+=X@)5~HjZyv@@S_jd*6B*UmuD`CE#<;Ai}eL+5LSK+!Zj-E6(ar&8U=&B@Q@zKoMjP6qm6=k4>-?)tn_2+ zEB*`a!)8I5NU#8a1oQs5Nn|i2n2FE@{ci@(VYc{}=(4ZD99RS(`kzTphl9rvIQHY5 zU>HHzJg6TdAwtDWG*!F( z@Ah_M0W=6@`I!OyX*<=_vE}%Z$s~A5gt&X9dxdaN4B%6?%^ovu+}05Ha1zt-5ri1A zsAVvjP?c}1o{r8mFl@gEG|NSJ>e8i=>^2zL0vE*mv0TYgR$Uix$-ga^#V~WFPMPug z95=_1AGhUN(cRuw$Th~!iE=$mr?uYlUI}bkoTqBAJX@deiasweeC+kGuUfAJ9&x=m z?86lZ3t4#Nn752@hC~*|BAN4Rzq;^Hh*tFXiIwHh!Ruq*$hH8B*v{qkI-xsuBYI}2 zfEILf=#BvSlcZY=VZnv*d08K4YcZLooUL*-!x6^$CiAUj(A3*J4c5kxVnq%{zN>QM ztg!{&Ob=04szFyyJ7Tu+wKfK^4r_j$^t^C|c2i5B{Nd`h?+m*)1oo~!-? z5)}=$*h0$lN^EIeUGW!l?B4&TyIi)#lZbm8f49Ql)lsaP`rhq(dU=7!Zf6L&!klv~ z$S+;O)%%DjFV7r%mRh#7^@P?u9konFynE6X6{*PG&AxNAxZBJWl3}f8xSlU+h3PpV S8wKufZA!s?%y;(dC;tOuKjsPm diff --git a/src/build_settings.cpp b/src/build_settings.cpp index 7add7d37e..af5576011 100644 --- a/src/build_settings.cpp +++ b/src/build_settings.cpp @@ -438,14 +438,23 @@ enum LTOKind : i32 { enum LinkerChoice : i32 { Linker_Invalid = -1, - Linker_Default = 0, + Linker_Default = 0, // radlink on Windows Linker_lld, + Linker_msvc, Linker_radlink, Linker_mold, Linker_COUNT, }; +String linker_choices[Linker_COUNT] = { + str_lit("default"), + str_lit("lld"), + str_lit("msvc"), + str_lit("radlink"), + str_lit("mold"), +}; + enum SourceCodeLocationInfo : u8 { SourceCodeLocationInfo_Normal = 0, SourceCodeLocationInfo_Obfuscated = 1, @@ -453,13 +462,6 @@ enum SourceCodeLocationInfo : u8 { SourceCodeLocationInfo_None = 3, }; -String linker_choices[Linker_COUNT] = { - str_lit("default"), - str_lit("lld"), - str_lit("radlink"), - str_lit("mold"), -}; - enum IntegerDivisionByZeroKind : u8 { IntegerDivisionByZero_Trap, IntegerDivisionByZero_Zero, diff --git a/src/linker.cpp b/src/linker.cpp index 519480826..f212894d0 100644 --- a/src/linker.cpp +++ b/src/linker.cpp @@ -231,7 +231,7 @@ gb_internal i32 linker_stage(LinkerData *gen) { try_cross_linking:; #if defined(GB_SYSTEM_WINDOWS) - String section_name = str_lit("msvc-link"); + String section_name = str_lit("rad-link"); bool is_windows = build_context.metrics.os == TargetOs_windows; #else String section_name = str_lit("ld-link"); @@ -247,9 +247,7 @@ try_cross_linking:; #if defined(GB_SYSTEM_LINUX) || defined(GB_SYSTEM_FREEBSD) || defined(GB_SYSTEM_NETBSD) case Linker_mold: section_name = str_lit("mold-link"); break; #endif - #if defined(GB_SYSTEM_WINDOWS) - case Linker_radlink: section_name = str_lit("rad-link"); break; - #endif + case Linker_msvc: section_name = str_lit("msvc-link"); break; default: gb_printf_err("'%.*s' linker is not supported on this platform\n", LIT(linker_choices[build_context.linker_choice])); return 1; @@ -279,7 +277,6 @@ try_cross_linking:; add_path(build_context.build_paths[BuildPath_VS_LIB].basename); } - StringSet min_libs_set = {}; string_set_init(&min_libs_set, 64); defer (string_set_destroy(&min_libs_set)); @@ -404,17 +401,44 @@ try_cross_linking:; lld_lto_flags = gb_string_append_fmt(lld_lto_flags, "/opt:lldltojobs=%d ", build_context.thread_count); } + String res_path = {}; + String rc_path = {}; + defer (gb_free(heap_allocator(), res_path.text)); + defer (gb_free(heap_allocator(), rc_path.text)); + + if (build_context.has_resource) { + res_path = quote_path(heap_allocator(), build_context.build_paths[BuildPath_RES]); + rc_path = quote_path(heap_allocator(), build_context.build_paths[BuildPath_RC]); + + if (build_context.build_paths[BuildPath_RC].basename == "") { + debugf("Using precompiled resource %.*s\n", LIT(res_path)); + } else { + debugf("Compiling resource %.*s\n", LIT(res_path)); + + result = system_exec_command_line_app("resource compiler", + "\"%.*src.exe\" /nologo /fo %.*s %.*s", + LIT(windows_sdk_bin_path), + LIT(res_path), + LIT(rc_path) + ); + + if (result) { + return result; + } + } + } + switch (build_context.linker_choice) { case Linker_lld: result = system_exec_msvc_linker_app("msvc-lld-link", - "\"%.*s\\bin\\lld-link\" %s -OUT:\"%.*s\" %s " + "\"%.*s\\bin\\lld-link\" %s %.*s -OUT:\"%.*s\" %s " "/nologo /incremental:no /opt:ref /subsystem:%.*s " "%.*s " "%.*s " "%s " "%s " "", - LIT(build_context.ODIN_ROOT), object_files, LIT(output_filename), + LIT(build_context.ODIN_ROOT), object_files, LIT(res_path), LIT(output_filename), link_settings, LIT(windows_subsystem_names[build_context.ODIN_WINDOWS_SUBSYSTEM]), LIT(build_context.link_flags), @@ -427,53 +451,8 @@ try_cross_linking:; return result; } break; - case Linker_radlink: - result = system_exec_msvc_linker_app("msvc-rad-link", - "\"%.*s\\bin\\radlink\" %s -OUT:\"%.*s\" %s " - "/nologo /incremental:no /opt:ref /subsystem:%.*s " - "%.*s " - "%.*s " - "%s " - "", - LIT(build_context.ODIN_ROOT), object_files, LIT(output_filename), - link_settings, - LIT(windows_subsystem_names[build_context.ODIN_WINDOWS_SUBSYSTEM]), - LIT(build_context.link_flags), - LIT(build_context.extra_linker_flags), - lib_str - ); - - if (result) { - return result; - } - break; - default: { // msvc - String res_path = quote_path(heap_allocator(), build_context.build_paths[BuildPath_RES]); - String rc_path = quote_path(heap_allocator(), build_context.build_paths[BuildPath_RC]); - defer (gb_free(heap_allocator(), res_path.text)); - defer (gb_free(heap_allocator(), rc_path.text)); - - if (build_context.has_resource) { - if (build_context.build_paths[BuildPath_RC].basename == "") { - debugf("Using precompiled resource %.*s\n", LIT(res_path)); - } else { - debugf("Compiling resource %.*s\n", LIT(res_path)); - - result = system_exec_command_line_app("msvc-link", - "\"%.*src.exe\" /nologo /fo %.*s %.*s", - LIT(windows_sdk_bin_path), - LIT(res_path), - LIT(rc_path) - ); - - if (result) { - return result; - } - } - } else { - res_path = {}; - } + case Linker_msvc: { String linker_name = str_lit("link.exe"); switch (build_context.build_mode) { case BuildMode_Executable: @@ -490,7 +469,6 @@ try_cross_linking:; break; } - result = system_exec_msvc_linker_app("msvc-link", "\"%.*s%.*s\" %s %.*s -OUT:\"%.*s\" %s " "/nologo /subsystem:%.*s " @@ -505,11 +483,35 @@ try_cross_linking:; LIT(build_context.extra_linker_flags), lib_str ); + if (result) { return result; } break; } + + default: { // radlink + result = system_exec_msvc_linker_app("msvc-rad-link", + "\"%.*s\\bin\\radlink\" %s %.*s -OUT:\"%.*s\" %s " + "/nologo /incremental:no /opt:ref /subsystem:%.*s " + "%.*s " + "%.*s " + "%s " + "", + LIT(build_context.ODIN_ROOT), object_files, LIT(res_path), LIT(output_filename), + link_settings, + LIT(windows_subsystem_names[build_context.ODIN_WINDOWS_SUBSYSTEM]), + LIT(build_context.link_flags), + LIT(build_context.extra_linker_flags), + lib_str + ); + + if (result) { + return result; + } + break; + + } } } else { diff --git a/src/main.cpp b/src/main.cpp index 17306bfe1..ce92b0897 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -1886,7 +1886,7 @@ gb_internal bool parse_build_flags(Array args) { GB_ASSERT(value.kind == ExactValue_String); if (str_eq_ignore_case(value.value_string, str_lit("thin"))) { build_context.lto_kind = LTO_Thin; - if (build_context.linker_choice == Linker_Invalid || build_context.linker_choice == Linker_Default) { + if (build_context.linker_choice == Linker_Invalid) { build_context.linker_choice = Linker_lld; } if (!build_context.use_separate_modules) { @@ -3092,6 +3092,9 @@ gb_internal int print_show_help(String const arg0, String command, String option print_usage_line(2, "Specify the linker to use."); print_usage_line(2, "Choices:"); for (i32 i = 0; i < Linker_COUNT; i++) { + #if !defined(GB_SYSTEM_WINDOWS) + if (linker_choices[i] == "msvc") continue; + #endif print_usage_line(3, "%.*s", LIT(linker_choices[i])); } } From e5b8ea0d2a986dbba2ddc515495fe55f4e1b12b4 Mon Sep 17 00:00:00 2001 From: bplu4t2f Date: Sun, 4 Oct 2026 14:09:47 +0200 Subject: [PATCH 204/215] Add test for issue #7689 --- .../test_issue_7689/test_issue_7689.odin | 21 +++++++++++++++++++ 1 file changed, 21 insertions(+) create mode 100644 tests/issues/test_issue_7689/test_issue_7689.odin diff --git a/tests/issues/test_issue_7689/test_issue_7689.odin b/tests/issues/test_issue_7689/test_issue_7689.odin new file mode 100644 index 000000000..7b39cdd99 --- /dev/null +++ b/tests/issues/test_issue_7689/test_issue_7689.odin @@ -0,0 +1,21 @@ +package bug_repro + +import "core:fmt" +import "core:os" + +main :: proc() { + x := len(os.args)+1 // runtime value so nothing is folded + + r: int + if x == 1 { + r = 1 + } else if x == 2 { + r = 2 + } else if x == 3 { + r = 3 + } else if x == 4 { + r = 4 + } + + fmt.println(r) +} From 854cd0e8d8f7d2b213f8750e840ff66b4715282e Mon Sep 17 00:00:00 2001 From: bplu4t2f Date: Sun, 4 Oct 2026 14:44:34 +0200 Subject: [PATCH 205/215] Fix #7689 - set debug source location of if/else "done" jump to end of the respective block --- src/llvm_backend_stmt.cpp | 12 ++++++++++++ .../test_issue_7689/test_issue_7689.odin | 18 ++++++++++++------ 2 files changed, 24 insertions(+), 6 deletions(-) diff --git a/src/llvm_backend_stmt.cpp b/src/llvm_backend_stmt.cpp index d35b48835..727bdbf43 100644 --- a/src/llvm_backend_stmt.cpp +++ b/src/llvm_backend_stmt.cpp @@ -2912,6 +2912,9 @@ gb_internal void lb_build_if_stmt(lbProcedure *p, Ast *node) { lb_start_block(p, then); lb_build_stmt(p, is->body); + if (p->debug_info != nullptr) { + LLVMSetCurrentDebugLocation2(p->builder, lb_debug_end_location_from_ast(p, is->body)); + } lb_emit_jump(p, done); } else { if (is->else_stmt != nullptr) { @@ -2921,6 +2924,9 @@ gb_internal void lb_build_if_stmt(lbProcedure *p, Ast *node) { lb_open_scope(p, scope_of_node(is->else_stmt)); lb_build_stmt(p, is->else_stmt); lb_close_scope(p, lbDeferExit_Default, nullptr, is->else_stmt); + if (p->debug_info != nullptr) { + LLVMSetCurrentDebugLocation2(p->builder, lb_debug_end_location_from_ast(p, is->else_stmt)); + } } lb_emit_jump(p, done); @@ -2929,6 +2935,9 @@ gb_internal void lb_build_if_stmt(lbProcedure *p, Ast *node) { lb_start_block(p, then); lb_build_stmt(p, is->body); + if (p->debug_info != nullptr) { + LLVMSetCurrentDebugLocation2(p->builder, lb_debug_end_location_from_ast(p, is->body)); + } lb_emit_jump(p, done); @@ -2938,6 +2947,9 @@ gb_internal void lb_build_if_stmt(lbProcedure *p, Ast *node) { lb_open_scope(p, scope_of_node(is->else_stmt)); lb_build_stmt(p, is->else_stmt); lb_close_scope(p, lbDeferExit_Default, nullptr, is->else_stmt); + if (p->debug_info != nullptr) { + LLVMSetCurrentDebugLocation2(p->builder, lb_debug_end_location_from_ast(p, is->else_stmt)); + } lb_emit_jump(p, done); } diff --git a/tests/issues/test_issue_7689/test_issue_7689.odin b/tests/issues/test_issue_7689/test_issue_7689.odin index 7b39cdd99..091ae9f56 100644 --- a/tests/issues/test_issue_7689/test_issue_7689.odin +++ b/tests/issues/test_issue_7689/test_issue_7689.odin @@ -9,12 +9,18 @@ main :: proc() { r: int if x == 1 { r = 1 - } else if x == 2 { - r = 2 - } else if x == 3 { - r = 3 - } else if x == 4 { - r = 4 + } else { + if x == 2 { + r = 2 + } else { + if x == 3 { + r = 3 + } else { + if x == 4 { + r = 4 + } + } + } } fmt.println(r) From dc0b041d594ab7832b8785c2be0b2e59fba9e3eb Mon Sep 17 00:00:00 2001 From: Jeroen van Rijn Date: Sun, 4 Oct 2026 19:20:29 +0200 Subject: [PATCH 206/215] #force_inline math.lerp, unlerp, saturate --- core/math/math.odin | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/core/math/math.odin b/core/math/math.odin index 6fe872907..46d99ef63 100644 --- a/core/math/math.odin +++ b/core/math/math.odin @@ -388,11 +388,11 @@ tan :: proc{ tan_f64, tan_f64le, tan_f64be, } -@(require_results) lerp :: proc "contextless" (a, b: $T, t: $E) -> (x: T) { return a*(1-t) + b*t } -@(require_results) saturate :: proc "contextless" (a: $T) -> (x: T) { return clamp(a, 0, 1) } +@(require_results) lerp :: #force_inline proc "contextless" (a, b: $T, t: $E) -> (x: T) { return a*(1-t) + b*t } +@(require_results) saturate :: #force_inline proc "contextless" (a: $T) -> (x: T) { return clamp(a, 0, 1) } @(require_results) -unlerp :: proc "contextless" (a, b, x: $T) -> (t: T) where intrinsics.type_is_float(T), !intrinsics.type_is_array(T) { +unlerp :: #force_inline proc "contextless" (a, b, x: $T) -> (t: T) where intrinsics.type_is_float(T), !intrinsics.type_is_array(T) { return (x-a)/(b-a) } @@ -424,7 +424,6 @@ wrap :: proc "contextless" (x, y: $T) -> T where intrinsics.type_is_numeric(T), } @(require_results) angle_diff :: proc "contextless" (a, b: $T) -> T where intrinsics.type_is_numeric(T), !intrinsics.type_is_array(T) { - dist := wrap(b - a, TAU) return wrap(dist*2, TAU) - dist } From 6679c120f9792f5dec7334a565d1a8bfe7662031 Mon Sep 17 00:00:00 2001 From: gingerBill Date: Sun, 4 Oct 2026 18:34:52 +0100 Subject: [PATCH 207/215] Wait for a polymorphic struct's fields before reading them in the subtype and comparison checks --- src/types.cpp | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/src/types.cpp b/src/types.cpp index 015b61ed3..11aba82bb 100644 --- a/src/types.cpp +++ b/src/types.cpp @@ -2068,6 +2068,7 @@ gb_internal bool is_type_map(Type *t) { } gb_internal void wait_for_union_variants(Type *t); +gb_internal void wait_for_struct_fields(Type *t); gb_internal bool is_type_union_maybe_pointer(Type *t) { t = base_type(t); @@ -2923,6 +2924,7 @@ gb_internal bool is_type_comparable(Type *t) { if (t->Struct.is_raw_union) { return is_type_simple_compare(t); } + wait_for_struct_fields(t); for_array(i, t->Struct.fields) { Entity *f = t->Struct.fields[i]; if (!is_type_comparable(f->type)) { @@ -2984,6 +2986,7 @@ gb_internal bool is_type_simple_compare(Type *t) { return is_type_simple_compare(t->Matrix.elem); case Type_Struct: + wait_for_struct_fields(t); if (t->Struct.is_simple) { return true; } @@ -3058,6 +3061,7 @@ gb_internal bool is_type_nearly_simple_compare(Type *t) { return is_type_nearly_simple_compare(t->Matrix.elem); case Type_Struct: + wait_for_struct_fields(t); if (t->Struct.is_simple) { return true; } @@ -3155,6 +3159,9 @@ gb_internal String lookup_subtype_polymorphic_field(Type *dst, Type *src) { // bool dst_is_ptr = dst != prev_dst; GB_ASSERT(is_type_struct(src) || is_type_union(src)); + if (src->kind == Type_Struct) { + wait_for_struct_fields(src); + } for_array(i, src->Struct.fields) { Entity *f = src->Struct.fields[i]; if (f->kind == Entity_Variable && f->flags & EntityFlags_IsSubtype) { @@ -3186,6 +3193,9 @@ gb_internal bool lookup_subtype_polymorphic_selection(Type *dst, Type *src, Sele // bool dst_is_ptr = dst != prev_dst; GB_ASSERT(is_type_struct(src) || is_type_union(src)); + if (src->kind == Type_Struct) { + wait_for_struct_fields(src); + } for_array(i, src->Struct.fields) { Entity *f = src->Struct.fields[i]; if (f->kind == Entity_Variable && f->flags & EntityFlags_IsSubtype) { @@ -5217,6 +5227,8 @@ gb_internal isize check_is_assignable_to_using_subtype(Type *src, Type *dst, isi if (!is_type_struct(src)) { return 0; } + // a polymorphic record is published for reuse before its fields are checked + wait_for_struct_fields(src); bool dst_is_polymorphic = is_type_polymorphic(dst); @@ -5259,6 +5271,7 @@ gb_internal bool check_is_assignable_to_using_offset_zero_subtype(Type *src, Typ if (!is_type_struct(src_struct)) { return false; } + wait_for_struct_fields(src_struct); // We check multiple fields in case of #raw_union, // but exit on the first field that is not at offset 0. From 448f859ceec07bdd37ff86dc2a1be4651b5f7f8f Mon Sep 17 00:00:00 2001 From: gingerBill Date: Sun, 4 Oct 2026 18:42:06 +0100 Subject: [PATCH 208/215] Read a switch's case values with `LLVMGetSwitchCaseValue` on LLVM 22 which no longer keeps them in its operands --- src/llvm_backend_opt.cpp | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/llvm_backend_opt.cpp b/src/llvm_backend_opt.cpp index d3502a147..f2f8d70c6 100644 --- a/src/llvm_backend_opt.cpp +++ b/src/llvm_backend_opt.cpp @@ -949,7 +949,7 @@ gb_internal void lb_truncate_bool_arguments(lbFastIselLowering *s, LLVMValueRef gb_internal void lb_lower_small_switch(lbFastIselLowering *s, LLVMValueRef sw) { enum {MAX_CASES = 3}; LLVMValueRef cond = LLVMGetOperand(sw, 0); - unsigned case_count = (cast(unsigned)LLVMGetNumOperands(sw) - 2) / 2; + unsigned case_count = LLVMGetNumSuccessors(sw) - 1; if (case_count == 0 || case_count > MAX_CASES || LLVMGetIntTypeWidth(LLVMTypeOf(cond)) > 64) { return; } @@ -979,7 +979,13 @@ gb_internal void lb_lower_small_switch(lbFastIselLowering *s, LLVMValueRef sw) { } } - LLVMValueRef cmp = LLVMBuildICmp(s->builder, LLVMIntEQ, cond, LLVMGetOperand(sw, 2 + 2*j), ""); +#if LLVM_VERSION_MAJOR >= 22 + // LLVM 22 keeps a switch's case values apart from its operands + LLVMValueRef case_value = LLVMGetSwitchCaseValue(sw, j+1); +#else + LLVMValueRef case_value = LLVMGetOperand(sw, 2 + 2*j); +#endif + LLVMValueRef cmp = LLVMBuildICmp(s->builder, LLVMIntEQ, cond, case_value, ""); LLVMBuildCondBr(s->builder, cmp, dest, else_block); from[j] = curr; From 8a72e22f03b12ab8c8db3d112046d6150942bdcc Mon Sep 17 00:00:00 2001 From: gingerBill Date: Sun, 4 Oct 2026 19:14:17 +0100 Subject: [PATCH 209/215] Allow `using` on `#soa` pointers, and make the fields a `using` `#soa` pointer parameter promotes assignable --- src/check_decl.cpp | 2 +- src/check_stmt.cpp | 2 +- src/check_type.cpp | 3 +-- 3 files changed, 3 insertions(+), 4 deletions(-) diff --git a/src/check_decl.cpp b/src/check_decl.cpp index 2c225c61f..70d4602b1 100644 --- a/src/check_decl.cpp +++ b/src/check_decl.cpp @@ -2425,7 +2425,7 @@ gb_internal bool check_proc_body(CheckerContext *ctx_, Token token, DeclInfo *de break; } - bool is_value = (e->flags & EntityFlag_Value) != 0 && !is_type_pointer(e->type); + bool is_value = (e->flags & EntityFlag_Value) != 0 && !is_type_pointer(e->type) && !is_type_soa_pointer(e->type); String name = e->token.string; Type *t = base_type(type_deref(e->type)); if (t->kind == Type_Struct) { diff --git a/src/check_stmt.cpp b/src/check_stmt.cpp index 1a8d90a1e..2c96089b9 100644 --- a/src/check_stmt.cpp +++ b/src/check_stmt.cpp @@ -846,7 +846,7 @@ gb_internal bool check_using_stmt_entity(CheckerContext *ctx, AstUsingStmt *us, } case Entity_Variable: { - bool is_ptr = is_type_pointer(e->type); + bool is_ptr = is_type_pointer(e->type) || is_type_soa_pointer(e->type); Type *t = base_type(type_deref(e->type)); if (t->kind == Type_Struct) { wait_for_record_signal(&t->Struct.fields_wait_signal, &t->Struct.checking_thread); diff --git a/src/check_type.cpp b/src/check_type.cpp index c1ec7f152..74d9e0c2e 100644 --- a/src/check_type.cpp +++ b/src/check_type.cpp @@ -232,10 +232,9 @@ gb_internal void check_struct_fields(CheckerContext *ctx, Ast *node, Slicenames.count > 0) { Type *first_type = fields_array[fields_array.count-1]->type; - bool soa_ptr = is_type_soa_pointer(first_type); Type *t = base_type(type_deref(first_type)); - if ((soa_ptr || !does_field_type_allow_using(t)) && + if (!does_field_type_allow_using(t) && p->names.count >= 1 && p->names[0]->kind == Ast_Ident) { Token name_token = p->names[0]->Ident.token; From 49578678900a303fd3a383dd73f9ea9a8fc0deb6 Mon Sep 17 00:00:00 2001 From: gingerBill Date: Sun, 4 Oct 2026 19:16:24 +0100 Subject: [PATCH 210/215] Update test_core_runtime.odin --- tests/core/runtime/test_core_runtime.odin | 76 +++++++++++++++++++++++ 1 file changed, 76 insertions(+) diff --git a/tests/core/runtime/test_core_runtime.odin b/tests/core/runtime/test_core_runtime.odin index abdb340f0..980cc0851 100644 --- a/tests/core/runtime/test_core_runtime.odin +++ b/tests/core/runtime/test_core_runtime.odin @@ -937,6 +937,82 @@ test_soa_pointer_using_field :: proc(t: ^testing.T) { testing.expect_value(t, dyn.foo[1].bar, 7) } +// `using` on an #soa pointer, as a field, a parameter and a statement +@(test) +test_soa_pointer_using :: proc(t: ^testing.T) { + Base :: struct { + id: int, + tag: u8, + } + Entity :: struct { + translation: [3]f32, + using base: Base, + velocity: [1]f32, + } + Player :: struct { + foo: i32, + using entity: #soa^#soa[dynamic]Entity, + } + Boss :: struct { + using player: Player, + } + Fixed_Player :: struct { + using entity: #soa^#soa[4]Entity, + } + + entities: #soa[dynamic]Entity + defer delete(entities) + for i in 0..<3 { + append_soa(&entities, Entity{base = {id = i}}) + } + + player := Player{foo = 3, entity = &entities[1]} + player.velocity = 2 + player.translation.y = 9 + player.id += 100 + v := &player.translation + v.z = 7 + pp := &player + pp.tag = 99 + testing.expect_value(t, entities[1].velocity, [1]f32{2}) + testing.expect_value(t, entities[1].translation, [3]f32{0, 9, 7}) + testing.expect_value(t, entities[1].id, 101) + testing.expect_value(t, entities[1].tag, 99) + testing.expect_value(t, entities[0].velocity, [1]f32{0}) + testing.expect_value(t, entities[0].id, 0) + + boss := Boss{player = {entity = &entities[2]}} + boss.velocity = 4 + testing.expect_value(t, entities[2].velocity, [1]f32{4}) + + get_id :: proc(e: #soa^#soa[dynamic]Entity) -> int { + return e.id + } + testing.expect_value(t, get_id(player), 101) + testing.expect_value(t, get_id(boss), 2) + + step :: proc(using e: #soa^#soa[dynamic]Entity) { + velocity = 5 + translation.x = 1 + } + step(&entities[0]) + testing.expect_value(t, entities[0].velocity, [1]f32{5}) + testing.expect_value(t, entities[0].translation.x, 1) + + step_stmt :: proc(e: #soa^#soa[dynamic]Entity) { + using e + tag = 7 + } + step_stmt(&entities[0]) + testing.expect_value(t, entities[0].tag, 7) + + fixed: #soa[4]Entity + fp := Fixed_Player{entity = &fixed[3]} + fp.velocity = 6 + testing.expect_value(t, fixed[3].velocity, [1]f32{6}) + testing.expect_value(t, fixed[2].velocity, [1]f32{0}) +} + @(test) test_soa_array_allocator_resize :: proc(t: ^testing.T) { From 2b82056df27296851cf60281855538a7aff0e764 Mon Sep 17 00:00:00 2001 From: Matthias Huerbe Date: Sun, 4 Oct 2026 22:08:37 +0200 Subject: [PATCH 211/215] Fix -linker:radlink being rejected on Windows --- src/build_settings.cpp | 2 +- src/linker.cpp | 5 ++++- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/src/build_settings.cpp b/src/build_settings.cpp index af5576011..8a6bb7ffe 100644 --- a/src/build_settings.cpp +++ b/src/build_settings.cpp @@ -2346,7 +2346,7 @@ gb_internal bool init_build_paths(String init_filename) { return false; } - if (build_context.linker_choice == Linker_Default && find_result.vs_exe_path.len == 0) { + if (build_context.linker_choice == Linker_msvc && find_result.vs_exe_path.len == 0) { gb_printf_err("link.exe not found.\n"); return false; } diff --git a/src/linker.cpp b/src/linker.cpp index 643a9a4d0..7a36a7946 100644 --- a/src/linker.cpp +++ b/src/linker.cpp @@ -69,7 +69,7 @@ gb_internal i32 system_exec_msvc_linker_app(char const *name, char const *fmt, . gb_printf_err("Failed to create linker response file: %s\n", rsp_path); return -1; } - if (build_context.linker_choice != Linker_radlink) { + if (build_context.linker_choice != Linker_Default && build_context.linker_choice != Linker_radlink) { // NOTE(bill): link.exe reads a response file without a BOM in the ANSI code page but radlink does not skip a BOM gb_file_write(&f, "\xef\xbb\xbf", 3); } @@ -244,6 +244,9 @@ try_cross_linking:; switch (build_context.linker_choice) { case Linker_Default: break; case Linker_lld: section_name = str_lit("lld-link"); break; + #if defined(GB_SYSTEM_WINDOWS) + case Linker_radlink: break; + #endif #if defined(GB_SYSTEM_LINUX) || defined(GB_SYSTEM_FREEBSD) || defined(GB_SYSTEM_NETBSD) case Linker_mold: section_name = str_lit("mold-link"); break; #endif From 6fd8888986e5458456912f66dfd168defdfd407a Mon Sep 17 00:00:00 2001 From: Alexander Zhura Date: Mon, 5 Oct 2026 10:03:06 +0300 Subject: [PATCH 212/215] Impl simd x86 sse2 _mm_insert_epi16 fix --- core/simd/x86/sse2.odin | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/core/simd/x86/sse2.odin b/core/simd/x86/sse2.odin index 4c231c377..fba995720 100644 --- a/core/simd/x86/sse2.odin +++ b/core/simd/x86/sse2.odin @@ -482,10 +482,15 @@ _mm_packus_epi16 :: #force_inline proc "c" (a, b: __m128i) -> __m128i { _mm_extract_epi16 :: #force_inline proc "c" (a: __m128i, $IMM8: u32) -> i32 { return i32(simd.extract(transmute(u16x8)a, IMM8)) } + +// Copy `a` to `dst`, and insert the 16-bit integer `i` into `dst` at the location specified by `imm8`. +// +// [Intel's documentation](https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_insert_epi16) @(require_results, enable_target_feature="sse2") -_mm_insert_epi16 :: #force_inline proc "c" (a: __m128i, i: i32, $IMM8: u32) -> __m128i { - return i32(simd.replace(transmute(u16x8)a, IMM8, i16(i))) +_mm_insert_epi16 :: #force_inline proc "c" (a: __m128i, i: i32, $IMM8: i32) -> __m128i where 0 <= IMM8, IMM8 < 8 { + return transmute(__m128i)simd.replace(transmute(simd.i16x8)a, uint(IMM8), i16(i)) } + @(require_results, enable_target_feature="sse2") _mm_movemask_epi8 :: #force_inline proc "c" (a: __m128i) -> i32 { return pmovmskb(transmute(i8x16)a) From a496d00f69259bfe02be06c3baca24c947c16eec Mon Sep 17 00:00:00 2001 From: bplu4t2f Date: Mon, 5 Oct 2026 10:41:27 +0200 Subject: [PATCH 213/215] Fix incorrect number of bytes written when formatting floats with `h`/`H` --- core/fmt/fmt.odin | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/core/fmt/fmt.odin b/core/fmt/fmt.odin index a2e6d2247..385526a6b 100644 --- a/core/fmt/fmt.odin +++ b/core/fmt/fmt.odin @@ -1461,8 +1461,17 @@ fmt_float :: proc(fi: ^Info, v: f64, bit_size: int, verb: rune) { _fmt_float_as(fi, v, bit_size, verb, 'E', 6) case 'h', 'H': - prev_fi := fi^ - defer fi^ = prev_fi + prev_hash := fi.hash + defer fi.hash = prev_hash + prev_zero := fi.zero + defer fi.zero = prev_zero + prev_plus := fi.plus + defer fi.plus = prev_plus + prev_width := fi.width + defer fi.width = prev_width + prev_width_set := fi.width_set + defer fi.width_set = prev_width_set + fi.hash = false fi.zero = true fi.plus = false From e6d352495cc697c123de2bcf5aa9bb8472f1785d Mon Sep 17 00:00:00 2001 From: pJotoro <50463913+pJotoro@users.noreply.github.com> Date: Mon, 5 Oct 2026 11:28:11 +0200 Subject: [PATCH 214/215] Add GetCursor and GetDpiForSystem procedures --- core/sys/windows/user32.odin | 2 ++ 1 file changed, 2 insertions(+) diff --git a/core/sys/windows/user32.odin b/core/sys/windows/user32.odin index 75ed1e91b..5006c0671 100644 --- a/core/sys/windows/user32.odin +++ b/core/sys/windows/user32.odin @@ -205,6 +205,7 @@ foreign user32 { ClipCursor :: proc(lpRect: LPRECT) -> BOOL --- GetCursorPos :: proc(lpPoint: LPPOINT) -> BOOL --- SetCursorPos :: proc(X, Y: INT) -> BOOL --- + GetCursor :: proc() -> HCURSOR --- SetCursor :: proc(hCursor: HCURSOR) -> HCURSOR --- when !intrinsics.is_package_imported("raylib") { ShowCursor :: proc(bShow: BOOL) -> INT --- @@ -229,6 +230,7 @@ foreign user32 { GetThreadDpiAwarenessContext :: proc() -> DPI_AWARENESS_CONTEXT --- GetWindowDpiAwarenessContext :: proc(hwnd: HWND) -> DPI_AWARENESS_CONTEXT --- GetDpiFromDpiAwarenessContext :: proc(value: DPI_AWARENESS_CONTEXT) -> UINT --- + GetDpiForSystem :: proc() -> UINT --- GetDpiForWindow :: proc(hwnd: HWND) -> UINT --- SetProcessDpiAwarenessContext :: proc(value: DPI_AWARENESS_CONTEXT) -> BOOL --- From bd37cf8bddec935a7cc59c1043ebd6266539448f Mon Sep 17 00:00:00 2001 From: Jeroen van Rijn Date: Mon, 5 Oct 2026 12:42:16 +0200 Subject: [PATCH 215/215] Upgrade Ubuntu CI to LLVM 22 --- .github/workflows/ci.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 0bfcce1bb..faf517e80 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -102,8 +102,8 @@ jobs: run: | wget https://apt.llvm.org/llvm.sh chmod +x llvm.sh - sudo ./llvm.sh 20 - echo "/usr/lib/llvm-20/bin" >> $GITHUB_PATH + sudo ./llvm.sh 22 + echo "/usr/lib/llvm-22/bin" >> $GITHUB_PATH - name: Build Odin run: ./build_odin.sh release - name: Odin version

PC}$lrBk-BkoXA+cK!DE&Y#d%MxYtW$sa0^I>Xh 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�n3+^vXv+yEnI#Wu4_x}xpeN~@i9G3)bonm(_f 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 literal 991936 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 z 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Μg4%IwNA(H%oyGrhH8v)iT&=~IwD(M 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